@studiometa/js-toolkit 2.0.0-alpha.8 → 2.0.0-beta.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 +53 -2
- package/Base/index.js +153 -46
- package/Base/managers/ChildrenManager.js +22 -4
- package/Base/managers/EventsManager.d.ts +3 -1
- package/Base/managers/EventsManager.js +38 -4
- package/Base/managers/OptionsManager.d.ts +2 -0
- package/Base/managers/OptionsManager.js +17 -1
- package/Base/managers/RefsManager.d.ts +2 -0
- package/Base/managers/RefsManager.js +27 -4
- package/Base/managers/ServicesManager.d.ts +36 -4
- package/Base/managers/ServicesManager.js +33 -7
- package/Base/utils.d.ts +0 -8
- package/Base/utils.js +0 -25
- package/README.md +13 -60
- package/decorators/index.d.ts +8 -7
- package/decorators/index.js +8 -7
- package/decorators/withBreakpointObserver.js +2 -2
- package/decorators/withDrag.d.ts +3 -3
- package/decorators/withDrag.js +14 -14
- package/decorators/withIntersectionObserver.js +5 -7
- package/decorators/withMountWhenInView.d.ts +4 -4
- package/decorators/withMountWhenInView.js +13 -6
- package/decorators/withScrolledInView.d.ts +17 -0
- package/decorators/withScrolledInView.js +94 -0
- package/decorators/withVue2.d.ts +7 -0
- package/decorators/withVue2.js +45 -0
- package/helpers/index.d.ts +4 -5
- package/helpers/index.js +4 -5
- package/index.d.ts +4 -19
- package/index.js +4 -5
- package/index.modern.js +1 -1
- package/index.umd.js +1 -1
- package/package.json +1 -1
- package/services/Service.d.ts +22 -17
- package/services/Service.js +12 -7
- package/services/drag.d.ts +5 -19
- package/services/drag.js +82 -105
- package/services/index.d.ts +13 -10
- package/services/index.js +7 -8
- package/services/key.d.ts +4 -13
- package/services/key.js +55 -56
- package/services/load.d.ts +3 -13
- package/services/load.js +32 -26
- package/services/pointer.d.ts +4 -13
- package/services/pointer.js +61 -64
- package/services/raf.d.ts +3 -13
- package/services/raf.js +22 -25
- package/services/resize.d.ts +3 -13
- package/services/resize.js +48 -30
- package/services/scroll.d.ts +3 -13
- package/services/scroll.js +65 -61
- package/utils/collide/index.d.ts +6 -7
- package/utils/collide/index.js +6 -7
- package/utils/css/index.d.ts +4 -5
- package/utils/css/index.js +6 -5
- package/utils/css/transition.js +2 -2
- package/utils/history.d.ts +6 -6
- package/utils/history.js +8 -4
- package/utils/index.d.ts +11 -13
- package/utils/index.js +11 -13
- package/utils/math/damp.d.ts +6 -5
- package/utils/math/damp.js +2 -1
- package/utils/math/ease.d.ts +78 -0
- package/utils/math/ease.js +41 -0
- package/utils/math/index.d.ts +8 -7
- package/utils/math/index.js +8 -7
- package/utils/math/inertiaFinalValue.d.ts +2 -2
- package/utils/math/inertiaFinalValue.js +4 -4
- package/utils/object/getAllProperties.js +1 -1
- package/utils/object/index.d.ts +3 -4
- package/utils/object/index.js +3 -4
- package/utils/scrollTo.d.ts +11 -0
- package/utils/scrollTo.js +75 -0
- package/utils/string/index.d.ts +10 -11
- package/utils/string/index.js +10 -11
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @typedef {
|
|
2
|
+
* @typedef {typeof SERVICES_MAP & Record<string, () => ServiceInterface>} Services
|
|
3
|
+
* @typedef {keyof SERVICES_MAP|string} ServiceName
|
|
3
4
|
*/
|
|
4
5
|
/**
|
|
5
6
|
* Services management for the Base class.
|
|
7
|
+
*
|
|
8
|
+
* @todo Add support for disabled services on mount when the method is defined.
|
|
6
9
|
*/
|
|
7
10
|
export default class ServicesManager {
|
|
8
11
|
/**
|
|
@@ -56,6 +59,13 @@ export default class ServicesManager {
|
|
|
56
59
|
* @return {void}
|
|
57
60
|
*/
|
|
58
61
|
disable(service: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Toggle a service.
|
|
64
|
+
* @param {string} service The name of the service.
|
|
65
|
+
* @param {boolean} [force] The state to force.
|
|
66
|
+
* @return {void}
|
|
67
|
+
*/
|
|
68
|
+
toggle(service: string, force?: boolean): void;
|
|
59
69
|
/**
|
|
60
70
|
* Register a new service to be enabled/disabled.
|
|
61
71
|
*
|
|
@@ -74,7 +84,29 @@ export default class ServicesManager {
|
|
|
74
84
|
unregister(name: string): void;
|
|
75
85
|
}
|
|
76
86
|
export type Base = import('../index').default;
|
|
77
|
-
export type
|
|
87
|
+
export type BaseConstructor = import('../index').BaseConstructor;
|
|
88
|
+
export type ServiceInterface = import('../../services').ServiceInterface<any>;
|
|
89
|
+
export type Services = typeof SERVICES_MAP & Record<string, () => ServiceInterface>;
|
|
78
90
|
export type ServiceName = keyof {
|
|
79
|
-
|
|
80
|
-
|
|
91
|
+
scrolled: typeof useScroll;
|
|
92
|
+
resized: typeof useResize;
|
|
93
|
+
ticked: typeof useRaf;
|
|
94
|
+
moved: typeof usePointer;
|
|
95
|
+
keyed: typeof useKey;
|
|
96
|
+
loaded: typeof useLoad;
|
|
97
|
+
} | string;
|
|
98
|
+
declare namespace SERVICES_MAP {
|
|
99
|
+
export { useScroll as scrolled };
|
|
100
|
+
export { useResize as resized };
|
|
101
|
+
export { useRaf as ticked };
|
|
102
|
+
export { usePointer as moved };
|
|
103
|
+
export { useKey as keyed };
|
|
104
|
+
export { useLoad as loaded };
|
|
105
|
+
}
|
|
106
|
+
import useScroll from "../../services/scroll.js";
|
|
107
|
+
import useResize from "../../services/resize.js";
|
|
108
|
+
import useRaf from "../../services/raf.js";
|
|
109
|
+
import usePointer from "../../services/pointer.js";
|
|
110
|
+
import useKey from "../../services/key.js";
|
|
111
|
+
import useLoad from "../../services/load.js";
|
|
112
|
+
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
4
|
|
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
6
|
|
|
7
7
|
import usePointer from '../../services/pointer.js';
|
|
8
8
|
import useRaf from '../../services/raf.js';
|
|
@@ -10,7 +10,7 @@ import useResize from '../../services/resize.js';
|
|
|
10
10
|
import useScroll from '../../services/scroll.js';
|
|
11
11
|
import useKey from '../../services/key.js';
|
|
12
12
|
import useLoad from '../../services/load.js';
|
|
13
|
-
import { hasMethod
|
|
13
|
+
import { hasMethod } from '../utils.js';
|
|
14
14
|
var SERVICES_MAP = {
|
|
15
15
|
scrolled: useScroll,
|
|
16
16
|
resized: useResize,
|
|
@@ -30,11 +30,17 @@ export default class ServicesManager {
|
|
|
30
30
|
|
|
31
31
|
_defineProperty(this, "__customServices", {});
|
|
32
32
|
|
|
33
|
-
this
|
|
33
|
+
Object.defineProperties(this, {
|
|
34
|
+
__base: {
|
|
35
|
+
enumerable: false,
|
|
36
|
+
writable: false,
|
|
37
|
+
value: instance
|
|
38
|
+
}
|
|
39
|
+
});
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
has(service) {
|
|
37
|
-
if (!hasMethod(this.__base, service) &&
|
|
43
|
+
if (!((hasMethod(this.__base, service) || this.__base.__hasEvent(service)) && this.__services[service])) {
|
|
38
44
|
return false;
|
|
39
45
|
}
|
|
40
46
|
|
|
@@ -50,7 +56,7 @@ export default class ServicesManager {
|
|
|
50
56
|
return this.disable.bind(this, service);
|
|
51
57
|
}
|
|
52
58
|
|
|
53
|
-
if (!hasMethod(this.__base, service) || !this.__services[service]) {
|
|
59
|
+
if (!(hasMethod(this.__base, service) || this.__base.__hasEvent(service)) || !this.__services[service]) {
|
|
54
60
|
return function noop() {};
|
|
55
61
|
}
|
|
56
62
|
|
|
@@ -65,7 +71,7 @@ export default class ServicesManager {
|
|
|
65
71
|
args[_key] = arguments[_key];
|
|
66
72
|
}
|
|
67
73
|
|
|
68
|
-
|
|
74
|
+
self.__base.__callMethod(service, ...args);
|
|
69
75
|
}
|
|
70
76
|
|
|
71
77
|
add(this.__base.$id, serviceHandler);
|
|
@@ -94,8 +100,26 @@ export default class ServicesManager {
|
|
|
94
100
|
remove(this.__base.$id);
|
|
95
101
|
}
|
|
96
102
|
|
|
103
|
+
toggle(service, force) {
|
|
104
|
+
if (typeof force !== 'undefined') {
|
|
105
|
+
if (force && !this.has(service)) {
|
|
106
|
+
this.enable(service);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (!force && this.has(service)) {
|
|
110
|
+
this.disable(service);
|
|
111
|
+
}
|
|
112
|
+
} else if (this.has(service)) {
|
|
113
|
+
this.disable(service);
|
|
114
|
+
} else {
|
|
115
|
+
this.enable(service);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
97
119
|
register(name, useFunction) {
|
|
98
120
|
this.__customServices[name] = useFunction;
|
|
121
|
+
|
|
122
|
+
this.__base.__addEmits(name);
|
|
99
123
|
}
|
|
100
124
|
|
|
101
125
|
unregister(name) {
|
|
@@ -103,6 +127,8 @@ export default class ServicesManager {
|
|
|
103
127
|
throw new Error("[ServicesManager] The `".concat(name, "` core service can not be unregistered."));
|
|
104
128
|
}
|
|
105
129
|
|
|
130
|
+
this.__base.__removeEmits(name);
|
|
131
|
+
|
|
106
132
|
delete this.__customServices[name];
|
|
107
133
|
}
|
|
108
134
|
|
package/Base/utils.d.ts
CHANGED
|
@@ -9,14 +9,6 @@
|
|
|
9
9
|
* @return {Boolean}
|
|
10
10
|
*/
|
|
11
11
|
export function hasMethod(obj: any, name: string): boolean;
|
|
12
|
-
/**
|
|
13
|
-
* Call the given method while applying the given arguments.
|
|
14
|
-
*
|
|
15
|
-
* @param {Base} instance The Base instance on which to trigger the method.
|
|
16
|
-
* @param {String} method The method to call.
|
|
17
|
-
* @param {...any} args The arguments to pass to the method.
|
|
18
|
-
*/
|
|
19
|
-
export function callMethod(instance: Base, method: string, ...args: any[]): import("./index.js").default;
|
|
20
12
|
/**
|
|
21
13
|
* Get a list of elements based on the name of a component.
|
|
22
14
|
*
|
package/Base/utils.js
CHANGED
|
@@ -1,31 +1,6 @@
|
|
|
1
1
|
export function hasMethod(obj, name) {
|
|
2
2
|
return typeof obj[name] === 'function';
|
|
3
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
4
|
export function getComponentElements(nameOrSelector) {
|
|
30
5
|
var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
|
|
31
6
|
var selector = "[data-component=\"".concat(nameOrSelector, "\"]");
|
package/README.md
CHANGED
|
@@ -15,70 +15,23 @@ Install the latest version via NPM:
|
|
|
15
15
|
npm install @studiometa/js-toolkit
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
##
|
|
18
|
+
## Documentation
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
This project contains a JavaScript micro-framework and its utility functions whose main objectives are:
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
- Enforcing best-practice and consistency between projects
|
|
23
|
+
- Using elements from the DOM easily
|
|
24
|
+
- Enabling custom behaviours on component initialization or other user events
|
|
25
|
+
- Disabling custom behaviours on component destruction or other user events
|
|
26
|
+
- Initializing components in the right place at the right time
|
|
27
|
+
- Defining dependencies between components
|
|
25
28
|
|
|
26
|
-
|
|
27
|
-
static config = {
|
|
28
|
-
name: 'Component',
|
|
29
|
-
}
|
|
30
|
-
}
|
|
29
|
+
Visit [js-toolkit.studiometa.dev](https://js-toolkit.studiometa.dev) to learn more.
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
static config = {
|
|
34
|
-
name: 'App',
|
|
35
|
-
log: true,
|
|
36
|
-
debug: true,
|
|
37
|
-
components: {
|
|
38
|
-
Modal,
|
|
39
|
-
Component,
|
|
40
|
-
},
|
|
41
|
-
refs: ['btn', 'items[]'],
|
|
42
|
-
options: {
|
|
43
|
-
foo: String,
|
|
44
|
-
bar: { type: String, default: 'bar' },
|
|
45
|
-
}
|
|
46
|
-
};
|
|
31
|
+
## Contributing
|
|
47
32
|
|
|
48
|
-
|
|
49
|
-
this.$log('mounted');
|
|
50
|
-
|
|
51
|
-
// Options
|
|
52
|
-
this.$options.name; // 'App'
|
|
53
|
-
this.$options.log; // true
|
|
54
|
-
this.$options.debug; // true
|
|
55
|
-
this.$options.foo // ''
|
|
56
|
-
this.$options.bar // 'bar'
|
|
57
|
-
|
|
58
|
-
// Children
|
|
59
|
-
this.$children.Modal; // Array<Modal>
|
|
60
|
-
|
|
61
|
-
// DOM references
|
|
62
|
-
this.$refs.btn; // <button data-ref="btn"></button>
|
|
63
|
-
this.$refs.items; // <li data-ref="items[]"></li>
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
destroyed() {
|
|
67
|
-
this.$log('destroyed');
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
scrolled(props) {
|
|
71
|
-
this.$log('scrolled', props);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
resized(props) {
|
|
75
|
-
this.$log('resized', props);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export default new App(document.querySelector('#app'));
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Read the [documentation](https://js-toolkit.meta.fr/) to learn more.
|
|
33
|
+
This projects follows the [Git Flow](https://github.com/petervanderdoes/gitflow-avh) methodology to manage its branches and features. The packages and their dependencies are managed with NPM workspaces. The files are linted with ESLint, type checked with TypeScript and formatted with Prettier.
|
|
83
34
|
|
|
35
|
+
## License
|
|
84
36
|
|
|
37
|
+
See [LICENSE](./LICENSE).
|
package/decorators/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export {
|
|
1
|
+
export { default as withBreakpointManager } from "./withBreakpointManager.js";
|
|
2
|
+
export { default as withBreakpointObserver } from "./withBreakpointObserver.js";
|
|
3
|
+
export { default as withDrag } from "./withDrag.js";
|
|
4
|
+
export { default as withExtraConfig } from "./withExtraConfig.js";
|
|
5
|
+
export { default as withIntersectionObserver } from "./withIntersectionObserver.js";
|
|
6
|
+
export { default as withMountWhenInView } from "./withMountWhenInView.js";
|
|
7
|
+
export { default as withScrolledInView } from "./withScrolledInView.js";
|
|
8
|
+
export { default as withVue2 } from "./withVue2.js";
|
package/decorators/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export {
|
|
1
|
+
export { default as withBreakpointManager } from './withBreakpointManager.js';
|
|
2
|
+
export { default as withBreakpointObserver } from './withBreakpointObserver.js';
|
|
3
|
+
export { default as withDrag } from './withDrag.js';
|
|
4
|
+
export { default as withExtraConfig } from './withExtraConfig.js';
|
|
5
|
+
export { default as withIntersectionObserver } from './withIntersectionObserver.js';
|
|
6
|
+
export { default as withMountWhenInView } from './withMountWhenInView.js';
|
|
7
|
+
export { default as withScrolledInView } from './withScrolledInView.js';
|
|
8
|
+
export { default as withVue2 } from './withVue2.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
4
|
|
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
6
|
|
|
7
7
|
import useResize from '../services/resize.js';
|
|
8
8
|
|
package/decorators/withDrag.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @typedef {import('../services/drag').DragServiceOptions} DragServiceOptions
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
* @typedef {DragServiceOptions & { target
|
|
7
|
+
* @typedef {DragServiceOptions & { target?: (this:Base, Base) => HTMLElement }} DragDecoratorOptions
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
10
|
* Add dragging capabilities to a component.
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
* @param {DragDecoratorOptions} options
|
|
15
15
|
* @return {T}
|
|
16
16
|
*/
|
|
17
|
-
export default function withDrag<T extends typeof import("../Base").default>(BaseClass: T, options?: DragDecoratorOptions): T;
|
|
17
|
+
export default function withDrag<T extends typeof import("../Base").default>(BaseClass: T, { target, ...options }?: DragDecoratorOptions): T;
|
|
18
18
|
export type Base = import('../Base').default;
|
|
19
19
|
export type BaseConstructor = import('../Base').BaseConstructor;
|
|
20
20
|
export type DragServiceOptions = import('../services/drag').DragServiceOptions;
|
|
21
21
|
export type DragDecoratorOptions = import("../services/drag.js").DragServiceOptions & {
|
|
22
|
-
target
|
|
22
|
+
target?: (this: import("../Base").default, Base: any) => HTMLElement;
|
|
23
23
|
};
|
package/decorators/withDrag.js
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
1
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
2
3
|
var _excluded = ["target"];
|
|
3
4
|
import useDrag from '../services/drag.js';
|
|
4
5
|
export default function withDrag(BaseClass) {
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
var _class, _temp;
|
|
7
|
+
|
|
8
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
9
|
+
{
|
|
10
|
+
target = instance => instance.$el
|
|
11
|
+
} = _ref,
|
|
12
|
+
options = _objectWithoutProperties(_ref, _excluded);
|
|
9
13
|
|
|
10
|
-
|
|
11
|
-
return class extends BaseClass {
|
|
14
|
+
return _temp = _class = class extends BaseClass {
|
|
12
15
|
constructor(el) {
|
|
13
16
|
super(el);
|
|
14
17
|
this.$on('mounted', () => {
|
|
15
|
-
|
|
16
|
-
target
|
|
17
|
-
} = options,
|
|
18
|
-
otherOptions = _objectWithoutProperties(options, _excluded);
|
|
19
|
-
|
|
20
|
-
var boundUseDrag = useDrag.bind(undefined, target.call(this), otherOptions);
|
|
21
|
-
this.$services.register('dragged', boundUseDrag);
|
|
18
|
+
this.$services.register('dragged', useDrag.bind(undefined, target.call(this, this), options));
|
|
22
19
|
this.$services.enable('dragged');
|
|
23
20
|
});
|
|
24
21
|
this.$on('destroyed', () => {
|
|
@@ -27,5 +24,8 @@ export default function withDrag(BaseClass) {
|
|
|
27
24
|
});
|
|
28
25
|
}
|
|
29
26
|
|
|
30
|
-
}
|
|
27
|
+
}, _defineProperty(_class, "config", {
|
|
28
|
+
name: "".concat(BaseClass.config.name, "WithDrag"),
|
|
29
|
+
emits: ['dragged']
|
|
30
|
+
}), _temp;
|
|
31
31
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
4
|
|
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
6
|
|
|
7
7
|
function createArrayOfNumber(length) {
|
|
8
8
|
return [...new Array(length + 1)].map((val, index) => index / length);
|
|
@@ -23,10 +23,7 @@ export default function withIntersectionObserver(BaseClass) {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
this.$observer = new IntersectionObserver(entries => {
|
|
26
|
-
this.
|
|
27
|
-
|
|
28
|
-
this.$emit('intersected', entries);
|
|
29
|
-
this.intersected(entries);
|
|
26
|
+
this.__callMethod('intersected', entries);
|
|
30
27
|
}, _objectSpread(_objectSpread({}, defaultOptions), this.$options.intersectionObserver || {}));
|
|
31
28
|
this.$on('mounted', () => {
|
|
32
29
|
this.$observer.observe(this.$el);
|
|
@@ -41,6 +38,7 @@ export default function withIntersectionObserver(BaseClass) {
|
|
|
41
38
|
name: "".concat((_BaseClass$config$nam = BaseClass === null || BaseClass === void 0 ? void 0 : (_BaseClass$config = BaseClass.config) === null || _BaseClass$config === void 0 ? void 0 : _BaseClass$config.name) !== null && _BaseClass$config$nam !== void 0 ? _BaseClass$config$nam : '', "WithIntersectionObserver"),
|
|
42
39
|
options: _objectSpread(_objectSpread({}, (BaseClass === null || BaseClass === void 0 ? void 0 : (_BaseClass$config2 = BaseClass.config) === null || _BaseClass$config2 === void 0 ? void 0 : _BaseClass$config2.options) || {}), {}, {
|
|
43
40
|
intersectionObserver: Object
|
|
44
|
-
})
|
|
41
|
+
}),
|
|
42
|
+
emits: ['intersected']
|
|
45
43
|
})), _temp;
|
|
46
44
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
7
|
* @typedef {Object} WithMountWhenInViewOptions
|
|
8
|
-
* @property {
|
|
8
|
+
* @property {IntersectionObserverInit} intersectionObserver
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
11
11
|
* @typedef {Object} WithMountWhenInViewInterface
|
|
@@ -17,15 +17,15 @@
|
|
|
17
17
|
*
|
|
18
18
|
* @template {BaseConstructor} T
|
|
19
19
|
* @param {T} BaseClass The Base class to extend.
|
|
20
|
-
* @param {
|
|
20
|
+
* @param {IntersectionObserverInit} [defaultOptions] The options for the IntersectionObserver instance.
|
|
21
21
|
* @return {T}
|
|
22
22
|
*/
|
|
23
|
-
export default function withMountWhenInView<T extends typeof import("../Base").default>(BaseClass: T, defaultOptions?:
|
|
23
|
+
export default function withMountWhenInView<T extends typeof import("../Base").default>(BaseClass: T, defaultOptions?: IntersectionObserverInit): T;
|
|
24
24
|
export type Base = import('../Base').default;
|
|
25
25
|
export type BaseOptions = import('../Base').BaseOptions;
|
|
26
26
|
export type BaseConstructor = import('../Base').BaseConstructor;
|
|
27
27
|
export type WithMountWhenInViewOptions = {
|
|
28
|
-
intersectionObserver:
|
|
28
|
+
intersectionObserver: IntersectionObserverInit;
|
|
29
29
|
};
|
|
30
30
|
export type WithMountWhenInViewInterface = {
|
|
31
31
|
terminated: () => void;
|
|
@@ -2,9 +2,13 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
2
|
import _classPrivateFieldGet from "@babel/runtime/helpers/classPrivateFieldGet";
|
|
3
3
|
import _classPrivateFieldSet from "@babel/runtime/helpers/classPrivateFieldSet";
|
|
4
4
|
|
|
5
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
5
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
6
|
|
|
7
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
7
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
8
|
+
|
|
9
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
10
|
+
|
|
11
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
8
12
|
|
|
9
13
|
export default function withMountWhenInView(BaseClass) {
|
|
10
14
|
var _class, _isVisible, _observer, _temp, _BaseClass$config$nam, _BaseClass$config, _BaseClass$config2;
|
|
@@ -16,12 +20,12 @@ export default function withMountWhenInView(BaseClass) {
|
|
|
16
20
|
constructor(element) {
|
|
17
21
|
super(element);
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
_classPrivateFieldInitSpec(this, _isVisible, {
|
|
20
24
|
writable: true,
|
|
21
25
|
value: false
|
|
22
26
|
});
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
_classPrivateFieldInitSpec(this, _observer, {
|
|
25
29
|
writable: true,
|
|
26
30
|
value: void 0
|
|
27
31
|
});
|
|
@@ -32,8 +36,11 @@ export default function withMountWhenInView(BaseClass) {
|
|
|
32
36
|
if (_classPrivateFieldGet(this, _isVisible) !== isVisible) {
|
|
33
37
|
_classPrivateFieldSet(this, _isVisible, isVisible);
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
|
|
39
|
+
if (isVisible) {
|
|
40
|
+
this.$mount();
|
|
41
|
+
} else {
|
|
42
|
+
setTimeout(() => this.$destroy());
|
|
43
|
+
}
|
|
37
44
|
}
|
|
38
45
|
}, _objectSpread(_objectSpread({}, defaultOptions), this.$options.intersectionObserver)));
|
|
39
46
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import('../Base').default} Base
|
|
3
|
+
* @typedef {import('../Base').BaseConstructor} BaseConstructor
|
|
4
|
+
* @typedef {import('../Base').BaseConfig} BaseConfig
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Add scrolled in view capabilities to a component.
|
|
8
|
+
*
|
|
9
|
+
* @template {BaseConstructor} T
|
|
10
|
+
* @param {T} BaseClass
|
|
11
|
+
* @param {IntersectionObserverInit} options
|
|
12
|
+
* @return {T}
|
|
13
|
+
*/
|
|
14
|
+
export default function withScrolledInView<T extends typeof import("../Base").default>(BaseClass: T, options: IntersectionObserverInit): T;
|
|
15
|
+
export type Base = import('../Base').default;
|
|
16
|
+
export type BaseConstructor = import('../Base').BaseConstructor;
|
|
17
|
+
export type BaseConfig = import('../Base').BaseConfig;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import withMountWhenInView from './withMountWhenInView.js';
|
|
3
|
+
import { damp, clamp, clamp01 } from '../utils/index.js';
|
|
4
|
+
export default function withScrolledInView(BaseClass, options) {
|
|
5
|
+
var _class, _temp;
|
|
6
|
+
|
|
7
|
+
return _temp = _class = class extends withMountWhenInView(BaseClass, options) {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
|
|
11
|
+
_defineProperty(this, "__props", {
|
|
12
|
+
start: {
|
|
13
|
+
x: 0,
|
|
14
|
+
y: 0
|
|
15
|
+
},
|
|
16
|
+
end: {
|
|
17
|
+
x: 0,
|
|
18
|
+
y: 0
|
|
19
|
+
},
|
|
20
|
+
current: {
|
|
21
|
+
x: 0,
|
|
22
|
+
y: 0
|
|
23
|
+
},
|
|
24
|
+
progress: {
|
|
25
|
+
x: 0,
|
|
26
|
+
y: 0
|
|
27
|
+
},
|
|
28
|
+
dampedProgress: {
|
|
29
|
+
x: 0,
|
|
30
|
+
y: 0
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
_defineProperty(this, "dampFactor", 0.1);
|
|
35
|
+
|
|
36
|
+
_defineProperty(this, "dampPrecision", 0.001);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
mounted() {
|
|
40
|
+
this.__setProps();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
resized() {
|
|
44
|
+
this.__setProps();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
scrolled(props) {
|
|
48
|
+
if (!this.$services.has('ticked') && props.changed.y || props.changed.x) {
|
|
49
|
+
this.$services.enable('ticked');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
ticked() {
|
|
54
|
+
this.__props.current.x = clamp(window.pageXOffset, this.__props.start.x, this.__props.end.x);
|
|
55
|
+
this.__props.progress.x = clamp01((this.__props.current.x - this.__props.start.x) / (this.__props.end.x - this.__props.start.x));
|
|
56
|
+
this.__props.dampedProgress.x = damp(this.__props.progress.x, this.__props.dampedProgress.x, this.dampFactor, this.dampPrecision);
|
|
57
|
+
this.__props.current.y = clamp(window.pageYOffset, this.__props.start.y, this.__props.end.y);
|
|
58
|
+
this.__props.progress.y = clamp01((this.__props.current.y - this.__props.start.y) / (this.__props.end.y - this.__props.start.y));
|
|
59
|
+
this.__props.dampedProgress.y = damp(this.__props.progress.y, this.__props.dampedProgress.y, this.dampFactor, this.dampPrecision);
|
|
60
|
+
|
|
61
|
+
if (this.__props.dampedProgress.x === this.__props.progress.x && this.__props.dampedProgress.y === this.__props.progress.y) {
|
|
62
|
+
this.$services.disable('ticked');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
this.__callMethod('scrolledInView', this.__props);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
__setProps() {
|
|
69
|
+
var sizes = this.$el.getBoundingClientRect();
|
|
70
|
+
var yEnd = sizes.top + window.pageYOffset + sizes.height;
|
|
71
|
+
var yStart = yEnd - window.innerHeight - sizes.height;
|
|
72
|
+
var yCurrent = clamp(window.pageYOffset, yStart, yEnd);
|
|
73
|
+
var yProgress = clamp01((yCurrent - yStart) / (yEnd - yStart));
|
|
74
|
+
var xEnd = sizes.left + window.pageXOffset + sizes.width;
|
|
75
|
+
var xStart = xEnd - window.innerWidth - sizes.width;
|
|
76
|
+
var xCurrent = clamp(window.pageXOffset, xStart, xEnd);
|
|
77
|
+
var xProgress = clamp01((xCurrent - xStart) / (xEnd - xStart));
|
|
78
|
+
this.__props.start.x = xStart;
|
|
79
|
+
this.__props.start.y = yStart;
|
|
80
|
+
this.__props.end.x = xEnd;
|
|
81
|
+
this.__props.end.y = yEnd;
|
|
82
|
+
this.__props.current.x = xCurrent;
|
|
83
|
+
this.__props.current.y = yCurrent;
|
|
84
|
+
this.__props.progress.x = xProgress;
|
|
85
|
+
this.__props.progress.y = yProgress;
|
|
86
|
+
this.__props.dampedProgress.x = damp(xProgress, this.__props.dampedProgress.x);
|
|
87
|
+
this.__props.dampedProgress.y = damp(yProgress, this.__props.dampedProgress.y);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
}, _defineProperty(_class, "config", {
|
|
91
|
+
name: "".concat(BaseClass.config.name, "WithMountWhenInView"),
|
|
92
|
+
emits: ['scrolledInView']
|
|
93
|
+
}), _temp;
|
|
94
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare function _default<T extends typeof import("../Base").default>(BaseClass: T, Vue: import('vue').VueConstructor): T;
|
|
2
|
+
export default _default;
|
|
3
|
+
export type Base = import('../Base').default;
|
|
4
|
+
export type BaseConstructor = import('../Base').BaseConstructor;
|
|
5
|
+
export type WithVue2Refs = {
|
|
6
|
+
vue: HTMLElement;
|
|
7
|
+
};
|