@c80/ui 1.0.44 → 1.0.45

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.
Files changed (78) hide show
  1. package/c80-ui.d.ts +5 -0
  2. package/esm2022/c80-ui.js +5 -0
  3. package/esm2022/c80-ui.js.map +1 -0
  4. package/esm2022/index.js +6 -0
  5. package/esm2022/index.js.map +1 -0
  6. package/esm2022/lib/card-level/card-level.component.js +56 -0
  7. package/esm2022/lib/card-level/card-level.component.js.map +1 -0
  8. package/esm2022/lib/card-level/card-level.interface.js +2 -0
  9. package/esm2022/lib/card-level/card-level.interface.js.map +1 -0
  10. package/esm2022/lib/card-level/index.js +3 -0
  11. package/esm2022/lib/card-level/index.js.map +1 -0
  12. package/esm2022/lib/icon/icon.component.js +48 -0
  13. package/esm2022/lib/icon/icon.component.js.map +1 -0
  14. package/esm2022/lib/icon/icon.constants.js +237 -0
  15. package/esm2022/lib/icon/icon.constants.js.map +1 -0
  16. package/esm2022/lib/icon/icon.types.js +2 -0
  17. package/esm2022/lib/icon/icon.types.js.map +1 -0
  18. package/esm2022/lib/icon/icon.utils.js +4 -0
  19. package/esm2022/lib/icon/icon.utils.js.map +1 -0
  20. package/esm2022/lib/icon/index.js +4 -0
  21. package/esm2022/lib/icon/index.js.map +1 -0
  22. package/esm2022/lib/modal/index.js +3 -0
  23. package/esm2022/lib/modal/index.js.map +1 -0
  24. package/esm2022/lib/modal/modal.component.js +86 -0
  25. package/esm2022/lib/modal/modal.component.js.map +1 -0
  26. package/esm2022/lib/modal/modal.service.js +83 -0
  27. package/esm2022/lib/modal/modal.service.js.map +1 -0
  28. package/esm2022/lib/stat-card/index.js +2 -0
  29. package/esm2022/lib/stat-card/index.js.map +1 -0
  30. package/esm2022/lib/stat-card/stat-card.component.js +13 -0
  31. package/esm2022/lib/stat-card/stat-card.component.js.map +1 -0
  32. package/esm2022/lib/table/index.js +9 -0
  33. package/esm2022/lib/table/index.js.map +1 -0
  34. package/esm2022/lib/table/table-column-visibility.service.js +105 -0
  35. package/esm2022/lib/table/table-column-visibility.service.js.map +1 -0
  36. package/esm2022/lib/table/table-crud-state.service.js +115 -0
  37. package/esm2022/lib/table/table-crud-state.service.js.map +1 -0
  38. package/esm2022/lib/table/table-data-converter.service.js +145 -0
  39. package/esm2022/lib/table/table-data-converter.service.js.map +1 -0
  40. package/esm2022/lib/table/table-data-utils.service.js +193 -0
  41. package/esm2022/lib/table/table-data-utils.service.js.map +1 -0
  42. package/esm2022/lib/table/table-selection.service.js +121 -0
  43. package/esm2022/lib/table/table-selection.service.js.map +1 -0
  44. package/esm2022/lib/table/table.component.js +413 -0
  45. package/esm2022/lib/table/table.component.js.map +1 -0
  46. package/esm2022/lib/table/table.types.js +5 -0
  47. package/esm2022/lib/table/table.types.js.map +1 -0
  48. package/esm2022/lib/table/table.utils.js +107 -0
  49. package/esm2022/lib/table/table.utils.js.map +1 -0
  50. package/lib/icon/icon.component.d.ts +2 -2
  51. package/lib/modal/index.d.ts +2 -3
  52. package/lib/stat-card/stat-card.component.d.ts +2 -2
  53. package/lib/table/table.component.d.ts +10 -13
  54. package/package.json +7 -9
  55. package/esm2022/c80-ui.mjs +0 -5
  56. package/esm2022/index.mjs +0 -6
  57. package/esm2022/lib/card-level/card-level.component.mjs +0 -57
  58. package/esm2022/lib/card-level/card-level.interface.mjs +0 -2
  59. package/esm2022/lib/card-level/index.mjs +0 -3
  60. package/esm2022/lib/icon/icon.component.mjs +0 -49
  61. package/esm2022/lib/icon/icon.constants.mjs +0 -237
  62. package/esm2022/lib/icon/icon.types.mjs +0 -2
  63. package/esm2022/lib/icon/icon.utils.mjs +0 -4
  64. package/esm2022/lib/icon/index.mjs +0 -4
  65. package/esm2022/lib/modal/index.mjs +0 -3
  66. package/esm2022/lib/modal/modal.component.mjs +0 -86
  67. package/esm2022/lib/modal/modal.service.mjs +0 -83
  68. package/esm2022/lib/stat-card/index.mjs +0 -2
  69. package/esm2022/lib/stat-card/stat-card.component.mjs +0 -16
  70. package/esm2022/lib/table/index.mjs +0 -9
  71. package/esm2022/lib/table/table-column-visibility.service.mjs +0 -105
  72. package/esm2022/lib/table/table-crud-state.service.mjs +0 -115
  73. package/esm2022/lib/table/table-data-converter.service.mjs +0 -145
  74. package/esm2022/lib/table/table-data-utils.service.mjs +0 -193
  75. package/esm2022/lib/table/table-selection.service.mjs +0 -121
  76. package/esm2022/lib/table/table.component.mjs +0 -432
  77. package/esm2022/lib/table/table.types.mjs +0 -5
  78. package/esm2022/lib/table/table.utils.mjs +0 -107
@@ -1,121 +0,0 @@
1
- import { Injectable, signal } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * Servicio para gestionar la selección de elementos en tablas C80
5
- *
6
- * Maneja:
7
- * - Selección simple y múltiple
8
- * - Estado de selección completa
9
- * - Preservación de selección tras actualizaciones de datos
10
- * - Emisión de eventos de selección
11
- */
12
- export class TableSelectionService {
13
- /**
14
- * Inicializa el estado de selección para una nueva tabla
15
- * @returns Objeto con signals y métodos de selección
16
- */
17
- createSelectionState() {
18
- const selectedItems = signal(new Set());
19
- const selectAllChecked = signal(false);
20
- const selectAllIndeterminate = signal(false);
21
- const signals = { selectedItems, selectAllChecked, selectAllIndeterminate };
22
- return {
23
- selectedItems: selectedItems.asReadonly(),
24
- selectAllChecked: selectAllChecked.asReadonly(),
25
- selectAllIndeterminate: selectAllIndeterminate.asReadonly(),
26
- clearSelection: () => this.clearSelection(signals),
27
- toggleSelectAll: (allItems) => this.toggleSelectAll(signals, allItems),
28
- toggleItemSelection: (item, multiple) => this.toggleItemSelection(selectedItems, item, multiple),
29
- isItemSelected: (item) => this.isItemSelected(selectedItems, item),
30
- preserveSelection: (newData) => this.preserveSelection(signals, newData),
31
- getSelectedItems: (allData) => this.getSelectedItems(selectedItems, allData),
32
- };
33
- }
34
- clearSelection(signals) {
35
- signals.selectedItems.set(new Set());
36
- signals.selectAllChecked.set(false);
37
- signals.selectAllIndeterminate.set(false);
38
- }
39
- toggleSelectAll(signals, allItems) {
40
- const currentSelection = signals.selectedItems();
41
- if (currentSelection.size === allItems.length) {
42
- signals.selectedItems.set(new Set());
43
- signals.selectAllChecked.set(false);
44
- signals.selectAllIndeterminate.set(false);
45
- }
46
- else {
47
- const allIds = new Set(allItems.map(item => item['id']));
48
- signals.selectedItems.set(allIds);
49
- this.updateSelectAllState(allItems, allIds.size, signals.selectAllChecked, signals.selectAllIndeterminate);
50
- }
51
- }
52
- toggleItemSelection(selectedItems, item, multiple) {
53
- const id = item['id'];
54
- const currentSelection = new Set(selectedItems());
55
- if (!multiple) {
56
- currentSelection.clear();
57
- if (!selectedItems().has(id)) {
58
- currentSelection.add(id);
59
- }
60
- }
61
- else if (currentSelection.has(id)) {
62
- currentSelection.delete(id);
63
- }
64
- else {
65
- currentSelection.add(id);
66
- }
67
- selectedItems.set(currentSelection);
68
- }
69
- isItemSelected(selectedItems, item) {
70
- return selectedItems().has(item['id']);
71
- }
72
- preserveSelection(signals, newData) {
73
- const currentSelection = signals.selectedItems();
74
- if (currentSelection.size === 0 || newData.length === 0) {
75
- this.clearSelection(signals);
76
- return;
77
- }
78
- const availableIds = new Set(newData.map(item => item['id']));
79
- const preservedSelection = new Set(Array.from(currentSelection).filter(id => availableIds.has(id)));
80
- signals.selectedItems.set(preservedSelection);
81
- this.updateSelectAllState(newData, preservedSelection.size, signals.selectAllChecked, signals.selectAllIndeterminate);
82
- }
83
- getSelectedItems(selectedItems, allData) {
84
- const selectedIds = selectedItems();
85
- return allData.filter(item => selectedIds.has(item['id']));
86
- }
87
- updateSelectAllState(allItems, selectedCount, selectAllChecked, selectAllIndeterminate) {
88
- const totalCount = allItems.length;
89
- if (selectedCount === 0) {
90
- selectAllChecked.set(false);
91
- selectAllIndeterminate.set(false);
92
- }
93
- else if (selectedCount === totalCount) {
94
- selectAllChecked.set(true);
95
- selectAllIndeterminate.set(false);
96
- }
97
- else {
98
- selectAllChecked.set(false);
99
- selectAllIndeterminate.set(true);
100
- }
101
- }
102
- /**
103
- * Emite los elementos seleccionados a través del output proporcionado
104
- * @param selectionState - Estado de selección
105
- * @param allData - Todos los datos de la tabla
106
- * @param selectableEmitter - Output para emitir la selección
107
- */
108
- emitSelection(selectionState, allData, selectableEmitter) {
109
- const selectedItems = selectionState.getSelectedItems(allData);
110
- selectableEmitter.emit(selectedItems);
111
- }
112
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
113
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableSelectionService, providedIn: 'root' });
114
- }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableSelectionService, decorators: [{
116
- type: Injectable,
117
- args: [{
118
- providedIn: 'root'
119
- }]
120
- }] });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvdGFibGUvdGFibGUtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQW9CLE1BQU0sZUFBZSxDQUFDOztBQUVyRTs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFFaEM7OztPQUdHO0lBQ0gsb0JBQW9CO1FBQ2xCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBYyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsTUFBTSxPQUFPLEdBQUcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztRQUU1RSxPQUFPO1lBQ0wsYUFBYSxFQUFFLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDekMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO1lBQy9DLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLFVBQVUsRUFBRTtZQUMzRCxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsZUFBZSxFQUFFLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7WUFDM0UsbUJBQW1CLEVBQUUsQ0FBQyxJQUFPLEVBQUUsUUFBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO1lBQzVHLGNBQWMsRUFBRSxDQUFDLElBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO1lBQ3JFLGlCQUFpQixFQUFFLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUM3RSxnQkFBZ0IsRUFBRSxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7U0FDbEYsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsT0FJdEI7UUFDQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxlQUFlLENBQ3JCLE9BSUMsRUFDRCxRQUFhO1FBRWIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFakQsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNyQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRSxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdHLENBQUM7SUFDSCxDQUFDO0lBRU8sbUJBQW1CLENBQ3pCLGFBQXFELEVBQ3JELElBQU8sRUFDUCxRQUFpQjtRQUVqQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFXLENBQUM7UUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELGFBQWEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sY0FBYyxDQUNwQixhQUFxRCxFQUNyRCxJQUFPO1FBRVAsT0FBTyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGlCQUFpQixDQUN2QixPQUlDLEVBQ0QsT0FBWTtRQUVaLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWpELElBQUksZ0JBQWdCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0IsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNoRSxDQUFDO1FBRUYsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUVPLGdCQUFnQixDQUN0QixhQUFxRCxFQUNyRCxPQUFZO1FBRVosTUFBTSxXQUFXLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDcEMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsUUFBYSxFQUNiLGFBQXFCLEVBQ3JCLGdCQUFvRCxFQUNwRCxzQkFBMEQ7UUFFMUQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUVuQyxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0Isc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ04sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUNYLGNBQTJELEVBQzNELE9BQVksRUFDWixpQkFBd0M7UUFFeEMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxDQUFDO3dHQXZKVSxxQkFBcUI7NEdBQXJCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBPdXRwdXRFbWl0dGVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBnZXN0aW9uYXIgbGEgc2VsZWNjacOzbiBkZSBlbGVtZW50b3MgZW4gdGFibGFzIEM4MFxuICpcbiAqIE1hbmVqYTpcbiAqIC0gU2VsZWNjacOzbiBzaW1wbGUgeSBtw7psdGlwbGVcbiAqIC0gRXN0YWRvIGRlIHNlbGVjY2nDs24gY29tcGxldGFcbiAqIC0gUHJlc2VydmFjacOzbiBkZSBzZWxlY2Npw7NuIHRyYXMgYWN0dWFsaXphY2lvbmVzIGRlIGRhdG9zXG4gKiAtIEVtaXNpw7NuIGRlIGV2ZW50b3MgZGUgc2VsZWNjacOzblxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVNlbGVjdGlvblNlcnZpY2Uge1xuXG4gIC8qKlxuICAgKiBJbmljaWFsaXphIGVsIGVzdGFkbyBkZSBzZWxlY2Npw7NuIHBhcmEgdW5hIG51ZXZhIHRhYmxhXG4gICAqIEByZXR1cm5zIE9iamV0byBjb24gc2lnbmFscyB5IG3DqXRvZG9zIGRlIHNlbGVjY2nDs25cbiAgICovXG4gIGNyZWF0ZVNlbGVjdGlvblN0YXRlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbiAgICBjb25zdCBzZWxlY3RBbGxDaGVja2VkID0gc2lnbmFsKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIGNvbnN0IHNpZ25hbHMgPSB7IHNlbGVjdGVkSXRlbXMsIHNlbGVjdEFsbENoZWNrZWQsIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3RlZEl0ZW1zOiBzZWxlY3RlZEl0ZW1zLmFzUmVhZG9ubHkoKSxcbiAgICAgIHNlbGVjdEFsbENoZWNrZWQ6IHNlbGVjdEFsbENoZWNrZWQuYXNSZWFkb25seSgpLFxuICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZTogc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5hc1JlYWRvbmx5KCksXG4gICAgICBjbGVhclNlbGVjdGlvbjogKCkgPT4gdGhpcy5jbGVhclNlbGVjdGlvbihzaWduYWxzKSxcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbDogKGFsbEl0ZW1zOiBUW10pID0+IHRoaXMudG9nZ2xlU2VsZWN0QWxsKHNpZ25hbHMsIGFsbEl0ZW1zKSxcbiAgICAgIHRvZ2dsZUl0ZW1TZWxlY3Rpb246IChpdGVtOiBULCBtdWx0aXBsZTogYm9vbGVhbikgPT4gdGhpcy50b2dnbGVJdGVtU2VsZWN0aW9uKHNlbGVjdGVkSXRlbXMsIGl0ZW0sIG11bHRpcGxlKSxcbiAgICAgIGlzSXRlbVNlbGVjdGVkOiAoaXRlbTogVCkgPT4gdGhpcy5pc0l0ZW1TZWxlY3RlZChzZWxlY3RlZEl0ZW1zLCBpdGVtKSxcbiAgICAgIHByZXNlcnZlU2VsZWN0aW9uOiAobmV3RGF0YTogVFtdKSA9PiB0aGlzLnByZXNlcnZlU2VsZWN0aW9uKHNpZ25hbHMsIG5ld0RhdGEpLFxuICAgICAgZ2V0U2VsZWN0ZWRJdGVtczogKGFsbERhdGE6IFRbXSkgPT4gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zKHNlbGVjdGVkSXRlbXMsIGFsbERhdGEpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2VsZWN0aW9uKHNpZ25hbHM6IHtcbiAgICBzZWxlY3RlZEl0ZW1zOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8U2V0PHN0cmluZz4+PjtcbiAgICBzZWxlY3RBbGxDaGVja2VkOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+O1xuICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGU6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj47XG4gIH0pOiB2b2lkIHtcbiAgICBzaWduYWxzLnNlbGVjdGVkSXRlbXMuc2V0KG5ldyBTZXQoKSk7XG4gICAgc2lnbmFscy5zZWxlY3RBbGxDaGVja2VkLnNldChmYWxzZSk7XG4gICAgc2lnbmFscy5zZWxlY3RBbGxJbmRldGVybWluYXRlLnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVNlbGVjdEFsbDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIHNpZ25hbHM6IHtcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxTZXQ8c3RyaW5nPj4+O1xuICAgICAgc2VsZWN0QWxsQ2hlY2tlZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PjtcbiAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGU6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj47XG4gICAgfSxcbiAgICBhbGxJdGVtczogVFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSBzaWduYWxzLnNlbGVjdGVkSXRlbXMoKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLnNpemUgPT09IGFsbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgc2lnbmFscy5zZWxlY3RlZEl0ZW1zLnNldChuZXcgU2V0KCkpO1xuICAgICAgc2lnbmFscy5zZWxlY3RBbGxDaGVja2VkLnNldChmYWxzZSk7XG4gICAgICBzaWduYWxzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWxsSWRzID0gbmV3IFNldChhbGxJdGVtcy5tYXAoaXRlbSA9PiBpdGVtWydpZCddIGFzIHN0cmluZykpO1xuICAgICAgc2lnbmFscy5zZWxlY3RlZEl0ZW1zLnNldChhbGxJZHMpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxTdGF0ZShhbGxJdGVtcywgYWxsSWRzLnNpemUsIHNpZ25hbHMuc2VsZWN0QWxsQ2hlY2tlZCwgc2lnbmFscy5zZWxlY3RBbGxJbmRldGVybWluYXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUl0ZW1TZWxlY3Rpb248VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBzZWxlY3RlZEl0ZW1zOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8U2V0PHN0cmluZz4+PixcbiAgICBpdGVtOiBULFxuICAgIG11bHRpcGxlOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gaXRlbVsnaWQnXSBhcyBzdHJpbmc7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IG5ldyBTZXQoc2VsZWN0ZWRJdGVtcygpKTtcblxuICAgIGlmICghbXVsdGlwbGUpIHtcbiAgICAgIGN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIGlmICghc2VsZWN0ZWRJdGVtcygpLmhhcyhpZCkpIHtcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbi5hZGQoaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3VycmVudFNlbGVjdGlvbi5oYXMoaWQpKSB7XG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZEl0ZW1zLnNldChjdXJyZW50U2VsZWN0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJdGVtU2VsZWN0ZWQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBzZWxlY3RlZEl0ZW1zOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8U2V0PHN0cmluZz4+PixcbiAgICBpdGVtOiBUXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zKCkuaGFzKGl0ZW1bJ2lkJ10gYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlc2VydmVTZWxlY3Rpb248VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBzaWduYWxzOiB7XG4gICAgICBzZWxlY3RlZEl0ZW1zOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8U2V0PHN0cmluZz4+PjtcbiAgICAgIHNlbGVjdEFsbENoZWNrZWQ6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj47XG4gICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+O1xuICAgIH0sXG4gICAgbmV3RGF0YTogVFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSBzaWduYWxzLnNlbGVjdGVkSXRlbXMoKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLnNpemUgPT09IDAgfHwgbmV3RGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oc2lnbmFscyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXZhaWxhYmxlSWRzID0gbmV3IFNldChuZXdEYXRhLm1hcChpdGVtID0+IGl0ZW1bJ2lkJ10gYXMgc3RyaW5nKSk7XG4gICAgY29uc3QgcHJlc2VydmVkU2VsZWN0aW9uID0gbmV3IFNldChcbiAgICAgIEFycmF5LmZyb20oY3VycmVudFNlbGVjdGlvbikuZmlsdGVyKGlkID0+IGF2YWlsYWJsZUlkcy5oYXMoaWQpKVxuICAgICk7XG5cbiAgICBzaWduYWxzLnNlbGVjdGVkSXRlbXMuc2V0KHByZXNlcnZlZFNlbGVjdGlvbik7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RBbGxTdGF0ZShuZXdEYXRhLCBwcmVzZXJ2ZWRTZWxlY3Rpb24uc2l6ZSwgc2lnbmFscy5zZWxlY3RBbGxDaGVja2VkLCBzaWduYWxzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZEl0ZW1zPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgc2VsZWN0ZWRJdGVtczogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFNldDxzdHJpbmc+Pj4sXG4gICAgYWxsRGF0YTogVFtdXG4gICk6IFRbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBzZWxlY3RlZEl0ZW1zKCk7XG4gICAgcmV0dXJuIGFsbERhdGEuZmlsdGVyKGl0ZW0gPT4gc2VsZWN0ZWRJZHMuaGFzKGl0ZW1bJ2lkJ10gYXMgc3RyaW5nKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdEFsbFN0YXRlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgYWxsSXRlbXM6IFRbXSxcbiAgICBzZWxlY3RlZENvdW50OiBudW1iZXIsXG4gICAgc2VsZWN0QWxsQ2hlY2tlZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PixcbiAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSBhbGxJdGVtcy5sZW5ndGg7XG5cbiAgICBpZiAoc2VsZWN0ZWRDb3VudCA9PT0gMCkge1xuICAgICAgc2VsZWN0QWxsQ2hlY2tlZC5zZXQoZmFsc2UpO1xuICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDb3VudCA9PT0gdG90YWxDb3VudCkge1xuICAgICAgc2VsZWN0QWxsQ2hlY2tlZC5zZXQodHJ1ZSk7XG4gICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlLnNldChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0ZSBsb3MgZWxlbWVudG9zIHNlbGVjY2lvbmFkb3MgYSB0cmF2w6lzIGRlbCBvdXRwdXQgcHJvcG9yY2lvbmFkb1xuICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhdGUgLSBFc3RhZG8gZGUgc2VsZWNjacOzblxuICAgKiBAcGFyYW0gYWxsRGF0YSAtIFRvZG9zIGxvcyBkYXRvcyBkZSBsYSB0YWJsYVxuICAgKiBAcGFyYW0gc2VsZWN0YWJsZUVtaXR0ZXIgLSBPdXRwdXQgcGFyYSBlbWl0aXIgbGEgc2VsZWNjacOzblxuICAgKi9cbiAgZW1pdFNlbGVjdGlvbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIHNlbGVjdGlvblN0YXRlOiB7IGdldFNlbGVjdGVkSXRlbXM6IChhbGxEYXRhOiBUW10pID0+IFRbXSB9LFxuICAgIGFsbERhdGE6IFRbXSxcbiAgICBzZWxlY3RhYmxlRW1pdHRlcjogT3V0cHV0RW1pdHRlclJlZjxUW10+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBzZWxlY3Rpb25TdGF0ZS5nZXRTZWxlY3RlZEl0ZW1zKGFsbERhdGEpO1xuICAgIHNlbGVjdGFibGVFbWl0dGVyLmVtaXQoc2VsZWN0ZWRJdGVtcyk7XG4gIH1cbn1cbiJdfQ==