@studiometa/js-toolkit 2.8.0 → 2.9.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.
Files changed (73) hide show
  1. package/Base/Base.cjs +325 -0
  2. package/Base/Base.cjs.map +7 -0
  3. package/Base/Base.d.ts +197 -0
  4. package/Base/Base.js +304 -0
  5. package/Base/Base.js.map +7 -0
  6. package/Base/index.cjs +2 -292
  7. package/Base/index.cjs.map +3 -3
  8. package/Base/index.d.ts +1 -193
  9. package/Base/index.js +1 -290
  10. package/Base/index.js.map +2 -2
  11. package/Base/managers/AbstractManager.d.ts +2 -2
  12. package/Base/managers/ChildrenManager.cjs +11 -7
  13. package/Base/managers/ChildrenManager.cjs.map +2 -2
  14. package/Base/managers/ChildrenManager.d.ts +1 -1
  15. package/Base/managers/ChildrenManager.js +12 -8
  16. package/Base/managers/ChildrenManager.js.map +2 -2
  17. package/Base/managers/index.cjs +0 -2
  18. package/Base/managers/index.cjs.map +2 -2
  19. package/Base/managers/index.d.ts +0 -1
  20. package/Base/managers/index.js +0 -2
  21. package/Base/managers/index.js.map +2 -2
  22. package/Base/utils.cjs +13 -0
  23. package/Base/utils.cjs.map +2 -2
  24. package/Base/utils.d.ts +4 -0
  25. package/Base/utils.js +14 -1
  26. package/Base/utils.js.map +2 -2
  27. package/decorators/withScrolledInView/withScrolledInView.cjs +45 -55
  28. package/decorators/withScrolledInView/withScrolledInView.cjs.map +2 -2
  29. package/decorators/withScrolledInView/withScrolledInView.d.ts +1 -6
  30. package/decorators/withScrolledInView/withScrolledInView.js +45 -55
  31. package/decorators/withScrolledInView/withScrolledInView.js.map +2 -2
  32. package/helpers/createApp.cjs +21 -20
  33. package/helpers/createApp.cjs.map +2 -2
  34. package/helpers/createApp.js +21 -20
  35. package/helpers/createApp.js.map +2 -2
  36. package/helpers/getInstanceFromElement.cjs +1 -1
  37. package/helpers/getInstanceFromElement.cjs.map +2 -2
  38. package/helpers/getInstanceFromElement.js +1 -1
  39. package/helpers/getInstanceFromElement.js.map +2 -2
  40. package/package.json +1 -1
  41. package/services/drag.cjs +10 -3
  42. package/services/drag.cjs.map +2 -2
  43. package/services/drag.js +10 -3
  44. package/services/drag.js.map +2 -2
  45. package/utils/Queue.cjs +4 -1
  46. package/utils/Queue.cjs.map +2 -2
  47. package/utils/Queue.d.ts +1 -1
  48. package/utils/Queue.js +4 -1
  49. package/utils/Queue.js.map +2 -2
  50. package/utils/SmartQueue.cjs +57 -0
  51. package/utils/SmartQueue.cjs.map +7 -0
  52. package/utils/SmartQueue.d.ts +25 -0
  53. package/utils/SmartQueue.js +29 -0
  54. package/utils/SmartQueue.js.map +7 -0
  55. package/utils/index.cjs +3 -0
  56. package/utils/index.cjs.map +2 -2
  57. package/utils/index.d.ts +2 -0
  58. package/utils/index.js +3 -0
  59. package/utils/index.js.map +2 -2
  60. package/utils/nextTick.cjs +2 -5
  61. package/utils/nextTick.cjs.map +2 -2
  62. package/utils/nextTick.js +2 -5
  63. package/utils/nextTick.js.map +2 -2
  64. package/utils/wait.cjs +31 -0
  65. package/utils/wait.cjs.map +7 -0
  66. package/utils/wait.d.ts +1 -0
  67. package/utils/wait.js +9 -0
  68. package/utils/wait.js.map +7 -0
  69. package/Base/managers/AsyncChildrenManager.cjs +0 -61
  70. package/Base/managers/AsyncChildrenManager.cjs.map +0 -7
  71. package/Base/managers/AsyncChildrenManager.d.ts +0 -18
  72. package/Base/managers/AsyncChildrenManager.js +0 -39
  73. package/Base/managers/AsyncChildrenManager.js.map +0 -7
package/Base/Base.cjs ADDED
@@ -0,0 +1,325 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var __publicField = (obj, key, value) => {
20
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
21
+ return value;
22
+ };
23
+
24
+ // packages/js-toolkit/Base/Base.ts
25
+ var Base_exports = {};
26
+ __export(Base_exports, {
27
+ Base: () => Base
28
+ });
29
+ module.exports = __toCommonJS(Base_exports);
30
+ var import_utils = require("./utils.cjs");
31
+ var import_managers = require("./managers/index.cjs");
32
+ var import_utils2 = require("../utils/index.cjs");
33
+ var id = 0;
34
+ function createAndTestManagers(instance) {
35
+ [
36
+ {
37
+ prop: "__options",
38
+ constructorName: "OptionsManager",
39
+ constructor: import_managers.OptionsManager
40
+ },
41
+ {
42
+ prop: "__services",
43
+ constructorName: "ServicesManager",
44
+ constructor: import_managers.ServicesManager
45
+ },
46
+ {
47
+ prop: "__events",
48
+ constructorName: "EventsManager",
49
+ constructor: import_managers.EventsManager
50
+ },
51
+ {
52
+ prop: "__refs",
53
+ constructorName: "RefsManager",
54
+ constructor: import_managers.RefsManager
55
+ },
56
+ {
57
+ prop: "__children",
58
+ constructorName: "ChildrenManager",
59
+ constructor: import_managers.ChildrenManager
60
+ }
61
+ ].forEach(({ prop, constructorName, constructor }) => {
62
+ instance[prop] = new instance.__managers[constructorName](instance);
63
+ if (import_utils2.isDev && !(instance[prop] instanceof constructor)) {
64
+ throw new Error(
65
+ `The \`$managers.${constructorName}\` must extend the \`${constructorName}\` class.`
66
+ );
67
+ }
68
+ });
69
+ }
70
+ var Base = class extends EventTarget {
71
+ $parent = null;
72
+ $id;
73
+ $el;
74
+ $isMounted = false;
75
+ __eventHandlers = /* @__PURE__ */ new Map();
76
+ get $root() {
77
+ if (!this.$parent) {
78
+ return this;
79
+ }
80
+ let parent = this.$parent;
81
+ let root = this.$parent;
82
+ while (parent) {
83
+ if (!parent.$parent) {
84
+ root = parent;
85
+ }
86
+ parent = parent.$parent;
87
+ }
88
+ return root;
89
+ }
90
+ get __config() {
91
+ let proto = Object.getPrototypeOf(this);
92
+ let { config } = proto.constructor;
93
+ while (proto.constructor.config && proto.constructor.$isBase) {
94
+ config = { ...proto.constructor.config, ...config };
95
+ if (proto.constructor.config.options) {
96
+ config.options = { ...proto.constructor.config.options, ...config.options };
97
+ }
98
+ if (proto.constructor.config.emits && config.emits) {
99
+ config.emits = [...proto.constructor.config.emits, ...config.emits];
100
+ }
101
+ proto = Object.getPrototypeOf(proto);
102
+ }
103
+ config.options = config.options ?? {};
104
+ config.refs = config.refs ?? [];
105
+ config.components = config.components ?? {};
106
+ return config;
107
+ }
108
+ __services;
109
+ get $services() {
110
+ return this.__services;
111
+ }
112
+ __refs;
113
+ get $refs() {
114
+ return this.__refs;
115
+ }
116
+ __options;
117
+ get $options() {
118
+ return this.__options;
119
+ }
120
+ __children;
121
+ get $children() {
122
+ return this.__children;
123
+ }
124
+ __events;
125
+ get $log() {
126
+ return this.__options.log ? window.console.log.bind(window, `[${this.__config.name}]`) : import_utils2.noop;
127
+ }
128
+ get $warn() {
129
+ return this.__options.log ? window.console.warn.bind(window, `[${this.__config.name}]`) : import_utils2.noop;
130
+ }
131
+ get __debug() {
132
+ return import_utils2.isDev && this.__options.debug ? window.console.log.bind(window, `[debug] [${this.$id}]`) : import_utils2.noop;
133
+ }
134
+ get __managers() {
135
+ return {
136
+ ChildrenManager: import_managers.ChildrenManager,
137
+ EventsManager: import_managers.EventsManager,
138
+ OptionsManager: import_managers.OptionsManager,
139
+ RefsManager: import_managers.RefsManager,
140
+ ServicesManager: import_managers.ServicesManager
141
+ };
142
+ }
143
+ __callMethod(method, ...args) {
144
+ if (import_utils2.isDev) {
145
+ this.__debug("callMethod", method, ...args);
146
+ }
147
+ this.$emit(method, ...args);
148
+ if (!(0, import_utils2.isFunction)(this[method])) {
149
+ return null;
150
+ }
151
+ if (import_utils2.isDev) {
152
+ this.__debug(method, this, ...args);
153
+ }
154
+ return this[method].call(this, ...args);
155
+ }
156
+ __hasEvent(event) {
157
+ const eventHandlers = this.__eventHandlers.get(event);
158
+ return eventHandlers && eventHandlers.size > 0;
159
+ }
160
+ constructor(element) {
161
+ super();
162
+ if (!element) {
163
+ if (import_utils2.isDev) {
164
+ throw new Error("The root element must be defined.");
165
+ }
166
+ return;
167
+ }
168
+ const { __config } = this;
169
+ if (__config.name === "Base") {
170
+ if (import_utils2.isDev) {
171
+ throw new Error("The `config.name` property is required.");
172
+ }
173
+ return;
174
+ }
175
+ this.$id = `${__config.name}-${id}`;
176
+ id += 1;
177
+ this.$el = element;
178
+ if (!this.$el.__base__) {
179
+ this.$el.__base__ = /* @__PURE__ */ new WeakMap();
180
+ }
181
+ this.$el.__base__.set(this.__ctor, this);
182
+ createAndTestManagers(this);
183
+ if (import_utils2.isDev) {
184
+ this.__debug("constructor", this);
185
+ }
186
+ }
187
+ $mount() {
188
+ if (this.$isMounted) {
189
+ return this;
190
+ }
191
+ this.$emit("before-mounted");
192
+ if (import_utils2.isDev) {
193
+ this.__debug("$mount");
194
+ }
195
+ [
196
+ () => this.$children.registerAll(),
197
+ () => this.$refs.registerAll(),
198
+ () => this.__events.bindRootElement(),
199
+ () => this.$services.enableAll(),
200
+ () => this.$children.mountAll(),
201
+ () => {
202
+ this.$isMounted = true;
203
+ },
204
+ () => this.__callMethod("mounted")
205
+ ].forEach(import_utils.addToQueue);
206
+ return this;
207
+ }
208
+ $update() {
209
+ if (import_utils2.isDev) {
210
+ this.__debug("$update");
211
+ }
212
+ [
213
+ () => this.$refs.unregisterAll(),
214
+ () => this.$services.disableAll(),
215
+ () => this.$children.registerAll(),
216
+ () => this.$refs.registerAll(),
217
+ () => this.$services.enableAll(),
218
+ () => this.$children.updateAll(),
219
+ () => this.__callMethod("updated")
220
+ ].forEach(import_utils.addToQueue);
221
+ return this;
222
+ }
223
+ $destroy() {
224
+ if (!this.$isMounted) {
225
+ return this;
226
+ }
227
+ if (import_utils2.isDev) {
228
+ this.__debug("$destroy");
229
+ }
230
+ [
231
+ () => {
232
+ this.$isMounted = false;
233
+ },
234
+ () => this.__events.unbindRootElement(),
235
+ () => this.$refs.unregisterAll(),
236
+ () => this.$services.disableAll(),
237
+ () => this.$children.destroyAll(),
238
+ () => this.__callMethod("destroyed")
239
+ ].forEach(import_utils.addToQueue);
240
+ return this;
241
+ }
242
+ $terminate() {
243
+ if (import_utils2.isDev) {
244
+ this.__debug("$terminate");
245
+ }
246
+ [
247
+ () => this.$destroy(),
248
+ () => this.__callMethod("terminated"),
249
+ () => this.$el.__base__.set(this.__ctor, "terminated")
250
+ ].forEach(import_utils.addToQueue);
251
+ }
252
+ __addEmits(event) {
253
+ const ctor = this.__ctor;
254
+ if ((0, import_utils2.isArray)(ctor.config.emits)) {
255
+ ctor.config.emits.push(event);
256
+ } else {
257
+ ctor.config.emits = [event];
258
+ }
259
+ }
260
+ __removeEmits(event) {
261
+ const ctor = this.__ctor;
262
+ const index = ctor.config.emits.indexOf(event);
263
+ ctor.config.emits.splice(index, 1);
264
+ }
265
+ get __ctor() {
266
+ return this.constructor;
267
+ }
268
+ $on(event, listener, options) {
269
+ if (import_utils2.isDev) {
270
+ this.__debug("$on", event, listener, options);
271
+ }
272
+ let set = this.__eventHandlers.get(event);
273
+ if (!set) {
274
+ set = /* @__PURE__ */ new Set();
275
+ this.__eventHandlers.set(event, set);
276
+ }
277
+ set.add(listener);
278
+ const target = (0, import_utils.getEventTarget)(this, event, this.__config);
279
+ target.addEventListener(event, listener, options);
280
+ return () => {
281
+ this.$off(event, listener, options);
282
+ };
283
+ }
284
+ $off(event, listener, options) {
285
+ if (import_utils2.isDev) {
286
+ this.__debug("$off", event, listener);
287
+ }
288
+ this.__eventHandlers.get(event).delete(listener);
289
+ const target = (0, import_utils.getEventTarget)(this, event, this.__config);
290
+ target.removeEventListener(event, listener, options);
291
+ }
292
+ $emit(event, ...args) {
293
+ if (import_utils2.isDev) {
294
+ this.__debug("$emit", event, args);
295
+ }
296
+ this.dispatchEvent(new CustomEvent(event, { detail: args }));
297
+ }
298
+ static $factory(nameOrSelector) {
299
+ if (import_utils2.isDev && !nameOrSelector) {
300
+ throw new Error(
301
+ "The $factory method requires a component\u2019s name or selector to be specified."
302
+ );
303
+ }
304
+ return (0, import_utils.getComponentElements)(nameOrSelector).map((el) => new this(el).$mount());
305
+ }
306
+ };
307
+ __publicField(Base, "$isBase", true);
308
+ __publicField(Base, "config", {
309
+ name: "Base",
310
+ emits: [
311
+ "before-mounted",
312
+ "mounted",
313
+ "updated",
314
+ "destroyed",
315
+ "terminated",
316
+ "ticked",
317
+ "scrolled",
318
+ "resized",
319
+ "moved",
320
+ "loaded",
321
+ "keyed"
322
+ ]
323
+ });
324
+ if (module.exports.default) module.exports = module.exports.default;
325
+ //# sourceMappingURL=Base.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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 * @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 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": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiE;AACjE,sBAMO;AACP,IAAAA,gBAAiD;AAEjD,IAAI,KAAK;AAMT,SAAS,sBAAsB,UAAsB;AACnD;AAAA,IACE;AAAA,MACE,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF,EAAE,QAAQ,CAAC,EAAE,MAAM,iBAAiB,YAAY,MAAM;AACpD,aAAS,QAAQ,IAAI,SAAS,WAAW,iBAAiB,QAAQ;AAClE,QAAI,uBAAS,EAAE,SAAS,iBAAiB,cAAc;AACrD,YAAM,IAAI;AAAA,QACR,mBAAmB,uCAAuC;AAAA,MAC5D;AAAA,IACF;AAAA,EACF,CAAC;AACH;AA+CO,IAAM,OAAN,cAAoD,YAAY;AAAA,EASrE,UAA+B;AAAA,EAK/B;AAAA,EAKA;AAAA,EAKA,aAAa;AAAA,EAKb,kBAAwE,oBAAI,IAAI;AAAA,EAKhF,IAAI,QAAc;AAChB,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,KAAK;AAClB,QAAI,OAAO,KAAK;AAEhB,WAAO,QAAQ;AACb,UAAI,CAAC,OAAO,SAAS;AACnB,eAAO;AAAA,MACT;AAEA,eAAS,OAAO;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAAA,EAKA,IAAI,WAAuB;AACzB,QAAI,QAAQ,OAAO,eAAe,IAAI;AACtC,QAAI,EAAE,OAAO,IAAI,MAAM;AAEvB,WAAO,MAAM,YAAY,UAAU,MAAM,YAAY,SAAS;AAC5D,eAAS,EAAE,GAAG,MAAM,YAAY,QAAQ,GAAG,OAAO;AAElD,UAAI,MAAM,YAAY,OAAO,SAAS;AACpC,eAAO,UAAU,EAAE,GAAG,MAAM,YAAY,OAAO,SAAS,GAAG,OAAO,QAAQ;AAAA,MAC5E;AAEA,UAAI,MAAM,YAAY,OAAO,SAAS,OAAO,OAAO;AAClD,eAAO,QAAQ,CAAC,GAAG,MAAM,YAAY,OAAO,OAAO,GAAG,OAAO,KAAK;AAAA,MACpE;AAEA,cAAQ,OAAO,eAAe,KAAK;AAAA,IACrC;AAEA,WAAO,UAAU,OAAO,WAAW,CAAC;AACpC,WAAO,OAAO,OAAO,QAAQ,CAAC;AAC9B,WAAO,aAAa,OAAO,cAAc,CAAC;AAE1C,WAAO;AAAA,EACT;AAAA,EAqBA;AAAA,EAEA,IAAI,YAA6B;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA;AAAA,EAEA,IAAI,QAA6C;AAC/C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA;AAAA,EAEA,IAAI,WAAyD;AAC3D,WAAO,KAAK;AAAA,EACd;AAAA,EAEA;AAAA,EAEA,IAAI,YAA6D;AAC/D,WAAO,KAAK;AAAA,EACd;AAAA,EAEA;AAAA,EAKA,IAAI,OAAqC;AACvC,WAAO,KAAK,UAAU,MAAM,OAAO,QAAQ,IAAI,KAAK,QAAQ,IAAI,KAAK,SAAS,OAAO,IAAI;AAAA,EAC3F;AAAA,EAKA,IAAI,QAAsC;AACxC,WAAO,KAAK,UAAU,MAAM,OAAO,QAAQ,KAAK,KAAK,QAAQ,IAAI,KAAK,SAAS,OAAO,IAAI;AAAA,EAC5F;AAAA,EAKA,IAAI,UAAwC;AAC1C,WAAO,uBAAS,KAAK,UAAU,QAC3B,OAAO,QAAQ,IAAI,KAAK,QAAQ,YAAY,KAAK,MAAM,IACvD;AAAA,EACN;AAAA,EAKA,IAAI,aAAuB;AACzB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAKA,aAAa,WAAmB,MAA0B;AACxD,QAAI,qBAAO;AACT,WAAK,QAAQ,cAAc,QAAQ,GAAG,IAAI;AAAA,IAC5C;AAEA,SAAK,MAAM,QAAQ,GAAG,IAAI;AAG1B,QAAI,KAAC,0BAAW,KAAK,OAAO,GAAG;AAC7B,aAAO;AAAA,IACT;AAEA,QAAI,qBAAO;AACT,WAAK,QAAQ,QAAQ,MAAM,GAAG,IAAI;AAAA,IACpC;AAEA,WAAO,KAAK,QAAQ,KAAK,MAAM,GAAG,IAAI;AAAA,EACxC;AAAA,EAQA,WAAW,OAAwB;AACjC,UAAM,gBAAgB,KAAK,gBAAgB,IAAI,KAAK;AACpD,WAAO,iBAAiB,cAAc,OAAO;AAAA,EAC/C;AAAA,EAOA,YAAY,SAAsB;AAChC,UAAM;AAEN,QAAI,CAAC,SAAS;AACZ,UAAI,qBAAO;AACT,cAAM,IAAI,MAAM,mCAAmC;AAAA,MACrD;AACA;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,IAAI;AAErB,QAAI,SAAS,SAAS,QAAQ;AAC5B,UAAI,qBAAO;AACT,cAAM,IAAI,MAAM,yCAAyC;AAAA,MAC3D;AACA;AAAA,IACF;AAEA,SAAK,MAAM,GAAG,SAAS,QAAQ;AAC/B,UAAM;AAEN,SAAK,MAAM;AAEX,QAAI,CAAC,KAAK,IAAI,UAAU;AACtB,WAAK,IAAI,WAAW,oBAAI,QAAQ;AAAA,IAClC;AAEA,SAAK,IAAI,SAAS,IAAI,KAAK,QAAQ,IAAI;AAEvC,0BAAsB,IAAI;AAE1B,QAAI,qBAAO;AACT,WAAK,QAAQ,eAAe,IAAI;AAAA,IAClC;AAAA,EACF;AAAA,EAKA,SAAe;AACb,QAAI,KAAK,YAAY;AACnB,aAAO;AAAA,IACT;AAEA,SAAK,MAAM,gBAAgB;AAE3B,QAAI,qBAAO;AACT,WAAK,QAAQ,QAAQ;AAAA,IACvB;AAEA;AAAA,MACE,MAAM,KAAK,UAAU,YAAY;AAAA,MACjC,MAAM,KAAK,MAAM,YAAY;AAAA,MAC7B,MAAM,KAAK,SAAS,gBAAgB;AAAA,MACpC,MAAM,KAAK,UAAU,UAAU;AAAA,MAC/B,MAAM,KAAK,UAAU,SAAS;AAAA,MAE9B,MAAM;AACJ,aAAK,aAAa;AAAA,MACpB;AAAA,MACA,MAAM,KAAK,aAAa,SAAS;AAAA,IACnC,EAAE,QAAQ,uBAAU;AAEpB,WAAO;AAAA,EACT;AAAA,EAKA,UAAgB;AACd,QAAI,qBAAO;AACT,WAAK,QAAQ,SAAS;AAAA,IACxB;AAEA;AAAA,MAEE,MAAM,KAAK,MAAM,cAAc;AAAA,MAC/B,MAAM,KAAK,UAAU,WAAW;AAAA,MAEhC,MAAM,KAAK,UAAU,YAAY;AAAA,MACjC,MAAM,KAAK,MAAM,YAAY;AAAA,MAC7B,MAAM,KAAK,UAAU,UAAU;AAAA,MAE/B,MAAM,KAAK,UAAU,UAAU;AAAA,MAC/B,MAAM,KAAK,aAAa,SAAS;AAAA,IACnC,EAAE,QAAQ,uBAAU;AAEpB,WAAO;AAAA,EACT;AAAA,EAKA,WAAiB;AACf,QAAI,CAAC,KAAK,YAAY;AACpB,aAAO;AAAA,IACT;AAEA,QAAI,qBAAO;AACT,WAAK,QAAQ,UAAU;AAAA,IACzB;AAEA;AAAA,MAEE,MAAM;AACJ,aAAK,aAAa;AAAA,MACpB;AAAA,MACA,MAAM,KAAK,SAAS,kBAAkB;AAAA,MACtC,MAAM,KAAK,MAAM,cAAc;AAAA,MAC/B,MAAM,KAAK,UAAU,WAAW;AAAA,MAChC,MAAM,KAAK,UAAU,WAAW;AAAA,MAChC,MAAM,KAAK,aAAa,WAAW;AAAA,IACrC,EAAE,QAAQ,uBAAU;AAEpB,WAAO;AAAA,EACT;AAAA,EAKA,aAAmB;AACjB,QAAI,qBAAO;AACT,WAAK,QAAQ,YAAY;AAAA,IAC3B;AAEA;AAAA,MAEE,MAAM,KAAK,SAAS;AAAA,MAEpB,MAAM,KAAK,aAAa,YAAY;AAAA,MAEpC,MAAM,KAAK,IAAI,SAAS,IAAI,KAAK,QAAQ,YAAY;AAAA,IACvD,EAAE,QAAQ,uBAAU;AAAA,EACtB;AAAA,EAQA,WAAW,OAAqB;AAC9B,UAAM,OAAO,KAAK;AAClB,YAAI,uBAAQ,KAAK,OAAO,KAAK,GAAG;AAC9B,WAAK,OAAO,MAAM,KAAK,KAAK;AAAA,IAC9B,OAAO;AACL,WAAK,OAAO,QAAQ,CAAC,KAAK;AAAA,IAC5B;AAAA,EACF;AAAA,EAQA,cAAc,OAAqB;AACjC,UAAM,OAAO,KAAK;AAClB,UAAM,QAAQ,KAAK,OAAO,MAAM,QAAQ,KAAK;AAC7C,SAAK,OAAO,MAAM,OAAO,OAAO,CAAC;AAAA,EACnC;AAAA,EAKA,IAAI,SAA0B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAcA,IACE,OACA,UACA,SACY;AACZ,QAAI,qBAAO;AACT,WAAK,QAAQ,OAAO,OAAO,UAAU,OAAO;AAAA,IAC9C;AAEA,QAAI,MAAM,KAAK,gBAAgB,IAAI,KAAK;AAExC,QAAI,CAAC,KAAK;AACR,YAAM,oBAAI,IAAI;AACd,WAAK,gBAAgB,IAAI,OAAO,GAAG;AAAA,IACrC;AAEA,QAAI,IAAI,QAAQ;AAEhB,UAAM,aAAS,6BAAe,MAAM,OAAO,KAAK,QAAQ;AACxD,WAAO,iBAAiB,OAAO,UAAU,OAAO;AAEhD,WAAO,MAAM;AACX,WAAK,KAAK,OAAO,UAAU,OAAO;AAAA,IACpC;AAAA,EACF;AAAA,EAaA,KACE,OACA,UACA,SACA;AACA,QAAI,qBAAO;AACT,WAAK,QAAQ,QAAQ,OAAO,QAAQ;AAAA,IACtC;AAEA,SAAK,gBAAgB,IAAI,KAAK,EAAE,OAAO,QAAQ;AAE/C,UAAM,aAAS,6BAAe,MAAM,OAAO,KAAK,QAAQ;AACxD,WAAO,oBAAoB,OAAO,UAAU,OAAO;AAAA,EACrD;AAAA,EASA,MAAM,UAAkB,MAAiB;AACvC,QAAI,qBAAO;AACT,WAAK,QAAQ,SAAS,OAAO,IAAI;AAAA,IACnC;AAEA,SAAK,cAAc,IAAI,YAAY,OAAO,EAAE,QAAQ,KAAK,CAAC,CAAC;AAAA,EAC7D;AAAA,EAKA,OAAO,SAAS,gBAAgC;AAC9C,QAAI,uBAAS,CAAC,gBAAgB;AAC5B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,eAAO,mCAAqB,cAAc,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,EAAE,OAAO,CAAC;AAAA,EAC/E;AACF;AAzcE,cAJW,MAIK,WAAU;AA6E1B,cAjFW,MAiFJ,UAAqB;AAAA,EAC1B,MAAM;AAAA,EACN,OAAO;AAAA,IAEL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": ["import_utils"]
7
+ }
package/Base/Base.d.ts ADDED
@@ -0,0 +1,197 @@
1
+ import { ChildrenManager, RefsManager, ServicesManager, EventsManager, OptionsManager } from './managers/index.js';
2
+ export type BaseEl = HTMLElement & {
3
+ __base__?: WeakMap<BaseConstructor, Base | 'terminated'>;
4
+ };
5
+ export type BaseConstructor<T extends Base = Base> = {
6
+ new (...args: any[]): T;
7
+ prototype: Base;
8
+ } & Pick<typeof Base, keyof typeof Base>;
9
+ export type BaseAsyncConstructor<T extends Base = Base> = (Base: any) => Promise<BaseConstructor<T> | {
10
+ default: BaseConstructor<T>;
11
+ }>;
12
+ export type BaseOptions = {
13
+ [name: string]: unknown;
14
+ };
15
+ export type BaseRefs = {
16
+ [name: string]: HTMLElement | HTMLElement[];
17
+ };
18
+ export type BaseChildren = {
19
+ [nameOrSelector: string]: Base[] | Promise<Base>[];
20
+ };
21
+ export type BaseConfigComponents = {
22
+ [nameOrSelector: string]: BaseConstructor | BaseAsyncConstructor;
23
+ };
24
+ export type BaseConfig = {
25
+ name: string;
26
+ debug?: boolean;
27
+ log?: boolean;
28
+ refs?: string[];
29
+ emits?: string[];
30
+ components?: BaseConfigComponents;
31
+ options?: import('./managers/OptionsManager').OptionsSchema;
32
+ };
33
+ export type BaseProps = {
34
+ $el?: HTMLElement;
35
+ $options?: BaseOptions;
36
+ $refs?: BaseRefs;
37
+ $children?: BaseChildren;
38
+ $parent?: Base;
39
+ };
40
+ export type Managers = {
41
+ ChildrenManager: typeof ChildrenManager;
42
+ EventsManager: typeof EventsManager;
43
+ OptionsManager: typeof OptionsManager;
44
+ RefsManager: typeof RefsManager;
45
+ ServicesManager: typeof ServicesManager;
46
+ };
47
+ /**
48
+ * Base class.
49
+ */
50
+ export declare class Base<T extends BaseProps = BaseProps> extends EventTarget {
51
+ /**
52
+ * This is a Base instance.
53
+ */
54
+ static readonly $isBase: true;
55
+ /**
56
+ * The instance parent.
57
+ */
58
+ $parent: T['$parent'] & Base;
59
+ /**
60
+ * The instance id.
61
+ */
62
+ $id: string;
63
+ /**
64
+ * The root element.
65
+ */
66
+ $el: T['$el'] & BaseEl;
67
+ /**
68
+ * The state of the component.
69
+ */
70
+ $isMounted: boolean;
71
+ /**
72
+ * Store the event handlers.
73
+ */
74
+ __eventHandlers: Map<string, Set<EventListenerOrEventListenerObject>>;
75
+ /**
76
+ * Get the root instance of the app.
77
+ */
78
+ get $root(): Base;
79
+ /**
80
+ * Merge configuration with the parents' configurations.
81
+ */
82
+ get __config(): BaseConfig;
83
+ static config: BaseConfig;
84
+ __services: ServicesManager;
85
+ get $services(): ServicesManager;
86
+ __refs: RefsManager & T['$refs'] & BaseRefs;
87
+ get $refs(): RefsManager & T['$refs'] & BaseRefs;
88
+ __options: OptionsManager & T['$options'] & BaseOptions;
89
+ get $options(): OptionsManager & T['$options'] & BaseOptions;
90
+ __children: ChildrenManager & T['$children'] & BaseChildren;
91
+ get $children(): ChildrenManager & T['$children'] & BaseChildren;
92
+ __events: EventsManager;
93
+ /**
94
+ * Small helper to log stuff.
95
+ */
96
+ get $log(): (...args: unknown[]) => void;
97
+ /**
98
+ * Small helper to make warning easier.
99
+ */
100
+ get $warn(): (...args: unknown[]) => void;
101
+ /**
102
+ * Small helper to debug information.
103
+ */
104
+ get __debug(): (...args: unknown[]) => void;
105
+ /**
106
+ * Get manager constructors.
107
+ */
108
+ get __managers(): Managers;
109
+ /**
110
+ * Call an instance method and emit corresponding events.
111
+ */
112
+ __callMethod(method: string, ...args: unknown[]): unknown;
113
+ /**
114
+ * Test if the given event has been bound to the instance.
115
+ *
116
+ * @param {string} event The event's name.
117
+ * @returns {boolean} Wether the given event has been bound or not.
118
+ */
119
+ __hasEvent(event: string): boolean;
120
+ /**
121
+ * Class constructor where all the magic takes place.
122
+ *
123
+ * @param {HTMLElement} element The component's root element dd.
124
+ */
125
+ constructor(element: HTMLElement);
126
+ /**
127
+ * Trigger the `mounted` callback.
128
+ */
129
+ $mount(): this;
130
+ /**
131
+ * Update the instance children.
132
+ */
133
+ $update(): this;
134
+ /**
135
+ * Trigger the `destroyed` callback.
136
+ */
137
+ $destroy(): this;
138
+ /**
139
+ * Terminate a child instance when it is not needed anymore.
140
+ */
141
+ $terminate(): void;
142
+ /**
143
+ * Add an emitted event.
144
+ *
145
+ * @param {string} event The event name.
146
+ * @returns {void}
147
+ */
148
+ __addEmits(event: string): void;
149
+ /**
150
+ * Remove an emitted event.
151
+ *
152
+ * @param {string} event The event name.
153
+ * @returns {void}
154
+ */
155
+ __removeEmits(event: string): void;
156
+ /**
157
+ * Get the instance constructor.
158
+ */
159
+ get __ctor(): BaseConstructor;
160
+ /**
161
+ * Bind a listener function to an event.
162
+ *
163
+ * @param {string} event
164
+ * Name of the event.
165
+ * @param {EventListenerOrEventListenerObject} listener
166
+ * Function to be called.
167
+ * @param {boolean|AddEventListenerOptions} [options]
168
+ * Options for the `removeEventListener` method.
169
+ * @returns {() => void}
170
+ * A function to unbind the listener.
171
+ */
172
+ $on(event: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): () => void;
173
+ /**
174
+ * Unbind a listener function from an event.
175
+ *
176
+ * @param {string} event
177
+ * Name of the event.
178
+ * @param {EventListenerOrEventListenerObject} listener
179
+ * Function to be removed.
180
+ * @param {boolean|EventListenerOptions} [options]
181
+ * Options for the `removeEventListener` method.
182
+ * @returns {void}
183
+ */
184
+ $off(event: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
185
+ /**
186
+ * Emits an event.
187
+ *
188
+ * @param {string} event Name of the event.
189
+ * @param {any[]} args The arguments to apply to the functions bound to this event.
190
+ * @returns {void}
191
+ */
192
+ $emit(event: string, ...args: unknown[]): void;
193
+ /**
194
+ * Factory method to generate multiple instance of the class.
195
+ */
196
+ static $factory(nameOrSelector: string): Base[];
197
+ }