@studiometa/js-toolkit 2.0.0-beta.0 → 2.0.0-beta.12
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.
- package/Base/index.cjs +287 -0
- package/Base/index.d.ts +27 -1
- package/Base/index.js +149 -179
- package/Base/managers/ChildrenManager.cjs +122 -0
- package/Base/managers/ChildrenManager.js +29 -55
- package/Base/managers/EventsManager.cjs +182 -0
- package/Base/managers/EventsManager.d.ts +3 -1
- package/Base/managers/EventsManager.js +85 -127
- package/Base/managers/OptionsManager.cjs +167 -0
- package/Base/managers/OptionsManager.d.ts +2 -0
- package/Base/managers/OptionsManager.js +46 -88
- package/Base/managers/RefsManager.cjs +96 -0
- package/Base/managers/RefsManager.d.ts +2 -0
- package/Base/managers/RefsManager.js +24 -35
- package/Base/managers/ServicesManager.cjs +130 -0
- package/Base/managers/ServicesManager.d.ts +29 -4
- package/Base/managers/ServicesManager.js +33 -63
- package/Base/utils.cjs +43 -0
- package/Base/utils.js +12 -11
- package/README.md +13 -70
- package/decorators/index.cjs +47 -0
- package/decorators/index.d.ts +8 -9
- package/decorators/index.js +18 -9
- package/decorators/withBreakpointManager.cjs +89 -0
- package/decorators/withBreakpointManager.js +18 -39
- package/decorators/withBreakpointObserver.cjs +114 -0
- package/decorators/withBreakpointObserver.js +40 -88
- package/decorators/withDrag.cjs +52 -0
- package/decorators/withDrag.js +16 -18
- package/decorators/withExtraConfig.cjs +42 -0
- package/decorators/withExtraConfig.js +11 -12
- package/decorators/withIntersectionObserver.cjs +59 -0
- package/decorators/withIntersectionObserver.js +23 -31
- package/decorators/withMountWhenInView.cjs +66 -0
- package/decorators/withMountWhenInView.js +31 -55
- package/decorators/withScrolledInView.cjs +110 -0
- package/decorators/withScrolledInView.d.ts +4 -1
- package/decorators/withScrolledInView.js +77 -73
- package/decorators/withVue2.cjs +58 -0
- package/decorators/withVue2.js +21 -32
- package/helpers/createApp.cjs +54 -0
- package/helpers/createApp.js +12 -12
- package/helpers/importOnInteraction.cjs +54 -0
- package/helpers/importOnInteraction.js +17 -18
- package/helpers/importWhenIdle.cjs +50 -0
- package/helpers/importWhenIdle.js +13 -17
- package/helpers/importWhenVisible.cjs +52 -0
- package/helpers/importWhenVisible.js +16 -18
- package/helpers/index.cjs +39 -0
- package/helpers/index.d.ts +4 -5
- package/helpers/index.js +10 -5
- package/helpers/utils.cjs +37 -0
- package/helpers/utils.js +7 -6
- package/index.cjs +36 -0
- package/index.d.ts +4 -21
- package/index.js +7 -5
- package/package.json +14 -3
- package/services/Service.cjs +73 -0
- package/services/Service.d.ts +22 -17
- package/services/Service.js +14 -28
- package/services/drag.cjs +192 -0
- package/services/drag.d.ts +4 -18
- package/services/drag.js +103 -156
- package/services/index.cjs +45 -0
- package/services/index.d.ts +13 -10
- package/services/index.js +16 -8
- package/services/key.cjs +99 -0
- package/services/key.d.ts +4 -13
- package/services/key.js +58 -77
- package/services/load.cjs +68 -0
- package/services/load.d.ts +3 -13
- package/services/load.js +31 -36
- package/services/pointer.cjs +157 -0
- package/services/pointer.d.ts +4 -13
- package/services/pointer.js +91 -121
- package/services/raf.cjs +79 -0
- package/services/raf.d.ts +3 -13
- package/services/raf.js +32 -52
- package/services/resize.cjs +104 -0
- package/services/resize.d.ts +3 -13
- package/services/resize.js +52 -52
- package/services/scroll.cjs +127 -0
- package/services/scroll.d.ts +3 -13
- package/services/scroll.js +75 -89
- package/utils/collide/boundingRectToCircle.cjs +36 -0
- package/utils/collide/boundingRectToCircle.d.ts +1 -1
- package/utils/collide/boundingRectToCircle.js +7 -10
- package/utils/collide/collideCircleCircle.cjs +36 -0
- package/utils/collide/collideCircleCircle.js +8 -7
- package/utils/collide/collideCircleRect.cjs +48 -0
- package/utils/collide/collideCircleRect.js +10 -12
- package/utils/collide/collidePointCircle.cjs +33 -0
- package/utils/collide/collidePointCircle.js +8 -5
- package/utils/collide/collidePointRect.cjs +30 -0
- package/utils/collide/collidePointRect.js +5 -2
- package/utils/collide/collideRectRect.cjs +30 -0
- package/utils/collide/collideRectRect.js +5 -2
- package/utils/collide/index.cjs +43 -0
- package/utils/collide/index.d.ts +6 -7
- package/utils/collide/index.js +14 -7
- package/utils/css/classes.cjs +46 -0
- package/utils/css/classes.js +13 -12
- package/utils/css/index.cjs +39 -0
- package/utils/css/index.d.ts +4 -5
- package/utils/css/index.js +10 -5
- package/utils/css/matrix.cjs +31 -0
- package/utils/css/matrix.js +6 -5
- package/utils/css/styles.cjs +49 -0
- package/utils/css/styles.js +13 -12
- package/utils/css/transition.cjs +119 -0
- package/utils/css/transition.js +62 -117
- package/utils/debounce.cjs +36 -0
- package/utils/debounce.js +7 -9
- package/utils/focusTrap.cjs +86 -0
- package/utils/focusTrap.js +30 -21
- package/utils/history.cjs +93 -0
- package/utils/history.js +28 -57
- package/utils/index.cjs +55 -0
- package/utils/index.d.ts +12 -35
- package/utils/index.js +30 -17
- package/utils/keyCodes.cjs +37 -0
- package/utils/keyCodes.js +5 -2
- package/utils/math/clamp.cjs +30 -0
- package/utils/math/clamp.js +5 -2
- package/utils/math/clamp01.cjs +36 -0
- package/utils/math/clamp01.js +6 -3
- package/utils/math/damp.cjs +30 -0
- package/utils/math/damp.js +5 -4
- package/utils/math/ease.cjs +90 -0
- package/utils/math/ease.d.ts +78 -0
- package/utils/math/ease.js +66 -0
- package/utils/math/index.cjs +46 -0
- package/utils/math/index.d.ts +8 -8
- package/utils/math/index.js +17 -8
- package/utils/math/inertiaFinalValue.cjs +39 -0
- package/utils/math/inertiaFinalValue.js +8 -10
- package/utils/math/lerp.cjs +30 -0
- package/utils/math/lerp.js +5 -2
- package/utils/math/map.cjs +30 -0
- package/utils/math/map.js +5 -2
- package/utils/math/round.cjs +30 -0
- package/utils/math/round.js +5 -3
- package/utils/memoize.cjs +45 -0
- package/utils/memoize.js +10 -19
- package/utils/nextFrame.cjs +42 -0
- package/utils/nextFrame.js +14 -9
- package/utils/object/autoBind.cjs +53 -0
- package/utils/object/autoBind.js +12 -22
- package/utils/object/getAllProperties.cjs +39 -0
- package/utils/object/getAllProperties.js +11 -14
- package/utils/object/index.cjs +37 -0
- package/utils/object/index.d.ts +3 -4
- package/utils/object/index.js +8 -4
- package/utils/object/isObject.cjs +30 -0
- package/utils/object/isObject.js +6 -3
- package/utils/scrollTo.cjs +84 -0
- package/utils/scrollTo.js +20 -40
- package/utils/string/index.cjs +51 -0
- package/utils/string/index.d.ts +10 -11
- package/utils/string/index.js +22 -11
- package/utils/string/withLeadingCharacters.cjs +36 -0
- package/utils/string/withLeadingCharacters.js +7 -4
- package/utils/string/withLeadingSlash.cjs +36 -0
- package/utils/string/withLeadingSlash.js +7 -4
- package/utils/string/withTrailingCharacters.cjs +36 -0
- package/utils/string/withTrailingCharacters.js +7 -4
- package/utils/string/withTrailingSlash.cjs +36 -0
- package/utils/string/withTrailingSlash.js +7 -4
- package/utils/string/withoutLeadingCharacters.cjs +30 -0
- package/utils/string/withoutLeadingCharacters.js +6 -3
- package/utils/string/withoutLeadingCharactersRecursive.cjs +41 -0
- package/utils/string/withoutLeadingCharactersRecursive.js +8 -7
- package/utils/string/withoutLeadingSlash.cjs +36 -0
- package/utils/string/withoutLeadingSlash.js +7 -4
- package/utils/string/withoutTrailingCharacters.cjs +30 -0
- package/utils/string/withoutTrailingCharacters.js +6 -3
- package/utils/string/withoutTrailingCharactersRecursive.cjs +41 -0
- package/utils/string/withoutTrailingCharactersRecursive.js +8 -7
- package/utils/string/withoutTrailingSlash.cjs +36 -0
- package/utils/string/withoutTrailingSlash.js +7 -4
- package/utils/throttle.cjs +38 -0
- package/utils/throttle.js +9 -9
- package/index.modern.js +0 -1
- package/index.umd.js +0 -1
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { getComponentElements } from "../utils.js";
|
|
2
|
+
class ChildrenManager {
|
|
3
|
+
__base;
|
|
4
|
+
__element;
|
|
5
|
+
__components;
|
|
6
|
+
__eventsManager;
|
|
4
7
|
get registeredNames() {
|
|
5
|
-
return Object.keys(this).filter(key => !key.startsWith(
|
|
8
|
+
return Object.keys(this).filter((key) => !key.startsWith("__"));
|
|
6
9
|
}
|
|
7
|
-
|
|
8
10
|
constructor(base, element, components, eventsManager) {
|
|
9
|
-
_defineProperty(this, "__base", void 0);
|
|
10
|
-
|
|
11
|
-
_defineProperty(this, "__element", void 0);
|
|
12
|
-
|
|
13
|
-
_defineProperty(this, "__components", void 0);
|
|
14
|
-
|
|
15
|
-
_defineProperty(this, "__eventsManager", void 0);
|
|
16
|
-
|
|
17
11
|
Object.defineProperties(this, {
|
|
18
12
|
__base: {
|
|
19
13
|
enumerable: false,
|
|
@@ -37,88 +31,68 @@ export default class ChildrenManager {
|
|
|
37
31
|
}
|
|
38
32
|
});
|
|
39
33
|
}
|
|
40
|
-
|
|
41
34
|
registerAll() {
|
|
42
|
-
Object.entries(this.__components).forEach(
|
|
43
|
-
var [name, component] = _ref;
|
|
44
|
-
return this.__register(name, component);
|
|
45
|
-
});
|
|
35
|
+
Object.entries(this.__components).forEach(([name, component]) => this.__register(name, component));
|
|
46
36
|
}
|
|
47
|
-
|
|
48
37
|
__register(name, component) {
|
|
49
38
|
Object.defineProperty(this, name, {
|
|
50
39
|
enumerable: true,
|
|
51
40
|
configurable: true,
|
|
52
41
|
get: () => {
|
|
53
|
-
|
|
54
|
-
|
|
42
|
+
const elements = getComponentElements(name, this.__element);
|
|
55
43
|
if (elements.length === 0) {
|
|
56
44
|
return [];
|
|
57
45
|
}
|
|
58
|
-
|
|
59
|
-
return elements.map(element => this.__getChild(element, component, name)).filter(instance => instance !== 'terminated');
|
|
46
|
+
return elements.map((element) => this.__getChild(element, component, name)).filter((instance) => instance !== "terminated");
|
|
60
47
|
}
|
|
61
48
|
});
|
|
62
49
|
}
|
|
63
|
-
|
|
64
50
|
__getChild(el, ComponentClass, name) {
|
|
65
51
|
if (el.__base__) {
|
|
66
52
|
return el.__base__;
|
|
67
53
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
Object.defineProperty(child, '$parent', {
|
|
72
|
-
get: () => this.__base
|
|
73
|
-
});
|
|
54
|
+
if ("$isBase" in ComponentClass) {
|
|
55
|
+
const child = new ComponentClass(el);
|
|
56
|
+
Object.defineProperty(child, "$parent", { get: () => this.__base });
|
|
74
57
|
return child;
|
|
75
58
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
var _module$default;
|
|
79
|
-
|
|
80
|
-
return this.__getChild(el, (_module$default = module.default) !== null && _module$default !== void 0 ? _module$default : module, name);
|
|
59
|
+
return ComponentClass(this.__base).then((module) => {
|
|
60
|
+
return this.__getChild(el, module.default ?? module, name);
|
|
81
61
|
});
|
|
82
62
|
}
|
|
83
|
-
|
|
84
63
|
mountAll() {
|
|
85
|
-
this.__triggerHookForAll(
|
|
64
|
+
this.__triggerHookForAll("$mount");
|
|
86
65
|
}
|
|
87
|
-
|
|
88
66
|
updateAll() {
|
|
89
|
-
this.__triggerHookForAll(
|
|
67
|
+
this.__triggerHookForAll("$update");
|
|
90
68
|
}
|
|
91
|
-
|
|
92
69
|
destroyAll() {
|
|
93
|
-
this.__triggerHookForAll(
|
|
70
|
+
this.__triggerHookForAll("$destroy");
|
|
94
71
|
}
|
|
95
|
-
|
|
96
72
|
__triggerHookForAll(hook) {
|
|
97
|
-
this.registeredNames.forEach(name => {
|
|
98
|
-
this[name].forEach(instance => {
|
|
73
|
+
this.registeredNames.forEach((name) => {
|
|
74
|
+
this[name].forEach((instance) => {
|
|
99
75
|
if (instance instanceof Promise) {
|
|
100
|
-
instance.then(resolvedInstance => this.__triggerHook(hook, resolvedInstance, name));
|
|
76
|
+
instance.then((resolvedInstance) => this.__triggerHook(hook, resolvedInstance, name));
|
|
101
77
|
} else {
|
|
102
78
|
this.__triggerHook(hook, instance, name);
|
|
103
79
|
}
|
|
104
80
|
});
|
|
105
81
|
});
|
|
106
82
|
}
|
|
107
|
-
|
|
108
83
|
__triggerHook(hook, instance, name) {
|
|
109
|
-
if (hook ===
|
|
110
|
-
hook =
|
|
84
|
+
if (hook === "$update" && !instance.$isMounted) {
|
|
85
|
+
hook = "$mount";
|
|
111
86
|
}
|
|
112
|
-
|
|
113
|
-
if (hook === '$update' || hook === '$destroy') {
|
|
87
|
+
if (hook === "$update" || hook === "$destroy") {
|
|
114
88
|
this.__eventsManager.unbindChild(name, instance);
|
|
115
89
|
}
|
|
116
|
-
|
|
117
|
-
if (hook === '$update' || hook === '$mount') {
|
|
90
|
+
if (hook === "$update" || hook === "$mount") {
|
|
118
91
|
this.__eventsManager.bindChild(name, instance);
|
|
119
92
|
}
|
|
120
|
-
|
|
121
93
|
instance[hook]();
|
|
122
94
|
}
|
|
123
|
-
|
|
124
|
-
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
ChildrenManager as default
|
|
98
|
+
};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __reExport = (target, module2, copyDefault, desc) => {
|
|
13
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(module2))
|
|
15
|
+
if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
|
|
16
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (module2, isNodeMode) => {
|
|
21
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = /* @__PURE__ */ ((cache) => {
|
|
24
|
+
return (module2, temp) => {
|
|
25
|
+
return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
|
|
26
|
+
};
|
|
27
|
+
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
|
|
28
|
+
var EventsManager_exports = {};
|
|
29
|
+
__export(EventsManager_exports, {
|
|
30
|
+
default: () => EventsManager
|
|
31
|
+
});
|
|
32
|
+
var import_getAllProperties = __toESM(require("../../utils/object/getAllProperties.js"), 1);
|
|
33
|
+
var import_RefsManager = __toESM(require("./RefsManager.js"), 1);
|
|
34
|
+
class EventsManager {
|
|
35
|
+
__rootElement;
|
|
36
|
+
__base;
|
|
37
|
+
__methodsCache = /* @__PURE__ */ new Map();
|
|
38
|
+
__rootElementHandler = {
|
|
39
|
+
handleEvent: (event) => {
|
|
40
|
+
const normalizedEventName = EventsManager.normalizeName(event.type);
|
|
41
|
+
const method = `on${normalizedEventName}`;
|
|
42
|
+
this.__base[method](event);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
__refsHandler = {
|
|
46
|
+
handleEvent: (event) => {
|
|
47
|
+
const ref = event.currentTarget;
|
|
48
|
+
const refName = import_RefsManager.default.normalizeRefName(ref.dataset.ref);
|
|
49
|
+
const normalizedRefName = EventsManager.normalizeName(refName);
|
|
50
|
+
const normalizedEventName = EventsManager.normalizeName(event.type);
|
|
51
|
+
const method = `on${normalizedRefName}${normalizedEventName}`;
|
|
52
|
+
let index = 0;
|
|
53
|
+
if (Array.isArray(this.__base.$refs[refName])) {
|
|
54
|
+
index = this.__base.$refs[refName].indexOf(ref);
|
|
55
|
+
}
|
|
56
|
+
this.__base[method](event, index);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
__childrenHandler = {
|
|
60
|
+
handleEvent: (event) => {
|
|
61
|
+
const child = event.currentTarget;
|
|
62
|
+
let childName;
|
|
63
|
+
let index = 0;
|
|
64
|
+
const childrenManager = this.__base.$children;
|
|
65
|
+
childrenManager.registeredNames.find((name) => {
|
|
66
|
+
if (childrenManager[name].includes(child)) {
|
|
67
|
+
childName = name;
|
|
68
|
+
index = childrenManager[name].indexOf(child);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
});
|
|
73
|
+
const normalizedRefName = EventsManager.normalizeName(childName);
|
|
74
|
+
const normalizedEventName = EventsManager.normalizeName(event.type);
|
|
75
|
+
const method = `on${normalizedRefName}${normalizedEventName}`;
|
|
76
|
+
const args = Array.isArray(event.detail) ? event.detail : [];
|
|
77
|
+
this.__base[method](...args, index, event);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
constructor(rootElement, base) {
|
|
81
|
+
Object.defineProperties(this, {
|
|
82
|
+
__rootElement: {
|
|
83
|
+
enumerable: false,
|
|
84
|
+
writable: false,
|
|
85
|
+
value: rootElement
|
|
86
|
+
},
|
|
87
|
+
__base: {
|
|
88
|
+
enumerable: false,
|
|
89
|
+
writable: false,
|
|
90
|
+
value: base
|
|
91
|
+
},
|
|
92
|
+
__methodsCache: {
|
|
93
|
+
enumerable: false,
|
|
94
|
+
writable: false,
|
|
95
|
+
value: this.__methodsCache
|
|
96
|
+
},
|
|
97
|
+
__rootElementHandler: {
|
|
98
|
+
enumerable: false,
|
|
99
|
+
writable: false,
|
|
100
|
+
value: this.__rootElementHandler
|
|
101
|
+
},
|
|
102
|
+
__refsHandler: {
|
|
103
|
+
enumerable: false,
|
|
104
|
+
writable: false,
|
|
105
|
+
value: this.__refsHandler
|
|
106
|
+
},
|
|
107
|
+
__childrenHandler: {
|
|
108
|
+
enumerable: false,
|
|
109
|
+
writable: false,
|
|
110
|
+
value: this.__childrenHandler
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
__manageRef(name, elements, mode = "add") {
|
|
115
|
+
const action = `${mode}EventListener`;
|
|
116
|
+
const methods = this.__getEventMethodsByName(name);
|
|
117
|
+
methods.forEach((method) => {
|
|
118
|
+
const event = this.__getEventNameByMethod(method, name);
|
|
119
|
+
elements.forEach((element) => element[action](event, this.__refsHandler));
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
bindRef(name, elements) {
|
|
123
|
+
this.__manageRef(name, elements);
|
|
124
|
+
}
|
|
125
|
+
unbindRef(name, elements) {
|
|
126
|
+
this.__manageRef(name, elements, "remove");
|
|
127
|
+
}
|
|
128
|
+
__manageChild(name, instance, mode = "add") {
|
|
129
|
+
const action = mode === "add" ? "$on" : "$off";
|
|
130
|
+
const methods = this.__getEventMethodsByName(name);
|
|
131
|
+
methods.forEach((method) => {
|
|
132
|
+
const event = this.__getEventNameByMethod(method, name);
|
|
133
|
+
instance[action](event, this.__childrenHandler);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
bindChild(name, instance) {
|
|
137
|
+
this.__manageChild(name, instance);
|
|
138
|
+
}
|
|
139
|
+
unbindChild(name, instance) {
|
|
140
|
+
this.__manageChild(name, instance, "remove");
|
|
141
|
+
}
|
|
142
|
+
__manageRootElement(mode = "add") {
|
|
143
|
+
const modeMethod = `${mode}EventListener`;
|
|
144
|
+
const methods = this.__getEventMethodsByName();
|
|
145
|
+
const { emits = [] } = this.__base.__config;
|
|
146
|
+
methods.forEach((method) => {
|
|
147
|
+
const event = this.__getEventNameByMethod(method);
|
|
148
|
+
const target = emits.includes(event) ? this.__base : this.__rootElement;
|
|
149
|
+
target[modeMethod](event, this.__rootElementHandler);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
bindRootElement() {
|
|
153
|
+
this.__manageRootElement();
|
|
154
|
+
}
|
|
155
|
+
unbindRootElement() {
|
|
156
|
+
this.__manageRootElement("remove");
|
|
157
|
+
}
|
|
158
|
+
__getEventNameByMethod(method, name = "") {
|
|
159
|
+
const normalizedName = EventsManager.normalizeName(name);
|
|
160
|
+
const regex = new RegExp(`^on${normalizedName}([A-Z].*)$`);
|
|
161
|
+
const [, event] = method.match(regex);
|
|
162
|
+
return EventsManager.normalizeEventName(event);
|
|
163
|
+
}
|
|
164
|
+
__getEventMethodsByName(name = "") {
|
|
165
|
+
const normalizedName = EventsManager.normalizeName(name);
|
|
166
|
+
const regex = new RegExp(`^on${normalizedName}[A-Z].*$`);
|
|
167
|
+
const key = regex.toString();
|
|
168
|
+
let methods = this.__methodsCache.get(key);
|
|
169
|
+
if (!methods) {
|
|
170
|
+
methods = Array.from((0, import_getAllProperties.default)(this.__base, [], (method) => regex.test(method)).reduce((set, [method]) => set.add(method), /* @__PURE__ */ new Set()));
|
|
171
|
+
this.__methodsCache.set(key, methods);
|
|
172
|
+
}
|
|
173
|
+
return methods;
|
|
174
|
+
}
|
|
175
|
+
static normalizeName(name) {
|
|
176
|
+
return name.replace(/[A-Z]([A-Z].*)/g, (c) => c.toLowerCase()).replace(/[^a-zA-Z\d\s:]/g, " ").replace(/(^\w|\s+\w)/g, (c) => c.trim().toUpperCase()).trim();
|
|
177
|
+
}
|
|
178
|
+
static normalizeEventName(name) {
|
|
179
|
+
return name.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`).replace(/^-/, "");
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
module.exports = __toCommonJS(EventsManager_exports);
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Event management class.
|
|
7
|
+
* @todo Prevent binding of `onChildOrRefEvent` to the root element
|
|
8
|
+
* @todo Use event delegation?
|
|
7
9
|
*/
|
|
8
10
|
export default class EventsManager {
|
|
9
11
|
/**
|
|
@@ -150,7 +152,7 @@ export default class EventsManager {
|
|
|
150
152
|
* Manage event methods on the root element.
|
|
151
153
|
*
|
|
152
154
|
* @param {'add'|'remove'} [mode]
|
|
153
|
-
* The action to perform: add or remove the event listeners.
|
|
155
|
+
* The action to perform: add or remove the event listeners, defaults to 'add'.
|
|
154
156
|
*
|
|
155
157
|
* @return {void}
|
|
156
158
|
* @private
|
|
@@ -1,64 +1,52 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
import getAllProperties from "../../utils/object/getAllProperties.js";
|
|
2
|
+
import RefsManager from "./RefsManager.js";
|
|
3
|
+
class EventsManager {
|
|
4
|
+
__rootElement;
|
|
5
|
+
__base;
|
|
6
|
+
__methodsCache = /* @__PURE__ */ new Map();
|
|
7
|
+
__rootElementHandler = {
|
|
8
|
+
handleEvent: (event) => {
|
|
9
|
+
const normalizedEventName = EventsManager.normalizeName(event.type);
|
|
10
|
+
const method = `on${normalizedEventName}`;
|
|
11
|
+
this.__base[method](event);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
__refsHandler = {
|
|
15
|
+
handleEvent: (event) => {
|
|
16
|
+
const ref = event.currentTarget;
|
|
17
|
+
const refName = RefsManager.normalizeRefName(ref.dataset.ref);
|
|
18
|
+
const normalizedRefName = EventsManager.normalizeName(refName);
|
|
19
|
+
const normalizedEventName = EventsManager.normalizeName(event.type);
|
|
20
|
+
const method = `on${normalizedRefName}${normalizedEventName}`;
|
|
21
|
+
let index = 0;
|
|
22
|
+
if (Array.isArray(this.__base.$refs[refName])) {
|
|
23
|
+
index = this.__base.$refs[refName].indexOf(ref);
|
|
18
24
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
index =
|
|
25
|
+
this.__base[method](event, index);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
__childrenHandler = {
|
|
29
|
+
handleEvent: (event) => {
|
|
30
|
+
const child = event.currentTarget;
|
|
31
|
+
let childName;
|
|
32
|
+
let index = 0;
|
|
33
|
+
const childrenManager = this.__base.$children;
|
|
34
|
+
childrenManager.registeredNames.find((name) => {
|
|
35
|
+
if (childrenManager[name].includes(child)) {
|
|
36
|
+
childName = name;
|
|
37
|
+
index = childrenManager[name].indexOf(child);
|
|
38
|
+
return true;
|
|
32
39
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
var childrenManager = this.__base.$children;
|
|
44
|
-
childrenManager.registeredNames.find(name => {
|
|
45
|
-
if (childrenManager[name].includes(child)) {
|
|
46
|
-
childName = name;
|
|
47
|
-
index = childrenManager[name].indexOf(child);
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return false;
|
|
52
|
-
});
|
|
53
|
-
var normalizedRefName = EventsManager.normalizeName(childName);
|
|
54
|
-
var normalizedEventName = EventsManager.normalizeName(event.type);
|
|
55
|
-
var method = "on".concat(normalizedRefName).concat(normalizedEventName);
|
|
56
|
-
var args = Array.isArray(event.detail) ? event.detail : [];
|
|
57
|
-
|
|
58
|
-
this.__base[method](...args, index, event);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
|
|
40
|
+
return false;
|
|
41
|
+
});
|
|
42
|
+
const normalizedRefName = EventsManager.normalizeName(childName);
|
|
43
|
+
const normalizedEventName = EventsManager.normalizeName(event.type);
|
|
44
|
+
const method = `on${normalizedRefName}${normalizedEventName}`;
|
|
45
|
+
const args = Array.isArray(event.detail) ? event.detail : [];
|
|
46
|
+
this.__base[method](...args, index, event);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
constructor(rootElement, base) {
|
|
62
50
|
Object.defineProperties(this, {
|
|
63
51
|
__rootElement: {
|
|
64
52
|
enumerable: false,
|
|
@@ -92,104 +80,74 @@ export default class EventsManager {
|
|
|
92
80
|
}
|
|
93
81
|
});
|
|
94
82
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
methods.forEach(method => {
|
|
103
|
-
var event = this.__getEventNameByMethod(method, name);
|
|
104
|
-
|
|
105
|
-
elements.forEach(element => element[action](event, this.__refsHandler));
|
|
83
|
+
__manageRef(name, elements, mode = "add") {
|
|
84
|
+
const action = `${mode}EventListener`;
|
|
85
|
+
const methods = this.__getEventMethodsByName(name);
|
|
86
|
+
methods.forEach((method) => {
|
|
87
|
+
const event = this.__getEventNameByMethod(method, name);
|
|
88
|
+
elements.forEach((element) => element[action](event, this.__refsHandler));
|
|
106
89
|
});
|
|
107
90
|
}
|
|
108
|
-
|
|
109
91
|
bindRef(name, elements) {
|
|
110
92
|
this.__manageRef(name, elements);
|
|
111
93
|
}
|
|
112
|
-
|
|
113
94
|
unbindRef(name, elements) {
|
|
114
|
-
this.__manageRef(name, elements,
|
|
95
|
+
this.__manageRef(name, elements, "remove");
|
|
115
96
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
var methods = this.__getEventMethodsByName(name);
|
|
122
|
-
|
|
123
|
-
methods.forEach(method => {
|
|
124
|
-
var event = this.__getEventNameByMethod(method, name);
|
|
125
|
-
|
|
97
|
+
__manageChild(name, instance, mode = "add") {
|
|
98
|
+
const action = mode === "add" ? "$on" : "$off";
|
|
99
|
+
const methods = this.__getEventMethodsByName(name);
|
|
100
|
+
methods.forEach((method) => {
|
|
101
|
+
const event = this.__getEventNameByMethod(method, name);
|
|
126
102
|
instance[action](event, this.__childrenHandler);
|
|
127
103
|
});
|
|
128
104
|
}
|
|
129
|
-
|
|
130
105
|
bindChild(name, instance) {
|
|
131
106
|
this.__manageChild(name, instance);
|
|
132
107
|
}
|
|
133
|
-
|
|
134
108
|
unbindChild(name, instance) {
|
|
135
|
-
this.__manageChild(name, instance,
|
|
109
|
+
this.__manageChild(name, instance, "remove");
|
|
136
110
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
var event = this.__getEventNameByMethod(method);
|
|
146
|
-
|
|
147
|
-
this.__rootElement[modeMethod](event, this.__rootElementHandler);
|
|
111
|
+
__manageRootElement(mode = "add") {
|
|
112
|
+
const modeMethod = `${mode}EventListener`;
|
|
113
|
+
const methods = this.__getEventMethodsByName();
|
|
114
|
+
const { emits = [] } = this.__base.__config;
|
|
115
|
+
methods.forEach((method) => {
|
|
116
|
+
const event = this.__getEventNameByMethod(method);
|
|
117
|
+
const target = emits.includes(event) ? this.__base : this.__rootElement;
|
|
118
|
+
target[modeMethod](event, this.__rootElementHandler);
|
|
148
119
|
});
|
|
149
120
|
}
|
|
150
|
-
|
|
151
121
|
bindRootElement() {
|
|
152
122
|
this.__manageRootElement();
|
|
153
123
|
}
|
|
154
|
-
|
|
155
124
|
unbindRootElement() {
|
|
156
|
-
this.__manageRootElement(
|
|
125
|
+
this.__manageRootElement("remove");
|
|
157
126
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
var regex = new RegExp("^on".concat(normalizedName, "([A-Z].*)$"));
|
|
163
|
-
var [, event] = method.match(regex);
|
|
127
|
+
__getEventNameByMethod(method, name = "") {
|
|
128
|
+
const normalizedName = EventsManager.normalizeName(name);
|
|
129
|
+
const regex = new RegExp(`^on${normalizedName}([A-Z].*)$`);
|
|
130
|
+
const [, event] = method.match(regex);
|
|
164
131
|
return EventsManager.normalizeEventName(event);
|
|
165
132
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
var key = regex.toString();
|
|
172
|
-
|
|
173
|
-
var methods = this.__methodsCache.get(key);
|
|
174
|
-
|
|
133
|
+
__getEventMethodsByName(name = "") {
|
|
134
|
+
const normalizedName = EventsManager.normalizeName(name);
|
|
135
|
+
const regex = new RegExp(`^on${normalizedName}[A-Z].*$`);
|
|
136
|
+
const key = regex.toString();
|
|
137
|
+
let methods = this.__methodsCache.get(key);
|
|
175
138
|
if (!methods) {
|
|
176
|
-
methods = Array.from(getAllProperties(this.__base, [], method => regex.test(method)).reduce((set,
|
|
177
|
-
var [method] = _ref;
|
|
178
|
-
return set.add(method);
|
|
179
|
-
}, new Set()));
|
|
180
|
-
|
|
139
|
+
methods = Array.from(getAllProperties(this.__base, [], (method) => regex.test(method)).reduce((set, [method]) => set.add(method), /* @__PURE__ */ new Set()));
|
|
181
140
|
this.__methodsCache.set(key, methods);
|
|
182
141
|
}
|
|
183
|
-
|
|
184
142
|
return methods;
|
|
185
143
|
}
|
|
186
|
-
|
|
187
144
|
static normalizeName(name) {
|
|
188
|
-
return name.replace(/[A-Z]([A-Z].*)/g, c => c.toLowerCase()).replace(/[^a-zA-Z\d\s:]/g,
|
|
145
|
+
return name.replace(/[A-Z]([A-Z].*)/g, (c) => c.toLowerCase()).replace(/[^a-zA-Z\d\s:]/g, " ").replace(/(^\w|\s+\w)/g, (c) => c.trim().toUpperCase()).trim();
|
|
189
146
|
}
|
|
190
|
-
|
|
191
147
|
static normalizeEventName(name) {
|
|
192
|
-
return name.replace(/[A-Z]/g, c =>
|
|
148
|
+
return name.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`).replace(/^-/, "");
|
|
193
149
|
}
|
|
194
|
-
|
|
195
|
-
|
|
150
|
+
}
|
|
151
|
+
export {
|
|
152
|
+
EventsManager as default
|
|
153
|
+
};
|