@c80/ui 1.0.44 → 1.0.46
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/c80-ui.d.ts +5 -0
- package/esm2022/c80-ui.js +5 -0
- package/esm2022/c80-ui.js.map +1 -0
- package/esm2022/index.js +6 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/lib/card-level/card-level.component.js +56 -0
- package/esm2022/lib/card-level/card-level.component.js.map +1 -0
- package/esm2022/lib/card-level/card-level.interface.js +2 -0
- package/esm2022/lib/card-level/card-level.interface.js.map +1 -0
- package/esm2022/lib/card-level/index.js +3 -0
- package/esm2022/lib/card-level/index.js.map +1 -0
- package/esm2022/lib/icon/icon.component.js +48 -0
- package/esm2022/lib/icon/icon.component.js.map +1 -0
- package/esm2022/lib/icon/icon.constants.js +237 -0
- package/esm2022/lib/icon/icon.constants.js.map +1 -0
- package/esm2022/lib/icon/icon.types.js +2 -0
- package/esm2022/lib/icon/icon.types.js.map +1 -0
- package/esm2022/lib/icon/icon.utils.js +4 -0
- package/esm2022/lib/icon/icon.utils.js.map +1 -0
- package/esm2022/lib/icon/index.js +4 -0
- package/esm2022/lib/icon/index.js.map +1 -0
- package/esm2022/lib/modal/index.js +3 -0
- package/esm2022/lib/modal/index.js.map +1 -0
- package/esm2022/lib/modal/modal.component.js +86 -0
- package/esm2022/lib/modal/modal.component.js.map +1 -0
- package/esm2022/lib/modal/modal.service.js +83 -0
- package/esm2022/lib/modal/modal.service.js.map +1 -0
- package/esm2022/lib/stat-card/index.js +2 -0
- package/esm2022/lib/stat-card/index.js.map +1 -0
- package/esm2022/lib/stat-card/stat-card.component.js +13 -0
- package/esm2022/lib/stat-card/stat-card.component.js.map +1 -0
- package/esm2022/lib/table/index.js +9 -0
- package/esm2022/lib/table/index.js.map +1 -0
- package/esm2022/lib/table/table-column-visibility.service.js +105 -0
- package/esm2022/lib/table/table-column-visibility.service.js.map +1 -0
- package/esm2022/lib/table/table-crud-state.service.js +115 -0
- package/esm2022/lib/table/table-crud-state.service.js.map +1 -0
- package/esm2022/lib/table/table-data-converter.service.js +145 -0
- package/esm2022/lib/table/table-data-converter.service.js.map +1 -0
- package/esm2022/lib/table/table-data-utils.service.js +193 -0
- package/esm2022/lib/table/table-data-utils.service.js.map +1 -0
- package/esm2022/lib/table/table-selection.service.js +121 -0
- package/esm2022/lib/table/table-selection.service.js.map +1 -0
- package/esm2022/lib/table/table.component.js +413 -0
- package/esm2022/lib/table/table.component.js.map +1 -0
- package/esm2022/lib/table/table.types.js +5 -0
- package/esm2022/lib/table/table.types.js.map +1 -0
- package/esm2022/lib/table/table.utils.js +107 -0
- package/esm2022/lib/table/table.utils.js.map +1 -0
- package/lib/icon/icon.component.d.ts +2 -2
- package/lib/modal/index.d.ts +2 -3
- package/lib/stat-card/stat-card.component.d.ts +2 -2
- package/lib/table/table.component.d.ts +10 -13
- package/package.json +7 -9
- package/esm2022/c80-ui.mjs +0 -5
- package/esm2022/index.mjs +0 -6
- package/esm2022/lib/card-level/card-level.component.mjs +0 -57
- package/esm2022/lib/card-level/card-level.interface.mjs +0 -2
- package/esm2022/lib/card-level/index.mjs +0 -3
- package/esm2022/lib/icon/icon.component.mjs +0 -49
- package/esm2022/lib/icon/icon.constants.mjs +0 -237
- package/esm2022/lib/icon/icon.types.mjs +0 -2
- package/esm2022/lib/icon/icon.utils.mjs +0 -4
- package/esm2022/lib/icon/index.mjs +0 -4
- package/esm2022/lib/modal/index.mjs +0 -3
- package/esm2022/lib/modal/modal.component.mjs +0 -86
- package/esm2022/lib/modal/modal.service.mjs +0 -83
- package/esm2022/lib/stat-card/index.mjs +0 -2
- package/esm2022/lib/stat-card/stat-card.component.mjs +0 -16
- package/esm2022/lib/table/index.mjs +0 -9
- package/esm2022/lib/table/table-column-visibility.service.mjs +0 -105
- package/esm2022/lib/table/table-crud-state.service.mjs +0 -115
- package/esm2022/lib/table/table-data-converter.service.mjs +0 -145
- package/esm2022/lib/table/table-data-utils.service.mjs +0 -193
- package/esm2022/lib/table/table-selection.service.mjs +0 -121
- package/esm2022/lib/table/table.component.mjs +0 -432
- package/esm2022/lib/table/table.types.mjs +0 -5
- package/esm2022/lib/table/table.utils.mjs +0 -107
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Transform function para convertir valores string/boolean a boolean
|
|
3
|
-
* Usado en @Input() con transform para habilitar sintaxis de atributos booleanos
|
|
4
|
-
* @example [searchable]="true" o simplemente searchable
|
|
5
|
-
*/
|
|
6
|
-
export function booleanAttribute(value) {
|
|
7
|
-
return value === '' || value === true || value === 'true';
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Extrae mensaje de error de forma segura desde un objeto unknown
|
|
11
|
-
* @param err - Error desconocido (puede ser Error, string, object, etc.)
|
|
12
|
-
* @returns Mensaje de error legible
|
|
13
|
-
*/
|
|
14
|
-
export function getErrorMessage(err) {
|
|
15
|
-
const error = err;
|
|
16
|
-
return error?.message || 'Error al cargar datos';
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Obtiene el valor de un input HTML según el tipo de columna
|
|
20
|
-
* IMPORTANTE: Convierte el valor al tipo correcto antes de retornarlo
|
|
21
|
-
* @param event - Evento del input
|
|
22
|
-
* @param col - Definición de columna (opcional)
|
|
23
|
-
* @returns Valor extraído y convertido según el tipo de columna
|
|
24
|
-
*/
|
|
25
|
-
export function getInputValue(event, col) {
|
|
26
|
-
if (col?.type === 'boolean') {
|
|
27
|
-
return event.target.checked;
|
|
28
|
-
}
|
|
29
|
-
const target = event.target;
|
|
30
|
-
const rawValue = target?.value;
|
|
31
|
-
if (!col) {
|
|
32
|
-
return rawValue;
|
|
33
|
-
}
|
|
34
|
-
return convertInputValueByType(rawValue, col.type);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Convierte un valor de input según el tipo de columna especificado
|
|
38
|
-
* @param rawValue - Valor crudo del input (string)
|
|
39
|
-
* @param type - Tipo de columna
|
|
40
|
-
* @returns Valor convertido al tipo apropiado
|
|
41
|
-
*/
|
|
42
|
-
function convertInputValueByType(rawValue, type) {
|
|
43
|
-
if (!type || type === 'string' || type === 'password' || type === 'date') {
|
|
44
|
-
return rawValue;
|
|
45
|
-
}
|
|
46
|
-
if (type === 'integer' || type === 'number') {
|
|
47
|
-
return convertToNumber(rawValue, type === 'integer');
|
|
48
|
-
}
|
|
49
|
-
if (type === 'enum') {
|
|
50
|
-
return convertEnumValue(rawValue);
|
|
51
|
-
}
|
|
52
|
-
return rawValue;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Convierte string a number o integer
|
|
56
|
-
*/
|
|
57
|
-
function convertToNumber(value, isInteger) {
|
|
58
|
-
if (value === '' || value === null || value === undefined) {
|
|
59
|
-
return undefined;
|
|
60
|
-
}
|
|
61
|
-
const num = Number(value);
|
|
62
|
-
if (Number.isNaN(num)) {
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
return isInteger ? Math.floor(num) : num;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Convierte valor de enum (intenta convertir a número si es posible)
|
|
69
|
-
*/
|
|
70
|
-
function convertEnumValue(value) {
|
|
71
|
-
const num = Number(value);
|
|
72
|
-
return Number.isNaN(num) ? value : num;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Extrae el ID de una fila para usar como trackBy en ngFor
|
|
76
|
-
* @param index - Índice de la fila
|
|
77
|
-
* @param row - Fila de datos
|
|
78
|
-
* @returns ID como string o índice como fallback
|
|
79
|
-
*/
|
|
80
|
-
export function trackById(index, row) {
|
|
81
|
-
const id = row && typeof row === 'object' && 'id' in row
|
|
82
|
-
? row['id']
|
|
83
|
-
: undefined;
|
|
84
|
-
return typeof id === 'string' ? id : index;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Verifica si una acción debe mostrarse para una fila específica
|
|
88
|
-
* CREATE se excluye porque se maneja con el botón "+" en el header
|
|
89
|
-
* @param action - Acción a verificar
|
|
90
|
-
* @param row - Fila de datos
|
|
91
|
-
* @returns true si la acción debe mostrarse
|
|
92
|
-
*/
|
|
93
|
-
export function shouldShowAction(action, row) {
|
|
94
|
-
if (action.name === 'create') {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
return !action.condition || action.condition(row);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Obtiene el tooltip de una acción (usa tooltip personalizado o name por defecto)
|
|
101
|
-
* @param action - Acción
|
|
102
|
-
* @returns Texto del tooltip
|
|
103
|
-
*/
|
|
104
|
-
export function getActionTooltip(action) {
|
|
105
|
-
return action.tooltip || action.name;
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvdGFibGUvdGFibGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUF1QjtJQUN0RCxPQUFPLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDO0FBQzVELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxHQUFZO0lBQzFDLE1BQU0sS0FBSyxHQUFHLEdBQTJCLENBQUM7SUFDMUMsT0FBTyxLQUFLLEVBQUUsT0FBTyxJQUFJLHVCQUF1QixDQUFDO0FBQ25ELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQVksRUFBRSxHQUFvQjtJQUM5RCxJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUIsT0FBUSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxPQUFPLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUE4QyxDQUFDO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUM7SUFFL0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELE9BQU8sdUJBQXVCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLHVCQUF1QixDQUM5QixRQUFnQixFQUNoQixJQUFpRjtJQUVqRixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDekUsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUMsT0FBTyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDcEIsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBYSxFQUFFLFNBQWtCO0lBQ3hELElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBYTtJQUNyQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFvQyxLQUFhLEVBQUUsR0FBTTtJQUNoRixNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHO1FBQ3RELENBQUMsQ0FBRSxHQUErQixDQUFDLElBQUksQ0FBQztRQUN4QyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2QsT0FBTyxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE1BQXlCLEVBQ3pCLEdBQU07SUFFTixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUF5QjtJQUN4RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDODBUYWJsZUNvbERlZiwgQ3VzdG9tVGFibGVBY3Rpb24gfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gZnVuY3Rpb24gcGFyYSBjb252ZXJ0aXIgdmFsb3JlcyBzdHJpbmcvYm9vbGVhbiBhIGJvb2xlYW5cbiAqIFVzYWRvIGVuIEBJbnB1dCgpIGNvbiB0cmFuc2Zvcm0gcGFyYSBoYWJpbGl0YXIgc2ludGF4aXMgZGUgYXRyaWJ1dG9zIGJvb2xlYW5vc1xuICogQGV4YW1wbGUgW3NlYXJjaGFibGVdPVwidHJ1ZVwiIG8gc2ltcGxlbWVudGUgc2VhcmNoYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZSc7XG59XG5cbi8qKlxuICogRXh0cmFlIG1lbnNhamUgZGUgZXJyb3IgZGUgZm9ybWEgc2VndXJhIGRlc2RlIHVuIG9iamV0byB1bmtub3duXG4gKiBAcGFyYW0gZXJyIC0gRXJyb3IgZGVzY29ub2NpZG8gKHB1ZWRlIHNlciBFcnJvciwgc3RyaW5nLCBvYmplY3QsIGV0Yy4pXG4gKiBAcmV0dXJucyBNZW5zYWplIGRlIGVycm9yIGxlZ2libGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZShlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBlcnJvciA9IGVyciBhcyB7IG1lc3NhZ2U/OiBzdHJpbmcgfTtcbiAgcmV0dXJuIGVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBjYXJnYXIgZGF0b3MnO1xufVxuXG4vKipcbiAqIE9idGllbmUgZWwgdmFsb3IgZGUgdW4gaW5wdXQgSFRNTCBzZWfDum4gZWwgdGlwbyBkZSBjb2x1bW5hXG4gKiBJTVBPUlRBTlRFOiBDb252aWVydGUgZWwgdmFsb3IgYWwgdGlwbyBjb3JyZWN0byBhbnRlcyBkZSByZXRvcm5hcmxvXG4gKiBAcGFyYW0gZXZlbnQgLSBFdmVudG8gZGVsIGlucHV0XG4gKiBAcGFyYW0gY29sIC0gRGVmaW5pY2nDs24gZGUgY29sdW1uYSAob3BjaW9uYWwpXG4gKiBAcmV0dXJucyBWYWxvciBleHRyYcOtZG8geSBjb252ZXJ0aWRvIHNlZ8O6biBlbCB0aXBvIGRlIGNvbHVtbmFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VmFsdWUoZXZlbnQ6IEV2ZW50LCBjb2w/OiBDODBUYWJsZUNvbERlZik6IHVua25vd24ge1xuICBpZiAoY29sPy50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudDtcbiAgY29uc3QgcmF3VmFsdWUgPSB0YXJnZXQ/LnZhbHVlO1xuXG4gIGlmICghY29sKSB7XG4gICAgcmV0dXJuIHJhd1ZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRJbnB1dFZhbHVlQnlUeXBlKHJhd1ZhbHVlLCBjb2wudHlwZSk7XG59XG5cbi8qKlxuICogQ29udmllcnRlIHVuIHZhbG9yIGRlIGlucHV0IHNlZ8O6biBlbCB0aXBvIGRlIGNvbHVtbmEgZXNwZWNpZmljYWRvXG4gKiBAcGFyYW0gcmF3VmFsdWUgLSBWYWxvciBjcnVkbyBkZWwgaW5wdXQgKHN0cmluZylcbiAqIEBwYXJhbSB0eXBlIC0gVGlwbyBkZSBjb2x1bW5hXG4gKiBAcmV0dXJucyBWYWxvciBjb252ZXJ0aWRvIGFsIHRpcG8gYXByb3BpYWRvXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRJbnB1dFZhbHVlQnlUeXBlKFxuICByYXdWYWx1ZTogc3RyaW5nLFxuICB0eXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdpbnRlZ2VyJyB8ICdib29sZWFuJyB8ICdwYXNzd29yZCcgfCAnZW51bScgfCAnZGF0ZSdcbik6IHVua25vd24ge1xuICBpZiAoIXR5cGUgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ3Bhc3N3b3JkJyB8fCB0eXBlID09PSAnZGF0ZScpIHtcbiAgICByZXR1cm4gcmF3VmFsdWU7XG4gIH1cblxuICBpZiAodHlwZSA9PT0gJ2ludGVnZXInIHx8IHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRUb051bWJlcihyYXdWYWx1ZSwgdHlwZSA9PT0gJ2ludGVnZXInKTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSAnZW51bScpIHtcbiAgICByZXR1cm4gY29udmVydEVudW1WYWx1ZShyYXdWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gcmF3VmFsdWU7XG59XG5cbi8qKlxuICogQ29udmllcnRlIHN0cmluZyBhIG51bWJlciBvIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gY29udmVydFRvTnVtYmVyKHZhbHVlOiBzdHJpbmcsIGlzSW50ZWdlcjogYm9vbGVhbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gaXNJbnRlZ2VyID8gTWF0aC5mbG9vcihudW0pIDogbnVtO1xufVxuXG4vKipcbiAqIENvbnZpZXJ0ZSB2YWxvciBkZSBlbnVtIChpbnRlbnRhIGNvbnZlcnRpciBhIG7Dum1lcm8gc2kgZXMgcG9zaWJsZSlcbiAqL1xuZnVuY3Rpb24gY29udmVydEVudW1WYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihudW0pID8gdmFsdWUgOiBudW07XG59XG5cbi8qKlxuICogRXh0cmFlIGVsIElEIGRlIHVuYSBmaWxhIHBhcmEgdXNhciBjb21vIHRyYWNrQnkgZW4gbmdGb3JcbiAqIEBwYXJhbSBpbmRleCAtIMONbmRpY2UgZGUgbGEgZmlsYVxuICogQHBhcmFtIHJvdyAtIEZpbGEgZGUgZGF0b3NcbiAqIEByZXR1cm5zIElEIGNvbW8gc3RyaW5nIG8gw61uZGljZSBjb21vIGZhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFja0J5SWQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihpbmRleDogbnVtYmVyLCByb3c6IFQpOiBzdHJpbmcgfCBudW1iZXIge1xuICBjb25zdCBpZCA9IHJvdyAmJiB0eXBlb2Ygcm93ID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHJvd1xuICAgID8gKHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ2lkJ11cbiAgICA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgPyBpZCA6IGluZGV4O1xufVxuXG4vKipcbiAqIFZlcmlmaWNhIHNpIHVuYSBhY2Npw7NuIGRlYmUgbW9zdHJhcnNlIHBhcmEgdW5hIGZpbGEgZXNwZWPDrWZpY2FcbiAqIENSRUFURSBzZSBleGNsdXllIHBvcnF1ZSBzZSBtYW5lamEgY29uIGVsIGJvdMOzbiBcIitcIiBlbiBlbCBoZWFkZXJcbiAqIEBwYXJhbSBhY3Rpb24gLSBBY2Npw7NuIGEgdmVyaWZpY2FyXG4gKiBAcGFyYW0gcm93IC0gRmlsYSBkZSBkYXRvc1xuICogQHJldHVybnMgdHJ1ZSBzaSBsYSBhY2Npw7NuIGRlYmUgbW9zdHJhcnNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRTaG93QWN0aW9uPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIGFjdGlvbjogQ3VzdG9tVGFibGVBY3Rpb24sXG4gIHJvdzogVFxuKTogYm9vbGVhbiB7XG4gIGlmIChhY3Rpb24ubmFtZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICFhY3Rpb24uY29uZGl0aW9uIHx8IGFjdGlvbi5jb25kaXRpb24ocm93KTtcbn1cblxuLyoqXG4gKiBPYnRpZW5lIGVsIHRvb2x0aXAgZGUgdW5hIGFjY2nDs24gKHVzYSB0b29sdGlwIHBlcnNvbmFsaXphZG8gbyBuYW1lIHBvciBkZWZlY3RvKVxuICogQHBhcmFtIGFjdGlvbiAtIEFjY2nDs25cbiAqIEByZXR1cm5zIFRleHRvIGRlbCB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25Ub29sdGlwKGFjdGlvbjogQ3VzdG9tVGFibGVBY3Rpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYWN0aW9uLnRvb2x0aXAgfHwgYWN0aW9uLm5hbWU7XG59XG4iXX0=
|