@studiometa/js-toolkit 2.11.2 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/Base/Base.cjs +155 -60
  2. package/Base/Base.cjs.map +2 -2
  3. package/Base/Base.js +138 -38
  4. package/Base/Base.js.map +2 -2
  5. package/Base/managers/AbstractManager.cjs +21 -0
  6. package/Base/managers/AbstractManager.cjs.map +1 -1
  7. package/Base/managers/AbstractManager.js +21 -0
  8. package/Base/managers/AbstractManager.js.map +1 -1
  9. package/Base/managers/ChildrenManager.cjs +41 -8
  10. package/Base/managers/ChildrenManager.cjs.map +3 -3
  11. package/Base/managers/ChildrenManager.js +41 -8
  12. package/Base/managers/ChildrenManager.js.map +2 -2
  13. package/Base/managers/EventsManager.cjs +92 -7
  14. package/Base/managers/EventsManager.cjs.map +2 -2
  15. package/Base/managers/EventsManager.js +88 -7
  16. package/Base/managers/EventsManager.js.map +2 -2
  17. package/Base/managers/OptionsManager.cjs +29 -2
  18. package/Base/managers/OptionsManager.cjs.map +2 -2
  19. package/Base/managers/OptionsManager.js +25 -2
  20. package/Base/managers/OptionsManager.js.map +2 -2
  21. package/Base/managers/RefsManager.cjs +19 -5
  22. package/Base/managers/RefsManager.cjs.map +2 -2
  23. package/Base/managers/RefsManager.js +27 -6
  24. package/Base/managers/RefsManager.js.map +2 -2
  25. package/Base/managers/ResponsiveOptionsManager.cjs +22 -6
  26. package/Base/managers/ResponsiveOptionsManager.cjs.map +2 -2
  27. package/Base/managers/ResponsiveOptionsManager.js +22 -6
  28. package/Base/managers/ResponsiveOptionsManager.js.map +2 -2
  29. package/Base/managers/ServicesManager.cjs +54 -4
  30. package/Base/managers/ServicesManager.cjs.map +2 -2
  31. package/Base/managers/ServicesManager.js +54 -4
  32. package/Base/managers/ServicesManager.js.map +2 -2
  33. package/Base/utils.cjs +4 -0
  34. package/Base/utils.cjs.map +1 -1
  35. package/Base/utils.js +4 -0
  36. package/Base/utils.js.map +1 -1
  37. package/decorators/withBreakpointManager.cjs +14 -4
  38. package/decorators/withBreakpointManager.cjs.map +2 -2
  39. package/decorators/withBreakpointManager.js +14 -4
  40. package/decorators/withBreakpointManager.js.map +2 -2
  41. package/decorators/withBreakpointObserver.cjs +11 -1
  42. package/decorators/withBreakpointObserver.cjs.map +2 -2
  43. package/decorators/withBreakpointObserver.js +12 -2
  44. package/decorators/withBreakpointObserver.js.map +2 -2
  45. package/decorators/withDrag.cjs +6 -0
  46. package/decorators/withDrag.cjs.map +1 -1
  47. package/decorators/withDrag.js +6 -0
  48. package/decorators/withDrag.js.map +1 -1
  49. package/decorators/withExtraConfig.cjs +7 -0
  50. package/decorators/withExtraConfig.cjs.map +1 -1
  51. package/decorators/withExtraConfig.js +3 -0
  52. package/decorators/withExtraConfig.js.map +1 -1
  53. package/decorators/withFreezedOptions.cjs +8 -0
  54. package/decorators/withFreezedOptions.cjs.map +1 -1
  55. package/decorators/withFreezedOptions.js +8 -0
  56. package/decorators/withFreezedOptions.js.map +1 -1
  57. package/decorators/withIntersectionObserver.cjs +9 -0
  58. package/decorators/withIntersectionObserver.cjs.map +1 -1
  59. package/decorators/withIntersectionObserver.js +9 -0
  60. package/decorators/withIntersectionObserver.js.map +1 -1
  61. package/decorators/withMountOnMediaQuery.cjs +16 -0
  62. package/decorators/withMountOnMediaQuery.cjs.map +1 -1
  63. package/decorators/withMountOnMediaQuery.js +16 -0
  64. package/decorators/withMountOnMediaQuery.js.map +1 -1
  65. package/decorators/withMountWhenInView.cjs +21 -0
  66. package/decorators/withMountWhenInView.cjs.map +1 -1
  67. package/decorators/withMountWhenInView.js +21 -0
  68. package/decorators/withMountWhenInView.js.map +1 -1
  69. package/decorators/withRelativePointer.cjs +6 -0
  70. package/decorators/withRelativePointer.cjs.map +1 -1
  71. package/decorators/withRelativePointer.js +6 -0
  72. package/decorators/withRelativePointer.js.map +1 -1
  73. package/decorators/withResponsiveOptions.cjs +3 -0
  74. package/decorators/withResponsiveOptions.cjs.map +1 -1
  75. package/decorators/withResponsiveOptions.js +3 -0
  76. package/decorators/withResponsiveOptions.js.map +1 -1
  77. package/decorators/withScrolledInView/utils.cjs +6 -6
  78. package/decorators/withScrolledInView/utils.cjs.map +2 -2
  79. package/decorators/withScrolledInView/utils.js +7 -7
  80. package/decorators/withScrolledInView/utils.js.map +2 -2
  81. package/decorators/withScrolledInView/withScrolledInView.cjs +33 -0
  82. package/decorators/withScrolledInView/withScrolledInView.cjs.map +1 -1
  83. package/decorators/withScrolledInView/withScrolledInView.js +33 -0
  84. package/decorators/withScrolledInView/withScrolledInView.js.map +1 -1
  85. package/decorators/withVue2.cjs +3 -0
  86. package/decorators/withVue2.cjs.map +1 -1
  87. package/decorators/withVue2.js +3 -0
  88. package/decorators/withVue2.js.map +1 -1
  89. package/helpers/createApp.cjs +2 -2
  90. package/helpers/createApp.cjs.map +2 -2
  91. package/helpers/createApp.js +2 -2
  92. package/helpers/createApp.js.map +2 -2
  93. package/helpers/getClosestParent.cjs +4 -0
  94. package/helpers/getClosestParent.cjs.map +1 -1
  95. package/helpers/getDirectChildren.cjs.map +1 -1
  96. package/helpers/getDirectChildren.js.map +1 -1
  97. package/helpers/importOnInteraction.cjs +4 -4
  98. package/helpers/importOnInteraction.cjs.map +2 -2
  99. package/helpers/importOnInteraction.js +4 -4
  100. package/helpers/importOnInteraction.js.map +2 -2
  101. package/helpers/importWhenPrefersMotion.cjs +4 -0
  102. package/helpers/importWhenPrefersMotion.cjs.map +1 -1
  103. package/helpers/importWhenVisible.cjs +2 -1
  104. package/helpers/importWhenVisible.cjs.map +2 -2
  105. package/helpers/importWhenVisible.js +2 -1
  106. package/helpers/importWhenVisible.js.map +2 -2
  107. package/helpers/index.cjs +4 -0
  108. package/helpers/index.cjs.map +1 -1
  109. package/package.json +3 -3
  110. package/services/drag.cjs +12 -8
  111. package/services/drag.cjs.map +2 -2
  112. package/services/drag.js +8 -8
  113. package/services/drag.js.map +2 -2
  114. package/services/index.cjs +4 -0
  115. package/services/index.cjs.map +1 -1
  116. package/services/key.cjs +6 -2
  117. package/services/key.cjs.map +2 -2
  118. package/services/key.js +2 -2
  119. package/services/key.js.map +2 -2
  120. package/services/load.cjs +3 -0
  121. package/services/load.cjs.map +1 -1
  122. package/services/load.js +3 -0
  123. package/services/load.js.map +1 -1
  124. package/services/pointer.cjs +4 -4
  125. package/services/pointer.cjs.map +2 -2
  126. package/services/pointer.js +4 -4
  127. package/services/pointer.js.map +2 -2
  128. package/services/raf.cjs +2 -2
  129. package/services/raf.cjs.map +2 -2
  130. package/services/raf.js +2 -2
  131. package/services/raf.js.map +2 -2
  132. package/services/resize.cjs +4 -0
  133. package/services/resize.cjs.map +1 -1
  134. package/services/scroll.cjs +4 -0
  135. package/services/scroll.cjs.map +1 -1
  136. package/services/service.cjs +2 -2
  137. package/services/service.cjs.map +2 -2
  138. package/services/service.js +2 -2
  139. package/services/service.js.map +2 -2
  140. package/utils/Queue.cjs +30 -0
  141. package/utils/Queue.cjs.map +1 -1
  142. package/utils/Queue.js +30 -0
  143. package/utils/Queue.js.map +1 -1
  144. package/utils/SmartQueue.cjs +16 -0
  145. package/utils/SmartQueue.cjs.map +1 -1
  146. package/utils/SmartQueue.js +12 -0
  147. package/utils/SmartQueue.js.map +1 -1
  148. package/utils/collide/collidePointRect.cjs +4 -1
  149. package/utils/collide/collidePointRect.cjs.map +1 -1
  150. package/utils/collide/collidePointRect.js +4 -1
  151. package/utils/collide/collidePointRect.js.map +1 -1
  152. package/utils/collide/collideRectRect.cjs +4 -1
  153. package/utils/collide/collideRectRect.cjs.map +1 -1
  154. package/utils/collide/collideRectRect.js +4 -1
  155. package/utils/collide/collideRectRect.js.map +1 -1
  156. package/utils/collide/index.cjs +4 -0
  157. package/utils/collide/index.cjs.map +1 -1
  158. package/utils/css/animate.cjs +21 -12
  159. package/utils/css/animate.cjs.map +2 -2
  160. package/utils/css/animate.js +17 -12
  161. package/utils/css/animate.js.map +2 -2
  162. package/utils/css/classes.cjs +2 -3
  163. package/utils/css/classes.cjs.map +2 -2
  164. package/utils/css/classes.js +2 -3
  165. package/utils/css/classes.js.map +2 -2
  166. package/utils/css/index.cjs +4 -0
  167. package/utils/css/index.cjs.map +1 -1
  168. package/utils/css/matrix.cjs.map +1 -1
  169. package/utils/css/matrix.js.map +1 -1
  170. package/utils/css/styles.cjs +2 -2
  171. package/utils/css/styles.cjs.map +2 -2
  172. package/utils/css/styles.js +2 -2
  173. package/utils/css/styles.js.map +2 -2
  174. package/utils/css/transform.cjs.map +1 -1
  175. package/utils/css/transform.js.map +1 -1
  176. package/utils/css/transition.cjs +19 -0
  177. package/utils/css/transition.cjs.map +1 -1
  178. package/utils/css/transition.js +15 -0
  179. package/utils/css/transition.js.map +1 -1
  180. package/utils/focusTrap.cjs +4 -0
  181. package/utils/focusTrap.cjs.map +1 -1
  182. package/utils/focusTrap.js.map +1 -1
  183. package/utils/history.cjs +6 -5
  184. package/utils/history.cjs.map +2 -2
  185. package/utils/history.js +6 -5
  186. package/utils/history.js.map +2 -2
  187. package/utils/index.cjs +4 -0
  188. package/utils/index.cjs.map +1 -1
  189. package/utils/math/clamp01.cjs +4 -0
  190. package/utils/math/clamp01.cjs.map +1 -1
  191. package/utils/math/index.cjs +4 -0
  192. package/utils/math/index.cjs.map +1 -1
  193. package/utils/math/inertiaFinalValue.cjs +4 -0
  194. package/utils/math/inertiaFinalValue.cjs.map +1 -1
  195. package/utils/object/autoBind.cjs +11 -5
  196. package/utils/object/autoBind.cjs.map +2 -2
  197. package/utils/object/autoBind.js +7 -5
  198. package/utils/object/autoBind.js.map +2 -2
  199. package/utils/object/index.cjs +4 -0
  200. package/utils/object/index.cjs.map +1 -1
  201. package/utils/scheduler.cjs +4 -4
  202. package/utils/scheduler.cjs.map +2 -2
  203. package/utils/scheduler.js +4 -4
  204. package/utils/scheduler.js.map +2 -2
  205. package/utils/scrollTo.cjs +4 -0
  206. package/utils/scrollTo.cjs.map +1 -1
  207. package/utils/string/endsWith.cjs +35 -0
  208. package/utils/string/endsWith.cjs.map +7 -0
  209. package/utils/string/endsWith.d.ts +8 -0
  210. package/utils/string/endsWith.js +13 -0
  211. package/utils/string/endsWith.js.map +7 -0
  212. package/utils/string/index.cjs +7 -0
  213. package/utils/string/index.cjs.map +2 -2
  214. package/utils/string/index.d.ts +2 -0
  215. package/utils/string/index.js +2 -0
  216. package/utils/string/index.js.map +2 -2
  217. package/utils/string/startsWith.cjs +35 -0
  218. package/utils/string/startsWith.cjs.map +7 -0
  219. package/utils/string/startsWith.d.ts +8 -0
  220. package/utils/string/startsWith.js +13 -0
  221. package/utils/string/startsWith.js.map +7 -0
  222. package/utils/string/withLeadingCharacters.cjs +4 -0
  223. package/utils/string/withLeadingCharacters.cjs.map +1 -1
  224. package/utils/string/withLeadingCharacters.js.map +1 -1
  225. package/utils/string/withLeadingSlash.cjs +4 -0
  226. package/utils/string/withLeadingSlash.cjs.map +1 -1
  227. package/utils/string/withTrailingCharacters.cjs +4 -0
  228. package/utils/string/withTrailingCharacters.cjs.map +1 -1
  229. package/utils/string/withTrailingCharacters.js.map +1 -1
  230. package/utils/string/withTrailingSlash.cjs +4 -0
  231. package/utils/string/withTrailingSlash.cjs.map +1 -1
  232. package/utils/string/withoutLeadingCharacters.cjs.map +1 -1
  233. package/utils/string/withoutLeadingCharacters.js.map +1 -1
  234. package/utils/string/withoutLeadingCharactersRecursive.cjs +4 -0
  235. package/utils/string/withoutLeadingCharactersRecursive.cjs.map +1 -1
  236. package/utils/string/withoutLeadingCharactersRecursive.js.map +1 -1
  237. package/utils/string/withoutLeadingSlash.cjs +4 -0
  238. package/utils/string/withoutLeadingSlash.cjs.map +1 -1
  239. package/utils/string/withoutTrailingCharacters.cjs.map +1 -1
  240. package/utils/string/withoutTrailingCharacters.js.map +1 -1
  241. package/utils/string/withoutTrailingCharactersRecursive.cjs +4 -0
  242. package/utils/string/withoutTrailingCharactersRecursive.cjs.map +1 -1
  243. package/utils/string/withoutTrailingCharactersRecursive.js.map +1 -1
  244. package/utils/string/withoutTrailingSlash.cjs +4 -0
  245. package/utils/string/withoutTrailingSlash.cjs.map +1 -1
  246. package/utils/tween.cjs +4 -0
  247. package/utils/tween.cjs.map +1 -1
  248. package/utils/tween.js.map +1 -1
package/Base/Base.cjs CHANGED
@@ -2,7 +2,6 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
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
5
  var __export = (target, all) => {
7
6
  for (var name in all)
8
7
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -16,10 +15,6 @@ var __copyProps = (to, from, except, desc) => {
16
15
  return to;
17
16
  };
18
17
  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
18
 
24
19
  // packages/js-toolkit/Base/Base.ts
25
20
  var Base_exports = {};
@@ -32,7 +27,7 @@ var import_managers = require("./managers/index.cjs");
32
27
  var import_utils2 = require("../utils/index.cjs");
33
28
  var id = 0;
34
29
  function createAndTestManagers(instance) {
35
- [
30
+ for (const { prop, constructorName, constructor } of [
36
31
  {
37
32
  prop: "__options",
38
33
  constructorName: "OptionsManager",
@@ -58,21 +53,43 @@ function createAndTestManagers(instance) {
58
53
  constructorName: "ChildrenManager",
59
54
  constructor: import_managers.ChildrenManager
60
55
  }
61
- ].forEach(({ prop, constructorName, constructor }) => {
56
+ ]) {
62
57
  instance[prop] = new instance.__managers[constructorName](instance);
63
58
  if (import_utils2.isDev && !(instance[prop] instanceof constructor)) {
64
59
  throw new Error(
65
60
  `The \`$managers.${constructorName}\` must extend the \`${constructorName}\` class.`
66
61
  );
67
62
  }
68
- });
63
+ }
69
64
  }
70
65
  var Base = class extends EventTarget {
66
+ /**
67
+ * This is a Base instance.
68
+ */
69
+ static $isBase = true;
70
+ /**
71
+ * The instance parent.
72
+ */
71
73
  $parent = null;
74
+ /**
75
+ * The instance id.
76
+ */
72
77
  $id;
78
+ /**
79
+ * The root element.
80
+ */
73
81
  $el;
82
+ /**
83
+ * The state of the component.
84
+ */
74
85
  $isMounted = false;
86
+ /**
87
+ * Store the event handlers.
88
+ */
75
89
  __eventHandlers = /* @__PURE__ */ new Map();
90
+ /**
91
+ * Get the root instance of the app.
92
+ */
76
93
  get $root() {
77
94
  if (!this.$parent) {
78
95
  return this;
@@ -87,6 +104,9 @@ var Base = class extends EventTarget {
87
104
  }
88
105
  return root;
89
106
  }
107
+ /**
108
+ * Merge configuration with the parents' configurations.
109
+ */
90
110
  get __config() {
91
111
  let proto = Object.getPrototypeOf(this);
92
112
  let { config } = proto.constructor;
@@ -105,6 +125,24 @@ var Base = class extends EventTarget {
105
125
  config.components = config.components ?? {};
106
126
  return config;
107
127
  }
128
+ static config = {
129
+ name: "Base",
130
+ emits: [
131
+ // hook events
132
+ "before-mounted",
133
+ "mounted",
134
+ "updated",
135
+ "destroyed",
136
+ "terminated",
137
+ // default services' events
138
+ "ticked",
139
+ "scrolled",
140
+ "resized",
141
+ "moved",
142
+ "loaded",
143
+ "keyed"
144
+ ]
145
+ };
108
146
  __services;
109
147
  get $services() {
110
148
  return this.__services;
@@ -122,15 +160,27 @@ var Base = class extends EventTarget {
122
160
  return this.__children;
123
161
  }
124
162
  __events;
163
+ /**
164
+ * Small helper to log stuff.
165
+ */
125
166
  get $log() {
126
167
  return this.__options.log ? window.console.log.bind(window, `[${this.__config.name}]`) : import_utils2.noop;
127
168
  }
169
+ /**
170
+ * Small helper to make warning easier.
171
+ */
128
172
  get $warn() {
129
173
  return this.__options.log ? window.console.warn.bind(window, `[${this.__config.name}]`) : import_utils2.noop;
130
174
  }
175
+ /**
176
+ * Small helper to debug information.
177
+ */
131
178
  get __debug() {
132
179
  return import_utils2.isDev && this.__options.debug ? window.console.log.bind(window, `[debug] [${this.$id}]`) : import_utils2.noop;
133
180
  }
181
+ /**
182
+ * Get manager constructors.
183
+ */
134
184
  get __managers() {
135
185
  return {
136
186
  ChildrenManager: import_managers.ChildrenManager,
@@ -140,6 +190,9 @@ var Base = class extends EventTarget {
140
190
  ServicesManager: import_managers.ServicesManager
141
191
  };
142
192
  }
193
+ /**
194
+ * Call an instance method and emit corresponding events.
195
+ */
143
196
  __callMethod(method, ...args) {
144
197
  if (import_utils2.isDev) {
145
198
  this.__debug("callMethod", method, ...args);
@@ -153,10 +206,21 @@ var Base = class extends EventTarget {
153
206
  }
154
207
  return this[method].call(this, ...args);
155
208
  }
209
+ /**
210
+ * Test if the given event has been bound to the instance.
211
+ *
212
+ * @param {string} event The event's name.
213
+ * @returns {boolean} Wether the given event has been bound or not.
214
+ */
156
215
  __hasEvent(event) {
157
216
  const eventHandlers = this.__eventHandlers.get(event);
158
217
  return eventHandlers && eventHandlers.size > 0;
159
218
  }
219
+ /**
220
+ * Class constructor where all the magic takes place.
221
+ *
222
+ * @param {HTMLElement} element The component's root element dd.
223
+ */
160
224
  constructor(element) {
161
225
  super();
162
226
  if (!element) {
@@ -184,6 +248,9 @@ var Base = class extends EventTarget {
184
248
  this.__debug("constructor", this);
185
249
  }
186
250
  }
251
+ /**
252
+ * Trigger the `mounted` callback.
253
+ */
187
254
  $mount() {
188
255
  if (this.$isMounted) {
189
256
  return this;
@@ -192,34 +259,34 @@ var Base = class extends EventTarget {
192
259
  if (import_utils2.isDev) {
193
260
  this.__debug("$mount");
194
261
  }
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);
262
+ (0, import_utils.addToQueue)(() => this.$children.registerAll());
263
+ (0, import_utils.addToQueue)(() => this.$refs.registerAll());
264
+ (0, import_utils.addToQueue)(() => this.__events.bindRootElement());
265
+ (0, import_utils.addToQueue)(() => this.$services.enableAll());
266
+ (0, import_utils.addToQueue)(() => this.$children.mountAll());
267
+ (0, import_utils.addToQueue)(() => this.$isMounted = true);
268
+ (0, import_utils.addToQueue)(() => this.__callMethod("mounted"));
206
269
  return this;
207
270
  }
271
+ /**
272
+ * Update the instance children.
273
+ */
208
274
  $update() {
209
275
  if (import_utils2.isDev) {
210
276
  this.__debug("$update");
211
277
  }
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);
278
+ (0, import_utils.addToQueue)(() => this.$refs.unregisterAll());
279
+ (0, import_utils.addToQueue)(() => this.$services.disableAll());
280
+ (0, import_utils.addToQueue)(() => this.$children.registerAll());
281
+ (0, import_utils.addToQueue)(() => this.$refs.registerAll());
282
+ (0, import_utils.addToQueue)(() => this.$services.enableAll());
283
+ (0, import_utils.addToQueue)(() => this.$children.updateAll());
284
+ (0, import_utils.addToQueue)(() => this.__callMethod("updated"));
221
285
  return this;
222
286
  }
287
+ /**
288
+ * Trigger the `destroyed` callback.
289
+ */
223
290
  $destroy() {
224
291
  if (!this.$isMounted) {
225
292
  return this;
@@ -227,28 +294,31 @@ var Base = class extends EventTarget {
227
294
  if (import_utils2.isDev) {
228
295
  this.__debug("$destroy");
229
296
  }
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);
297
+ (0, import_utils.addToQueue)(() => this.$isMounted = false);
298
+ (0, import_utils.addToQueue)(() => this.__events.unbindRootElement());
299
+ (0, import_utils.addToQueue)(() => this.$refs.unregisterAll());
300
+ (0, import_utils.addToQueue)(() => this.$services.disableAll());
301
+ (0, import_utils.addToQueue)(() => this.$children.destroyAll());
302
+ (0, import_utils.addToQueue)(() => this.__callMethod("destroyed"));
240
303
  return this;
241
304
  }
305
+ /**
306
+ * Terminate a child instance when it is not needed anymore.
307
+ */
242
308
  $terminate() {
243
309
  if (import_utils2.isDev) {
244
310
  this.__debug("$terminate");
245
311
  }
246
- [
247
- () => this.$destroy(),
248
- () => this.__callMethod("terminated"),
249
- () => this.$el.__base__.set(this.__ctor, "terminated")
250
- ].forEach(import_utils.addToQueue);
312
+ (0, import_utils.addToQueue)(() => this.$destroy());
313
+ (0, import_utils.addToQueue)(() => this.__callMethod("terminated"));
314
+ (0, import_utils.addToQueue)(() => this.$el.__base__.set(this.__ctor, "terminated"));
251
315
  }
316
+ /**
317
+ * Add an emitted event.
318
+ *
319
+ * @param {string} event The event name.
320
+ * @returns {void}
321
+ */
252
322
  __addEmits(event) {
253
323
  const ctor = this.__ctor;
254
324
  if ((0, import_utils2.isArray)(ctor.config.emits)) {
@@ -257,14 +327,35 @@ var Base = class extends EventTarget {
257
327
  ctor.config.emits = [event];
258
328
  }
259
329
  }
330
+ /**
331
+ * Remove an emitted event.
332
+ *
333
+ * @param {string} event The event name.
334
+ * @returns {void}
335
+ */
260
336
  __removeEmits(event) {
261
337
  const ctor = this.__ctor;
262
338
  const index = ctor.config.emits.indexOf(event);
263
339
  ctor.config.emits.splice(index, 1);
264
340
  }
341
+ /**
342
+ * Get the instance constructor.
343
+ */
265
344
  get __ctor() {
266
345
  return this.constructor;
267
346
  }
347
+ /**
348
+ * Bind a listener function to an event.
349
+ *
350
+ * @param {string} event
351
+ * Name of the event.
352
+ * @param {EventListenerOrEventListenerObject} listener
353
+ * Function to be called.
354
+ * @param {boolean|AddEventListenerOptions} [options]
355
+ * Options for the `removeEventListener` method.
356
+ * @returns {() => void}
357
+ * A function to unbind the listener.
358
+ */
268
359
  $on(event, listener, options) {
269
360
  if (import_utils2.isDev) {
270
361
  this.__debug("$on", event, listener, options);
@@ -281,6 +372,17 @@ var Base = class extends EventTarget {
281
372
  this.$off(event, listener, options);
282
373
  };
283
374
  }
375
+ /**
376
+ * Unbind a listener function from an event.
377
+ *
378
+ * @param {string} event
379
+ * Name of the event.
380
+ * @param {EventListenerOrEventListenerObject} listener
381
+ * Function to be removed.
382
+ * @param {boolean|EventListenerOptions} [options]
383
+ * Options for the `removeEventListener` method.
384
+ * @returns {void}
385
+ */
284
386
  $off(event, listener, options) {
285
387
  if (import_utils2.isDev) {
286
388
  this.__debug("$off", event, listener);
@@ -289,12 +391,22 @@ var Base = class extends EventTarget {
289
391
  const target = (0, import_utils.getEventTarget)(this, event, this.__config);
290
392
  target.removeEventListener(event, listener, options);
291
393
  }
394
+ /**
395
+ * Emits an event.
396
+ *
397
+ * @param {string} event Name of the event.
398
+ * @param {any[]} args The arguments to apply to the functions bound to this event.
399
+ * @returns {void}
400
+ */
292
401
  $emit(event, ...args) {
293
402
  if (import_utils2.isDev) {
294
403
  this.__debug("$emit", event, args);
295
404
  }
296
405
  this.dispatchEvent(new CustomEvent(event, { detail: args }));
297
406
  }
407
+ /**
408
+ * Factory method to generate multiple instance of the class.
409
+ */
298
410
  static $factory(nameOrSelector) {
299
411
  if (import_utils2.isDev && !nameOrSelector) {
300
412
  throw new Error(
@@ -304,22 +416,5 @@ var Base = class extends EventTarget {
304
416
  return (0, import_utils.getComponentElements)(nameOrSelector).map((el) => new this(el).$mount());
305
417
  }
306
418
  };
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
419
  if (module.exports.default) module.exports = module.exports.default;
325
420
  //# sourceMappingURL=Base.cjs.map
package/Base/Base.cjs.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": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiE;AACjE,sBAMO;AACP,IAAAA,gBAAiD;AAEjD,IAAI,KAAK;AAOT,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;",
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": ["import_utils"]
7
7
  }