@studiometa/js-toolkit 2.6.5 → 2.7.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 (314) hide show
  1. package/Base/features.cjs +29 -0
  2. package/Base/features.cjs.map +7 -0
  3. package/Base/features.d.ts +2 -0
  4. package/Base/features.js +7 -0
  5. package/Base/features.js.map +7 -0
  6. package/Base/index.cjs +12 -15
  7. package/Base/index.cjs.map +2 -2
  8. package/Base/index.d.ts +1 -5
  9. package/Base/index.js +10 -6
  10. package/Base/index.js.map +2 -2
  11. package/Base/managers/AsyncChildrenManager.cjs +61 -0
  12. package/Base/managers/AsyncChildrenManager.cjs.map +7 -0
  13. package/Base/managers/AsyncChildrenManager.d.ts +18 -0
  14. package/Base/managers/AsyncChildrenManager.js +39 -0
  15. package/Base/managers/AsyncChildrenManager.js.map +7 -0
  16. package/Base/managers/ChildrenManager.cjs +32 -29
  17. package/Base/managers/ChildrenManager.cjs.map +2 -2
  18. package/Base/managers/ChildrenManager.d.ts +21 -1
  19. package/Base/managers/ChildrenManager.js +32 -29
  20. package/Base/managers/ChildrenManager.js.map +2 -2
  21. package/Base/managers/EventsManager.cjs.map +2 -2
  22. package/Base/managers/EventsManager.js.map +2 -2
  23. package/Base/managers/RefsManager.cjs.map +2 -2
  24. package/Base/managers/RefsManager.js.map +2 -2
  25. package/Base/managers/index.cjs +41 -0
  26. package/Base/managers/index.cjs.map +7 -0
  27. package/Base/managers/index.d.ts +8 -0
  28. package/Base/managers/index.js +19 -0
  29. package/Base/managers/index.js.map +7 -0
  30. package/Base/types.cjs.map +1 -1
  31. package/Base/utils.cjs.map +2 -2
  32. package/Base/utils.d.ts +1 -0
  33. package/Base/utils.js.map +2 -2
  34. package/decorators/withBreakpointManager.cjs.map +2 -2
  35. package/decorators/withBreakpointManager.js.map +2 -2
  36. package/decorators/withBreakpointObserver.cjs.map +2 -2
  37. package/decorators/withBreakpointObserver.js.map +2 -2
  38. package/decorators/withDrag.cjs.map +2 -2
  39. package/decorators/withDrag.js.map +2 -2
  40. package/decorators/withMountWhenInView.cjs.map +2 -2
  41. package/decorators/withMountWhenInView.js.map +2 -2
  42. package/decorators/withResponsiveOptions.cjs.map +2 -2
  43. package/decorators/withResponsiveOptions.js.map +2 -2
  44. package/decorators/withScrolledInView.cjs +4 -1
  45. package/decorators/withScrolledInView.cjs.map +2 -2
  46. package/decorators/withScrolledInView.js +4 -1
  47. package/decorators/withScrolledInView.js.map +2 -2
  48. package/decorators/withVue2.cjs.map +2 -2
  49. package/decorators/withVue2.js.map +2 -2
  50. package/helpers/createApp.cjs +23 -19
  51. package/helpers/createApp.cjs.map +2 -2
  52. package/helpers/createApp.d.ts +6 -1
  53. package/helpers/createApp.js +23 -19
  54. package/helpers/createApp.js.map +2 -2
  55. package/helpers/getClosestParent.cjs.map +2 -2
  56. package/helpers/getClosestParent.js.map +2 -2
  57. package/helpers/getInstanceFromElement.cjs.map +2 -2
  58. package/helpers/getInstanceFromElement.js.map +2 -2
  59. package/helpers/importOnInteraction.cjs.map +2 -2
  60. package/helpers/importOnInteraction.js.map +2 -2
  61. package/helpers/importWhenIdle.cjs.map +2 -2
  62. package/helpers/importWhenIdle.js.map +2 -2
  63. package/index.cjs.map +1 -1
  64. package/index.d.ts +1 -1
  65. package/index.js.map +1 -1
  66. package/package.json +1 -1
  67. package/services/drag.cjs +1 -1
  68. package/services/drag.cjs.map +3 -3
  69. package/services/drag.d.ts +21 -24
  70. package/services/drag.js.map +3 -3
  71. package/services/key.cjs +1 -1
  72. package/services/key.cjs.map +3 -3
  73. package/services/key.d.ts +8 -9
  74. package/services/key.js.map +3 -3
  75. package/services/load.cjs +1 -1
  76. package/services/load.cjs.map +3 -3
  77. package/services/load.d.ts +6 -5
  78. package/services/load.js.map +3 -3
  79. package/services/pointer.cjs +1 -1
  80. package/services/pointer.cjs.map +3 -3
  81. package/services/pointer.d.ts +10 -10
  82. package/services/pointer.js.map +3 -3
  83. package/services/raf.cjs +4 -4
  84. package/services/raf.cjs.map +3 -3
  85. package/services/raf.d.ts +6 -7
  86. package/services/raf.js +3 -3
  87. package/services/raf.js.map +3 -3
  88. package/services/resize.cjs +1 -1
  89. package/services/resize.cjs.map +3 -3
  90. package/services/resize.d.ts +8 -9
  91. package/services/resize.js.map +3 -3
  92. package/services/scroll.cjs +1 -1
  93. package/services/scroll.cjs.map +3 -3
  94. package/services/scroll.d.ts +16 -17
  95. package/services/scroll.js.map +3 -3
  96. package/services/service.cjs +2 -2
  97. package/services/service.cjs.map +3 -3
  98. package/services/service.d.ts +12 -14
  99. package/services/service.js +1 -1
  100. package/services/service.js.map +3 -3
  101. package/utils/Queue.cjs +60 -0
  102. package/utils/Queue.cjs.map +7 -0
  103. package/utils/Queue.d.ts +44 -0
  104. package/utils/Queue.js +38 -0
  105. package/utils/Queue.js.map +7 -0
  106. package/utils/collide/boundingRectToCircle.cjs +3 -2
  107. package/utils/collide/boundingRectToCircle.cjs.map +3 -3
  108. package/utils/collide/boundingRectToCircle.d.ts +8 -13
  109. package/utils/collide/boundingRectToCircle.js +2 -1
  110. package/utils/collide/boundingRectToCircle.js.map +3 -3
  111. package/utils/collide/collideCircleCircle.cjs +1 -1
  112. package/utils/collide/collideCircleCircle.cjs.map +1 -1
  113. package/utils/collide/collideCircleCircle.d.ts +1 -15
  114. package/utils/collide/collideCircleCircle.js.map +1 -1
  115. package/utils/collide/collideCircleRect.cjs +1 -1
  116. package/utils/collide/collideCircleRect.cjs.map +1 -1
  117. package/utils/collide/collideCircleRect.d.ts +1 -33
  118. package/utils/collide/collideCircleRect.js.map +1 -1
  119. package/utils/collide/collidePointCircle.cjs +1 -1
  120. package/utils/collide/collidePointCircle.cjs.map +1 -1
  121. package/utils/collide/collidePointCircle.d.ts +1 -25
  122. package/utils/collide/collidePointCircle.js.map +1 -1
  123. package/utils/collide/collidePointRect.cjs +1 -1
  124. package/utils/collide/collidePointRect.cjs.map +1 -1
  125. package/utils/collide/collidePointRect.d.ts +1 -29
  126. package/utils/collide/collidePointRect.js.map +1 -1
  127. package/utils/collide/collideRectRect.cjs +1 -1
  128. package/utils/collide/collideRectRect.cjs.map +1 -1
  129. package/utils/collide/collideRectRect.d.ts +1 -19
  130. package/utils/collide/collideRectRect.js.map +1 -1
  131. package/utils/collide/index.cjs +1 -1
  132. package/utils/collide/index.cjs.map +1 -1
  133. package/utils/collide/index.d.ts +9 -6
  134. package/utils/collide/index.js.map +1 -1
  135. package/utils/css/animate.cjs +14 -15
  136. package/utils/css/animate.cjs.map +3 -3
  137. package/utils/css/animate.d.ts +12 -14
  138. package/utils/css/animate.js +13 -14
  139. package/utils/css/animate.js.map +3 -3
  140. package/utils/css/classes.cjs +1 -1
  141. package/utils/css/classes.cjs.map +3 -3
  142. package/utils/css/classes.d.ts +3 -16
  143. package/utils/css/classes.js.map +3 -3
  144. package/utils/css/getOffsetSizes.cjs +1 -1
  145. package/utils/css/getOffsetSizes.cjs.map +3 -3
  146. package/utils/css/getOffsetSizes.d.ts +0 -2
  147. package/utils/css/getOffsetSizes.js.map +3 -3
  148. package/utils/css/matrix.cjs +1 -1
  149. package/utils/css/matrix.cjs.map +3 -3
  150. package/utils/css/matrix.d.ts +10 -8
  151. package/utils/css/matrix.js.map +3 -3
  152. package/utils/css/styles.cjs +1 -1
  153. package/utils/css/styles.cjs.map +3 -3
  154. package/utils/css/styles.d.ts +2 -10
  155. package/utils/css/styles.js.map +3 -3
  156. package/utils/css/transform.cjs +1 -1
  157. package/utils/css/transform.cjs.map +3 -3
  158. package/utils/css/transform.d.ts +6 -28
  159. package/utils/css/transform.js.map +3 -3
  160. package/utils/css/transition.cjs +2 -2
  161. package/utils/css/transition.cjs.map +3 -3
  162. package/utils/css/transition.d.ts +11 -15
  163. package/utils/css/transition.js +1 -1
  164. package/utils/css/transition.js.map +3 -3
  165. package/utils/debounce.cjs +1 -1
  166. package/utils/debounce.cjs.map +3 -3
  167. package/utils/debounce.d.ts +3 -3
  168. package/utils/debounce.js.map +3 -3
  169. package/utils/focusTrap.cjs +4 -2
  170. package/utils/focusTrap.cjs.map +3 -3
  171. package/utils/focusTrap.d.ts +3 -4
  172. package/utils/focusTrap.js +3 -1
  173. package/utils/focusTrap.js.map +3 -3
  174. package/utils/has.cjs +1 -1
  175. package/utils/has.cjs.map +3 -3
  176. package/utils/has.d.ts +1 -3
  177. package/utils/has.js.map +3 -3
  178. package/utils/history.cjs +1 -1
  179. package/utils/history.cjs.map +3 -3
  180. package/utils/history.d.ts +10 -10
  181. package/utils/history.js.map +3 -3
  182. package/utils/index.cjs +2 -0
  183. package/utils/index.cjs.map +2 -2
  184. package/utils/index.d.ts +1 -0
  185. package/utils/index.js +2 -0
  186. package/utils/index.js.map +2 -2
  187. package/utils/is.cjs +1 -1
  188. package/utils/is.cjs.map +3 -3
  189. package/utils/is.d.ts +26 -8
  190. package/utils/is.js.map +3 -3
  191. package/utils/keyCodes.cjs +1 -1
  192. package/utils/keyCodes.cjs.map +2 -2
  193. package/utils/keyCodes.d.ts +10 -10
  194. package/utils/keyCodes.js.map +2 -2
  195. package/utils/math/clamp.cjs +1 -1
  196. package/utils/math/clamp.cjs.map +3 -3
  197. package/utils/math/clamp.js.map +3 -3
  198. package/utils/math/clamp01.cjs +1 -1
  199. package/utils/math/clamp01.cjs.map +3 -3
  200. package/utils/math/clamp01.js.map +3 -3
  201. package/utils/math/createEases.cjs +1 -1
  202. package/utils/math/createEases.cjs.map +3 -3
  203. package/utils/math/createEases.d.ts +3 -6
  204. package/utils/math/createEases.js.map +3 -3
  205. package/utils/math/damp.cjs +1 -1
  206. package/utils/math/damp.cjs.map +3 -3
  207. package/utils/math/damp.js.map +3 -3
  208. package/utils/math/ease.cjs +1 -1
  209. package/utils/math/ease.cjs.map +3 -3
  210. package/utils/math/ease.d.ts +21 -21
  211. package/utils/math/ease.js.map +3 -3
  212. package/utils/math/index.cjs +1 -1
  213. package/utils/math/index.cjs.map +1 -1
  214. package/utils/math/index.d.ts +10 -10
  215. package/utils/math/index.js.map +1 -1
  216. package/utils/math/inertiaFinalValue.cjs +1 -1
  217. package/utils/math/inertiaFinalValue.cjs.map +3 -3
  218. package/utils/math/inertiaFinalValue.js.map +3 -3
  219. package/utils/math/lerp.cjs +1 -1
  220. package/utils/math/lerp.cjs.map +3 -3
  221. package/utils/math/lerp.js.map +3 -3
  222. package/utils/math/map.cjs +1 -1
  223. package/utils/math/map.cjs.map +3 -3
  224. package/utils/math/map.js.map +3 -3
  225. package/utils/math/round.cjs +1 -1
  226. package/utils/math/round.cjs.map +3 -3
  227. package/utils/math/round.js.map +3 -3
  228. package/utils/memoize.cjs +6 -2
  229. package/utils/memoize.cjs.map +3 -3
  230. package/utils/memoize.d.ts +18 -28
  231. package/utils/memoize.js +5 -1
  232. package/utils/memoize.js.map +3 -3
  233. package/utils/nextFrame.cjs +1 -1
  234. package/utils/nextFrame.cjs.map +3 -3
  235. package/utils/nextFrame.d.ts +3 -6
  236. package/utils/nextFrame.js.map +3 -3
  237. package/utils/nextMicrotask.cjs +1 -1
  238. package/utils/nextMicrotask.cjs.map +3 -3
  239. package/utils/nextMicrotask.d.ts +1 -5
  240. package/utils/nextMicrotask.js.map +3 -3
  241. package/utils/nextTick.cjs +5 -5
  242. package/utils/nextTick.cjs.map +3 -3
  243. package/utils/nextTick.d.ts +1 -5
  244. package/utils/nextTick.js +4 -4
  245. package/utils/nextTick.js.map +3 -3
  246. package/utils/noop.cjs +1 -1
  247. package/utils/noop.cjs.map +3 -3
  248. package/utils/noop.d.ts +2 -5
  249. package/utils/noop.js.map +3 -3
  250. package/utils/object/autoBind.cjs +1 -1
  251. package/utils/object/autoBind.cjs.map +3 -3
  252. package/utils/object/autoBind.d.ts +5 -4
  253. package/utils/object/autoBind.js.map +3 -3
  254. package/utils/object/getAllProperties.cjs +3 -3
  255. package/utils/object/getAllProperties.cjs.map +3 -3
  256. package/utils/object/getAllProperties.d.ts +1 -1
  257. package/utils/object/getAllProperties.js +2 -2
  258. package/utils/object/getAllProperties.js.map +3 -3
  259. package/utils/object/index.cjs +1 -1
  260. package/utils/object/index.cjs.map +1 -1
  261. package/utils/object/index.d.ts +2 -2
  262. package/utils/object/index.js.map +1 -1
  263. package/utils/scheduler.cjs +2 -2
  264. package/utils/scheduler.cjs.map +3 -3
  265. package/utils/scheduler.d.ts +4 -13
  266. package/utils/scheduler.js +1 -1
  267. package/utils/scheduler.js.map +3 -3
  268. package/utils/scrollTo.cjs +1 -1
  269. package/utils/scrollTo.cjs.map +3 -3
  270. package/utils/scrollTo.d.ts +0 -3
  271. package/utils/scrollTo.js.map +3 -3
  272. package/utils/string/index.cjs +1 -1
  273. package/utils/string/index.cjs.map +1 -1
  274. package/utils/string/index.d.ts +10 -10
  275. package/utils/string/index.js.map +1 -1
  276. package/utils/string/withLeadingCharacters.cjs +1 -1
  277. package/utils/string/withLeadingCharacters.cjs.map +3 -3
  278. package/utils/string/withLeadingCharacters.js.map +3 -3
  279. package/utils/string/withLeadingSlash.cjs +1 -1
  280. package/utils/string/withLeadingSlash.cjs.map +3 -3
  281. package/utils/string/withLeadingSlash.js.map +3 -3
  282. package/utils/string/withTrailingCharacters.cjs +1 -1
  283. package/utils/string/withTrailingCharacters.cjs.map +3 -3
  284. package/utils/string/withTrailingCharacters.js.map +3 -3
  285. package/utils/string/withTrailingSlash.cjs +1 -1
  286. package/utils/string/withTrailingSlash.cjs.map +3 -3
  287. package/utils/string/withTrailingSlash.js.map +3 -3
  288. package/utils/string/withoutLeadingCharacters.cjs +1 -1
  289. package/utils/string/withoutLeadingCharacters.cjs.map +3 -3
  290. package/utils/string/withoutLeadingCharacters.js.map +3 -3
  291. package/utils/string/withoutLeadingCharactersRecursive.cjs +1 -1
  292. package/utils/string/withoutLeadingCharactersRecursive.cjs.map +3 -3
  293. package/utils/string/withoutLeadingCharactersRecursive.js.map +3 -3
  294. package/utils/string/withoutLeadingSlash.cjs +1 -1
  295. package/utils/string/withoutLeadingSlash.cjs.map +3 -3
  296. package/utils/string/withoutLeadingSlash.js.map +3 -3
  297. package/utils/string/withoutTrailingCharacters.cjs +1 -1
  298. package/utils/string/withoutTrailingCharacters.cjs.map +3 -3
  299. package/utils/string/withoutTrailingCharacters.js.map +3 -3
  300. package/utils/string/withoutTrailingCharactersRecursive.cjs +1 -1
  301. package/utils/string/withoutTrailingCharactersRecursive.cjs.map +3 -3
  302. package/utils/string/withoutTrailingCharactersRecursive.js.map +3 -3
  303. package/utils/string/withoutTrailingSlash.cjs +1 -1
  304. package/utils/string/withoutTrailingSlash.cjs.map +3 -3
  305. package/utils/string/withoutTrailingSlash.js.map +3 -3
  306. package/utils/throttle.cjs +2 -2
  307. package/utils/throttle.cjs.map +3 -3
  308. package/utils/throttle.d.ts +1 -1
  309. package/utils/throttle.js +1 -1
  310. package/utils/throttle.js.map +3 -3
  311. package/utils/tween.cjs +1 -1
  312. package/utils/tween.cjs.map +3 -3
  313. package/utils/tween.d.ts +16 -24
  314. package/utils/tween.js.map +3 -3
@@ -0,0 +1,29 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // packages/js-toolkit/Base/features.ts
20
+ var features_exports = {};
21
+ __export(features_exports, {
22
+ features: () => features
23
+ });
24
+ module.exports = __toCommonJS(features_exports);
25
+ var features = /* @__PURE__ */ new Map([
26
+ ["asyncChildren", false]
27
+ ]);
28
+ if (module.exports.default) module.exports = module.exports.default;
29
+ //# sourceMappingURL=features.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/Base/features.ts"],
4
+ "sourcesContent": ["export type Features = Record<'asyncChildren', boolean>;\n\nexport const features = new Map<keyof Features, boolean>([\n ['asyncChildren', false],\n]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,WAAW,oBAAI,IAA6B;AAAA,EACvD,CAAC,iBAAiB,KAAK;AACzB,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export declare type Features = Record<'asyncChildren', boolean>;
2
+ export declare const features: Map<"asyncChildren", boolean>;
@@ -0,0 +1,7 @@
1
+ const features = /* @__PURE__ */ new Map([
2
+ ["asyncChildren", false]
3
+ ]);
4
+ export {
5
+ features
6
+ };
7
+ //# sourceMappingURL=features.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/Base/features.ts"],
4
+ "sourcesContent": ["export type Features = Record<'asyncChildren', boolean>;\n\nexport const features = new Map<keyof Features, boolean>([\n ['asyncChildren', false],\n]);\n"],
5
+ "mappings": "AAEO,MAAM,WAAW,oBAAI,IAA6B;AAAA,EACvD,CAAC,iBAAiB,KAAK;AACzB,CAAC;",
6
+ "names": []
7
+ }
package/Base/index.cjs CHANGED
@@ -28,11 +28,8 @@ __export(Base_exports, {
28
28
  });
29
29
  module.exports = __toCommonJS(Base_exports);
30
30
  var import_utils = require("./utils.cjs");
31
- var import_ChildrenManager = require("./managers/ChildrenManager.cjs");
32
- var import_RefsManager = require("./managers/RefsManager.cjs");
33
- var import_ServicesManager = require("./managers/ServicesManager.cjs");
34
- var import_EventsManager = require("./managers/EventsManager.cjs");
35
- var import_OptionsManager = require("./managers/OptionsManager.cjs");
31
+ var import_features = require("./features.cjs");
32
+ var import_managers = require("./managers/index.cjs");
36
33
  var import_utils2 = require("../utils/index.cjs");
37
34
  var id = 0;
38
35
  function createAndTestManagers(instance) {
@@ -40,27 +37,27 @@ function createAndTestManagers(instance) {
40
37
  {
41
38
  prop: "__options",
42
39
  constructorName: "OptionsManager",
43
- constructor: import_OptionsManager.OptionsManager
40
+ constructor: import_managers.OptionsManager
44
41
  },
45
42
  {
46
43
  prop: "__services",
47
44
  constructorName: "ServicesManager",
48
- constructor: import_ServicesManager.ServicesManager
45
+ constructor: import_managers.ServicesManager
49
46
  },
50
47
  {
51
48
  prop: "__events",
52
49
  constructorName: "EventsManager",
53
- constructor: import_EventsManager.EventsManager
50
+ constructor: import_managers.EventsManager
54
51
  },
55
52
  {
56
53
  prop: "__refs",
57
54
  constructorName: "RefsManager",
58
- constructor: import_RefsManager.RefsManager
55
+ constructor: import_managers.RefsManager
59
56
  },
60
57
  {
61
58
  prop: "__children",
62
59
  constructorName: "ChildrenManager",
63
- constructor: import_ChildrenManager.ChildrenManager
60
+ constructor: import_managers.ChildrenManager
64
61
  }
65
62
  ].forEach(({ prop, constructorName, constructor }) => {
66
63
  instance[prop] = new instance.__managers[constructorName](instance);
@@ -134,11 +131,11 @@ var Base = class extends EventTarget {
134
131
  }
135
132
  get __managers() {
136
133
  return {
137
- ChildrenManager: import_ChildrenManager.ChildrenManager,
138
- EventsManager: import_EventsManager.EventsManager,
139
- OptionsManager: import_OptionsManager.OptionsManager,
140
- RefsManager: import_RefsManager.RefsManager,
141
- ServicesManager: import_ServicesManager.ServicesManager
134
+ ChildrenManager: import_features.features.get("asyncChildren") ? import_managers.AsyncChildrenManager : import_managers.ChildrenManager,
135
+ EventsManager: import_managers.EventsManager,
136
+ OptionsManager: import_managers.OptionsManager,
137
+ RefsManager: import_managers.RefsManager,
138
+ ServicesManager: import_managers.ServicesManager
142
139
  };
143
140
  }
144
141
  __callMethod(method, ...args) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/Base/index.ts"],
4
- "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { getComponentElements, getEventTarget } from './utils.js';\nimport { ChildrenManager } from './managers/ChildrenManager.js';\nimport { RefsManager } from './managers/RefsManager.js';\nimport { ServicesManager } from './managers/ServicesManager.js';\nimport { EventsManager } from './managers/EventsManager.js';\nimport { OptionsManager } from './managers/OptionsManager.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 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 this.$isMounted = true;\n if (isDev) {\n this.__debug('$mount');\n }\n this.$children.registerAll();\n this.$refs.registerAll();\n this.__events.bindRootElement();\n this.$services.enableAll();\n this.$children.mountAll();\n\n 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 this.$refs.unregisterAll();\n this.$services.disableAll();\n\n // Redo\n this.$children.registerAll();\n this.$refs.registerAll();\n this.$services.enableAll();\n\n // Update\n this.$children.updateAll();\n\n this.__callMethod('updated');\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 this.$isMounted = false;\n if (isDev) {\n this.__debug('$destroy');\n }\n this.__events.unbindRootElement();\n this.$refs.unregisterAll();\n this.$services.disableAll();\n this.$children.destroyAll();\n 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 this.$destroy();\n\n // Execute the `terminated` hook if it exists\n this.__callMethod('terminated');\n\n // Delete instance\n 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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",
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { getComponentElements, getEventTarget } from './utils.js';\nimport { features } from './features.js';\nimport {\n ChildrenManager,\n AsyncChildrenManager,\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 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: features.get('asyncChildren') ? AsyncChildrenManager : 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 this.$isMounted = true;\n if (isDev) {\n this.__debug('$mount');\n }\n this.$children.registerAll();\n this.$refs.registerAll();\n this.__events.bindRootElement();\n this.$services.enableAll();\n this.$children.mountAll();\n\n 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 this.$refs.unregisterAll();\n this.$services.disableAll();\n\n // Redo\n this.$children.registerAll();\n this.$refs.registerAll();\n this.$services.enableAll();\n\n // Update\n this.$children.updateAll();\n\n this.__callMethod('updated');\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 this.$isMounted = false;\n if (isDev) {\n this.__debug('$destroy');\n }\n this.__events.unbindRootElement();\n this.$refs.unregisterAll();\n this.$services.disableAll();\n this.$children.destroyAll();\n 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 this.$destroy();\n\n // Execute the `terminated` hook if it exists\n this.__callMethod('terminated');\n\n // Delete instance\n 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
  }
package/Base/index.d.ts CHANGED
@@ -1,8 +1,4 @@
1
- import { ChildrenManager } from './managers/ChildrenManager.js';
2
- import { RefsManager } from './managers/RefsManager.js';
3
- import { ServicesManager } from './managers/ServicesManager.js';
4
- import { EventsManager } from './managers/EventsManager.js';
5
- import { OptionsManager } from './managers/OptionsManager.js';
1
+ import { ChildrenManager, RefsManager, ServicesManager, EventsManager, OptionsManager } from './managers/index.js';
6
2
  export declare type BaseEl = HTMLElement & {
7
3
  __base__?: WeakMap<BaseConstructor, Base | 'terminated'>;
8
4
  };
package/Base/index.js CHANGED
@@ -1,9 +1,13 @@
1
1
  import { getComponentElements, getEventTarget } from "./utils.js";
2
- import { ChildrenManager } from "./managers/ChildrenManager.js";
3
- import { RefsManager } from "./managers/RefsManager.js";
4
- import { ServicesManager } from "./managers/ServicesManager.js";
5
- import { EventsManager } from "./managers/EventsManager.js";
6
- import { OptionsManager } from "./managers/OptionsManager.js";
2
+ import { features } from "./features.js";
3
+ import {
4
+ ChildrenManager,
5
+ AsyncChildrenManager,
6
+ RefsManager,
7
+ ServicesManager,
8
+ EventsManager,
9
+ OptionsManager
10
+ } from "./managers/index.js";
7
11
  import { noop, isDev, isFunction, isArray } from "../utils/index.js";
8
12
  let id = 0;
9
13
  function createAndTestManagers(instance) {
@@ -122,7 +126,7 @@ class Base extends EventTarget {
122
126
  }
123
127
  get __managers() {
124
128
  return {
125
- ChildrenManager,
129
+ ChildrenManager: features.get("asyncChildren") ? AsyncChildrenManager : ChildrenManager,
126
130
  EventsManager,
127
131
  OptionsManager,
128
132
  RefsManager,
package/Base/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/Base/index.ts"],
4
- "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { getComponentElements, getEventTarget } from './utils.js';\nimport { ChildrenManager } from './managers/ChildrenManager.js';\nimport { RefsManager } from './managers/RefsManager.js';\nimport { ServicesManager } from './managers/ServicesManager.js';\nimport { EventsManager } from './managers/EventsManager.js';\nimport { OptionsManager } from './managers/OptionsManager.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 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 this.$isMounted = true;\n if (isDev) {\n this.__debug('$mount');\n }\n this.$children.registerAll();\n this.$refs.registerAll();\n this.__events.bindRootElement();\n this.$services.enableAll();\n this.$children.mountAll();\n\n 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 this.$refs.unregisterAll();\n this.$services.disableAll();\n\n // Redo\n this.$children.registerAll();\n this.$refs.registerAll();\n this.$services.enableAll();\n\n // Update\n this.$children.updateAll();\n\n this.__callMethod('updated');\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 this.$isMounted = false;\n if (isDev) {\n this.__debug('$destroy');\n }\n this.__events.unbindRootElement();\n this.$refs.unregisterAll();\n this.$services.disableAll();\n this.$children.destroyAll();\n 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 this.$destroy();\n\n // Execute the `terminated` hook if it exists\n this.__callMethod('terminated');\n\n // Delete instance\n 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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",
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { getComponentElements, getEventTarget } from './utils.js';\nimport { features } from './features.js';\nimport {\n ChildrenManager,\n AsyncChildrenManager,\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 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: features.get('asyncChildren') ? AsyncChildrenManager : 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 this.$isMounted = true;\n if (isDev) {\n this.__debug('$mount');\n }\n this.$children.registerAll();\n this.$refs.registerAll();\n this.__events.bindRootElement();\n this.$services.enableAll();\n this.$children.mountAll();\n\n 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 this.$refs.unregisterAll();\n this.$services.disableAll();\n\n // Redo\n this.$children.registerAll();\n this.$refs.registerAll();\n this.$services.enableAll();\n\n // Update\n this.$children.updateAll();\n\n this.__callMethod('updated');\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 this.$isMounted = false;\n if (isDev) {\n this.__debug('$destroy');\n }\n this.__events.unbindRootElement();\n this.$refs.unregisterAll();\n this.$services.disableAll();\n this.$children.destroyAll();\n 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 this.$destroy();\n\n // Execute the `terminated` hook if it exists\n this.__callMethod('terminated');\n\n // Delete instance\n this.$el.__base__.set(this.__ctor, 'terminated');\n }\n\n /**\n * Add an emitted event.\n *\n * @param {string} event The event name.\n * @returns {void}\n */\n __addEmits(event: string): void {\n const ctor = this.__ctor;\n if (isArray(ctor.config.emits)) {\n ctor.config.emits.push(event);\n } else {\n ctor.config.emits = [event];\n }\n }\n\n /**\n * Remove an emitted event.\n *\n * @param {string} event The event name.\n * @returns {void}\n */\n __removeEmits(event: string): void {\n const ctor = this.__ctor;\n const index = ctor.config.emits.indexOf(event);\n ctor.config.emits.splice(index, 1);\n }\n\n /**\n * Get the instance constructor.\n */\n get __ctor(): BaseConstructor {\n return this.constructor as BaseConstructor;\n }\n\n /**\n * Bind a listener function to an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be called.\n * @param {boolean|AddEventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @returns {() => void}\n * A function to unbind the listener.\n */\n $on(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): () => void {\n if (isDev) {\n this.__debug('$on', event, listener, options);\n }\n\n let set = this.__eventHandlers.get(event);\n\n if (!set) {\n set = new Set();\n this.__eventHandlers.set(event, set);\n }\n\n set.add(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target.addEventListener(event, listener, options);\n\n return () => {\n this.$off(event, listener, options);\n };\n }\n\n /**\n * Unbind a listener function from an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be removed.\n * @param {boolean|EventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @returns {void}\n */\n $off(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ) {\n if (isDev) {\n this.__debug('$off', event, listener);\n }\n\n this.__eventHandlers.get(event).delete(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target.removeEventListener(event, listener, options);\n }\n\n /**\n * Emits an event.\n *\n * @param {string} event Name of the event.\n * @param {any[]} args The arguments to apply to the functions bound to this event.\n * @returns {void}\n */\n $emit(event: string, ...args: unknown[]) {\n if (isDev) {\n this.__debug('$emit', event, args);\n }\n\n this.dispatchEvent(new CustomEvent(event, { detail: args }));\n }\n\n /**\n * Factory method to generate multiple instance of the class.\n */\n static $factory(nameOrSelector: string): Base[] {\n if (isDev && !nameOrSelector) {\n throw new Error(\n 'The $factory method requires a component\u2019s name or selector to be specified.',\n );\n }\n\n return getComponentElements(nameOrSelector).map((el) => new this(el).$mount());\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,61 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // packages/js-toolkit/Base/managers/AsyncChildrenManager.ts
20
+ var AsyncChildrenManager_exports = {};
21
+ __export(AsyncChildrenManager_exports, {
22
+ AsyncChildrenManager: () => AsyncChildrenManager
23
+ });
24
+ module.exports = __toCommonJS(AsyncChildrenManager_exports);
25
+ var import_ChildrenManager = require("./ChildrenManager.cjs");
26
+ var import_utils = require("../../utils/index.cjs");
27
+ var queue = new import_utils.Queue(10, import_utils.nextTick);
28
+ var AsyncChildrenManager = class extends import_ChildrenManager.ChildrenManager {
29
+ registerAll() {
30
+ Object.entries(this.__config.components).forEach(([name, component]) => {
31
+ queue.add(() => this.__register(name, component));
32
+ });
33
+ }
34
+ __register(name, component) {
35
+ Object.defineProperty(this, name, {
36
+ enumerable: true,
37
+ configurable: true,
38
+ value: this.__getValue(name, component).map((childOrPromise) => {
39
+ if (childOrPromise instanceof Promise) {
40
+ childOrPromise.then((child) => {
41
+ if (child !== "terminated") {
42
+ this.__triggerHook("$mount", child, name);
43
+ }
44
+ });
45
+ } else if (childOrPromise !== "terminated") {
46
+ this.__triggerHook("$mount", childOrPromise, name);
47
+ }
48
+ return childOrPromise;
49
+ })
50
+ });
51
+ }
52
+ __triggerHook(hook, instance, name) {
53
+ queue.add(() => {
54
+ super.__triggerHook(hook, instance, name);
55
+ });
56
+ }
57
+ mountAll() {
58
+ }
59
+ };
60
+ if (module.exports.default) module.exports = module.exports.default;
61
+ //# sourceMappingURL=AsyncChildrenManager.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/Base/managers/AsyncChildrenManager.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type { Base, BaseConstructor, BaseAsyncConstructor } from '../index.js';\nimport { ChildrenManager } from './ChildrenManager.js';\nimport { Queue, nextTick } from '../../utils/index.js';\n\nconst queue = new Queue(10, nextTick);\n\n/**\n * Children manager.\n */\nexport class AsyncChildrenManager extends ChildrenManager {\n /**\n * Register instances of all children components.\n */\n registerAll() {\n Object.entries(this.__config.components).forEach(([name, component]) => {\n queue.add(() => this.__register(name, component));\n });\n }\n\n __register(name: string, component: BaseConstructor | BaseAsyncConstructor): void {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: true,\n value: this.__getValue(name, component).map((childOrPromise) => {\n if (childOrPromise instanceof Promise) {\n childOrPromise.then((child) => {\n if (child !== 'terminated') {\n this.__triggerHook('$mount', child, name);\n }\n });\n } else if (childOrPromise !== 'terminated') {\n this.__triggerHook('$mount', childOrPromise, name);\n }\n\n return childOrPromise;\n }),\n });\n }\n\n __triggerHook(hook: '$mount' | '$update' | '$destroy', instance: Base, name: string): void {\n queue.add(() => {\n super.__triggerHook(hook, instance, name);\n });\n }\n\n /**\n * Children are mounted right after they are registered in this AsyncChildrenManager class, so we\n * do not need to do anything in the `mountAll` method.\n */\n mountAll(): void {\n // silence is golden\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,6BAAgC;AAChC,mBAAgC;AAEhC,IAAM,QAAQ,IAAI,mBAAM,IAAI,qBAAQ;AAK7B,IAAM,uBAAN,cAAmC,uCAAgB;AAAA,EAIxD,cAAc;AACZ,WAAO,QAAQ,KAAK,SAAS,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,SAAS,MAAM;AACtE,YAAM,IAAI,MAAM,KAAK,WAAW,MAAM,SAAS,CAAC;AAAA,IAClD,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,MAAc,WAAyD;AAChF,WAAO,eAAe,MAAM,MAAM;AAAA,MAChC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,OAAO,KAAK,WAAW,MAAM,SAAS,EAAE,IAAI,CAAC,mBAAmB;AAC9D,YAAI,0BAA0B,SAAS;AACrC,yBAAe,KAAK,CAAC,UAAU;AAC7B,gBAAI,UAAU,cAAc;AAC1B,mBAAK,cAAc,UAAU,OAAO,IAAI;AAAA,YAC1C;AAAA,UACF,CAAC;AAAA,QACH,WAAW,mBAAmB,cAAc;AAC1C,eAAK,cAAc,UAAU,gBAAgB,IAAI;AAAA,QACnD;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,MAAyC,UAAgB,MAAoB;AACzF,UAAM,IAAI,MAAM;AACd,YAAM,cAAc,MAAM,UAAU,IAAI;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAMA,WAAiB;AAAA,EAEjB;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ import type { Base, BaseConstructor, BaseAsyncConstructor } from '../index.js';
2
+ import { ChildrenManager } from './ChildrenManager.js';
3
+ /**
4
+ * Children manager.
5
+ */
6
+ export declare class AsyncChildrenManager extends ChildrenManager {
7
+ /**
8
+ * Register instances of all children components.
9
+ */
10
+ registerAll(): void;
11
+ __register(name: string, component: BaseConstructor | BaseAsyncConstructor): void;
12
+ __triggerHook(hook: '$mount' | '$update' | '$destroy', instance: Base, name: string): void;
13
+ /**
14
+ * Children are mounted right after they are registered in this AsyncChildrenManager class, so we
15
+ * do not need to do anything in the `mountAll` method.
16
+ */
17
+ mountAll(): void;
18
+ }
@@ -0,0 +1,39 @@
1
+ import { ChildrenManager } from "./ChildrenManager.js";
2
+ import { Queue, nextTick } from "../../utils/index.js";
3
+ const queue = new Queue(10, nextTick);
4
+ class AsyncChildrenManager extends ChildrenManager {
5
+ registerAll() {
6
+ Object.entries(this.__config.components).forEach(([name, component]) => {
7
+ queue.add(() => this.__register(name, component));
8
+ });
9
+ }
10
+ __register(name, component) {
11
+ Object.defineProperty(this, name, {
12
+ enumerable: true,
13
+ configurable: true,
14
+ value: this.__getValue(name, component).map((childOrPromise) => {
15
+ if (childOrPromise instanceof Promise) {
16
+ childOrPromise.then((child) => {
17
+ if (child !== "terminated") {
18
+ this.__triggerHook("$mount", child, name);
19
+ }
20
+ });
21
+ } else if (childOrPromise !== "terminated") {
22
+ this.__triggerHook("$mount", childOrPromise, name);
23
+ }
24
+ return childOrPromise;
25
+ })
26
+ });
27
+ }
28
+ __triggerHook(hook, instance, name) {
29
+ queue.add(() => {
30
+ super.__triggerHook(hook, instance, name);
31
+ });
32
+ }
33
+ mountAll() {
34
+ }
35
+ }
36
+ export {
37
+ AsyncChildrenManager
38
+ };
39
+ //# sourceMappingURL=AsyncChildrenManager.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/Base/managers/AsyncChildrenManager.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type { Base, BaseConstructor, BaseAsyncConstructor } from '../index.js';\nimport { ChildrenManager } from './ChildrenManager.js';\nimport { Queue, nextTick } from '../../utils/index.js';\n\nconst queue = new Queue(10, nextTick);\n\n/**\n * Children manager.\n */\nexport class AsyncChildrenManager extends ChildrenManager {\n /**\n * Register instances of all children components.\n */\n registerAll() {\n Object.entries(this.__config.components).forEach(([name, component]) => {\n queue.add(() => this.__register(name, component));\n });\n }\n\n __register(name: string, component: BaseConstructor | BaseAsyncConstructor): void {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: true,\n value: this.__getValue(name, component).map((childOrPromise) => {\n if (childOrPromise instanceof Promise) {\n childOrPromise.then((child) => {\n if (child !== 'terminated') {\n this.__triggerHook('$mount', child, name);\n }\n });\n } else if (childOrPromise !== 'terminated') {\n this.__triggerHook('$mount', childOrPromise, name);\n }\n\n return childOrPromise;\n }),\n });\n }\n\n __triggerHook(hook: '$mount' | '$update' | '$destroy', instance: Base, name: string): void {\n queue.add(() => {\n super.__triggerHook(hook, instance, name);\n });\n }\n\n /**\n * Children are mounted right after they are registered in this AsyncChildrenManager class, so we\n * do not need to do anything in the `mountAll` method.\n */\n mountAll(): void {\n // silence is golden\n }\n}\n"],
5
+ "mappings": "AAEA,SAAS,uBAAuB;AAChC,SAAS,OAAO,gBAAgB;AAEhC,MAAM,QAAQ,IAAI,MAAM,IAAI,QAAQ;AAK7B,MAAM,6BAA6B,gBAAgB;AAAA,EAIxD,cAAc;AACZ,WAAO,QAAQ,KAAK,SAAS,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,SAAS,MAAM;AACtE,YAAM,IAAI,MAAM,KAAK,WAAW,MAAM,SAAS,CAAC;AAAA,IAClD,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,MAAc,WAAyD;AAChF,WAAO,eAAe,MAAM,MAAM;AAAA,MAChC,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,OAAO,KAAK,WAAW,MAAM,SAAS,EAAE,IAAI,CAAC,mBAAmB;AAC9D,YAAI,0BAA0B,SAAS;AACrC,yBAAe,KAAK,CAAC,UAAU;AAC7B,gBAAI,UAAU,cAAc;AAC1B,mBAAK,cAAc,UAAU,OAAO,IAAI;AAAA,YAC1C;AAAA,UACF,CAAC;AAAA,QACH,WAAW,mBAAmB,cAAc;AAC1C,eAAK,cAAc,UAAU,gBAAgB,IAAI;AAAA,QACnD;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,MAAyC,UAAgB,MAAoB;AACzF,UAAM,IAAI,MAAM;AACd,YAAM,cAAc,MAAM,UAAU,IAAI;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAMA,WAAiB;AAAA,EAEjB;AACF;",
6
+ "names": []
7
+ }
@@ -25,7 +25,9 @@ module.exports = __toCommonJS(ChildrenManager_exports);
25
25
  var import_AbstractManager = require("./AbstractManager.cjs");
26
26
  var import_utils = require("../utils.cjs");
27
27
  function __getChild(that, el, ComponentClass, name) {
28
- const asyncComponentPromise = that.__asyncComponentPromises.get(ComponentClass);
28
+ const asyncComponentPromise = that.__asyncComponentPromises.get(
29
+ ComponentClass
30
+ );
29
31
  if ("$isBase" in ComponentClass || asyncComponentPromise && asyncComponentPromise.status === "resolved") {
30
32
  let ctor = ComponentClass;
31
33
  if (asyncComponentPromise) {
@@ -56,38 +58,13 @@ function __getChild(that, el, ComponentClass, name) {
56
58
  return __getChild(that, el, ctor, name);
57
59
  });
58
60
  }
59
- function __register(that, name, component) {
60
- Object.defineProperty(that, name, {
61
- enumerable: true,
62
- configurable: true,
63
- get: () => {
64
- const elements = (0, import_utils.getComponentElements)(name, that.__element);
65
- if (elements.length === 0) {
66
- return [];
67
- }
68
- return elements.map((element) => __getChild(that, element, component, name)).filter((instance) => instance !== "terminated");
69
- }
70
- });
71
- }
72
- function __triggerHook(that, hook, instance, name) {
73
- if (hook === "$update" && !instance.$isMounted) {
74
- hook = "$mount";
75
- }
76
- if (hook === "$update" || hook === "$destroy") {
77
- that.__eventsManager.unbindChild(name, instance);
78
- }
79
- if (hook === "$update" || hook === "$mount") {
80
- that.__eventsManager.bindChild(name, instance);
81
- }
82
- instance[hook]();
83
- }
84
61
  function __triggerHookForAll(that, hook) {
85
62
  that.registeredNames.forEach((name) => {
86
63
  that[name].forEach((instance) => {
87
64
  if (instance instanceof Promise) {
88
- instance.then((resolvedInstance) => __triggerHook(that, hook, resolvedInstance, name));
65
+ instance.then((resolvedInstance) => that.__triggerHook(hook, resolvedInstance, name));
89
66
  } else {
90
- __triggerHook(that, hook, instance, name);
67
+ that.__triggerHook(hook, instance, name);
91
68
  }
92
69
  });
93
70
  });
@@ -99,7 +76,7 @@ var ChildrenManager = class extends import_AbstractManager.AbstractManager {
99
76
  }
100
77
  registerAll() {
101
78
  Object.entries(this.__config.components).forEach(
102
- ([name, component]) => __register(this, name, component)
79
+ ([name, component]) => this.__register(name, component)
103
80
  );
104
81
  }
105
82
  mountAll() {
@@ -111,6 +88,32 @@ var ChildrenManager = class extends import_AbstractManager.AbstractManager {
111
88
  destroyAll() {
112
89
  __triggerHookForAll(this, "$destroy");
113
90
  }
91
+ __triggerHook(hook, instance, name) {
92
+ if (hook === "$update" && !instance.$isMounted) {
93
+ hook = "$mount";
94
+ }
95
+ if (hook === "$update" || hook === "$destroy") {
96
+ this.__eventsManager.unbindChild(name, instance);
97
+ }
98
+ if (hook === "$update" || hook === "$mount") {
99
+ this.__eventsManager.bindChild(name, instance);
100
+ }
101
+ instance[hook]();
102
+ }
103
+ __register(name, component) {
104
+ Object.defineProperty(this, name, {
105
+ enumerable: true,
106
+ configurable: true,
107
+ get: () => this.__getValue(name, component)
108
+ });
109
+ }
110
+ __getValue(name, component) {
111
+ const elements = (0, import_utils.getComponentElements)(name, this.__element);
112
+ if (elements.length === 0) {
113
+ return [];
114
+ }
115
+ return elements.map((element) => __getChild(this, element, component, name)).filter((instance) => instance !== "terminated");
116
+ }
114
117
  };
115
118
  if (module.exports.default) module.exports = module.exports.default;
116
119
  //# sourceMappingURL=ChildrenManager.cjs.map