@studiometa/js-toolkit 2.11.2 → 2.12.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/Base/Base.cjs +155 -60
- package/Base/Base.cjs.map +2 -2
- package/Base/Base.js +138 -38
- package/Base/Base.js.map +2 -2
- package/Base/managers/AbstractManager.cjs +21 -0
- package/Base/managers/AbstractManager.cjs.map +1 -1
- package/Base/managers/AbstractManager.js +21 -0
- package/Base/managers/AbstractManager.js.map +1 -1
- package/Base/managers/ChildrenManager.cjs +41 -8
- package/Base/managers/ChildrenManager.cjs.map +3 -3
- package/Base/managers/ChildrenManager.js +41 -8
- package/Base/managers/ChildrenManager.js.map +2 -2
- package/Base/managers/EventsManager.cjs +92 -7
- package/Base/managers/EventsManager.cjs.map +2 -2
- package/Base/managers/EventsManager.js +88 -7
- package/Base/managers/EventsManager.js.map +2 -2
- package/Base/managers/OptionsManager.cjs +29 -2
- package/Base/managers/OptionsManager.cjs.map +2 -2
- package/Base/managers/OptionsManager.js +25 -2
- package/Base/managers/OptionsManager.js.map +2 -2
- package/Base/managers/RefsManager.cjs +19 -5
- package/Base/managers/RefsManager.cjs.map +2 -2
- package/Base/managers/RefsManager.js +27 -6
- package/Base/managers/RefsManager.js.map +2 -2
- package/Base/managers/ResponsiveOptionsManager.cjs +22 -6
- package/Base/managers/ResponsiveOptionsManager.cjs.map +2 -2
- package/Base/managers/ResponsiveOptionsManager.js +22 -6
- package/Base/managers/ResponsiveOptionsManager.js.map +2 -2
- package/Base/managers/ServicesManager.cjs +54 -4
- package/Base/managers/ServicesManager.cjs.map +2 -2
- package/Base/managers/ServicesManager.js +54 -4
- package/Base/managers/ServicesManager.js.map +2 -2
- package/Base/utils.cjs +4 -0
- package/Base/utils.cjs.map +1 -1
- package/Base/utils.js +4 -0
- package/Base/utils.js.map +1 -1
- package/decorators/withBreakpointManager.cjs +14 -4
- package/decorators/withBreakpointManager.cjs.map +2 -2
- package/decorators/withBreakpointManager.js +14 -4
- package/decorators/withBreakpointManager.js.map +2 -2
- package/decorators/withBreakpointObserver.cjs +11 -1
- package/decorators/withBreakpointObserver.cjs.map +2 -2
- package/decorators/withBreakpointObserver.js +12 -2
- package/decorators/withBreakpointObserver.js.map +2 -2
- package/decorators/withDrag.cjs +6 -0
- package/decorators/withDrag.cjs.map +1 -1
- package/decorators/withDrag.js +6 -0
- package/decorators/withDrag.js.map +1 -1
- package/decorators/withExtraConfig.cjs +7 -0
- package/decorators/withExtraConfig.cjs.map +1 -1
- package/decorators/withExtraConfig.js +3 -0
- package/decorators/withExtraConfig.js.map +1 -1
- package/decorators/withFreezedOptions.cjs +8 -0
- package/decorators/withFreezedOptions.cjs.map +1 -1
- package/decorators/withFreezedOptions.js +8 -0
- package/decorators/withFreezedOptions.js.map +1 -1
- package/decorators/withIntersectionObserver.cjs +9 -0
- package/decorators/withIntersectionObserver.cjs.map +1 -1
- package/decorators/withIntersectionObserver.js +9 -0
- package/decorators/withIntersectionObserver.js.map +1 -1
- package/decorators/withMountOnMediaQuery.cjs +16 -0
- package/decorators/withMountOnMediaQuery.cjs.map +1 -1
- package/decorators/withMountOnMediaQuery.js +16 -0
- package/decorators/withMountOnMediaQuery.js.map +1 -1
- package/decorators/withMountWhenInView.cjs +21 -0
- package/decorators/withMountWhenInView.cjs.map +1 -1
- package/decorators/withMountWhenInView.js +21 -0
- package/decorators/withMountWhenInView.js.map +1 -1
- package/decorators/withRelativePointer.cjs +6 -0
- package/decorators/withRelativePointer.cjs.map +1 -1
- package/decorators/withRelativePointer.js +6 -0
- package/decorators/withRelativePointer.js.map +1 -1
- package/decorators/withResponsiveOptions.cjs +3 -0
- package/decorators/withResponsiveOptions.cjs.map +1 -1
- package/decorators/withResponsiveOptions.js +3 -0
- package/decorators/withResponsiveOptions.js.map +1 -1
- package/decorators/withScrolledInView/utils.cjs +6 -6
- package/decorators/withScrolledInView/utils.cjs.map +2 -2
- package/decorators/withScrolledInView/utils.js +7 -7
- package/decorators/withScrolledInView/utils.js.map +2 -2
- package/decorators/withScrolledInView/withScrolledInView.cjs +33 -0
- package/decorators/withScrolledInView/withScrolledInView.cjs.map +1 -1
- package/decorators/withScrolledInView/withScrolledInView.js +33 -0
- package/decorators/withScrolledInView/withScrolledInView.js.map +1 -1
- package/decorators/withVue2.cjs +3 -0
- package/decorators/withVue2.cjs.map +1 -1
- package/decorators/withVue2.js +3 -0
- package/decorators/withVue2.js.map +1 -1
- package/helpers/createApp.cjs +2 -2
- package/helpers/createApp.cjs.map +2 -2
- package/helpers/createApp.js +2 -2
- package/helpers/createApp.js.map +2 -2
- package/helpers/getClosestParent.cjs +4 -0
- package/helpers/getClosestParent.cjs.map +1 -1
- package/helpers/getDirectChildren.cjs.map +1 -1
- package/helpers/getDirectChildren.js.map +1 -1
- package/helpers/importOnInteraction.cjs +4 -4
- package/helpers/importOnInteraction.cjs.map +2 -2
- package/helpers/importOnInteraction.js +4 -4
- package/helpers/importOnInteraction.js.map +2 -2
- package/helpers/importWhenPrefersMotion.cjs +4 -0
- package/helpers/importWhenPrefersMotion.cjs.map +1 -1
- package/helpers/importWhenVisible.cjs +2 -1
- package/helpers/importWhenVisible.cjs.map +2 -2
- package/helpers/importWhenVisible.js +2 -1
- package/helpers/importWhenVisible.js.map +2 -2
- package/helpers/index.cjs +4 -0
- package/helpers/index.cjs.map +1 -1
- package/package.json +3 -3
- package/services/drag.cjs +12 -8
- package/services/drag.cjs.map +2 -2
- package/services/drag.js +8 -8
- package/services/drag.js.map +2 -2
- package/services/index.cjs +4 -0
- package/services/index.cjs.map +1 -1
- package/services/key.cjs +6 -2
- package/services/key.cjs.map +2 -2
- package/services/key.js +2 -2
- package/services/key.js.map +2 -2
- package/services/load.cjs +3 -0
- package/services/load.cjs.map +1 -1
- package/services/load.js +3 -0
- package/services/load.js.map +1 -1
- package/services/pointer.cjs +4 -4
- package/services/pointer.cjs.map +2 -2
- package/services/pointer.js +4 -4
- package/services/pointer.js.map +2 -2
- package/services/raf.cjs +2 -2
- package/services/raf.cjs.map +2 -2
- package/services/raf.js +2 -2
- package/services/raf.js.map +2 -2
- package/services/resize.cjs +4 -0
- package/services/resize.cjs.map +1 -1
- package/services/scroll.cjs +4 -0
- package/services/scroll.cjs.map +1 -1
- package/services/service.cjs +2 -2
- package/services/service.cjs.map +2 -2
- package/services/service.js +2 -2
- package/services/service.js.map +2 -2
- package/utils/Queue.cjs +30 -0
- package/utils/Queue.cjs.map +1 -1
- package/utils/Queue.js +30 -0
- package/utils/Queue.js.map +1 -1
- package/utils/SmartQueue.cjs +16 -0
- package/utils/SmartQueue.cjs.map +1 -1
- package/utils/SmartQueue.js +12 -0
- package/utils/SmartQueue.js.map +1 -1
- package/utils/collide/collidePointRect.cjs +4 -1
- package/utils/collide/collidePointRect.cjs.map +1 -1
- package/utils/collide/collidePointRect.js +4 -1
- package/utils/collide/collidePointRect.js.map +1 -1
- package/utils/collide/collideRectRect.cjs +4 -1
- package/utils/collide/collideRectRect.cjs.map +1 -1
- package/utils/collide/collideRectRect.js +4 -1
- package/utils/collide/collideRectRect.js.map +1 -1
- package/utils/collide/index.cjs +4 -0
- package/utils/collide/index.cjs.map +1 -1
- package/utils/css/animate.cjs +21 -12
- package/utils/css/animate.cjs.map +2 -2
- package/utils/css/animate.js +17 -12
- package/utils/css/animate.js.map +2 -2
- package/utils/css/classes.cjs +2 -3
- package/utils/css/classes.cjs.map +2 -2
- package/utils/css/classes.js +2 -3
- package/utils/css/classes.js.map +2 -2
- package/utils/css/index.cjs +4 -0
- package/utils/css/index.cjs.map +1 -1
- package/utils/css/matrix.cjs.map +1 -1
- package/utils/css/matrix.js.map +1 -1
- package/utils/css/styles.cjs +2 -2
- package/utils/css/styles.cjs.map +2 -2
- package/utils/css/styles.js +2 -2
- package/utils/css/styles.js.map +2 -2
- package/utils/css/transform.cjs.map +1 -1
- package/utils/css/transform.js.map +1 -1
- package/utils/css/transition.cjs +19 -0
- package/utils/css/transition.cjs.map +1 -1
- package/utils/css/transition.js +15 -0
- package/utils/css/transition.js.map +1 -1
- package/utils/focusTrap.cjs +4 -0
- package/utils/focusTrap.cjs.map +1 -1
- package/utils/focusTrap.js.map +1 -1
- package/utils/history.cjs +6 -5
- package/utils/history.cjs.map +2 -2
- package/utils/history.js +6 -5
- package/utils/history.js.map +2 -2
- package/utils/index.cjs +4 -0
- package/utils/index.cjs.map +1 -1
- package/utils/math/clamp01.cjs +4 -0
- package/utils/math/clamp01.cjs.map +1 -1
- package/utils/math/index.cjs +4 -0
- package/utils/math/index.cjs.map +1 -1
- package/utils/math/inertiaFinalValue.cjs +4 -0
- package/utils/math/inertiaFinalValue.cjs.map +1 -1
- package/utils/object/autoBind.cjs +11 -5
- package/utils/object/autoBind.cjs.map +2 -2
- package/utils/object/autoBind.js +7 -5
- package/utils/object/autoBind.js.map +2 -2
- package/utils/object/index.cjs +4 -0
- package/utils/object/index.cjs.map +1 -1
- package/utils/scheduler.cjs +4 -4
- package/utils/scheduler.cjs.map +2 -2
- package/utils/scheduler.js +4 -4
- package/utils/scheduler.js.map +2 -2
- package/utils/scrollTo.cjs +4 -0
- package/utils/scrollTo.cjs.map +1 -1
- package/utils/string/endsWith.cjs +35 -0
- package/utils/string/endsWith.cjs.map +7 -0
- package/utils/string/endsWith.d.ts +8 -0
- package/utils/string/endsWith.js +13 -0
- package/utils/string/endsWith.js.map +7 -0
- package/utils/string/index.cjs +7 -0
- package/utils/string/index.cjs.map +2 -2
- package/utils/string/index.d.ts +2 -0
- package/utils/string/index.js +2 -0
- package/utils/string/index.js.map +2 -2
- package/utils/string/startsWith.cjs +35 -0
- package/utils/string/startsWith.cjs.map +7 -0
- package/utils/string/startsWith.d.ts +8 -0
- package/utils/string/startsWith.js +13 -0
- package/utils/string/startsWith.js.map +7 -0
- package/utils/string/withLeadingCharacters.cjs +4 -0
- package/utils/string/withLeadingCharacters.cjs.map +1 -1
- package/utils/string/withLeadingCharacters.js.map +1 -1
- package/utils/string/withLeadingSlash.cjs +4 -0
- package/utils/string/withLeadingSlash.cjs.map +1 -1
- package/utils/string/withTrailingCharacters.cjs +4 -0
- package/utils/string/withTrailingCharacters.cjs.map +1 -1
- package/utils/string/withTrailingCharacters.js.map +1 -1
- package/utils/string/withTrailingSlash.cjs +4 -0
- package/utils/string/withTrailingSlash.cjs.map +1 -1
- package/utils/string/withoutLeadingCharacters.cjs.map +1 -1
- package/utils/string/withoutLeadingCharacters.js.map +1 -1
- package/utils/string/withoutLeadingCharactersRecursive.cjs +4 -0
- package/utils/string/withoutLeadingCharactersRecursive.cjs.map +1 -1
- package/utils/string/withoutLeadingCharactersRecursive.js.map +1 -1
- package/utils/string/withoutLeadingSlash.cjs +4 -0
- package/utils/string/withoutLeadingSlash.cjs.map +1 -1
- package/utils/string/withoutTrailingCharacters.cjs.map +1 -1
- package/utils/string/withoutTrailingCharacters.js.map +1 -1
- package/utils/string/withoutTrailingCharactersRecursive.cjs +4 -0
- package/utils/string/withoutTrailingCharactersRecursive.cjs.map +1 -1
- package/utils/string/withoutTrailingCharactersRecursive.js.map +1 -1
- package/utils/string/withoutTrailingSlash.cjs +4 -0
- package/utils/string/withoutTrailingSlash.cjs.map +1 -1
- package/utils/tween.cjs +4 -0
- package/utils/tween.cjs.map +1 -1
- package/utils/tween.js.map +1 -1
package/Base/Base.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
import { noop, isDev, isFunction, isArray } from "../utils/index.js";
|
|
10
10
|
let id = 0;
|
|
11
11
|
function createAndTestManagers(instance) {
|
|
12
|
-
[
|
|
12
|
+
for (const { prop, constructorName, constructor } of [
|
|
13
13
|
{
|
|
14
14
|
prop: "__options",
|
|
15
15
|
constructorName: "OptionsManager",
|
|
@@ -35,22 +35,43 @@ function createAndTestManagers(instance) {
|
|
|
35
35
|
constructorName: "ChildrenManager",
|
|
36
36
|
constructor: ChildrenManager
|
|
37
37
|
}
|
|
38
|
-
]
|
|
38
|
+
]) {
|
|
39
39
|
instance[prop] = new instance.__managers[constructorName](instance);
|
|
40
40
|
if (isDev && !(instance[prop] instanceof constructor)) {
|
|
41
41
|
throw new Error(
|
|
42
42
|
`The \`$managers.${constructorName}\` must extend the \`${constructorName}\` class.`
|
|
43
43
|
);
|
|
44
44
|
}
|
|
45
|
-
}
|
|
45
|
+
}
|
|
46
46
|
}
|
|
47
47
|
class Base extends EventTarget {
|
|
48
|
+
/**
|
|
49
|
+
* This is a Base instance.
|
|
50
|
+
*/
|
|
48
51
|
static $isBase = true;
|
|
52
|
+
/**
|
|
53
|
+
* The instance parent.
|
|
54
|
+
*/
|
|
49
55
|
$parent = null;
|
|
56
|
+
/**
|
|
57
|
+
* The instance id.
|
|
58
|
+
*/
|
|
50
59
|
$id;
|
|
60
|
+
/**
|
|
61
|
+
* The root element.
|
|
62
|
+
*/
|
|
51
63
|
$el;
|
|
64
|
+
/**
|
|
65
|
+
* The state of the component.
|
|
66
|
+
*/
|
|
52
67
|
$isMounted = false;
|
|
68
|
+
/**
|
|
69
|
+
* Store the event handlers.
|
|
70
|
+
*/
|
|
53
71
|
__eventHandlers = /* @__PURE__ */ new Map();
|
|
72
|
+
/**
|
|
73
|
+
* Get the root instance of the app.
|
|
74
|
+
*/
|
|
54
75
|
get $root() {
|
|
55
76
|
if (!this.$parent) {
|
|
56
77
|
return this;
|
|
@@ -65,6 +86,9 @@ class Base extends EventTarget {
|
|
|
65
86
|
}
|
|
66
87
|
return root;
|
|
67
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Merge configuration with the parents' configurations.
|
|
91
|
+
*/
|
|
68
92
|
get __config() {
|
|
69
93
|
let proto = Object.getPrototypeOf(this);
|
|
70
94
|
let { config } = proto.constructor;
|
|
@@ -86,11 +110,13 @@ class Base extends EventTarget {
|
|
|
86
110
|
static config = {
|
|
87
111
|
name: "Base",
|
|
88
112
|
emits: [
|
|
113
|
+
// hook events
|
|
89
114
|
"before-mounted",
|
|
90
115
|
"mounted",
|
|
91
116
|
"updated",
|
|
92
117
|
"destroyed",
|
|
93
118
|
"terminated",
|
|
119
|
+
// default services' events
|
|
94
120
|
"ticked",
|
|
95
121
|
"scrolled",
|
|
96
122
|
"resized",
|
|
@@ -116,15 +142,27 @@ class Base extends EventTarget {
|
|
|
116
142
|
return this.__children;
|
|
117
143
|
}
|
|
118
144
|
__events;
|
|
145
|
+
/**
|
|
146
|
+
* Small helper to log stuff.
|
|
147
|
+
*/
|
|
119
148
|
get $log() {
|
|
120
149
|
return this.__options.log ? window.console.log.bind(window, `[${this.__config.name}]`) : noop;
|
|
121
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Small helper to make warning easier.
|
|
153
|
+
*/
|
|
122
154
|
get $warn() {
|
|
123
155
|
return this.__options.log ? window.console.warn.bind(window, `[${this.__config.name}]`) : noop;
|
|
124
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Small helper to debug information.
|
|
159
|
+
*/
|
|
125
160
|
get __debug() {
|
|
126
161
|
return isDev && this.__options.debug ? window.console.log.bind(window, `[debug] [${this.$id}]`) : noop;
|
|
127
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Get manager constructors.
|
|
165
|
+
*/
|
|
128
166
|
get __managers() {
|
|
129
167
|
return {
|
|
130
168
|
ChildrenManager,
|
|
@@ -134,6 +172,9 @@ class Base extends EventTarget {
|
|
|
134
172
|
ServicesManager
|
|
135
173
|
};
|
|
136
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Call an instance method and emit corresponding events.
|
|
177
|
+
*/
|
|
137
178
|
__callMethod(method, ...args) {
|
|
138
179
|
if (isDev) {
|
|
139
180
|
this.__debug("callMethod", method, ...args);
|
|
@@ -147,10 +188,21 @@ class Base extends EventTarget {
|
|
|
147
188
|
}
|
|
148
189
|
return this[method].call(this, ...args);
|
|
149
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Test if the given event has been bound to the instance.
|
|
193
|
+
*
|
|
194
|
+
* @param {string} event The event's name.
|
|
195
|
+
* @returns {boolean} Wether the given event has been bound or not.
|
|
196
|
+
*/
|
|
150
197
|
__hasEvent(event) {
|
|
151
198
|
const eventHandlers = this.__eventHandlers.get(event);
|
|
152
199
|
return eventHandlers && eventHandlers.size > 0;
|
|
153
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Class constructor where all the magic takes place.
|
|
203
|
+
*
|
|
204
|
+
* @param {HTMLElement} element The component's root element dd.
|
|
205
|
+
*/
|
|
154
206
|
constructor(element) {
|
|
155
207
|
super();
|
|
156
208
|
if (!element) {
|
|
@@ -178,6 +230,9 @@ class Base extends EventTarget {
|
|
|
178
230
|
this.__debug("constructor", this);
|
|
179
231
|
}
|
|
180
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Trigger the `mounted` callback.
|
|
235
|
+
*/
|
|
181
236
|
$mount() {
|
|
182
237
|
if (this.$isMounted) {
|
|
183
238
|
return this;
|
|
@@ -186,34 +241,34 @@ class Base extends EventTarget {
|
|
|
186
241
|
if (isDev) {
|
|
187
242
|
this.__debug("$mount");
|
|
188
243
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
this.$isMounted = true;
|
|
197
|
-
},
|
|
198
|
-
() => this.__callMethod("mounted")
|
|
199
|
-
].forEach(addToQueue);
|
|
244
|
+
addToQueue(() => this.$children.registerAll());
|
|
245
|
+
addToQueue(() => this.$refs.registerAll());
|
|
246
|
+
addToQueue(() => this.__events.bindRootElement());
|
|
247
|
+
addToQueue(() => this.$services.enableAll());
|
|
248
|
+
addToQueue(() => this.$children.mountAll());
|
|
249
|
+
addToQueue(() => this.$isMounted = true);
|
|
250
|
+
addToQueue(() => this.__callMethod("mounted"));
|
|
200
251
|
return this;
|
|
201
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Update the instance children.
|
|
255
|
+
*/
|
|
202
256
|
$update() {
|
|
203
257
|
if (isDev) {
|
|
204
258
|
this.__debug("$update");
|
|
205
259
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
() => this.__callMethod("updated")
|
|
214
|
-
].forEach(addToQueue);
|
|
260
|
+
addToQueue(() => this.$refs.unregisterAll());
|
|
261
|
+
addToQueue(() => this.$services.disableAll());
|
|
262
|
+
addToQueue(() => this.$children.registerAll());
|
|
263
|
+
addToQueue(() => this.$refs.registerAll());
|
|
264
|
+
addToQueue(() => this.$services.enableAll());
|
|
265
|
+
addToQueue(() => this.$children.updateAll());
|
|
266
|
+
addToQueue(() => this.__callMethod("updated"));
|
|
215
267
|
return this;
|
|
216
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Trigger the `destroyed` callback.
|
|
271
|
+
*/
|
|
217
272
|
$destroy() {
|
|
218
273
|
if (!this.$isMounted) {
|
|
219
274
|
return this;
|
|
@@ -221,28 +276,31 @@ class Base extends EventTarget {
|
|
|
221
276
|
if (isDev) {
|
|
222
277
|
this.__debug("$destroy");
|
|
223
278
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
() => this.$services.disableAll(),
|
|
231
|
-
() => this.$children.destroyAll(),
|
|
232
|
-
() => this.__callMethod("destroyed")
|
|
233
|
-
].forEach(addToQueue);
|
|
279
|
+
addToQueue(() => this.$isMounted = false);
|
|
280
|
+
addToQueue(() => this.__events.unbindRootElement());
|
|
281
|
+
addToQueue(() => this.$refs.unregisterAll());
|
|
282
|
+
addToQueue(() => this.$services.disableAll());
|
|
283
|
+
addToQueue(() => this.$children.destroyAll());
|
|
284
|
+
addToQueue(() => this.__callMethod("destroyed"));
|
|
234
285
|
return this;
|
|
235
286
|
}
|
|
287
|
+
/**
|
|
288
|
+
* Terminate a child instance when it is not needed anymore.
|
|
289
|
+
*/
|
|
236
290
|
$terminate() {
|
|
237
291
|
if (isDev) {
|
|
238
292
|
this.__debug("$terminate");
|
|
239
293
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
() => this.$el.__base__.set(this.__ctor, "terminated")
|
|
244
|
-
].forEach(addToQueue);
|
|
294
|
+
addToQueue(() => this.$destroy());
|
|
295
|
+
addToQueue(() => this.__callMethod("terminated"));
|
|
296
|
+
addToQueue(() => this.$el.__base__.set(this.__ctor, "terminated"));
|
|
245
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Add an emitted event.
|
|
300
|
+
*
|
|
301
|
+
* @param {string} event The event name.
|
|
302
|
+
* @returns {void}
|
|
303
|
+
*/
|
|
246
304
|
__addEmits(event) {
|
|
247
305
|
const ctor = this.__ctor;
|
|
248
306
|
if (isArray(ctor.config.emits)) {
|
|
@@ -251,14 +309,35 @@ class Base extends EventTarget {
|
|
|
251
309
|
ctor.config.emits = [event];
|
|
252
310
|
}
|
|
253
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Remove an emitted event.
|
|
314
|
+
*
|
|
315
|
+
* @param {string} event The event name.
|
|
316
|
+
* @returns {void}
|
|
317
|
+
*/
|
|
254
318
|
__removeEmits(event) {
|
|
255
319
|
const ctor = this.__ctor;
|
|
256
320
|
const index = ctor.config.emits.indexOf(event);
|
|
257
321
|
ctor.config.emits.splice(index, 1);
|
|
258
322
|
}
|
|
323
|
+
/**
|
|
324
|
+
* Get the instance constructor.
|
|
325
|
+
*/
|
|
259
326
|
get __ctor() {
|
|
260
327
|
return this.constructor;
|
|
261
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Bind a listener function to an event.
|
|
331
|
+
*
|
|
332
|
+
* @param {string} event
|
|
333
|
+
* Name of the event.
|
|
334
|
+
* @param {EventListenerOrEventListenerObject} listener
|
|
335
|
+
* Function to be called.
|
|
336
|
+
* @param {boolean|AddEventListenerOptions} [options]
|
|
337
|
+
* Options for the `removeEventListener` method.
|
|
338
|
+
* @returns {() => void}
|
|
339
|
+
* A function to unbind the listener.
|
|
340
|
+
*/
|
|
262
341
|
$on(event, listener, options) {
|
|
263
342
|
if (isDev) {
|
|
264
343
|
this.__debug("$on", event, listener, options);
|
|
@@ -275,6 +354,17 @@ class Base extends EventTarget {
|
|
|
275
354
|
this.$off(event, listener, options);
|
|
276
355
|
};
|
|
277
356
|
}
|
|
357
|
+
/**
|
|
358
|
+
* Unbind a listener function from an event.
|
|
359
|
+
*
|
|
360
|
+
* @param {string} event
|
|
361
|
+
* Name of the event.
|
|
362
|
+
* @param {EventListenerOrEventListenerObject} listener
|
|
363
|
+
* Function to be removed.
|
|
364
|
+
* @param {boolean|EventListenerOptions} [options]
|
|
365
|
+
* Options for the `removeEventListener` method.
|
|
366
|
+
* @returns {void}
|
|
367
|
+
*/
|
|
278
368
|
$off(event, listener, options) {
|
|
279
369
|
if (isDev) {
|
|
280
370
|
this.__debug("$off", event, listener);
|
|
@@ -283,12 +373,22 @@ class Base extends EventTarget {
|
|
|
283
373
|
const target = getEventTarget(this, event, this.__config);
|
|
284
374
|
target.removeEventListener(event, listener, options);
|
|
285
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* Emits an event.
|
|
378
|
+
*
|
|
379
|
+
* @param {string} event Name of the event.
|
|
380
|
+
* @param {any[]} args The arguments to apply to the functions bound to this event.
|
|
381
|
+
* @returns {void}
|
|
382
|
+
*/
|
|
286
383
|
$emit(event, ...args) {
|
|
287
384
|
if (isDev) {
|
|
288
385
|
this.__debug("$emit", event, args);
|
|
289
386
|
}
|
|
290
387
|
this.dispatchEvent(new CustomEvent(event, { detail: args }));
|
|
291
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Factory method to generate multiple instance of the class.
|
|
391
|
+
*/
|
|
292
392
|
static $factory(nameOrSelector) {
|
|
293
393
|
if (isDev && !nameOrSelector) {
|
|
294
394
|
throw new Error(
|
package/Base/Base.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/js-toolkit/Base/Base.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { getComponentElements, getEventTarget, addToQueue } from './utils.js';\nimport {\n ChildrenManager,\n RefsManager,\n ServicesManager,\n EventsManager,\n OptionsManager,\n} from './managers/index.js';\nimport { noop, isDev, isFunction, isArray } from '../utils/index.js';\n\nlet id = 0;\n\n/**\n * Test if the managers' instances implement the default manager.\n *\n * @throws\n */\nfunction createAndTestManagers(instance: Base): void {\n [\n {\n prop: '__options',\n constructorName: 'OptionsManager',\n constructor: OptionsManager,\n },\n {\n prop: '__services',\n constructorName: 'ServicesManager',\n constructor: ServicesManager,\n },\n {\n prop: '__events',\n constructorName: 'EventsManager',\n constructor: EventsManager,\n },\n {\n prop: '__refs',\n constructorName: 'RefsManager',\n constructor: RefsManager,\n },\n {\n prop: '__children',\n constructorName: 'ChildrenManager',\n constructor: ChildrenManager,\n },\n ].forEach(({ prop, constructorName, constructor }) => {\n instance[prop] = new instance.__managers[constructorName](instance);\n if (isDev && !(instance[prop] instanceof constructor)) {\n throw new Error(\n `The \\`$managers.${constructorName}\\` must extend the \\`${constructorName}\\` class.`,\n );\n }\n });\n}\n\nexport type BaseEl = HTMLElement & { __base__?: WeakMap<BaseConstructor, Base | 'terminated'> };\nexport type BaseConstructor<T extends Base = Base> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n prototype: Base;\n} & Pick<typeof Base, keyof typeof Base>;\nexport type BaseAsyncConstructor<T extends Base = Base> = (\n instance: Base,\n) => Promise<BaseConstructor<T> | { default: BaseConstructor<T> }>;\nexport type BaseOptions = { [name: string]: unknown };\nexport type BaseRefs = { [name: string]: HTMLElement | HTMLElement[] };\nexport type BaseChildren = { [nameOrSelector: string]: Base[] | Promise<Base>[] };\nexport type BaseConfigComponents = {\n [nameOrSelector: string]: BaseConstructor | BaseAsyncConstructor;\n};\n\nexport type BaseConfig = {\n name: string;\n debug?: boolean;\n log?: boolean;\n refs?: string[];\n emits?: string[];\n components?: BaseConfigComponents;\n options?: import('./managers/OptionsManager').OptionsSchema;\n};\n\nexport type BaseProps = {\n $el?: HTMLElement;\n $options?: BaseOptions;\n $refs?: BaseRefs;\n $children?: BaseChildren;\n $parent?: Base;\n};\n\nexport type Managers = {\n ChildrenManager: typeof ChildrenManager;\n EventsManager: typeof EventsManager;\n OptionsManager: typeof OptionsManager;\n RefsManager: typeof RefsManager;\n ServicesManager: typeof ServicesManager;\n};\n\n/**\n * Base class.\n */\nexport class Base<T extends BaseProps = BaseProps> extends EventTarget {\n /**\n * This is a Base instance.\n */\n static readonly $isBase = true as const;\n\n /**\n * The instance parent.\n */\n $parent: T['$parent'] & Base = null;\n\n /**\n * The instance id.\n */\n $id: string;\n\n /**\n * The root element.\n */\n $el: T['$el'] & BaseEl;\n\n /**\n * The state of the component.\n */\n $isMounted = false;\n\n /**\n * Store the event handlers.\n */\n __eventHandlers: Map<string, Set<EventListenerOrEventListenerObject>> = new Map();\n\n /**\n * Get the root instance of the app.\n */\n get $root(): Base {\n if (!this.$parent) {\n return this;\n }\n\n let parent = this.$parent;\n let root = this.$parent;\n\n while (parent) {\n if (!parent.$parent) {\n root = parent;\n }\n\n parent = parent.$parent;\n }\n\n return root;\n }\n\n /**\n * Merge configuration with the parents' configurations.\n */\n get __config(): BaseConfig {\n let proto = Object.getPrototypeOf(this);\n let { config } = proto.constructor;\n\n while (proto.constructor.config && proto.constructor.$isBase) {\n config = { ...proto.constructor.config, ...config };\n\n if (proto.constructor.config.options) {\n config.options = { ...proto.constructor.config.options, ...config.options };\n }\n\n if (proto.constructor.config.emits && config.emits) {\n config.emits = [...proto.constructor.config.emits, ...config.emits];\n }\n\n proto = Object.getPrototypeOf(proto);\n }\n\n config.options = config.options ?? {};\n config.refs = config.refs ?? [];\n config.components = config.components ?? {};\n\n return config;\n }\n\n static config: BaseConfig = {\n name: 'Base',\n emits: [\n // hook events\n 'before-mounted',\n 'mounted',\n 'updated',\n 'destroyed',\n 'terminated',\n // default services' events\n 'ticked',\n 'scrolled',\n 'resized',\n 'moved',\n 'loaded',\n 'keyed',\n ],\n };\n\n __services: ServicesManager;\n\n get $services(): ServicesManager {\n return this.__services;\n }\n\n __refs: RefsManager & T['$refs'] & BaseRefs;\n\n get $refs(): RefsManager & T['$refs'] & BaseRefs {\n return this.__refs;\n }\n\n __options: OptionsManager & T['$options'] & BaseOptions;\n\n get $options(): OptionsManager & T['$options'] & BaseOptions {\n return this.__options;\n }\n\n __children: ChildrenManager & T['$children'] & BaseChildren;\n\n get $children(): ChildrenManager & T['$children'] & BaseChildren {\n return this.__children;\n }\n\n __events: EventsManager;\n\n /**\n * Small helper to log stuff.\n */\n get $log(): (...args: unknown[]) => void {\n return this.__options.log ? window.console.log.bind(window, `[${this.__config.name}]`) : noop;\n }\n\n /**\n * Small helper to make warning easier.\n */\n get $warn(): (...args: unknown[]) => void {\n return this.__options.log ? window.console.warn.bind(window, `[${this.__config.name}]`) : noop;\n }\n\n /**\n * Small helper to debug information.\n */\n get __debug(): (...args: unknown[]) => void {\n return isDev && this.__options.debug\n ? window.console.log.bind(window, `[debug] [${this.$id}]`)\n : noop;\n }\n\n /**\n * Get manager constructors.\n */\n get __managers(): Managers {\n return {\n ChildrenManager,\n EventsManager,\n OptionsManager,\n RefsManager,\n ServicesManager,\n };\n }\n\n /**\n * Call an instance method and emit corresponding events.\n */\n __callMethod(method: string, ...args: unknown[]): unknown {\n if (isDev) {\n this.__debug('callMethod', method, ...args);\n }\n\n this.$emit(method, ...args);\n\n // We always emit an event, but we do not call the method if it does not exist\n if (!isFunction(this[method])) {\n return null;\n }\n\n if (isDev) {\n this.__debug(method, this, ...args);\n }\n\n return this[method].call(this, ...args);\n }\n\n /**\n * Test if the given event has been bound to the instance.\n *\n * @param {string} event The event's name.\n * @returns {boolean} Wether the given event has been bound or not.\n */\n __hasEvent(event: string): boolean {\n const eventHandlers = this.__eventHandlers.get(event);\n return eventHandlers && eventHandlers.size > 0;\n }\n\n /**\n * Class constructor where all the magic takes place.\n *\n * @param {HTMLElement} element The component's root element dd.\n */\n constructor(element: HTMLElement) {\n super();\n\n if (!element) {\n if (isDev) {\n throw new Error('The root element must be defined.');\n }\n return;\n }\n\n const { __config } = this;\n\n if (__config.name === 'Base') {\n if (isDev) {\n throw new Error('The `config.name` property is required.');\n }\n return;\n }\n\n this.$id = `${__config.name}-${id}`;\n id += 1;\n\n this.$el = element;\n\n if (!this.$el.__base__) {\n this.$el.__base__ = new WeakMap();\n }\n\n this.$el.__base__.set(this.__ctor, this);\n\n createAndTestManagers(this);\n\n if (isDev) {\n this.__debug('constructor', this);\n }\n }\n\n /**\n * Trigger the `mounted` callback.\n */\n $mount(): this {\n if (this.$isMounted) {\n return this;\n }\n\n this.$emit('before-mounted');\n\n if (isDev) {\n this.__debug('$mount');\n }\n\n [\n () => this.$children.registerAll(),\n () => this.$refs.registerAll(),\n () => this.__events.bindRootElement(),\n () => this.$services.enableAll(),\n () => this.$children.mountAll(),\n // eslint-disable-next-line prettier/prettier\n () => {\n this.$isMounted = true;\n },\n () => this.__callMethod('mounted'),\n ].forEach(addToQueue);\n\n return this;\n }\n\n /**\n * Update the instance children.\n */\n $update(): this {\n if (isDev) {\n this.__debug('$update');\n }\n\n [\n // Undo\n () => this.$refs.unregisterAll(),\n () => this.$services.disableAll(),\n // Redo\n () => this.$children.registerAll(),\n () => this.$refs.registerAll(),\n () => this.$services.enableAll(),\n // Update\n () => this.$children.updateAll(),\n () => this.__callMethod('updated'),\n ].forEach(addToQueue);\n\n return this;\n }\n\n /**\n * Trigger the `destroyed` callback.\n */\n $destroy(): this {\n if (!this.$isMounted) {\n return this;\n }\n\n if (isDev) {\n this.__debug('$destroy');\n }\n\n [\n // eslint-disable-next-line prettier/prettier\n () => {\n this.$isMounted = false;\n },\n () => this.__events.unbindRootElement(),\n () => this.$refs.unregisterAll(),\n () => this.$services.disableAll(),\n () => this.$children.destroyAll(),\n () => this.__callMethod('destroyed'),\n ].forEach(addToQueue);\n\n return this;\n }\n\n /**\n * Terminate a child instance when it is not needed anymore.\n */\n $terminate(): void {\n if (isDev) {\n this.__debug('$terminate');\n }\n\n [\n // First, destroy the component.\n () => this.$destroy(),\n // Execute the `terminated` hook if it exists\n () => this.__callMethod('terminated'),\n // Delete instance\n () => this.$el.__base__.set(this.__ctor, 'terminated'),\n ].forEach(addToQueue);\n }\n\n /**\n * Add an emitted event.\n *\n * @param {string} event The event name.\n * @returns {void}\n */\n __addEmits(event: string): void {\n const ctor = this.__ctor;\n if (isArray(ctor.config.emits)) {\n ctor.config.emits.push(event);\n } else {\n ctor.config.emits = [event];\n }\n }\n\n /**\n * Remove an emitted event.\n *\n * @param {string} event The event name.\n * @returns {void}\n */\n __removeEmits(event: string): void {\n const ctor = this.__ctor;\n const index = ctor.config.emits.indexOf(event);\n ctor.config.emits.splice(index, 1);\n }\n\n /**\n * Get the instance constructor.\n */\n get __ctor(): BaseConstructor {\n return this.constructor as BaseConstructor;\n }\n\n /**\n * Bind a listener function to an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be called.\n * @param {boolean|AddEventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @returns {() => void}\n * A function to unbind the listener.\n */\n $on(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): () => void {\n if (isDev) {\n this.__debug('$on', event, listener, options);\n }\n\n let set = this.__eventHandlers.get(event);\n\n if (!set) {\n set = new Set();\n this.__eventHandlers.set(event, set);\n }\n\n set.add(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target.addEventListener(event, listener, options);\n\n return () => {\n this.$off(event, listener, options);\n };\n }\n\n /**\n * Unbind a listener function from an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be removed.\n * @param {boolean|EventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @returns {void}\n */\n $off(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ) {\n if (isDev) {\n this.__debug('$off', event, listener);\n }\n\n this.__eventHandlers.get(event).delete(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target.removeEventListener(event, listener, options);\n }\n\n /**\n * Emits an event.\n *\n * @param {string} event Name of the event.\n * @param {any[]} args The arguments to apply to the functions bound to this event.\n * @returns {void}\n */\n $emit(event: string, ...args: unknown[]) {\n if (isDev) {\n this.__debug('$emit', event, args);\n }\n\n this.dispatchEvent(new CustomEvent(event, { detail: args }));\n }\n\n /**\n * Factory method to generate multiple instance of the class.\n */\n static $factory(nameOrSelector: string): Base[] {\n if (isDev && !nameOrSelector) {\n throw new Error(\n 'The $factory method requires a component\u2019s name or selector to be specified.',\n );\n }\n\n return getComponentElements(nameOrSelector).map((el) => new this(el).$mount());\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA,SAAS,sBAAsB,gBAAgB,kBAAkB;AACjE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,MAAM,OAAO,YAAY,eAAe;AAEjD,IAAI,KAAK;AAOT,SAAS,sBAAsB,UAAsB;AACnD;AAAA,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { getComponentElements, getEventTarget, addToQueue } from './utils.js';\nimport {\n ChildrenManager,\n RefsManager,\n ServicesManager,\n EventsManager,\n OptionsManager,\n} from './managers/index.js';\nimport { noop, isDev, isFunction, isArray } from '../utils/index.js';\n\nlet id = 0;\n\n/**\n * Test if the managers' instances implement the default manager.\n *\n * @throws\n */\nfunction createAndTestManagers(instance: Base): void {\n for (const { prop, constructorName, constructor } of [\n {\n prop: '__options',\n constructorName: 'OptionsManager',\n constructor: OptionsManager,\n },\n {\n prop: '__services',\n constructorName: 'ServicesManager',\n constructor: ServicesManager,\n },\n {\n prop: '__events',\n constructorName: 'EventsManager',\n constructor: EventsManager,\n },\n {\n prop: '__refs',\n constructorName: 'RefsManager',\n constructor: RefsManager,\n },\n {\n prop: '__children',\n constructorName: 'ChildrenManager',\n constructor: ChildrenManager,\n },\n ]) {\n instance[prop] = new instance.__managers[constructorName](instance);\n if (isDev && !(instance[prop] instanceof constructor)) {\n throw new Error(\n `The \\`$managers.${constructorName}\\` must extend the \\`${constructorName}\\` class.`,\n );\n }\n }\n}\n\nexport type BaseEl = HTMLElement & { __base__?: WeakMap<BaseConstructor, Base | 'terminated'> };\nexport type BaseConstructor<T extends Base = Base> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n prototype: Base;\n} & Pick<typeof Base, keyof typeof Base>;\nexport type BaseAsyncConstructor<T extends Base = Base> = (\n instance: Base,\n) => Promise<BaseConstructor<T> | { default: BaseConstructor<T> }>;\nexport type BaseOptions = { [name: string]: unknown };\nexport type BaseRefs = { [name: string]: HTMLElement | HTMLElement[] };\nexport type BaseChildren = { [nameOrSelector: string]: Base[] | Promise<Base>[] };\nexport type BaseConfigComponents = {\n [nameOrSelector: string]: BaseConstructor | BaseAsyncConstructor;\n};\n\nexport type BaseConfig = {\n name: string;\n debug?: boolean;\n log?: boolean;\n refs?: string[];\n emits?: string[];\n components?: BaseConfigComponents;\n options?: import('./managers/OptionsManager').OptionsSchema;\n};\n\nexport type BaseProps = {\n $el?: HTMLElement;\n $options?: BaseOptions;\n $refs?: BaseRefs;\n $children?: BaseChildren;\n $parent?: Base;\n};\n\nexport type Managers = {\n ChildrenManager: typeof ChildrenManager;\n EventsManager: typeof EventsManager;\n OptionsManager: typeof OptionsManager;\n RefsManager: typeof RefsManager;\n ServicesManager: typeof ServicesManager;\n};\n\n/**\n * Base class.\n */\nexport class Base<T extends BaseProps = BaseProps> extends EventTarget {\n /**\n * This is a Base instance.\n */\n static readonly $isBase = true as const;\n\n /**\n * The instance parent.\n */\n $parent: T['$parent'] & Base = null;\n\n /**\n * The instance id.\n */\n $id: string;\n\n /**\n * The root element.\n */\n $el: T['$el'] & BaseEl;\n\n /**\n * The state of the component.\n */\n $isMounted = false;\n\n /**\n * Store the event handlers.\n */\n __eventHandlers: Map<string, Set<EventListenerOrEventListenerObject>> = new Map();\n\n /**\n * Get the root instance of the app.\n */\n get $root(): Base {\n if (!this.$parent) {\n return this;\n }\n\n let parent = this.$parent;\n let root = this.$parent;\n\n while (parent) {\n if (!parent.$parent) {\n root = parent;\n }\n\n parent = parent.$parent;\n }\n\n return root;\n }\n\n /**\n * Merge configuration with the parents' configurations.\n */\n get __config(): BaseConfig {\n let proto = Object.getPrototypeOf(this);\n let { config } = proto.constructor;\n\n while (proto.constructor.config && proto.constructor.$isBase) {\n config = { ...proto.constructor.config, ...config };\n\n if (proto.constructor.config.options) {\n config.options = { ...proto.constructor.config.options, ...config.options };\n }\n\n if (proto.constructor.config.emits && config.emits) {\n config.emits = [...proto.constructor.config.emits, ...config.emits];\n }\n\n proto = Object.getPrototypeOf(proto);\n }\n\n config.options = config.options ?? {};\n config.refs = config.refs ?? [];\n config.components = config.components ?? {};\n\n return config;\n }\n\n static config: BaseConfig = {\n name: 'Base',\n emits: [\n // hook events\n 'before-mounted',\n 'mounted',\n 'updated',\n 'destroyed',\n 'terminated',\n // default services' events\n 'ticked',\n 'scrolled',\n 'resized',\n 'moved',\n 'loaded',\n 'keyed',\n ],\n };\n\n __services: ServicesManager;\n\n get $services(): ServicesManager {\n return this.__services;\n }\n\n __refs: RefsManager & T['$refs'] & BaseRefs;\n\n get $refs(): RefsManager & T['$refs'] & BaseRefs {\n return this.__refs;\n }\n\n __options: OptionsManager & T['$options'] & BaseOptions;\n\n get $options(): OptionsManager & T['$options'] & BaseOptions {\n return this.__options;\n }\n\n __children: ChildrenManager & T['$children'] & BaseChildren;\n\n get $children(): ChildrenManager & T['$children'] & BaseChildren {\n return this.__children;\n }\n\n __events: EventsManager;\n\n /**\n * Small helper to log stuff.\n */\n get $log(): (...args: unknown[]) => void {\n return this.__options.log ? window.console.log.bind(window, `[${this.__config.name}]`) : noop;\n }\n\n /**\n * Small helper to make warning easier.\n */\n get $warn(): (...args: unknown[]) => void {\n return this.__options.log ? window.console.warn.bind(window, `[${this.__config.name}]`) : noop;\n }\n\n /**\n * Small helper to debug information.\n */\n get __debug(): (...args: unknown[]) => void {\n return isDev && this.__options.debug\n ? window.console.log.bind(window, `[debug] [${this.$id}]`)\n : noop;\n }\n\n /**\n * Get manager constructors.\n */\n get __managers(): Managers {\n return {\n ChildrenManager,\n EventsManager,\n OptionsManager,\n RefsManager,\n ServicesManager,\n };\n }\n\n /**\n * Call an instance method and emit corresponding events.\n */\n __callMethod(method: string, ...args: unknown[]): unknown {\n if (isDev) {\n this.__debug('callMethod', method, ...args);\n }\n\n this.$emit(method, ...args);\n\n // We always emit an event, but we do not call the method if it does not exist\n if (!isFunction(this[method])) {\n return null;\n }\n\n if (isDev) {\n this.__debug(method, this, ...args);\n }\n\n return this[method].call(this, ...args);\n }\n\n /**\n * Test if the given event has been bound to the instance.\n *\n * @param {string} event The event's name.\n * @returns {boolean} Wether the given event has been bound or not.\n */\n __hasEvent(event: string): boolean {\n const eventHandlers = this.__eventHandlers.get(event);\n return eventHandlers && eventHandlers.size > 0;\n }\n\n /**\n * Class constructor where all the magic takes place.\n *\n * @param {HTMLElement} element The component's root element dd.\n */\n constructor(element: HTMLElement) {\n super();\n\n if (!element) {\n if (isDev) {\n throw new Error('The root element must be defined.');\n }\n return;\n }\n\n const { __config } = this;\n\n if (__config.name === 'Base') {\n if (isDev) {\n throw new Error('The `config.name` property is required.');\n }\n return;\n }\n\n this.$id = `${__config.name}-${id}`;\n id += 1;\n\n this.$el = element;\n\n if (!this.$el.__base__) {\n this.$el.__base__ = new WeakMap();\n }\n\n this.$el.__base__.set(this.__ctor, this);\n\n createAndTestManagers(this);\n\n if (isDev) {\n this.__debug('constructor', this);\n }\n }\n\n /**\n * Trigger the `mounted` callback.\n */\n $mount(): this {\n if (this.$isMounted) {\n return this;\n }\n\n this.$emit('before-mounted');\n\n if (isDev) {\n this.__debug('$mount');\n }\n\n addToQueue(() => this.$children.registerAll());\n addToQueue(() => this.$refs.registerAll());\n addToQueue(() => this.__events.bindRootElement());\n addToQueue(() => this.$services.enableAll());\n addToQueue(() => this.$children.mountAll());\n // eslint-disable-next-line no-return-assign\n addToQueue(() => (this.$isMounted = true));\n addToQueue(() => this.__callMethod('mounted'));\n\n return this;\n }\n\n /**\n * Update the instance children.\n */\n $update(): this {\n if (isDev) {\n this.__debug('$update');\n }\n\n // Undo\n addToQueue(() => this.$refs.unregisterAll());\n addToQueue(() => this.$services.disableAll());\n // Redo\n addToQueue(() => this.$children.registerAll());\n addToQueue(() => this.$refs.registerAll());\n addToQueue(() => this.$services.enableAll());\n // Update\n addToQueue(() => this.$children.updateAll());\n addToQueue(() => this.__callMethod('updated'));\n\n return this;\n }\n\n /**\n * Trigger the `destroyed` callback.\n */\n $destroy(): this {\n if (!this.$isMounted) {\n return this;\n }\n\n if (isDev) {\n this.__debug('$destroy');\n }\n\n // eslint-disable-next-line no-return-assign\n addToQueue(() => (this.$isMounted = false));\n addToQueue(() => this.__events.unbindRootElement());\n addToQueue(() => this.$refs.unregisterAll());\n addToQueue(() => this.$services.disableAll());\n addToQueue(() => this.$children.destroyAll());\n addToQueue(() => this.__callMethod('destroyed'));\n\n return this;\n }\n\n /**\n * Terminate a child instance when it is not needed anymore.\n */\n $terminate(): void {\n if (isDev) {\n this.__debug('$terminate');\n }\n\n // First, destroy the component.\n addToQueue(() => this.$destroy());\n // Execute the `terminated` hook if it exists\n addToQueue(() => this.__callMethod('terminated'));\n // Delete instance\n addToQueue(() => this.$el.__base__.set(this.__ctor, 'terminated'));\n }\n\n /**\n * Add an emitted event.\n *\n * @param {string} event The event name.\n * @returns {void}\n */\n __addEmits(event: string): void {\n const ctor = this.__ctor;\n if (isArray(ctor.config.emits)) {\n ctor.config.emits.push(event);\n } else {\n ctor.config.emits = [event];\n }\n }\n\n /**\n * Remove an emitted event.\n *\n * @param {string} event The event name.\n * @returns {void}\n */\n __removeEmits(event: string): void {\n const ctor = this.__ctor;\n const index = ctor.config.emits.indexOf(event);\n ctor.config.emits.splice(index, 1);\n }\n\n /**\n * Get the instance constructor.\n */\n get __ctor(): BaseConstructor {\n return this.constructor as BaseConstructor;\n }\n\n /**\n * Bind a listener function to an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be called.\n * @param {boolean|AddEventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @returns {() => void}\n * A function to unbind the listener.\n */\n $on(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): () => void {\n if (isDev) {\n this.__debug('$on', event, listener, options);\n }\n\n let set = this.__eventHandlers.get(event);\n\n if (!set) {\n set = new Set();\n this.__eventHandlers.set(event, set);\n }\n\n set.add(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target.addEventListener(event, listener, options);\n\n return () => {\n this.$off(event, listener, options);\n };\n }\n\n /**\n * Unbind a listener function from an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be removed.\n * @param {boolean|EventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @returns {void}\n */\n $off(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ) {\n if (isDev) {\n this.__debug('$off', event, listener);\n }\n\n this.__eventHandlers.get(event).delete(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target.removeEventListener(event, listener, options);\n }\n\n /**\n * Emits an event.\n *\n * @param {string} event Name of the event.\n * @param {any[]} args The arguments to apply to the functions bound to this event.\n * @returns {void}\n */\n $emit(event: string, ...args: unknown[]) {\n if (isDev) {\n this.__debug('$emit', event, args);\n }\n\n this.dispatchEvent(new CustomEvent(event, { detail: args }));\n }\n\n /**\n * Factory method to generate multiple instance of the class.\n */\n static $factory(nameOrSelector: string): Base[] {\n if (isDev && !nameOrSelector) {\n throw new Error(\n 'The $factory method requires a component\u2019s name or selector to be specified.',\n );\n }\n\n return getComponentElements(nameOrSelector).map((el) => new this(el).$mount());\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -23,20 +23,41 @@ __export(AbstractManager_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(AbstractManager_exports);
|
|
25
25
|
var AbstractManager = class {
|
|
26
|
+
/**
|
|
27
|
+
* Base instance.
|
|
28
|
+
*/
|
|
26
29
|
__base;
|
|
30
|
+
/**
|
|
31
|
+
* Get the base instance root element.
|
|
32
|
+
*/
|
|
27
33
|
get __element() {
|
|
28
34
|
return this.__base.$el;
|
|
29
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the base instance config.
|
|
38
|
+
*/
|
|
30
39
|
get __config() {
|
|
31
40
|
return this.__base.__config;
|
|
32
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the events manager.
|
|
44
|
+
*/
|
|
33
45
|
get __eventsManager() {
|
|
34
46
|
return this.__base.__events;
|
|
35
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Class constructor.
|
|
50
|
+
*/
|
|
36
51
|
constructor(base) {
|
|
37
52
|
this.__base = base;
|
|
38
53
|
this.__hideProperties(["__base"]);
|
|
39
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Prevent a list of properties from being enumerable and writable.
|
|
57
|
+
*
|
|
58
|
+
* @param {string[]} properties
|
|
59
|
+
* @returns {void}
|
|
60
|
+
*/
|
|
40
61
|
__hideProperties(properties) {
|
|
41
62
|
Object.defineProperties(
|
|
42
63
|
this,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/Base/managers/AbstractManager.ts"],
|
|
4
4
|
"sourcesContent": ["import type { Base } from '../index.js';\n\n/**\n * AbstractManager class.\n */\nexport class AbstractManager {\n /**\n * Base instance.\n */\n __base: Base;\n\n /**\n * Get the base instance root element.\n */\n get __element() {\n return this.__base.$el;\n }\n\n /**\n * Get the base instance config.\n */\n get __config() {\n return this.__base.__config;\n }\n\n /**\n * Get the events manager.\n */\n get __eventsManager() {\n return this.__base.__events;\n }\n\n /**\n * Class constructor.\n */\n constructor(base: Base) {\n this.__base = base;\n this.__hideProperties(['__base']);\n }\n\n /**\n * Prevent a list of properties from being enumerable and writable.\n *\n * @param {string[]} properties\n * @returns {void}\n */\n __hideProperties(properties: string[]) {\n Object.defineProperties(\n this,\n Object.fromEntries(\n properties.map((property) => [\n property,\n {\n enumerable: false,\n writable: false,\n value: this[property],\n },\n ]),\n ),\n );\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,IAAM,kBAAN,MAAsB;AAAA,EAI3B;AAAA,EAKA,IAAI,YAAY;AACd,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAKA,IAAI,WAAW;AACb,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAKA,IAAI,kBAAkB;AACpB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAKA,YAAY,MAAY;AACtB,SAAK,SAAS;AACd,SAAK,iBAAiB,CAAC,QAAQ,CAAC;AAAA,EAClC;AAAA,EAQA,iBAAiB,YAAsB;AACrC,WAAO;AAAA,MACL;AAAA,MACA,OAAO;AAAA,QACL,WAAW,IAAI,CAAC,aAAa;AAAA,UAC3B;AAAA,UACA;AAAA,YACE,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO,KAAK;AAAA,
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,IAAM,kBAAN,MAAsB;AAAA;AAAA;AAAA;AAAA,EAI3B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAY;AACd,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAW;AACb,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,kBAAkB;AACpB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAY;AACtB,SAAK,SAAS;AACd,SAAK,iBAAiB,CAAC,QAAQ,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,YAAsB;AACrC,WAAO;AAAA,MACL;AAAA,MACA,OAAO;AAAA,QACL,WAAW,IAAI,CAAC,aAAa;AAAA,UAC3B;AAAA,UACA;AAAA,YACE,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO,KAAK,QAAQ;AAAA,UACtB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,18 +1,39 @@
|
|
|
1
1
|
class AbstractManager {
|
|
2
|
+
/**
|
|
3
|
+
* Base instance.
|
|
4
|
+
*/
|
|
2
5
|
__base;
|
|
6
|
+
/**
|
|
7
|
+
* Get the base instance root element.
|
|
8
|
+
*/
|
|
3
9
|
get __element() {
|
|
4
10
|
return this.__base.$el;
|
|
5
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Get the base instance config.
|
|
14
|
+
*/
|
|
6
15
|
get __config() {
|
|
7
16
|
return this.__base.__config;
|
|
8
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the events manager.
|
|
20
|
+
*/
|
|
9
21
|
get __eventsManager() {
|
|
10
22
|
return this.__base.__events;
|
|
11
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Class constructor.
|
|
26
|
+
*/
|
|
12
27
|
constructor(base) {
|
|
13
28
|
this.__base = base;
|
|
14
29
|
this.__hideProperties(["__base"]);
|
|
15
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Prevent a list of properties from being enumerable and writable.
|
|
33
|
+
*
|
|
34
|
+
* @param {string[]} properties
|
|
35
|
+
* @returns {void}
|
|
36
|
+
*/
|
|
16
37
|
__hideProperties(properties) {
|
|
17
38
|
Object.defineProperties(
|
|
18
39
|
this,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/Base/managers/AbstractManager.ts"],
|
|
4
4
|
"sourcesContent": ["import type { Base } from '../index.js';\n\n/**\n * AbstractManager class.\n */\nexport class AbstractManager {\n /**\n * Base instance.\n */\n __base: Base;\n\n /**\n * Get the base instance root element.\n */\n get __element() {\n return this.__base.$el;\n }\n\n /**\n * Get the base instance config.\n */\n get __config() {\n return this.__base.__config;\n }\n\n /**\n * Get the events manager.\n */\n get __eventsManager() {\n return this.__base.__events;\n }\n\n /**\n * Class constructor.\n */\n constructor(base: Base) {\n this.__base = base;\n this.__hideProperties(['__base']);\n }\n\n /**\n * Prevent a list of properties from being enumerable and writable.\n *\n * @param {string[]} properties\n * @returns {void}\n */\n __hideProperties(properties: string[]) {\n Object.defineProperties(\n this,\n Object.fromEntries(\n properties.map((property) => [\n property,\n {\n enumerable: false,\n writable: false,\n value: this[property],\n },\n ]),\n ),\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "AAKO,MAAM,gBAAgB;AAAA,EAI3B;AAAA,EAKA,IAAI,YAAY;AACd,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAKA,IAAI,WAAW;AACb,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAKA,IAAI,kBAAkB;AACpB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAKA,YAAY,MAAY;AACtB,SAAK,SAAS;AACd,SAAK,iBAAiB,CAAC,QAAQ,CAAC;AAAA,EAClC;AAAA,EAQA,iBAAiB,YAAsB;AACrC,WAAO;AAAA,MACL;AAAA,MACA,OAAO;AAAA,QACL,WAAW,IAAI,CAAC,aAAa;AAAA,UAC3B;AAAA,UACA;AAAA,YACE,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO,KAAK;AAAA,
|
|
5
|
+
"mappings": "AAKO,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAI3B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAY;AACd,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAW;AACb,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,kBAAkB;AACpB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAY;AACtB,SAAK,SAAS;AACd,SAAK,iBAAiB,CAAC,QAAQ,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,YAAsB;AACrC,WAAO;AAAA,MACL;AAAA,MACA,OAAO;AAAA,QACL,WAAW,IAAI,CAAC,aAAa;AAAA,UAC3B;AAAA,UACA;AAAA,YACE,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO,KAAK,QAAQ;AAAA,UACtB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -24,6 +24,7 @@ __export(ChildrenManager_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(ChildrenManager_exports);
|
|
25
25
|
var import_AbstractManager = require("./AbstractManager.cjs");
|
|
26
26
|
var import_utils = require("../utils.cjs");
|
|
27
|
+
var import_utils2 = require("../../utils/index.cjs");
|
|
27
28
|
function __getChild(that, el, ComponentClass, name) {
|
|
28
29
|
const asyncComponentPromise = that.__asyncComponentPromises.get(
|
|
29
30
|
ComponentClass
|
|
@@ -60,8 +61,8 @@ function __getChild(that, el, ComponentClass, name) {
|
|
|
60
61
|
}
|
|
61
62
|
function __triggerHookForAll(that, hook) {
|
|
62
63
|
(0, import_utils.addToQueue)(() => {
|
|
63
|
-
that.registeredNames
|
|
64
|
-
that[name]
|
|
64
|
+
for (const name of that.registeredNames) {
|
|
65
|
+
for (const instance of that[name]) {
|
|
65
66
|
if (instance instanceof Promise) {
|
|
66
67
|
instance.then((resolvedInstance) => {
|
|
67
68
|
(0, import_utils.addToQueue)(() => that.__triggerHook(hook, resolvedInstance, name));
|
|
@@ -69,29 +70,52 @@ function __triggerHookForAll(that, hook) {
|
|
|
69
70
|
} else {
|
|
70
71
|
(0, import_utils.addToQueue)(() => that.__triggerHook(hook, instance, name));
|
|
71
72
|
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
74
75
|
});
|
|
75
76
|
}
|
|
76
77
|
var ChildrenManager = class extends import_AbstractManager.AbstractManager {
|
|
78
|
+
/**
|
|
79
|
+
* Store async component promises to avoid calling them multiple times and
|
|
80
|
+
* waiting for them when they are already resolved.
|
|
81
|
+
*/
|
|
77
82
|
__asyncComponentPromises = /* @__PURE__ */ new WeakMap();
|
|
78
83
|
get registeredNames() {
|
|
79
|
-
return Object.keys(this).filter((key) => !
|
|
84
|
+
return Object.keys(this).filter((key) => !(0, import_utils2.startsWith)(key, "__"));
|
|
80
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Register instances of all children components.
|
|
88
|
+
*/
|
|
81
89
|
registerAll() {
|
|
82
|
-
Object.entries(this.__config.components)
|
|
83
|
-
|
|
84
|
-
);
|
|
90
|
+
for (const [name, component] of Object.entries(this.__config.components))
|
|
91
|
+
this.__register(name, component);
|
|
85
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Mount all child component instances.
|
|
95
|
+
*/
|
|
86
96
|
mountAll() {
|
|
87
97
|
__triggerHookForAll(this, "$mount");
|
|
88
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Update all child component instances.
|
|
101
|
+
*/
|
|
89
102
|
updateAll() {
|
|
90
103
|
__triggerHookForAll(this, "$update");
|
|
91
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Destroy all child component instances.
|
|
107
|
+
*/
|
|
92
108
|
destroyAll() {
|
|
93
109
|
__triggerHookForAll(this, "$destroy");
|
|
94
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Execute the given hook for the given instance.
|
|
113
|
+
*
|
|
114
|
+
* @param {'$mount'|'$update'|'$destroy'} hook The hook to trigger.
|
|
115
|
+
* @param {Base} instance The target instance.
|
|
116
|
+
* @param {string} name The name of the component.
|
|
117
|
+
* @private
|
|
118
|
+
*/
|
|
95
119
|
__triggerHook(hook, instance, name) {
|
|
96
120
|
if (hook === "$update" && !instance.$isMounted) {
|
|
97
121
|
hook = "$mount";
|
|
@@ -104,6 +128,15 @@ var ChildrenManager = class extends import_AbstractManager.AbstractManager {
|
|
|
104
128
|
}
|
|
105
129
|
instance[hook]();
|
|
106
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Register instance of a child component.
|
|
133
|
+
*
|
|
134
|
+
* @param {string} name
|
|
135
|
+
* The name of the child component.
|
|
136
|
+
* @param {BaseConstructor|BaseAsyncConstructor} component
|
|
137
|
+
* A Base class or a Promise for async components.
|
|
138
|
+
* @private
|
|
139
|
+
*/
|
|
107
140
|
__register(name, component) {
|
|
108
141
|
Object.defineProperty(this, name, {
|
|
109
142
|
enumerable: true,
|