@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.
- package/Base/index.d.ts +217 -0
- package/Base/index.js +237 -0
- package/Base/managers/ChildrenManager.d.ts +108 -0
- package/Base/managers/ChildrenManager.js +124 -0
- package/Base/managers/EventsManager.d.ts +190 -0
- package/Base/managers/EventsManager.js +195 -0
- package/Base/managers/OptionsManager.d.ts +120 -0
- package/Base/managers/OptionsManager.js +180 -0
- package/Base/managers/RefsManager.d.ts +84 -0
- package/Base/managers/RefsManager.js +83 -0
- package/{abstracts/Base/classes/Services.d.ts → Base/managers/ServicesManager.d.ts} +22 -7
- package/Base/managers/ServicesManager.js +115 -0
- package/{abstracts/Base → Base}/utils.d.ts +0 -30
- package/Base/utils.js +43 -0
- package/README.md +12 -70
- package/decorators/index.js +1 -2
- package/decorators/withBreakpointManager.d.ts +5 -5
- package/decorators/withBreakpointManager.js +41 -79
- package/decorators/withBreakpointObserver.d.ts +4 -4
- package/decorators/withBreakpointObserver.js +54 -77
- package/decorators/withDrag.d.ts +6 -6
- package/decorators/withDrag.js +17 -41
- package/decorators/withExtraConfig.d.ts +6 -6
- package/decorators/withExtraConfig.js +2 -24
- package/decorators/withIntersectionObserver.d.ts +4 -4
- package/decorators/withIntersectionObserver.js +17 -60
- package/decorators/withMountWhenInView.d.ts +8 -8
- package/decorators/withMountWhenInView.js +23 -51
- package/helpers/createApp.d.ts +4 -4
- package/helpers/createApp.js +10 -12
- package/helpers/importOnInteraction.d.ts +6 -6
- package/helpers/importOnInteraction.js +7 -8
- package/helpers/importWhenIdle.d.ts +4 -4
- package/helpers/importWhenIdle.js +7 -8
- package/helpers/importWhenVisible.d.ts +6 -6
- package/helpers/importWhenVisible.js +9 -16
- package/helpers/index.d.ts +1 -3
- package/helpers/index.js +1 -4
- package/helpers/utils.js +2 -3
- package/index.d.ts +19 -5
- package/index.js +5 -6
- package/index.modern.js +1 -3230
- package/index.umd.js +1 -3586
- package/package.json +3 -6
- package/{abstracts → services}/Service.d.ts +0 -0
- package/services/Service.js +63 -0
- package/services/drag.js +144 -180
- package/services/index.js +1 -2
- package/services/key.js +56 -98
- package/services/load.d.ts +1 -1
- package/services/load.js +22 -51
- package/services/pointer.js +118 -157
- package/services/raf.js +37 -65
- package/services/resize.js +46 -98
- package/services/scroll.js +81 -120
- package/utils/collide/boundingRectToCircle.js +7 -6
- package/utils/collide/collideCircleCircle.js +1 -2
- package/utils/collide/collideCircleRect.js +1 -2
- package/utils/collide/collidePointCircle.js +1 -2
- package/utils/collide/collidePointRect.js +1 -2
- package/utils/collide/collideRectRect.js +1 -2
- package/utils/collide/index.js +1 -2
- package/utils/css/classes.js +2 -3
- package/utils/css/index.js +1 -2
- package/utils/css/matrix.js +1 -2
- package/utils/css/styles.js +3 -8
- package/utils/css/transition.js +67 -140
- package/utils/debounce.js +3 -4
- package/utils/focusTrap.js +4 -5
- package/utils/history.js +12 -19
- package/utils/index.d.ts +2 -1
- package/utils/index.js +2 -2
- package/utils/keyCodes.js +1 -2
- package/utils/math/clamp.js +1 -2
- package/utils/math/clamp01.js +1 -2
- package/utils/math/damp.js +1 -2
- package/utils/math/index.js +1 -2
- package/utils/math/inertiaFinalValue.js +1 -2
- package/utils/math/lerp.js +1 -2
- package/utils/math/map.js +1 -2
- package/utils/math/round.js +1 -2
- package/utils/memoize.d.ts +30 -0
- package/utils/memoize.js +30 -0
- package/utils/nextFrame.js +4 -9
- package/utils/object/autoBind.js +11 -19
- package/utils/object/getAllProperties.d.ts +6 -3
- package/utils/object/getAllProperties.js +10 -8
- package/utils/object/index.js +1 -2
- package/utils/object/isObject.js +2 -4
- package/utils/string/index.js +1 -2
- package/utils/string/withLeadingCharacters.js +1 -2
- package/utils/string/withLeadingSlash.js +1 -2
- package/utils/string/withTrailingCharacters.js +1 -2
- package/utils/string/withTrailingSlash.js +1 -2
- package/utils/string/withoutLeadingCharacters.js +1 -2
- package/utils/string/withoutLeadingCharactersRecursive.js +1 -2
- package/utils/string/withoutLeadingSlash.js +1 -2
- package/utils/string/withoutTrailingCharacters.js +1 -2
- package/utils/string/withoutTrailingCharactersRecursive.js +1 -2
- package/utils/string/withoutTrailingSlash.js +1 -2
- package/utils/throttle.js +2 -3
- package/abstracts/Base/children.d.ts +0 -16
- package/abstracts/Base/children.js +0 -66
- package/abstracts/Base/children.js.map +0 -1
- package/abstracts/Base/classes/Options.d.ts +0 -37
- package/abstracts/Base/classes/Options.js +0 -182
- package/abstracts/Base/classes/Options.js.map +0 -1
- package/abstracts/Base/classes/Services.js +0 -120
- package/abstracts/Base/classes/Services.js.map +0 -1
- package/abstracts/Base/components.d.ts +0 -22
- package/abstracts/Base/components.js +0 -67
- package/abstracts/Base/components.js.map +0 -1
- package/abstracts/Base/events.d.ts +0 -8
- package/abstracts/Base/events.js +0 -185
- package/abstracts/Base/events.js.map +0 -1
- package/abstracts/Base/index.d.ts +0 -176
- package/abstracts/Base/index.js +0 -215
- package/abstracts/Base/index.js.map +0 -1
- package/abstracts/Base/options.d.ts +0 -17
- package/abstracts/Base/options.js +0 -112
- package/abstracts/Base/options.js.map +0 -1
- package/abstracts/Base/refs.d.ts +0 -30
- package/abstracts/Base/refs.js +0 -60
- package/abstracts/Base/refs.js.map +0 -1
- package/abstracts/Base/utils.js +0 -102
- package/abstracts/Base/utils.js.map +0 -1
- package/abstracts/EventManager.d.ts +0 -41
- package/abstracts/EventManager.js +0 -88
- package/abstracts/EventManager.js.map +0 -1
- package/abstracts/Service.js +0 -82
- package/abstracts/Service.js.map +0 -1
- package/abstracts/index.d.ts +0 -4
- package/abstracts/index.js +0 -5
- package/abstracts/index.js.map +0 -1
- package/components/Accordion/Accordion.d.ts +0 -83
- package/components/Accordion/Accordion.js +0 -121
- package/components/Accordion/Accordion.js.map +0 -1
- package/components/Accordion/AccordionItem.d.ts +0 -122
- package/components/Accordion/AccordionItem.js +0 -327
- package/components/Accordion/AccordionItem.js.map +0 -1
- package/components/Accordion/index.d.ts +0 -27
- package/components/Accordion/index.js +0 -39
- package/components/Accordion/index.js.map +0 -1
- package/components/Cursor.d.ts +0 -138
- package/components/Cursor.js +0 -167
- package/components/Cursor.js.map +0 -1
- package/components/Draggable.d.ts +0 -49
- package/components/Draggable.js +0 -77
- package/components/Draggable.js.map +0 -1
- package/components/Modal.d.ts +0 -158
- package/components/Modal.js +0 -270
- package/components/Modal.js.map +0 -1
- package/components/Tabs.d.ts +0 -108
- package/components/Tabs.js +0 -195
- package/components/Tabs.js.map +0 -1
- package/components/index.d.ts +0 -6
- package/components/index.js +0 -7
- package/components/index.js.map +0 -1
- package/decorators/index.js.map +0 -1
- package/decorators/withBreakpointManager.js.map +0 -1
- package/decorators/withBreakpointObserver.js.map +0 -1
- package/decorators/withDrag.js.map +0 -1
- package/decorators/withExtraConfig.js.map +0 -1
- package/decorators/withIntersectionObserver.js.map +0 -1
- package/decorators/withMountWhenInView.js.map +0 -1
- package/full.d.ts +0 -10
- package/full.js +0 -12
- package/full.js.map +0 -1
- package/full.modern.js +0 -7523
- package/full.modern.js.map +0 -1
- package/full.umd.js +0 -8277
- package/full.umd.js.map +0 -1
- package/helpers/createApp.js.map +0 -1
- package/helpers/createBase.d.ts +0 -7
- package/helpers/createBase.js +0 -7
- package/helpers/createBase.js.map +0 -1
- package/helpers/defineComponent.d.ts +0 -11
- package/helpers/defineComponent.js +0 -68
- package/helpers/defineComponent.js.map +0 -1
- package/helpers/importOnInteraction.js.map +0 -1
- package/helpers/importWhenIdle.js.map +0 -1
- package/helpers/importWhenVisible.js.map +0 -1
- package/helpers/index.js.map +0 -1
- package/helpers/utils.js.map +0 -1
- package/index.js.map +0 -1
- package/index.modern.js.map +0 -1
- package/index.umd.js.map +0 -1
- package/services/drag.js.map +0 -1
- package/services/index.js.map +0 -1
- package/services/key.js.map +0 -1
- package/services/load.js.map +0 -1
- package/services/pointer.js.map +0 -1
- package/services/raf.js.map +0 -1
- package/services/resize.js.map +0 -1
- package/services/scroll.js.map +0 -1
- package/utils/collide/boundingRectToCircle.js.map +0 -1
- package/utils/collide/collideCircleCircle.js.map +0 -1
- package/utils/collide/collideCircleRect.js.map +0 -1
- package/utils/collide/collidePointCircle.js.map +0 -1
- package/utils/collide/collidePointRect.js.map +0 -1
- package/utils/collide/collideRectRect.js.map +0 -1
- package/utils/collide/index.js.map +0 -1
- package/utils/css/classes.js.map +0 -1
- package/utils/css/index.js.map +0 -1
- package/utils/css/matrix.js.map +0 -1
- package/utils/css/styles.js.map +0 -1
- package/utils/css/transition.js.map +0 -1
- package/utils/debounce.js.map +0 -1
- package/utils/focusTrap.js.map +0 -1
- package/utils/history.js.map +0 -1
- package/utils/index.js.map +0 -1
- package/utils/keyCodes.js.map +0 -1
- package/utils/math/clamp.js.map +0 -1
- package/utils/math/clamp01.js.map +0 -1
- package/utils/math/damp.js.map +0 -1
- package/utils/math/index.js.map +0 -1
- package/utils/math/inertiaFinalValue.js.map +0 -1
- package/utils/math/lerp.js.map +0 -1
- package/utils/math/map.js.map +0 -1
- package/utils/math/round.js.map +0 -1
- package/utils/nextFrame.js.map +0 -1
- package/utils/object/autoBind.js.map +0 -1
- package/utils/object/getAllProperties.js.map +0 -1
- package/utils/object/index.js.map +0 -1
- package/utils/object/isObject.js.map +0 -1
- package/utils/string/index.js.map +0 -1
- package/utils/string/withLeadingCharacters.js.map +0 -1
- package/utils/string/withLeadingSlash.js.map +0 -1
- package/utils/string/withTrailingCharacters.js.map +0 -1
- package/utils/string/withTrailingSlash.js.map +0 -1
- package/utils/string/withoutLeadingCharacters.js.map +0 -1
- package/utils/string/withoutLeadingCharactersRecursive.js.map +0 -1
- package/utils/string/withoutLeadingSlash.js.map +0 -1
- package/utils/string/withoutTrailingCharacters.js.map +0 -1
- package/utils/string/withoutTrailingCharactersRecursive.js.map +0 -1
- package/utils/string/withoutTrailingSlash.js.map +0 -1
- 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
|
|
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}
|
|
50
|
-
*
|
|
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
|
|
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('
|
|
77
|
+
export type ServiceInterface = import('../../services').ServiceInterface;
|
|
63
78
|
export type ServiceName = keyof {
|
|
64
|
-
[x: string]: () => import("
|
|
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
|
[](https://www.npmjs.com/package/@studiometa/js-toolkit/)
|
|
4
|
-
[](https://bundlephobia.com/package/@studiometa/js-toolkit)
|
|
5
|
+
[](https://david-dm.org/studiometa/js-toolkit)
|
|
6
6
|

|
|
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
|
-
|
|
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/
|
|
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
|
-
```
|
package/decorators/index.js
CHANGED
|
@@ -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 {
|
|
3
|
+
* @template {BaseConstructor} T
|
|
4
4
|
* @param {T} BaseClass
|
|
5
|
-
* @param {Array<[String,
|
|
5
|
+
* @param {Array<[String, BaseConstructor]>} breakpoints
|
|
6
6
|
* @return {T}
|
|
7
7
|
*/
|
|
8
|
-
export default function withBreakpointManager<T extends typeof import("../
|
|
9
|
-
export type Base = import('../
|
|
10
|
-
export type
|
|
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;
|