@studiometa/js-toolkit 1.7.2 → 2.0.0-alpha.10

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 (237) hide show
  1. package/Base/index.d.ts +217 -0
  2. package/Base/index.js +237 -0
  3. package/Base/managers/ChildrenManager.d.ts +108 -0
  4. package/Base/managers/ChildrenManager.js +124 -0
  5. package/Base/managers/EventsManager.d.ts +190 -0
  6. package/Base/managers/EventsManager.js +195 -0
  7. package/Base/managers/OptionsManager.d.ts +120 -0
  8. package/Base/managers/OptionsManager.js +180 -0
  9. package/Base/managers/RefsManager.d.ts +84 -0
  10. package/Base/managers/RefsManager.js +83 -0
  11. package/{abstracts/Base/classes/Services.d.ts → Base/managers/ServicesManager.d.ts} +22 -7
  12. package/Base/managers/ServicesManager.js +115 -0
  13. package/{abstracts/Base → Base}/utils.d.ts +0 -30
  14. package/Base/utils.js +43 -0
  15. package/README.md +12 -70
  16. package/decorators/index.js +1 -2
  17. package/decorators/withBreakpointManager.d.ts +5 -5
  18. package/decorators/withBreakpointManager.js +41 -79
  19. package/decorators/withBreakpointObserver.d.ts +4 -4
  20. package/decorators/withBreakpointObserver.js +54 -77
  21. package/decorators/withDrag.d.ts +6 -6
  22. package/decorators/withDrag.js +17 -41
  23. package/decorators/withExtraConfig.d.ts +6 -6
  24. package/decorators/withExtraConfig.js +2 -24
  25. package/decorators/withIntersectionObserver.d.ts +4 -4
  26. package/decorators/withIntersectionObserver.js +17 -60
  27. package/decorators/withMountWhenInView.d.ts +8 -8
  28. package/decorators/withMountWhenInView.js +23 -51
  29. package/helpers/createApp.d.ts +4 -4
  30. package/helpers/createApp.js +10 -12
  31. package/helpers/importOnInteraction.d.ts +6 -6
  32. package/helpers/importOnInteraction.js +7 -8
  33. package/helpers/importWhenIdle.d.ts +4 -4
  34. package/helpers/importWhenIdle.js +7 -8
  35. package/helpers/importWhenVisible.d.ts +6 -6
  36. package/helpers/importWhenVisible.js +9 -16
  37. package/helpers/index.d.ts +1 -3
  38. package/helpers/index.js +1 -4
  39. package/helpers/utils.js +2 -3
  40. package/index.d.ts +19 -5
  41. package/index.js +5 -6
  42. package/index.modern.js +1 -3230
  43. package/index.umd.js +1 -3586
  44. package/package.json +3 -6
  45. package/{abstracts → services}/Service.d.ts +0 -0
  46. package/services/Service.js +63 -0
  47. package/services/drag.js +144 -180
  48. package/services/index.js +1 -2
  49. package/services/key.js +56 -98
  50. package/services/load.d.ts +1 -1
  51. package/services/load.js +22 -51
  52. package/services/pointer.js +118 -157
  53. package/services/raf.js +37 -65
  54. package/services/resize.js +46 -98
  55. package/services/scroll.js +81 -120
  56. package/utils/collide/boundingRectToCircle.js +7 -6
  57. package/utils/collide/collideCircleCircle.js +1 -2
  58. package/utils/collide/collideCircleRect.js +1 -2
  59. package/utils/collide/collidePointCircle.js +1 -2
  60. package/utils/collide/collidePointRect.js +1 -2
  61. package/utils/collide/collideRectRect.js +1 -2
  62. package/utils/collide/index.js +1 -2
  63. package/utils/css/classes.js +2 -3
  64. package/utils/css/index.js +1 -2
  65. package/utils/css/matrix.js +1 -2
  66. package/utils/css/styles.js +3 -8
  67. package/utils/css/transition.js +67 -140
  68. package/utils/debounce.js +3 -4
  69. package/utils/focusTrap.js +4 -5
  70. package/utils/history.js +12 -19
  71. package/utils/index.d.ts +2 -1
  72. package/utils/index.js +2 -2
  73. package/utils/keyCodes.js +1 -2
  74. package/utils/math/clamp.js +1 -2
  75. package/utils/math/clamp01.js +1 -2
  76. package/utils/math/damp.js +1 -2
  77. package/utils/math/index.js +1 -2
  78. package/utils/math/inertiaFinalValue.js +1 -2
  79. package/utils/math/lerp.js +1 -2
  80. package/utils/math/map.js +1 -2
  81. package/utils/math/round.js +1 -2
  82. package/utils/memoize.d.ts +30 -0
  83. package/utils/memoize.js +30 -0
  84. package/utils/nextFrame.js +4 -9
  85. package/utils/object/autoBind.js +11 -19
  86. package/utils/object/getAllProperties.d.ts +6 -3
  87. package/utils/object/getAllProperties.js +10 -8
  88. package/utils/object/index.js +1 -2
  89. package/utils/object/isObject.js +2 -4
  90. package/utils/string/index.js +1 -2
  91. package/utils/string/withLeadingCharacters.js +1 -2
  92. package/utils/string/withLeadingSlash.js +1 -2
  93. package/utils/string/withTrailingCharacters.js +1 -2
  94. package/utils/string/withTrailingSlash.js +1 -2
  95. package/utils/string/withoutLeadingCharacters.js +1 -2
  96. package/utils/string/withoutLeadingCharactersRecursive.js +1 -2
  97. package/utils/string/withoutLeadingSlash.js +1 -2
  98. package/utils/string/withoutTrailingCharacters.js +1 -2
  99. package/utils/string/withoutTrailingCharactersRecursive.js +1 -2
  100. package/utils/string/withoutTrailingSlash.js +1 -2
  101. package/utils/throttle.js +2 -3
  102. package/abstracts/Base/children.d.ts +0 -16
  103. package/abstracts/Base/children.js +0 -66
  104. package/abstracts/Base/children.js.map +0 -1
  105. package/abstracts/Base/classes/Options.d.ts +0 -37
  106. package/abstracts/Base/classes/Options.js +0 -182
  107. package/abstracts/Base/classes/Options.js.map +0 -1
  108. package/abstracts/Base/classes/Services.js +0 -120
  109. package/abstracts/Base/classes/Services.js.map +0 -1
  110. package/abstracts/Base/components.d.ts +0 -22
  111. package/abstracts/Base/components.js +0 -67
  112. package/abstracts/Base/components.js.map +0 -1
  113. package/abstracts/Base/events.d.ts +0 -8
  114. package/abstracts/Base/events.js +0 -185
  115. package/abstracts/Base/events.js.map +0 -1
  116. package/abstracts/Base/index.d.ts +0 -176
  117. package/abstracts/Base/index.js +0 -215
  118. package/abstracts/Base/index.js.map +0 -1
  119. package/abstracts/Base/options.d.ts +0 -17
  120. package/abstracts/Base/options.js +0 -112
  121. package/abstracts/Base/options.js.map +0 -1
  122. package/abstracts/Base/refs.d.ts +0 -30
  123. package/abstracts/Base/refs.js +0 -60
  124. package/abstracts/Base/refs.js.map +0 -1
  125. package/abstracts/Base/utils.js +0 -102
  126. package/abstracts/Base/utils.js.map +0 -1
  127. package/abstracts/EventManager.d.ts +0 -41
  128. package/abstracts/EventManager.js +0 -88
  129. package/abstracts/EventManager.js.map +0 -1
  130. package/abstracts/Service.js +0 -82
  131. package/abstracts/Service.js.map +0 -1
  132. package/abstracts/index.d.ts +0 -4
  133. package/abstracts/index.js +0 -5
  134. package/abstracts/index.js.map +0 -1
  135. package/components/Accordion/Accordion.d.ts +0 -83
  136. package/components/Accordion/Accordion.js +0 -121
  137. package/components/Accordion/Accordion.js.map +0 -1
  138. package/components/Accordion/AccordionItem.d.ts +0 -122
  139. package/components/Accordion/AccordionItem.js +0 -327
  140. package/components/Accordion/AccordionItem.js.map +0 -1
  141. package/components/Accordion/index.d.ts +0 -27
  142. package/components/Accordion/index.js +0 -39
  143. package/components/Accordion/index.js.map +0 -1
  144. package/components/Cursor.d.ts +0 -138
  145. package/components/Cursor.js +0 -167
  146. package/components/Cursor.js.map +0 -1
  147. package/components/Draggable.d.ts +0 -49
  148. package/components/Draggable.js +0 -77
  149. package/components/Draggable.js.map +0 -1
  150. package/components/Modal.d.ts +0 -158
  151. package/components/Modal.js +0 -270
  152. package/components/Modal.js.map +0 -1
  153. package/components/Tabs.d.ts +0 -108
  154. package/components/Tabs.js +0 -195
  155. package/components/Tabs.js.map +0 -1
  156. package/components/index.d.ts +0 -6
  157. package/components/index.js +0 -7
  158. package/components/index.js.map +0 -1
  159. package/decorators/index.js.map +0 -1
  160. package/decorators/withBreakpointManager.js.map +0 -1
  161. package/decorators/withBreakpointObserver.js.map +0 -1
  162. package/decorators/withDrag.js.map +0 -1
  163. package/decorators/withExtraConfig.js.map +0 -1
  164. package/decorators/withIntersectionObserver.js.map +0 -1
  165. package/decorators/withMountWhenInView.js.map +0 -1
  166. package/full.d.ts +0 -10
  167. package/full.js +0 -12
  168. package/full.js.map +0 -1
  169. package/full.modern.js +0 -7523
  170. package/full.modern.js.map +0 -1
  171. package/full.umd.js +0 -8277
  172. package/full.umd.js.map +0 -1
  173. package/helpers/createApp.js.map +0 -1
  174. package/helpers/createBase.d.ts +0 -7
  175. package/helpers/createBase.js +0 -7
  176. package/helpers/createBase.js.map +0 -1
  177. package/helpers/defineComponent.d.ts +0 -11
  178. package/helpers/defineComponent.js +0 -68
  179. package/helpers/defineComponent.js.map +0 -1
  180. package/helpers/importOnInteraction.js.map +0 -1
  181. package/helpers/importWhenIdle.js.map +0 -1
  182. package/helpers/importWhenVisible.js.map +0 -1
  183. package/helpers/index.js.map +0 -1
  184. package/helpers/utils.js.map +0 -1
  185. package/index.js.map +0 -1
  186. package/index.modern.js.map +0 -1
  187. package/index.umd.js.map +0 -1
  188. package/services/drag.js.map +0 -1
  189. package/services/index.js.map +0 -1
  190. package/services/key.js.map +0 -1
  191. package/services/load.js.map +0 -1
  192. package/services/pointer.js.map +0 -1
  193. package/services/raf.js.map +0 -1
  194. package/services/resize.js.map +0 -1
  195. package/services/scroll.js.map +0 -1
  196. package/utils/collide/boundingRectToCircle.js.map +0 -1
  197. package/utils/collide/collideCircleCircle.js.map +0 -1
  198. package/utils/collide/collideCircleRect.js.map +0 -1
  199. package/utils/collide/collidePointCircle.js.map +0 -1
  200. package/utils/collide/collidePointRect.js.map +0 -1
  201. package/utils/collide/collideRectRect.js.map +0 -1
  202. package/utils/collide/index.js.map +0 -1
  203. package/utils/css/classes.js.map +0 -1
  204. package/utils/css/index.js.map +0 -1
  205. package/utils/css/matrix.js.map +0 -1
  206. package/utils/css/styles.js.map +0 -1
  207. package/utils/css/transition.js.map +0 -1
  208. package/utils/debounce.js.map +0 -1
  209. package/utils/focusTrap.js.map +0 -1
  210. package/utils/history.js.map +0 -1
  211. package/utils/index.js.map +0 -1
  212. package/utils/keyCodes.js.map +0 -1
  213. package/utils/math/clamp.js.map +0 -1
  214. package/utils/math/clamp01.js.map +0 -1
  215. package/utils/math/damp.js.map +0 -1
  216. package/utils/math/index.js.map +0 -1
  217. package/utils/math/inertiaFinalValue.js.map +0 -1
  218. package/utils/math/lerp.js.map +0 -1
  219. package/utils/math/map.js.map +0 -1
  220. package/utils/math/round.js.map +0 -1
  221. package/utils/nextFrame.js.map +0 -1
  222. package/utils/object/autoBind.js.map +0 -1
  223. package/utils/object/getAllProperties.js.map +0 -1
  224. package/utils/object/index.js.map +0 -1
  225. package/utils/object/isObject.js.map +0 -1
  226. package/utils/string/index.js.map +0 -1
  227. package/utils/string/withLeadingCharacters.js.map +0 -1
  228. package/utils/string/withLeadingSlash.js.map +0 -1
  229. package/utils/string/withTrailingCharacters.js.map +0 -1
  230. package/utils/string/withTrailingSlash.js.map +0 -1
  231. package/utils/string/withoutLeadingCharacters.js.map +0 -1
  232. package/utils/string/withoutLeadingCharactersRecursive.js.map +0 -1
  233. package/utils/string/withoutLeadingSlash.js.map +0 -1
  234. package/utils/string/withoutTrailingCharacters.js.map +0 -1
  235. package/utils/string/withoutTrailingCharactersRecursive.js.map +0 -1
  236. package/utils/string/withoutTrailingSlash.js.map +0 -1
  237. package/utils/throttle.js.map +0 -1
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @typedef {import('../index.js').default} Base
3
+ * @typedef {import('./EventsManager.js').default} EventsManager
4
+ */
5
+ /**
6
+ * Refs Manager
7
+ */
8
+ export default class RefsManager {
9
+ /**
10
+ * Normalize the name of ref.
11
+ *
12
+ * @param {string} name The original name.
13
+ * @return {string} The normalized name.
14
+ */
15
+ static normalizeRefName(name: string): string;
16
+ /**
17
+ * Class constructor.
18
+ *
19
+ * @param {Base} base
20
+ * The base instance tied to this manager.
21
+ * @param {HTMLElement} element
22
+ * The root element of a Base component.
23
+ * @param {string[]} refs
24
+ * The list of refs of this component.
25
+ * @param {EventsManager} eventsManager
26
+ */
27
+ constructor(base: Base, element: HTMLElement, refs: string[], eventsManager: EventsManager);
28
+ /**
29
+ * @type {HTMLElement}
30
+ * @private
31
+ */
32
+ private __element;
33
+ /**
34
+ * @type {string[]}
35
+ * @private
36
+ */
37
+ private __refs;
38
+ /**
39
+ * @type {Base}
40
+ * @private
41
+ */
42
+ private __base;
43
+ /**
44
+ * @type {EventsManager}
45
+ * @private
46
+ */
47
+ private __eventsManager;
48
+ /**
49
+ * Register all refs.
50
+ *
51
+ * @return {void}
52
+ */
53
+ registerAll(): void;
54
+ /**
55
+ * Unregister all refs.
56
+ *
57
+ * @return {void}
58
+ */
59
+ unregisterAll(): void;
60
+ /**
61
+ * Register one ref.
62
+ *
63
+ * @param {string} refName The ref name.
64
+ * @private
65
+ */
66
+ private __register;
67
+ /**
68
+ * Unregister one ref.
69
+ *
70
+ * @param {string} refName The ref name.
71
+ * @private
72
+ */
73
+ private __unregister;
74
+ /**
75
+ * Filter refs belonging to the related Base instance.
76
+ *
77
+ * @param {HTMLElement} ref The ref to test.
78
+ * @return {boolean}
79
+ * @private
80
+ */
81
+ private __filterRefsBelongingToInstance;
82
+ }
83
+ export type Base = import('../index.js').default;
84
+ export type EventsManager = import('./EventsManager.js').default;
@@ -0,0 +1,83 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ export default class RefsManager {
3
+ constructor(base, element, refs, eventsManager) {
4
+ _defineProperty(this, "__element", void 0);
5
+
6
+ _defineProperty(this, "__refs", void 0);
7
+
8
+ _defineProperty(this, "__base", void 0);
9
+
10
+ _defineProperty(this, "__eventsManager", void 0);
11
+
12
+ Object.defineProperties(this, {
13
+ __element: {
14
+ enumerable: false,
15
+ writable: false,
16
+ value: element
17
+ },
18
+ __refs: {
19
+ enumerable: false,
20
+ writable: false,
21
+ value: refs
22
+ },
23
+ __base: {
24
+ enumerable: false,
25
+ writable: false,
26
+ value: base
27
+ },
28
+ __eventsManager: {
29
+ enumerable: false,
30
+ writable: false,
31
+ value: eventsManager
32
+ }
33
+ });
34
+ }
35
+
36
+ registerAll() {
37
+ this.__refs.forEach(refName => this.__register(refName));
38
+ }
39
+
40
+ unregisterAll() {
41
+ this.__refs.forEach(refName => this.__unregister(refName));
42
+ }
43
+
44
+ __register(refName) {
45
+ var isMultiple = refName.endsWith('[]');
46
+ var propName = RefsManager.normalizeRefName(refName);
47
+ var refs = Array.from(this.__element.querySelectorAll("[data-ref=\"".concat(refName, "\"]"))).filter(ref => this.__filterRefsBelongingToInstance(ref));
48
+
49
+ if (!isMultiple && refs.length > 1) {
50
+ console.warn("[".concat(this.__base.$options.name, "]"), "The \"".concat(refName, "\" ref has been found multiple times."), 'Did you forgot to add the `[]` suffix to its name?');
51
+ }
52
+
53
+ this.__eventsManager.bindRef(refName, refs);
54
+
55
+ Object.defineProperty(this, propName, {
56
+ value: isMultiple || refs.length > 1 ? refs : refs[0],
57
+ enumerable: true,
58
+ configurable: true
59
+ });
60
+ }
61
+
62
+ __unregister(refName) {
63
+ var propName = RefsManager.normalizeRefName(refName);
64
+ var refs = Array.isArray(this[propName]) ? this[propName] : [this[propName]];
65
+
66
+ this.__eventsManager.unbindRef(refName, refs);
67
+ }
68
+
69
+ static normalizeRefName(name) {
70
+ return name.endsWith('[]') ? name.replace(/\[\]$/, '') : name;
71
+ }
72
+
73
+ __filterRefsBelongingToInstance(ref) {
74
+ var ancestor = ref.parentElement;
75
+
76
+ while (ancestor && ancestor.dataset.component === undefined) {
77
+ ancestor = ancestor.parentElement;
78
+ }
79
+
80
+ return ancestor === null || ancestor === this.__element;
81
+ }
82
+
83
+ }
@@ -4,12 +4,25 @@
4
4
  /**
5
5
  * Services management for the Base class.
6
6
  */
7
- export default class Services {
7
+ export default class ServicesManager {
8
8
  /**
9
9
  * Class constructor.
10
10
  * @param {Base} instance The Base instance.
11
11
  */
12
12
  constructor(instance: Base);
13
+ /**
14
+ * @type {Base}
15
+ * @private
16
+ */
17
+ private __base;
18
+ /**
19
+ * @type {Record<string, () => ServiceInterface>}
20
+ */
21
+ __customServices: Record<string, () => ServiceInterface>;
22
+ /**
23
+ * @return {Record<string, () => ServiceInterface>}
24
+ */
25
+ get __services(): Record<string, () => ServiceInterface>;
13
26
  /**
14
27
  * Test if the given service is registered.
15
28
  *
@@ -46,20 +59,22 @@ export default class Services {
46
59
  /**
47
60
  * Register a new service to be enabled/disabled.
48
61
  *
49
- * @param {string} name The name of the service hook.
50
- * @param {() => ServiceInterface} useFunction The `use...` function for the service.
62
+ * @param {string} name
63
+ * The name of the service hook.
64
+ * @param {() => ServiceInterface} useFunction
65
+ * The `use...` function for the service.
51
66
  */
52
67
  register(name: string, useFunction: () => ServiceInterface): void;
53
68
  /**
54
69
  * Unregister a new service to be enabled disabled.
55
70
  *
56
- * @param {string} name The name of the service hooK
71
+ * @param {string} name
72
+ * The name of the service hook.
57
73
  */
58
74
  unregister(name: string): void;
59
- #private;
60
75
  }
61
76
  export type Base = import('../index').default;
62
- export type ServiceInterface = import('../../../services').ServiceInterface;
77
+ export type ServiceInterface = import('../../services').ServiceInterface;
63
78
  export type ServiceName = keyof {
64
- [x: string]: () => import("../../../services").ServiceInterface;
79
+ [x: string]: () => import("../../services").ServiceInterface;
65
80
  };
@@ -0,0 +1,115 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
+
7
+ import usePointer from '../../services/pointer.js';
8
+ import useRaf from '../../services/raf.js';
9
+ import useResize from '../../services/resize.js';
10
+ import useScroll from '../../services/scroll.js';
11
+ import useKey from '../../services/key.js';
12
+ import useLoad from '../../services/load.js';
13
+ import { hasMethod, callMethod } from '../utils.js';
14
+ var SERVICES_MAP = {
15
+ scrolled: useScroll,
16
+ resized: useResize,
17
+ ticked: useRaf,
18
+ moved: usePointer,
19
+ keyed: useKey,
20
+ loaded: useLoad
21
+ };
22
+ var SERVICE_NAMES = Object.keys(SERVICES_MAP);
23
+ export default class ServicesManager {
24
+ get __services() {
25
+ return _objectSpread(_objectSpread({}, this.__customServices), SERVICES_MAP);
26
+ }
27
+
28
+ constructor(instance) {
29
+ _defineProperty(this, "__base", void 0);
30
+
31
+ _defineProperty(this, "__customServices", {});
32
+
33
+ Object.defineProperties(this, {
34
+ __base: {
35
+ enumerable: false,
36
+ writable: false,
37
+ value: instance
38
+ }
39
+ });
40
+ }
41
+
42
+ has(service) {
43
+ if (!hasMethod(this.__base, service) && !this.__services[service]) {
44
+ return false;
45
+ }
46
+
47
+ var {
48
+ has
49
+ } = this.__services[service]();
50
+
51
+ return has(this.__base.$id);
52
+ }
53
+
54
+ enable(service) {
55
+ if (this.has(service)) {
56
+ return this.disable.bind(this, service);
57
+ }
58
+
59
+ if (!hasMethod(this.__base, service) || !this.__services[service]) {
60
+ return function noop() {};
61
+ }
62
+
63
+ var {
64
+ add
65
+ } = this.__services[service]();
66
+
67
+ var self = this;
68
+
69
+ function serviceHandler() {
70
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
71
+ args[_key] = arguments[_key];
72
+ }
73
+
74
+ callMethod(self.__base, service, ...args);
75
+ }
76
+
77
+ add(this.__base.$id, serviceHandler);
78
+ return this.disable.bind(this, service);
79
+ }
80
+
81
+ enableAll() {
82
+ return Object.keys(this.__services).map(serviceName => this.enable(serviceName));
83
+ }
84
+
85
+ disableAll() {
86
+ Object.keys(this.__services).forEach(serviceName => {
87
+ this.disable(serviceName);
88
+ });
89
+ }
90
+
91
+ disable(service) {
92
+ if (!this.__services[service]) {
93
+ return;
94
+ }
95
+
96
+ var {
97
+ remove
98
+ } = this.__services[service]();
99
+
100
+ remove(this.__base.$id);
101
+ }
102
+
103
+ register(name, useFunction) {
104
+ this.__customServices[name] = useFunction;
105
+ }
106
+
107
+ unregister(name) {
108
+ if (SERVICE_NAMES.includes(name)) {
109
+ throw new Error("[ServicesManager] The `".concat(name, "` core service can not be unregistered."));
110
+ }
111
+
112
+ delete this.__customServices[name];
113
+ }
114
+
115
+ }
@@ -1,35 +1,6 @@
1
1
  /**
2
2
  * @typedef {import('./index.js').default} Base
3
- * @typedef {import('./index.js').BaseConfig} BaseConfig
4
3
  */
5
- /**
6
- * Get the config from a Base instance, either the new static one or the old getter one.
7
- *
8
- * @param {Base} instance The instance to get the config from.
9
- * @return {BaseConfig} A Base class configuration object.
10
- */
11
- export function getConfig(instance: Base): BaseConfig;
12
- /**
13
- * Display a console warning for the given instance.
14
- *
15
- * @param {Base} instance A Base instance.
16
- * @param {...String} msg Values to display in the console.
17
- */
18
- export function warn(instance: Base, ...msg: string[]): void;
19
- /**
20
- * Display a console log for the given instance.
21
- *
22
- * @param {Base} instance The instance to log information from.
23
- * @param {...any} msg The data to print to the console.
24
- */
25
- export function log(instance: Base, ...msg: any[]): void;
26
- /**
27
- * Verbose debug for the component.
28
- *
29
- * @param {Base} instance The instance to debug.
30
- * @param {...any} args The data to print.
31
- */
32
- export function debug(instance: Base, ...args: any[]): void;
33
4
  /**
34
5
  * Test if an object has a method.
35
6
  *
@@ -58,4 +29,3 @@ export function callMethod(instance: Base, method: string, ...args: any[]): impo
58
29
  */
59
30
  export function getComponentElements(nameOrSelector: string, element?: HTMLElement | Document): Array<HTMLElement>;
60
31
  export type Base = import('./index.js').default;
61
- export type BaseConfig = import('./index.js').BaseConfig;
package/Base/utils.js ADDED
@@ -0,0 +1,43 @@
1
+ export function hasMethod(obj, name) {
2
+ return typeof obj[name] === 'function';
3
+ }
4
+ export function callMethod(instance, method) {
5
+ for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
6
+ args[_key - 2] = arguments[_key];
7
+ }
8
+
9
+ instance.__debug('callMethod', method, ...args);
10
+
11
+ if (method === 'destroyed' && !instance.$isMounted || method === 'mounted' && instance.$isMounted) {
12
+ instance.__debug('not', method, 'because the method has already been triggered once.');
13
+
14
+ return instance;
15
+ }
16
+
17
+ instance.$emit(method, ...args);
18
+
19
+ if (!hasMethod(instance, method)) {
20
+ return instance;
21
+ }
22
+
23
+ instance[method].call(instance, ...args);
24
+
25
+ instance.__debug(method, instance, ...args);
26
+
27
+ return instance;
28
+ }
29
+ export function getComponentElements(nameOrSelector) {
30
+ var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
31
+ var selector = "[data-component=\"".concat(nameOrSelector, "\"]");
32
+ var elements = [];
33
+
34
+ try {
35
+ elements = Array.from(element.querySelectorAll(selector));
36
+ } catch (_unused) {}
37
+
38
+ if (elements.length === 0) {
39
+ elements = Array.from(element.querySelectorAll(nameOrSelector));
40
+ }
41
+
42
+ return elements;
43
+ }
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # JS Toolkit
2
2
 
3
3
  [![NPM Version](https://img.shields.io/npm/v/@studiometa/js-toolkit.svg?style=flat-square)](https://www.npmjs.com/package/@studiometa/js-toolkit/)
4
- [![Dependency Status](https://img.shields.io/david/studiometa/js-toolkit.svg?label=deps&style=flat-square)](https://david-dm.org/studiometa/js-toolkit)
5
- [![devDependency Status](https://img.shields.io/david/dev/studiometa/js-toolkit.svg?label=devDeps&style=flat-square)](https://david-dm.org/studiometa/js-toolkit?type=dev)
4
+ [![Size](https://img.shields.io/bundlephobia/minzip/@studiometa/js-toolkit?label=size&style=flat-square)](https://bundlephobia.com/package/@studiometa/js-toolkit)
5
+ [![Dependency Status](https://img.shields.io/librariesio/release/npm/@studiometa/js-toolkit?style=flat-square)](https://david-dm.org/studiometa/js-toolkit)
6
6
  ![Codecov](https://img.shields.io/codecov/c/github/studiometa/js-toolkit?style=flat-square)
7
7
 
8
8
  > A set of useful little bits of JavaScript to boost your project! 🚀
@@ -15,29 +15,19 @@ Install the latest version via NPM:
15
15
  npm install @studiometa/js-toolkit
16
16
  ```
17
17
 
18
- The package can be used directly with the [Skypack CDN](https://www.skypack.dev) as follow:
19
-
20
- ```html
21
- <script type="module">
22
- // Import the Base class
23
- import Base from 'https://cdn.skypack.dev/@studiometa/js-toolkit/';
24
- // Import the full toolkit
25
- import * as components from 'https://cdn.skypack.dev/@studiometa/js-toolkit/components';
26
- import * as decorators from 'https://cdn.skypack.dev/@studiometa/js-toolkit/decorators';
27
- import * as services from 'https://cdn.skypack.dev/@studiometa/js-toolkit/services';
28
- import * as utils from 'https://cdn.skypack.dev/@studiometa/js-toolkit/utils';
29
- </script>
30
- ```
31
-
32
18
  ## Usage
33
19
 
34
- ### Modern JS with bundler
35
-
36
- Import the `Base` class to create your components from your `node_modules`:
20
+ Import the `Base` class and extend it to create your components:
37
21
 
38
22
  ```js
39
- import Base from '@studiometa/js-toolkit';
40
- import Modal from '@studiometa/js-toolkit/components/Modal';
23
+ import { Base } from '@studiometa/js-toolkit';
24
+ import Modal from '@studiometa/ui/Modal';
25
+
26
+ class Component {
27
+ static config = {
28
+ name: 'Component',
29
+ }
30
+ }
41
31
 
42
32
  class App extends Base {
43
33
  static config = {
@@ -46,6 +36,7 @@ class App extends Base {
46
36
  debug: true,
47
37
  components: {
48
38
  Modal,
39
+ Component,
49
40
  },
50
41
  refs: ['btn', 'items[]'],
51
42
  options: {
@@ -90,53 +81,4 @@ export default new App(document.querySelector('#app'));
90
81
 
91
82
  Read the [documentation](https://js-toolkit.meta.fr/) to learn more.
92
83
 
93
- ### Modern JS in browser
94
-
95
- Two modern builds are provided for prototyping purpose, they can be used as follow:
96
84
 
97
- ```html
98
- <script type="module">
99
- // Import the Base class
100
- import Base from 'https://cdn.skypack.dev/@studiometa/js-toolkit/';
101
- // Import the full toolkit
102
- import Modal from 'https://cdn.skypack.dev/@studiometa/js-toolkit/components/Modal';
103
- </script>
104
- ```
105
-
106
- ### Legacy JS
107
-
108
- Two UMD builds are also provided to be used in legacy projects.
109
-
110
- ```html
111
- <div id="app">
112
- <button data-ref="btn">Add more</button>
113
- <input data-ref="input" value="0" readonly />
114
- <div data-component="Component"></div>
115
- </div>
116
- <script src="https://unpkg.com/@studiometa/js-toolkit/index.umd.js"></script>
117
- <script>
118
- var Component = Base.defineComponent({
119
- config: {
120
- name: 'Component',
121
- },
122
- });
123
-
124
- Base.createBase(document.querySelector('#app'), {
125
- config: {
126
- name: 'App',
127
- log: true,
128
- components: {
129
- Component: Component,
130
- },
131
- },
132
- mounted: function() {
133
- this.$log('mounted');
134
- },
135
- methods: {
136
- onBtnClick: function() {
137
- this.$refs.input.value = Number(this.$refs.input.value) + 1;
138
- },
139
- },
140
- });
141
- </script>
142
- ```
@@ -4,5 +4,4 @@ import withDrag from './withDrag.js';
4
4
  import withExtraConfig from './withExtraConfig.js';
5
5
  import withIntersectionObserver from './withIntersectionObserver.js';
6
6
  import withMountWhenInView from './withMountWhenInView.js';
7
- export { withBreakpointManager, withBreakpointObserver, withDrag, withExtraConfig, withIntersectionObserver, withMountWhenInView };
8
- //# sourceMappingURL=index.js.map
7
+ export { withBreakpointManager, withBreakpointObserver, withDrag, withExtraConfig, withIntersectionObserver, withMountWhenInView };
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * BreakpointManager class.
3
- * @template {BaseComponent} T
3
+ * @template {BaseConstructor} T
4
4
  * @param {T} BaseClass
5
- * @param {Array<[String, BaseComponent]>} breakpoints
5
+ * @param {Array<[String, BaseConstructor]>} breakpoints
6
6
  * @return {T}
7
7
  */
8
- export default function withBreakpointManager<T extends typeof import("../abstracts/Base").default>(BaseClass: T, breakpoints: Array<[string, BaseComponent]>): T;
9
- export type Base = import('../abstracts/Base').default;
10
- export type BaseComponent = import('../abstracts/Base').BaseComponent;
8
+ export default function withBreakpointManager<T extends typeof import("../Base").default>(BaseClass: T, breakpoints: Array<[string, BaseConstructor]>): T;
9
+ export type Base = import('../Base').default;
10
+ export type BaseConstructor = import('../Base').BaseConstructor;