ziko 0.49.6 → 0.50.1
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 +374 -363
- package/dist/ziko.js +686 -971
- package/dist/ziko.min.js +2 -2
- package/dist/ziko.mjs +678 -953
- package/package.json +4 -1
- package/src/{reactivity → --reactivity-deprecated}/hooks/head/useFavIcon.js +4 -4
- package/src/{reactivity → --reactivity-deprecated}/hooks/head/useTitle.js +1 -1
- package/src/{reactivity → --reactivity-deprecated}/hooks/index.js +3 -3
- package/src/{reactivity → --reactivity-deprecated}/index.js +1 -1
- package/src/{use → --use-deprecated}/index.js +1 -1
- package/src/{use/use-event-emmiter.js → --use-deprecated/use-event-emmiter.js.txt} +3 -3
- package/src/__ziko__/__state__.js +1 -1
- package/src/app/ziko-app.js +6 -6
- package/src/events/binders/custom-event.js +11 -7
- package/src/events/binders/index.js +69 -13
- package/src/events/details-setter/index.js +2 -0
- package/src/events/details-setter/key.js +14 -0
- package/src/events/{binders → details-setter}/pointer.js +1 -15
- package/src/events/{__Events__.js → events-map/index.js} +7 -3
- package/src/events/index.js +1 -1
- package/src/events/types/__Shared__.d.ts +3 -3
- package/src/events/types/clipboard.d.ts +2 -2
- package/src/events/types/focus.d.ts +2 -2
- package/src/events/types/pointer.d.ts +2 -2
- package/src/events/{__ZikoEvent__.js → ziko-event.js} +17 -16
- package/src/hooks/index.js +10 -2
- package/src/hooks/use-event-emitter.js +68 -0
- package/src/hooks/use-favicon.js +59 -0
- package/src/hooks/{use-channel.js → use-ipc.js} +5 -22
- package/src/hooks/use-media-query.js +59 -0
- package/src/hooks/use-root.js +73 -0
- package/src/hooks/use-storage.js +73 -47
- package/src/hooks/use-thread.js +55 -0
- package/src/hooks/use-title.js +43 -0
- package/src/index.js +1 -1
- package/src/ui/__methods__/events.js +19 -5
- package/src/ui/constructors/UIElement.js +14 -12
- package/src/ui/constructors/UIElementCore.js +3 -136
- package/types/hooks/index.d.ts +9 -2
- package/types/hooks/use-Thread.d.ts +33 -0
- package/types/hooks/use-event-emitter.d.ts +46 -0
- package/types/hooks/use-favicon.d.ts +41 -0
- package/types/hooks/{use-channel.d.ts → use-ipc.d.ts} +2 -2
- package/types/hooks/use-media-query.d.ts +24 -0
- package/types/hooks/use-root.d.ts +15 -0
- package/types/hooks/use-storage.d.ts +47 -0
- package/types/hooks/use-title.d.ts +37 -0
- package/src/events/binders/click.js +0 -20
- package/src/events/binders/clipboard.js +0 -16
- package/src/events/binders/drag.js +0 -16
- package/src/events/binders/focus.js +0 -16
- package/src/events/binders/hash.js +0 -16
- package/src/events/binders/key.js +0 -27
- package/src/events/binders/mouse.js +0 -16
- package/src/events/binders/touch.js +0 -16
- package/src/events/binders/wheel.js +0 -16
- package/src/events/index.d.ts.txt +0 -3
- /package/src/{reactivity → --reactivity-deprecated}/events/Input.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/ZikoEvent.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/__note__ +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/custom-event.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/hash.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/index.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/media.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/mouse.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/swipe.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/events/touch.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/Contexte/index.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/Contexte/useSuccesifKeys.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/UI/index.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/UI/useCssLink.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/UI/useLinearGradient.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/UI/useMediaQuery.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/UI/useRadialGradient.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/UI/useRoot.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/UI/useStyle.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/UI/useTheme.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/head/_useCssText.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/head/index.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/head/useHead.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/head/useMeta.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/hooks/todo.md +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/idea +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/attributes.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/children.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/index.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/intersection.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/mutation.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/resize.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/screen.js +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/screen.js.txt +0 -0
- /package/src/{reactivity → --reactivity-deprecated}/observer/screen.txt +0 -0
- /package/src/{use → --use-deprecated}/use-channel.js.txt +0 -0
- /package/src/{use → --use-deprecated}/use-favicon.js +0 -0
- /package/src/{use → --use-deprecated}/use-link.js +0 -0
- /package/src/{use → --use-deprecated}/use-meta.js +0 -0
- /package/src/{use → --use-deprecated}/use-root.js +0 -0
- /package/src/{use → --use-deprecated}/use-storage.js.txt +0 -0
- /package/src/{use → --use-deprecated}/use-thread.js +0 -0
- /package/src/{use → --use-deprecated}/use-title.js +0 -0
- /package/src/events/{custom-events → custom-events-registry}/click-away.js +0 -0
- /package/src/events/{custom-events → custom-events-registry}/index.js +0 -0
- /package/src/events/{custom-events → custom-events-registry}/swipe.js +0 -0
- /package/src/events/{custom-events → custom-events-registry}/view.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ziko",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.50.1",
|
|
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",
|
|
@@ -25,6 +25,9 @@
|
|
|
25
25
|
"LICENCE"
|
|
26
26
|
],
|
|
27
27
|
"exports": {
|
|
28
|
+
"./src/*": {
|
|
29
|
+
"import" : "./src/*"
|
|
30
|
+
},
|
|
28
31
|
"./*": {
|
|
29
32
|
"types" : "./types/*/index.d.ts",
|
|
30
33
|
"import" : "./src/*/index.js"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { useEventEmitter } from "../../../
|
|
1
|
+
import { useEventEmitter } from "../../../hooks/use-event-emitter.js";
|
|
2
2
|
class ZikoUseFavIcon{
|
|
3
|
-
constructor(FavIcon,
|
|
3
|
+
constructor(FavIcon,withEmitter=true){
|
|
4
4
|
this.#init();
|
|
5
5
|
this.cache={
|
|
6
6
|
Emitter:null
|
|
7
7
|
}
|
|
8
|
-
if(
|
|
8
|
+
if(withEmitter)this.useEventEmitter();
|
|
9
9
|
this.set(FavIcon);
|
|
10
10
|
}
|
|
11
11
|
#init(){
|
|
@@ -34,5 +34,5 @@ class ZikoUseFavIcon{
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
}
|
|
37
|
-
const useFavIcon=(FavIcon,
|
|
37
|
+
const useFavIcon=(FavIcon,withEmitter)=>new ZikoUseFavIcon(FavIcon,withEmitter);
|
|
38
38
|
export{ useFavIcon }
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export * from "./contexte"
|
|
1
|
+
// export * from "./contexte"
|
|
2
2
|
// export * from "./decorators"
|
|
3
|
-
export * from "./head"
|
|
3
|
+
// export * from "./head"
|
|
4
4
|
// export * from "./interactions"
|
|
5
5
|
// export * from "./sensors"
|
|
6
6
|
// export * from "./storage"
|
|
7
|
-
export * from "./UI"
|
|
7
|
+
// export * from "./UI"
|
|
8
8
|
// export * from "./window"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
class UseEventEmitter {
|
|
2
|
-
constructor() {
|
|
2
|
+
constructor(maxListeners = 10) {
|
|
3
3
|
this.events = {};
|
|
4
|
-
this.maxListeners =
|
|
4
|
+
this.maxListeners = maxListeners;
|
|
5
5
|
}
|
|
6
6
|
on(event, listener) {
|
|
7
7
|
if (!this.events[event]) {
|
|
@@ -60,5 +60,5 @@ class UseEventEmitter {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
const useEventEmitter=()=>new UseEventEmitter()
|
|
63
|
+
const useEventEmitter=(maxListeners)=>new UseEventEmitter(maxListeners)
|
|
64
64
|
export{useEventEmitter}
|
package/src/app/ziko-app.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ZikoHead , useHead} from "../reactivity/hooks/head/index.js";
|
|
1
|
+
// import { ZikoHead , useHead} from "../reactivity/hooks/head/index.js";
|
|
2
2
|
class ZikoApp {
|
|
3
3
|
constructor({head = null, wrapper = null, target = null}){
|
|
4
4
|
this.head = head;
|
|
@@ -25,11 +25,11 @@ class ZikoApp {
|
|
|
25
25
|
else if(typeof wrapper === "function") this.wrapper = wrapper();
|
|
26
26
|
return this;
|
|
27
27
|
}
|
|
28
|
-
setHead(head){
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
28
|
+
// setHead(head){
|
|
29
|
+
// if(head instanceof ZikoHead) this.head = head;
|
|
30
|
+
// else this.head = useHead(head);
|
|
31
|
+
// return this;
|
|
32
|
+
// }
|
|
33
33
|
|
|
34
34
|
}
|
|
35
35
|
const App = ({head, wrapper, target}) => new ZikoApp({head, wrapper, target})
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
class
|
|
1
|
+
import { ZikoEvent } from "../ziko-event.js";
|
|
2
|
+
class ZikoCustomEvent extends ZikoEvent{
|
|
3
3
|
constructor(target, events, customizer){
|
|
4
4
|
super(target, events, details_setter, customizer)
|
|
5
5
|
}
|
|
@@ -7,8 +7,12 @@ class ZikoEventCustom extends __ZikoEvent__{
|
|
|
7
7
|
super._register_events(events, null, null, false);
|
|
8
8
|
return this;
|
|
9
9
|
}
|
|
10
|
-
emit(event_name,
|
|
11
|
-
const event=new
|
|
10
|
+
emit(event_name, detail = {}){
|
|
11
|
+
const event = new CustomEvent(event_name, {
|
|
12
|
+
detail,
|
|
13
|
+
bubbles: true,
|
|
14
|
+
cancelable: true
|
|
15
|
+
});
|
|
12
16
|
this.targetElement.dispatchEvent(event);
|
|
13
17
|
return this;
|
|
14
18
|
}
|
|
@@ -21,9 +25,9 @@ class ZikoEventCustom extends __ZikoEvent__{
|
|
|
21
25
|
function details_setter(){
|
|
22
26
|
|
|
23
27
|
}
|
|
24
|
-
const
|
|
28
|
+
const bind_custom_event = (target, events, customizer) => new ZikoCustomEvent(target, events, customizer)
|
|
25
29
|
|
|
26
30
|
export{
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
bind_custom_event,
|
|
32
|
+
ZikoCustomEvent
|
|
29
33
|
}
|
|
@@ -1,16 +1,72 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export * from "./mouse.js";
|
|
9
|
-
export * from "./pointer.js";
|
|
10
|
-
export * from "./touch.js";
|
|
11
|
-
export * from "./wheel.js";
|
|
1
|
+
import { ZikoEvent } from "../ziko-event.js";
|
|
2
|
+
import { EventsMap } from "../events-map/index.js";
|
|
3
|
+
import {
|
|
4
|
+
ptr_details_setter,
|
|
5
|
+
key_details_setter
|
|
6
|
+
} from '../details-setter/index.js'
|
|
7
|
+
import { register_click_away_event } from "../custom-events-registry/click-away.js";
|
|
12
8
|
|
|
9
|
+
export const bind_click_event = (target, customizer) => {
|
|
10
|
+
register_click_away_event(target.element)
|
|
11
|
+
return new ZikoEvent(
|
|
12
|
+
target,
|
|
13
|
+
EventsMap.Click,
|
|
14
|
+
null,
|
|
15
|
+
customizer
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
export const bind_clipboard_event = (target, customizer) => new ZikoEvent(
|
|
19
|
+
target,
|
|
20
|
+
EventsMap.Clipboard,
|
|
21
|
+
null,
|
|
22
|
+
customizer
|
|
23
|
+
);
|
|
24
|
+
export const bind_drag_event = (target, customizer) => new ZikoEvent(
|
|
25
|
+
target,
|
|
26
|
+
EventsMap.Drag,
|
|
27
|
+
null,
|
|
28
|
+
customizer
|
|
29
|
+
);
|
|
30
|
+
export const bind_focus_event = (target, customizer) => new ZikoEvent(
|
|
31
|
+
target,
|
|
32
|
+
EventsMap.Focus,
|
|
33
|
+
null,
|
|
34
|
+
customizer
|
|
35
|
+
);
|
|
36
|
+
export const bind_key_event = (target, customizer) => new ZikoEvent(
|
|
37
|
+
target,
|
|
38
|
+
EventsMap.Key,
|
|
39
|
+
key_details_setter,
|
|
40
|
+
customizer
|
|
41
|
+
);
|
|
42
|
+
export const bind_mouse_event = (target, customizer) => new ZikoEvent(
|
|
43
|
+
target,
|
|
44
|
+
EventsMap.Mouse,
|
|
45
|
+
null,
|
|
46
|
+
customizer
|
|
47
|
+
);
|
|
48
|
+
export const bind_pointer_event = (target, customizer) => new ZikoEvent(
|
|
49
|
+
target,
|
|
50
|
+
EventsMap.Ptr,
|
|
51
|
+
ptr_details_setter,
|
|
52
|
+
customizer
|
|
53
|
+
);
|
|
54
|
+
export const bind_touch_event = (target, customizer) => new ZikoEvent(
|
|
55
|
+
target,
|
|
56
|
+
EventsMap.Touch,
|
|
57
|
+
null,
|
|
58
|
+
customizer
|
|
59
|
+
);
|
|
60
|
+
export const bind_wheel_event = (target, customizer) => new ZikoEvent(
|
|
61
|
+
target,
|
|
62
|
+
EventsMap.Wheel,
|
|
63
|
+
null,
|
|
64
|
+
customizer
|
|
65
|
+
);
|
|
13
66
|
|
|
14
67
|
|
|
15
|
-
|
|
16
|
-
|
|
68
|
+
// function details_setter(){
|
|
69
|
+
// if(this.currentEvent==="click") this.dx = 0
|
|
70
|
+
// else this.dx = 1
|
|
71
|
+
// // console.log(this.currentEvent)
|
|
72
|
+
// }
|
|
@@ -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
|
+
}
|
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { Events } from "../__Events__.js";
|
|
3
|
-
class ZikoEventPointer extends __ZikoEvent__{
|
|
4
|
-
constructor(target, customizer){
|
|
5
|
-
super(target, Events.Ptr, details_setter, customizer);
|
|
6
|
-
this.isDown = false;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
function details_setter(){
|
|
1
|
+
export function ptr_details_setter(){
|
|
10
2
|
switch(this.currentEvent){
|
|
11
3
|
case "pointerdown" : {
|
|
12
4
|
this.dx = parseInt(this.event.offsetX);
|
|
@@ -38,10 +30,4 @@ function details_setter(){
|
|
|
38
30
|
// if(this.currentEvent==="click") this.dx = 0
|
|
39
31
|
// else this.dx = 1
|
|
40
32
|
// console.log(this.currentEvent)
|
|
41
|
-
}
|
|
42
|
-
const bind_pointer_event = (target, customizer) => new ZikoEventPointer(target, customizer)
|
|
43
|
-
|
|
44
|
-
export{
|
|
45
|
-
bind_pointer_event,
|
|
46
|
-
ZikoEventPointer
|
|
47
33
|
}
|
package/src/events/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type EventCustomizer = ((this:
|
|
1
|
+
export type EventCustomizer = ((this: ZikoEvent) => void) | ((ctx: ZikoEvent) => void);
|
|
2
2
|
|
|
3
3
|
export type EventMethodesBinder<
|
|
4
4
|
EventKeys extends string,
|
|
@@ -30,11 +30,11 @@ export interface ZikoEventCache {
|
|
|
30
30
|
__controllers__: Record<string, (e: Event) => void>;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
export declare class
|
|
33
|
+
export declare class ZikoEvent {
|
|
34
34
|
constructor(
|
|
35
35
|
target: any,
|
|
36
36
|
Events: string[],
|
|
37
|
-
details_setter?: (this:
|
|
37
|
+
details_setter?: (this: ZikoEvent) => void,
|
|
38
38
|
customizer?: EventCustomizer
|
|
39
39
|
);
|
|
40
40
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ZikoEvent } from "../ziko-event.js";
|
|
2
2
|
import type { Callback, ClipboardEventKeys } from './__Shared__.js';
|
|
3
3
|
import { UIElement } from "../../ui/index.js";
|
|
4
4
|
|
|
5
|
-
declare class ZikoEventClipboard extends
|
|
5
|
+
declare class ZikoEventClipboard extends ZikoEvent {
|
|
6
6
|
constructor(target: any, customizer?: Function);
|
|
7
7
|
|
|
8
8
|
// Explicitly declare the dynamic methods to get editor support
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ZikoEvent } from "../ziko-event.js";
|
|
2
2
|
import type { Callback } from './__Shared__.js';
|
|
3
3
|
import { UIElement } from "../../ui/index.js";
|
|
4
4
|
|
|
5
|
-
declare class ZikoEventFocus extends
|
|
5
|
+
declare class ZikoEventFocus extends ZikoEvent {
|
|
6
6
|
constructor(target: any, customizer?: Function);
|
|
7
7
|
|
|
8
8
|
// Explicitly declare the dynamic methods to get editor support
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ZikoEvent } from "../ziko-event.js";
|
|
2
2
|
import type { EventMethodesBinder, Callback, PointerEventKeys } from './__Shared__.js';
|
|
3
3
|
import { UIElement } from "../../ui/index.js";
|
|
4
4
|
|
|
5
5
|
type PointerEventMethodesBinder = EventMethodesBinder<PointerEventKeys, ZikoEventPointer>;
|
|
6
6
|
|
|
7
|
-
declare class ZikoEventPointer extends
|
|
7
|
+
declare class ZikoEventPointer extends ZikoEvent implements PointerEventMethodesBinder {
|
|
8
8
|
constructor(target: any, customizer?: Function);
|
|
9
9
|
|
|
10
10
|
isDown: boolean;
|
|
@@ -1,19 +1,5 @@
|
|
|
1
1
|
import { getEvent } from "./utils.js"
|
|
2
|
-
|
|
3
|
-
this.cache.currentEvent = event_name;
|
|
4
|
-
this.cache.event = e;
|
|
5
|
-
details_setter?.call(this);
|
|
6
|
-
customizer?.hasOwnProperty("prototype") ? customizer?.call(this) : customizer?.call(null, this);
|
|
7
|
-
// if(customizer?.hasOwnProperty("prototype")) customizer?.call(this)
|
|
8
|
-
// else customizer?.call(null, this)
|
|
9
|
-
if(this.cache.preventDefault[event_name]) e.preventDefault();
|
|
10
|
-
if(this.cache.stopPropagation[event_name]) e.stopPropagation();
|
|
11
|
-
if(this.cache.stopImmediatePropagation[event_name]) e.stopImmediatePropagation();
|
|
12
|
-
|
|
13
|
-
if(this.cache.stream.enabled[event_name]&&push_object)this.cache.stream.history[event_name].push(push_object);
|
|
14
|
-
this.cache.callbacks[event_name]?.map(n=>n(this));
|
|
15
|
-
}
|
|
16
|
-
class __ZikoEvent__ {
|
|
2
|
+
class ZikoEvent {
|
|
17
3
|
constructor(target = null, Events = [], details_setter, customizer){
|
|
18
4
|
this.target = target;
|
|
19
5
|
this.cache = {
|
|
@@ -159,7 +145,22 @@ class __ZikoEvent__ {
|
|
|
159
145
|
}
|
|
160
146
|
}
|
|
161
147
|
|
|
148
|
+
function event_controller(e, event_name, details_setter, customizer, push_object){
|
|
149
|
+
this.cache.currentEvent = event_name;
|
|
150
|
+
this.cache.event = e;
|
|
151
|
+
details_setter?.call(this);
|
|
152
|
+
customizer?.hasOwnProperty("prototype") ? customizer?.call(this) : customizer?.call(null, this);
|
|
153
|
+
// if(customizer?.hasOwnProperty("prototype")) customizer?.call(this)
|
|
154
|
+
// else customizer?.call(null, this)
|
|
155
|
+
if(this.cache.preventDefault[event_name]) e.preventDefault();
|
|
156
|
+
if(this.cache.stopPropagation[event_name]) e.stopPropagation();
|
|
157
|
+
if(this.cache.stopImmediatePropagation[event_name]) e.stopImmediatePropagation();
|
|
158
|
+
|
|
159
|
+
if(this.cache.stream.enabled[event_name]&&push_object)this.cache.stream.history[event_name].push(push_object);
|
|
160
|
+
this.cache.callbacks[event_name]?.map(n=>n(this));
|
|
161
|
+
}
|
|
162
|
+
|
|
162
163
|
export {
|
|
163
|
-
|
|
164
|
+
ZikoEvent,
|
|
164
165
|
getEvent
|
|
165
166
|
}
|
package/src/hooks/index.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
// STATES
|
|
1
2
|
export * from './use-state.js';
|
|
2
3
|
export * from './use-derived.js';
|
|
3
4
|
export * from './use-reactive.js';
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
//
|
|
7
|
+
export * from './use-ipc.js'
|
|
8
|
+
export * from './use-storage.js'
|
|
9
|
+
export * from './use-thread.js'
|
|
10
|
+
export * from './use-event-emitter.js'
|
|
11
|
+
export * from './use-media-query.js'
|
|
12
|
+
export * from './use-title.js'
|
|
13
|
+
export * from './use-root.js'
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
class UseEventEmitter {
|
|
2
|
+
constructor(maxListeners = 10) {
|
|
3
|
+
this.events = {};
|
|
4
|
+
this.maxListeners = maxListeners;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
on(event, listener) {
|
|
8
|
+
if (!this.events[event]) this.events[event] = [];
|
|
9
|
+
this.events[event].push(listener);
|
|
10
|
+
if (this.events[event].length > this.maxListeners) {
|
|
11
|
+
console.warn(`Warning: Possible memory leak. Event '${event}' has more than ${this.maxListeners} listeners.`);
|
|
12
|
+
}
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
once(event, listener) {
|
|
17
|
+
const wrapper = (...args) => {
|
|
18
|
+
this.off(event, wrapper);
|
|
19
|
+
listener(...args);
|
|
20
|
+
};
|
|
21
|
+
return this.on(event, wrapper);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
off(event, listener) {
|
|
25
|
+
const listeners = this.events[event];
|
|
26
|
+
if (!listeners) return this;
|
|
27
|
+
|
|
28
|
+
const index = listeners.indexOf(listener);
|
|
29
|
+
if (index !== -1) {
|
|
30
|
+
listeners.splice(index, 1);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
emit(event, data) {
|
|
37
|
+
const listeners = this.events[event];
|
|
38
|
+
if (!listeners) return false;
|
|
39
|
+
|
|
40
|
+
// Make a copy so removing listeners inside callbacks doesn't affect iteration
|
|
41
|
+
[...listeners].forEach(listener => {
|
|
42
|
+
try {
|
|
43
|
+
listener(data);
|
|
44
|
+
} catch (e) {
|
|
45
|
+
console.error(`Error in listener for '${event}':`, e);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
remove(event){
|
|
52
|
+
delete this.events[event];
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
clear() {
|
|
56
|
+
this.events = {};
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
setMaxListeners(max) {
|
|
61
|
+
this.maxListeners = max;
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const useEventEmitter = (maxListeners) => new UseEventEmitter(maxListeners);
|
|
67
|
+
|
|
68
|
+
export { useEventEmitter };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEventEmitter } from "./use-event-emitter.js";
|
|
2
|
+
|
|
3
|
+
class UseFavIcon {
|
|
4
|
+
constructor(FavIcon, withEmitter = true) {
|
|
5
|
+
this.#init();
|
|
6
|
+
this.cache = {
|
|
7
|
+
emitter: null
|
|
8
|
+
};
|
|
9
|
+
if (withEmitter) this.useEventEmitter();
|
|
10
|
+
if (FavIcon) this.set(FavIcon);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
#init() {
|
|
14
|
+
let link = document.querySelector("link[rel*='icon']");
|
|
15
|
+
let created = false;
|
|
16
|
+
|
|
17
|
+
if (!link) {
|
|
18
|
+
link = document.createElement("link");
|
|
19
|
+
created = true;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
link.type = "image/x-icon";
|
|
23
|
+
link.rel = "shortcut icon";
|
|
24
|
+
|
|
25
|
+
if (created) document.head.appendChild(link);
|
|
26
|
+
|
|
27
|
+
this.__FavIcon__ = link;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
setFavicon(href) {
|
|
31
|
+
if (href !== this.__FavIcon__.href) {
|
|
32
|
+
this.__FavIcon__.href = href;
|
|
33
|
+
|
|
34
|
+
if (this.cache.emitter)
|
|
35
|
+
this.cache.emitter.emit("ziko:favicon-changed", href);
|
|
36
|
+
}
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
get current() {
|
|
41
|
+
return this.__FavIcon__.href;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
onChange(callback) {
|
|
45
|
+
if (this.cache.emitter)
|
|
46
|
+
this.cache.emitter.on("ziko:favicon-changed", callback);
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
useEventEmitter() {
|
|
51
|
+
this.cache.emitter = useEventEmitter();
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const useFavIcon = (FavIcon, withEmitter = true) => new UseFavIcon(FavIcon, withEmitter);
|
|
58
|
+
|
|
59
|
+
export { useFavIcon };
|
|
@@ -1,36 +1,28 @@
|
|
|
1
1
|
import { Random } from "../math/random/index.js";
|
|
2
2
|
|
|
3
|
-
class
|
|
4
|
-
// private fields
|
|
3
|
+
class UseIPC {
|
|
5
4
|
#channel;
|
|
6
5
|
#eventData;
|
|
7
6
|
#handlers;
|
|
8
7
|
#uuid;
|
|
9
8
|
#subscribers;
|
|
10
|
-
#currentRooms;
|
|
11
|
-
|
|
9
|
+
#currentRooms;
|
|
12
10
|
constructor(name = "") {
|
|
13
11
|
this.#channel = new BroadcastChannel(name);
|
|
14
12
|
this.#eventData = new Map();
|
|
15
13
|
this.#handlers = new Map(); // Map<event, Array<{fn, rooms}>>
|
|
16
14
|
this.#uuid = "ziko-channel:" + Random.string(10);
|
|
17
15
|
this.#subscribers = new Set([this.#uuid]);
|
|
18
|
-
this.#currentRooms = new Set();
|
|
19
|
-
|
|
16
|
+
this.#currentRooms = new Set();
|
|
20
17
|
this.#channel.addEventListener("message", (e) => {
|
|
21
18
|
const { last_sent_event, userId, eventData, rooms } = e.data;
|
|
22
|
-
|
|
23
19
|
if (userId === this.#uuid) return; // ignore own messages
|
|
24
|
-
|
|
25
20
|
// broadcast if no rooms, else check intersection
|
|
26
21
|
if (rooms && rooms.length && !rooms.some(r => this.#currentRooms.has(r))) return;
|
|
27
|
-
|
|
28
22
|
this.#subscribers.add(userId);
|
|
29
23
|
this.#eventData = new Map(eventData);
|
|
30
|
-
|
|
31
24
|
const handlersList = this.#handlers.get(last_sent_event);
|
|
32
25
|
if (!handlersList) return;
|
|
33
|
-
|
|
34
26
|
handlersList.forEach(({ fn, rooms: handlerRooms }) => {
|
|
35
27
|
// trigger if listener has no room filter, or intersects subscriber rooms
|
|
36
28
|
if (!handlerRooms || handlerRooms.length === 0 ||
|
|
@@ -44,24 +36,20 @@ class UseChannel {
|
|
|
44
36
|
emit(event, data, rooms) {
|
|
45
37
|
this.#eventData.set(event, data);
|
|
46
38
|
if(typeof rooms === 'string') rooms = [rooms]
|
|
47
|
-
|
|
48
39
|
this.#channel.postMessage({
|
|
49
40
|
eventData: Array.from(this.#eventData.entries()),
|
|
50
41
|
last_sent_event: event,
|
|
51
42
|
userId: this.#uuid,
|
|
52
43
|
rooms: rooms && rooms.length ? rooms : undefined
|
|
53
44
|
});
|
|
54
|
-
|
|
55
45
|
return this;
|
|
56
46
|
}
|
|
57
|
-
|
|
58
47
|
on(event, handler = console.log, rooms) {
|
|
59
48
|
if (!this.#handlers.has(event)) this.#handlers.set(event, []);
|
|
60
49
|
if(typeof rooms === 'string') rooms = [rooms]
|
|
61
50
|
this.#handlers.get(event).push({ fn: handler, rooms });
|
|
62
51
|
return this;
|
|
63
52
|
}
|
|
64
|
-
|
|
65
53
|
off(event, handler) {
|
|
66
54
|
if (!this.#handlers.has(event)) return this;
|
|
67
55
|
this.#handlers.set(
|
|
@@ -70,7 +58,6 @@ class UseChannel {
|
|
|
70
58
|
);
|
|
71
59
|
return this;
|
|
72
60
|
}
|
|
73
|
-
|
|
74
61
|
once(event, handler, rooms) {
|
|
75
62
|
const wrapper = (data) => {
|
|
76
63
|
handler(data);
|
|
@@ -79,24 +66,20 @@ class UseChannel {
|
|
|
79
66
|
this.on(event, wrapper, rooms);
|
|
80
67
|
return this;
|
|
81
68
|
}
|
|
82
|
-
|
|
83
69
|
join(...rooms) {
|
|
84
70
|
rooms.forEach(r => this.#currentRooms.add(r));
|
|
85
71
|
return this;
|
|
86
72
|
}
|
|
87
|
-
|
|
88
73
|
leave(...rooms) {
|
|
89
74
|
if (!rooms.length) this.#currentRooms.clear();
|
|
90
75
|
else rooms.forEach(r => this.#currentRooms.delete(r));
|
|
91
76
|
return this;
|
|
92
77
|
}
|
|
93
|
-
|
|
94
78
|
close() {
|
|
95
79
|
this.#channel.close();
|
|
96
80
|
return this;
|
|
97
81
|
}
|
|
98
|
-
|
|
99
82
|
}
|
|
100
83
|
|
|
101
|
-
const
|
|
102
|
-
export {
|
|
84
|
+
const useIPC = (name) => new UseIPC(name);
|
|
85
|
+
export { useIPC };
|