@lluc_llull/ui-lib 0.4.5 → 0.5.1
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/esm2022/lib/components/core/category-progress/category-progress.component.mjs +3 -3
- package/esm2022/lib/components/core/header-clear/header-clear.component.mjs +26 -7
- package/esm2022/lib/components/core/header-clear/header-clear.interface.mjs +1 -1
- package/esm2022/lib/components/core/header-mobile/header-mobile.component.mjs +26 -7
- package/esm2022/lib/components/core/header-mobile/header-mobile.interface.mjs +1 -1
- package/esm2022/lib/components/core/hero-section/hero-section.component.mjs +3 -3
- package/esm2022/lib/components/core/lang-modal/lang-modal.component.mjs +3 -3
- package/esm2022/lib/components/core/nav-modal/nav-modal.component.mjs +3 -3
- package/esm2022/lib/components/core/section-intro/section-intro.component.mjs +3 -3
- package/esm2022/lib/interfaces/ui-lib-nav-items.interface.mjs +1 -1
- package/esm2022/lib/services/index.mjs +2 -1
- package/esm2022/lib/services/mapper/component-mappers/header-clear.mapper.mjs +5 -2
- package/esm2022/lib/services/mapper/component-mappers/nav-modal.mapper.mjs +43 -24
- package/esm2022/lib/services/theme/index.mjs +2 -0
- package/esm2022/lib/services/theme/theme.service.mjs +73 -0
- package/fesm2022/lluc_llull-ui-lib.mjs +172 -45
- package/fesm2022/lluc_llull-ui-lib.mjs.map +1 -1
- package/lib/components/core/header-clear/header-clear.component.d.ts +15 -5
- package/lib/components/core/header-clear/header-clear.interface.d.ts +3 -1
- package/lib/components/core/header-mobile/header-mobile.component.d.ts +15 -5
- package/lib/components/core/header-mobile/header-mobile.interface.d.ts +3 -1
- package/lib/components/core/nav-modal/nav-modal.component.d.ts +2 -2
- package/lib/interfaces/ui-lib-nav-items.interface.d.ts +7 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/services/mapper/component-mappers/nav-modal.mapper.d.ts +4 -10
- package/lib/services/theme/index.d.ts +1 -0
- package/lib/services/theme/theme.service.d.ts +16 -0
- package/package.json +1 -1
- package/src/lib/styles/main.css +64 -19
- package/styles/main.css +64 -19
|
@@ -1,29 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// helpers
|
|
2
|
+
const isArray = Array.isArray;
|
|
3
|
+
const isHttp = (u) => !!u && /^https?:\/\//i.test(u ?? '');
|
|
4
|
+
export const mapNavModalWithLang = (props, _langCode) => mapNavModal(props);
|
|
5
|
+
export const mapNavModal = (props) => {
|
|
6
|
+
if (!isArray(props))
|
|
3
7
|
return [];
|
|
4
|
-
return props
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
return props
|
|
9
|
+
.map((item) => {
|
|
10
|
+
const link = item?.nav_link ?? {};
|
|
11
|
+
const url = link.url ?? link.external_url ?? undefined;
|
|
12
|
+
const mapped = {
|
|
13
|
+
label: item?.label ?? link?.name ?? '',
|
|
14
|
+
url,
|
|
15
|
+
linkType: link?.linktype,
|
|
16
|
+
name: link?.name,
|
|
17
|
+
active: link?.active ?? true,
|
|
18
|
+
children: isArray(link?.children) ? link.children : [], // UiLibButtonI[]
|
|
14
19
|
};
|
|
15
|
-
|
|
20
|
+
if (!mapped.label || !mapped.url)
|
|
21
|
+
return null;
|
|
22
|
+
return mapped;
|
|
23
|
+
})
|
|
24
|
+
.filter((x) => !!x);
|
|
16
25
|
};
|
|
17
|
-
export const
|
|
18
|
-
if (!
|
|
26
|
+
export const mapSocialLinks = (props) => {
|
|
27
|
+
if (!isArray(props))
|
|
19
28
|
return [];
|
|
20
|
-
return props
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
return props
|
|
30
|
+
.map((item) => {
|
|
31
|
+
const link = item?.nav_link ?? item ?? {};
|
|
32
|
+
const url = link.url ?? link.external_url ?? undefined;
|
|
33
|
+
const mapped = {
|
|
34
|
+
label: item?.label ?? link?.name ?? '',
|
|
35
|
+
url: url ?? '',
|
|
36
|
+
linkType: link?.linktype ?? (isHttp(url) ? 'external' : 'internal'),
|
|
37
|
+
icon: (item?.icon ?? link?.icon ?? ''),
|
|
38
|
+
order: item?.order ?? link?.order,
|
|
39
|
+
};
|
|
40
|
+
if (!mapped.label || !mapped.url)
|
|
41
|
+
return null;
|
|
42
|
+
if (mapped.icon == null)
|
|
43
|
+
mapped.icon = '';
|
|
44
|
+
return mapped;
|
|
45
|
+
})
|
|
46
|
+
.filter((x) => !!x);
|
|
28
47
|
};
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1vZGFsLm1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWxpYi9zcmMvbGliL3NlcnZpY2VzL21hcHBlci9jb21wb25lbnQtbWFwcGVycy9uYXYtbW9kYWwubWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFVBQVU7QUFDVixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQzlCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQVksRUFBRSxTQUFpQixFQUFvQixFQUFFLENBQ3ZGLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUVyQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFZLEVBQW9CLEVBQUU7SUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUUvQixPQUFPLEtBQUs7U0FDVCxHQUFHLENBQXdCLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQXVCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUM7UUFFM0UsTUFBTSxNQUFNLEdBQW1CO1lBQzdCLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtZQUN0QyxHQUFHO1lBQ0gsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRO1lBQ3hCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUNoQixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxJQUFJO1lBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsUUFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGlCQUFpQjtTQUNuRixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFZLEVBQXVCLEVBQUU7SUFDbEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUUvQixPQUFPLEtBQUs7U0FDVCxHQUFHLENBQTJCLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzFDLE1BQU0sR0FBRyxHQUF1QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDO1FBRTNFLE1BQU0sTUFBTSxHQUFzQjtZQUNoQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDdEMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO1lBQ2QsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ25FLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQVc7WUFDaEQsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUs7U0FDbEMsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUU5QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSTtZQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTFDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVaUxpYk5hdkl0ZW1zSSwgVWlMaWJTb2NpYWxJdGVtc0kgfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlc1wiO1xuXG4vLyBoZWxwZXJzXG5jb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmNvbnN0IGlzSHR0cCA9ICh1Pzogc3RyaW5nIHwgbnVsbCkgPT4gISF1ICYmIC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QodSA/PyAnJyk7XG5cbmV4cG9ydCBjb25zdCBtYXBOYXZNb2RhbFdpdGhMYW5nID0gKHByb3BzOiBhbnlbXSwgX2xhbmdDb2RlOiBzdHJpbmcpOiBVaUxpYk5hdkl0ZW1zSVtdID0+XG4gIG1hcE5hdk1vZGFsKHByb3BzKTtcblxuZXhwb3J0IGNvbnN0IG1hcE5hdk1vZGFsID0gKHByb3BzOiBhbnlbXSk6IFVpTGliTmF2SXRlbXNJW10gPT4ge1xuICBpZiAoIWlzQXJyYXkocHJvcHMpKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIHByb3BzXG4gICAgLm1hcDxVaUxpYk5hdkl0ZW1zSSB8IG51bGw+KChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBsaW5rID0gaXRlbT8ubmF2X2xpbmsgPz8ge307XG4gICAgICBjb25zdCB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGxpbmsudXJsID8/IGxpbmsuZXh0ZXJuYWxfdXJsID8/IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgbWFwcGVkOiBVaUxpYk5hdkl0ZW1zSSA9IHtcbiAgICAgICAgbGFiZWw6IGl0ZW0/LmxhYmVsID8/IGxpbms/Lm5hbWUgPz8gJycsXG4gICAgICAgIHVybCxcbiAgICAgICAgbGlua1R5cGU6IGxpbms/Lmxpbmt0eXBlLCAgICAgICAgICBcbiAgICAgICAgbmFtZTogbGluaz8ubmFtZSxcbiAgICAgICAgYWN0aXZlOiBsaW5rPy5hY3RpdmUgPz8gdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IGlzQXJyYXkobGluaz8uY2hpbGRyZW4pID8gKGxpbmsuY2hpbGRyZW4gYXMgYW55KSA6IFtdLCAvLyBVaUxpYkJ1dHRvbklbXVxuICAgICAgfTtcblxuICAgICAgaWYgKCFtYXBwZWQubGFiZWwgfHwgIW1hcHBlZC51cmwpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIG1hcHBlZDtcbiAgICB9KVxuICAgIC5maWx0ZXIoKHgpOiB4IGlzIFVpTGliTmF2SXRlbXNJID0+ICEheCk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwU29jaWFsTGlua3MgPSAocHJvcHM6IGFueVtdKTogVWlMaWJTb2NpYWxJdGVtc0lbXSA9PiB7XG4gIGlmICghaXNBcnJheShwcm9wcykpIHJldHVybiBbXTtcblxuICByZXR1cm4gcHJvcHNcbiAgICAubWFwPFVpTGliU29jaWFsSXRlbXNJIHwgbnVsbD4oKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBpdGVtPy5uYXZfbGluayA/PyBpdGVtID8/IHt9O1xuICAgICAgY29uc3QgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBsaW5rLnVybCA/PyBsaW5rLmV4dGVybmFsX3VybCA/PyB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IG1hcHBlZDogVWlMaWJTb2NpYWxJdGVtc0kgPSB7XG4gICAgICAgIGxhYmVsOiBpdGVtPy5sYWJlbCA/PyBsaW5rPy5uYW1lID8/ICcnLFxuICAgICAgICB1cmw6IHVybCA/PyAnJyxcbiAgICAgICAgbGlua1R5cGU6IGxpbms/Lmxpbmt0eXBlID8/IChpc0h0dHAodXJsKSA/ICdleHRlcm5hbCcgOiAnaW50ZXJuYWwnKSxcbiAgICAgICAgaWNvbjogKGl0ZW0/Lmljb24gPz8gbGluaz8uaWNvbiA/PyAnJykgYXMgc3RyaW5nLFxuICAgICAgICBvcmRlcjogaXRlbT8ub3JkZXIgPz8gbGluaz8ub3JkZXIsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIW1hcHBlZC5sYWJlbCB8fCAhbWFwcGVkLnVybCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGlmIChtYXBwZWQuaWNvbiA9PSBudWxsKSBtYXBwZWQuaWNvbiA9ICcnO1xuXG4gICAgICByZXR1cm4gbWFwcGVkO1xuICAgIH0pXG4gICAgLmZpbHRlcigoeCk6IHggaXMgVWlMaWJTb2NpYWxJdGVtc0kgPT4gISF4KTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './theme.service';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1saWIvc3JjL2xpYi9zZXJ2aWNlcy90aGVtZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90aGVtZS5zZXJ2aWNlJzsiXX0=
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class ThemeService {
|
|
6
|
+
constructor(platformId) {
|
|
7
|
+
this.platformId = platformId;
|
|
8
|
+
this.currentThemeSubject = new BehaviorSubject('light');
|
|
9
|
+
this.currentTheme$ = this.currentThemeSubject.asObservable();
|
|
10
|
+
// Aplicar tema por defecto al inicio
|
|
11
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
12
|
+
this.applyTheme('light');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
getCurrentTheme() {
|
|
16
|
+
return this.currentThemeSubject.value;
|
|
17
|
+
}
|
|
18
|
+
setTheme(theme) {
|
|
19
|
+
this.currentThemeSubject.next(theme);
|
|
20
|
+
this.applyTheme(theme);
|
|
21
|
+
// NO guardar automáticamente en localStorage - solo cuando el usuario hace toggle
|
|
22
|
+
}
|
|
23
|
+
toggleTheme() {
|
|
24
|
+
const currentTheme = this.getCurrentTheme();
|
|
25
|
+
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
|
|
26
|
+
// Guardar en localStorage solo cuando el usuario hace toggle
|
|
27
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
28
|
+
localStorage.setItem('theme', newTheme);
|
|
29
|
+
}
|
|
30
|
+
this.setTheme(newTheme);
|
|
31
|
+
}
|
|
32
|
+
resetTheme() {
|
|
33
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
34
|
+
localStorage.removeItem('theme');
|
|
35
|
+
this.currentThemeSubject.next('light');
|
|
36
|
+
this.applyTheme('light');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Método para cargar el tema guardado (opcional)
|
|
40
|
+
loadSavedTheme() {
|
|
41
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
42
|
+
const savedTheme = localStorage.getItem('theme');
|
|
43
|
+
if (savedTheme) {
|
|
44
|
+
this.setTheme(savedTheme);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
applyTheme(theme) {
|
|
49
|
+
// Solo aplicar en el navegador
|
|
50
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const root = document.documentElement;
|
|
54
|
+
if (theme === 'dark') {
|
|
55
|
+
root.setAttribute('data-theme', 'dark');
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
root.setAttribute('data-theme', 'light');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
62
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService, providedIn: 'root' }); }
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService, decorators: [{
|
|
65
|
+
type: Injectable,
|
|
66
|
+
args: [{
|
|
67
|
+
providedIn: 'root'
|
|
68
|
+
}]
|
|
69
|
+
}], ctorParameters: () => [{ type: Object, decorators: [{
|
|
70
|
+
type: Inject,
|
|
71
|
+
args: [PLATFORM_ID]
|
|
72
|
+
}] }] });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWxpYi9zcmMvbGliL3NlcnZpY2VzL3RoZW1lL3RoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBT3ZDLE1BQU0sT0FBTyxZQUFZO0lBSXZCLFlBQXlDLFVBQWtCO1FBQWxCLGVBQVUsR0FBVixVQUFVLENBQVE7UUFIbkQsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVEsT0FBTyxDQUFDLENBQUM7UUFDM0Qsa0JBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFHN0QscUNBQXFDO1FBQ3JDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVNLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBWTtRQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsa0ZBQWtGO0lBQ3BGLENBQUM7SUFFTSxXQUFXO1FBQ2hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QyxNQUFNLFFBQVEsR0FBVSxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUVwRSw2REFBNkQ7UUFDN0QsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxpREFBaUQ7SUFDMUMsY0FBYztRQUNuQixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFVLENBQUM7WUFDMUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFZO1FBQzdCLCtCQUErQjtRQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBRXRDLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7K0dBaEVVLFlBQVksa0JBSUgsV0FBVzttSEFKcEIsWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFLYyxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgVGhlbWUgPSAnbGlnaHQnIHwgJ2RhcmsnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUaGVtZVNlcnZpY2Uge1xuICBwcml2YXRlIGN1cnJlbnRUaGVtZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZW1lPignbGlnaHQnKTtcbiAgcHVibGljIGN1cnJlbnRUaGVtZSQgPSB0aGlzLmN1cnJlbnRUaGVtZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QpIHtcbiAgICAvLyBBcGxpY2FyIHRlbWEgcG9yIGRlZmVjdG8gYWwgaW5pY2lvXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHRoaXMuYXBwbHlUaGVtZSgnbGlnaHQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudFRoZW1lKCk6IFRoZW1lIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VGhlbWVTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldFRoZW1lKHRoZW1lOiBUaGVtZSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFRoZW1lU3ViamVjdC5uZXh0KHRoZW1lKTtcbiAgICB0aGlzLmFwcGx5VGhlbWUodGhlbWUpO1xuICAgIC8vIE5PIGd1YXJkYXIgYXV0b23DoXRpY2FtZW50ZSBlbiBsb2NhbFN0b3JhZ2UgLSBzb2xvIGN1YW5kbyBlbCB1c3VhcmlvIGhhY2UgdG9nZ2xlXG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlVGhlbWUoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRoZW1lID0gdGhpcy5nZXRDdXJyZW50VGhlbWUoKTtcbiAgICBjb25zdCBuZXdUaGVtZTogVGhlbWUgPSBjdXJyZW50VGhlbWUgPT09ICdsaWdodCcgPyAnZGFyaycgOiAnbGlnaHQnO1xuICAgIFxuICAgIC8vIEd1YXJkYXIgZW4gbG9jYWxTdG9yYWdlIHNvbG8gY3VhbmRvIGVsIHVzdWFyaW8gaGFjZSB0b2dnbGVcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RoZW1lJywgbmV3VGhlbWUpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLnNldFRoZW1lKG5ld1RoZW1lKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFRoZW1lKCk6IHZvaWQge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndGhlbWUnKTtcbiAgICAgIHRoaXMuY3VycmVudFRoZW1lU3ViamVjdC5uZXh0KCdsaWdodCcpO1xuICAgICAgdGhpcy5hcHBseVRoZW1lKCdsaWdodCcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRvZG8gcGFyYSBjYXJnYXIgZWwgdGVtYSBndWFyZGFkbyAob3BjaW9uYWwpXG4gIHB1YmxpYyBsb2FkU2F2ZWRUaGVtZSgpOiB2b2lkIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgY29uc3Qgc2F2ZWRUaGVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0aGVtZScpIGFzIFRoZW1lO1xuICAgICAgaWYgKHNhdmVkVGhlbWUpIHtcbiAgICAgICAgdGhpcy5zZXRUaGVtZShzYXZlZFRoZW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGhlbWUodGhlbWU6IFRoZW1lKTogdm9pZCB7XG4gICAgLy8gU29sbyBhcGxpY2FyIGVuIGVsIG5hdmVnYWRvclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgXG4gICAgaWYgKHRoZW1lID09PSAnZGFyaycpIHtcbiAgICAgIHJvb3Quc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJywgJ2RhcmsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnLCAnbGlnaHQnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|