@design.estate/dees-domtools 2.1.1 → 2.3.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-domtools',
6
- version: '2.1.1',
6
+ version: '2.3.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: plugins.SweetScroll;
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 plugins.SweetScroll({
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuZG9tdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBVzFELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNUOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBeUMsRUFBRTtRQUMzRSxJQUFJLGdCQUEwQixDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pELFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUUzQyxrQ0FBa0M7WUFDbEMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7Z0JBQ2pDLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxhQUFhLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDaEYsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2RSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMs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
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuZG9tdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBVzFELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNUOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBeUMsRUFBRTtRQUMzRSxJQUFJLGdCQUEwQixDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pELFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUUzQyxrQ0FBa0M7WUFDbEMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7Z0JBQ2pDLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxhQUFhLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDaEYsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2RSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMs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
@@ -1,2 +1,51 @@
1
+ import type { DomTools } from './domtools.classes.domtools.js';
1
2
  export declare class Scroller {
3
+ domtoolsInstance: DomTools;
4
+ private scrollCallbacks;
5
+ private lenisInstance;
6
+ private handleNativeScroll;
7
+ private handleLenisScroll;
8
+ constructor(domtoolsInstanceArg: DomTools);
9
+ private sweetScroller;
10
+ /**
11
+ * Scrolls to a given element with options.
12
+ */
13
+ scrollToElement(elementArg: HTMLElement, optionsArg: Parameters<typeof this.sweetScroller.toElement>[1]): Promise<void>;
14
+ /**
15
+ * Detects whether native smooth scrolling is enabled.
16
+ */
17
+ detectNativeSmoothScroll(): Promise<boolean>;
18
+ /**
19
+ * Enables Lenis scrolling.
20
+ * If optionsArg.disableOnNativeSmoothScroll is true and native smooth scrolling is detected,
21
+ * Lenis will be destroyed immediately.
22
+ */
23
+ enableLenisScroll(optionsArg?: {
24
+ disableOnNativeSmoothScroll?: boolean;
25
+ }): Promise<void>;
26
+ /**
27
+ * Registers a callback to be executed on scroll.
28
+ * @param callback A function to execute on each scroll event.
29
+ */
30
+ onScroll(callback: () => void): void;
31
+ /**
32
+ * Executes all registered scroll callbacks concurrently.
33
+ */
34
+ private executeScrollCallbacks;
35
+ /**
36
+ * Attaches the native scroll event listener.
37
+ */
38
+ private attachNativeScrollListener;
39
+ /**
40
+ * Detaches the native scroll event listener.
41
+ */
42
+ private detachNativeScrollListener;
43
+ /**
44
+ * Attaches the Lenis scroll event listener.
45
+ */
46
+ private attachLenisScrollListener;
47
+ /**
48
+ * Detaches the Lenis scroll event listener.
49
+ */
50
+ private detachLenisScrollListener;
2
51
  }
@@ -1,4 +1,147 @@
1
1
  import * as plugins from './domtools.plugins.js';
2
2
  export class Scroller {
3
+ constructor(domtoolsInstanceArg) {
4
+ // Array to store scroll callback functions.
5
+ this.scrollCallbacks = [];
6
+ // Lenis instance (if activated) or null.
7
+ this.lenisInstance = null;
8
+ // Bound handlers to allow removal from event listeners.
9
+ this.handleNativeScroll = (event) => {
10
+ this.executeScrollCallbacks();
11
+ };
12
+ this.handleLenisScroll = (info) => {
13
+ this.executeScrollCallbacks();
14
+ };
15
+ this.sweetScroller = new plugins.SweetScroll({});
16
+ this.domtoolsInstance = domtoolsInstanceArg;
17
+ // Attach the native scroll listener by default.
18
+ this.attachNativeScrollListener();
19
+ }
20
+ /**
21
+ * Scrolls to a given element with options.
22
+ */
23
+ async scrollToElement(elementArg, optionsArg) {
24
+ this.sweetScroller.toElement(elementArg, optionsArg);
25
+ await plugins.smartdelay.delayFor(optionsArg.duration);
26
+ }
27
+ /**
28
+ * Detects whether native smooth scrolling is enabled.
29
+ */
30
+ async detectNativeSmoothScroll() {
31
+ const done = plugins.smartpromise.defer();
32
+ const sampleSize = 100;
33
+ const acceptableDeltaDifference = 3;
34
+ const minimumSmoothRatio = 0.75;
35
+ const eventDeltas = [];
36
+ function onWheel(event) {
37
+ eventDeltas.push(event.deltaY);
38
+ if (eventDeltas.length >= sampleSize) {
39
+ window.removeEventListener('wheel', onWheel);
40
+ analyzeEvents();
41
+ }
42
+ }
43
+ function analyzeEvents() {
44
+ const totalDiffs = eventDeltas.length - 1;
45
+ let smallDiffCount = 0;
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
+ const smoothRatio = smallDiffCount / totalDiffs;
53
+ if (smoothRatio >= minimumSmoothRatio) {
54
+ console.log('Smooth scrolling detected.');
55
+ done.resolve(true);
56
+ }
57
+ else {
58
+ console.log('Smooth scrolling NOT detected.');
59
+ done.resolve(false);
60
+ }
61
+ }
62
+ window.addEventListener('wheel', onWheel);
63
+ return done.promise;
64
+ }
65
+ /**
66
+ * Enables Lenis scrolling.
67
+ * If optionsArg.disableOnNativeSmoothScroll is true and native smooth scrolling is detected,
68
+ * Lenis will be destroyed immediately.
69
+ */
70
+ async enableLenisScroll(optionsArg) {
71
+ const lenis = new plugins.Lenis({
72
+ autoRaf: true,
73
+ });
74
+ if (optionsArg?.disableOnNativeSmoothScroll) {
75
+ if (await this.detectNativeSmoothScroll()) {
76
+ lenis.destroy();
77
+ return;
78
+ }
79
+ }
80
+ // Activate Lenis scrolling.
81
+ this.lenisInstance = lenis;
82
+ // Switch from native scroll listener to Lenis scroll listener.
83
+ this.detachNativeScrollListener();
84
+ this.attachLenisScrollListener();
85
+ // Monkey-patch the destroy method so that when Lenis is destroyed,
86
+ // the native scroll listener is reattached.
87
+ const originalDestroy = lenis.destroy.bind(lenis);
88
+ lenis.destroy = () => {
89
+ originalDestroy();
90
+ this.detachLenisScrollListener();
91
+ this.attachNativeScrollListener();
92
+ this.lenisInstance = null;
93
+ };
94
+ }
95
+ /**
96
+ * Registers a callback to be executed on scroll.
97
+ * @param callback A function to execute on each scroll event.
98
+ */
99
+ onScroll(callback) {
100
+ this.scrollCallbacks.push(callback);
101
+ }
102
+ /**
103
+ * Executes all registered scroll callbacks concurrently.
104
+ */
105
+ executeScrollCallbacks() {
106
+ // Execute all callbacks in parallel.
107
+ this.scrollCallbacks.forEach((callback) => {
108
+ try {
109
+ callback();
110
+ }
111
+ catch (error) {
112
+ console.error('Error in scroll callback:', error);
113
+ }
114
+ });
115
+ }
116
+ /**
117
+ * Attaches the native scroll event listener.
118
+ */
119
+ attachNativeScrollListener() {
120
+ window.addEventListener('scroll', this.handleNativeScroll, { passive: true });
121
+ }
122
+ /**
123
+ * Detaches the native scroll event listener.
124
+ */
125
+ detachNativeScrollListener() {
126
+ window.removeEventListener('scroll', this.handleNativeScroll);
127
+ }
128
+ /**
129
+ * Attaches the Lenis scroll event listener.
130
+ */
131
+ attachLenisScrollListener() {
132
+ if (this.lenisInstance) {
133
+ // Assuming that Lenis exposes an `on` method to listen to scroll events.
134
+ this.lenisInstance.on('scroll', this.handleLenisScroll);
135
+ }
136
+ }
137
+ /**
138
+ * Detaches the Lenis scroll event listener.
139
+ */
140
+ detachLenisScrollListener() {
141
+ if (this.lenisInstance) {
142
+ // Assuming that Lenis exposes an `off` method to remove scroll event listeners.
143
+ this.lenisInstance.off('scroll', this.handleLenisScroll);
144
+ }
145
+ }
3
146
  }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5zY3JvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sUUFBUTtDQUVwQiJ9
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5zY3JvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sUUFBUTtJQWtCbkIsWUFBWSxtQkFBNkI7UUFmekMsNENBQTRDO1FBQ3BDLG9CQUFlLEdBQXNCLEVBQUUsQ0FBQztRQUVoRCx5Q0FBeUM7UUFDakMsa0JBQWEsR0FBeUIsSUFBSSxDQUFDO1FBRW5ELHdEQUF3RDtRQUNoRCx1QkFBa0IsR0FBRyxDQUFDLEtBQVksRUFBUSxFQUFFO1lBQ2xELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUVNLHNCQUFpQixHQUFHLENBQUMsSUFBUyxFQUFRLEVBQUU7WUFDOUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDO1FBUU0sa0JBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFMbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO1FBQzVDLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBSUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsZUFBZSxDQUMxQixVQUF1QixFQUN2QixVQUE4RDtRQUU5RCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckQsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLHdCQUF3QjtRQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxD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
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBQ3JCLE9BQU8sS0FBSyxTQUFTLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBRXJCLGtCQUFrQjtBQUNsQixPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUV4QixrQkFBa0I7QUFDbEIsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxhQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsZUFBZTtBQUNmLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pFLE1BQU0sR0FBRyxHQUFHO0lBQ1YsU0FBUztJQUNULFNBQVM7SUFDVCxPQUFPO0NBQ1IsQ0FBQztBQUVGLE9BQU8sRUFDTCxHQUFHLEVBQ0gsVUFBVSxFQUNWLFNBQVMsRUFDVCxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLEdBQ1QsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFFdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDIn0=
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.1.1",
3
+ "version": "2.3.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.0",
13
- "@git.zone/tsbundle": "^2.1.0",
14
- "@git.zone/tstest": "^1.0.90",
15
- "@push.rocks/tapbundle": "^5.5.4",
16
- "@types/node": "^22.10.5"
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.1.0",
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
  },
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-domtools',
6
- version: '2.1.1',
6
+ version: '2.3.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 plugins.SweetScroll({
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,175 @@
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
- // TODO: move sweet scroll over to here;
5
- }
5
+ public domtoolsInstance: DomTools;
6
+
7
+ // Array to store scroll callback functions.
8
+ private scrollCallbacks: Array<() => void> = [];
9
+
10
+ // Lenis instance (if activated) or null.
11
+ private lenisInstance: plugins.Lenis | null = null;
12
+
13
+ // Bound handlers to allow removal from event listeners.
14
+ private handleNativeScroll = (event: Event): void => {
15
+ this.executeScrollCallbacks();
16
+ };
17
+
18
+ private handleLenisScroll = (info: any): void => {
19
+ this.executeScrollCallbacks();
20
+ };
21
+
22
+ constructor(domtoolsInstanceArg: DomTools) {
23
+ this.domtoolsInstance = domtoolsInstanceArg;
24
+ // Attach the native scroll listener by default.
25
+ this.attachNativeScrollListener();
26
+ }
27
+
28
+ private sweetScroller = new plugins.SweetScroll({});
29
+
30
+ /**
31
+ * Scrolls to a given element with options.
32
+ */
33
+ public async scrollToElement(
34
+ elementArg: HTMLElement,
35
+ optionsArg: Parameters<typeof this.sweetScroller.toElement>[1]
36
+ ) {
37
+ this.sweetScroller.toElement(elementArg, optionsArg);
38
+ await plugins.smartdelay.delayFor(optionsArg.duration);
39
+ }
40
+
41
+ /**
42
+ * Detects whether native smooth scrolling is enabled.
43
+ */
44
+ public async detectNativeSmoothScroll() {
45
+ const done = plugins.smartpromise.defer<boolean>();
46
+ const sampleSize = 100;
47
+ const acceptableDeltaDifference = 3;
48
+ const minimumSmoothRatio = 0.75;
49
+
50
+ const eventDeltas: number[] = [];
51
+
52
+ function onWheel(event: WheelEvent) {
53
+ eventDeltas.push(event.deltaY);
54
+
55
+ if (eventDeltas.length >= sampleSize) {
56
+ window.removeEventListener('wheel', onWheel);
57
+ analyzeEvents();
58
+ }
59
+ }
60
+
61
+ function analyzeEvents() {
62
+ const totalDiffs = eventDeltas.length - 1;
63
+ let smallDiffCount = 0;
64
+
65
+ for (let i = 0; i < totalDiffs; i++) {
66
+ const diff = Math.abs(eventDeltas[i + 1] - eventDeltas[i]);
67
+ if (diff <= acceptableDeltaDifference) {
68
+ smallDiffCount++;
69
+ }
70
+ }
71
+
72
+ const smoothRatio = smallDiffCount / totalDiffs;
73
+ if (smoothRatio >= minimumSmoothRatio) {
74
+ console.log('Smooth scrolling detected.');
75
+ done.resolve(true);
76
+ } else {
77
+ console.log('Smooth scrolling NOT detected.');
78
+ done.resolve(false);
79
+ }
80
+ }
81
+
82
+ window.addEventListener('wheel', onWheel);
83
+ return done.promise;
84
+ }
85
+
86
+ /**
87
+ * Enables Lenis scrolling.
88
+ * If optionsArg.disableOnNativeSmoothScroll is true and native smooth scrolling is detected,
89
+ * Lenis will be destroyed immediately.
90
+ */
91
+ public async enableLenisScroll(optionsArg?: { disableOnNativeSmoothScroll?: boolean }) {
92
+ const lenis = new plugins.Lenis({
93
+ autoRaf: true,
94
+ });
95
+
96
+ if (optionsArg?.disableOnNativeSmoothScroll) {
97
+ if (await this.detectNativeSmoothScroll()) {
98
+ lenis.destroy();
99
+ return;
100
+ }
101
+ }
102
+
103
+ // Activate Lenis scrolling.
104
+ this.lenisInstance = lenis;
105
+ // Switch from native scroll listener to Lenis scroll listener.
106
+ this.detachNativeScrollListener();
107
+ this.attachLenisScrollListener();
108
+
109
+ // Monkey-patch the destroy method so that when Lenis is destroyed,
110
+ // the native scroll listener is reattached.
111
+ const originalDestroy = lenis.destroy.bind(lenis);
112
+ lenis.destroy = () => {
113
+ originalDestroy();
114
+ this.detachLenisScrollListener();
115
+ this.attachNativeScrollListener();
116
+ this.lenisInstance = null;
117
+ };
118
+ }
119
+
120
+ /**
121
+ * Registers a callback to be executed on scroll.
122
+ * @param callback A function to execute on each scroll event.
123
+ */
124
+ public onScroll(callback: () => void): void {
125
+ this.scrollCallbacks.push(callback);
126
+ }
127
+
128
+ /**
129
+ * Executes all registered scroll callbacks concurrently.
130
+ */
131
+ private executeScrollCallbacks(): void {
132
+ // Execute all callbacks in parallel.
133
+ this.scrollCallbacks.forEach((callback) => {
134
+ try {
135
+ callback();
136
+ } catch (error) {
137
+ console.error('Error in scroll callback:', error);
138
+ }
139
+ });
140
+ }
141
+
142
+ /**
143
+ * Attaches the native scroll event listener.
144
+ */
145
+ private attachNativeScrollListener(): void {
146
+ window.addEventListener('scroll', this.handleNativeScroll, { passive: true });
147
+ }
148
+
149
+ /**
150
+ * Detaches the native scroll event listener.
151
+ */
152
+ private detachNativeScrollListener(): void {
153
+ window.removeEventListener('scroll', this.handleNativeScroll);
154
+ }
155
+
156
+ /**
157
+ * Attaches the Lenis scroll event listener.
158
+ */
159
+ private attachLenisScrollListener(): void {
160
+ if (this.lenisInstance) {
161
+ // Assuming that Lenis exposes an `on` method to listen to scroll events.
162
+ this.lenisInstance.on('scroll', this.handleLenisScroll);
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Detaches the Lenis scroll event listener.
168
+ */
169
+ private detachLenisScrollListener(): void {
170
+ if (this.lenisInstance) {
171
+ // Assuming that Lenis exposes an `off` method to remove scroll event listeners.
172
+ this.lenisInstance.off('scroll', this.handleLenisScroll);
173
+ }
174
+ }
175
+ }
@@ -49,6 +49,7 @@ export {
49
49
  };
50
50
 
51
51
  // third party scope
52
+ import Lenis from 'lenis'
52
53
  import SweetScroll from 'sweet-scroll';
53
54
 
54
- export { SweetScroll };
55
+ export { Lenis, SweetScroll };