@ethlete/core 1.5.1 → 1.7.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/esm2020/lib/utils/scrollable.utils.mjs +81 -1
- package/fesm2015/ethlete-core.mjs +81 -1
- package/fesm2015/ethlete-core.mjs.map +1 -1
- package/fesm2020/ethlete-core.mjs +81 -1
- package/fesm2020/ethlete-core.mjs.map +1 -1
- package/lib/directives/animated-lifecycle/animated-lifecycle.directive.d.ts +2 -2
- package/lib/utils/scrollable.utils.d.ts +59 -0
- package/package.json +1 -1
|
@@ -2,4 +2,84 @@ export const elementCanScroll = (element) => {
|
|
|
2
2
|
const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;
|
|
3
3
|
return scrollHeight > clientHeight || scrollWidth > clientWidth;
|
|
4
4
|
};
|
|
5
|
-
|
|
5
|
+
export const isElementVisible = (options) => {
|
|
6
|
+
let { container } = options;
|
|
7
|
+
const { element } = options;
|
|
8
|
+
if (!element || container === null) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
container || (container = document.documentElement);
|
|
12
|
+
const canScroll = elementCanScroll(container);
|
|
13
|
+
if (!canScroll) {
|
|
14
|
+
return { inline: true, block: true };
|
|
15
|
+
}
|
|
16
|
+
const elementRect = element.getBoundingClientRect();
|
|
17
|
+
const containerRect = container.getBoundingClientRect();
|
|
18
|
+
const elementInlineStart = elementRect.left;
|
|
19
|
+
const elementBlockStart = elementRect.top;
|
|
20
|
+
const containerInlineStart = containerRect.left;
|
|
21
|
+
const containerBlockStart = containerRect.top;
|
|
22
|
+
const elementInlineEnd = elementInlineStart + elementRect.width;
|
|
23
|
+
const elementBlockEnd = elementBlockStart + elementRect.height;
|
|
24
|
+
const containerInlineEnd = containerInlineStart + containerRect.width;
|
|
25
|
+
const containerBlockEnd = containerBlockStart + containerRect.height;
|
|
26
|
+
const isElementInlineVisible = elementInlineStart >= containerInlineStart && elementInlineEnd <= containerInlineEnd;
|
|
27
|
+
const isElementBlockVisible = elementBlockStart >= containerBlockStart && elementBlockEnd <= containerBlockEnd;
|
|
28
|
+
return { inline: isElementInlineVisible, block: isElementBlockVisible };
|
|
29
|
+
};
|
|
30
|
+
export const scrollToElement = (options) => {
|
|
31
|
+
let { container } = options;
|
|
32
|
+
const { element, direction, behavior = 'smooth', origin = 'nearest', scrollBlockMargin = 0, scrollInlineMargin = 0, } = options;
|
|
33
|
+
if (!element || container === null) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
container || (container = document.documentElement);
|
|
37
|
+
const canScroll = elementCanScroll(container);
|
|
38
|
+
if (!canScroll) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const elementRect = element.getBoundingClientRect();
|
|
42
|
+
const containerRect = container.getBoundingClientRect();
|
|
43
|
+
const elementInlineSize = elementRect.width;
|
|
44
|
+
const elementBlockSize = elementRect.height;
|
|
45
|
+
const containerInlineSize = containerRect.width;
|
|
46
|
+
const containerBlockSize = containerRect.height;
|
|
47
|
+
const elementInlineStart = elementRect.left;
|
|
48
|
+
const elementBlockStart = elementRect.top;
|
|
49
|
+
const containerInlineStart = containerRect.left;
|
|
50
|
+
const containerBlockStart = containerRect.top;
|
|
51
|
+
const elementInlineEnd = elementInlineStart + elementInlineSize;
|
|
52
|
+
const elementBlockEnd = elementBlockStart + elementBlockSize;
|
|
53
|
+
const containerInlineEnd = containerInlineStart + containerInlineSize;
|
|
54
|
+
const containerBlockEnd = containerBlockStart + containerBlockSize;
|
|
55
|
+
const elementInlineCenter = elementInlineStart + elementInlineSize / 2;
|
|
56
|
+
const elementBlockCenter = elementBlockStart + elementBlockSize / 2;
|
|
57
|
+
const containerInlineCenter = containerInlineStart + containerInlineSize / 2;
|
|
58
|
+
const containerBlockCenter = containerBlockStart + containerBlockSize / 2;
|
|
59
|
+
const elementInlineOrigin = origin === 'center' ? elementInlineCenter : origin === 'end' ? elementInlineEnd : elementInlineStart;
|
|
60
|
+
const elementBlockOrigin = origin === 'center' ? elementBlockCenter : origin === 'end' ? elementBlockEnd : elementBlockStart;
|
|
61
|
+
const containerInlineOrigin = origin === 'center' ? containerInlineCenter : origin === 'end' ? containerInlineEnd : containerInlineStart;
|
|
62
|
+
const containerBlockOrigin = origin === 'center' ? containerBlockCenter : origin === 'end' ? containerBlockEnd : containerBlockStart;
|
|
63
|
+
const inlineOffset = elementInlineOrigin - containerInlineOrigin - scrollInlineMargin;
|
|
64
|
+
const blockOffset = elementBlockOrigin - containerBlockOrigin - scrollBlockMargin;
|
|
65
|
+
let inlineScroll = direction === 'block' ? undefined : inlineOffset;
|
|
66
|
+
let blockScroll = direction === 'inline' ? undefined : blockOffset;
|
|
67
|
+
if (origin === 'nearest') {
|
|
68
|
+
const elVisible = isElementVisible({ element, container });
|
|
69
|
+
if (elVisible?.inline && elVisible?.block) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (elVisible?.inline) {
|
|
73
|
+
inlineScroll = undefined;
|
|
74
|
+
}
|
|
75
|
+
if (elVisible?.block) {
|
|
76
|
+
blockScroll = undefined;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
container.scrollTo({
|
|
80
|
+
left: inlineScroll,
|
|
81
|
+
top: blockScroll,
|
|
82
|
+
behavior,
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3Njcm9sbGFibGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUU7SUFDdkQsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV6RSxPQUFPLFlBQVksR0FBRyxZQUFZLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUEyQkYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUFnQyxFQUFtQyxFQUFFO0lBQ3BHLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDNUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUU1QixJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7UUFDbEMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELFNBQVMsS0FBVCxTQUFTLEdBQUssUUFBUSxDQUFDLGVBQWUsRUFBQztJQUV2QyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0tBQ3RDO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDcEQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFeEQsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzVDLE1BQU0saUJBQWlCLEdB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LE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxTQUFTLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUU7WUFDekMsT0FBTztTQUNSO1FBRUQsSUFBSSxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQ3JCLFlBQVksR0FBRyxTQUFTLENBQUM7U0FDMUI7UUFFRCxJQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUU7WUFDcEIsV0FBVyxHQUFHLFNBQVMsQ0FBQztTQUN6QjtLQUNGO0lBRUQsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixJQUFJLEVBQUUsWUFBWTtRQUNsQixHQUFHLEVBQUUsV0FBVztRQUNoQixRQUFRO0tBQ1QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVsZW1lbnRDYW5TY3JvbGwgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgY29uc3QgeyBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCwgc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoIH0gPSBlbGVtZW50O1xuXG4gIHJldHVybiBzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQgfHwgc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNFbGVtZW50VmlzaWJsZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gY2hlY2sgaWYgaXQgaXMgdmlzaWJsZSBpbnNpZGUgYSBjb250YWluZXIuXG4gICAqL1xuICBlbGVtZW50PzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW5zaWRlLlxuICAgKiBAZGVmYXVsdCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICovXG4gIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJyZW50RWxlbWVudFZpc2liaWxpdHkge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLlxuICAgKi9cbiAgaW5saW5lOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIGJsb2NrIGRpcmVjdGlvbi5cbiAgICovXG4gIGJsb2NrOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgaXNFbGVtZW50VmlzaWJsZSA9IChvcHRpb25zOiBJc0VsZW1lbnRWaXNpYmxlT3B0aW9ucyk6IEN1cnJlbnRFbGVtZW50VmlzaWJpbGl0eSB8IG51bGwgPT4ge1xuICBsZXQgeyBjb250YWluZXIgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgZWxlbWVudCB9ID0gb3B0aW9ucztcblxuICBpZiAoIWVsZW1lbnQgfHwgY29udGFpbmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb250YWluZXIgfHw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICBjb25zdCBjYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKGNvbnRhaW5lcik7XG5cbiAgaWYgKCFjYW5TY3JvbGwpIHtcbiAgICByZXR1cm4geyBpbmxpbmU6IHRydWUsIGJsb2NrOiB0cnVlIH07XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3QgZWxlbWVudElubGluZVN0YXJ0ID0gZWxlbWVudFJlY3QubGVmdDtcbiAgY29uc3QgZWxlbWVudEJsb2NrU3RhcnQgPSBlbGVtZW50UmVjdC50b3A7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lU3RhcnQgPSBjb250YWluZXJSZWN0LmxlZnQ7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrU3RhcnQgPSBjb250YWluZXJSZWN0LnRvcDtcblxuICBjb25zdCBlbGVtZW50SW5saW5lRW5kID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxlbWVudFJlY3Qud2lkdGg7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja0VuZCA9IGVsZW1lbnRCbG9ja1N0YXJ0ICsgZWxlbWVudFJlY3QuaGVpZ2h0O1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZUVuZCA9IGNvbnRhaW5lcklubGluZVN0YXJ0ICsgY29udGFpbmVyUmVjdC53aWR0aDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tFbmQgPSBjb250YWluZXJCbG9ja1N0YXJ0ICsgY29udGFpbmVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgaXNFbGVtZW50SW5saW5lVmlzaWJsZSA9IGVsZW1lbnRJbmxpbmVTdGFydCA+PSBjb250YWluZXJJbmxpbmVTdGFydCAmJiBlbGVtZW50SW5saW5lRW5kIDw9IGNvbnRhaW5lcklubGluZUVuZDtcbiAgY29uc3QgaXNFbGVtZW50QmxvY2tWaXNpYmxlID0gZWxlbWVudEJsb2NrU3RhcnQgPj0gY29udGFpbmVyQmxvY2tTdGFydCAmJiBlbGVtZW50QmxvY2tFbmQgPD0gY29udGFpbmVyQmxvY2tFbmQ7XG5cbiAgcmV0dXJuIHsgaW5saW5lOiBpc0VsZW1lbnRJbmxpbmVWaXNpYmxlLCBibG9jazogaXNFbGVtZW50QmxvY2tWaXNpYmxlIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbFRvRWxlbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gc2Nyb2xsIHRvLlxuICAgKi9cbiAgZWxlbWVudD86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBjb250YWluZXIgdG8gc2Nyb2xsIHRvIHRoZSBlbGVtZW50IGluLlxuICAgKiBAZGVmYXVsdCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICovXG4gIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiB0byBzY3JvbGwgaW4uXG4gICAqIEBkZWZhdWx0ICdib3RoJ1xuICAgKi9cbiAgZGlyZWN0aW9uPzogJ2lubGluZScgfCAnYmxvY2snIHwgJ2JvdGgnO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luIG9mIHRoZSBlbGVtZW50IHRvIHNjcm9sbCB0by5cbiAgICogQGRlZmF1bHQgJ25lYXJlc3QnXG4gICAqL1xuICBvcmlnaW4/OiAnc3RhcnQnIHwgJ2VuZCcgfCAnY2VudGVyJyB8ICduZWFyZXN0JztcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgJ3Ntb290aCdcbiAgICovXG4gIGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgaW5saW5lLW1hcmdpblxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzY3JvbGxJbmxpbmVNYXJnaW4/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgYmxvY2stbWFyZ2luXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNjcm9sbEJsb2NrTWFyZ2luPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gKG9wdGlvbnM6IFNjcm9sbFRvRWxlbWVudE9wdGlvbnMpID0+IHtcbiAgbGV0IHsgY29udGFpbmVyIH0gPSBvcHRpb25zO1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBkaXJlY3Rpb24sXG4gICAgYmVoYXZpb3IgPSAnc21vb3RoJyxcbiAgICBvcmlnaW4gPSAnbmVhcmVzdCcsXG4gICAgc2Nyb2xsQmxvY2tNYXJnaW4gPSAwLFxuICAgIHNjcm9sbElubGluZU1hcmdpbiA9IDAsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmICghZWxlbWVudCB8fCBjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250YWluZXIgfHw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICBjb25zdCBjYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKGNvbnRhaW5lcik7XG5cbiAgaWYgKCFjYW5TY3JvbGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3QgZWxlbWVudElubGluZVNpemUgPSBlbGVtZW50UmVjdC53aWR0aDtcbiAgY29uc3QgZWxlbWVudEJsb2NrU2l6ZSA9IGVsZW1lbnRSZWN0LmhlaWdodDtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVTaXplID0gY29udGFpbmVyUmVjdC53aWR0aDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tTaXplID0gY29udGFpbmVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgZWxlbWVudElubGluZVN0YXJ0ID0gZWxlbWVudFJlY3QubGVmdDtcbiAgY29uc3QgZWxlbWVudEJsb2NrU3RhcnQgPSBlbGVtZW50UmVjdC50b3A7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lU3RhcnQgPSBjb250YWluZXJSZWN0LmxlZnQ7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrU3RhcnQgPSBjb250YWluZXJSZWN0LnRvcDtcblxuICBjb25zdCBlbGVtZW50SW5saW5lRW5kID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxlbWVudElubGluZVNpemU7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja0VuZCA9IGVsZW1lbnRCbG9ja1N0YXJ0ICsgZWxlbWVudEJsb2NrU2l6ZTtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVFbmQgPSBjb250YWluZXJJbmxpbmVTdGFydCArIGNvbnRhaW5lcklubGluZVNpemU7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrRW5kID0gY29udGFpbmVyQmxvY2tTdGFydCArIGNvbnRhaW5lckJsb2NrU2l6ZTtcblxuICBjb25zdCBlbGVtZW50SW5saW5lQ2VudGVyID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxlbWVudElubGluZVNpemUgLyAyO1xuICBjb25zdCBlbGVtZW50QmxvY2tDZW50ZXIgPSBlbGVtZW50QmxvY2tTdGFydCArIGVsZW1lbnRCbG9ja1NpemUgLyAyO1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZUNlbnRlciA9IGNvbnRhaW5lcklubGluZVN0YXJ0ICsgY29udGFpbmVySW5saW5lU2l6ZSAvIDI7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrQ2VudGVyID0gY29udGFpbmVyQmxvY2tTdGFydCArIGNvbnRhaW5lckJsb2NrU2l6ZSAvIDI7XG5cbiAgY29uc3QgZWxlbWVudElubGluZU9yaWdpbiA9XG4gICAgb3JpZ2luID09PSAnY2VudGVyJyA/IGVsZW1lbnRJbmxpbmVDZW50ZXIgOiBvcmlnaW4gPT09ICdlbmQnID8gZWxlbWVudElubGluZUVuZCA6IGVsZW1lbnRJbmxpbmVTdGFydDtcbiAgY29uc3QgZWxlbWVudEJsb2NrT3JpZ2luID1cbiAgICBvcmlnaW4gPT09ICdjZW50ZXInID8gZWxlbWVudEJsb2NrQ2VudGVyIDogb3JpZ2luID09PSAnZW5kJyA/IGVsZW1lbnRCbG9ja0VuZCA6IGVsZW1lbnRCbG9ja1N0YXJ0O1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZU9yaWdpbiA9XG4gICAgb3JpZ2luID09PSAnY2VudGVyJyA/IGNvbnRhaW5lcklubGluZUNlbnRlciA6IG9yaWdpbiA9PT0gJ2VuZCcgPyBjb250YWluZXJJbmxpbmVFbmQgOiBjb250YWluZXJJbmxpbmVTdGFydDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tPcmlnaW4gPVxuICAgIG9yaWdpbiA9PT0gJ2NlbnRlcicgPyBjb250YWluZXJCbG9ja0NlbnRlciA6IG9yaWdpbiA9PT0gJ2VuZCcgPyBjb250YWluZXJCbG9ja0VuZCA6IGNvbnRhaW5lckJsb2NrU3RhcnQ7XG5cbiAgY29uc3QgaW5saW5lT2Zmc2V0ID0gZWxlbWVudElubGluZU9yaWdpbiAtIGNvbnRhaW5lcklubGluZU9yaWdpbiAtIHNjcm9sbElubGluZU1hcmdpbjtcbiAgY29uc3QgYmxvY2tPZmZzZXQgPSBlbGVtZW50QmxvY2tPcmlnaW4gLSBjb250YWluZXJCbG9ja09yaWdpbiAtIHNjcm9sbEJsb2NrTWFyZ2luO1xuXG4gIGxldCBpbmxpbmVTY3JvbGw6IG51bWJlciB8IHVuZGVmaW5lZCA9IGRpcmVjdGlvbiA9PT0gJ2Jsb2NrJyA/IHVuZGVmaW5lZCA6IGlubGluZU9mZnNldDtcbiAgbGV0IGJsb2NrU2Nyb2xsOiBudW1iZXIgfCB1bmRlZmluZWQgPSBkaXJlY3Rpb24gPT09ICdpbmxpbmUnID8gdW5kZWZpbmVkIDogYmxvY2tPZmZzZXQ7XG5cbiAgaWYgKG9yaWdpbiA9PT0gJ25lYXJlc3QnKSB7XG4gICAgY29uc3QgZWxWaXNpYmxlID0gaXNFbGVtZW50VmlzaWJsZSh7IGVsZW1lbnQsIGNvbnRhaW5lciB9KTtcblxuICAgIGlmIChlbFZpc2libGU/LmlubGluZSAmJiBlbFZpc2libGU/LmJsb2NrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVsVmlzaWJsZT8uaW5saW5lKSB7XG4gICAgICBpbmxpbmVTY3JvbGwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGVsVmlzaWJsZT8uYmxvY2spIHtcbiAgICAgIGJsb2NrU2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRhaW5lci5zY3JvbGxUbyh7XG4gICAgbGVmdDogaW5saW5lU2Nyb2xsLFxuICAgIHRvcDogYmxvY2tTY3JvbGwsXG4gICAgYmVoYXZpb3IsXG4gIH0pO1xufTtcbiJdfQ==
|
|
@@ -862,6 +862,86 @@ const elementCanScroll = (element) => {
|
|
|
862
862
|
const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;
|
|
863
863
|
return scrollHeight > clientHeight || scrollWidth > clientWidth;
|
|
864
864
|
};
|
|
865
|
+
const isElementVisible = (options) => {
|
|
866
|
+
let { container } = options;
|
|
867
|
+
const { element } = options;
|
|
868
|
+
if (!element || container === null) {
|
|
869
|
+
return null;
|
|
870
|
+
}
|
|
871
|
+
container || (container = document.documentElement);
|
|
872
|
+
const canScroll = elementCanScroll(container);
|
|
873
|
+
if (!canScroll) {
|
|
874
|
+
return { inline: true, block: true };
|
|
875
|
+
}
|
|
876
|
+
const elementRect = element.getBoundingClientRect();
|
|
877
|
+
const containerRect = container.getBoundingClientRect();
|
|
878
|
+
const elementInlineStart = elementRect.left;
|
|
879
|
+
const elementBlockStart = elementRect.top;
|
|
880
|
+
const containerInlineStart = containerRect.left;
|
|
881
|
+
const containerBlockStart = containerRect.top;
|
|
882
|
+
const elementInlineEnd = elementInlineStart + elementRect.width;
|
|
883
|
+
const elementBlockEnd = elementBlockStart + elementRect.height;
|
|
884
|
+
const containerInlineEnd = containerInlineStart + containerRect.width;
|
|
885
|
+
const containerBlockEnd = containerBlockStart + containerRect.height;
|
|
886
|
+
const isElementInlineVisible = elementInlineStart >= containerInlineStart && elementInlineEnd <= containerInlineEnd;
|
|
887
|
+
const isElementBlockVisible = elementBlockStart >= containerBlockStart && elementBlockEnd <= containerBlockEnd;
|
|
888
|
+
return { inline: isElementInlineVisible, block: isElementBlockVisible };
|
|
889
|
+
};
|
|
890
|
+
const scrollToElement = (options) => {
|
|
891
|
+
let { container } = options;
|
|
892
|
+
const { element, direction, behavior = 'smooth', origin = 'nearest', scrollBlockMargin = 0, scrollInlineMargin = 0, } = options;
|
|
893
|
+
if (!element || container === null) {
|
|
894
|
+
return;
|
|
895
|
+
}
|
|
896
|
+
container || (container = document.documentElement);
|
|
897
|
+
const canScroll = elementCanScroll(container);
|
|
898
|
+
if (!canScroll) {
|
|
899
|
+
return;
|
|
900
|
+
}
|
|
901
|
+
const elementRect = element.getBoundingClientRect();
|
|
902
|
+
const containerRect = container.getBoundingClientRect();
|
|
903
|
+
const elementInlineSize = elementRect.width;
|
|
904
|
+
const elementBlockSize = elementRect.height;
|
|
905
|
+
const containerInlineSize = containerRect.width;
|
|
906
|
+
const containerBlockSize = containerRect.height;
|
|
907
|
+
const elementInlineStart = elementRect.left;
|
|
908
|
+
const elementBlockStart = elementRect.top;
|
|
909
|
+
const containerInlineStart = containerRect.left;
|
|
910
|
+
const containerBlockStart = containerRect.top;
|
|
911
|
+
const elementInlineEnd = elementInlineStart + elementInlineSize;
|
|
912
|
+
const elementBlockEnd = elementBlockStart + elementBlockSize;
|
|
913
|
+
const containerInlineEnd = containerInlineStart + containerInlineSize;
|
|
914
|
+
const containerBlockEnd = containerBlockStart + containerBlockSize;
|
|
915
|
+
const elementInlineCenter = elementInlineStart + elementInlineSize / 2;
|
|
916
|
+
const elementBlockCenter = elementBlockStart + elementBlockSize / 2;
|
|
917
|
+
const containerInlineCenter = containerInlineStart + containerInlineSize / 2;
|
|
918
|
+
const containerBlockCenter = containerBlockStart + containerBlockSize / 2;
|
|
919
|
+
const elementInlineOrigin = origin === 'center' ? elementInlineCenter : origin === 'end' ? elementInlineEnd : elementInlineStart;
|
|
920
|
+
const elementBlockOrigin = origin === 'center' ? elementBlockCenter : origin === 'end' ? elementBlockEnd : elementBlockStart;
|
|
921
|
+
const containerInlineOrigin = origin === 'center' ? containerInlineCenter : origin === 'end' ? containerInlineEnd : containerInlineStart;
|
|
922
|
+
const containerBlockOrigin = origin === 'center' ? containerBlockCenter : origin === 'end' ? containerBlockEnd : containerBlockStart;
|
|
923
|
+
const inlineOffset = elementInlineOrigin - containerInlineOrigin - scrollInlineMargin;
|
|
924
|
+
const blockOffset = elementBlockOrigin - containerBlockOrigin - scrollBlockMargin;
|
|
925
|
+
let inlineScroll = direction === 'block' ? undefined : inlineOffset;
|
|
926
|
+
let blockScroll = direction === 'inline' ? undefined : blockOffset;
|
|
927
|
+
if (origin === 'nearest') {
|
|
928
|
+
const elVisible = isElementVisible({ element, container });
|
|
929
|
+
if ((elVisible === null || elVisible === void 0 ? void 0 : elVisible.inline) && (elVisible === null || elVisible === void 0 ? void 0 : elVisible.block)) {
|
|
930
|
+
return;
|
|
931
|
+
}
|
|
932
|
+
if (elVisible === null || elVisible === void 0 ? void 0 : elVisible.inline) {
|
|
933
|
+
inlineScroll = undefined;
|
|
934
|
+
}
|
|
935
|
+
if (elVisible === null || elVisible === void 0 ? void 0 : elVisible.block) {
|
|
936
|
+
blockScroll = undefined;
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
container.scrollTo({
|
|
940
|
+
left: inlineScroll,
|
|
941
|
+
top: blockScroll,
|
|
942
|
+
behavior,
|
|
943
|
+
});
|
|
944
|
+
};
|
|
865
945
|
|
|
866
946
|
const scrollBehaviorSupported = supportsScrollBehavior();
|
|
867
947
|
class SmartBlockScrollStrategy {
|
|
@@ -2647,5 +2727,5 @@ const Validators = {
|
|
|
2647
2727
|
* Generated bundle index. Do not edit.
|
|
2648
2728
|
*/
|
|
2649
2729
|
|
|
2650
|
-
export { ANIMATABLE_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AnimatableDirective, AnimatedLifecycleDirective, BehaviorSubjectWithSubscriberCount, ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG, DestroyService, FocusVisibleService, IS_ARRAY_NOT_EMPTY, IS_EMAIL, IsArrayNotEmpty, IsEmail, LetContext, LetDirective, MUST_MATCH, Memo, MustMatch, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RouterStateService, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SeoDirective, SmartBlockScrollStrategy, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, Validators, ViewportService, clamp, clone, createFlipAnimation, createFlipAnimationGroup, createMediaQueryObservable, createReactiveBindings, deleteCookie, elementCanScroll, equal, forceReflow, fromNextFrame, getCookie, getDomain, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isGroupMatch, isKnockoutMatch, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, routerDisableScrollTop, setCookie, toArray, toArrayTrackByFn };
|
|
2730
|
+
export { ANIMATABLE_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AnimatableDirective, AnimatedLifecycleDirective, BehaviorSubjectWithSubscriberCount, ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG, DestroyService, FocusVisibleService, IS_ARRAY_NOT_EMPTY, IS_EMAIL, IsArrayNotEmpty, IsEmail, LetContext, LetDirective, MUST_MATCH, Memo, MustMatch, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RouterStateService, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SeoDirective, SmartBlockScrollStrategy, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, Validators, ViewportService, clamp, clone, createFlipAnimation, createFlipAnimationGroup, createMediaQueryObservable, createReactiveBindings, deleteCookie, elementCanScroll, equal, forceReflow, fromNextFrame, getCookie, getDomain, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isElementVisible, isGroupMatch, isKnockoutMatch, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, routerDisableScrollTop, scrollToElement, setCookie, toArray, toArrayTrackByFn };
|
|
2651
2731
|
//# sourceMappingURL=ethlete-core.mjs.map
|