Compare commits

...

10 Commits

9 changed files with 4148 additions and 956 deletions

View File

@ -1,5 +1,34 @@
# Changelog
## 2025-01-31 - 2.2.0 - feat(core)
Enhance scrolling capabilities by integrating Scroller class and adding lenis support
- Replaced SweetScroll setup in domtools.classes.domtools.ts with Scroller class.
- Moved SweetScroll initialization and methods to new Scroller class.
- Added lenis support in the Scroller class for enhanced scrolling capabilities.
- Updated dev and dependencies versions in package.json.
## 2025-01-09 - 2.1.1 - fix(themamanager)
Fixed automatic global theme change subscription for background updates.
- Corrected the logic for updating the document's background color upon theme changes using themeObservable subscription.
## 2025-01-09 - 2.1.0 - feat(themeManager)
Exposed method to enable automatic global theme change.
- Enable easier application of dark and bright themes by exposing a method.
- Updated devDependencies and dependencies in package.json to latest versions.
## 2024-10-21 - 2.0.65 - fix(ThemeManager)
Refactor ThemeManager class to separate global style setting logic
- Moved logic to set global styles into a dedicated function setGlobalStylesOnPurpose in ThemeManager.
## 2024-10-06 - 2.0.64 - fix(pluginexports)
Add missing import for smartrouter in pluginexports.
- Fixed a missing import for smartrouter in ts/domtools.pluginexports.ts.
## 2024-10-06 - 2.0.63 - fix(dependencies)
Update @push.rocks/smartrouter to version ^1.3.2 for better compatibility

View File

@ -1,6 +1,6 @@
{
"name": "@design.estate/dees-domtools",
"version": "2.0.63",
"version": "2.2.0",
"private": false,
"description": "A package providing tools to simplify complex CSS structures and web development tasks, featuring TypeScript support and integration with various web technologies.",
"main": "dist_ts/index.js",
@ -15,20 +15,20 @@
"buildDocs": "tsdoc"
},
"devDependencies": {
"@git.zone/tsbuild": "^2.1.84",
"@git.zone/tsbundle": "^2.0.15",
"@git.zone/tstest": "^1.0.90",
"@push.rocks/tapbundle": "^5.3.0",
"@types/node": "^22.7.4"
"@git.zone/tsbuild": "^2.2.1",
"@git.zone/tsbundle": "^2.2.5",
"@git.zone/tstest": "^1.0.96",
"@push.rocks/tapbundle": "^5.5.6",
"@types/node": "^22.12.0"
},
"dependencies": {
"@api.global/typedrequest": "^3.0.32",
"@api.global/typedrequest": "^3.1.10",
"@design.estate/dees-comms": "^1.0.27",
"@push.rocks/lik": "^6.0.15",
"@push.rocks/lik": "^6.1.0",
"@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartjson": "^5.0.20",
"@push.rocks/smartmarkdown": "^3.0.3",
"@push.rocks/smartpromise": "^4.0.4",
"@push.rocks/smartpromise": "^4.2.2",
"@push.rocks/smartrouter": "^1.3.2",
"@push.rocks/smartrx": "^3.0.7",
"@push.rocks/smartstate": "^2.0.19",
@ -37,7 +37,8 @@
"@push.rocks/webrequest": "^3.0.37",
"@push.rocks/websetup": "^3.0.19",
"@push.rocks/webstore": "^2.0.20",
"lit": "^3.2.0",
"lenis": "^1.1.20",
"lit": "^3.2.1",
"sweet-scroll": "^4.0.0"
},
"files": [

4958
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@design.estate/dees-domtools',
version: '2.0.63',
version: '2.2.0',
description: 'A package providing tools to simplify complex CSS structures and web development tasks, featuring TypeScript support and integration with various web technologies.'
}

View File

@ -93,9 +93,7 @@ export class DomTools {
};
public deesComms = new plugins.deesComms.DeesComms();
public scroller = new plugins.SweetScroll({
/* some options */
}); // TODO: switch to scroller class
public scroller = new Scroller(this);
public themeManager = new ThemeManager(this);
public keyboard = new Keyboard(document.body);

View File

@ -1,5 +1,77 @@
import type { DomTools } from './domtools.classes.domtools.js';
import * as plugins from './domtools.plugins.js';
export class Scroller {
// TODO: move sweet scroll over to here;
public domtoolsInstance: DomTools;
constructor(
domtoolsInstanceArg: DomTools,
) {
this.domtoolsInstance = domtoolsInstanceArg;
}
private sweetScroller = new plugins.SweetScroll({
/* some options */
}); // TODO: switch to scroller class
public async scrollToElement(
elementArg: HTMLElement,
optionsArg: Parameters<typeof this.sweetScroller.toElement>[1]
) {
this.sweetScroller.toElement(elementArg, optionsArg);
await plugins.smartdelay.delayFor(optionsArg.duration);
}
public async detectNativeSmoothScroll() {
const done = plugins.smartpromise.defer<boolean>();
const sampleSize = 100;
const acceptableDeltaDifference = 3;
const minimumSmoothRatio = 0.75;
const eventDeltas: number[] = [];
function onWheel(event: WheelEvent) {
eventDeltas.push(event.deltaY);
if (eventDeltas.length >= sampleSize) {
window.removeEventListener('wheel', onWheel);
analyzeEvents();
}
}
function analyzeEvents() {
const totalDiffs = eventDeltas.length - 1;
let smallDiffCount = 0;
for (let i = 0; i < totalDiffs; i++) {
const diff = Math.abs(eventDeltas[i + 1] - eventDeltas[i]);
if (diff <= acceptableDeltaDifference) {
smallDiffCount++;
}
}
const smoothRatio = smallDiffCount / totalDiffs;
if (smoothRatio >= minimumSmoothRatio) {
console.log('Smooth scrolling detected.');
done.resolve(true);
} else {
console.log('Smooth scrolling NOT detected.');
done.resolve(false);
}
}
window.addEventListener('wheel', onWheel);
return done.promise;
}
public async enableLenisScroll(optionsArg?: { disableOnNativeSmoothScroll?: boolean }) {
const lenis = new plugins.Lenis({
autoRaf: true,
});
if (optionsArg?.disableOnNativeSmoothScroll) {
if (await this.detectNativeSmoothScroll()) {
lenis.destroy();
}
}
}
}

View File

@ -21,10 +21,17 @@ export class ThemeManager {
this.updateAllConnectedElements();
}
private async updateAllConnectedElements() {
public async enableAutomaticGlobalThemeChange() {
if (document.body && document.body.style) {
document.body.style.background = this.goBrightBoolean ? '#fff' : '#000';
this.themeObservable.subscribe({
next: (goBright) => {
document.body.style.background = goBright ? '#fff' : '#000';
}
});
}
}
private async updateAllConnectedElements() {
this.themeObservable.next(this.goBrightBoolean);
}

View File

@ -3,6 +3,7 @@ import * as smartmarkdown from '@push.rocks/smartmarkdown';
import * as smartpromise from '@push.rocks/smartpromise';
import SweetScroll from 'sweet-scroll';
import * as smartstate from '@push.rocks/smartstate';
import * as smartrouter from '@push.rocks/smartrouter';
import * as smartrx from '@push.rocks/smartrx';
import * as smartstring from '@push.rocks/smartstring';
import * as smarturl from '@push.rocks/smarturl';
@ -14,6 +15,7 @@ export {
smartpromise,
SweetScroll,
smartstate,
smartrouter,
smartrx,
smartstring,
smarturl,

View File

@ -49,6 +49,7 @@ export {
};
// third party scope
import Lenis from 'lenis'
import SweetScroll from 'sweet-scroll';
export { SweetScroll };
export { Lenis, SweetScroll };