@studiometa/js-toolkit 2.2.3 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/Base/index.cjs +29 -36
  2. package/Base/index.d.ts +0 -8
  3. package/Base/index.js +18 -25
  4. package/Base/managers/EventsManager.cjs +35 -36
  5. package/Base/managers/EventsManager.js +35 -36
  6. package/Base/managers/OptionsManager.cjs +19 -13
  7. package/Base/managers/OptionsManager.js +19 -13
  8. package/Base/managers/RefsManager.cjs +8 -5
  9. package/Base/managers/RefsManager.js +8 -5
  10. package/Base/managers/ResponsiveOptionsManager.cjs +4 -1
  11. package/Base/managers/ResponsiveOptionsManager.js +4 -1
  12. package/Base/managers/ServicesManager.cjs +5 -2
  13. package/Base/managers/ServicesManager.js +6 -3
  14. package/Base/utils.cjs +23 -1
  15. package/Base/utils.d.ts +25 -0
  16. package/Base/utils.js +23 -1
  17. package/README.md +3 -3
  18. package/decorators/withBreakpointManager.cjs +15 -5
  19. package/decorators/withBreakpointManager.js +15 -5
  20. package/decorators/withBreakpointObserver.cjs +8 -2
  21. package/decorators/withBreakpointObserver.js +8 -2
  22. package/decorators/withVue2.cjs +10 -3
  23. package/decorators/withVue2.js +10 -3
  24. package/helpers/getDirectChildren.cjs +46 -0
  25. package/helpers/getDirectChildren.d.ts +24 -0
  26. package/helpers/getDirectChildren.js +24 -0
  27. package/helpers/importOnInteraction.cjs +2 -1
  28. package/helpers/importOnInteraction.js +2 -1
  29. package/helpers/importWhenVisible.cjs +2 -1
  30. package/helpers/importWhenVisible.js +2 -1
  31. package/helpers/index.cjs +2 -0
  32. package/helpers/index.d.ts +1 -0
  33. package/helpers/index.js +1 -0
  34. package/helpers/utils.cjs +3 -2
  35. package/helpers/utils.js +3 -2
  36. package/package.json +4 -1
  37. package/services/raf.cjs +2 -5
  38. package/services/raf.js +1 -1
  39. package/utils/css/animate.cjs +31 -92
  40. package/utils/css/animate.d.ts +4 -16
  41. package/utils/css/animate.js +28 -89
  42. package/utils/css/classes.cjs +2 -1
  43. package/utils/css/classes.js +2 -1
  44. package/utils/css/styles.cjs +2 -5
  45. package/utils/css/styles.js +1 -1
  46. package/utils/css/transform.cjs +13 -16
  47. package/utils/css/transform.js +1 -1
  48. package/utils/css/transition.cjs +5 -3
  49. package/utils/css/transition.js +5 -3
  50. package/utils/focusTrap.cjs +2 -1
  51. package/utils/focusTrap.js +2 -1
  52. package/utils/{isFunction.cjs → has.cjs} +7 -7
  53. package/utils/has.d.ts +6 -0
  54. package/utils/has.js +6 -0
  55. package/utils/history.cjs +5 -7
  56. package/utils/history.js +4 -3
  57. package/utils/index.cjs +5 -5
  58. package/utils/index.d.ts +3 -2
  59. package/utils/index.js +5 -5
  60. package/utils/{isDefined.cjs → is.cjs} +20 -8
  61. package/utils/is.d.ts +8 -0
  62. package/utils/is.js +18 -0
  63. package/utils/math/inertiaFinalValue.cjs +5 -3
  64. package/utils/math/inertiaFinalValue.js +2 -3
  65. package/utils/nextFrame.cjs +5 -3
  66. package/utils/nextFrame.js +5 -3
  67. package/utils/nextMicrotask.cjs +2 -1
  68. package/utils/nextMicrotask.js +2 -1
  69. package/utils/nextTick.cjs +2 -1
  70. package/utils/nextTick.js +2 -1
  71. package/utils/object/autoBind.cjs +3 -2
  72. package/utils/object/autoBind.js +3 -2
  73. package/utils/object/getAllProperties.cjs +2 -1
  74. package/utils/object/getAllProperties.js +2 -1
  75. package/utils/object/index.cjs +1 -3
  76. package/utils/object/index.d.ts +0 -1
  77. package/utils/object/index.js +1 -3
  78. package/utils/tween.cjs +114 -0
  79. package/utils/tween.d.ts +25 -0
  80. package/utils/tween.js +89 -0
  81. package/utils/isDefined.d.ts +0 -7
  82. package/utils/isDefined.js +0 -6
  83. package/utils/isFunction.d.ts +0 -7
  84. package/utils/isFunction.js +0 -6
  85. package/utils/object/isObject.cjs +0 -28
  86. package/utils/object/isObject.d.ts +0 -7
  87. package/utils/object/isObject.js +0 -6
package/Base/index.cjs CHANGED
@@ -36,9 +36,8 @@ var import_RefsManager = __toESM(require("./managers/RefsManager.cjs"), 1);
36
36
  var import_ServicesManager = __toESM(require("./managers/ServicesManager.cjs"), 1);
37
37
  var import_EventsManager = __toESM(require("./managers/EventsManager.cjs"), 1);
38
38
  var import_OptionsManager = __toESM(require("./managers/OptionsManager.cjs"), 1);
39
- var import_noop = require("../utils/noop.cjs");
39
+ var import_utils2 = require("../utils/index.cjs");
40
40
  var id = 0;
41
- var isDev = typeof __DEV__ !== "undefined" && __DEV__;
42
41
  function createAndTestManagers(instance) {
43
42
  [
44
43
  {
@@ -68,7 +67,7 @@ function createAndTestManagers(instance) {
68
67
  }
69
68
  ].forEach(({ prop, constructorName, constructor }) => {
70
69
  instance[prop] = new instance.__managers[constructorName](instance);
71
- if (!(instance[prop] instanceof constructor)) {
70
+ if (import_utils2.isDev && !(instance[prop] instanceof constructor)) {
72
71
  throw new Error(`The \`$managers.${constructorName}\` must extend the \`${constructorName}\` class.`);
73
72
  }
74
73
  });
@@ -87,11 +86,17 @@ var Base = class extends EventTarget {
87
86
  __publicField(this, "__children");
88
87
  __publicField(this, "__events");
89
88
  if (!element) {
90
- throw new Error("The root element must be defined.");
89
+ if (import_utils2.isDev) {
90
+ throw new Error("The root element must be defined.");
91
+ }
92
+ return;
91
93
  }
92
94
  const { __config } = this;
93
95
  if (__config.name === "Base") {
94
- throw new Error("The `config.name` property is required.");
96
+ if (import_utils2.isDev) {
97
+ throw new Error("The `config.name` property is required.");
98
+ }
99
+ return;
95
100
  }
96
101
  this.$id = `${__config.name}-${id}`;
97
102
  id += 1;
@@ -101,7 +106,7 @@ var Base = class extends EventTarget {
101
106
  }
102
107
  this.$el.__base__.set(this.__ctor, this);
103
108
  createAndTestManagers(this);
104
- if (isDev) {
109
+ if (import_utils2.isDev) {
105
110
  this.__debug("constructor", this);
106
111
  }
107
112
  }
@@ -151,10 +156,10 @@ var Base = class extends EventTarget {
151
156
  return this.__children;
152
157
  }
153
158
  get $log() {
154
- return this.__options.log ? window.console.log.bind(window, `[${this.__config.name}]`) : import_noop.noop;
159
+ return this.__options.log ? window.console.log.bind(window, `[${this.__config.name}]`) : import_utils2.noop;
155
160
  }
156
161
  get __debug() {
157
- return isDev && this.__options.debug ? window.console.log.bind(window, `[debug] [${this.$id}]`) : import_noop.noop;
162
+ return import_utils2.isDev && this.__options.debug ? window.console.log.bind(window, `[debug] [${this.$id}]`) : import_utils2.noop;
158
163
  }
159
164
  get __managers() {
160
165
  return {
@@ -166,14 +171,14 @@ var Base = class extends EventTarget {
166
171
  };
167
172
  }
168
173
  __callMethod(method, ...args) {
169
- if (isDev) {
174
+ if (import_utils2.isDev) {
170
175
  this.__debug("callMethod", method, ...args);
171
176
  }
172
177
  this.$emit(method, ...args);
173
- if (typeof this[method] !== "function") {
178
+ if (!(0, import_utils2.isFunction)(this[method])) {
174
179
  return null;
175
180
  }
176
- if (isDev) {
181
+ if (import_utils2.isDev) {
177
182
  this.__debug(method, this, ...args);
178
183
  }
179
184
  return this[method].call(this, ...args);
@@ -188,7 +193,7 @@ var Base = class extends EventTarget {
188
193
  }
189
194
  this.$emit("before-mounted");
190
195
  this.$isMounted = true;
191
- if (isDev) {
196
+ if (import_utils2.isDev) {
192
197
  this.__debug("$mount");
193
198
  }
194
199
  this.$children.registerAll();
@@ -200,7 +205,7 @@ var Base = class extends EventTarget {
200
205
  return this;
201
206
  }
202
207
  $update() {
203
- if (isDev) {
208
+ if (import_utils2.isDev) {
204
209
  this.__debug("$update");
205
210
  }
206
211
  this.$refs.unregisterAll();
@@ -217,7 +222,7 @@ var Base = class extends EventTarget {
217
222
  return this;
218
223
  }
219
224
  this.$isMounted = false;
220
- if (isDev) {
225
+ if (import_utils2.isDev) {
221
226
  this.__debug("$destroy");
222
227
  }
223
228
  this.__events.unbindRootElement();
@@ -228,21 +233,16 @@ var Base = class extends EventTarget {
228
233
  return this;
229
234
  }
230
235
  $terminate() {
231
- if (isDev) {
236
+ if (import_utils2.isDev) {
232
237
  this.__debug("$terminate");
233
238
  }
234
239
  this.$destroy();
235
240
  this.__callMethod("terminated");
236
241
  this.$el.__base__.set(this.__ctor, "terminated");
237
242
  }
238
- __testEventIsDefined(event) {
239
- if (!(Array.isArray(this.__config.emits) && this.__config.emits.includes(event))) {
240
- console.warn(`[${this.__config.name}]`, `The "${event}" event is missing from the configuration.`);
241
- }
242
- }
243
243
  __addEmits(event) {
244
244
  const ctor = this.__ctor;
245
- if (Array.isArray(ctor.config.emits)) {
245
+ if ((0, import_utils2.isArray)(ctor.config.emits)) {
246
246
  ctor.config.emits.push(event);
247
247
  } else {
248
248
  ctor.config.emits = [event];
@@ -257,44 +257,37 @@ var Base = class extends EventTarget {
257
257
  return this.constructor;
258
258
  }
259
259
  $on(event, listener, options) {
260
- if (isDev) {
260
+ if (import_utils2.isDev) {
261
261
  this.__debug("$on", event, listener, options);
262
262
  }
263
- if (isDev) {
264
- this.__testEventIsDefined(event);
265
- }
266
263
  let set = this.__eventHandlers.get(event);
267
264
  if (!set) {
268
265
  set = /* @__PURE__ */ new Set();
269
266
  this.__eventHandlers.set(event, set);
270
267
  }
271
268
  set.add(listener);
272
- this.addEventListener(event, listener, options);
269
+ const target = (0, import_utils.getEventTarget)(this, event, this.__config);
270
+ target.addEventListener(event, listener, options);
273
271
  return () => {
274
272
  this.$off(event, listener, options);
275
273
  };
276
274
  }
277
275
  $off(event, listener, options) {
278
- if (isDev) {
276
+ if (import_utils2.isDev) {
279
277
  this.__debug("$off", event, listener);
280
278
  }
281
- if (isDev) {
282
- this.__testEventIsDefined(event);
283
- }
284
279
  this.__eventHandlers.get(event).delete(listener);
285
- this.removeEventListener(event, listener, options);
280
+ const target = (0, import_utils.getEventTarget)(this, event, this.__config);
281
+ target.removeEventListener(event, listener, options);
286
282
  }
287
283
  $emit(event, ...args) {
288
- if (isDev) {
284
+ if (import_utils2.isDev) {
289
285
  this.__debug("$emit", event, args);
290
286
  }
291
- if (isDev) {
292
- this.__testEventIsDefined(event);
293
- }
294
287
  this.dispatchEvent(new CustomEvent(event, { detail: args }));
295
288
  }
296
289
  static $factory(nameOrSelector) {
297
- if (!nameOrSelector) {
290
+ if (import_utils2.isDev && !nameOrSelector) {
298
291
  throw new Error("The $factory method requires a component\u2019s name or selector to be specified.");
299
292
  }
300
293
  return (0, import_utils.getComponentElements)(nameOrSelector).map((el) => new this(el).$mount());
package/Base/index.d.ts CHANGED
@@ -191,14 +191,6 @@ export default class Base extends EventTarget {
191
191
  * @returns {void}
192
192
  */
193
193
  $terminate(): void;
194
- /**
195
- * Test if the given event is configured and warn otherwise.
196
- *
197
- * @private
198
- * @param {string} event The event name.
199
- * @returns {void}
200
- */
201
- private __testEventIsDefined;
202
194
  /**
203
195
  * Add an emitted event.
204
196
  *
package/Base/index.js CHANGED
@@ -4,15 +4,14 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
6
  };
7
- import { getComponentElements } from "./utils.js";
7
+ import { getComponentElements, getEventTarget } from "./utils.js";
8
8
  import ChildrenManager from "./managers/ChildrenManager.js";
9
9
  import RefsManager from "./managers/RefsManager.js";
10
10
  import ServicesManager from "./managers/ServicesManager.js";
11
11
  import EventsManager from "./managers/EventsManager.js";
12
12
  import OptionsManager from "./managers/OptionsManager.js";
13
- import { noop } from "../utils/noop.js";
13
+ import { noop, isDev, isFunction, isArray } from "../utils/index.js";
14
14
  let id = 0;
15
- const isDev = typeof __DEV__ !== "undefined" && __DEV__;
16
15
  function createAndTestManagers(instance) {
17
16
  [
18
17
  {
@@ -42,7 +41,7 @@ function createAndTestManagers(instance) {
42
41
  }
43
42
  ].forEach(({ prop, constructorName, constructor }) => {
44
43
  instance[prop] = new instance.__managers[constructorName](instance);
45
- if (!(instance[prop] instanceof constructor)) {
44
+ if (isDev && !(instance[prop] instanceof constructor)) {
46
45
  throw new Error(`The \`$managers.${constructorName}\` must extend the \`${constructorName}\` class.`);
47
46
  }
48
47
  });
@@ -61,11 +60,17 @@ class Base extends EventTarget {
61
60
  __publicField(this, "__children");
62
61
  __publicField(this, "__events");
63
62
  if (!element) {
64
- throw new Error("The root element must be defined.");
63
+ if (isDev) {
64
+ throw new Error("The root element must be defined.");
65
+ }
66
+ return;
65
67
  }
66
68
  const { __config } = this;
67
69
  if (__config.name === "Base") {
68
- throw new Error("The `config.name` property is required.");
70
+ if (isDev) {
71
+ throw new Error("The `config.name` property is required.");
72
+ }
73
+ return;
69
74
  }
70
75
  this.$id = `${__config.name}-${id}`;
71
76
  id += 1;
@@ -144,7 +149,7 @@ class Base extends EventTarget {
144
149
  this.__debug("callMethod", method, ...args);
145
150
  }
146
151
  this.$emit(method, ...args);
147
- if (typeof this[method] !== "function") {
152
+ if (!isFunction(this[method])) {
148
153
  return null;
149
154
  }
150
155
  if (isDev) {
@@ -209,14 +214,9 @@ class Base extends EventTarget {
209
214
  this.__callMethod("terminated");
210
215
  this.$el.__base__.set(this.__ctor, "terminated");
211
216
  }
212
- __testEventIsDefined(event) {
213
- if (!(Array.isArray(this.__config.emits) && this.__config.emits.includes(event))) {
214
- console.warn(`[${this.__config.name}]`, `The "${event}" event is missing from the configuration.`);
215
- }
216
- }
217
217
  __addEmits(event) {
218
218
  const ctor = this.__ctor;
219
- if (Array.isArray(ctor.config.emits)) {
219
+ if (isArray(ctor.config.emits)) {
220
220
  ctor.config.emits.push(event);
221
221
  } else {
222
222
  ctor.config.emits = [event];
@@ -234,16 +234,14 @@ class Base extends EventTarget {
234
234
  if (isDev) {
235
235
  this.__debug("$on", event, listener, options);
236
236
  }
237
- if (isDev) {
238
- this.__testEventIsDefined(event);
239
- }
240
237
  let set = this.__eventHandlers.get(event);
241
238
  if (!set) {
242
239
  set = /* @__PURE__ */ new Set();
243
240
  this.__eventHandlers.set(event, set);
244
241
  }
245
242
  set.add(listener);
246
- this.addEventListener(event, listener, options);
243
+ const target = getEventTarget(this, event, this.__config);
244
+ target.addEventListener(event, listener, options);
247
245
  return () => {
248
246
  this.$off(event, listener, options);
249
247
  };
@@ -252,23 +250,18 @@ class Base extends EventTarget {
252
250
  if (isDev) {
253
251
  this.__debug("$off", event, listener);
254
252
  }
255
- if (isDev) {
256
- this.__testEventIsDefined(event);
257
- }
258
253
  this.__eventHandlers.get(event).delete(listener);
259
- this.removeEventListener(event, listener, options);
254
+ const target = getEventTarget(this, event, this.__config);
255
+ target.removeEventListener(event, listener, options);
260
256
  }
261
257
  $emit(event, ...args) {
262
258
  if (isDev) {
263
259
  this.__debug("$emit", event, args);
264
260
  }
265
- if (isDev) {
266
- this.__testEventIsDefined(event);
267
- }
268
261
  this.dispatchEvent(new CustomEvent(event, { detail: args }));
269
262
  }
270
263
  static $factory(nameOrSelector) {
271
- if (!nameOrSelector) {
264
+ if (isDev && !nameOrSelector) {
272
265
  throw new Error("The $factory method requires a component\u2019s name or selector to be specified.");
273
266
  }
274
267
  return getComponentElements(nameOrSelector).map((el) => new this(el).$mount());
@@ -33,6 +33,8 @@ __export(EventsManager_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(EventsManager_exports);
35
35
  var import_getAllProperties = __toESM(require("../../utils/object/getAllProperties.cjs"), 1);
36
+ var import_utils = require("../../utils/index.cjs");
37
+ var import_utils2 = require("../utils.cjs");
36
38
  var import_AbstractManager = __toESM(require("./AbstractManager.cjs"), 1);
37
39
  var import_RefsManager = require("./RefsManager.cjs");
38
40
  var names = /* @__PURE__ */ new Map();
@@ -56,12 +58,12 @@ function getRegex(regex) {
56
58
  }
57
59
  return regexes.get(regex);
58
60
  }
59
- function __getEventNameByMethod(that, method, name = "") {
61
+ function getEventNameByMethod(method, name = "") {
60
62
  const regex = getRegex(`^on${normalizeName(name)}([A-Z].*)$`);
61
63
  const [, event] = method.match(regex);
62
64
  return normalizeEventName(event);
63
65
  }
64
- function __getEventMethodsByName(that, name = "") {
66
+ function getEventMethodsByName(that, name = "") {
65
67
  const regex = getRegex(`^on${normalizeName(name)}[A-Z].*$`);
66
68
  const key = regex.toString();
67
69
  let methods = that.__methodsCache.get(key);
@@ -71,29 +73,28 @@ function __getEventMethodsByName(that, name = "") {
71
73
  }
72
74
  return methods;
73
75
  }
74
- function __manageRef(that, name, elements, mode = "add") {
76
+ function manageRef(that, name, elements, mode = "add") {
75
77
  const action = `${mode}EventListener`;
76
- const methods = __getEventMethodsByName(that, name);
78
+ const methods = getEventMethodsByName(that, name);
77
79
  methods.forEach((method) => {
78
- const event = __getEventNameByMethod(that, method, name);
80
+ const event = getEventNameByMethod(method, name);
79
81
  elements.forEach((element) => element[action](event, that.__refsHandler));
80
82
  });
81
83
  }
82
- function __manageChild(that, name, instance, mode = "add") {
84
+ function manageChild(that, name, instance, mode = "add") {
83
85
  const action = mode === "add" ? "$on" : "$off";
84
- const methods = __getEventMethodsByName(that, name);
86
+ const methods = getEventMethodsByName(that, name);
85
87
  methods.forEach((method) => {
86
- const event = __getEventNameByMethod(that, method, name);
88
+ const event = getEventNameByMethod(method, name);
87
89
  instance[action](event, that.__childrenHandler);
88
90
  });
89
91
  }
90
- function __manageRootElement(that, mode = "add") {
92
+ function manageRootElement(that, mode = "add") {
91
93
  const modeMethod = `${mode}EventListener`;
92
- const methods = __getEventMethodsByName(that);
93
- const { emits = [] } = that.__base.__config;
94
- methods.forEach((method) => {
95
- const event = __getEventNameByMethod(that, method);
96
- const target = emits.includes(event) ? that.__base : that.__element;
94
+ const methods = getEventMethodsByName(that);
95
+ const { __base: base, __config: config } = that;
96
+ methods.map((method) => getEventNameByMethod(method)).filter((event) => (0, import_utils2.eventIsDefinedInConfig)(event, config) || (0, import_utils2.eventIsNative)(event, base.$el)).forEach((event) => {
97
+ const target = (0, import_utils2.getEventTarget)(base, event, config);
97
98
  target[modeMethod](event, that.__rootElementHandler);
98
99
  });
99
100
  }
@@ -105,7 +106,11 @@ var EventsManager = class extends import_AbstractManager.default {
105
106
  handleEvent: (event) => {
106
107
  const normalizedEventName = normalizeName(event.type);
107
108
  const method = `on${normalizedEventName}`;
108
- this.__base[method](event);
109
+ if (event instanceof CustomEvent && (0, import_utils.isArray)(event.detail) && event.detail.length) {
110
+ this.__base[method](...event.detail, event);
111
+ } else {
112
+ this.__base[method](event);
113
+ }
109
114
  }
110
115
  });
111
116
  __publicField(this, "__refsHandler", {
@@ -116,7 +121,7 @@ var EventsManager = class extends import_AbstractManager.default {
116
121
  const normalizedEventName = normalizeName(event.type);
117
122
  const method = `on${normalizedRefName}${normalizedEventName}`;
118
123
  let index = 0;
119
- if (Array.isArray(this.__base.$refs[refName])) {
124
+ if ((0, import_utils.isArray)(this.__base.$refs[refName])) {
120
125
  index = this.__base.$refs[refName].indexOf(ref);
121
126
  }
122
127
  this.__base[method](event, index);
@@ -124,22 +129,16 @@ var EventsManager = class extends import_AbstractManager.default {
124
129
  });
125
130
  __publicField(this, "__childrenHandler", {
126
131
  handleEvent: (event) => {
127
- const child = event.currentTarget;
128
- let childName;
129
- let index = 0;
130
132
  const childrenManager = this.__base.$children;
131
- childrenManager.registeredNames.find((name) => {
132
- if (childrenManager[name].includes(child)) {
133
- childName = name;
134
- index = childrenManager[name].indexOf(child);
135
- return true;
136
- }
137
- return false;
138
- });
139
- const normalizedRefName = normalizeName(childName);
133
+ const { name, child: resolvedChild } = childrenManager.registeredNames.map((childName) => ({
134
+ name: childName,
135
+ child: childrenManager[childName].find((instance) => instance === event.currentTarget || instance.$el === event.currentTarget)
136
+ })).find(({ child }) => child);
137
+ const normalizedChildName = normalizeName(name);
140
138
  const normalizedEventName = normalizeName(event.type);
141
- const method = `on${normalizedRefName}${normalizedEventName}`;
142
- const args = Array.isArray(event.detail) ? event.detail : [];
139
+ const method = `on${normalizedChildName}${normalizedEventName}`;
140
+ const index = childrenManager[name].indexOf(resolvedChild);
141
+ const args = (0, import_utils.isArray)(event.detail) ? event.detail : [];
143
142
  this.__base[method](...args, index, event);
144
143
  }
145
144
  });
@@ -151,22 +150,22 @@ var EventsManager = class extends import_AbstractManager.default {
151
150
  ]);
152
151
  }
153
152
  bindRef(name, elements) {
154
- __manageRef(this, name, elements);
153
+ manageRef(this, name, elements);
155
154
  }
156
155
  unbindRef(name, elements) {
157
- __manageRef(this, name, elements, "remove");
156
+ manageRef(this, name, elements, "remove");
158
157
  }
159
158
  bindChild(name, instance) {
160
- __manageChild(this, name, instance);
159
+ manageChild(this, name, instance);
161
160
  }
162
161
  unbindChild(name, instance) {
163
- __manageChild(this, name, instance, "remove");
162
+ manageChild(this, name, instance, "remove");
164
163
  }
165
164
  bindRootElement() {
166
- __manageRootElement(this);
165
+ manageRootElement(this);
167
166
  }
168
167
  unbindRootElement() {
169
- __manageRootElement(this, "remove");
168
+ manageRootElement(this, "remove");
170
169
  }
171
170
  };
172
171
  if (module.exports.default) module.exports = module.exports.default;
@@ -5,6 +5,8 @@ var __publicField = (obj, key, value) => {
5
5
  return value;
6
6
  };
7
7
  import getAllProperties from "../../utils/object/getAllProperties.js";
8
+ import { isArray } from "../../utils/index.js";
9
+ import { getEventTarget, eventIsNative, eventIsDefinedInConfig } from "../utils.js";
8
10
  import AbstractManager from "./AbstractManager.js";
9
11
  import { normalizeRefName } from "./RefsManager.js";
10
12
  const names = /* @__PURE__ */ new Map();
@@ -28,12 +30,12 @@ function getRegex(regex) {
28
30
  }
29
31
  return regexes.get(regex);
30
32
  }
31
- function __getEventNameByMethod(that, method, name = "") {
33
+ function getEventNameByMethod(method, name = "") {
32
34
  const regex = getRegex(`^on${normalizeName(name)}([A-Z].*)$`);
33
35
  const [, event] = method.match(regex);
34
36
  return normalizeEventName(event);
35
37
  }
36
- function __getEventMethodsByName(that, name = "") {
38
+ function getEventMethodsByName(that, name = "") {
37
39
  const regex = getRegex(`^on${normalizeName(name)}[A-Z].*$`);
38
40
  const key = regex.toString();
39
41
  let methods = that.__methodsCache.get(key);
@@ -43,29 +45,28 @@ function __getEventMethodsByName(that, name = "") {
43
45
  }
44
46
  return methods;
45
47
  }
46
- function __manageRef(that, name, elements, mode = "add") {
48
+ function manageRef(that, name, elements, mode = "add") {
47
49
  const action = `${mode}EventListener`;
48
- const methods = __getEventMethodsByName(that, name);
50
+ const methods = getEventMethodsByName(that, name);
49
51
  methods.forEach((method) => {
50
- const event = __getEventNameByMethod(that, method, name);
52
+ const event = getEventNameByMethod(method, name);
51
53
  elements.forEach((element) => element[action](event, that.__refsHandler));
52
54
  });
53
55
  }
54
- function __manageChild(that, name, instance, mode = "add") {
56
+ function manageChild(that, name, instance, mode = "add") {
55
57
  const action = mode === "add" ? "$on" : "$off";
56
- const methods = __getEventMethodsByName(that, name);
58
+ const methods = getEventMethodsByName(that, name);
57
59
  methods.forEach((method) => {
58
- const event = __getEventNameByMethod(that, method, name);
60
+ const event = getEventNameByMethod(method, name);
59
61
  instance[action](event, that.__childrenHandler);
60
62
  });
61
63
  }
62
- function __manageRootElement(that, mode = "add") {
64
+ function manageRootElement(that, mode = "add") {
63
65
  const modeMethod = `${mode}EventListener`;
64
- const methods = __getEventMethodsByName(that);
65
- const { emits = [] } = that.__base.__config;
66
- methods.forEach((method) => {
67
- const event = __getEventNameByMethod(that, method);
68
- const target = emits.includes(event) ? that.__base : that.__element;
66
+ const methods = getEventMethodsByName(that);
67
+ const { __base: base, __config: config } = that;
68
+ methods.map((method) => getEventNameByMethod(method)).filter((event) => eventIsDefinedInConfig(event, config) || eventIsNative(event, base.$el)).forEach((event) => {
69
+ const target = getEventTarget(base, event, config);
69
70
  target[modeMethod](event, that.__rootElementHandler);
70
71
  });
71
72
  }
@@ -77,7 +78,11 @@ class EventsManager extends AbstractManager {
77
78
  handleEvent: (event) => {
78
79
  const normalizedEventName = normalizeName(event.type);
79
80
  const method = `on${normalizedEventName}`;
80
- this.__base[method](event);
81
+ if (event instanceof CustomEvent && isArray(event.detail) && event.detail.length) {
82
+ this.__base[method](...event.detail, event);
83
+ } else {
84
+ this.__base[method](event);
85
+ }
81
86
  }
82
87
  });
83
88
  __publicField(this, "__refsHandler", {
@@ -88,7 +93,7 @@ class EventsManager extends AbstractManager {
88
93
  const normalizedEventName = normalizeName(event.type);
89
94
  const method = `on${normalizedRefName}${normalizedEventName}`;
90
95
  let index = 0;
91
- if (Array.isArray(this.__base.$refs[refName])) {
96
+ if (isArray(this.__base.$refs[refName])) {
92
97
  index = this.__base.$refs[refName].indexOf(ref);
93
98
  }
94
99
  this.__base[method](event, index);
@@ -96,22 +101,16 @@ class EventsManager extends AbstractManager {
96
101
  });
97
102
  __publicField(this, "__childrenHandler", {
98
103
  handleEvent: (event) => {
99
- const child = event.currentTarget;
100
- let childName;
101
- let index = 0;
102
104
  const childrenManager = this.__base.$children;
103
- childrenManager.registeredNames.find((name) => {
104
- if (childrenManager[name].includes(child)) {
105
- childName = name;
106
- index = childrenManager[name].indexOf(child);
107
- return true;
108
- }
109
- return false;
110
- });
111
- const normalizedRefName = normalizeName(childName);
105
+ const { name, child: resolvedChild } = childrenManager.registeredNames.map((childName) => ({
106
+ name: childName,
107
+ child: childrenManager[childName].find((instance) => instance === event.currentTarget || instance.$el === event.currentTarget)
108
+ })).find(({ child }) => child);
109
+ const normalizedChildName = normalizeName(name);
112
110
  const normalizedEventName = normalizeName(event.type);
113
- const method = `on${normalizedRefName}${normalizedEventName}`;
114
- const args = Array.isArray(event.detail) ? event.detail : [];
111
+ const method = `on${normalizedChildName}${normalizedEventName}`;
112
+ const index = childrenManager[name].indexOf(resolvedChild);
113
+ const args = isArray(event.detail) ? event.detail : [];
115
114
  this.__base[method](...args, index, event);
116
115
  }
117
116
  });
@@ -123,22 +122,22 @@ class EventsManager extends AbstractManager {
123
122
  ]);
124
123
  }
125
124
  bindRef(name, elements) {
126
- __manageRef(this, name, elements);
125
+ manageRef(this, name, elements);
127
126
  }
128
127
  unbindRef(name, elements) {
129
- __manageRef(this, name, elements, "remove");
128
+ manageRef(this, name, elements, "remove");
130
129
  }
131
130
  bindChild(name, instance) {
132
- __manageChild(this, name, instance);
131
+ manageChild(this, name, instance);
133
132
  }
134
133
  unbindChild(name, instance) {
135
- __manageChild(this, name, instance, "remove");
134
+ manageChild(this, name, instance, "remove");
136
135
  }
137
136
  bindRootElement() {
138
- __manageRootElement(this);
137
+ manageRootElement(this);
139
138
  }
140
139
  unbindRootElement() {
141
- __manageRootElement(this, "remove");
140
+ manageRootElement(this, "remove");
142
141
  }
143
142
  }
144
143
  export {