ziko 0.65.0 → 0.67.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/ziko.cjs +61 -107
- package/dist/ziko.js +61 -107
- package/dist/ziko.min.js +2 -2
- package/dist/ziko.mjs +61 -107
- package/package.json +2 -2
- package/src/events/custom-events-registry/click-away.js +0 -1
- package/src/exp-events/controller/index.js +41 -0
- package/src/exp-events/custom-events-registry/click-away.js +39 -0
- package/src/exp-events/custom-events-registry/index.js +3 -0
- package/src/exp-events/custom-events-registry/swipe.js +76 -0
- package/src/exp-events/custom-events-registry/view.js +74 -0
- package/src/exp-events/details-setter/index.js +4 -0
- package/src/exp-events/details-setter/key.js +14 -0
- package/src/exp-events/details-setter/mouse.js +35 -0
- package/src/exp-events/details-setter/pointer.js +35 -0
- package/src/exp-events/details-setter/touch.js +37 -0
- package/src/exp-events/index.js +1 -0
- package/src/hooks/index.d.ts +11 -0
- package/src/hooks/use-derived.d.ts +14 -0
- package/src/hooks/use-event-emitter.d.ts +46 -0
- package/src/hooks/use-favicon.d.ts +41 -0
- package/src/hooks/use-ipc.d.ts +12 -0
- package/src/hooks/use-media-query.d.ts +24 -0
- package/src/hooks/use-reactive.d.ts +14 -0
- package/src/hooks/use-root.d.ts +15 -0
- package/src/hooks/use-state.d.ts +25 -0
- package/src/hooks/use-storage.d.ts +47 -0
- package/src/hooks/use-thread.d.ts +33 -0
- package/src/hooks/use-title.d.ts +37 -0
- package/src/index.d.ts +5 -0
- package/src/math/complex/index.d.ts +54 -0
- package/src/math/functions/index.d.ts +140 -0
- package/src/math/functions/logic/index.d.ts +11 -0
- package/src/math/functions/mapfun/index.d.ts +87 -0
- package/src/math/functions/utils/index.d.ts +1 -0
- package/src/math/functions/utils/mapfun.d.ts +43 -0
- package/src/math/index.d.ts +5 -0
- package/src/time/clocks/clock.d.ts +28 -0
- package/src/time/clocks/index.d.ts +3 -0
- package/src/time/clocks/scheduler.d.ts +42 -0
- package/src/time/clocks/tick.d.ts +26 -0
- package/src/time/decorators/index.d.ts +9 -0
- package/src/time/delay/index.d.ts +12 -0
- package/src/time/ease/index.d.ts +103 -0
- package/src/time/index.d.ts +4 -0
- package/src/time/loop/index.d.ts +50 -0
- package/src/ui/constructors/UIElement.js +19 -93
- package/src/ui/constructors/UIElementCore.d.ts +59 -0
- package/src/ui/constructors/UIElementCore.js +0 -9
- package/src/ui/constructors/UINode.d.ts +11 -0
- package/src/ui/constructors/UINode.js +1 -1
- package/src/ui/{__methods__ → constructors/mixins}/dom.js +1 -1
- package/src/ui/{__methods__ → constructors/mixins}/events.js +3 -3
- package/src/ui/{__methods__ → constructors/mixins}/style.js +1 -1
- package/src/ui/{__methods__ → constructors/mixins}/utils/index.js +4 -4
- package/src/ui/web-component/index.d.ts +14 -0
- package/src/ui/web-component/index.js +2 -2
- package/README.dep.md +0 -137
- package/src/--reactivity-deprecated/events/Input.js +0 -62
- package/src/--reactivity-deprecated/events/ZikoEvent.js +0 -92
- package/src/--reactivity-deprecated/events/__note__ +0 -1
- package/src/--reactivity-deprecated/events/custom-event.js +0 -57
- package/src/--reactivity-deprecated/events/hash.js +0 -47
- package/src/--reactivity-deprecated/events/index.js +0 -12
- package/src/--reactivity-deprecated/events/media.js +0 -1
- package/src/--reactivity-deprecated/events/mouse.js +0 -233
- package/src/--reactivity-deprecated/events/swipe.js +0 -149
- package/src/--reactivity-deprecated/events/touch.js +0 -0
- package/src/--reactivity-deprecated/hooks/Contexte/index.js +0 -1
- package/src/--reactivity-deprecated/hooks/Contexte/useSuccesifKeys.js +0 -14
- package/src/--reactivity-deprecated/hooks/UI/index.js +0 -6
- package/src/--reactivity-deprecated/hooks/UI/useCssLink.js +0 -0
- package/src/--reactivity-deprecated/hooks/UI/useLinearGradient.js +0 -0
- package/src/--reactivity-deprecated/hooks/UI/useMediaQuery.js +0 -43
- package/src/--reactivity-deprecated/hooks/UI/useRadialGradient.js +0 -0
- package/src/--reactivity-deprecated/hooks/UI/useRoot.js +0 -39
- package/src/--reactivity-deprecated/hooks/UI/useStyle.js +0 -79
- package/src/--reactivity-deprecated/hooks/UI/useTheme.js +0 -62
- package/src/--reactivity-deprecated/hooks/head/_useCssText.js +0 -21
- package/src/--reactivity-deprecated/hooks/head/index.js +0 -5
- package/src/--reactivity-deprecated/hooks/head/useFavIcon.js +0 -38
- package/src/--reactivity-deprecated/hooks/head/useHead.js +0 -28
- package/src/--reactivity-deprecated/hooks/head/useMeta.js +0 -52
- package/src/--reactivity-deprecated/hooks/head/useTitle.js +0 -30
- package/src/--reactivity-deprecated/hooks/index.js +0 -8
- package/src/--reactivity-deprecated/hooks/todo.md +0 -26
- package/src/--reactivity-deprecated/idea +0 -1
- package/src/--reactivity-deprecated/index.js +0 -3
- package/src/--reactivity-deprecated/observer/attributes.js +0 -28
- package/src/--reactivity-deprecated/observer/children.js +0 -37
- package/src/--reactivity-deprecated/observer/index.js +0 -6
- package/src/--reactivity-deprecated/observer/intersection.js +0 -44
- package/src/--reactivity-deprecated/observer/mutation.js +0 -113
- package/src/--reactivity-deprecated/observer/resize.js +0 -47
- package/src/--reactivity-deprecated/observer/screen.js +0 -45
- package/src/--reactivity-deprecated/observer/screen.js.txt +0 -84
- package/src/--reactivity-deprecated/observer/screen.txt +0 -13
- package/src/--use-deprecated/index.js +0 -11
- package/src/--use-deprecated/use-channel.js.txt +0 -61
- package/src/--use-deprecated/use-event-emmiter.js.txt +0 -64
- package/src/--use-deprecated/use-favicon.js +0 -0
- package/src/--use-deprecated/use-link.js +0 -0
- package/src/--use-deprecated/use-meta.js +0 -0
- package/src/--use-deprecated/use-root.js +0 -77
- package/src/--use-deprecated/use-storage.js.txt +0 -73
- package/src/--use-deprecated/use-thread.js +0 -44
- package/src/--use-deprecated/use-title.js +0 -0
- package/src/ui/constructors/_m.js.txt +0 -96
- package/src/ui/constructors/style/index.js +0 -506
- /package/src/ui/{__methods__ → constructors/mixins}/attrs.js +0 -0
- /package/src/ui/{__methods__ → constructors/mixins}/index.js +0 -0
- /package/src/ui/{__methods__ → constructors/mixins}/indexing.js +0 -0
- /package/src/ui/{__methods__ → constructors/mixins}/lifecycle.js +0 -0
package/dist/ziko.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/*
|
|
3
3
|
Project: ziko.js
|
|
4
4
|
Author: Zakaria Elalaoui
|
|
5
|
-
Date :
|
|
5
|
+
Date : Mon Feb 16 2026 11:34:52 GMT+0000 (UTC)
|
|
6
6
|
Git-Repo : https://github.com/zakarialaoui10/ziko.js
|
|
7
7
|
Git-Wiki : https://github.com/zakarialaoui10/ziko.js/wiki
|
|
8
8
|
Released under MIT License
|
|
@@ -1855,7 +1855,7 @@ class UINode {
|
|
|
1855
1855
|
node
|
|
1856
1856
|
};
|
|
1857
1857
|
}
|
|
1858
|
-
|
|
1858
|
+
isUINode(){
|
|
1859
1859
|
return true
|
|
1860
1860
|
}
|
|
1861
1861
|
get node(){
|
|
@@ -2210,7 +2210,6 @@ class UIElementCore extends UINode{
|
|
|
2210
2210
|
isRoot:false,
|
|
2211
2211
|
isHidden: false,
|
|
2212
2212
|
isFrozzen:false,
|
|
2213
|
-
legacyParent : null,
|
|
2214
2213
|
attributes: {},
|
|
2215
2214
|
filters: {},
|
|
2216
2215
|
temp:{}
|
|
@@ -2233,14 +2232,6 @@ class UIElementCore extends UINode{
|
|
|
2233
2232
|
intersection:null
|
|
2234
2233
|
};
|
|
2235
2234
|
if(element) Object.assign(this.cache,{element});
|
|
2236
|
-
// useDefaultStyle && this.style({
|
|
2237
|
-
// position: "relative",
|
|
2238
|
-
// boxSizing:"border-box",
|
|
2239
|
-
// margin:0,
|
|
2240
|
-
// padding:0,
|
|
2241
|
-
// width : "auto",
|
|
2242
|
-
// height : "auto"
|
|
2243
|
-
// });
|
|
2244
2235
|
this.items = new UIStore();
|
|
2245
2236
|
globalThis.__Ziko__.__UI__[this.cache.name]?globalThis.__Ziko__.__UI__[this.cache.name]?.push(this):globalThis.__Ziko__.__UI__[this.cache.name]=[this];
|
|
2246
2237
|
element && render && this?.render?.();
|
|
@@ -2440,7 +2431,7 @@ async function __addItem__(adder, pusher, ...ele) {
|
|
|
2440
2431
|
}
|
|
2441
2432
|
}
|
|
2442
2433
|
if (typeof globalThis?.Node === "function" && ele[i] instanceof globalThis?.Node) ele[i] = new this.constructor(ele[i]);
|
|
2443
|
-
if (ele[i]?.
|
|
2434
|
+
if (ele[i]?.isUINode) {
|
|
2444
2435
|
ele[i].cache.parent = this;
|
|
2445
2436
|
this.element?.[adder](ele[i].element);
|
|
2446
2437
|
ele[i].target = this.element;
|
|
@@ -2944,7 +2935,6 @@ class ClickAwayEvent extends Event {
|
|
|
2944
2935
|
}
|
|
2945
2936
|
|
|
2946
2937
|
function register_click_away_event(element) {
|
|
2947
|
-
console.log(element);
|
|
2948
2938
|
function handler(e) {
|
|
2949
2939
|
if (!element.contains(e.target)) {
|
|
2950
2940
|
const clickAwayEvent = new ClickAwayEvent(e, element);
|
|
@@ -3344,19 +3334,56 @@ var StyleMethods = /*#__PURE__*/Object.freeze({
|
|
|
3344
3334
|
style: style$1
|
|
3345
3335
|
});
|
|
3346
3336
|
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
3337
|
+
class EventController {
|
|
3338
|
+
constructor(target, category){
|
|
3339
|
+
this.cache = {
|
|
3340
|
+
category,
|
|
3341
|
+
target,
|
|
3342
|
+
listeners : {},
|
|
3343
|
+
currentEvent : null
|
|
3344
|
+
};
|
|
3345
|
+
}
|
|
3346
|
+
get element(){
|
|
3347
|
+
return this.cache.target.element;
|
|
3348
|
+
}
|
|
3349
|
+
get currentEvent(){
|
|
3350
|
+
return this.cache.currentEvent;
|
|
3351
|
+
}
|
|
3352
|
+
addListener(event, callback){
|
|
3353
|
+
this.cache.listeners[event] = {
|
|
3354
|
+
paused : false,
|
|
3355
|
+
callback : ()=>{
|
|
3356
|
+
if(!this.cache.listeners[event].paused) {
|
|
3357
|
+
this.cache.currentEvent = event;
|
|
3358
|
+
callback.call(this, this);
|
|
3359
|
+
}
|
|
3360
|
+
},
|
|
3361
|
+
};
|
|
3362
|
+
this.element.addEventListener(event, this.cache.listeners[event].callback);
|
|
3363
|
+
return this;
|
|
3364
|
+
}
|
|
3365
|
+
removeListener(event){
|
|
3366
|
+
this.element.removeEventListener(event, this.cache.listeners[event].callback);
|
|
3367
|
+
return this;
|
|
3368
|
+
}
|
|
3369
|
+
pause(event){
|
|
3370
|
+
this.cache.listeners[event].paused = true;
|
|
3371
|
+
return this;
|
|
3372
|
+
}
|
|
3373
|
+
resume(event){
|
|
3374
|
+
this.cache.listeners[event].paused = false;
|
|
3375
|
+
return this;
|
|
3376
|
+
}
|
|
3377
|
+
}
|
|
3378
|
+
|
|
3355
3379
|
let UIElement$1 = class UIElement extends UIElementCore{
|
|
3356
3380
|
constructor({element, name ='', type='html', render = __Ziko__.__Config__.default.render}={}){
|
|
3357
3381
|
super();
|
|
3358
|
-
|
|
3359
|
-
|
|
3382
|
+
this.exp = {
|
|
3383
|
+
events : {
|
|
3384
|
+
|
|
3385
|
+
}
|
|
3386
|
+
};
|
|
3360
3387
|
register_to_class(
|
|
3361
3388
|
this,
|
|
3362
3389
|
LifecycleMethods,
|
|
@@ -3367,9 +3394,17 @@ let UIElement$1 = class UIElement extends UIElementCore{
|
|
|
3367
3394
|
EventsMethodes
|
|
3368
3395
|
);
|
|
3369
3396
|
|
|
3370
|
-
// console.log(EventsMethodes)
|
|
3371
3397
|
if(element)this.init(element, name, type, render);
|
|
3372
3398
|
}
|
|
3399
|
+
_on(event, callback, {details_setter, category = 'global'} = {}){
|
|
3400
|
+
if(category && !this.exp.events.hasOwnProperty(category)) this.exp.events[category] = new EventController(this, category);
|
|
3401
|
+
const EVENT = this.exp.events[category];
|
|
3402
|
+
EVENT.addListener(event, callback);
|
|
3403
|
+
if(details_setter) details_setter.call(EVENT);
|
|
3404
|
+
}
|
|
3405
|
+
_off(event, category = 'global'){
|
|
3406
|
+
this.exp.events[category].removeListener(event);
|
|
3407
|
+
}
|
|
3373
3408
|
get element(){
|
|
3374
3409
|
return this.cache.element;
|
|
3375
3410
|
}
|
|
@@ -3385,9 +3420,6 @@ let UIElement$1 = class UIElement extends UIElementCore{
|
|
|
3385
3420
|
if(directive)this.element.setAttribute('data-hydration-directive', directive);
|
|
3386
3421
|
return this;
|
|
3387
3422
|
}
|
|
3388
|
-
// isUIElement(){
|
|
3389
|
-
// return true;
|
|
3390
|
-
// }
|
|
3391
3423
|
get st(){
|
|
3392
3424
|
return this.cache.style;
|
|
3393
3425
|
}
|
|
@@ -3427,84 +3459,6 @@ let UIElement$1 = class UIElement extends UIElementCore{
|
|
|
3427
3459
|
get left(){
|
|
3428
3460
|
return this.element.getBoundingClientRect().left;
|
|
3429
3461
|
}
|
|
3430
|
-
// clone(render=false) {
|
|
3431
|
-
// // UI.__proto__=this.__proto__;
|
|
3432
|
-
// // if(this.items.length){
|
|
3433
|
-
// // const items = [...this.items].map(n=>n.clone());
|
|
3434
|
-
// // UI.append(...items);
|
|
3435
|
-
// // }
|
|
3436
|
-
// // else UI.element=this.element.cloneNode(true);
|
|
3437
|
-
// // return UI.mount(render);
|
|
3438
|
-
// }
|
|
3439
|
-
// [Symbol.iterator]() {
|
|
3440
|
-
// return this.items[Symbol.iterator]();
|
|
3441
|
-
// }
|
|
3442
|
-
// maintain() {
|
|
3443
|
-
// for (let i = 0; i < this.items.length; i++) {
|
|
3444
|
-
// Object.defineProperty(this, i, {
|
|
3445
|
-
// value: this.items[i],
|
|
3446
|
-
// writable: true,
|
|
3447
|
-
// configurable: true,
|
|
3448
|
-
// enumerable: false
|
|
3449
|
-
// });
|
|
3450
|
-
// }
|
|
3451
|
-
// }
|
|
3452
|
-
// freeze(freeze){
|
|
3453
|
-
// this.cache.isFrozzen=freeze;
|
|
3454
|
-
// return this;
|
|
3455
|
-
// }
|
|
3456
|
-
// setTarget(tg) {
|
|
3457
|
-
// if(this.isBody) return ;
|
|
3458
|
-
// if (tg?.isUIElement) tg = tg.element;
|
|
3459
|
-
// this.unmount();
|
|
3460
|
-
// this.target = tg;
|
|
3461
|
-
// this.mount();
|
|
3462
|
-
// return this;
|
|
3463
|
-
// }
|
|
3464
|
-
// describe(label){
|
|
3465
|
-
// if(label)this.setAttr("aria-label",label)
|
|
3466
|
-
// }
|
|
3467
|
-
// get children() {
|
|
3468
|
-
// return [...this.element.children];
|
|
3469
|
-
// }
|
|
3470
|
-
// get cloneElement() {
|
|
3471
|
-
// return this.element.cloneNode(true);
|
|
3472
|
-
// }
|
|
3473
|
-
// setClasses(...value) {
|
|
3474
|
-
// this.setAttr("class", value.join(" "));
|
|
3475
|
-
// return this;
|
|
3476
|
-
// }
|
|
3477
|
-
// get classes(){
|
|
3478
|
-
// const classes=this.element.getAttribute("class");
|
|
3479
|
-
// return classes===null?[]:classes.split(" ");
|
|
3480
|
-
// }
|
|
3481
|
-
// addClass() {
|
|
3482
|
-
// /*this.setAttr("class", value);
|
|
3483
|
-
// return this;*/
|
|
3484
|
-
// }
|
|
3485
|
-
// setId(id) {
|
|
3486
|
-
// this.setAttr("id", id);
|
|
3487
|
-
// return this;
|
|
3488
|
-
// }
|
|
3489
|
-
// get id() {
|
|
3490
|
-
// return this.element.getAttribute("id");
|
|
3491
|
-
// }
|
|
3492
|
-
// To Fix
|
|
3493
|
-
// onKeysDown({keys=[],callback}={}){
|
|
3494
|
-
// if(!this.events.key)this.events.key = useKeyEvent(this);
|
|
3495
|
-
// this.events.key.handleSuccessifKeys({keys,callback});
|
|
3496
|
-
// return this;
|
|
3497
|
-
// }
|
|
3498
|
-
// watchAttr(callback){
|
|
3499
|
-
// if(!this.observer.attr)this.observer.attr = watchAttr(this,callback);
|
|
3500
|
-
// return this;
|
|
3501
|
-
// }
|
|
3502
|
-
// watchChildren(callback){
|
|
3503
|
-
// if(!this.observer.children)this.observer.children = watchChildren(this,callback);
|
|
3504
|
-
// return this;
|
|
3505
|
-
// }
|
|
3506
|
-
// watchSize(callback)Remplaced By on onViewResize
|
|
3507
|
-
// watchIntersection(callback,config) Remplaced By onViewEnter and onViewExit
|
|
3508
3462
|
|
|
3509
3463
|
};
|
|
3510
3464
|
|
|
@@ -3973,7 +3927,7 @@ function svg2dom(svgString) {
|
|
|
3973
3927
|
|
|
3974
3928
|
const SVGWrapper = (content) => new UISVGWrapper(content);
|
|
3975
3929
|
|
|
3976
|
-
function define_wc(name,
|
|
3930
|
+
function define_wc(name, UI_Constructor, props = {}, { mode = 'open'} = {}) {
|
|
3977
3931
|
if (globalThis.customElements?.get(name)) {
|
|
3978
3932
|
console.warn(`Custom element "${name}" is already defined`);
|
|
3979
3933
|
return;
|
|
@@ -4005,7 +3959,7 @@ function define_wc(name, UIElement, props = {}, { mode = 'open'} = {}) {
|
|
|
4005
3959
|
|
|
4006
3960
|
render() {
|
|
4007
3961
|
this.shadowRoot.innerHTML = '';
|
|
4008
|
-
const item =
|
|
3962
|
+
const item = UI_Constructor(this.props);
|
|
4009
3963
|
if(item instanceof Array) item.forEach(n => n.mount(this.shadowRoot));
|
|
4010
3964
|
else item.mount(this.shadowRoot);
|
|
4011
3965
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ziko",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.0",
|
|
4
4
|
"description": "A versatile JavaScript library offering a rich set of Hyperscript Based UI components, advanced mathematical utilities, interactivity ,animations, client side routing and more ...",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"front-end",
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"@vitest/coverage-v8": "^4.0.18",
|
|
91
91
|
"cross-env": "^10.1.0",
|
|
92
92
|
"eslint": "^10.0.0",
|
|
93
|
-
"jsdom": "^
|
|
93
|
+
"jsdom": "^26.0.0",
|
|
94
94
|
"rollup": "^4.57.1",
|
|
95
95
|
"vitest": "^4.0.18"
|
|
96
96
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class EventController {
|
|
2
|
+
constructor(target, category){
|
|
3
|
+
this.cache = {
|
|
4
|
+
category,
|
|
5
|
+
target,
|
|
6
|
+
listeners : {},
|
|
7
|
+
currentEvent : null
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
get element(){
|
|
11
|
+
return this.cache.target.element;
|
|
12
|
+
}
|
|
13
|
+
get currentEvent(){
|
|
14
|
+
return this.cache.currentEvent;
|
|
15
|
+
}
|
|
16
|
+
addListener(event, callback){
|
|
17
|
+
this.cache.listeners[event] = {
|
|
18
|
+
paused : false,
|
|
19
|
+
callback : ()=>{
|
|
20
|
+
if(!this.cache.listeners[event].paused) {
|
|
21
|
+
this.cache.currentEvent = event
|
|
22
|
+
callback.call(this, this)
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
this.element.addEventListener(event, this.cache.listeners[event].callback);
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
removeListener(event){
|
|
30
|
+
this.element.removeEventListener(event, this.cache.listeners[event].callback);
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
pause(event){
|
|
34
|
+
this.cache.listeners[event].paused = true;
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
resume(event){
|
|
38
|
+
this.cache.listeners[event].paused = false;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
class ClickAwayEvent extends Event {
|
|
2
|
+
constructor(originalEvent, targetElement) {
|
|
3
|
+
super("clickaway", { bubbles: true, cancelable: true });
|
|
4
|
+
this.originalEvent = originalEvent;
|
|
5
|
+
this.targetElement = targetElement;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function register_click_away_event(element) {
|
|
10
|
+
// console.log(element)
|
|
11
|
+
function handler(e) {
|
|
12
|
+
if (!element.contains(e.target)) {
|
|
13
|
+
const clickAwayEvent = new ClickAwayEvent(e, element);
|
|
14
|
+
element.dispatchEvent(clickAwayEvent);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
globalThis?.document?.addEventListener("click", handler);
|
|
19
|
+
|
|
20
|
+
return () => globalThis?.document?.removeEventListener("click", handler);
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export{
|
|
25
|
+
ClickAwayEvent,
|
|
26
|
+
register_click_away_event
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// // Example usage
|
|
30
|
+
// const box = document.querySelector("#my-box");
|
|
31
|
+
|
|
32
|
+
// const stop = listenClickAway(box);
|
|
33
|
+
|
|
34
|
+
// box.addEventListener("clickaway", (e) => {
|
|
35
|
+
// console.log("Clicked outside box!", e);
|
|
36
|
+
// });
|
|
37
|
+
|
|
38
|
+
// // later, you can stop listening:
|
|
39
|
+
// // stop();
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
class SwipeEvent extends CustomEvent {
|
|
2
|
+
constructor(type, detail) {
|
|
3
|
+
super(type, {
|
|
4
|
+
detail,
|
|
5
|
+
bubbles: true,
|
|
6
|
+
cancelable: true
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function register_swipe_event(
|
|
12
|
+
element,
|
|
13
|
+
threshold = 50,
|
|
14
|
+
restraint = 100,
|
|
15
|
+
allowedTime = 500
|
|
16
|
+
) {
|
|
17
|
+
let startX = 0,
|
|
18
|
+
startY = 0,
|
|
19
|
+
startTime = 0,
|
|
20
|
+
isPointerDown = false;
|
|
21
|
+
|
|
22
|
+
function onPointerDown(e) {
|
|
23
|
+
startX = e.clientX;
|
|
24
|
+
startY = e.clientY;
|
|
25
|
+
startTime = performance.now();
|
|
26
|
+
isPointerDown = true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function onPointerUp(e) {
|
|
30
|
+
if (!isPointerDown) return;
|
|
31
|
+
isPointerDown = false;
|
|
32
|
+
|
|
33
|
+
const distX = e.clientX - startX;
|
|
34
|
+
const distY = e.clientY - startY;
|
|
35
|
+
const elapsed = performance.now() - startTime;
|
|
36
|
+
|
|
37
|
+
let direction = null;
|
|
38
|
+
let eventName = null;
|
|
39
|
+
|
|
40
|
+
if (elapsed <= allowedTime) {
|
|
41
|
+
if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) {
|
|
42
|
+
direction = distX < 0 ? "left" : "right";
|
|
43
|
+
eventName = "swipe" + direction;
|
|
44
|
+
}
|
|
45
|
+
else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {
|
|
46
|
+
direction = distY < 0 ? "up" : "down";
|
|
47
|
+
eventName = "swipe" + direction;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Emit event
|
|
52
|
+
if (eventName) {
|
|
53
|
+
element.dispatchEvent(
|
|
54
|
+
new SwipeEvent(eventName, {
|
|
55
|
+
direction,
|
|
56
|
+
distX,
|
|
57
|
+
distY,
|
|
58
|
+
originalEvent: e
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
element.addEventListener("pointerdown", onPointerDown, { passive: true });
|
|
65
|
+
element.addEventListener("pointerup", onPointerUp, { passive: true });
|
|
66
|
+
|
|
67
|
+
return () => {
|
|
68
|
+
element.removeEventListener("pointerdown", onPointerDown);
|
|
69
|
+
element.removeEventListener("pointerup", onPointerUp);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export {
|
|
74
|
+
SwipeEvent,
|
|
75
|
+
register_swipe_event
|
|
76
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { throttle } from "../../time/decorators/index.js";
|
|
2
|
+
class ViewEvent extends CustomEvent {
|
|
3
|
+
constructor(type, detail, { bubbles = true, cancelable = true } = {}) {
|
|
4
|
+
super(type, { detail, bubbles, cancelable });
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function register_view_event(
|
|
9
|
+
element,
|
|
10
|
+
{
|
|
11
|
+
intersection = true,
|
|
12
|
+
resize = true,
|
|
13
|
+
threshold = 0,
|
|
14
|
+
throttleResize = 100,
|
|
15
|
+
throttleEnterExit = 0
|
|
16
|
+
} = {}
|
|
17
|
+
) {
|
|
18
|
+
let intersectionObserver, resizeObserver;
|
|
19
|
+
const resizeCallback = entries => {
|
|
20
|
+
for (let entry of entries) {
|
|
21
|
+
const { width, height } = entry.contentRect;
|
|
22
|
+
|
|
23
|
+
element.dispatchEvent(
|
|
24
|
+
new ViewEvent("resizeview", {
|
|
25
|
+
width,
|
|
26
|
+
height,
|
|
27
|
+
entry
|
|
28
|
+
})
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const throttledResize = throttleResize > 0
|
|
34
|
+
? throttle(resizeCallback, throttleResize)
|
|
35
|
+
: resizeCallback;
|
|
36
|
+
|
|
37
|
+
const intersectionCallback = entries => {
|
|
38
|
+
for (let entry of entries) {
|
|
39
|
+
const type = entry.isIntersecting ? "enterview" : "exitview";
|
|
40
|
+
element.dispatchEvent(new ViewEvent(type, entry));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const throttledIntersections = throttleEnterExit > 0
|
|
45
|
+
? throttle(intersectionCallback, throttleEnterExit)
|
|
46
|
+
: intersectionCallback;
|
|
47
|
+
|
|
48
|
+
if (intersection) {
|
|
49
|
+
intersectionObserver = new IntersectionObserver(throttledIntersections, { threshold });
|
|
50
|
+
intersectionObserver.observe(element);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (resize) {
|
|
54
|
+
resizeObserver = new ResizeObserver(throttledResize);
|
|
55
|
+
resizeObserver.observe(element);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// ---- UNREGISTER ----
|
|
59
|
+
return () => {
|
|
60
|
+
if (intersectionObserver) {
|
|
61
|
+
intersectionObserver.unobserve(element);
|
|
62
|
+
intersectionObserver.disconnect();
|
|
63
|
+
}
|
|
64
|
+
if (resizeObserver) {
|
|
65
|
+
resizeObserver.unobserve(element);
|
|
66
|
+
resizeObserver.disconnect();
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export {
|
|
72
|
+
ViewEvent,
|
|
73
|
+
register_view_event
|
|
74
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function key_details_setter(){
|
|
2
|
+
switch(this.currentEvent){
|
|
3
|
+
case "keydown" : {
|
|
4
|
+
this.kd = this.event.key
|
|
5
|
+
}; break;
|
|
6
|
+
case "keypress" : {
|
|
7
|
+
this.kp = this.event.key
|
|
8
|
+
}; break;
|
|
9
|
+
case "keyup" : {
|
|
10
|
+
this.ku = this.event.key
|
|
11
|
+
}; break;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function mouse_details_setter() {
|
|
2
|
+
const rect = this.targetElement.getBoundingClientRect();
|
|
3
|
+
const e = this.event;
|
|
4
|
+
let x = (e.clientX - rect.left) | 0;
|
|
5
|
+
let y = (e.clientY - rect.top) | 0;
|
|
6
|
+
|
|
7
|
+
if(this.cache.useNormalisedCoordinates){
|
|
8
|
+
const w = this.targetElement.clientWidth;
|
|
9
|
+
const h = this.targetElement.clientHeight;
|
|
10
|
+
x = +((x / w) * 2 - 1).toFixed(8);
|
|
11
|
+
y = +((y / h) * -2 + 1).toFixed(8);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
switch (this.currentEvent) {
|
|
15
|
+
|
|
16
|
+
case "mousedown":
|
|
17
|
+
this.dx = x;
|
|
18
|
+
this.dy = y;
|
|
19
|
+
this.isDown = true;
|
|
20
|
+
break;
|
|
21
|
+
|
|
22
|
+
case "mousemove":
|
|
23
|
+
this.mx = x;
|
|
24
|
+
this.my = y;
|
|
25
|
+
this.isMoving = true;
|
|
26
|
+
break;
|
|
27
|
+
|
|
28
|
+
case "mouserup":
|
|
29
|
+
this.ux = x;
|
|
30
|
+
this.uy = y;
|
|
31
|
+
this.isDown = false;
|
|
32
|
+
this.isMoving = false;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function ptr_details_setter() {
|
|
2
|
+
const rect = this.targetElement.getBoundingClientRect();
|
|
3
|
+
const e = this.event;
|
|
4
|
+
let x = (e.clientX - rect.left) | 0;
|
|
5
|
+
let y = (e.clientY - rect.top) | 0;
|
|
6
|
+
|
|
7
|
+
if(this.cache.useNormalisedCoordinates){
|
|
8
|
+
const w = this.targetElement.clientWidth;
|
|
9
|
+
const h = this.targetElement.clientHeight;
|
|
10
|
+
x = +((x / w) * 2 - 1).toFixed(8);
|
|
11
|
+
y = +((y / h) * -2 + 1).toFixed(8);
|
|
12
|
+
}
|
|
13
|
+
switch (this.currentEvent) {
|
|
14
|
+
|
|
15
|
+
case "pointerdown":
|
|
16
|
+
this.dx = x;
|
|
17
|
+
this.dy = y;
|
|
18
|
+
this.isDown = true;
|
|
19
|
+
break;
|
|
20
|
+
|
|
21
|
+
case "pointermove":
|
|
22
|
+
this.mx = x;
|
|
23
|
+
this.my = y;
|
|
24
|
+
this.isMoving = true;
|
|
25
|
+
break;
|
|
26
|
+
|
|
27
|
+
case "pointerup":
|
|
28
|
+
this.ux = x;
|
|
29
|
+
this.uy = y;
|
|
30
|
+
this.isDown = false;
|
|
31
|
+
this.isMoving = false;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function touch_details_setter() {
|
|
2
|
+
const e = this.event;
|
|
3
|
+
const touch = e.touches?.[0] || e.changedTouches?.[0];
|
|
4
|
+
|
|
5
|
+
if (!touch) return; // should never happen but safe
|
|
6
|
+
|
|
7
|
+
const rect = this.targetElement.getBoundingClientRect();
|
|
8
|
+
let x = touch.clientX - rect.left;
|
|
9
|
+
let y = touch.clientY - rect.top;
|
|
10
|
+
|
|
11
|
+
if(this.cache.useNormalisedCoordinates){
|
|
12
|
+
const w = this.targetElement.clientWidth;
|
|
13
|
+
const h = this.targetElement.clientHeight;
|
|
14
|
+
x = +((x / w) * 2 - 1).toFixed(8);
|
|
15
|
+
y = +((y / h) * -2 + 1).toFixed(8);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
switch (this.currentEvent) {
|
|
19
|
+
case "touchstart":
|
|
20
|
+
this.dx = x;
|
|
21
|
+
this.dy = y;
|
|
22
|
+
this.isDown = true;
|
|
23
|
+
break;
|
|
24
|
+
|
|
25
|
+
case "touchmove":
|
|
26
|
+
this.mx = x;
|
|
27
|
+
this.my = y;
|
|
28
|
+
this.isMoving = true;
|
|
29
|
+
break;
|
|
30
|
+
|
|
31
|
+
case "touchend":
|
|
32
|
+
this.ux = x;
|
|
33
|
+
this.uy = y;
|
|
34
|
+
this.isDown = false;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './controller/index.js'
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type * from './use-ipc'
|
|
2
|
+
export type * from './use-storage.d.ts'
|
|
3
|
+
export type * from './use-state.d.ts'
|
|
4
|
+
export type * from './use-derived.d.ts'
|
|
5
|
+
export type * from './use-reactive.d.ts'
|
|
6
|
+
export type * from './use-thread.d.ts'
|
|
7
|
+
export type * from './use-event-emitter.d.ts'
|
|
8
|
+
export type * from './use-media-query.d.ts'
|
|
9
|
+
export type * from './use-title.d.ts'
|
|
10
|
+
export type * from './use-favicon.d.ts'
|
|
11
|
+
export type * from './use-root.d.ts'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function useDerived<T>(
|
|
2
|
+
deriveFn: (...values: any[]) => T,
|
|
3
|
+
sources: Array<
|
|
4
|
+
() => {
|
|
5
|
+
value: any;
|
|
6
|
+
isStateGetter: () => true;
|
|
7
|
+
_subscribe: (fn: (value: any) => void) => void;
|
|
8
|
+
}
|
|
9
|
+
>
|
|
10
|
+
): () => {
|
|
11
|
+
value: T;
|
|
12
|
+
isStateGetter: () => true;
|
|
13
|
+
_subscribe: (fn: (value: T) => void) => void;
|
|
14
|
+
};
|