@design.estate/dees-domtools 2.1.1 → 2.2.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/dist_bundle/bundle.js +999 -21
- package/dist_bundle/bundle.js.map +4 -4
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/domtools.classes.domtools.d.ts +2 -1
- package/dist_ts/domtools.classes.domtools.js +2 -4
- package/dist_ts/domtools.classes.scroller.d.ts +9 -0
- package/dist_ts/domtools.classes.scroller.js +56 -1
- package/dist_ts/domtools.plugins.d.ts +2 -1
- package/dist_ts/domtools.plugins.js +3 -2
- package/package.json +8 -7
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/domtools.classes.domtools.ts +1 -3
- package/ts/domtools.classes.scroller.ts +73 -1
- package/ts/domtools.plugins.ts +2 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-domtools',
|
|
6
|
-
version: '2.
|
|
6
|
+
version: '2.2.0',
|
|
7
7
|
description: 'A package providing tools to simplify complex CSS structures and web development tasks, featuring TypeScript support and integration with various web technologies.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSw4QkFBOEI7SUFDcEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHFLQUFxSztDQUNuTCxDQUFBIn0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as plugins from './domtools.plugins.js';
|
|
2
2
|
import { type TViewport } from './domtools.css.breakpoints.js';
|
|
3
|
+
import { Scroller } from './domtools.classes.scroller.js';
|
|
3
4
|
import { WebSetup } from '@push.rocks/websetup';
|
|
4
5
|
import { ThemeManager } from './domtools.classes.thememanager.js';
|
|
5
6
|
import { Keyboard } from './domtools.classes.keyboard.js';
|
|
@@ -34,7 +35,7 @@ export declare class DomTools {
|
|
|
34
35
|
smarturl: typeof plugins.smarturl;
|
|
35
36
|
};
|
|
36
37
|
deesComms: plugins.deesComms.DeesComms;
|
|
37
|
-
scroller:
|
|
38
|
+
scroller: Scroller;
|
|
38
39
|
themeManager: ThemeManager;
|
|
39
40
|
keyboard: Keyboard;
|
|
40
41
|
domToolsReady: plugins.smartpromise.Deferred<unknown>;
|
|
@@ -75,9 +75,7 @@ export class DomTools {
|
|
|
75
75
|
smarturl: plugins.smarturl,
|
|
76
76
|
};
|
|
77
77
|
this.deesComms = new plugins.deesComms.DeesComms();
|
|
78
|
-
this.scroller = new
|
|
79
|
-
/* some options */
|
|
80
|
-
}); // TODO: switch to scroller class
|
|
78
|
+
this.scroller = new Scroller(this);
|
|
81
79
|
this.themeManager = new ThemeManager(this);
|
|
82
80
|
this.keyboard = new Keyboard(document.body);
|
|
83
81
|
this.domToolsReady = plugins.smartpromise.defer();
|
|
@@ -154,4 +152,4 @@ export class DomTools {
|
|
|
154
152
|
await this.websetup.readyPromise;
|
|
155
153
|
}
|
|
156
154
|
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuZG9tdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBVzFELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNUOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBeUMsRUFBRTtRQUMzRSxJQUFJLGdCQUEwQixDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pELFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUUzQyxrQ0FBa0M7WUFDbEMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7Z0JBQ2pDLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxhQUFhLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDaEYsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2RSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMs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
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
import type { DomTools } from './domtools.classes.domtools.js';
|
|
1
2
|
export declare class Scroller {
|
|
3
|
+
domtoolsInstance: DomTools;
|
|
4
|
+
constructor(domtoolsInstanceArg: DomTools);
|
|
5
|
+
private sweetScroller;
|
|
6
|
+
scrollToElement(elementArg: HTMLElement, optionsArg: Parameters<typeof this.sweetScroller.toElement>[1]): Promise<void>;
|
|
7
|
+
detectNativeSmoothScroll(): Promise<boolean>;
|
|
8
|
+
enableLenisScroll(optionsArg?: {
|
|
9
|
+
disableOnNativeSmoothScroll?: boolean;
|
|
10
|
+
}): Promise<void>;
|
|
2
11
|
}
|
|
@@ -1,4 +1,59 @@
|
|
|
1
1
|
import * as plugins from './domtools.plugins.js';
|
|
2
2
|
export class Scroller {
|
|
3
|
+
constructor(domtoolsInstanceArg) {
|
|
4
|
+
this.sweetScroller = new plugins.SweetScroll({
|
|
5
|
+
/* some options */
|
|
6
|
+
}); // TODO: switch to scroller class
|
|
7
|
+
this.domtoolsInstance = domtoolsInstanceArg;
|
|
8
|
+
}
|
|
9
|
+
async scrollToElement(elementArg, optionsArg) {
|
|
10
|
+
this.sweetScroller.toElement(elementArg, optionsArg);
|
|
11
|
+
await plugins.smartdelay.delayFor(optionsArg.duration);
|
|
12
|
+
}
|
|
13
|
+
async detectNativeSmoothScroll() {
|
|
14
|
+
const done = plugins.smartpromise.defer();
|
|
15
|
+
const sampleSize = 100;
|
|
16
|
+
const acceptableDeltaDifference = 3;
|
|
17
|
+
const minimumSmoothRatio = 0.75;
|
|
18
|
+
const eventDeltas = [];
|
|
19
|
+
function onWheel(event) {
|
|
20
|
+
eventDeltas.push(event.deltaY);
|
|
21
|
+
if (eventDeltas.length >= sampleSize) {
|
|
22
|
+
window.removeEventListener('wheel', onWheel);
|
|
23
|
+
analyzeEvents();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function analyzeEvents() {
|
|
27
|
+
const totalDiffs = eventDeltas.length - 1;
|
|
28
|
+
let smallDiffCount = 0;
|
|
29
|
+
for (let i = 0; i < totalDiffs; i++) {
|
|
30
|
+
const diff = Math.abs(eventDeltas[i + 1] - eventDeltas[i]);
|
|
31
|
+
if (diff <= acceptableDeltaDifference) {
|
|
32
|
+
smallDiffCount++;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const smoothRatio = smallDiffCount / totalDiffs;
|
|
36
|
+
if (smoothRatio >= minimumSmoothRatio) {
|
|
37
|
+
console.log('Smooth scrolling detected.');
|
|
38
|
+
done.resolve(true);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log('Smooth scrolling NOT detected.');
|
|
42
|
+
done.resolve(false);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
window.addEventListener('wheel', onWheel);
|
|
46
|
+
return done.promise;
|
|
47
|
+
}
|
|
48
|
+
async enableLenisScroll(optionsArg) {
|
|
49
|
+
const lenis = new plugins.Lenis({
|
|
50
|
+
autoRaf: true,
|
|
51
|
+
});
|
|
52
|
+
if (optionsArg?.disableOnNativeSmoothScroll) {
|
|
53
|
+
if (await this.detectNativeSmoothScroll()) {
|
|
54
|
+
lenis.destroy();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
3
58
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5zY3JvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sUUFBUTtJQUduQixZQUNFLG1CQUE2QjtRQUt2QixrQkFBYSxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM5QyxrQkFBa0I7U0FDbkIsQ0FBQyxDQUFDLENBQUMsaUNBQWlDO1FBTG5DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztJQUM5QyxDQUFDO0lBTU0sS0FBSyxDQUFDLGVBQWUsQ0FDMUIsVUFBdUIsRUFDdkIsVUFBOEQ7UUFFOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxLQUFLLENBQUMsd0JBQXdCO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFXLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRWhDLE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQztRQUVqQyxTQUFTLE9BQU8sQ0FBQyxLQUFpQjtZQUNoQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUvQixJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdDLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsU0FBUyxhQUFhO1lBQ3BCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztZQUV2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxJQUFJLElBQUkseUJBQXlCLEVBQUUsQ0FBQztvQkFDdEMsY0FBYyxFQUFFLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUcsY0FBYyxHQUFHLFVBQVUsQ0FBQztZQUNoRCxJQUFJLFdBQVcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBc0Q7UUFDbkYsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzlCLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxVQUFVLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQztZQUM1QyxJQUFJLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -23,5 +23,6 @@ declare const lik: {
|
|
|
23
23
|
FastMap: typeof FastMap;
|
|
24
24
|
};
|
|
25
25
|
export { lik, smartdelay, smartjson, smartmarkdown, smartpromise, smartrouter, smartrx, smarturl, smartstate, smartstring, webrequest, websetup, webstore, };
|
|
26
|
+
import Lenis from 'lenis';
|
|
26
27
|
import SweetScroll from 'sweet-scroll';
|
|
27
|
-
export { SweetScroll };
|
|
28
|
+
export { Lenis, SweetScroll };
|
|
@@ -28,6 +28,7 @@ const lik = {
|
|
|
28
28
|
};
|
|
29
29
|
export { lik, smartdelay, smartjson, smartmarkdown, smartpromise, smartrouter, smartrx, smarturl, smartstate, smartstring, webrequest, websetup, webstore, };
|
|
30
30
|
// third party scope
|
|
31
|
+
import Lenis from 'lenis';
|
|
31
32
|
import SweetScroll from 'sweet-scroll';
|
|
32
|
-
export { SweetScroll };
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
export { Lenis, SweetScroll };
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBQ3JCLE9BQU8sS0FBSyxTQUFTLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBRXJCLGtCQUFrQjtBQUNsQixPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUV4QixrQkFBa0I7QUFDbEIsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxhQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsZUFBZTtBQUNmLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pFLE1BQU0sR0FBRyxHQUFHO0lBQ1YsU0FBUztJQUNULFNBQVM7SUFDVCxPQUFPO0NBQ1IsQ0FBQztBQUVGLE9BQU8sRUFDTCxHQUFHLEVBQ0gsVUFBVSxFQUNWLFNBQVMsRUFDVCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLEdBQ1QsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFDekIsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDO0FBRXZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@design.estate/dees-domtools",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A package providing tools to simplify complex CSS structures and web development tasks, featuring TypeScript support and integration with various web technologies.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
"author": "Lossless GmbH",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@git.zone/tsbuild": "^2.2.
|
|
13
|
-
"@git.zone/tsbundle": "^2.
|
|
14
|
-
"@git.zone/tstest": "^1.0.
|
|
15
|
-
"@push.rocks/tapbundle": "^5.5.
|
|
16
|
-
"@types/node": "^22.
|
|
12
|
+
"@git.zone/tsbuild": "^2.2.1",
|
|
13
|
+
"@git.zone/tsbundle": "^2.2.5",
|
|
14
|
+
"@git.zone/tstest": "^1.0.96",
|
|
15
|
+
"@push.rocks/tapbundle": "^5.5.6",
|
|
16
|
+
"@types/node": "^22.12.0"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@api.global/typedrequest": "^3.1.10",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@push.rocks/smartdelay": "^3.0.5",
|
|
23
23
|
"@push.rocks/smartjson": "^5.0.20",
|
|
24
24
|
"@push.rocks/smartmarkdown": "^3.0.3",
|
|
25
|
-
"@push.rocks/smartpromise": "^4.
|
|
25
|
+
"@push.rocks/smartpromise": "^4.2.2",
|
|
26
26
|
"@push.rocks/smartrouter": "^1.3.2",
|
|
27
27
|
"@push.rocks/smartrx": "^3.0.7",
|
|
28
28
|
"@push.rocks/smartstate": "^2.0.19",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"@push.rocks/webrequest": "^3.0.37",
|
|
32
32
|
"@push.rocks/websetup": "^3.0.19",
|
|
33
33
|
"@push.rocks/webstore": "^2.0.20",
|
|
34
|
+
"lenis": "^1.1.20",
|
|
34
35
|
"lit": "^3.2.1",
|
|
35
36
|
"sweet-scroll": "^4.0.0"
|
|
36
37
|
},
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-domtools',
|
|
6
|
-
version: '2.
|
|
6
|
+
version: '2.2.0',
|
|
7
7
|
description: 'A package providing tools to simplify complex CSS structures and web development tasks, featuring TypeScript support and integration with various web technologies.'
|
|
8
8
|
}
|
|
@@ -93,9 +93,7 @@ export class DomTools {
|
|
|
93
93
|
};
|
|
94
94
|
|
|
95
95
|
public deesComms = new plugins.deesComms.DeesComms();
|
|
96
|
-
public scroller = new
|
|
97
|
-
/* some options */
|
|
98
|
-
}); // TODO: switch to scroller class
|
|
96
|
+
public scroller = new Scroller(this);
|
|
99
97
|
public themeManager = new ThemeManager(this);
|
|
100
98
|
public keyboard = new Keyboard(document.body);
|
|
101
99
|
|
|
@@ -1,5 +1,77 @@
|
|
|
1
|
+
import type { DomTools } from './domtools.classes.domtools.js';
|
|
1
2
|
import * as plugins from './domtools.plugins.js';
|
|
2
3
|
|
|
3
4
|
export class Scroller {
|
|
4
|
-
|
|
5
|
+
public domtoolsInstance: DomTools;
|
|
6
|
+
|
|
7
|
+
constructor(
|
|
8
|
+
domtoolsInstanceArg: DomTools,
|
|
9
|
+
) {
|
|
10
|
+
this.domtoolsInstance = domtoolsInstanceArg;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
private sweetScroller = new plugins.SweetScroll({
|
|
14
|
+
/* some options */
|
|
15
|
+
}); // TODO: switch to scroller class
|
|
16
|
+
|
|
17
|
+
public async scrollToElement(
|
|
18
|
+
elementArg: HTMLElement,
|
|
19
|
+
optionsArg: Parameters<typeof this.sweetScroller.toElement>[1]
|
|
20
|
+
) {
|
|
21
|
+
this.sweetScroller.toElement(elementArg, optionsArg);
|
|
22
|
+
await plugins.smartdelay.delayFor(optionsArg.duration);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public async detectNativeSmoothScroll() {
|
|
26
|
+
const done = plugins.smartpromise.defer<boolean>();
|
|
27
|
+
const sampleSize = 100;
|
|
28
|
+
const acceptableDeltaDifference = 3;
|
|
29
|
+
const minimumSmoothRatio = 0.75;
|
|
30
|
+
|
|
31
|
+
const eventDeltas: number[] = [];
|
|
32
|
+
|
|
33
|
+
function onWheel(event: WheelEvent) {
|
|
34
|
+
eventDeltas.push(event.deltaY);
|
|
35
|
+
|
|
36
|
+
if (eventDeltas.length >= sampleSize) {
|
|
37
|
+
window.removeEventListener('wheel', onWheel);
|
|
38
|
+
analyzeEvents();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function analyzeEvents() {
|
|
43
|
+
const totalDiffs = eventDeltas.length - 1;
|
|
44
|
+
let smallDiffCount = 0;
|
|
45
|
+
|
|
46
|
+
for (let i = 0; i < totalDiffs; i++) {
|
|
47
|
+
const diff = Math.abs(eventDeltas[i + 1] - eventDeltas[i]);
|
|
48
|
+
if (diff <= acceptableDeltaDifference) {
|
|
49
|
+
smallDiffCount++;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const smoothRatio = smallDiffCount / totalDiffs;
|
|
54
|
+
if (smoothRatio >= minimumSmoothRatio) {
|
|
55
|
+
console.log('Smooth scrolling detected.');
|
|
56
|
+
done.resolve(true);
|
|
57
|
+
} else {
|
|
58
|
+
console.log('Smooth scrolling NOT detected.');
|
|
59
|
+
done.resolve(false);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
window.addEventListener('wheel', onWheel);
|
|
64
|
+
return done.promise;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public async enableLenisScroll(optionsArg?: { disableOnNativeSmoothScroll?: boolean }) {
|
|
68
|
+
const lenis = new plugins.Lenis({
|
|
69
|
+
autoRaf: true,
|
|
70
|
+
});
|
|
71
|
+
if (optionsArg?.disableOnNativeSmoothScroll) {
|
|
72
|
+
if (await this.detectNativeSmoothScroll()) {
|
|
73
|
+
lenis.destroy();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
5
77
|
}
|