@ethlete/core 1.5.1 → 1.6.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 +49 -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' } = 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;
|
|
64
|
+
const blockOffset = elementBlockOrigin - containerBlockOrigin;
|
|
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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QUksU0FBUyxFQUFFLE1BQU0sSUFBSSxTQUFTLEVBQUUsS0FBSyxFQUFFO1lBQ3pDLE9BQU87U0FDUjtRQUVELElBQUksU0FBUyxFQUFFLE1BQU0sRUFBRTtZQUNyQixZQUFZLEdBQUcsU0FBUyxDQUFDO1NBQzFCO1FBRUQsSUFBSSxTQUFTLEVBQUUsS0FBSyxFQUFFO1lBQ3BCLFdBQVcsR0FBRyxTQUFTLENBQUM7U0FDekI7S0FDRjtJQUVELFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDakIsSUFBSSxFQUFFLFlBQVk7UUFDbEIsR0FBRyxFQUFFLFdBQVc7UUFDaEIsUUFBUTtLQUNULENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbGVtZW50Q2FuU2Nyb2xsID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQsIHNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCB9ID0gZWxlbWVudDtcblxuICByZXR1cm4gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0IHx8IHNjcm9sbFdpZHRoID4gY2xpZW50V2lkdGg7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElzRWxlbWVudFZpc2libGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGNoZWNrIGlmIGl0IGlzIHZpc2libGUgaW5zaWRlIGEgY29udGFpbmVyLlxuICAgKi9cbiAgZWxlbWVudD86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciB0byBjaGVjayBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluc2lkZS5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAqL1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbi5cbiAgICovXG4gIGlubGluZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBibG9jayBkaXJlY3Rpb24uXG4gICAqL1xuICBibG9jazogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGlzRWxlbWVudFZpc2libGUgPSAob3B0aW9uczogSXNFbGVtZW50VmlzaWJsZU9wdGlvbnMpOiBDdXJyZW50RWxlbWVudFZpc2liaWxpdHkgfCBudWxsID0+IHtcbiAgbGV0IHsgY29udGFpbmVyIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IGVsZW1lbnQgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKCFlbGVtZW50IHx8IGNvbnRhaW5lciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29udGFpbmVyIHx8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgY29uc3QgY2FuU2Nyb2xsID0gZWxlbWVudENhblNjcm9sbChjb250YWluZXIpO1xuXG4gIGlmICghY2FuU2Nyb2xsKSB7XG4gICAgcmV0dXJuIHsgaW5saW5lOiB0cnVlLCBibG9jazogdHJ1ZSB9O1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVTdGFydCA9IGVsZW1lbnRSZWN0LmxlZnQ7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja1N0YXJ0ID0gZWxlbWVudFJlY3QudG9wO1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZVN0YXJ0ID0gY29udGFpbmVyUmVjdC5sZWZ0O1xuICBjb25zdCBjb250YWluZXJCbG9ja1N0YXJ0ID0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgY29uc3QgZWxlbWVudElubGluZUVuZCA9IGVsZW1lbnRJbmxpbmVTdGFydCArIGVsZW1lbnRSZWN0LndpZHRoO1xuICBjb25zdCBlbGVtZW50QmxvY2tFbmQgPSBlbGVtZW50QmxvY2tTdGFydCArIGVsZW1lbnRSZWN0LmhlaWdodDtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVFbmQgPSBjb250YWluZXJJbmxpbmVTdGFydCArIGNvbnRhaW5lclJlY3Qud2lkdGg7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrRW5kID0gY29udGFpbmVyQmxvY2tTdGFydCArIGNvbnRhaW5lclJlY3QuaGVpZ2h0O1xuXG4gIGNvbnN0IGlzRWxlbWVudElubGluZVZpc2libGUgPSBlbGVtZW50SW5saW5lU3RhcnQgPj0gY29udGFpbmVySW5saW5lU3RhcnQgJiYgZWxlbWVudElubGluZUVuZCA8PSBjb250YWluZXJJbmxpbmVFbmQ7XG4gIGNvbnN0IGlzRWxlbWVudEJsb2NrVmlzaWJsZSA9IGVsZW1lbnRCbG9ja1N0YXJ0ID49IGNvbnRhaW5lckJsb2NrU3RhcnQgJiYgZWxlbWVudEJsb2NrRW5kIDw9IGNvbnRhaW5lckJsb2NrRW5kO1xuXG4gIHJldHVybiB7IGlubGluZTogaXNFbGVtZW50SW5saW5lVmlzaWJsZSwgYmxvY2s6IGlzRWxlbWVudEJsb2NrVmlzaWJsZSB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JvbGxUb0VsZW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIHNjcm9sbCB0by5cbiAgICovXG4gIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgY29udGFpbmVyIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCBpbi5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAqL1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gdG8gc2Nyb2xsIGluLlxuICAgKiBAZGVmYXVsdCAnYm90aCdcbiAgICovXG4gIGRpcmVjdGlvbj86ICdpbmxpbmUnIHwgJ2Jsb2NrJyB8ICdib3RoJztcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiBvZiB0aGUgZWxlbWVudCB0byBzY3JvbGwgdG8uXG4gICAqIEBkZWZhdWx0ICduZWFyZXN0J1xuICAgKi9cbiAgb3JpZ2luPzogJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnbmVhcmVzdCc7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0ICdzbW9vdGgnXG4gICAqL1xuICBiZWhhdmlvcj86IFNjcm9sbEJlaGF2aW9yO1xufVxuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gKG9wdGlvbnM6IFNjcm9sbFRvRWxlbWVudE9wdGlvbnMpID0+IHtcbiAgbGV0IHsgY29udGFpbmVyIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IGVsZW1lbnQsIGRpcmVjdGlvbiwgYmVoYXZpb3IgPSAnc21vb3RoJywgb3JpZ2luID0gJ25lYXJlc3QnIH0gPSBvcHRpb25zO1xuXG4gIGlmICghZWxlbWVudCB8fCBjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250YWluZXIgfHw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICBjb25zdCBjYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKGNvbnRhaW5lcik7XG5cbiAgaWYgKCFjYW5TY3JvbGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3QgZWxlbWVudElubGluZVNpemUgPSBlbGVtZW50UmVjdC53aWR0aDtcbiAgY29uc3QgZWxlbWVudEJsb2NrU2l6ZSA9IGVsZW1lbnRSZWN0LmhlaWdodDtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVTaXplID0gY29udGFpbmVyUmVjdC53aWR0aDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tTaXplID0gY29udGFpbmVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgZWxlbWVudElubGluZVN0YXJ0ID0gZWxlbWVudFJlY3QubGVmdDtcbiAgY29uc3QgZWxlbWVudEJsb2NrU3RhcnQgPSBlbGVtZW50UmVjdC50b3A7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lU3RhcnQgPSBjb250YWluZXJSZWN0LmxlZnQ7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrU3RhcnQgPSBjb250YWluZXJSZWN0LnRvcDtcblxuICBjb25zdCBlbGVtZW50SW5saW5lRW5kID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxlbWVudElubGluZVNpemU7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja0VuZCA9IGVsZW1lbnRCbG9ja1N0YXJ0ICsgZWxlbWVudEJsb2NrU2l6ZTtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVFbmQgPSBjb250YWluZXJJbmxpbmVTdGFydCArIGNvbnRhaW5lcklubGluZVNpemU7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrRW5kID0gY29udGFpbmVyQmxvY2tTdGFydCArIGNvbnRhaW5lckJsb2NrU2l6ZTtcblxuICBjb25zdCBlbGVtZW50SW5saW5lQ2VudGVyID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxlbWVudElubGluZVNpemUgLyAyO1xuICBjb25zdCBlbGVtZW50QmxvY2tDZW50ZXIgPSBlbGVtZW50QmxvY2tTdGFydCArIGVsZW1lbnRCbG9ja1NpemUgLyAyO1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZUNlbnRlciA9IGNvbnRhaW5lcklubGluZVN0YXJ0ICsgY29udGFpbmVySW5saW5lU2l6ZSAvIDI7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrQ2VudGVyID0gY29udGFpbmVyQmxvY2tTdGFydCArIGNvbnRhaW5lckJsb2NrU2l6ZSAvIDI7XG5cbiAgY29uc3QgZWxlbWVudElubGluZU9yaWdpbiA9XG4gICAgb3JpZ2luID09PSAnY2VudGVyJyA/IGVsZW1lbnRJbmxpbmVDZW50ZXIgOiBvcmlnaW4gPT09ICdlbmQnID8gZWxlbWVudElubGluZUVuZCA6IGVsZW1lbnRJbmxpbmVTdGFydDtcbiAgY29uc3QgZWxlbWVudEJsb2NrT3JpZ2luID1cbiAgICBvcmlnaW4gPT09ICdjZW50ZXInID8gZWxlbWVudEJsb2NrQ2VudGVyIDogb3JpZ2luID09PSAnZW5kJyA/IGVsZW1lbnRCbG9ja0VuZCA6IGVsZW1lbnRCbG9ja1N0YXJ0O1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZU9yaWdpbiA9XG4gICAgb3JpZ2luID09PSAnY2VudGVyJyA/IGNvbnRhaW5lcklubGluZUNlbnRlciA6IG9yaWdpbiA9PT0gJ2VuZCcgPyBjb250YWluZXJJbmxpbmVFbmQgOiBjb250YWluZXJJbmxpbmVTdGFydDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tPcmlnaW4gPVxuICAgIG9yaWdpbiA9PT0gJ2NlbnRlcicgPyBjb250YWluZXJCbG9ja0NlbnRlciA6IG9yaWdpbiA9PT0gJ2VuZCcgPyBjb250YWluZXJCbG9ja0VuZCA6IGNvbnRhaW5lckJsb2NrU3RhcnQ7XG5cbiAgY29uc3QgaW5saW5lT2Zmc2V0ID0gZWxlbWVudElubGluZU9yaWdpbiAtIGNvbnRhaW5lcklubGluZU9yaWdpbjtcbiAgY29uc3QgYmxvY2tPZmZzZXQgPSBlbGVtZW50QmxvY2tPcmlnaW4gLSBjb250YWluZXJCbG9ja09yaWdpbjtcblxuICBsZXQgaW5saW5lU2Nyb2xsOiBudW1iZXIgfCB1bmRlZmluZWQgPSBkaXJlY3Rpb24gPT09ICdibG9jaycgPyB1bmRlZmluZWQgOiBpbmxpbmVPZmZzZXQ7XG4gIGxldCBibG9ja1Njcm9sbDogbnVtYmVyIHwgdW5kZWZpbmVkID0gZGlyZWN0aW9uID09PSAnaW5saW5lJyA/IHVuZGVmaW5lZCA6IGJsb2NrT2Zmc2V0O1xuXG4gIGlmIChvcmlnaW4gPT09ICduZWFyZXN0Jykge1xuICAgIGNvbnN0IGVsVmlzaWJsZSA9IGlzRWxlbWVudFZpc2libGUoeyBlbGVtZW50LCBjb250YWluZXIgfSk7XG5cbiAgICBpZiAoZWxWaXNpYmxlPy5pbmxpbmUgJiYgZWxWaXNpYmxlPy5ibG9jaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbFZpc2libGU/LmlubGluZSkge1xuICAgICAgaW5saW5lU2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChlbFZpc2libGU/LmJsb2NrKSB7XG4gICAgICBibG9ja1Njcm9sbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBjb250YWluZXIuc2Nyb2xsVG8oe1xuICAgIGxlZnQ6IGlubGluZVNjcm9sbCxcbiAgICB0b3A6IGJsb2NrU2Nyb2xsLFxuICAgIGJlaGF2aW9yLFxuICB9KTtcbn07XG4iXX0=
|
|
@@ -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' } = 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;
|
|
924
|
+
const blockOffset = elementBlockOrigin - containerBlockOrigin;
|
|
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
|