@studiometa/js-toolkit 3.0.0-alpha.9 → 3.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/Base/Base.js +2 -2
  2. package/Base/Base.js.map +2 -2
  3. package/Base/features.d.ts +1 -0
  4. package/Base/features.js +1 -0
  5. package/Base/features.js.map +2 -2
  6. package/Base/managers/EventsManager.js +2 -4
  7. package/Base/managers/EventsManager.js.map +2 -2
  8. package/Base/managers/OptionsManager.d.ts +2 -2
  9. package/Base/managers/OptionsManager.js +8 -8
  10. package/Base/managers/OptionsManager.js.map +2 -2
  11. package/Base/managers/RefsManager.js.map +2 -2
  12. package/Base/utils.d.ts +4 -0
  13. package/Base/utils.js +7 -3
  14. package/Base/utils.js.map +2 -2
  15. package/decorators/withBreakpointObserver.js +14 -9
  16. package/decorators/withBreakpointObserver.js.map +2 -2
  17. package/decorators/withDrag.d.ts +1 -1
  18. package/decorators/withDrag.js.map +1 -1
  19. package/decorators/withRelativePointer.d.ts +1 -1
  20. package/decorators/withRelativePointer.js.map +1 -1
  21. package/decorators/withResponsiveOptions.d.ts +3 -1
  22. package/decorators/withResponsiveOptions.js +22 -2
  23. package/decorators/withResponsiveOptions.js.map +2 -2
  24. package/helpers/createApp.js +5 -1
  25. package/helpers/createApp.js.map +2 -2
  26. package/package.json +1 -1
  27. package/services/AbstractService.d.ts +98 -0
  28. package/services/AbstractService.js +114 -0
  29. package/services/AbstractService.js.map +7 -0
  30. package/services/DragService.d.ts +124 -0
  31. package/services/DragService.js +217 -0
  32. package/services/DragService.js.map +7 -0
  33. package/services/KeyService.d.ts +29 -0
  34. package/services/KeyService.js +48 -0
  35. package/services/KeyService.js.map +7 -0
  36. package/services/LoadService.d.ts +15 -0
  37. package/services/LoadService.js +19 -0
  38. package/services/LoadService.js.map +7 -0
  39. package/services/PointerService.d.ts +56 -0
  40. package/services/PointerService.js +129 -0
  41. package/services/PointerService.js.map +7 -0
  42. package/services/RafService.d.ts +19 -0
  43. package/services/RafService.js +45 -0
  44. package/services/RafService.js.map +7 -0
  45. package/services/ResizeService.d.ts +29 -0
  46. package/services/ResizeService.js +66 -0
  47. package/services/ResizeService.js.map +7 -0
  48. package/services/{scroll.d.ts → ScrollService.d.ts} +14 -3
  49. package/services/ScrollService.js +90 -0
  50. package/services/ScrollService.js.map +7 -0
  51. package/services/index.d.ts +8 -41
  52. package/services/index.js +8 -18
  53. package/services/index.js.map +3 -3
  54. package/services/utils.d.ts +14 -0
  55. package/services/utils.js +11 -0
  56. package/services/utils.js.map +7 -0
  57. package/tsconfig.build.tsbuildinfo +1 -0
  58. package/utils/index.d.ts +1 -0
  59. package/utils/index.js +1 -0
  60. package/utils/index.js.map +2 -2
  61. package/utils/loadElement.d.ts +42 -0
  62. package/utils/loadElement.js +33 -0
  63. package/utils/loadElement.js.map +7 -0
  64. package/utils/tween.js +1 -1
  65. package/utils/tween.js.map +2 -2
  66. package/services/drag.d.ts +0 -75
  67. package/services/drag.js +0 -199
  68. package/services/drag.js.map +0 -7
  69. package/services/key.d.ts +0 -21
  70. package/services/key.js +0 -65
  71. package/services/key.js.map +0 -7
  72. package/services/load.d.ts +0 -11
  73. package/services/load.js +0 -38
  74. package/services/load.js.map +0 -7
  75. package/services/pointer.d.ts +0 -32
  76. package/services/pointer.js +0 -123
  77. package/services/pointer.js.map +0 -7
  78. package/services/raf.d.ts +0 -9
  79. package/services/raf.js +0 -56
  80. package/services/raf.js.map +0 -7
  81. package/services/resize.d.ts +0 -15
  82. package/services/resize.js +0 -67
  83. package/services/resize.js.map +0 -7
  84. package/services/scroll.js +0 -105
  85. package/services/scroll.js.map +0 -7
  86. package/services/service.d.ts +0 -16
  87. package/services/service.js +0 -47
  88. package/services/service.js.map +0 -7
@@ -0,0 +1,29 @@
1
+ import type { ServiceConfig, ServiceInterface } from './AbstractService.js';
2
+ import { AbstractService } from './AbstractService.js';
3
+ import type { Features } from '../Base/features.js';
4
+ export interface ResizeServiceProps<U extends Features['breakpoints'] = Features['breakpoints']> {
5
+ width: number;
6
+ height: number;
7
+ ratio: number;
8
+ orientation: 'square' | 'landscape' | 'portrait';
9
+ breakpoint: string;
10
+ breakpoints: string[];
11
+ activeBreakpoints: Record<keyof U, boolean>;
12
+ }
13
+ export type ResizeServiceInterface<U extends Features['breakpoints'] = Features['breakpoints']> = ServiceInterface<ResizeServiceProps<U>>;
14
+ export declare class ResizeService<T extends Features['breakpoints'] = Features['breakpoints']> extends AbstractService<ResizeServiceProps> {
15
+ static config: ServiceConfig;
16
+ breakpoints: T;
17
+ props: ResizeServiceProps<T>;
18
+ constructor(breakpoints: T);
19
+ /**
20
+ * Update props.
21
+ */
22
+ updateProps(): ResizeServiceProps<T>;
23
+ onResizeDebounce: (...args: unknown[]) => void;
24
+ handleEvent(): void;
25
+ }
26
+ /**
27
+ * Use the resize service.
28
+ */
29
+ export declare function useResize<T extends Features['breakpoints'] = Features['breakpoints']>(breakpoints?: T): ResizeServiceInterface<T>;
@@ -0,0 +1,66 @@
1
+ import { AbstractService } from "./AbstractService.js";
2
+ import { features } from "../Base/features.js";
3
+ import debounce from "../utils/debounce.js";
4
+ class ResizeService extends AbstractService {
5
+ static config = [[() => window, [["resize"]]]];
6
+ breakpoints;
7
+ props = {
8
+ width: window.innerWidth,
9
+ height: window.innerHeight,
10
+ ratio: window.innerWidth / window.innerHeight,
11
+ orientation: "square",
12
+ get breakpoint() {
13
+ return Object.keys(this.activeBreakpoints).toReversed().find((name) => this.activeBreakpoints[name]);
14
+ },
15
+ get breakpoints() {
16
+ return Object.keys(this.activeBreakpoints);
17
+ },
18
+ activeBreakpoints: {}
19
+ };
20
+ constructor(breakpoints) {
21
+ super();
22
+ this.breakpoints = breakpoints;
23
+ Object.defineProperty(this.props, "activeBreakpoints", {
24
+ get: () => {
25
+ const activeBreakpoints = {};
26
+ for (const [name, breakpoint] of Object.entries(
27
+ this.breakpoints ?? features.get("breakpoints")
28
+ )) {
29
+ activeBreakpoints[name] = window.matchMedia(`(min-width: ${breakpoint})`).matches;
30
+ }
31
+ return activeBreakpoints;
32
+ }
33
+ });
34
+ }
35
+ /**
36
+ * Update props.
37
+ */
38
+ updateProps() {
39
+ const { props } = this;
40
+ props.width = window.innerWidth;
41
+ props.height = window.innerHeight;
42
+ props.ratio = window.innerWidth / window.innerHeight;
43
+ props.orientation = "square";
44
+ if (props.ratio > 1) {
45
+ props.orientation = "landscape";
46
+ }
47
+ if (props.ratio < 1) {
48
+ props.orientation = "portrait";
49
+ }
50
+ return props;
51
+ }
52
+ onResizeDebounce = debounce(() => {
53
+ this.trigger(this.updateProps());
54
+ }, 100);
55
+ handleEvent() {
56
+ this.onResizeDebounce();
57
+ }
58
+ }
59
+ function useResize(breakpoints) {
60
+ return ResizeService.getInstance(breakpoints, breakpoints);
61
+ }
62
+ export {
63
+ ResizeService,
64
+ useResize
65
+ };
66
+ //# sourceMappingURL=ResizeService.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/ResizeService.ts"],
4
+ "sourcesContent": ["import type { ServiceConfig, ServiceInterface } from './AbstractService.js';\nimport { AbstractService } from './AbstractService.js';\nimport type { Features } from '../Base/features.js';\nimport { features } from '../Base/features.js';\nimport debounce from '../utils/debounce.js';\n\nexport interface ResizeServiceProps<U extends Features['breakpoints'] = Features['breakpoints']> {\n width: number;\n height: number;\n ratio: number;\n orientation: 'square' | 'landscape' | 'portrait';\n breakpoint: string;\n breakpoints: string[];\n activeBreakpoints: Record<keyof U, boolean>;\n}\n\nexport type ResizeServiceInterface<U extends Features['breakpoints'] = Features['breakpoints']> =\n ServiceInterface<ResizeServiceProps<U>>;\n\nexport class ResizeService<\n T extends Features['breakpoints'] = Features['breakpoints'],\n> extends AbstractService<ResizeServiceProps> {\n static config: ServiceConfig = [[() => window, [['resize']]]];\n\n breakpoints: T;\n\n props: ResizeServiceProps<T> = {\n width: window.innerWidth,\n height: window.innerHeight,\n ratio: window.innerWidth / window.innerHeight,\n orientation: 'square',\n get breakpoint() {\n return Object.keys(this.activeBreakpoints)\n .toReversed()\n .find((name) => this.activeBreakpoints[name]);\n },\n get breakpoints() {\n return Object.keys(this.activeBreakpoints);\n },\n activeBreakpoints: {} as Record<keyof T, boolean>,\n };\n\n constructor(breakpoints: T) {\n super();\n this.breakpoints = breakpoints;\n\n Object.defineProperty(this.props, 'activeBreakpoints', {\n get: () => {\n const activeBreakpoints = {};\n\n for (const [name, breakpoint] of Object.entries(\n this.breakpoints ?? features.get('breakpoints'),\n )) {\n activeBreakpoints[name] = window.matchMedia(`(min-width: ${breakpoint})`).matches;\n }\n\n return activeBreakpoints as Record<keyof T, boolean>;\n },\n });\n }\n\n /**\n * Update props.\n */\n updateProps(): ResizeServiceProps<T> {\n const { props } = this;\n\n props.width = window.innerWidth;\n props.height = window.innerHeight;\n props.ratio = window.innerWidth / window.innerHeight;\n props.orientation = 'square';\n\n if (props.ratio > 1) {\n props.orientation = 'landscape';\n }\n\n if (props.ratio < 1) {\n props.orientation = 'portrait';\n }\n\n return props;\n }\n\n onResizeDebounce = debounce(() => {\n this.trigger(this.updateProps());\n }, 100);\n\n handleEvent() {\n this.onResizeDebounce();\n }\n}\n\n/**\n * Use the resize service.\n */\nexport function useResize<T extends Features['breakpoints'] = Features['breakpoints']>(\n breakpoints?: T,\n): ResizeServiceInterface<T> {\n return ResizeService.getInstance(breakpoints, breakpoints);\n}\n"],
5
+ "mappings": "AACA,SAAS,uBAAuB;AAEhC,SAAS,gBAAgB;AACzB,OAAO,cAAc;AAed,MAAM,sBAEH,gBAAoC;AAAA,EAC5C,OAAO,SAAwB,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAA,EAE5D;AAAA,EAEA,QAA+B;AAAA,IAC7B,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO,aAAa,OAAO;AAAA,IAClC,aAAa;AAAA,IACb,IAAI,aAAa;AACf,aAAO,OAAO,KAAK,KAAK,iBAAiB,EACtC,WAAW,EACX,KAAK,CAAC,SAAS,KAAK,kBAAkB,IAAI,CAAC;AAAA,IAChD;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,OAAO,KAAK,KAAK,iBAAiB;AAAA,IAC3C;AAAA,IACA,mBAAmB,CAAC;AAAA,EACtB;AAAA,EAEA,YAAY,aAAgB;AAC1B,UAAM;AACN,SAAK,cAAc;AAEnB,WAAO,eAAe,KAAK,OAAO,qBAAqB;AAAA,MACrD,KAAK,MAAM;AACT,cAAM,oBAAoB,CAAC;AAE3B,mBAAW,CAAC,MAAM,UAAU,KAAK,OAAO;AAAA,UACtC,KAAK,eAAe,SAAS,IAAI,aAAa;AAAA,QAChD,GAAG;AACD,4BAAkB,IAAI,IAAI,OAAO,WAAW,eAAe,UAAU,GAAG,EAAE;AAAA,QAC5E;AAEA,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,cAAqC;AACnC,UAAM,EAAE,MAAM,IAAI;AAElB,UAAM,QAAQ,OAAO;AACrB,UAAM,SAAS,OAAO;AACtB,UAAM,QAAQ,OAAO,aAAa,OAAO;AACzC,UAAM,cAAc;AAEpB,QAAI,MAAM,QAAQ,GAAG;AACnB,YAAM,cAAc;AAAA,IACtB;AAEA,QAAI,MAAM,QAAQ,GAAG;AACnB,YAAM,cAAc;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,SAAS,MAAM;AAChC,SAAK,QAAQ,KAAK,YAAY,CAAC;AAAA,EACjC,GAAG,GAAG;AAAA,EAEN,cAAc;AACZ,SAAK,iBAAiB;AAAA,EACxB;AACF;AAKO,SAAS,UACd,aAC2B;AAC3B,SAAO,cAAc,YAAY,aAAa,WAAW;AAC3D;",
6
+ "names": []
7
+ }
@@ -1,5 +1,5 @@
1
- import type { ServiceInterface } from './index.js';
2
- export type ScrollService = ServiceInterface<ScrollServiceProps>;
1
+ import type { ServiceConfig, ServiceInterface } from './AbstractService.js';
2
+ import { AbstractService } from './AbstractService.js';
3
3
  export interface ScrollServiceProps {
4
4
  x: number;
5
5
  y: number;
@@ -42,6 +42,17 @@ export interface ScrollServiceProps {
42
42
  isDown: boolean;
43
43
  isLeft: boolean;
44
44
  }
45
+ export type ScrollServiceInterface = ServiceInterface<ScrollServiceProps>;
46
+ export declare class ScrollService extends AbstractService<ScrollServiceProps> {
47
+ static config: ServiceConfig;
48
+ props: ScrollServiceProps;
49
+ updateProps(): ScrollServiceProps;
50
+ onScrollDebounced: (...args: unknown[]) => void;
51
+ /**
52
+ * Scroll handler.
53
+ */
54
+ handleEvent(): void;
55
+ }
45
56
  /**
46
57
  * Use the scroll service.
47
58
  *
@@ -53,4 +64,4 @@ export interface ScrollServiceProps {
53
64
  * props();
54
65
  * ```
55
66
  */
56
- export default function useScroll(): ScrollService;
67
+ export declare function useScroll(): ScrollServiceInterface;
@@ -0,0 +1,90 @@
1
+ import { AbstractService } from "./AbstractService.js";
2
+ import debounce from "../utils/debounce.js";
3
+ import { PASSIVE_CAPTURE_EVENT_OPTIONS } from "./utils.js";
4
+ class ScrollService extends AbstractService {
5
+ static config = [[() => document, [["scroll", PASSIVE_CAPTURE_EVENT_OPTIONS]]]];
6
+ props = {
7
+ x: window.scrollX,
8
+ y: window.scrollY,
9
+ changed: {
10
+ x: false,
11
+ y: false
12
+ },
13
+ changedX: false,
14
+ changedY: false,
15
+ last: {
16
+ x: window.scrollX,
17
+ y: window.scrollY
18
+ },
19
+ lastX: window.scrollX,
20
+ lastY: window.scrollY,
21
+ delta: {
22
+ x: 0,
23
+ y: 0
24
+ },
25
+ deltaX: 0,
26
+ deltaY: 0,
27
+ max: {
28
+ x: document.scrollingElement.scrollWidth - window.innerWidth,
29
+ y: document.scrollingElement.scrollHeight - window.innerHeight
30
+ },
31
+ maxX: document.scrollingElement.scrollWidth - window.innerWidth,
32
+ maxY: document.scrollingElement.scrollHeight - window.innerHeight,
33
+ progress: {
34
+ x: 0,
35
+ y: 0
36
+ },
37
+ progressX: 0,
38
+ progressY: 0,
39
+ direction: {
40
+ x: "NONE",
41
+ y: "NONE"
42
+ },
43
+ isUp: false,
44
+ isRight: false,
45
+ isDown: false,
46
+ isLeft: false
47
+ };
48
+ updateProps() {
49
+ const { props } = this;
50
+ const yLast = props.y;
51
+ const xLast = props.x;
52
+ props.y = window.scrollY;
53
+ props.x = window.scrollX;
54
+ props.changed.x = props.changedX = props.x !== xLast;
55
+ props.changed.y = props.changedY = props.y !== yLast;
56
+ props.last.x = props.lastX = xLast;
57
+ props.last.y = props.lastY = yLast;
58
+ props.delta.x = props.deltaX = props.x - xLast;
59
+ props.delta.y = props.deltaY = props.y - yLast;
60
+ props.max.x = props.maxX = document.scrollingElement.scrollWidth - window.innerWidth;
61
+ props.max.y = props.maxY = document.scrollingElement.scrollHeight - window.innerHeight;
62
+ props.progress.x = props.progressX = props.max.x === 0 ? 1 : props.x / props.max.x;
63
+ props.progress.y = props.progressY = props.max.y === 0 ? 1 : props.y / props.max.y;
64
+ props.isUp = props.y < yLast;
65
+ props.isRight = props.x > xLast;
66
+ props.isDown = props.y > yLast;
67
+ props.isLeft = props.x < xLast;
68
+ props.direction.x = props.isRight ? "RIGHT" : props.isLeft ? "LEFT" : "NONE";
69
+ props.direction.y = props.isDown ? "DOWN" : props.isUp ? "UP" : "NONE";
70
+ return props;
71
+ }
72
+ onScrollDebounced = debounce(() => {
73
+ this.trigger(this.updateProps());
74
+ }, 100);
75
+ /**
76
+ * Scroll handler.
77
+ */
78
+ handleEvent() {
79
+ this.trigger(this.updateProps());
80
+ this.onScrollDebounced();
81
+ }
82
+ }
83
+ function useScroll() {
84
+ return ScrollService.getInstance();
85
+ }
86
+ export {
87
+ ScrollService,
88
+ useScroll
89
+ };
90
+ //# sourceMappingURL=ScrollService.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/ScrollService.ts"],
4
+ "sourcesContent": ["import type { ServiceConfig, ServiceInterface } from './AbstractService.js';\nimport { AbstractService } from './AbstractService.js';\nimport debounce from '../utils/debounce.js';\nimport { PASSIVE_CAPTURE_EVENT_OPTIONS } from './utils.js';\n\nexport interface ScrollServiceProps {\n x: number;\n y: number;\n changed: { x: boolean; y: boolean };\n changedX: boolean;\n changedY: boolean;\n last: { x: number; y: number };\n lastX: number;\n lastY: number;\n delta: { x: number; y: number };\n deltaX: number;\n deltaY: number;\n progress: { x: number; y: number };\n progressX: number;\n progressY: number;\n max: { x: number; y: number };\n maxX: number;\n maxY: number;\n direction: { x: 'LEFT' | 'RIGHT' | 'NONE'; y: 'UP' | 'DOWN' | 'NONE' };\n isUp: boolean;\n isRight: boolean;\n isDown: boolean;\n isLeft: boolean;\n}\n\nexport type ScrollServiceInterface = ServiceInterface<ScrollServiceProps>;\n\nexport class ScrollService extends AbstractService<ScrollServiceProps> {\n static config: ServiceConfig = [[() => document, [['scroll', PASSIVE_CAPTURE_EVENT_OPTIONS]]]];\n\n props: ScrollServiceProps = {\n x: window.scrollX,\n y: window.scrollY,\n changed: {\n x: false,\n y: false,\n },\n changedX: false,\n changedY: false,\n last: {\n x: window.scrollX,\n y: window.scrollY,\n },\n lastX: window.scrollX,\n lastY: window.scrollY,\n delta: {\n x: 0,\n y: 0,\n },\n deltaX: 0,\n deltaY: 0,\n max: {\n x: document.scrollingElement.scrollWidth - window.innerWidth,\n y: document.scrollingElement.scrollHeight - window.innerHeight,\n },\n maxX: document.scrollingElement.scrollWidth - window.innerWidth,\n maxY: document.scrollingElement.scrollHeight - window.innerHeight,\n progress: {\n x: 0,\n y: 0,\n },\n progressX: 0,\n progressY: 0,\n direction: {\n x: 'NONE',\n y: 'NONE',\n },\n isUp: false,\n isRight: false,\n isDown: false,\n isLeft: false,\n };\n\n updateProps(): ScrollServiceProps {\n const { props } = this;\n const yLast = props.y;\n const xLast = props.x;\n\n props.y = window.scrollY;\n props.x = window.scrollX;\n props.changed.x = props.changedX = props.x !== xLast;\n props.changed.y = props.changedY = props.y !== yLast;\n props.last.x = props.lastX = xLast;\n props.last.y = props.lastY = yLast;\n props.delta.x = props.deltaX = props.x - xLast;\n props.delta.y = props.deltaY = props.y - yLast;\n props.max.x = props.maxX = document.scrollingElement.scrollWidth - window.innerWidth;\n props.max.y = props.maxY = document.scrollingElement.scrollHeight - window.innerHeight;\n props.progress.x = props.progressX = props.max.x === 0 ? 1 : props.x / props.max.x;\n props.progress.y = props.progressY = props.max.y === 0 ? 1 : props.y / props.max.y;\n props.isUp = props.y < yLast;\n props.isRight = props.x > xLast;\n props.isDown = props.y > yLast;\n props.isLeft = props.x < xLast;\n /* eslint-disable no-nested-ternary */\n props.direction.x = props.isRight ? 'RIGHT' : props.isLeft ? 'LEFT' : 'NONE';\n props.direction.y = props.isDown ? 'DOWN' : props.isUp ? 'UP' : 'NONE';\n /* eslint-enable no-nested-ternary */\n\n return props;\n }\n\n onScrollDebounced = debounce(() => {\n this.trigger(this.updateProps());\n }, 100);\n\n /**\n * Scroll handler.\n */\n handleEvent() {\n this.trigger(this.updateProps());\n this.onScrollDebounced();\n }\n}\n\n/**\n * Use the scroll service.\n *\n * ```js\n * import { useScroll } from '@studiometa/js-toolkit/services';\n * const { add, remove, props } = useScroll();\n * add(key, (props) => {});\n * remove(key);\n * props();\n * ```\n */\nexport function useScroll(): ScrollServiceInterface {\n return ScrollService.getInstance();\n}\n"],
5
+ "mappings": "AACA,SAAS,uBAAuB;AAChC,OAAO,cAAc;AACrB,SAAS,qCAAqC;AA6BvC,MAAM,sBAAsB,gBAAoC;AAAA,EACrE,OAAO,SAAwB,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,UAAU,6BAA6B,CAAC,CAAC,CAAC;AAAA,EAE7F,QAA4B;AAAA,IAC1B,GAAG,OAAO;AAAA,IACV,GAAG,OAAO;AAAA,IACV,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,GAAG,OAAO;AAAA,IACZ;AAAA,IACA,OAAO,OAAO;AAAA,IACd,OAAO,OAAO;AAAA,IACd,OAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,MACH,GAAG,SAAS,iBAAiB,cAAc,OAAO;AAAA,MAClD,GAAG,SAAS,iBAAiB,eAAe,OAAO;AAAA,IACrD;AAAA,IACA,MAAM,SAAS,iBAAiB,cAAc,OAAO;AAAA,IACrD,MAAM,SAAS,iBAAiB,eAAe,OAAO;AAAA,IACtD,UAAU;AAAA,MACR,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EAEA,cAAkC;AAChC,UAAM,EAAE,MAAM,IAAI;AAClB,UAAM,QAAQ,MAAM;AACpB,UAAM,QAAQ,MAAM;AAEpB,UAAM,IAAI,OAAO;AACjB,UAAM,IAAI,OAAO;AACjB,UAAM,QAAQ,IAAI,MAAM,WAAW,MAAM,MAAM;AAC/C,UAAM,QAAQ,IAAI,MAAM,WAAW,MAAM,MAAM;AAC/C,UAAM,KAAK,IAAI,MAAM,QAAQ;AAC7B,UAAM,KAAK,IAAI,MAAM,QAAQ;AAC7B,UAAM,MAAM,IAAI,MAAM,SAAS,MAAM,IAAI;AACzC,UAAM,MAAM,IAAI,MAAM,SAAS,MAAM,IAAI;AACzC,UAAM,IAAI,IAAI,MAAM,OAAO,SAAS,iBAAiB,cAAc,OAAO;AAC1E,UAAM,IAAI,IAAI,MAAM,OAAO,SAAS,iBAAiB,eAAe,OAAO;AAC3E,UAAM,SAAS,IAAI,MAAM,YAAY,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI;AACjF,UAAM,SAAS,IAAI,MAAM,YAAY,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI;AACjF,UAAM,OAAO,MAAM,IAAI;AACvB,UAAM,UAAU,MAAM,IAAI;AAC1B,UAAM,SAAS,MAAM,IAAI;AACzB,UAAM,SAAS,MAAM,IAAI;AAEzB,UAAM,UAAU,IAAI,MAAM,UAAU,UAAU,MAAM,SAAS,SAAS;AACtE,UAAM,UAAU,IAAI,MAAM,SAAS,SAAS,MAAM,OAAO,OAAO;AAGhE,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,SAAS,MAAM;AACjC,SAAK,QAAQ,KAAK,YAAY,CAAC;AAAA,EACjC,GAAG,GAAG;AAAA;AAAA;AAAA;AAAA,EAKN,cAAc;AACZ,SAAK,QAAQ,KAAK,YAAY,CAAC;AAC/B,SAAK,kBAAkB;AAAA,EACzB;AACF;AAaO,SAAS,YAAoC;AAClD,SAAO,cAAc,YAAY;AACnC;",
6
+ "names": []
7
+ }
@@ -1,41 +1,8 @@
1
- import type { DragServiceProps } from './drag.js';
2
- import type { KeyServiceProps } from './key.js';
3
- import type { LoadServiceProps } from './load.js';
4
- import type { PointerServiceProps } from './pointer.js';
5
- import type { RafServiceProps } from './raf.js';
6
- import type { ResizeServiceProps } from './resize.js';
7
- import type { ScrollServiceProps } from './scroll.js';
8
- export interface ServiceInterface<T> {
9
- /**
10
- * Remove a function from the resize service by its key.
11
- */
12
- remove(key: string): void;
13
- /**
14
- * Add a callback to the service. The callback will receive the current service props as parameter.
15
- */
16
- add(key: string, callback: (props: T) => void): void;
17
- /**
18
- * Test if the service has alreaydy a callback for the given key.
19
- */
20
- has(key: string): boolean;
21
- /**
22
- * Get the service's props.
23
- */
24
- props(): T;
25
- }
26
- export type DragServiceInterface = ServiceInterface<DragServiceProps>;
27
- export type KeyServiceInterface = ServiceInterface<KeyServiceProps>;
28
- export type LoadServiceInterface = ServiceInterface<LoadServiceProps>;
29
- export type PointerServiceInterface = ServiceInterface<PointerServiceProps>;
30
- export type RafServiceInterface = ServiceInterface<RafServiceProps>;
31
- export type ResizeServiceInterface<T extends Record<string, string> = Record<string, string>> = ServiceInterface<ResizeServiceProps<T>>;
32
- export type ScrollServiceInterface = ServiceInterface<ScrollServiceProps>;
33
- export type { DragServiceProps, KeyServiceProps, LoadServiceProps, PointerServiceProps, RafServiceProps, ResizeServiceProps, ScrollServiceProps, };
34
- export { default as useDrag } from './drag.js';
35
- export { default as useKey } from './key.js';
36
- export { default as useLoad } from './load.js';
37
- export { default as usePointer } from './pointer.js';
38
- export { default as useRaf } from './raf.js';
39
- export { default as useResize } from './resize.js';
40
- export { default as useScroll } from './scroll.js';
41
- export { useService } from './service.js';
1
+ export * from './AbstractService.js';
2
+ export * from './DragService.js';
3
+ export * from './KeyService.js';
4
+ export * from './LoadService.js';
5
+ export * from './PointerService.js';
6
+ export * from './RafService.js';
7
+ export * from './ResizeService.js';
8
+ export * from './ScrollService.js';
package/services/index.js CHANGED
@@ -1,19 +1,9 @@
1
- import { default as default2 } from "./drag.js";
2
- import { default as default3 } from "./key.js";
3
- import { default as default4 } from "./load.js";
4
- import { default as default5 } from "./pointer.js";
5
- import { default as default6 } from "./raf.js";
6
- import { default as default7 } from "./resize.js";
7
- import { default as default8 } from "./scroll.js";
8
- import { useService } from "./service.js";
9
- export {
10
- default2 as useDrag,
11
- default3 as useKey,
12
- default4 as useLoad,
13
- default5 as usePointer,
14
- default6 as useRaf,
15
- default7 as useResize,
16
- default8 as useScroll,
17
- useService
18
- };
1
+ export * from "./AbstractService.js";
2
+ export * from "./DragService.js";
3
+ export * from "./KeyService.js";
4
+ export * from "./LoadService.js";
5
+ export * from "./PointerService.js";
6
+ export * from "./RafService.js";
7
+ export * from "./ResizeService.js";
8
+ export * from "./ScrollService.js";
19
9
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/services/index.ts"],
4
- "sourcesContent": ["import type { DragServiceProps } from './drag.js';\nimport type { KeyServiceProps } from './key.js';\nimport type { LoadServiceProps } from './load.js';\nimport type { PointerServiceProps } from './pointer.js';\nimport type { RafServiceProps } from './raf.js';\nimport type { ResizeServiceProps } from './resize.js';\nimport type { ScrollServiceProps } from './scroll.js';\n\nexport interface ServiceInterface<T> {\n /**\n * Remove a function from the resize service by its key.\n */\n remove(key: string): void;\n /**\n * Add a callback to the service. The callback will receive the current service props as parameter.\n */\n add(key: string, callback: (props: T) => void): void;\n /**\n * Test if the service has alreaydy a callback for the given key.\n */\n has(key: string): boolean;\n /**\n * Get the service's props.\n */\n props(): T;\n}\n\nexport type DragServiceInterface = ServiceInterface<DragServiceProps>;\nexport type KeyServiceInterface = ServiceInterface<KeyServiceProps>;\nexport type LoadServiceInterface = ServiceInterface<LoadServiceProps>;\nexport type PointerServiceInterface = ServiceInterface<PointerServiceProps>;\nexport type RafServiceInterface = ServiceInterface<RafServiceProps>;\nexport type ResizeServiceInterface<T extends Record<string, string> = Record<string, string>> =\n ServiceInterface<ResizeServiceProps<T>>;\nexport type ScrollServiceInterface = ServiceInterface<ScrollServiceProps>;\n\nexport type {\n DragServiceProps,\n KeyServiceProps,\n LoadServiceProps,\n PointerServiceProps,\n RafServiceProps,\n ResizeServiceProps,\n ScrollServiceProps,\n};\n\nexport { default as useDrag } from './drag.js';\nexport { default as useKey } from './key.js';\nexport { default as useLoad } from './load.js';\nexport { default as usePointer } from './pointer.js';\nexport { default as useRaf } from './raf.js';\nexport { default as useResize } from './resize.js';\nexport { default as useScroll } from './scroll.js';\nexport { useService } from './service.js';\n"],
5
- "mappings": "AA8CA,SAAoB,WAAXA,gBAA0B;AACnC,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAA0B;AACnC,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAA4B;AACrC,SAAoB,WAAXA,gBAA4B;AACrC,SAAS,kBAAkB;",
6
- "names": ["default"]
4
+ "sourcesContent": ["export * from './AbstractService.js';\nexport * from './DragService.js';\nexport * from './KeyService.js';\nexport * from './LoadService.js';\nexport * from './PointerService.js';\nexport * from './RafService.js';\nexport * from './ResizeService.js';\nexport * from './ScrollService.js';\n"],
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
+ "names": []
7
7
  }
@@ -0,0 +1,14 @@
1
+ export declare const ONCE_CAPTURE_EVENT_OPTIONS: {
2
+ once: boolean;
3
+ capture: boolean;
4
+ };
5
+ export declare const PASSIVE_CAPTURE_EVENT_OPTIONS: {
6
+ passive: boolean;
7
+ capture: boolean;
8
+ };
9
+ export declare const PASSIVE_EVENT_OPTIONS: {
10
+ passive: boolean;
11
+ };
12
+ export declare const CAPTURE_EVENT_OPTIONS: {
13
+ capture: boolean;
14
+ };
@@ -0,0 +1,11 @@
1
+ const ONCE_CAPTURE_EVENT_OPTIONS = { once: true, capture: true };
2
+ const PASSIVE_CAPTURE_EVENT_OPTIONS = { passive: true, capture: true };
3
+ const PASSIVE_EVENT_OPTIONS = { passive: true };
4
+ const CAPTURE_EVENT_OPTIONS = { capture: true };
5
+ export {
6
+ CAPTURE_EVENT_OPTIONS,
7
+ ONCE_CAPTURE_EVENT_OPTIONS,
8
+ PASSIVE_CAPTURE_EVENT_OPTIONS,
9
+ PASSIVE_EVENT_OPTIONS
10
+ };
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/utils.ts"],
4
+ "sourcesContent": ["export const ONCE_CAPTURE_EVENT_OPTIONS = { once: true, capture: true };\nexport const PASSIVE_CAPTURE_EVENT_OPTIONS = { passive: true, capture: true };\nexport const PASSIVE_EVENT_OPTIONS = { passive: true };\nexport const CAPTURE_EVENT_OPTIONS = { capture: true };\n"],
5
+ "mappings": "AAAO,MAAM,6BAA6B,EAAE,MAAM,MAAM,SAAS,KAAK;AAC/D,MAAM,gCAAgC,EAAE,SAAS,MAAM,SAAS,KAAK;AACrE,MAAM,wBAAwB,EAAE,SAAS,KAAK;AAC9C,MAAM,wBAAwB,EAAE,SAAS,KAAK;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ {"root":["../packages/global.d.ts","../packages/js-toolkit/index.ts","../packages/js-toolkit/base/base.ts","../packages/js-toolkit/base/features.ts","../packages/js-toolkit/base/index.ts","../packages/js-toolkit/base/types.ts","../packages/js-toolkit/base/utils.ts","../packages/js-toolkit/base/managers/abstractmanager.ts","../packages/js-toolkit/base/managers/childrenmanager.ts","../packages/js-toolkit/base/managers/eventsmanager.ts","../packages/js-toolkit/base/managers/optionsmanager.ts","../packages/js-toolkit/base/managers/refsmanager.ts","../packages/js-toolkit/base/managers/responsiveoptionsmanager.ts","../packages/js-toolkit/base/managers/servicesmanager.ts","../packages/js-toolkit/base/managers/index.ts","../packages/js-toolkit/decorators/index.ts","../packages/js-toolkit/decorators/withbreakpointmanager.ts","../packages/js-toolkit/decorators/withbreakpointobserver.ts","../packages/js-toolkit/decorators/withdrag.ts","../packages/js-toolkit/decorators/withextraconfig.ts","../packages/js-toolkit/decorators/withfreezedoptions.ts","../packages/js-toolkit/decorators/withintersectionobserver.ts","../packages/js-toolkit/decorators/withmountonmediaquery.ts","../packages/js-toolkit/decorators/withmountwheninview.ts","../packages/js-toolkit/decorators/withmountwhenprefersmotion.ts","../packages/js-toolkit/decorators/withname.ts","../packages/js-toolkit/decorators/withrelativepointer.ts","../packages/js-toolkit/decorators/withresponsiveoptions.ts","../packages/js-toolkit/decorators/withscrolledinview/index.ts","../packages/js-toolkit/decorators/withscrolledinview/types.ts","../packages/js-toolkit/decorators/withscrolledinview/utils.ts","../packages/js-toolkit/decorators/withscrolledinview/withscrolledinview.ts","../packages/js-toolkit/helpers/createapp.ts","../packages/js-toolkit/helpers/getclosestparent.ts","../packages/js-toolkit/helpers/getdirectchildren.ts","../packages/js-toolkit/helpers/getinstancefromelement.ts","../packages/js-toolkit/helpers/importoninteraction.ts","../packages/js-toolkit/helpers/importonmediaquery.ts","../packages/js-toolkit/helpers/importwhenidle.ts","../packages/js-toolkit/helpers/importwhenprefersmotion.ts","../packages/js-toolkit/helpers/importwhenvisible.ts","../packages/js-toolkit/helpers/index.ts","../packages/js-toolkit/helpers/utils.ts","../packages/js-toolkit/services/abstractservice.ts","../packages/js-toolkit/services/dragservice.ts","../packages/js-toolkit/services/keyservice.ts","../packages/js-toolkit/services/loadservice.ts","../packages/js-toolkit/services/pointerservice.ts","../packages/js-toolkit/services/rafservice.ts","../packages/js-toolkit/services/resizeservice.ts","../packages/js-toolkit/services/scrollservice.ts","../packages/js-toolkit/services/index.ts","../packages/js-toolkit/services/utils.ts","../packages/js-toolkit/utils/queue.ts","../packages/js-toolkit/utils/smartqueue.ts","../packages/js-toolkit/utils/debounce.ts","../packages/js-toolkit/utils/getcomponentresolver.ts","../packages/js-toolkit/utils/has.ts","../packages/js-toolkit/utils/history.ts","../packages/js-toolkit/utils/index.ts","../packages/js-toolkit/utils/is.ts","../packages/js-toolkit/utils/keycodes.ts","../packages/js-toolkit/utils/loadelement.ts","../packages/js-toolkit/utils/memo.ts","../packages/js-toolkit/utils/memoize.ts","../packages/js-toolkit/utils/nextframe.ts","../packages/js-toolkit/utils/nextmicrotask.ts","../packages/js-toolkit/utils/nexttick.ts","../packages/js-toolkit/utils/noop.ts","../packages/js-toolkit/utils/random.ts","../packages/js-toolkit/utils/scheduler.ts","../packages/js-toolkit/utils/scrollto.ts","../packages/js-toolkit/utils/throttle.ts","../packages/js-toolkit/utils/trapfocus.ts","../packages/js-toolkit/utils/tween.ts","../packages/js-toolkit/utils/wait.ts","../packages/js-toolkit/utils/collide/boundingrecttocircle.ts","../packages/js-toolkit/utils/collide/collidecirclecircle.ts","../packages/js-toolkit/utils/collide/collidecirclerect.ts","../packages/js-toolkit/utils/collide/collidepointcircle.ts","../packages/js-toolkit/utils/collide/collidepointrect.ts","../packages/js-toolkit/utils/collide/colliderectrect.ts","../packages/js-toolkit/utils/collide/index.ts","../packages/js-toolkit/utils/css/animate.ts","../packages/js-toolkit/utils/css/classes.ts","../packages/js-toolkit/utils/css/getoffsetsizes.ts","../packages/js-toolkit/utils/css/index.ts","../packages/js-toolkit/utils/css/matrix.ts","../packages/js-toolkit/utils/css/styles.ts","../packages/js-toolkit/utils/css/transform.ts","../packages/js-toolkit/utils/css/transition.ts","../packages/js-toolkit/utils/css/utils.ts","../packages/js-toolkit/utils/dom/ancestors.ts","../packages/js-toolkit/utils/dom/index.ts","../packages/js-toolkit/utils/math/clamp.ts","../packages/js-toolkit/utils/math/clamp01.ts","../packages/js-toolkit/utils/math/createeases.ts","../packages/js-toolkit/utils/math/createrange.ts","../packages/js-toolkit/utils/math/damp.ts","../packages/js-toolkit/utils/math/ease.ts","../packages/js-toolkit/utils/math/index.ts","../packages/js-toolkit/utils/math/inertiafinalvalue.ts","../packages/js-toolkit/utils/math/lerp.ts","../packages/js-toolkit/utils/math/map.ts","../packages/js-toolkit/utils/math/mean.ts","../packages/js-toolkit/utils/math/round.ts","../packages/js-toolkit/utils/object/getallproperties.ts","../packages/js-toolkit/utils/string/changecase.ts","../packages/js-toolkit/utils/string/endswith.ts","../packages/js-toolkit/utils/string/index.ts","../packages/js-toolkit/utils/string/startswith.ts","../packages/js-toolkit/utils/string/withleadingcharacters.ts","../packages/js-toolkit/utils/string/withleadingslash.ts","../packages/js-toolkit/utils/string/withtrailingcharacters.ts","../packages/js-toolkit/utils/string/withtrailingslash.ts","../packages/js-toolkit/utils/string/withoutleadingcharacters.ts","../packages/js-toolkit/utils/string/withoutleadingcharactersrecursive.ts","../packages/js-toolkit/utils/string/withoutleadingslash.ts","../packages/js-toolkit/utils/string/withouttrailingcharacters.ts","../packages/js-toolkit/utils/string/withouttrailingcharactersrecursive.ts","../packages/js-toolkit/utils/string/withouttrailingslash.ts"],"version":"5.6.3"}
package/utils/index.d.ts CHANGED
@@ -24,3 +24,4 @@ export * from './dom/index.js';
24
24
  export * from './wait.js';
25
25
  export * from './random.js';
26
26
  export * from './memo.js';
27
+ export * from './loadElement.js';
package/utils/index.js CHANGED
@@ -28,6 +28,7 @@ export * from "./dom/index.js";
28
28
  export * from "./wait.js";
29
29
  export * from "./random.js";
30
30
  export * from "./memo.js";
31
+ export * from "./loadElement.js";
31
32
  export {
32
33
  Queue,
33
34
  SmartQueue,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/index.ts"],
4
- "sourcesContent": ["export { default as debounce } from './debounce.js';\nexport * from './trapFocus.js';\nexport { default as keyCodes } from './keyCodes.js';\nexport { default as memoize } from './memoize.js';\nexport { nextFrame } from './nextFrame.js';\nexport { nextTick } from './nextTick.js';\nexport { nextMicrotask } from './nextMicrotask.js';\nexport { default as throttle } from './throttle.js';\nexport { scrollTo } from './scrollTo.js';\nexport { default as getComponentResolver } from './getComponentResolver.js';\nexport * from './is.js';\nexport * from './has.js';\nexport * from './css/index.js';\nexport {\n objectToURLSearchParams,\n push as historyPush,\n replace as historyReplace,\n} from './history.js';\nexport * from './collide/index.js';\nexport * from './math/index.js';\nexport * from './string/index.js';\nexport * from './scheduler.js';\nexport * from './noop.js';\nexport { tween } from './tween.js';\nexport { Queue } from './Queue.js';\nexport { SmartQueue } from './SmartQueue.js';\nexport * from './dom/index.js';\nexport * from './wait.js';\nexport * from './random.js';\nexport * from './memo.js';\n"],
5
- "mappings": "AAAA,SAAoB,WAAXA,gBAA2B;AACpC,cAAc;AACd,SAAoB,WAAXA,gBAA2B;AACpC,SAAoB,WAAXA,gBAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAoB,WAAXA,gBAA2B;AACpC,SAAS,gBAAgB;AACzB,SAAoB,WAAXA,gBAAuC;AAChD,cAAc;AACd,cAAc;AACd,cAAc;AACd;AAAA,EACE;AAAA,EACQ;AAAA,EACG;AAAA,OACN;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAC3B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "sourcesContent": ["export { default as debounce } from './debounce.js';\nexport * from './trapFocus.js';\nexport { default as keyCodes } from './keyCodes.js';\nexport { default as memoize } from './memoize.js';\nexport { nextFrame } from './nextFrame.js';\nexport { nextTick } from './nextTick.js';\nexport { nextMicrotask } from './nextMicrotask.js';\nexport { default as throttle } from './throttle.js';\nexport { scrollTo } from './scrollTo.js';\nexport { default as getComponentResolver } from './getComponentResolver.js';\nexport * from './is.js';\nexport * from './has.js';\nexport * from './css/index.js';\nexport {\n objectToURLSearchParams,\n push as historyPush,\n replace as historyReplace,\n} from './history.js';\nexport * from './collide/index.js';\nexport * from './math/index.js';\nexport * from './string/index.js';\nexport * from './scheduler.js';\nexport * from './noop.js';\nexport { tween } from './tween.js';\nexport { Queue } from './Queue.js';\nexport { SmartQueue } from './SmartQueue.js';\nexport * from './dom/index.js';\nexport * from './wait.js';\nexport * from './random.js';\nexport * from './memo.js';\nexport * from './loadElement.js';\n"],
5
+ "mappings": "AAAA,SAAoB,WAAXA,gBAA2B;AACpC,cAAc;AACd,SAAoB,WAAXA,gBAA2B;AACpC,SAAoB,WAAXA,gBAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAoB,WAAXA,gBAA2B;AACpC,SAAS,gBAAgB;AACzB,SAAoB,WAAXA,gBAAuC;AAChD,cAAc;AACd,cAAc;AACd,cAAc;AACd;AAAA,EACE;AAAA,EACQ;AAAA,EACG;AAAA,OACN;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAC3B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": ["default"]
7
7
  }
@@ -0,0 +1,42 @@
1
+ export type LoadableElements = {
2
+ embed: HTMLEmbedElement;
3
+ iframe: HTMLIFrameElement;
4
+ img: HTMLImageElement;
5
+ link: HTMLLinkElement;
6
+ script: HTMLScriptElement;
7
+ track: HTMLTrackElement;
8
+ };
9
+ export type LoadableElementsNames = keyof LoadableElements;
10
+ export type LoadElementsOptions = {
11
+ /**
12
+ * An HTML element where the created element will be appended.
13
+ */
14
+ appendTo?: HTMLElement;
15
+ };
16
+ export type LoadElementsReturnType<T extends LoadableElementsNames> = Promise<{
17
+ event: Event;
18
+ element: LoadableElements[T];
19
+ }>;
20
+ /**
21
+ * Load the given source for the given type of element.
22
+ * @todo manage memo
23
+ */
24
+ export declare function loadElement<T extends LoadableElementsNames>(src: string, type: T, { appendTo }?: LoadElementsOptions): LoadElementsReturnType<T>;
25
+ /**
26
+ * Load the given source as an `<img>` element.
27
+ */
28
+ export declare function loadImage(src: string, options?: LoadElementsOptions): LoadElementsReturnType<"img">;
29
+ /**
30
+ * Load the given source as an `<iframe>` element.
31
+ */
32
+ export declare function loadIframe(src: string, options?: LoadElementsOptions): LoadElementsReturnType<"iframe">;
33
+ /**
34
+ * Load the given source as a `<link>` element.
35
+ */
36
+ export declare function loadLink(src: string, options?: LoadElementsOptions): LoadElementsReturnType<"link">;
37
+ /**
38
+ * Load the given source as a `<script>` element. The generated element is
39
+ * appended to `document.head` by default, as a script element needs
40
+ * to be inserted in the DOM to load.
41
+ */
42
+ export declare function loadScript(src: string, options?: LoadElementsOptions): LoadElementsReturnType<"script">;
@@ -0,0 +1,33 @@
1
+ function loadElement(src, type, { appendTo = null } = {}) {
2
+ return new Promise((resolve, reject) => {
3
+ const eventOptions = { once: true };
4
+ const prop = type === "link" ? "href" : "src";
5
+ const element = document.createElement(type);
6
+ element.addEventListener("load", (event) => resolve({ event, element }), eventOptions);
7
+ element.addEventListener("error", (event) => reject({ event, element }), eventOptions);
8
+ element[prop] = src;
9
+ if (appendTo) {
10
+ appendTo.append(element);
11
+ }
12
+ });
13
+ }
14
+ function loadImage(src, options) {
15
+ return loadElement(src, "img", options);
16
+ }
17
+ function loadIframe(src, options) {
18
+ return loadElement(src, "iframe", options);
19
+ }
20
+ function loadLink(src, options) {
21
+ return loadElement(src, "link", options);
22
+ }
23
+ function loadScript(src, options) {
24
+ return loadElement(src, "script", { appendTo: document.head, ...options });
25
+ }
26
+ export {
27
+ loadElement,
28
+ loadIframe,
29
+ loadImage,
30
+ loadLink,
31
+ loadScript
32
+ };
33
+ //# sourceMappingURL=loadElement.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/utils/loadElement.ts"],
4
+ "sourcesContent": ["export type LoadableElements = {\n embed: HTMLEmbedElement;\n iframe: HTMLIFrameElement;\n img: HTMLImageElement;\n link: HTMLLinkElement;\n script: HTMLScriptElement;\n track: HTMLTrackElement;\n};\n\nexport type LoadableElementsNames = keyof LoadableElements;\n\nexport type LoadElementsOptions = {\n /**\n * An HTML element where the created element will be appended.\n */\n appendTo?: HTMLElement;\n};\n\nexport type LoadElementsReturnType<T extends LoadableElementsNames> = Promise<{\n event: Event;\n element: LoadableElements[T];\n}>;\n\n/**\n * Load the given source for the given type of element.\n * @todo manage memo\n */\nexport function loadElement<T extends LoadableElementsNames>(\n src: string,\n type: T,\n { appendTo = null }: LoadElementsOptions = {},\n): LoadElementsReturnType<T> {\n return new Promise((resolve, reject) => {\n const eventOptions = { once: true };\n const prop = type === 'link' ? 'href' : 'src';\n const element = document.createElement(type);\n element.addEventListener('load', (event) => resolve({ event, element }), eventOptions);\n element.addEventListener('error', (event) => reject({ event, element }), eventOptions);\n element[prop] = src;\n if (appendTo) {\n appendTo.append(element);\n }\n });\n}\n\n/**\n * Load the given source as an `<img>` element.\n */\nexport function loadImage(src: string, options?: LoadElementsOptions) {\n return loadElement(src, 'img', options);\n}\n\n/**\n * Load the given source as an `<iframe>` element.\n */\nexport function loadIframe(src: string, options?: LoadElementsOptions) {\n return loadElement(src, 'iframe', options);\n}\n\n/**\n * Load the given source as a `<link>` element.\n */\nexport function loadLink(src: string, options?: LoadElementsOptions) {\n return loadElement(src, 'link', options);\n}\n\n/**\n * Load the given source as a `<script>` element. The generated element is\n * appended to `document.head` by default, as a script element needs\n * to be inserted in the DOM to load.\n */\nexport function loadScript(src: string, options?: LoadElementsOptions) {\n return loadElement(src, 'script', { appendTo: document.head, ...options });\n}\n"],
5
+ "mappings": "AA2BO,SAAS,YACd,KACA,MACA,EAAE,WAAW,KAAK,IAAyB,CAAC,GACjB;AAC3B,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,eAAe,EAAE,MAAM,KAAK;AAClC,UAAM,OAAO,SAAS,SAAS,SAAS;AACxC,UAAM,UAAU,SAAS,cAAc,IAAI;AAC3C,YAAQ,iBAAiB,QAAQ,CAAC,UAAU,QAAQ,EAAE,OAAO,QAAQ,CAAC,GAAG,YAAY;AACrF,YAAQ,iBAAiB,SAAS,CAAC,UAAU,OAAO,EAAE,OAAO,QAAQ,CAAC,GAAG,YAAY;AACrF,YAAQ,IAAI,IAAI;AAChB,QAAI,UAAU;AACZ,eAAS,OAAO,OAAO;AAAA,IACzB;AAAA,EACF,CAAC;AACH;AAKO,SAAS,UAAU,KAAa,SAA+B;AACpE,SAAO,YAAY,KAAK,OAAO,OAAO;AACxC;AAKO,SAAS,WAAW,KAAa,SAA+B;AACrE,SAAO,YAAY,KAAK,UAAU,OAAO;AAC3C;AAKO,SAAS,SAAS,KAAa,SAA+B;AACnE,SAAO,YAAY,KAAK,QAAQ,OAAO;AACzC;AAOO,SAAS,WAAW,KAAa,SAA+B;AACrE,SAAO,YAAY,KAAK,UAAU,EAAE,UAAU,SAAS,MAAM,GAAG,QAAQ,CAAC;AAC3E;",
6
+ "names": []
7
+ }
package/utils/tween.js CHANGED
@@ -2,7 +2,7 @@ import { cubicBezier } from "@motionone/easing";
2
2
  import { lerp, map, clamp01, damp, inertiaFinalValue } from "./math/index.js";
3
3
  import { isDefined, isArray, isNumber } from "./is.js";
4
4
  import { noop, noopValue as linear } from "./noop.js";
5
- import useRaf from "../services/raf.js";
5
+ import { useRaf } from "../services/index.js";
6
6
  let id = 0;
7
7
  const DEFAULT_PROGRESS_PRECISION = 1e-4;
8
8
  function normalizeEase(ease) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/tween.ts"],
4
- "sourcesContent": ["import { cubicBezier } from '@motionone/easing';\nimport { lerp, map, clamp01, damp, inertiaFinalValue } from './math/index.js';\nimport { isDefined, isArray, isNumber } from './is.js';\nimport { noop, noopValue as linear } from './noop.js';\nimport useRaf from '../services/raf.js';\nimport type { EasingFunction } from './math/createEases.js';\n\nlet id = 0;\nconst DEFAULT_PROGRESS_PRECISION = 0.0001;\n\nexport type BezierCurve = [number, number, number, number];\n\n/**\n * Controls for a tween.\n */\nexport interface Tween {\n /**\n * Start the tween from the beginning.\n */\n start: () => void;\n /**\n * Finish the tween and set its state to the end.\n */\n finish: () => void;\n /**\n * Pause the tween.\n */\n pause: () => void;\n /**\n * Start the tween from the current paused progress.\n */\n play: () => void;\n /**\n * Set and get the tween's progress.\n */\n progress: (progress?: number) => number;\n}\n\nexport interface TweenOptions {\n /**\n * The duration, in seconds.\n * Defaults to `1`.\n */\n duration?: number;\n /**\n * The delay, in seconds.\n * Defaults to `0`.\n */\n delay?: number;\n /**\n * The easing function or bezier curve to use.\n * Defaults to a linear easing function.\n */\n easing?: EasingFunction | BezierCurve;\n /**\n * The smooth factor. Setting this option to `true` or a `number` will disable the `duration` option.\n */\n smooth?: true | number;\n /**\n * The precision for when to consider the tween finished.\n * Defaults to `0.0001`.\n */\n precision?: number;\n /**\n * A callback executed on start.\n */\n onStart?: (progress: number) => void;\n /**\n * A callback executed each time the progress is updated.\n */\n onProgress?: (progress: number) => void;\n /**\n * A callback executed when the tween is finished.\n */\n onFinish?: (progress: number) => void;\n}\n\n/**\n * Normalize a easing function with default fallbacks.\n */\nexport function normalizeEase(ease: EasingFunction | BezierCurve): EasingFunction {\n if (!isDefined(ease)) {\n return linear;\n }\n\n if (isArray(ease)) {\n return cubicBezier(...ease);\n }\n\n return ease;\n}\n\n/**\n * Tween from 0 to 1.\n */\nexport function tween(callback: (progress: number) => unknown, options: TweenOptions = {}): Tween {\n const raf = useRaf();\n\n let progressValue = 0;\n let easedProgress = 0;\n\n const isSmooth = isDefined(options.smooth) && (isNumber(options.smooth) || options.smooth);\n const smoothFactor = isNumber(options.smooth) ? options.smooth : 0.1;\n const precision = options.precision ?? DEFAULT_PROGRESS_PRECISION;\n const ease = normalizeEase(options.easing);\n\n let delay = options.delay ?? 0;\n delay *= 1000;\n let duration = options.duration ?? 1;\n duration *= 1000;\n\n /* eslint-disable @typescript-eslint/no-use-before-define */\n let startTime = getStartTime();\n let endTime = getEndTime(startTime);\n /* eslint-enable @typescript-eslint/no-use-before-define */\n\n const key = `tw-${id}`;\n id += 1;\n\n const { onStart = noop, onProgress = noop, onFinish = noop } = options;\n let isRunning = false;\n\n /**\n * Pause the animation.\n */\n function pause() {\n isRunning = false;\n raf.remove(key);\n }\n\n /**\n * Set the progress value.\n */\n function progress(newProgress: number) {\n if (!isDefined(newProgress)) {\n return easedProgress;\n }\n\n progressValue = newProgress;\n easedProgress = isSmooth\n ? damp(progressValue, easedProgress, smoothFactor, precision)\n : ease(progressValue);\n\n // Stop when reaching precision\n if (Math.abs(1 - easedProgress) < precision) {\n progressValue = 1;\n easedProgress = 1;\n }\n\n callback(easedProgress);\n onProgress(easedProgress);\n\n if (easedProgress === 1) {\n pause();\n requestAnimationFrame(() => onFinish(easedProgress));\n }\n\n return easedProgress;\n }\n\n /**\n * Loop for rendering the animation.\n */\n function tick(props: { time: number }) {\n progress(clamp01(map(props.time, startTime, endTime, 0, 1)));\n }\n\n function getStartTime() {\n return performance.now() + delay;\n }\n\n function getEndTime(time: number) {\n return isSmooth ? inertiaFinalValue(time, 1) : time + duration;\n }\n\n /**\n * Play the animation.\n */\n function start() {\n onStart(0);\n startTime = getStartTime();\n endTime = getEndTime(startTime);\n progressValue = 0;\n easedProgress = 0;\n isRunning = true;\n\n raf.add(key, tick);\n }\n\n /**\n * Play a paused animation.\n */\n function play() {\n if (isRunning) {\n return;\n }\n\n startTime = getStartTime() - lerp(0, duration, progressValue);\n endTime = getEndTime(startTime);\n isRunning = true;\n\n raf.add(key, tick);\n }\n\n return {\n start,\n finish: () => progress(1),\n pause,\n play,\n progress,\n };\n}\n"],
5
- "mappings": "AAAA,SAAS,mBAAmB;AAC5B,SAAS,MAAM,KAAK,SAAS,MAAM,yBAAyB;AAC5D,SAAS,WAAW,SAAS,gBAAgB;AAC7C,SAAS,MAAM,aAAa,cAAc;AAC1C,OAAO,YAAY;AAGnB,IAAI,KAAK;AACT,MAAM,6BAA6B;AAwE5B,SAAS,cAAc,MAAoD;AAChF,MAAI,CAAC,UAAU,IAAI,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,IAAI,GAAG;AACjB,WAAO,YAAY,GAAG,IAAI;AAAA,EAC5B;AAEA,SAAO;AACT;AAKO,SAAS,MAAM,UAAyC,UAAwB,CAAC,GAAU;AAChG,QAAM,MAAM,OAAO;AAEnB,MAAI,gBAAgB;AACpB,MAAI,gBAAgB;AAEpB,QAAM,WAAW,UAAU,QAAQ,MAAM,MAAM,SAAS,QAAQ,MAAM,KAAK,QAAQ;AACnF,QAAM,eAAe,SAAS,QAAQ,MAAM,IAAI,QAAQ,SAAS;AACjE,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,OAAO,cAAc,QAAQ,MAAM;AAEzC,MAAI,QAAQ,QAAQ,SAAS;AAC7B,WAAS;AACT,MAAI,WAAW,QAAQ,YAAY;AACnC,cAAY;AAGZ,MAAI,YAAY,aAAa;AAC7B,MAAI,UAAU,WAAW,SAAS;AAGlC,QAAM,MAAM,MAAM,EAAE;AACpB,QAAM;AAEN,QAAM,EAAE,UAAU,MAAM,aAAa,MAAM,WAAW,KAAK,IAAI;AAC/D,MAAI,YAAY;AAKhB,WAAS,QAAQ;AACf,gBAAY;AACZ,QAAI,OAAO,GAAG;AAAA,EAChB;AAKA,WAAS,SAAS,aAAqB;AACrC,QAAI,CAAC,UAAU,WAAW,GAAG;AAC3B,aAAO;AAAA,IACT;AAEA,oBAAgB;AAChB,oBAAgB,WACZ,KAAK,eAAe,eAAe,cAAc,SAAS,IAC1D,KAAK,aAAa;AAGtB,QAAI,KAAK,IAAI,IAAI,aAAa,IAAI,WAAW;AAC3C,sBAAgB;AAChB,sBAAgB;AAAA,IAClB;AAEA,aAAS,aAAa;AACtB,eAAW,aAAa;AAExB,QAAI,kBAAkB,GAAG;AACvB,YAAM;AACN,4BAAsB,MAAM,SAAS,aAAa,CAAC;AAAA,IACrD;AAEA,WAAO;AAAA,EACT;AAKA,WAAS,KAAK,OAAyB;AACrC,aAAS,QAAQ,IAAI,MAAM,MAAM,WAAW,SAAS,GAAG,CAAC,CAAC,CAAC;AAAA,EAC7D;AAEA,WAAS,eAAe;AACtB,WAAO,YAAY,IAAI,IAAI;AAAA,EAC7B;AAEA,WAAS,WAAW,MAAc;AAChC,WAAO,WAAW,kBAAkB,MAAM,CAAC,IAAI,OAAO;AAAA,EACxD;AAKA,WAAS,QAAQ;AACf,YAAQ,CAAC;AACT,gBAAY,aAAa;AACzB,cAAU,WAAW,SAAS;AAC9B,oBAAgB;AAChB,oBAAgB;AAChB,gBAAY;AAEZ,QAAI,IAAI,KAAK,IAAI;AAAA,EACnB;AAKA,WAAS,OAAO;AACd,QAAI,WAAW;AACb;AAAA,IACF;AAEA,gBAAY,aAAa,IAAI,KAAK,GAAG,UAAU,aAAa;AAC5D,cAAU,WAAW,SAAS;AAC9B,gBAAY;AAEZ,QAAI,IAAI,KAAK,IAAI;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,MAAM,SAAS,CAAC;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import { cubicBezier } from '@motionone/easing';\nimport { lerp, map, clamp01, damp, inertiaFinalValue } from './math/index.js';\nimport { isDefined, isArray, isNumber } from './is.js';\nimport { noop, noopValue as linear } from './noop.js';\nimport { useRaf } from '../services/index.js';\nimport type { EasingFunction } from './math/createEases.js';\n\nlet id = 0;\nconst DEFAULT_PROGRESS_PRECISION = 0.0001;\n\nexport type BezierCurve = [number, number, number, number];\n\n/**\n * Controls for a tween.\n */\nexport interface Tween {\n /**\n * Start the tween from the beginning.\n */\n start: () => void;\n /**\n * Finish the tween and set its state to the end.\n */\n finish: () => void;\n /**\n * Pause the tween.\n */\n pause: () => void;\n /**\n * Start the tween from the current paused progress.\n */\n play: () => void;\n /**\n * Set and get the tween's progress.\n */\n progress: (progress?: number) => number;\n}\n\nexport interface TweenOptions {\n /**\n * The duration, in seconds.\n * Defaults to `1`.\n */\n duration?: number;\n /**\n * The delay, in seconds.\n * Defaults to `0`.\n */\n delay?: number;\n /**\n * The easing function or bezier curve to use.\n * Defaults to a linear easing function.\n */\n easing?: EasingFunction | BezierCurve;\n /**\n * The smooth factor. Setting this option to `true` or a `number` will disable the `duration` option.\n */\n smooth?: true | number;\n /**\n * The precision for when to consider the tween finished.\n * Defaults to `0.0001`.\n */\n precision?: number;\n /**\n * A callback executed on start.\n */\n onStart?: (progress: number) => void;\n /**\n * A callback executed each time the progress is updated.\n */\n onProgress?: (progress: number) => void;\n /**\n * A callback executed when the tween is finished.\n */\n onFinish?: (progress: number) => void;\n}\n\n/**\n * Normalize a easing function with default fallbacks.\n */\nexport function normalizeEase(ease: EasingFunction | BezierCurve): EasingFunction {\n if (!isDefined(ease)) {\n return linear;\n }\n\n if (isArray(ease)) {\n return cubicBezier(...ease);\n }\n\n return ease;\n}\n\n/**\n * Tween from 0 to 1.\n */\nexport function tween(callback: (progress: number) => unknown, options: TweenOptions = {}): Tween {\n const raf = useRaf();\n\n let progressValue = 0;\n let easedProgress = 0;\n\n const isSmooth = isDefined(options.smooth) && (isNumber(options.smooth) || options.smooth);\n const smoothFactor = isNumber(options.smooth) ? options.smooth : 0.1;\n const precision = options.precision ?? DEFAULT_PROGRESS_PRECISION;\n const ease = normalizeEase(options.easing);\n\n let delay = options.delay ?? 0;\n delay *= 1000;\n let duration = options.duration ?? 1;\n duration *= 1000;\n\n /* eslint-disable @typescript-eslint/no-use-before-define */\n let startTime = getStartTime();\n let endTime = getEndTime(startTime);\n /* eslint-enable @typescript-eslint/no-use-before-define */\n\n const key = `tw-${id}`;\n id += 1;\n\n const { onStart = noop, onProgress = noop, onFinish = noop } = options;\n let isRunning = false;\n\n /**\n * Pause the animation.\n */\n function pause() {\n isRunning = false;\n raf.remove(key);\n }\n\n /**\n * Set the progress value.\n */\n function progress(newProgress: number) {\n if (!isDefined(newProgress)) {\n return easedProgress;\n }\n\n progressValue = newProgress;\n easedProgress = isSmooth\n ? damp(progressValue, easedProgress, smoothFactor, precision)\n : ease(progressValue);\n\n // Stop when reaching precision\n if (Math.abs(1 - easedProgress) < precision) {\n progressValue = 1;\n easedProgress = 1;\n }\n\n callback(easedProgress);\n onProgress(easedProgress);\n\n if (easedProgress === 1) {\n pause();\n requestAnimationFrame(() => onFinish(easedProgress));\n }\n\n return easedProgress;\n }\n\n /**\n * Loop for rendering the animation.\n */\n function tick(props: { time: number }) {\n progress(clamp01(map(props.time, startTime, endTime, 0, 1)));\n }\n\n function getStartTime() {\n return performance.now() + delay;\n }\n\n function getEndTime(time: number) {\n return isSmooth ? inertiaFinalValue(time, 1) : time + duration;\n }\n\n /**\n * Play the animation.\n */\n function start() {\n onStart(0);\n startTime = getStartTime();\n endTime = getEndTime(startTime);\n progressValue = 0;\n easedProgress = 0;\n isRunning = true;\n\n raf.add(key, tick);\n }\n\n /**\n * Play a paused animation.\n */\n function play() {\n if (isRunning) {\n return;\n }\n\n startTime = getStartTime() - lerp(0, duration, progressValue);\n endTime = getEndTime(startTime);\n isRunning = true;\n\n raf.add(key, tick);\n }\n\n return {\n start,\n finish: () => progress(1),\n pause,\n play,\n progress,\n };\n}\n"],
5
+ "mappings": "AAAA,SAAS,mBAAmB;AAC5B,SAAS,MAAM,KAAK,SAAS,MAAM,yBAAyB;AAC5D,SAAS,WAAW,SAAS,gBAAgB;AAC7C,SAAS,MAAM,aAAa,cAAc;AAC1C,SAAS,cAAc;AAGvB,IAAI,KAAK;AACT,MAAM,6BAA6B;AAwE5B,SAAS,cAAc,MAAoD;AAChF,MAAI,CAAC,UAAU,IAAI,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,IAAI,GAAG;AACjB,WAAO,YAAY,GAAG,IAAI;AAAA,EAC5B;AAEA,SAAO;AACT;AAKO,SAAS,MAAM,UAAyC,UAAwB,CAAC,GAAU;AAChG,QAAM,MAAM,OAAO;AAEnB,MAAI,gBAAgB;AACpB,MAAI,gBAAgB;AAEpB,QAAM,WAAW,UAAU,QAAQ,MAAM,MAAM,SAAS,QAAQ,MAAM,KAAK,QAAQ;AACnF,QAAM,eAAe,SAAS,QAAQ,MAAM,IAAI,QAAQ,SAAS;AACjE,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,OAAO,cAAc,QAAQ,MAAM;AAEzC,MAAI,QAAQ,QAAQ,SAAS;AAC7B,WAAS;AACT,MAAI,WAAW,QAAQ,YAAY;AACnC,cAAY;AAGZ,MAAI,YAAY,aAAa;AAC7B,MAAI,UAAU,WAAW,SAAS;AAGlC,QAAM,MAAM,MAAM,EAAE;AACpB,QAAM;AAEN,QAAM,EAAE,UAAU,MAAM,aAAa,MAAM,WAAW,KAAK,IAAI;AAC/D,MAAI,YAAY;AAKhB,WAAS,QAAQ;AACf,gBAAY;AACZ,QAAI,OAAO,GAAG;AAAA,EAChB;AAKA,WAAS,SAAS,aAAqB;AACrC,QAAI,CAAC,UAAU,WAAW,GAAG;AAC3B,aAAO;AAAA,IACT;AAEA,oBAAgB;AAChB,oBAAgB,WACZ,KAAK,eAAe,eAAe,cAAc,SAAS,IAC1D,KAAK,aAAa;AAGtB,QAAI,KAAK,IAAI,IAAI,aAAa,IAAI,WAAW;AAC3C,sBAAgB;AAChB,sBAAgB;AAAA,IAClB;AAEA,aAAS,aAAa;AACtB,eAAW,aAAa;AAExB,QAAI,kBAAkB,GAAG;AACvB,YAAM;AACN,4BAAsB,MAAM,SAAS,aAAa,CAAC;AAAA,IACrD;AAEA,WAAO;AAAA,EACT;AAKA,WAAS,KAAK,OAAyB;AACrC,aAAS,QAAQ,IAAI,MAAM,MAAM,WAAW,SAAS,GAAG,CAAC,CAAC,CAAC;AAAA,EAC7D;AAEA,WAAS,eAAe;AACtB,WAAO,YAAY,IAAI,IAAI;AAAA,EAC7B;AAEA,WAAS,WAAW,MAAc;AAChC,WAAO,WAAW,kBAAkB,MAAM,CAAC,IAAI,OAAO;AAAA,EACxD;AAKA,WAAS,QAAQ;AACf,YAAQ,CAAC;AACT,gBAAY,aAAa;AACzB,cAAU,WAAW,SAAS;AAC9B,oBAAgB;AAChB,oBAAgB;AAChB,gBAAY;AAEZ,QAAI,IAAI,KAAK,IAAI;AAAA,EACnB;AAKA,WAAS,OAAO;AACd,QAAI,WAAW;AACb;AAAA,IACF;AAEA,gBAAY,aAAa,IAAI,KAAK,GAAG,UAAU,aAAa;AAC5D,cAAU,WAAW,SAAS;AAC9B,gBAAY;AAEZ,QAAI,IAAI,KAAK,IAAI;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,MAAM,SAAS,CAAC;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }