@ethlete/core 3.9.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +5 -6
- package/esm2022/lib/directives/observe-visibility/observe-visibility.directive.mjs +4 -1
- package/esm2022/lib/utils/angular.utils.mjs +7 -0
- package/esm2022/lib/utils/public-api.mjs +2 -1
- package/esm2022/lib/utils/reactive-binding.util.mjs +12 -1
- package/esm2022/lib/utils/selection-model.utils.mjs +40 -2
- package/esm2022/lib/utils/signal.utils.mjs +81 -56
- package/fesm2022/ethlete-core.mjs +137 -63
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/lib/directives/animated-lifecycle/animated-lifecycle.directive.d.ts +4 -1
- package/lib/directives/observe-visibility/observe-visibility.directive.d.ts +2 -0
- package/lib/utils/angular.utils.d.ts +3 -0
- package/lib/utils/public-api.d.ts +1 -0
- package/lib/utils/reactive-binding.util.d.ts +11 -0
- package/lib/utils/selection-model.utils.d.ts +27 -16
- package/lib/utils/signal.utils.d.ts +42 -7
- package/package.json +1 -1
|
@@ -1,72 +1,97 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { coerceElement } from '@angular/cdk/coercion';
|
|
2
|
+
import { ElementRef, computed, effect, inject, isSignal, signal } from '@angular/core';
|
|
3
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { Observable, map } from 'rxjs';
|
|
5
|
+
const buildElementSignal = (el) => {
|
|
6
|
+
let mElSignal = null;
|
|
7
|
+
if (el instanceof Observable) {
|
|
8
|
+
mElSignal = toSignal(el.pipe(map((elOrRef) => coerceElement(elOrRef))), { initialValue: null });
|
|
9
|
+
}
|
|
10
|
+
else if (isSignal(el)) {
|
|
11
|
+
mElSignal = computed(() => coerceElement(el()));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
mElSignal = signal(coerceElement(el));
|
|
15
|
+
}
|
|
16
|
+
return mElSignal;
|
|
17
|
+
};
|
|
18
|
+
export const buildSignalEffects = (config) => {
|
|
19
|
+
const { map, eachItemFn, cleanupFn } = config;
|
|
20
|
+
const effectRefMap = {};
|
|
21
|
+
for (const [tokenString, signal] of Object.entries(map)) {
|
|
22
|
+
const tokenArray = tokenString.split(' ').filter((token) => !!token);
|
|
23
|
+
for (const token of tokenArray) {
|
|
24
|
+
const ref = effect(() => {
|
|
25
|
+
const value = signal();
|
|
26
|
+
eachItemFn({ key: token, value });
|
|
27
|
+
});
|
|
28
|
+
effectRefMap[token] = ref;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const has = (token) => token in effectRefMap;
|
|
32
|
+
const remove = (...tokens) => {
|
|
33
|
+
for (const tokenString of tokens) {
|
|
34
|
+
effectRefMap[tokenString]?.destroy();
|
|
35
|
+
cleanupFn({ key: tokenString, value: map[tokenString]?.() });
|
|
36
|
+
delete effectRefMap[tokenString];
|
|
7
37
|
}
|
|
8
|
-
|
|
9
|
-
|
|
38
|
+
};
|
|
39
|
+
return { remove, has };
|
|
40
|
+
};
|
|
41
|
+
export const signalClasses = (el, classMap) => {
|
|
42
|
+
const element = buildElementSignal(el);
|
|
43
|
+
return buildSignalEffects({
|
|
44
|
+
map: classMap,
|
|
45
|
+
eachItemFn: ({ key, value }) => {
|
|
10
46
|
if (value) {
|
|
11
|
-
|
|
47
|
+
element()?.classList.add(key);
|
|
12
48
|
}
|
|
13
49
|
else {
|
|
14
|
-
|
|
50
|
+
element()?.classList.remove(key);
|
|
15
51
|
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
};
|
|
19
|
-
export const signalHostClasses = (classMap) => {
|
|
20
|
-
const el = inject(ElementRef).nativeElement;
|
|
21
|
-
signalClasses(el, classMap);
|
|
52
|
+
},
|
|
53
|
+
cleanupFn: ({ key }) => element()?.classList.remove(key),
|
|
54
|
+
});
|
|
22
55
|
};
|
|
56
|
+
export const signalHostClasses = (classMap) => signalClasses(inject(ElementRef), classMap);
|
|
23
57
|
const ALWAYS_TRUE_ATTRIBUTE_KEYS = ['disabled', 'readonly', 'required', 'checked', 'selected'];
|
|
24
58
|
export const signalAttributes = (el, attributeMap) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const value = signal();
|
|
59
|
+
const element = buildElementSignal(el);
|
|
60
|
+
return buildSignalEffects({
|
|
61
|
+
map: attributeMap,
|
|
62
|
+
eachItemFn: ({ key, value }) => {
|
|
32
63
|
const valueString = `${value}`;
|
|
33
|
-
|
|
34
|
-
if (
|
|
35
|
-
|
|
36
|
-
el.setAttribute(attr, '');
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
el.removeAttribute(attr);
|
|
40
|
-
}
|
|
64
|
+
if (ALWAYS_TRUE_ATTRIBUTE_KEYS.includes(key)) {
|
|
65
|
+
if (value) {
|
|
66
|
+
element()?.setAttribute(key, '');
|
|
41
67
|
}
|
|
42
68
|
else {
|
|
43
|
-
|
|
69
|
+
element()?.removeAttribute(key);
|
|
44
70
|
}
|
|
45
71
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
export const signalStyle = (el, styleMap) => {
|
|
54
|
-
for (const [styleString, signal] of Object.entries(styleMap)) {
|
|
55
|
-
effect(() => {
|
|
56
|
-
const styleArray = styleString.split(' ');
|
|
57
|
-
if (!styleArray.length) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
const value = signal();
|
|
61
|
-
const valueString = `${value}`;
|
|
62
|
-
for (const style of styleArray) {
|
|
63
|
-
el.style.setProperty(style, valueString);
|
|
72
|
+
else {
|
|
73
|
+
if (value === null || value === undefined) {
|
|
74
|
+
element()?.removeAttribute(key);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
element()?.setAttribute(key, valueString);
|
|
78
|
+
}
|
|
64
79
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
80
|
+
},
|
|
81
|
+
cleanupFn: ({ key }) => element()?.removeAttribute(key),
|
|
82
|
+
});
|
|
67
83
|
};
|
|
68
|
-
export const
|
|
69
|
-
|
|
70
|
-
|
|
84
|
+
export const signalHostAttributes = (attributeMap) => signalAttributes(inject(ElementRef), attributeMap);
|
|
85
|
+
export const signalStyles = (el, styleMap) => {
|
|
86
|
+
const element = buildElementSignal(el);
|
|
87
|
+
return buildSignalEffects({
|
|
88
|
+
map: styleMap,
|
|
89
|
+
eachItemFn: ({ key, value }) => {
|
|
90
|
+
const valueString = `${value}`;
|
|
91
|
+
element()?.style.setProperty(key, valueString);
|
|
92
|
+
},
|
|
93
|
+
cleanupFn: ({ key }) => element()?.style.removeProperty(key),
|
|
94
|
+
});
|
|
71
95
|
};
|
|
72
|
-
|
|
96
|
+
export const signalHostStyles = (styleMap) => signalStyles(inject(ElementRef), styleMap);
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQWEsVUFBVSxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUXZDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxFQUE0QixFQUFFLEVBQUU7SUFDMUQsSUFBSSxTQUFTLEdBQWtELElBQUksQ0FBQztJQUVwRSxJQUFJLEVBQUUsWUFBWSxVQUFVLEVBQUU7UUFDNUIsU0FBUyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ2pHO1NBQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDdkIsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2pEO1NBQU07UUFDTCxTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3ZDO0lBRUQsT0FBTyxTQUFtRCxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQTRDLE1B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RUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzdCLE1BQU0sV0FBVyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFFL0IsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO0tBQzdELENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQTRDLFFBQVcsRUFBRSxFQUFFLENBQ3pGLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEVmZmVjdFJlZiwgRWxlbWVudFJlZiwgU2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlzU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbnR5cGUgU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIHwgT2JzZXJ2YWJsZTxIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbCB8IHVuZGVmaW5lZD5cbiAgfCBTaWduYWw8SFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IG51bGwgfCB1bmRlZmluZWQ+O1xuXG5jb25zdCBidWlsZEVsZW1lbnRTaWduYWwgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSkgPT4ge1xuICBsZXQgbUVsU2lnbmFsOiBTaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPiB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChlbCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChlbC5waXBlKG1hcCgoZWxPclJlZikgPT4gY29lcmNlRWxlbWVudChlbE9yUmVmKSkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChpc1NpZ25hbChlbCkpIHtcbiAgICBtRWxTaWduYWwgPSBjb21wdXRlZCgoKSA9PiBjb2VyY2VFbGVtZW50KGVsKCkpKTtcbiAgfSBlbHNlIHtcbiAgICBtRWxTaWduYWwgPSBzaWduYWwoY29lcmNlRWxlbWVudChlbCkpO1xuICB9XG5cbiAgcmV0dXJuIG1FbFNpZ25hbCBhcyBTaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPjtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFNpZ25hbEVmZmVjdHMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNvbmZpZzoge1xuICBtYXA6IFQ7XG4gIGVhY2hJdGVtRm46IChwYWlyOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkO1xuICBjbGVhbnVwRm46IChwYWlyOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkO1xufSkgPT4ge1xuICBjb25zdCB7IG1hcCwgZWFjaEl0ZW1GbiwgY2xlYW51cEZuIH0gPSBjb25maWc7XG5cbiAgY29uc3QgZWZmZWN0UmVmTWFwOiBSZWNvcmQ8c3RyaW5nLCBFZmZlY3RSZWY+ID0ge307XG5cbiAgZm9yIChjb25zdCBbdG9rZW5TdHJpbmcsIHNpZ25hbF0gb2YgT2JqZWN0LmVudHJpZXMobWFwKSkge1xuICAgIGNvbnN0IHRva2VuQXJyYXkgPSB0b2tlblN0cmluZy5zcGxpdCgnICcpLmZpbHRlcigodG9rZW4pID0+ICEhdG9rZW4pO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbkFycmF5KSB7XG4gICAgICBjb25zdCByZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNpZ25hbCgpO1xuICAgICAgICBlYWNoSXRlbUZuKHsga2V5OiB0b2tlbiwgdmFsdWUgfSk7XG4gICAgICB9KTtcblxuICAgICAgZWZmZWN0UmVmTWFwW3Rva2VuXSA9IHJlZjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYXMgPSAodG9rZW46IHN0cmluZykgPT4gdG9rZW4gaW4gZWZmZWN0UmVmTWFwO1xuXG4gIGNvbnN0IHJlbW92ZSA9ICguLi50b2tlbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgZm9yIChjb25zdCB0b2tlblN0cmluZyBvZiB0b2tlbnMpIHtcbiAgICAgIGVmZmVjdFJlZk1hcFt0b2tlblN0cmluZ10/LmRlc3Ryb3koKTtcblxuICAgICAgY2xlYW51cEZuKHsga2V5OiB0b2tlblN0cmluZywgdmFsdWU6IG1hcFt0b2tlblN0cmluZ10/LigpIH0pO1xuXG4gICAgICBkZWxldGUgZWZmZWN0UmVmTWFwW3Rva2VuU3RyaW5nXTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHsgcmVtb3ZlLCBoYXMgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxDbGFzc2VzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBjbGFzc01hcDogVCkgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKHtcbiAgICBtYXA6IGNsYXNzTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnQoKT8uY2xhc3NMaXN0LmFkZChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudCgpPy5jbGFzc0xpc3QucmVtb3ZlKGtleSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhbnVwRm46ICh7IGtleSB9KSA9PiBlbGVtZW50KCk/LmNsYXNzTGlzdC5yZW1vdmUoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNsYXNzTWFwOiBUKSA9PlxuICBzaWduYWxDbGFzc2VzKGluamVjdChFbGVtZW50UmVmKSwgY2xhc3NNYXApO1xuXG5jb25zdCBBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnLCAnY2hlY2tlZCcsICdzZWxlY3RlZCddO1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsQXR0cmlidXRlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oXG4gIGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsXG4gIGF0dHJpYnV0ZU1hcDogVCxcbikgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKHtcbiAgICBtYXA6IGF0dHJpYnV0ZU1hcCxcbiAgICBlYWNoSXRlbUZuOiAoeyBrZXksIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gYCR7dmFsdWV9YDtcblxuICAgICAgaWYgKEFMV0FZU19UUlVFX0FUVFJJQlVURV9LRVlTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgZWxlbWVudCgpPy5zZXRBdHRyaWJ1dGUoa2V5LCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudCgpPy5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlbGVtZW50KCk/LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQoKT8uc2V0QXR0cmlidXRlKGtleSwgdmFsdWVTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhbnVwRm46ICh7IGtleSB9KSA9PiBlbGVtZW50ISgpPy5yZW1vdmVBdHRyaWJ1dGUoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGF0dHJpYnV0ZU1hcDogVCkgPT5cbiAgc2lnbmFsQXR0cmlidXRlcyhpbmplY3QoRWxlbWVudFJlZiksIGF0dHJpYnV0ZU1hcCk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIHN0eWxlTWFwOiBUKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoe1xuICAgIG1hcDogc3R5bGVNYXAsXG4gICAgZWFjaEl0ZW1GbjogKHsga2V5LCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IGAke3ZhbHVlfWA7XG5cbiAgICAgIGVsZW1lbnQoKT8uc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZVN0cmluZyk7XG4gICAgfSxcbiAgICBjbGVhbnVwRm46ICh7IGtleSB9KSA9PiBlbGVtZW50KCk/LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSksXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KHN0eWxlTWFwOiBUKSA9PlxuICBzaWduYWxTdHlsZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBzdHlsZU1hcCk7XG4iXX0=
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, assertInInjectionContext, DestroyRef, ElementRef, effect, isDevMode, Directive, Injectable, NgZone, EventEmitter, booleanAttribute, numberAttribute, Output, Injector, ViewContainerRef,
|
|
2
|
+
import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, assertInInjectionContext, DestroyRef, ElementRef, isSignal, computed, signal, effect, isDevMode, Directive, Injectable, NgZone, EventEmitter, booleanAttribute, numberAttribute, Output, Injector, ViewContainerRef, TemplateRef, Pipe, QueryList } from '@angular/core';
|
|
3
3
|
import { DomSanitizer, Meta, Title } from '@angular/platform-browser';
|
|
4
|
-
import { Subject, BehaviorSubject, takeUntil, switchMap, of, tap, Observable, combineLatest, timer,
|
|
4
|
+
import { Subject, BehaviorSubject, takeUntil, switchMap, of, tap, startWith, Observable, combineLatest, timer, map, distinctUntilChanged, shareReplay, skip, take, debounceTime, merge, fromEvent, filter, takeWhile, pairwise, finalize } from 'rxjs';
|
|
5
5
|
import { END, HOME, PAGE_DOWN, PAGE_UP, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';
|
|
6
6
|
import { FormGroup, FormArray, FormControl } from '@angular/forms';
|
|
7
|
-
import {
|
|
7
|
+
import { takeUntilDestroyed, toSignal, toObservable } from '@angular/core/rxjs-interop';
|
|
8
|
+
import { coerceElement, coerceCssPixelValue } from '@angular/cdk/coercion';
|
|
8
9
|
import { supportsScrollBehavior } from '@angular/cdk/platform';
|
|
9
10
|
import * as i1 from '@angular/common';
|
|
10
11
|
import { NgIf, DOCUMENT } from '@angular/common';
|
|
@@ -14,7 +15,6 @@ import { autoUpdate, computePosition, offset, flip, size, shift, limitShift, arr
|
|
|
14
15
|
import { Router, NavigationEnd } from '@angular/router';
|
|
15
16
|
import { __decorate, __metadata } from 'tslib';
|
|
16
17
|
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
17
|
-
import { toObservable } from '@angular/core/rxjs-interop';
|
|
18
18
|
import { debounceTime as debounceTime$1 } from 'rxjs/operators';
|
|
19
19
|
|
|
20
20
|
class StructuredDataComponent {
|
|
@@ -182,6 +182,12 @@ class ActiveSelectionModel {
|
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
+
function switchQueryListChanges() {
|
|
186
|
+
return function (source) {
|
|
187
|
+
return source.pipe(switchMap((value) => value?.changes.pipe(startWith(value)) ?? of(null)));
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
185
191
|
const nextFrame = (cb) => {
|
|
186
192
|
requestAnimationFrame(() => {
|
|
187
193
|
requestAnimationFrame(cb);
|
|
@@ -699,6 +705,17 @@ const createMutationObservable = (config) => {
|
|
|
699
705
|
|
|
700
706
|
const isAttributeRenderBinding = (value) => typeof value === 'boolean';
|
|
701
707
|
const isAttributeValueBinding = (value) => typeof value === 'object';
|
|
708
|
+
/**
|
|
709
|
+
* @deprecated Use one of the following instead:
|
|
710
|
+
* - `signalHostAttributes`
|
|
711
|
+
* - `signalHostClasses`
|
|
712
|
+
* - `signalHostStyles`
|
|
713
|
+
* - `signalAttributes`
|
|
714
|
+
* - `signalClasses`
|
|
715
|
+
* - `signalStyles`
|
|
716
|
+
*
|
|
717
|
+
* Will be removed in v4.
|
|
718
|
+
*/
|
|
702
719
|
const createReactiveBindings = (...values) => {
|
|
703
720
|
assertInInjectionContext(createReactiveBindings);
|
|
704
721
|
const rootElementRef = inject(ElementRef);
|
|
@@ -990,6 +1007,7 @@ class SelectionModel {
|
|
|
990
1007
|
this._valueBinding$ = new BehaviorSubject(null);
|
|
991
1008
|
this._keyBinding$ = new BehaviorSubject(null);
|
|
992
1009
|
this._labelBinding$ = new BehaviorSubject(null);
|
|
1010
|
+
this._disabledBinding$ = new BehaviorSubject(null);
|
|
993
1011
|
this._allowMultiple$ = new BehaviorSubject(false);
|
|
994
1012
|
this._filter$ = new BehaviorSubject('');
|
|
995
1013
|
this.value$ = combineLatest([this.selection$, this.valueBinding$, this.allowMultiple$]).pipe(map(([selection, valueBinding, allowMultiple]) => {
|
|
@@ -1034,6 +1052,12 @@ class SelectionModel {
|
|
|
1034
1052
|
get labelBinding() {
|
|
1035
1053
|
return this._labelBinding$.value;
|
|
1036
1054
|
}
|
|
1055
|
+
get disabledBinding$() {
|
|
1056
|
+
return this._disabledBinding$.asObservable();
|
|
1057
|
+
}
|
|
1058
|
+
get disabledBinding() {
|
|
1059
|
+
return this._disabledBinding$.value;
|
|
1060
|
+
}
|
|
1037
1061
|
get allowMultiple$() {
|
|
1038
1062
|
return this._allowMultiple$.asObservable();
|
|
1039
1063
|
}
|
|
@@ -1065,10 +1089,28 @@ class SelectionModel {
|
|
|
1065
1089
|
this._labelBinding$.next(fnOrPropertyPath);
|
|
1066
1090
|
return this;
|
|
1067
1091
|
}
|
|
1092
|
+
setDisabledBinding(fnOrPropertyPath) {
|
|
1093
|
+
this._disabledBinding$.next(fnOrPropertyPath);
|
|
1094
|
+
return this;
|
|
1095
|
+
}
|
|
1068
1096
|
setOptions(options) {
|
|
1069
1097
|
this._options$.next(options);
|
|
1070
1098
|
return this;
|
|
1071
1099
|
}
|
|
1100
|
+
setOptionsFromQueryList(queryList) {
|
|
1101
|
+
assertInInjectionContext(this.setOptionsFromQueryList);
|
|
1102
|
+
queryList.changes
|
|
1103
|
+
.pipe(startWith(queryList), tap((list) => this.setOptions(list.toArray())), takeUntilDestroyed())
|
|
1104
|
+
.subscribe();
|
|
1105
|
+
return this;
|
|
1106
|
+
}
|
|
1107
|
+
setOptionsFromQueryList$(queryList$) {
|
|
1108
|
+
assertInInjectionContext(this.setOptionsFromQueryList$);
|
|
1109
|
+
queryList$
|
|
1110
|
+
.pipe(switchQueryListChanges(), tap((list) => this.setOptions(list?.toArray() || [])), takeUntilDestroyed())
|
|
1111
|
+
.subscribe();
|
|
1112
|
+
return this;
|
|
1113
|
+
}
|
|
1072
1114
|
setAllowMultiple(allowMultiple) {
|
|
1073
1115
|
this._allowMultiple$.next(allowMultiple);
|
|
1074
1116
|
return this;
|
|
@@ -1097,6 +1139,9 @@ class SelectionModel {
|
|
|
1097
1139
|
isSelected$(option) {
|
|
1098
1140
|
return this._selection$.pipe(map(() => this.isSelected(option)));
|
|
1099
1141
|
}
|
|
1142
|
+
isDisabled$(option) {
|
|
1143
|
+
return this._optionsAndSelection$.pipe(map(() => this.isDisabled(option)));
|
|
1144
|
+
}
|
|
1100
1145
|
getLabel$(option) {
|
|
1101
1146
|
return this.labelBinding$.pipe(map((labelBinding) => this.execFnOrGetOptionProperty(option, labelBinding)));
|
|
1102
1147
|
}
|
|
@@ -1193,6 +1238,9 @@ class SelectionModel {
|
|
|
1193
1238
|
getKey(option) {
|
|
1194
1239
|
return this.execFnOrGetOptionProperty(option, this.keyBinding);
|
|
1195
1240
|
}
|
|
1241
|
+
getDisabled(option) {
|
|
1242
|
+
return this.execFnOrGetOptionProperty(option, this.disabledBinding);
|
|
1243
|
+
}
|
|
1196
1244
|
execFnOrGetOptionProperty(option, fnOrPropertyPath) {
|
|
1197
1245
|
if (!fnOrPropertyPath || !isObject(option))
|
|
1198
1246
|
return option;
|
|
@@ -1210,6 +1258,9 @@ class SelectionModel {
|
|
|
1210
1258
|
const optionKey = this.execFnOrGetOptionProperty(option, this.keyBinding);
|
|
1211
1259
|
return this.getOption(optionKey, this.keyBinding, this.selection) !== undefined;
|
|
1212
1260
|
}
|
|
1261
|
+
isDisabled(option) {
|
|
1262
|
+
return this.execFnOrGetOptionProperty(option, this.disabledBinding);
|
|
1263
|
+
}
|
|
1213
1264
|
getFilteredOptions(filter = this.filter, options = this.options) {
|
|
1214
1265
|
if (!filter)
|
|
1215
1266
|
return options;
|
|
@@ -1252,6 +1303,7 @@ class SelectionModel {
|
|
|
1252
1303
|
this.addSelectedOption(option);
|
|
1253
1304
|
}
|
|
1254
1305
|
}
|
|
1306
|
+
// FIXME: Toggle should respect disabled binding if it exists
|
|
1255
1307
|
toggleAllSelectedOptions() {
|
|
1256
1308
|
const filteredOptions = this.getFilteredOptions();
|
|
1257
1309
|
const unselectedOptions = filteredOptions.filter((option) => !this.isSelected(option));
|
|
@@ -1266,76 +1318,98 @@ class SelectionModel {
|
|
|
1266
1318
|
}
|
|
1267
1319
|
}
|
|
1268
1320
|
|
|
1269
|
-
const
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1321
|
+
const buildElementSignal = (el) => {
|
|
1322
|
+
let mElSignal = null;
|
|
1323
|
+
if (el instanceof Observable) {
|
|
1324
|
+
mElSignal = toSignal(el.pipe(map((elOrRef) => coerceElement(elOrRef))), { initialValue: null });
|
|
1325
|
+
}
|
|
1326
|
+
else if (isSignal(el)) {
|
|
1327
|
+
mElSignal = computed(() => coerceElement(el()));
|
|
1328
|
+
}
|
|
1329
|
+
else {
|
|
1330
|
+
mElSignal = signal(coerceElement(el));
|
|
1331
|
+
}
|
|
1332
|
+
return mElSignal;
|
|
1333
|
+
};
|
|
1334
|
+
const buildSignalEffects = (config) => {
|
|
1335
|
+
const { map, eachItemFn, cleanupFn } = config;
|
|
1336
|
+
const effectRefMap = {};
|
|
1337
|
+
for (const [tokenString, signal] of Object.entries(map)) {
|
|
1338
|
+
const tokenArray = tokenString.split(' ').filter((token) => !!token);
|
|
1339
|
+
for (const token of tokenArray) {
|
|
1340
|
+
const ref = effect(() => {
|
|
1341
|
+
const value = signal();
|
|
1342
|
+
eachItemFn({ key: token, value });
|
|
1343
|
+
});
|
|
1344
|
+
effectRefMap[token] = ref;
|
|
1274
1345
|
}
|
|
1275
|
-
|
|
1276
|
-
|
|
1346
|
+
}
|
|
1347
|
+
const has = (token) => token in effectRefMap;
|
|
1348
|
+
const remove = (...tokens) => {
|
|
1349
|
+
for (const tokenString of tokens) {
|
|
1350
|
+
effectRefMap[tokenString]?.destroy();
|
|
1351
|
+
cleanupFn({ key: tokenString, value: map[tokenString]?.() });
|
|
1352
|
+
delete effectRefMap[tokenString];
|
|
1353
|
+
}
|
|
1354
|
+
};
|
|
1355
|
+
return { remove, has };
|
|
1356
|
+
};
|
|
1357
|
+
const signalClasses = (el, classMap) => {
|
|
1358
|
+
const element = buildElementSignal(el);
|
|
1359
|
+
return buildSignalEffects({
|
|
1360
|
+
map: classMap,
|
|
1361
|
+
eachItemFn: ({ key, value }) => {
|
|
1277
1362
|
if (value) {
|
|
1278
|
-
|
|
1363
|
+
element()?.classList.add(key);
|
|
1279
1364
|
}
|
|
1280
1365
|
else {
|
|
1281
|
-
|
|
1366
|
+
element()?.classList.remove(key);
|
|
1282
1367
|
}
|
|
1283
|
-
}
|
|
1284
|
-
|
|
1285
|
-
};
|
|
1286
|
-
const signalHostClasses = (classMap) => {
|
|
1287
|
-
const el = inject(ElementRef).nativeElement;
|
|
1288
|
-
signalClasses(el, classMap);
|
|
1368
|
+
},
|
|
1369
|
+
cleanupFn: ({ key }) => element()?.classList.remove(key),
|
|
1370
|
+
});
|
|
1289
1371
|
};
|
|
1372
|
+
const signalHostClasses = (classMap) => signalClasses(inject(ElementRef), classMap);
|
|
1290
1373
|
const ALWAYS_TRUE_ATTRIBUTE_KEYS = ['disabled', 'readonly', 'required', 'checked', 'selected'];
|
|
1291
1374
|
const signalAttributes = (el, attributeMap) => {
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
return;
|
|
1297
|
-
}
|
|
1298
|
-
const value = signal();
|
|
1375
|
+
const element = buildElementSignal(el);
|
|
1376
|
+
return buildSignalEffects({
|
|
1377
|
+
map: attributeMap,
|
|
1378
|
+
eachItemFn: ({ key, value }) => {
|
|
1299
1379
|
const valueString = `${value}`;
|
|
1300
|
-
|
|
1301
|
-
if (
|
|
1302
|
-
|
|
1303
|
-
el.setAttribute(attr, '');
|
|
1304
|
-
}
|
|
1305
|
-
else {
|
|
1306
|
-
el.removeAttribute(attr);
|
|
1307
|
-
}
|
|
1380
|
+
if (ALWAYS_TRUE_ATTRIBUTE_KEYS.includes(key)) {
|
|
1381
|
+
if (value) {
|
|
1382
|
+
element()?.setAttribute(key, '');
|
|
1308
1383
|
}
|
|
1309
1384
|
else {
|
|
1310
|
-
|
|
1385
|
+
element()?.removeAttribute(key);
|
|
1311
1386
|
}
|
|
1312
1387
|
}
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
}
|
|
1320
|
-
const signalStyle = (el, styleMap) => {
|
|
1321
|
-
for (const [styleString, signal] of Object.entries(styleMap)) {
|
|
1322
|
-
effect(() => {
|
|
1323
|
-
const styleArray = styleString.split(' ');
|
|
1324
|
-
if (!styleArray.length) {
|
|
1325
|
-
return;
|
|
1326
|
-
}
|
|
1327
|
-
const value = signal();
|
|
1328
|
-
const valueString = `${value}`;
|
|
1329
|
-
for (const style of styleArray) {
|
|
1330
|
-
el.style.setProperty(style, valueString);
|
|
1388
|
+
else {
|
|
1389
|
+
if (value === null || value === undefined) {
|
|
1390
|
+
element()?.removeAttribute(key);
|
|
1391
|
+
}
|
|
1392
|
+
else {
|
|
1393
|
+
element()?.setAttribute(key, valueString);
|
|
1394
|
+
}
|
|
1331
1395
|
}
|
|
1332
|
-
}
|
|
1333
|
-
|
|
1396
|
+
},
|
|
1397
|
+
cleanupFn: ({ key }) => element()?.removeAttribute(key),
|
|
1398
|
+
});
|
|
1334
1399
|
};
|
|
1335
|
-
const
|
|
1336
|
-
|
|
1337
|
-
|
|
1400
|
+
const signalHostAttributes = (attributeMap) => signalAttributes(inject(ElementRef), attributeMap);
|
|
1401
|
+
const signalStyles = (el, styleMap) => {
|
|
1402
|
+
const element = buildElementSignal(el);
|
|
1403
|
+
return buildSignalEffects({
|
|
1404
|
+
map: styleMap,
|
|
1405
|
+
eachItemFn: ({ key, value }) => {
|
|
1406
|
+
const valueString = `${value}`;
|
|
1407
|
+
element()?.style.setProperty(key, valueString);
|
|
1408
|
+
},
|
|
1409
|
+
cleanupFn: ({ key }) => element()?.style.removeProperty(key),
|
|
1410
|
+
});
|
|
1338
1411
|
};
|
|
1412
|
+
const signalHostStyles = (styleMap) => signalStyles(inject(ElementRef), styleMap);
|
|
1339
1413
|
|
|
1340
1414
|
const scrollBehaviorSupported = supportsScrollBehavior();
|
|
1341
1415
|
let _uniqueIdCounter = 0;
|
|
@@ -1581,10 +1655,8 @@ class AnimatedLifecycleDirective {
|
|
|
1581
1655
|
this._isConstructed = false;
|
|
1582
1656
|
this._state$ = new BehaviorSubject('init');
|
|
1583
1657
|
this.state$ = this._state$.asObservable();
|
|
1584
|
-
this.
|
|
1585
|
-
|
|
1586
|
-
observable: this._state$.pipe(map((state) => state === 'init')),
|
|
1587
|
-
eager: true,
|
|
1658
|
+
this.hostClassBindings = signalHostClasses({
|
|
1659
|
+
'et-force-invisible': toSignal(this._state$.pipe(map((state) => state === 'init'))),
|
|
1588
1660
|
});
|
|
1589
1661
|
}
|
|
1590
1662
|
get state() {
|
|
@@ -3502,6 +3574,8 @@ class ObserveVisibilityDirective {
|
|
|
3502
3574
|
this._elementRef = inject(ElementRef);
|
|
3503
3575
|
this._intersectionObserverService = inject(IntersectionObserverService);
|
|
3504
3576
|
this.visibilityChange = signal(null);
|
|
3577
|
+
this.currentVisibility = this.visibilityChange.asReadonly();
|
|
3578
|
+
this.currentVisibility$ = toObservable(this.currentVisibility);
|
|
3505
3579
|
this.etObserveVisibility = new EventEmitter();
|
|
3506
3580
|
signalHostClasses(signalVisibilityChangeClasses({
|
|
3507
3581
|
name: 'et-observe-visibility',
|
|
@@ -4184,5 +4258,5 @@ const Validators = {
|
|
|
4184
4258
|
* Generated bundle index. Do not edit.
|
|
4185
4259
|
*/
|
|
4186
4260
|
|
|
4187
|
-
export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AT_LEAST_ONE_REQUIRED, ActiveSelectionModel, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEBUG_TOKEN, DEFAULT_VIEWPORT_CONFIG, DELAYABLE_TOKEN, DebugDirective, DelayableDirective, ET_PROPERTY_REMOVED, FocusVisibleService, IS_ACTIVE_ELEMENT, IS_ARRAY_NOT_EMPTY, IS_ELEMENT, IS_EMAIL, IntersectionObserverFactory, IntersectionObserverService, IsActiveElementDirective, IsArrayNotEmpty, IsElementDirective, IsEmail, KeyPressManager, LetContext, LetDirective, MUST_MATCH, Memo, MustMatch, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, OBSERVE_VISIBILITY_TOKEN, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, ObserveVisibilityDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RouterStateService, RuntimeError, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SelectionModel, SeoDirective, SmartBlockScrollStrategy, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, ValidateAtLeastOneRequired, Validators, ViewportService, clamp, clone, cloneFormGroup, createDestroy, createFlipAnimation, createFlipAnimationGroup, createMediaQueryObservable, createMutationObservable, createReactiveBindings, createResizeObservable, deleteCookie, elementCanScroll, equal, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementVisibleStates, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isElementVisible, isEmptyArray, isGroupMatch, isKnockoutMatch, isObjectArray, isPrimitiveArray, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, round, routerDisableScrollTop, scrollToElement, setCookie, signalAttributes, signalClasses, signalHostAttributes, signalHostClasses,
|
|
4261
|
+
export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AT_LEAST_ONE_REQUIRED, ActiveSelectionModel, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEBUG_TOKEN, DEFAULT_VIEWPORT_CONFIG, DELAYABLE_TOKEN, DebugDirective, DelayableDirective, ET_PROPERTY_REMOVED, FocusVisibleService, IS_ACTIVE_ELEMENT, IS_ARRAY_NOT_EMPTY, IS_ELEMENT, IS_EMAIL, IntersectionObserverFactory, IntersectionObserverService, IsActiveElementDirective, IsArrayNotEmpty, IsElementDirective, IsEmail, KeyPressManager, LetContext, LetDirective, MUST_MATCH, Memo, MustMatch, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, OBSERVE_VISIBILITY_TOKEN, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, ObserveVisibilityDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RouterStateService, RuntimeError, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SelectionModel, SeoDirective, SmartBlockScrollStrategy, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, ValidateAtLeastOneRequired, Validators, ViewportService, buildSignalEffects, clamp, clone, cloneFormGroup, createDestroy, createFlipAnimation, createFlipAnimationGroup, createMediaQueryObservable, createMutationObservable, createReactiveBindings, createResizeObservable, deleteCookie, elementCanScroll, equal, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementVisibleStates, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isElementVisible, isEmptyArray, isGroupMatch, isKnockoutMatch, isObjectArray, isPrimitiveArray, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, round, routerDisableScrollTop, scrollToElement, setCookie, signalAttributes, signalClasses, signalHostAttributes, signalHostClasses, signalHostStyles, signalStyles, signalVisibilityChangeClasses, switchQueryListChanges, toArray, toArrayTrackByFn };
|
|
4188
4262
|
//# sourceMappingURL=ethlete-core.mjs.map
|