@studiometa/js-toolkit 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/Base/index.cjs +15 -21
  2. package/Base/index.d.ts +5 -5
  3. package/Base/index.js +5 -5
  4. package/Base/managers/AbstractManager.cjs +2 -2
  5. package/Base/managers/AbstractManager.d.ts +11 -21
  6. package/Base/managers/AbstractManager.js +1 -1
  7. package/Base/managers/ChildrenManager.cjs +3 -9
  8. package/Base/managers/ChildrenManager.d.ts +2 -2
  9. package/Base/managers/ChildrenManager.js +2 -2
  10. package/Base/managers/EventsManager.cjs +3 -3
  11. package/Base/managers/EventsManager.d.ts +2 -2
  12. package/Base/managers/EventsManager.js +2 -2
  13. package/Base/managers/OptionsManager.cjs +6 -8
  14. package/Base/managers/OptionsManager.d.ts +42 -55
  15. package/Base/managers/OptionsManager.js +4 -6
  16. package/Base/managers/RefsManager.cjs +9 -14
  17. package/Base/managers/RefsManager.d.ts +3 -11
  18. package/Base/managers/RefsManager.js +7 -6
  19. package/Base/managers/ResponsiveOptionsManager.cjs +3 -9
  20. package/Base/managers/ResponsiveOptionsManager.d.ts +8 -4
  21. package/Base/managers/ResponsiveOptionsManager.js +2 -2
  22. package/Base/managers/ServicesManager.cjs +19 -36
  23. package/Base/managers/ServicesManager.d.ts +33 -58
  24. package/Base/managers/ServicesManager.js +11 -22
  25. package/decorators/withResponsiveOptions.cjs +2 -8
  26. package/decorators/withResponsiveOptions.js +1 -1
  27. package/package.json +1 -1
  28. package/utils/css/animate.cjs +29 -2
  29. package/utils/css/animate.d.ts +4 -24
  30. package/utils/css/animate.js +29 -2
  31. package/utils/css/classes.cjs +5 -2
  32. package/utils/css/classes.d.ts +6 -6
  33. package/utils/css/classes.js +5 -2
  34. package/utils/css/index.cjs +1 -1
  35. package/utils/css/index.d.ts +7 -7
  36. package/utils/css/styles.cjs +11 -8
  37. package/utils/css/styles.d.ts +4 -4
  38. package/utils/css/styles.js +11 -8
  39. package/utils/css/transform.cjs +5 -2
  40. package/utils/css/transform.d.ts +2 -2
  41. package/utils/css/transform.js +5 -2
  42. package/utils/css/transition.cjs +7 -1
  43. package/utils/css/transition.d.ts +5 -8
  44. package/utils/css/transition.js +7 -1
  45. package/utils/css/utils.cjs +31 -0
  46. package/utils/css/utils.d.ts +1 -0
  47. package/utils/css/utils.js +9 -0
  48. package/utils/index.cjs +1 -1
  49. package/utils/index.d.ts +19 -19
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __export = (target, all) => {
8
6
  for (var name in all)
@@ -16,19 +14,15 @@ var __copyProps = (to, from, except, desc) => {
16
14
  }
17
15
  return to;
18
16
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
- mod
22
- ));
23
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
18
 
25
19
  // packages/js-toolkit/Base/managers/ResponsiveOptionsManager.ts
26
20
  var ResponsiveOptionsManager_exports = {};
27
21
  __export(ResponsiveOptionsManager_exports, {
28
- default: () => ResponsiveOptionsManager
22
+ ResponsiveOptionsManager: () => ResponsiveOptionsManager
29
23
  });
30
24
  module.exports = __toCommonJS(ResponsiveOptionsManager_exports);
31
- var import_OptionsManager = __toESM(require("./OptionsManager.cjs"), 1);
25
+ var import_OptionsManager = require("./OptionsManager.cjs");
32
26
  var import_services = require("../../services/index.cjs");
33
27
  var import_utils = require("../../utils/index.cjs");
34
28
  function __getResponsiveName(that, name) {
@@ -48,7 +42,7 @@ function __getResponsiveName(that, name) {
48
42
  });
49
43
  return responsiveName;
50
44
  }
51
- var ResponsiveOptionsManager = class extends import_OptionsManager.default {
45
+ var ResponsiveOptionsManager = class extends import_OptionsManager.OptionsManager {
52
46
  get(name, config) {
53
47
  if (!config.responsive) {
54
48
  return super.get(name, config);
@@ -1,8 +1,12 @@
1
- import OptionsManager from './OptionsManager.js';
1
+ import { OptionsManager } from './OptionsManager.js';
2
+ import type { OptionObject } from './OptionsManager.js';
3
+ export declare type ResponsiveOptionObject = OptionObject & {
4
+ responsive?: boolean;
5
+ };
2
6
  /**
3
7
  * Class options to manage options as data attributes on an HTML element.
4
8
  */
5
- export default class ResponsiveOptionsManager extends OptionsManager {
9
+ export declare class ResponsiveOptionsManager extends OptionsManager {
6
10
  /**
7
11
  * Get an option value.
8
12
  *
@@ -10,7 +14,7 @@ export default class ResponsiveOptionsManager extends OptionsManager {
10
14
  * @param {ResponsiveOptionObject} config The option configuration.
11
15
  * @returns {any}
12
16
  */
13
- get(name: any, config: any): any;
17
+ get(name: string, config: ResponsiveOptionObject): any;
14
18
  /**
15
19
  * Set an option value.
16
20
  *
@@ -18,5 +22,5 @@ export default class ResponsiveOptionsManager extends OptionsManager {
18
22
  * @param {any} value The new value.
19
23
  * @param {ResponsiveOptionObject} config The option configuration.
20
24
  */
21
- set(name: any, value: any, config: any): void;
25
+ set(name: string, value: unknown, config: ResponsiveOptionObject): void;
22
26
  }
@@ -1,4 +1,4 @@
1
- import OptionsManager, { __getPropertyName } from "./OptionsManager.js";
1
+ import { OptionsManager, __getPropertyName } from "./OptionsManager.js";
2
2
  import { useResize } from "../../services/index.js";
3
3
  import { isDev } from "../../utils/index.js";
4
4
  function __getResponsiveName(that, name) {
@@ -36,5 +36,5 @@ class ResponsiveOptionsManager extends OptionsManager {
36
36
  }
37
37
  }
38
38
  export {
39
- ResponsiveOptionsManager as default
39
+ ResponsiveOptionsManager
40
40
  };
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
6
  var __export = (target, all) => {
@@ -17,40 +15,31 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
- mod
23
- ));
24
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
19
  var __publicField = (obj, key, value) => {
26
20
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
27
21
  return value;
28
22
  };
29
23
 
30
- // packages/js-toolkit/Base/managers/ServicesManager.js
24
+ // packages/js-toolkit/Base/managers/ServicesManager.ts
31
25
  var ServicesManager_exports = {};
32
26
  __export(ServicesManager_exports, {
33
- default: () => ServicesManager
27
+ ServicesManager: () => ServicesManager
34
28
  });
35
29
  module.exports = __toCommonJS(ServicesManager_exports);
36
- var import_pointer = __toESM(require("../../services/pointer.cjs"), 1);
37
- var import_raf = __toESM(require("../../services/raf.cjs"), 1);
38
- var import_resize = __toESM(require("../../services/resize.cjs"), 1);
39
- var import_scroll = __toESM(require("../../services/scroll.cjs"), 1);
40
- var import_key = __toESM(require("../../services/key.cjs"), 1);
41
- var import_load = __toESM(require("../../services/load.cjs"), 1);
42
- var import_AbstractManager = __toESM(require("./AbstractManager.cjs"), 1);
30
+ var import_services = require("../../services/index.cjs");
31
+ var import_AbstractManager = require("./AbstractManager.cjs");
43
32
  var import_utils = require("../../utils/index.cjs");
44
33
  var SERVICES_MAP = {
45
- scrolled: import_scroll.default,
46
- resized: import_resize.default,
47
- ticked: import_raf.default,
48
- moved: import_pointer.default,
49
- keyed: import_key.default,
50
- loaded: import_load.default
34
+ scrolled: import_services.useScroll,
35
+ resized: import_services.useResize,
36
+ ticked: import_services.useRaf,
37
+ moved: import_services.usePointer,
38
+ keyed: import_services.useKey,
39
+ loaded: import_services.useLoad
51
40
  };
52
41
  var SERVICE_NAMES = Object.keys(SERVICES_MAP);
53
- var ServicesManager = class extends import_AbstractManager.default {
42
+ var ServicesManager = class extends import_AbstractManager.AbstractManager {
54
43
  constructor() {
55
44
  super(...arguments);
56
45
  __publicField(this, "__customServices", {});
@@ -78,25 +67,19 @@ var ServicesManager = class extends import_AbstractManager.default {
78
67
  if (!((0, import_utils.isFunction)(this.__base[service]) || this.__base.__hasEvent(service)) || !this.__services[service]) {
79
68
  return import_utils.noop;
80
69
  }
81
- const { add } = this.__services[service]();
82
- const self = this;
83
- function serviceHandler(...args) {
84
- return self.__base.__callMethod(service, ...args);
85
- }
86
- add(this.__base.$id, serviceHandler);
70
+ const serviceInstance = this.__services[service]();
71
+ serviceInstance.add(this.__base.$id, (...args) => {
72
+ this.__base.__callMethod(service, ...args);
73
+ });
87
74
  return this.disable.bind(this, service);
88
75
  }
89
76
  enableAll() {
90
- return Object.keys(this.__services).map(
91
- (serviceName) => this.enable(serviceName)
92
- );
77
+ return Object.keys(this.__services).map((serviceName) => this.enable(serviceName));
93
78
  }
94
79
  disableAll() {
95
- Object.keys(this.__services).forEach(
96
- (serviceName) => {
97
- this.disable(serviceName);
98
- }
99
- );
80
+ Object.keys(this.__services).forEach((serviceName) => {
81
+ this.disable(serviceName);
82
+ });
100
83
  }
101
84
  disable(service) {
102
85
  if (!this.__services[service]) {
@@ -1,47 +1,55 @@
1
- /**
2
- * @typedef {typeof SERVICES_MAP & Record<string, () => ServiceInterface>} Services
3
- * @typedef {keyof SERVICES_MAP|string} ServiceName
4
- */
1
+ import { usePointer, useRaf, useResize, useScroll, useKey, useLoad } from '../../services/index.js';
2
+ import type { PointerServiceInterface, RafServiceInterface, ResizeServiceInterface, ScrollServiceInterface, KeyServiceInterface, LoadServiceInterface, ServiceInterface } from '../../services/index.js';
3
+ import { AbstractManager } from './AbstractManager.js';
4
+ declare type Services = {
5
+ scrolled: ScrollServiceInterface;
6
+ resized: ResizeServiceInterface;
7
+ ticked: RafServiceInterface;
8
+ moved: PointerServiceInterface;
9
+ keyed: KeyServiceInterface;
10
+ loaded: LoadServiceInterface;
11
+ } & Record<string, ServiceInterface<unknown>>;
12
+ declare type ServiceNames = keyof Services;
5
13
  /**
6
14
  * Services management for the Base class.
7
15
  *
8
16
  * @todo Add support for disabled services on mount when the method is defined.
9
17
  */
10
- export default class ServicesManager extends AbstractManager {
18
+ export declare class ServicesManager extends AbstractManager {
11
19
  /**
12
- * @type {Record<string, () => ServiceInterface>}
20
+ * Holder for custom services.
13
21
  */
14
- __customServices: Record<string, () => import("../../services").ServiceInterface<any>>;
22
+ __customServices: Record<string, <T>() => ServiceInterface<T>>;
15
23
  /**
16
- * @returns {Record<string, () => ServiceInterface>}
24
+ * Get registered services.
17
25
  */
18
- get __services(): Record<string, () => import("../../services").ServiceInterface<any>>;
26
+ get __services(): {
27
+ scrolled: typeof useScroll;
28
+ resized: typeof useResize;
29
+ ticked: typeof useRaf;
30
+ moved: typeof usePointer;
31
+ keyed: typeof useKey;
32
+ loaded: typeof useLoad;
33
+ };
19
34
  /**
20
35
  * Test if the given service is registered.
21
- *
22
- * @param {ServiceName} service The name of the service.
23
- * @returns {boolean}
24
36
  */
25
- has(service: ServiceName): boolean;
37
+ has(service: ServiceNames | string): boolean;
26
38
  /**
27
39
  * Get a service props by name.
28
- * @param {ServiceName} service The name of the service.
29
- * @returns {ReturnType<ServiceInterface['props']>}
30
40
  */
31
- get(service: ServiceName): ReturnType<import("../../services").ServiceInterface<any>['props']>;
41
+ get<S extends ServiceNames | string>(service: S): ReturnType<Services[S]['props']>;
32
42
  /**
33
43
  * Init the given service and bind it to the given instance.
34
44
  *
35
- * @param {ServiceName} service The name of the service.
45
+ * @param {ServiceNames} service The name of the service.
36
46
  * @returns {() => void} A function to unbind the service.
37
47
  */
38
- enable(service: ServiceName): () => void;
48
+ enable(service: ServiceNames): () => void;
39
49
  /**
40
50
  * Enable all services and return methods to disable them.
41
- *
42
- * @returns {Function[]}
43
51
  */
44
- enableAll(): Function[];
52
+ enableAll(): (() => void)[];
45
53
  /**
46
54
  * Disable all services.
47
55
  *
@@ -50,27 +58,21 @@ export default class ServicesManager extends AbstractManager {
50
58
  disableAll(): void;
51
59
  /**
52
60
  * Disable a service.
53
- *
54
- * @param {string} service The name of the service.
55
- * @returns {void}
56
61
  */
57
- disable(service: string): void;
62
+ disable(service: ServiceNames): void;
58
63
  /**
59
64
  * Toggle a service.
60
- * @param {string} service The name of the service.
61
- * @param {boolean} [force] The state to force.
62
- * @returns {void}
63
65
  */
64
- toggle(service: string, force?: boolean): void;
66
+ toggle(service: ServiceNames, force?: boolean): void;
65
67
  /**
66
68
  * Register a new service to be enabled/disabled.
67
69
  *
68
70
  * @param {string} name
69
71
  * The name of the service hook.
70
- * @param {() => ServiceInterface} useFunction
72
+ * @param {<T>(...args:unknown[]) => ServiceInterface<T>} useFunction
71
73
  * The `use...` function for the service.
72
74
  */
73
- register(name: string, useFunction: () => import("../../services").ServiceInterface<any>): void;
75
+ register(name: string, useFunction: <T>(...args: unknown[]) => ServiceInterface<T>): void;
74
76
  /**
75
77
  * Unregister a new service to be enabled disabled.
76
78
  *
@@ -79,31 +81,4 @@ export default class ServicesManager extends AbstractManager {
79
81
  */
80
82
  unregister(name: string): void;
81
83
  }
82
- export type Base = import('../index').Base;
83
- export type BaseConstructor = import('../index').BaseConstructor;
84
- export type ServiceInterface = import('../../services').ServiceInterface<any>;
85
- export type Services = typeof SERVICES_MAP & Record<string, () => import("../../services").ServiceInterface<any>>;
86
- export type ServiceName = keyof {
87
- scrolled: typeof useScroll;
88
- resized: typeof useResize;
89
- ticked: typeof useRaf;
90
- moved: typeof usePointer;
91
- keyed: typeof useKey;
92
- loaded: typeof useLoad;
93
- } | string;
94
- import AbstractManager from "./AbstractManager.js";
95
- declare namespace SERVICES_MAP {
96
- export { useScroll as scrolled };
97
- export { useResize as resized };
98
- export { useRaf as ticked };
99
- export { usePointer as moved };
100
- export { useKey as keyed };
101
- export { useLoad as loaded };
102
- }
103
- import useScroll from "../../services/scroll.js";
104
- import useResize from "../../services/resize.js";
105
- import useRaf from "../../services/raf.js";
106
- import usePointer from "../../services/pointer.js";
107
- import useKey from "../../services/key.js";
108
- import useLoad from "../../services/load.js";
109
84
  export {};
@@ -4,13 +4,8 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
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 AbstractManager from "./AbstractManager.js";
7
+ import { usePointer, useRaf, useResize, useScroll, useKey, useLoad } from "../../services/index.js";
8
+ import { AbstractManager } from "./AbstractManager.js";
14
9
  import { noop, isFunction, isDefined, isDev } from "../../utils/index.js";
15
10
  const SERVICES_MAP = {
16
11
  scrolled: useScroll,
@@ -49,25 +44,19 @@ class ServicesManager extends AbstractManager {
49
44
  if (!(isFunction(this.__base[service]) || this.__base.__hasEvent(service)) || !this.__services[service]) {
50
45
  return noop;
51
46
  }
52
- const { add } = this.__services[service]();
53
- const self = this;
54
- function serviceHandler(...args) {
55
- return self.__base.__callMethod(service, ...args);
56
- }
57
- add(this.__base.$id, serviceHandler);
47
+ const serviceInstance = this.__services[service]();
48
+ serviceInstance.add(this.__base.$id, (...args) => {
49
+ this.__base.__callMethod(service, ...args);
50
+ });
58
51
  return this.disable.bind(this, service);
59
52
  }
60
53
  enableAll() {
61
- return Object.keys(this.__services).map(
62
- (serviceName) => this.enable(serviceName)
63
- );
54
+ return Object.keys(this.__services).map((serviceName) => this.enable(serviceName));
64
55
  }
65
56
  disableAll() {
66
- Object.keys(this.__services).forEach(
67
- (serviceName) => {
68
- this.disable(serviceName);
69
- }
70
- );
57
+ Object.keys(this.__services).forEach((serviceName) => {
58
+ this.disable(serviceName);
59
+ });
71
60
  }
72
61
  disable(service) {
73
62
  if (!this.__services[service]) {
@@ -106,5 +95,5 @@ class ServicesManager extends AbstractManager {
106
95
  }
107
96
  }
108
97
  export {
109
- ServicesManager as default
98
+ ServicesManager
110
99
  };
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __export = (target, all) => {
8
6
  for (var name in all)
@@ -16,10 +14,6 @@ var __copyProps = (to, from, except, desc) => {
16
14
  }
17
15
  return to;
18
16
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
- mod
22
- ));
23
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
18
 
25
19
  // packages/js-toolkit/decorators/withResponsiveOptions.ts
@@ -28,13 +22,13 @@ __export(withResponsiveOptions_exports, {
28
22
  withResponsiveOptions: () => withResponsiveOptions
29
23
  });
30
24
  module.exports = __toCommonJS(withResponsiveOptions_exports);
31
- var import_ResponsiveOptionsManager = __toESM(require("../Base/managers/ResponsiveOptionsManager.cjs"), 1);
25
+ var import_ResponsiveOptionsManager = require("../Base/managers/ResponsiveOptionsManager.cjs");
32
26
  function withResponsiveOptions(BaseClass) {
33
27
  class WithResponsiveOptions extends BaseClass {
34
28
  get __managers() {
35
29
  return {
36
30
  ...super.__managers,
37
- OptionsManager: import_ResponsiveOptionsManager.default
31
+ OptionsManager: import_ResponsiveOptionsManager.ResponsiveOptionsManager
38
32
  };
39
33
  }
40
34
  }
@@ -1,4 +1,4 @@
1
- import ResponsiveOptionsManager from "../Base/managers/ResponsiveOptionsManager.js";
1
+ import { ResponsiveOptionsManager } from "../Base/managers/ResponsiveOptionsManager.js";
2
2
  function withResponsiveOptions(BaseClass) {
3
3
  class WithResponsiveOptions extends BaseClass {
4
4
  get __managers() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studiometa/js-toolkit",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "A set of useful little bits of JavaScript to boost your project! 🚀",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -33,6 +33,7 @@ var import_is = require("../is.cjs");
33
33
  var import_transform = __toESM(require("./transform.cjs"), 1);
34
34
  var import_scheduler = require("../scheduler.cjs");
35
35
  var import_tween = require("../tween.cjs");
36
+ var import_utils = require("./utils.cjs");
36
37
  var id = 0;
37
38
  var running = /* @__PURE__ */ new WeakMap();
38
39
  var CSSUnitConverter = {
@@ -52,7 +53,10 @@ function getAnimationStepValue(val, getSizeRef) {
52
53
  return CSSUnitConverter[val[1]](val[0], getSizeRef);
53
54
  }
54
55
  var generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(
55
- getAnimationStepValue(fromValue != null ? fromValue : 0, () => element[sizeRef]),
56
+ getAnimationStepValue(
57
+ fromValue != null ? fromValue : 0,
58
+ () => element[sizeRef]
59
+ ),
56
60
  getAnimationStepValue(toValue != null ? toValue : 0, () => element[sizeRef]),
57
61
  progress
58
62
  );
@@ -109,7 +113,7 @@ function render(element, from, to, progress) {
109
113
  });
110
114
  });
111
115
  }
112
- function animate(element, keyframes, options = {}) {
116
+ function singleAnimate(element, keyframes, options = {}) {
113
117
  const keyframesCount = keyframes.length - 1;
114
118
  const normalizedKeyframes = keyframes.map(
115
119
  (keyframe, index) => {
@@ -150,4 +154,27 @@ function animate(element, keyframes, options = {}) {
150
154
  });
151
155
  return controls;
152
156
  }
157
+ function animate(elementOrElements, keyframes, options = {}) {
158
+ const controls = (0, import_utils.eachElements)(
159
+ elementOrElements,
160
+ (element) => singleAnimate(element, keyframes, options)
161
+ );
162
+ const delegate = (key) => {
163
+ return (...args) => {
164
+ if (key === "progress" && args.length === 0) {
165
+ return controls[0][key]();
166
+ }
167
+ controls.forEach((control) => {
168
+ control[key](...args);
169
+ });
170
+ };
171
+ };
172
+ return {
173
+ start: delegate("start"),
174
+ pause: delegate("pause"),
175
+ finish: delegate("finish"),
176
+ play: delegate("play"),
177
+ progress: delegate("progress")
178
+ };
179
+ }
153
180
  if (module.exports.default) module.exports = module.exports.default;
@@ -1,31 +1,11 @@
1
1
  /**
2
- * @typedef {import('./transform.js').TransformProps} TransformProps
3
- * @typedef {TransformProps & {
4
- * opacity?: number;
5
- * transformOrigin?: string;
6
- * easing?: import('../math/createEases.js').EasingFunction|import('../tween.js').BezierCurve;
7
- * offset?: number;
8
- * }} Keyframe
9
- * @typedef {Keyframe & {
10
- * easing: import('../math/createEases.js').EasingFunction;
11
- * offset: number;
12
- * }} NormalizedKeyframe
13
- * @typedef {{
14
- * start: () => void;
15
- * pause: () => void;
16
- * play: () => void;
17
- * finish: () => void;
18
- * progress: (value: number?) => number
19
- * }} Animate
20
- */
21
- /**
22
- * Animate an element.
23
- * @param {HTMLElement} element
2
+ * Animate one or more elements.
3
+ * @param {HTMLElement|HTMLElement[]|NodeListOf<HTMLElement>} elementOrElements
24
4
  * @param {Keyframe[]} keyframes
25
5
  * @param {import('../tween.js').TweenOptions} [options]
26
6
  * @returns {Animate}
27
7
  */
28
- export function animate(element: HTMLElement, keyframes: Keyframe[], options?: import('../tween.js').TweenOptions): Animate;
8
+ export function animate(elementOrElements: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>, keyframes: Keyframe[], options?: import('../tween.js').TweenOptions): Animate;
29
9
  export type TransformProps = import('./transform.js').TransformProps;
30
10
  export type Keyframe = TransformProps & {
31
11
  opacity?: number;
@@ -42,5 +22,5 @@ export type Animate = {
42
22
  pause: () => void;
43
23
  play: () => void;
44
24
  finish: () => void;
45
- progress: (value: number | null) => number;
25
+ progress: (value?: number) => number;
46
26
  };
@@ -3,6 +3,7 @@ import { isDefined, isFunction, isNumber } from "../is.js";
3
3
  import transform, { TRANSFORM_PROPS } from "./transform.js";
4
4
  import { domScheduler as scheduler } from "../scheduler.js";
5
5
  import { tween, normalizeEase } from "../tween.js";
6
+ import { eachElements } from "./utils.js";
6
7
  let id = 0;
7
8
  const running = /* @__PURE__ */ new WeakMap();
8
9
  const CSSUnitConverter = {
@@ -22,7 +23,10 @@ function getAnimationStepValue(val, getSizeRef) {
22
23
  return CSSUnitConverter[val[1]](val[0], getSizeRef);
23
24
  }
24
25
  const generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => lerp(
25
- getAnimationStepValue(fromValue != null ? fromValue : 0, () => element[sizeRef]),
26
+ getAnimationStepValue(
27
+ fromValue != null ? fromValue : 0,
28
+ () => element[sizeRef]
29
+ ),
26
30
  getAnimationStepValue(toValue != null ? toValue : 0, () => element[sizeRef]),
27
31
  progress
28
32
  );
@@ -79,7 +83,7 @@ function render(element, from, to, progress) {
79
83
  });
80
84
  });
81
85
  }
82
- function animate(element, keyframes, options = {}) {
86
+ function singleAnimate(element, keyframes, options = {}) {
83
87
  const keyframesCount = keyframes.length - 1;
84
88
  const normalizedKeyframes = keyframes.map(
85
89
  (keyframe, index) => {
@@ -120,6 +124,29 @@ function animate(element, keyframes, options = {}) {
120
124
  });
121
125
  return controls;
122
126
  }
127
+ function animate(elementOrElements, keyframes, options = {}) {
128
+ const controls = eachElements(
129
+ elementOrElements,
130
+ (element) => singleAnimate(element, keyframes, options)
131
+ );
132
+ const delegate = (key) => {
133
+ return (...args) => {
134
+ if (key === "progress" && args.length === 0) {
135
+ return controls[0][key]();
136
+ }
137
+ controls.forEach((control) => {
138
+ control[key](...args);
139
+ });
140
+ };
141
+ };
142
+ return {
143
+ start: delegate("start"),
144
+ pause: delegate("pause"),
145
+ finish: delegate("finish"),
146
+ play: delegate("play"),
147
+ progress: delegate("progress")
148
+ };
149
+ }
123
150
  export {
124
151
  animate
125
152
  };
@@ -25,15 +25,18 @@ __export(classes_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(classes_exports);
27
27
  var import_is = require("../is.cjs");
28
+ var import_utils = require("./utils.cjs");
28
29
  function setClasses(element, classNames, method, forceToggle) {
29
30
  if (!element || !classNames) {
30
31
  return;
31
32
  }
32
33
  const normalizedClassNames = (0, import_is.isArray)(classNames) ? classNames : classNames.split(" ");
33
34
  if (method !== "toggle") {
34
- element.classList[method](...normalizedClassNames);
35
+ (0, import_utils.eachElements)(element, (el) => el.classList[method](...normalizedClassNames));
35
36
  } else {
36
- normalizedClassNames.forEach((className) => element.classList[method](className, forceToggle));
37
+ normalizedClassNames.forEach(
38
+ (className) => (0, import_utils.eachElements)(element, (el) => el.classList[method](className, forceToggle))
39
+ );
37
40
  }
38
41
  }
39
42
  function add(element, classNames) {
@@ -1,25 +1,25 @@
1
1
  /**
2
2
  * Add class names to an element.
3
3
  *
4
- * @param {HTMLElement} element The element to update.
4
+ * @param {Element|Element[]|NodeListOf<Element>} element The element to update.
5
5
  * @param {string|string[]} classNames A string of class names.
6
6
  * @returns {void}
7
7
  */
8
- export function add(element: HTMLElement, classNames: string | string[]): void;
8
+ export function add(element: Element | Element[] | NodeListOf<Element>, classNames: string | string[]): void;
9
9
  /**
10
10
  * Remove class names from an element.
11
11
  *
12
- * @param {HTMLElement} element The element to update.
12
+ * @param {Element|Element[]|NodeListOf<Element>} element The element to update.
13
13
  * @param {string|string[]} classNames A string of class names.
14
14
  * @returns {void}
15
15
  */
16
- export function remove(element: HTMLElement, classNames: string | string[]): void;
16
+ export function remove(element: Element | Element[] | NodeListOf<Element>, classNames: string | string[]): void;
17
17
  /**
18
18
  * Toggle class names from an element.
19
19
  *
20
- * @param {HTMLElement} element The element to update.
20
+ * @param {Element|Element[]|NodeListOf<Element>} element The element to update.
21
21
  * @param {string|string[]} classNames A string of class names.
22
22
  * @param {boolean} [force] Force toggle?
23
23
  * @returns {void}
24
24
  */
25
- export function toggle(element: HTMLElement, classNames: string | string[], force?: boolean): void;
25
+ export function toggle(element: Element | Element[] | NodeListOf<Element>, classNames: string | string[], force?: boolean): void;
@@ -1,13 +1,16 @@
1
1
  import { isArray } from "../is.js";
2
+ import { eachElements } from "./utils.js";
2
3
  function setClasses(element, classNames, method, forceToggle) {
3
4
  if (!element || !classNames) {
4
5
  return;
5
6
  }
6
7
  const normalizedClassNames = isArray(classNames) ? classNames : classNames.split(" ");
7
8
  if (method !== "toggle") {
8
- element.classList[method](...normalizedClassNames);
9
+ eachElements(element, (el) => el.classList[method](...normalizedClassNames));
9
10
  } else {
10
- normalizedClassNames.forEach((className) => element.classList[method](className, forceToggle));
11
+ normalizedClassNames.forEach(
12
+ (className) => eachElements(element, (el) => el.classList[method](className, forceToggle))
13
+ );
11
14
  }
12
15
  }
13
16
  function add(element, classNames) {