@esportsplus/template 0.19.7 → 0.20.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/build/attributes.js +1 -1
- package/build/{event.d.ts → event/index.d.ts} +1 -1
- package/build/{event.js → event/index.js} +21 -26
- package/build/event/onconnect.d.ts +2 -0
- package/build/event/onconnect.js +15 -0
- package/build/event/ontick.d.ts +5 -0
- package/build/event/ontick.js +44 -0
- package/build/types.d.ts +4 -3
- package/package.json +1 -1
- package/src/{event.ts → event/index.ts} +26 -33
- package/src/event/onconnect.ts +21 -0
- package/src/event/ontick.ts +62 -0
- package/src/types.ts +4 -3
package/build/attributes.js
CHANGED
|
@@ -4,7 +4,7 @@ import { STATE_HYDRATING, STATE_NONE, STATE_WAITING } from './constants.js';
|
|
|
4
4
|
import { className, removeAttribute, setAttribute } from './utilities/element.js';
|
|
5
5
|
import { raf } from './utilities/queue.js';
|
|
6
6
|
import q from '@esportsplus/queue';
|
|
7
|
-
import event from './event.js';
|
|
7
|
+
import event from './event/index.js';
|
|
8
8
|
const STORE = Symbol();
|
|
9
9
|
let delimiters = {
|
|
10
10
|
class: ' ',
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { root } from '@esportsplus/reactivity';
|
|
2
2
|
import { defineProperty } from '@esportsplus/utilities';
|
|
3
|
-
import { addEventListener } from '
|
|
4
|
-
import { parentElement } from '
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
3
|
+
import { addEventListener } from '../utilities/element.js';
|
|
4
|
+
import { parentElement } from '../utilities/node.js';
|
|
5
|
+
import { ondisconnect } from '../slot/cleanup.js';
|
|
6
|
+
import onconnect from './onconnect.js';
|
|
7
|
+
import ontick from './ontick.js';
|
|
7
8
|
let capture = new Set(['onblur', 'onfocus', 'onscroll']), controllers = new Map(), keys = {}, passive = new Set([
|
|
8
9
|
'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel',
|
|
9
10
|
'onscroll',
|
|
@@ -57,27 +58,21 @@ function register(element, event) {
|
|
|
57
58
|
return key;
|
|
58
59
|
}
|
|
59
60
|
export default (element, event, listener) => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
else if (event === 'onrender') {
|
|
79
|
-
root(() => listener(element));
|
|
80
|
-
return;
|
|
61
|
+
switch (event) {
|
|
62
|
+
case 'onconnect':
|
|
63
|
+
onconnect(element, listener);
|
|
64
|
+
return;
|
|
65
|
+
case 'ondisconnect':
|
|
66
|
+
ondisconnect(element, () => listener(element));
|
|
67
|
+
return;
|
|
68
|
+
case 'ontick':
|
|
69
|
+
ontick(element, listener);
|
|
70
|
+
return;
|
|
71
|
+
case 'onrender':
|
|
72
|
+
root(() => listener(element));
|
|
73
|
+
return;
|
|
74
|
+
default:
|
|
75
|
+
element[keys[event] || register(element, event)] = listener;
|
|
76
|
+
return;
|
|
81
77
|
}
|
|
82
|
-
element[keys[event] || register(element, event)] = listener;
|
|
83
78
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { root } from '@esportsplus/reactivity';
|
|
2
|
+
import { add, remove } from './ontick.js';
|
|
3
|
+
export default (element, listener) => {
|
|
4
|
+
let fn = () => {
|
|
5
|
+
retry--;
|
|
6
|
+
if (element.isConnected) {
|
|
7
|
+
retry = 0;
|
|
8
|
+
root(() => listener(element));
|
|
9
|
+
}
|
|
10
|
+
if (retry) {
|
|
11
|
+
remove(fn);
|
|
12
|
+
}
|
|
13
|
+
}, retry = 60;
|
|
14
|
+
add(fn);
|
|
15
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { STATE_HYDRATING, STATE_NONE } from '../constants.js';
|
|
2
|
+
import { raf } from '../utilities/queue.js';
|
|
3
|
+
let tasks = Object.assign(new Set(), { running: false });
|
|
4
|
+
function tick() {
|
|
5
|
+
if (tasks.size === 0) {
|
|
6
|
+
tasks.running = false;
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
for (let task of tasks) {
|
|
10
|
+
task();
|
|
11
|
+
}
|
|
12
|
+
raf.add(tick);
|
|
13
|
+
}
|
|
14
|
+
const add = (task) => {
|
|
15
|
+
tasks.add(task);
|
|
16
|
+
if (!tasks.running) {
|
|
17
|
+
tasks.running = true;
|
|
18
|
+
raf.add(tick);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const remove = (task) => {
|
|
22
|
+
tasks.delete(task);
|
|
23
|
+
};
|
|
24
|
+
export default (element, listener) => {
|
|
25
|
+
let dispose = () => {
|
|
26
|
+
remove(fn);
|
|
27
|
+
}, fn = () => {
|
|
28
|
+
if (state === STATE_HYDRATING) {
|
|
29
|
+
if (element.isConnected) {
|
|
30
|
+
state = STATE_NONE;
|
|
31
|
+
}
|
|
32
|
+
else if (retry--) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!element.isConnected) {
|
|
37
|
+
remove(fn);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
listener(dispose, element);
|
|
41
|
+
}, retry = 60, state = STATE_HYDRATING;
|
|
42
|
+
add(fn);
|
|
43
|
+
};
|
|
44
|
+
export { add, remove };
|
package/build/types.d.ts
CHANGED
|
@@ -13,9 +13,10 @@ type Attributes = {
|
|
|
13
13
|
} & {
|
|
14
14
|
[key: `aria-${string}`]: string | number | boolean | undefined;
|
|
15
15
|
[key: `data-${string}`]: string | undefined;
|
|
16
|
-
onconnect?: (element:
|
|
17
|
-
ondisconnect?: (element:
|
|
18
|
-
onrender?: (element:
|
|
16
|
+
onconnect?: <T = Element>(element: T) => void;
|
|
17
|
+
ondisconnect?: <T = Element>(element: T) => void;
|
|
18
|
+
onrender?: <T = Element>(element: T) => void;
|
|
19
|
+
ontick?: <T = Element>(element: T) => void;
|
|
19
20
|
} & Record<PropertyKey, unknown>;
|
|
20
21
|
type Effect<T> = () => T extends [] ? Renderable<T>[] : Renderable<T>;
|
|
21
22
|
type Element = HTMLElement & Attributes;
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { root } from '@esportsplus/reactivity';
|
|
2
2
|
import { defineProperty } from '@esportsplus/utilities';
|
|
3
|
-
import { Element } from '
|
|
4
|
-
import { addEventListener } from '
|
|
5
|
-
import { parentElement } from '
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
3
|
+
import { Element } from '~/types';
|
|
4
|
+
import { addEventListener } from '~/utilities/element';
|
|
5
|
+
import { parentElement } from '~/utilities/node';
|
|
6
|
+
import { ondisconnect } from '~/slot/cleanup';
|
|
7
|
+
import onconnect from './onconnect';
|
|
8
|
+
import ontick from './ontick';
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
let capture = new Set<`on${string}`>(['onblur', 'onfocus', 'onscroll']),
|
|
@@ -87,33 +88,25 @@ function register(element: Element, event: `on${string}`) {
|
|
|
87
88
|
|
|
88
89
|
|
|
89
90
|
export default (element: Element, event: `on${string}`, listener: Function): void => {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
91
|
+
switch (event) {
|
|
92
|
+
case 'onconnect':
|
|
93
|
+
onconnect(element, listener);
|
|
94
|
+
return;
|
|
95
|
+
|
|
96
|
+
case 'ondisconnect':
|
|
97
|
+
ondisconnect(element, () => listener(element));
|
|
98
|
+
return;
|
|
99
|
+
|
|
100
|
+
case 'ontick':
|
|
101
|
+
ontick(element, listener);
|
|
102
|
+
return;
|
|
103
|
+
|
|
104
|
+
case 'onrender':
|
|
105
|
+
root(() => listener(element));
|
|
106
|
+
return;
|
|
107
|
+
|
|
108
|
+
default:
|
|
109
|
+
element[ keys[event] || register(element, event) ] = listener;
|
|
110
|
+
return;
|
|
108
111
|
}
|
|
109
|
-
else if (event === 'ondisconnect') {
|
|
110
|
-
ondisconnect(element, () => listener(element));
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
else if (event === 'onrender') {
|
|
114
|
-
root(() => listener(element));
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
element[ keys[event] || register(element, event) ] = listener;
|
|
119
112
|
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { root } from '@esportsplus/reactivity';
|
|
2
|
+
import { add, remove } from './ontick';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export default (element: Element, listener: Function) => {
|
|
6
|
+
let fn = () => {
|
|
7
|
+
retry--;
|
|
8
|
+
|
|
9
|
+
if (element.isConnected) {
|
|
10
|
+
retry = 0;
|
|
11
|
+
root(() => listener(element));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (retry) {
|
|
15
|
+
remove(fn);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
retry = 60;
|
|
19
|
+
|
|
20
|
+
add(fn);
|
|
21
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { STATE_HYDRATING, STATE_NONE } from '~/constants';
|
|
2
|
+
import { raf } from '~/utilities/queue';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
let tasks = Object.assign(new Set<VoidFunction>(), { running: false });
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
function tick() {
|
|
9
|
+
if (tasks.size === 0) {
|
|
10
|
+
tasks.running = false;
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
for (let task of tasks) {
|
|
15
|
+
task();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
raf.add(tick);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
const add = (task: VoidFunction) => {
|
|
23
|
+
tasks.add(task);
|
|
24
|
+
|
|
25
|
+
if (!tasks.running) {
|
|
26
|
+
tasks.running = true;
|
|
27
|
+
raf.add(tick);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const remove = (task: VoidFunction) => {
|
|
32
|
+
tasks.delete(task);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
export default (element: Element, listener: Function) => {
|
|
37
|
+
let dispose = () => {
|
|
38
|
+
remove(fn);
|
|
39
|
+
},
|
|
40
|
+
fn = () => {
|
|
41
|
+
if (state === STATE_HYDRATING) {
|
|
42
|
+
if (element.isConnected) {
|
|
43
|
+
state = STATE_NONE;
|
|
44
|
+
}
|
|
45
|
+
else if (retry--) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!element.isConnected) {
|
|
51
|
+
remove(fn);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
listener(dispose, element);
|
|
56
|
+
},
|
|
57
|
+
retry = 60,
|
|
58
|
+
state = STATE_HYDRATING;
|
|
59
|
+
|
|
60
|
+
add(fn);
|
|
61
|
+
};
|
|
62
|
+
export { add, remove };
|
package/src/types.ts
CHANGED
|
@@ -16,9 +16,10 @@ type Attributes = {
|
|
|
16
16
|
} & {
|
|
17
17
|
[key: `aria-${string}`]: string | number | boolean | undefined;
|
|
18
18
|
[key: `data-${string}`]: string | undefined;
|
|
19
|
-
onconnect?: (element:
|
|
20
|
-
ondisconnect?: (element:
|
|
21
|
-
onrender?: (element:
|
|
19
|
+
onconnect?: <T = Element>(element: T) => void;
|
|
20
|
+
ondisconnect?: <T = Element>(element: T) => void;
|
|
21
|
+
onrender?: <T = Element>(element: T) => void;
|
|
22
|
+
ontick?: <T = Element>(element: T) => void;
|
|
22
23
|
} & Record<PropertyKey, unknown>;
|
|
23
24
|
|
|
24
25
|
type Effect<T> = () => T extends [] ? Renderable<T>[] : Renderable<T>;
|