@studiometa/js-toolkit 2.0.0-alpha.4 → 2.0.0-alpha.8

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 (194) hide show
  1. package/Base/index.d.ts +29 -47
  2. package/Base/index.js +19 -14
  3. package/Base/managers/ChildrenManager.d.ts +6 -6
  4. package/Base/managers/ChildrenManager.js +1 -2
  5. package/Base/managers/EventsManager.d.ts +9 -9
  6. package/Base/managers/EventsManager.js +18 -33
  7. package/Base/managers/OptionsManager.d.ts +0 -8
  8. package/Base/managers/OptionsManager.js +1 -6
  9. package/Base/managers/RefsManager.js +1 -2
  10. package/Base/managers/ServicesManager.d.ts +14 -3
  11. package/Base/managers/ServicesManager.js +30 -12
  12. package/Base/utils.js +1 -2
  13. package/README.md +12 -70
  14. package/decorators/index.js +1 -2
  15. package/decorators/withBreakpointManager.d.ts +4 -4
  16. package/decorators/withBreakpointManager.js +1 -2
  17. package/decorators/withBreakpointObserver.d.ts +2 -2
  18. package/decorators/withBreakpointObserver.js +1 -2
  19. package/decorators/withDrag.d.ts +3 -3
  20. package/decorators/withDrag.js +1 -2
  21. package/decorators/withExtraConfig.d.ts +3 -3
  22. package/decorators/withExtraConfig.js +1 -2
  23. package/decorators/withIntersectionObserver.d.ts +2 -2
  24. package/decorators/withIntersectionObserver.js +1 -11
  25. package/decorators/withMountWhenInView.d.ts +3 -3
  26. package/decorators/withMountWhenInView.js +1 -2
  27. package/helpers/createApp.d.ts +3 -3
  28. package/helpers/createApp.js +9 -9
  29. package/helpers/importOnInteraction.d.ts +3 -3
  30. package/helpers/importOnInteraction.js +1 -2
  31. package/helpers/importWhenIdle.d.ts +3 -3
  32. package/helpers/importWhenIdle.js +1 -2
  33. package/helpers/importWhenVisible.d.ts +3 -3
  34. package/helpers/importWhenVisible.js +1 -2
  35. package/helpers/index.js +1 -2
  36. package/helpers/utils.js +1 -2
  37. package/index.d.ts +2 -2
  38. package/index.js +1 -2
  39. package/index.modern.js +1 -2
  40. package/index.umd.js +1 -2
  41. package/package.json +3 -4
  42. package/services/Service.js +1 -2
  43. package/services/drag.js +1 -2
  44. package/services/index.js +1 -2
  45. package/services/key.js +1 -2
  46. package/services/load.d.ts +1 -1
  47. package/services/load.js +2 -3
  48. package/services/pointer.js +1 -2
  49. package/services/raf.js +1 -2
  50. package/services/resize.js +1 -6
  51. package/services/scroll.js +1 -2
  52. package/utils/collide/boundingRectToCircle.js +1 -2
  53. package/utils/collide/collideCircleCircle.js +1 -2
  54. package/utils/collide/collideCircleRect.js +1 -2
  55. package/utils/collide/collidePointCircle.js +1 -2
  56. package/utils/collide/collidePointRect.js +1 -2
  57. package/utils/collide/collideRectRect.js +1 -2
  58. package/utils/collide/index.js +1 -2
  59. package/utils/css/classes.js +1 -2
  60. package/utils/css/index.js +1 -2
  61. package/utils/css/matrix.js +1 -2
  62. package/utils/css/styles.js +1 -2
  63. package/utils/css/transition.js +1 -2
  64. package/utils/debounce.js +1 -2
  65. package/utils/focusTrap.js +1 -2
  66. package/utils/history.js +2 -3
  67. package/utils/index.d.ts +2 -1
  68. package/utils/index.js +2 -2
  69. package/utils/keyCodes.js +1 -2
  70. package/utils/math/clamp.js +1 -2
  71. package/utils/math/clamp01.js +1 -2
  72. package/utils/math/damp.js +1 -2
  73. package/utils/math/index.js +1 -2
  74. package/utils/math/inertiaFinalValue.js +1 -2
  75. package/utils/math/lerp.js +1 -2
  76. package/utils/math/map.js +1 -2
  77. package/utils/math/round.js +1 -2
  78. package/utils/memoize.d.ts +30 -0
  79. package/utils/memoize.js +30 -0
  80. package/utils/nextFrame.js +1 -2
  81. package/utils/object/autoBind.js +1 -2
  82. package/utils/object/getAllProperties.js +1 -2
  83. package/utils/object/index.js +1 -2
  84. package/utils/object/isObject.js +1 -2
  85. package/utils/string/index.js +1 -2
  86. package/utils/string/withLeadingCharacters.js +1 -2
  87. package/utils/string/withLeadingSlash.js +1 -2
  88. package/utils/string/withTrailingCharacters.js +1 -2
  89. package/utils/string/withTrailingSlash.js +1 -2
  90. package/utils/string/withoutLeadingCharacters.js +1 -2
  91. package/utils/string/withoutLeadingCharactersRecursive.js +1 -2
  92. package/utils/string/withoutLeadingSlash.js +1 -2
  93. package/utils/string/withoutTrailingCharacters.js +1 -2
  94. package/utils/string/withoutTrailingCharactersRecursive.js +1 -2
  95. package/utils/string/withoutTrailingSlash.js +1 -2
  96. package/utils/throttle.js +1 -2
  97. package/Base/index.js.map +0 -1
  98. package/Base/managers/ChildrenManager.js.map +0 -1
  99. package/Base/managers/EventsManager.js.map +0 -1
  100. package/Base/managers/OptionsManager.js.map +0 -1
  101. package/Base/managers/RefsManager.js.map +0 -1
  102. package/Base/managers/ServicesManager.js.map +0 -1
  103. package/Base/utils.js.map +0 -1
  104. package/components/Accordion/Accordion.d.ts +0 -83
  105. package/components/Accordion/Accordion.js +0 -58
  106. package/components/Accordion/Accordion.js.map +0 -1
  107. package/components/Accordion/AccordionItem.d.ts +0 -122
  108. package/components/Accordion/AccordionItem.js +0 -244
  109. package/components/Accordion/AccordionItem.js.map +0 -1
  110. package/components/Accordion/index.d.ts +0 -27
  111. package/components/Accordion/index.js +0 -19
  112. package/components/Accordion/index.js.map +0 -1
  113. package/components/Cursor.d.ts +0 -138
  114. package/components/Cursor.js +0 -136
  115. package/components/Cursor.js.map +0 -1
  116. package/components/Draggable.d.ts +0 -49
  117. package/components/Draggable.js +0 -43
  118. package/components/Draggable.js.map +0 -1
  119. package/components/Modal.d.ts +0 -158
  120. package/components/Modal.js +0 -186
  121. package/components/Modal.js.map +0 -1
  122. package/components/Tabs.d.ts +0 -108
  123. package/components/Tabs.js +0 -120
  124. package/components/Tabs.js.map +0 -1
  125. package/components/index.d.ts +0 -6
  126. package/components/index.js +0 -7
  127. package/components/index.js.map +0 -1
  128. package/decorators/index.js.map +0 -1
  129. package/decorators/withBreakpointManager.js.map +0 -1
  130. package/decorators/withBreakpointObserver.js.map +0 -1
  131. package/decorators/withDrag.js.map +0 -1
  132. package/decorators/withExtraConfig.js.map +0 -1
  133. package/decorators/withIntersectionObserver.js.map +0 -1
  134. package/decorators/withMountWhenInView.js.map +0 -1
  135. package/helpers/createApp.js.map +0 -1
  136. package/helpers/importOnInteraction.js.map +0 -1
  137. package/helpers/importWhenIdle.js.map +0 -1
  138. package/helpers/importWhenVisible.js.map +0 -1
  139. package/helpers/index.js.map +0 -1
  140. package/helpers/utils.js.map +0 -1
  141. package/index.js.map +0 -1
  142. package/index.modern.js.map +0 -1
  143. package/index.umd.js.map +0 -1
  144. package/services/Service.js.map +0 -1
  145. package/services/drag.js.map +0 -1
  146. package/services/index.js.map +0 -1
  147. package/services/key.js.map +0 -1
  148. package/services/load.js.map +0 -1
  149. package/services/pointer.js.map +0 -1
  150. package/services/raf.js.map +0 -1
  151. package/services/resize.js.map +0 -1
  152. package/services/scroll.js.map +0 -1
  153. package/utils/collide/boundingRectToCircle.js.map +0 -1
  154. package/utils/collide/collideCircleCircle.js.map +0 -1
  155. package/utils/collide/collideCircleRect.js.map +0 -1
  156. package/utils/collide/collidePointCircle.js.map +0 -1
  157. package/utils/collide/collidePointRect.js.map +0 -1
  158. package/utils/collide/collideRectRect.js.map +0 -1
  159. package/utils/collide/index.js.map +0 -1
  160. package/utils/css/classes.js.map +0 -1
  161. package/utils/css/index.js.map +0 -1
  162. package/utils/css/matrix.js.map +0 -1
  163. package/utils/css/styles.js.map +0 -1
  164. package/utils/css/transition.js.map +0 -1
  165. package/utils/debounce.js.map +0 -1
  166. package/utils/focusTrap.js.map +0 -1
  167. package/utils/history.js.map +0 -1
  168. package/utils/index.js.map +0 -1
  169. package/utils/keyCodes.js.map +0 -1
  170. package/utils/math/clamp.js.map +0 -1
  171. package/utils/math/clamp01.js.map +0 -1
  172. package/utils/math/damp.js.map +0 -1
  173. package/utils/math/index.js.map +0 -1
  174. package/utils/math/inertiaFinalValue.js.map +0 -1
  175. package/utils/math/lerp.js.map +0 -1
  176. package/utils/math/map.js.map +0 -1
  177. package/utils/math/round.js.map +0 -1
  178. package/utils/nextFrame.js.map +0 -1
  179. package/utils/object/autoBind.js.map +0 -1
  180. package/utils/object/getAllProperties.js.map +0 -1
  181. package/utils/object/index.js.map +0 -1
  182. package/utils/object/isObject.js.map +0 -1
  183. package/utils/string/index.js.map +0 -1
  184. package/utils/string/withLeadingCharacters.js.map +0 -1
  185. package/utils/string/withLeadingSlash.js.map +0 -1
  186. package/utils/string/withTrailingCharacters.js.map +0 -1
  187. package/utils/string/withTrailingSlash.js.map +0 -1
  188. package/utils/string/withoutLeadingCharacters.js.map +0 -1
  189. package/utils/string/withoutLeadingCharactersRecursive.js.map +0 -1
  190. package/utils/string/withoutLeadingSlash.js.map +0 -1
  191. package/utils/string/withoutTrailingCharacters.js.map +0 -1
  192. package/utils/string/withoutTrailingCharactersRecursive.js.map +0 -1
  193. package/utils/string/withoutTrailingSlash.js.map +0 -1
  194. package/utils/throttle.js.map +0 -1
@@ -1,108 +0,0 @@
1
- /**
2
- * @typedef {import('../Base').BaseOptions} BaseOptions
3
- */
4
- /**
5
- * @typedef {Object} TabItem
6
- * @property {HTMLElement} btn
7
- * @property {HTMLElement} content
8
- * @property {Boolean} isEnabled
9
- */
10
- /**
11
- * @typedef {Object} TabsRefs
12
- * @property {HTMLElement[]} btn
13
- * @property {HTMLElement[]} content
14
- */
15
- /**
16
- * @typedef {import('../utils/css/styles.js').CssStyleObject} CssStyleObject
17
- * @typedef {Partial<Record<'open'|'active'|'closed', string|CssStyleObject>>} TabsStates
18
- * @typedef {Partial<Record<keyof TabsRefs, TabsStates>>} TabsStylesOption
19
- */
20
- /**
21
- * @typedef {Object} TabsOptions
22
- * @property {TabsStylesOption} styles
23
- */
24
- /**
25
- * @typedef {Object} TabsPrivateInterface
26
- * @property {TabsOptions} $options
27
- * @property {TabsRefs} $refs
28
- * @property {Array<TabItem>} items
29
- */
30
- /**
31
- * @typedef {Tabs & TabsPrivateInterface} TabsInterface
32
- */
33
- /**
34
- * Tabs class.
35
- */
36
- export default class Tabs extends Base {
37
- /**
38
- * Tabs config.
39
- */
40
- static config: {
41
- name: string;
42
- refs: string[];
43
- options: {
44
- styles: {
45
- type: ObjectConstructor;
46
- /**
47
- * @return {TabsStylesOption}
48
- */
49
- default: () => TabsStylesOption;
50
- };
51
- };
52
- };
53
- /**
54
- * Initialize the component's behaviours.
55
- * @this {TabsInterface}
56
- * @return {void}
57
- */
58
- mounted(): void;
59
- items: any;
60
- /**
61
- * Switch tab on button click.
62
- *
63
- * @this {TabsInterface}
64
- * @param {Event} event The click event object.
65
- * @param {Number} index The index of the clicked button.
66
- * @return {void}
67
- */
68
- onBtnClick(event: Event, index: number): void;
69
- /**
70
- * Enable the given tab and its associated content.
71
- *
72
- * @this {TabsInterface}
73
- * @param {TabItem} item The item to enable.
74
- * @return {Promise<TabsInterface>} Tabs instance.
75
- */
76
- enableItem(item: TabItem): Promise<TabsInterface>;
77
- /**
78
- * Disable the given tab and its associated content.
79
- *
80
- * @this {TabsInterface}
81
- * @param {TabItem} item The item to disable.
82
- * @return {Promise<TabsInterface>} The Tabs instance.
83
- */
84
- disableItem(item: TabItem): Promise<TabsInterface>;
85
- }
86
- export type BaseOptions = import('../Base').BaseOptions;
87
- export type TabItem = {
88
- btn: HTMLElement;
89
- content: HTMLElement;
90
- isEnabled: boolean;
91
- };
92
- export type TabsRefs = {
93
- btn: HTMLElement[];
94
- content: HTMLElement[];
95
- };
96
- export type CssStyleObject = import('../utils/css/styles.js').CssStyleObject;
97
- export type TabsStates = Partial<Record<'open' | 'active' | 'closed', string | CssStyleObject>>;
98
- export type TabsStylesOption = Partial<Record<keyof TabsRefs, TabsStates>>;
99
- export type TabsOptions = {
100
- styles: TabsStylesOption;
101
- };
102
- export type TabsPrivateInterface = {
103
- $options: TabsOptions;
104
- $refs: TabsRefs;
105
- items: Array<TabItem>;
106
- };
107
- export type TabsInterface = Tabs & TabsPrivateInterface;
108
- import Base from "../Base/index.js";
@@ -1,120 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import Base from '../Base/index.js';
4
- import transition from '../utils/css/transition.js';
5
- export default class Tabs extends Base {
6
- mounted() {
7
- this.items = this.$refs.btn.map((btn, index) => {
8
- var id = "".concat(this.$id, "-").concat(index);
9
- var content = this.$refs.content[index];
10
- btn.setAttribute('id', id);
11
- content.setAttribute('aria-labelledby', id);
12
- var item = {
13
- btn,
14
- content,
15
- isEnabled: index > 0
16
- };
17
-
18
- if (index > 0) {
19
- this.disableItem(item);
20
- } else {
21
- this.enableItem(item);
22
- }
23
-
24
- return item;
25
- });
26
- }
27
-
28
- onBtnClick(event, index) {
29
- this.items.forEach((item, i) => {
30
- if (i !== index) {
31
- this.disableItem(item);
32
- }
33
- });
34
- this.enableItem(this.items[index]);
35
- }
36
-
37
- enableItem(item) {
38
- var _this = this;
39
-
40
- return _asyncToGenerator(function* () {
41
- if (!item || item.isEnabled) {
42
- return Promise.resolve(_this);
43
- }
44
-
45
- item.isEnabled = true;
46
- var {
47
- btn,
48
- content
49
- } = item;
50
- var btnStyles = _this.$options.styles.btn || {};
51
- var contentStyles = _this.$options.styles.content || {};
52
- content.setAttribute('aria-hidden', 'false');
53
-
54
- _this.$emit('enable', item);
55
-
56
- return Promise.all([transition(btn, {
57
- from: btnStyles.closed,
58
- active: btnStyles.active,
59
- to: btnStyles.open
60
- }, 'keep'), transition(content, {
61
- from: contentStyles.closed,
62
- active: contentStyles.active,
63
- to: contentStyles.open
64
- }, 'keep')]).then(() => Promise.resolve(_this));
65
- })();
66
- }
67
-
68
- disableItem(item) {
69
- var _this2 = this;
70
-
71
- return _asyncToGenerator(function* () {
72
- if (!item || !item.isEnabled) {
73
- return Promise.resolve(_this2);
74
- }
75
-
76
- item.isEnabled = false;
77
- var {
78
- btn,
79
- content
80
- } = item;
81
- var btnStyles = _this2.$options.styles.btn || {};
82
- var contentStyles = _this2.$options.styles.content || {};
83
- content.setAttribute('aria-hidden', 'true');
84
-
85
- _this2.$emit('disable', item);
86
-
87
- return Promise.all([transition(btn, {
88
- from: btnStyles.open,
89
- active: btnStyles.active,
90
- to: btnStyles.closed
91
- }, 'keep'), transition(content, {
92
- from: contentStyles.open,
93
- active: contentStyles.active,
94
- to: contentStyles.closed
95
- }, 'keep')]).then(() => Promise.resolve(_this2));
96
- })();
97
- }
98
-
99
- }
100
-
101
- _defineProperty(Tabs, "config", {
102
- name: 'Tabs',
103
- refs: ['btn[]', 'content[]'],
104
- options: {
105
- styles: {
106
- type: Object,
107
- default: () => ({
108
- content: {
109
- closed: {
110
- position: 'absolute',
111
- opacity: '0',
112
- pointerEvents: 'none',
113
- visibility: 'hidden'
114
- }
115
- }
116
- })
117
- }
118
- }
119
- });
120
- //# sourceMappingURL=Tabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/components/Tabs.js"],"names":["Base","transition","Tabs","mounted","items","$refs","btn","map","index","id","$id","content","setAttribute","item","isEnabled","disableItem","enableItem","onBtnClick","event","forEach","i","Promise","resolve","btnStyles","$options","styles","contentStyles","$emit","all","from","closed","active","to","open","then","name","refs","options","type","Object","default","position","opacity","pointerEvents","visibility"],"mappings":"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","sourcesContent":["import Base from '../Base/index.js';\nimport transition from '../utils/css/transition.js';\n\n/**\n * @typedef {import('../Base').BaseOptions} BaseOptions\n */\n\n/**\n * @typedef {Object} TabItem\n * @property {HTMLElement} btn\n * @property {HTMLElement} content\n * @property {Boolean} isEnabled\n */\n\n/**\n * @typedef {Object} TabsRefs\n * @property {HTMLElement[]} btn\n * @property {HTMLElement[]} content\n */\n\n/**\n * @typedef {import('../utils/css/styles.js').CssStyleObject} CssStyleObject\n * @typedef {Partial<Record<'open'|'active'|'closed', string|CssStyleObject>>} TabsStates\n * @typedef {Partial<Record<keyof TabsRefs, TabsStates>>} TabsStylesOption\n */\n\n/**\n * @typedef {Object} TabsOptions\n * @property {TabsStylesOption} styles\n */\n\n/**\n * @typedef {Object} TabsPrivateInterface\n * @property {TabsOptions} $options\n * @property {TabsRefs} $refs\n * @property {Array<TabItem>} items\n */\n\n/**\n * @typedef {Tabs & TabsPrivateInterface} TabsInterface\n */\n\n/**\n * Tabs class.\n */\nexport default class Tabs extends Base {\n /**\n * Tabs config.\n */\n static config = {\n name: 'Tabs',\n refs: ['btn[]', 'content[]'],\n options: {\n styles: {\n type: Object,\n /**\n * @return {TabsStylesOption}\n */\n default: () => ({\n content: {\n closed: {\n position: 'absolute',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden',\n },\n },\n }),\n },\n },\n };\n\n /**\n * Initialize the component's behaviours.\n * @this {TabsInterface}\n * @return {void}\n */\n mounted() {\n this.items = this.$refs.btn.map((btn, index) => {\n const id = `${this.$id}-${index}`;\n const content = this.$refs.content[index];\n btn.setAttribute('id', id);\n content.setAttribute('aria-labelledby', id);\n\n const item = { btn, content, isEnabled: index > 0 };\n if (index > 0) {\n this.disableItem(item);\n } else {\n this.enableItem(item);\n }\n return item;\n });\n }\n\n /**\n * Switch tab on button click.\n *\n * @this {TabsInterface}\n * @param {Event} event The click event object.\n * @param {Number} index The index of the clicked button.\n * @return {void}\n */\n onBtnClick(event, index) {\n this.items.forEach((item, i) => {\n if (i !== index) {\n this.disableItem(item);\n }\n });\n\n this.enableItem(this.items[index]);\n }\n\n /**\n * Enable the given tab and its associated content.\n *\n * @this {TabsInterface}\n * @param {TabItem} item The item to enable.\n * @return {Promise<TabsInterface>} Tabs instance.\n */\n async enableItem(item) {\n if (!item || item.isEnabled) {\n return Promise.resolve(this);\n }\n\n item.isEnabled = true;\n const { btn, content } = item;\n const btnStyles = this.$options.styles.btn || {};\n const contentStyles = this.$options.styles.content || {};\n\n content.setAttribute('aria-hidden', 'false');\n this.$emit('enable', item);\n\n return Promise.all([\n transition(\n btn,\n {\n from: btnStyles.closed,\n active: btnStyles.active,\n to: btnStyles.open,\n },\n 'keep'\n ),\n transition(\n content,\n {\n from: contentStyles.closed,\n active: contentStyles.active,\n to: contentStyles.open,\n },\n 'keep'\n ),\n ]).then(() => Promise.resolve(this));\n }\n\n /**\n * Disable the given tab and its associated content.\n *\n * @this {TabsInterface}\n * @param {TabItem} item The item to disable.\n * @return {Promise<TabsInterface>} The Tabs instance.\n */\n async disableItem(item) {\n if (!item || !item.isEnabled) {\n return Promise.resolve(this);\n }\n\n item.isEnabled = false;\n const { btn, content } = item;\n const btnStyles = this.$options.styles.btn || {};\n const contentStyles = this.$options.styles.content || {};\n\n content.setAttribute('aria-hidden', 'true');\n this.$emit('disable', item);\n\n return Promise.all([\n transition(\n btn,\n {\n from: btnStyles.open,\n active: btnStyles.active,\n to: btnStyles.closed,\n },\n 'keep'\n ),\n transition(\n content,\n {\n from: contentStyles.open,\n active: contentStyles.active,\n to: contentStyles.closed,\n },\n 'keep'\n ),\n ]).then(() => Promise.resolve(this));\n }\n}\n"],"file":"Tabs.js"}
@@ -1,6 +0,0 @@
1
- import Accordion from "./Accordion/index.js";
2
- import Cursor from "./Cursor.js";
3
- import Draggable from "./Draggable.js";
4
- import Modal from "./Modal.js";
5
- import Tabs from "./Tabs.js";
6
- export { Accordion, Cursor, Draggable, Modal, Tabs };
@@ -1,7 +0,0 @@
1
- import Accordion from './Accordion/index.js';
2
- import Cursor from './Cursor.js';
3
- import Draggable from './Draggable.js';
4
- import Modal from './Modal.js';
5
- import Tabs from './Tabs.js';
6
- export { Accordion, Cursor, Draggable, Modal, Tabs };
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/components/index.js"],"names":["Accordion","Cursor","Draggable","Modal","Tabs"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,sBAAtB;AACA,OAAOC,MAAP,MAAmB,aAAnB;AACA,OAAOC,SAAP,MAAsB,gBAAtB;AACA,OAAOC,KAAP,MAAkB,YAAlB;AACA,OAAOC,IAAP,MAAiB,WAAjB;AAEA,SAASJ,SAAT,EAAoBC,MAApB,EAA4BC,SAA5B,EAAuCC,KAAvC,EAA8CC,IAA9C","sourcesContent":["import Accordion from './Accordion/index.js';\nimport Cursor from './Cursor.js';\nimport Draggable from './Draggable.js';\nimport Modal from './Modal.js';\nimport Tabs from './Tabs.js';\n\nexport { Accordion, Cursor, Draggable, Modal, Tabs };\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/decorators/index.js"],"names":["withBreakpointManager","withBreakpointObserver","withDrag","withExtraConfig","withIntersectionObserver","withMountWhenInView"],"mappings":"AAAA,OAAOA,qBAAP,MAAkC,4BAAlC;AACA,OAAOC,sBAAP,MAAmC,6BAAnC;AACA,OAAOC,QAAP,MAAqB,eAArB;AACA,OAAOC,eAAP,MAA4B,sBAA5B;AACA,OAAOC,wBAAP,MAAqC,+BAArC;AACA,OAAOC,mBAAP,MAAgC,0BAAhC;AAEA,SACEL,qBADF,EAEEC,sBAFF,EAGEC,QAHF,EAIEC,eAJF,EAKEC,wBALF,EAMEC,mBANF","sourcesContent":["import withBreakpointManager from './withBreakpointManager.js';\nimport withBreakpointObserver from './withBreakpointObserver.js';\nimport withDrag from './withDrag.js';\nimport withExtraConfig from './withExtraConfig.js';\nimport withIntersectionObserver from './withIntersectionObserver.js';\nimport withMountWhenInView from './withMountWhenInView.js';\n\nexport {\n withBreakpointManager,\n withBreakpointObserver,\n withDrag,\n withExtraConfig,\n withIntersectionObserver,\n withMountWhenInView,\n};\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/decorators/withBreakpointManager.js"],"names":["useResize","testBreakpoints","breakpoints","breakpoint","props","forEach","breakpointKeys","instance","includes","$isMounted","setTimeout","$mount","$destroy","mountComponents","map","bk","ComponentClass","child","$el","Object","defineProperty","get","$parent","instances","WeakMap","withBreakpointManager","BaseClass","Array","isArray","Error","length","add","constructor","element","has","set","$id"],"mappings":"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","sourcesContent":["import useResize from '../services/resize.js';\n\n/**\n * @typedef {import('../Base').default} Base\n * @typedef {import('../Base').BaseComponent} BaseComponent\n */\n\n/**\n * Test the breakpoins of the given Base instance and return the hook to call.\n *\n * @param {Array<[String[], Base]>} breakpoints The breakpoints's data.\n */\nfunction testBreakpoints(breakpoints) {\n const { breakpoint } = useResize().props();\n breakpoints.forEach(([breakpointKeys, instance]) => {\n if (breakpointKeys.includes(breakpoint) && !instance.$isMounted) {\n setTimeout(() => instance.$mount(), 0);\n } else if (!breakpointKeys.includes(breakpoint) && instance.$isMounted) {\n instance.$destroy();\n }\n });\n}\n\n/**\n * Prepare the components.\n * @param {Base} instance\n * @param {Array<[String, BaseComponent]>} breakpoints\n * @return {Array<[String, Base]>}\n */\nfunction mountComponents(instance, breakpoints) {\n return breakpoints.map(([bk, ComponentClass]) => {\n const child = new ComponentClass(instance.$el);\n Object.defineProperty(child, '$parent', { get: () => instance.$parent });\n return [bk, child];\n });\n}\n\n/**\n * A cache object to hold each Base sub-instances.\n * @type {Object}\n */\nconst instances = new WeakMap();\n\n/**\n * BreakpointManager class.\n * @template {BaseComponent} T\n * @param {T} BaseClass\n * @param {Array<[String, BaseComponent]>} breakpoints\n * @return {T}\n */\nexport default function withBreakpointManager(BaseClass, breakpoints) {\n if (!Array.isArray(breakpoints)) {\n throw new Error('[withBreakpointManager] The `breakpoints` parameter must be an array.');\n }\n\n if (breakpoints.length < 2) {\n throw new Error('[withBreakpointManager] You must define at least 2 breakpoints.');\n }\n\n const { add, props } = useResize();\n\n // Do nothing if no breakpoint has been defined.\n // @see https://js-toolkit.meta.fr/services/resize.html#breakpoint\n if (!props().breakpoint) {\n throw new Error(`The \\`BreakpointManager\\` class requires breakpoints to be defined.`);\n }\n\n // @ts-ignore\n return class extends BaseClass {\n /**\n * Watch for the document resize to test the breakpoints.\n * @param {HTMLElement} element The component's root element.\n */\n constructor(element) {\n super(element);\n\n if (!instances.has(this)) {\n instances.set(this, mountComponents(this, breakpoints));\n }\n\n add(`BreakpointManager-${this.$id}`, () => {\n testBreakpoints(instances.get(this));\n });\n\n this.instances = instances.get(this);\n\n return this;\n }\n\n /**\n * Override the default $mount method to prevent component's from being\n * mounted when they should not.\n *\n * @return {this}\n */\n $mount() {\n super.$mount();\n\n testBreakpoints(instances.get(this));\n\n return this;\n }\n\n /**\n * Destroy all instances when the main one is destroyed.\n *\n * @return {this}\n */\n $destroy() {\n if (Array.isArray(instances.get(this))) {\n instances.get(this).forEach(([, instance]) => {\n instance.$destroy();\n });\n }\n\n return super.$destroy();\n }\n };\n}\n"],"file":"withBreakpointManager.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/decorators/withBreakpointObserver.js"],"names":["useResize","testBreakpoints","instance","breakpoint","props","activeBreakpoints","inactiveBreakpoints","$options","isInActiveBreakpoint","split","includes","isInInactiveBreakpoint","hasBreakpointConfiguration","Boolean","testConflictingBreakpointConfiguration","name","Error","addToResize","key","add","has","onResize","action","$isMounted","setTimeout","withBreakpointObserver","BaseClass","constructor","element","remove","$id","mutationObserver","MutationObserver","mutation","type","attributeName","startsWith","$mount","observe","$el","attributes","config","options","String"],"mappings":"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","sourcesContent":["import useResize from '../services/resize.js';\n\n/**\n * @typedef {import('../Base').default} Base\n * @typedef {import('../Base').BaseComponent} BaseComponent\n */\n\n/**\n * @typedef {Object} WithBreakpointObserverOptions\n * @property {String} [activeBreakpoints]\n * @property {String} [inactiveBreakpoints]\n */\n\n/**\n * @typedef {Object} WithBreakpointObserverInterface\n * @property {WithBreakpointObserverOptions} $options\n */\n\n/**\n * Test the breakpoins of the given Base instance and return the hook to call.\n *\n * @param {Base & WithBreakpointObserverInterface} instance The component's instance.\n * @return {String} The action to trigger.\n */\nfunction testBreakpoints(instance, breakpoint = useResize().props().breakpoint) {\n const { activeBreakpoints, inactiveBreakpoints } = instance.$options;\n const isInActiveBreakpoint =\n activeBreakpoints && activeBreakpoints.split(' ').includes(breakpoint);\n const isInInactiveBreakpoint =\n inactiveBreakpoints && inactiveBreakpoints.split(' ').includes(breakpoint);\n\n if (\n (activeBreakpoints && isInActiveBreakpoint) ||\n (inactiveBreakpoints && !isInInactiveBreakpoint)\n ) {\n return '$mount';\n }\n\n return '$destroy';\n}\n\n/**\n * Test if the given instance is configured for breakpoints.\n * @param {Base & WithBreakpointObserverInterface} instance A Base class instance.\n * @return {Boolean} True if configured correctly, false otherwise.\n */\nfunction hasBreakpointConfiguration(instance) {\n const { activeBreakpoints, inactiveBreakpoints } = instance.$options;\n return Boolean(activeBreakpoints || inactiveBreakpoints);\n}\n\n/**\n * Test if the given instance has a conflicting configuration for breakpoints.\n * @param {Base & WithBreakpointObserverInterface} instance A Base class instance.\n * @return {void}\n */\nfunction testConflictingBreakpointConfiguration(instance) {\n const { activeBreakpoints, inactiveBreakpoints, name } = instance.$options;\n if (activeBreakpoints && inactiveBreakpoints) {\n throw new Error(\n `[${name}] Incorrect configuration: the \\`activeBreakpoints\\` and \\`inactiveBreakpoints\\` are not compatible.`\n );\n }\n}\n\n/**\n * Add the current instance to the resize service.\n * @param {String} key The key for the resize service callback.\n * @param {Base} instance The instance to observe.\n */\nfunction addToResize(key, instance) {\n testConflictingBreakpointConfiguration(instance);\n const { add, has } = useResize();\n\n if (!has(key)) {\n add(key, function onResize({ breakpoint }) {\n const action = testBreakpoints(instance, breakpoint);\n\n // Always destroy before mounting\n if (action === '$destroy' && instance.$isMounted) {\n instance[action]();\n } else if (action === '$mount' && !instance.$isMounted) {\n setTimeout(() => instance[action](), 0);\n }\n });\n }\n}\n\n/**\n * BreakpointObserver class.\n *\n * @template {BaseComponent} T\n * @param {T} BaseClass The Base class to extend from.\n * @return {T}\n */\nexport default function withBreakpointObserver(BaseClass) {\n // @ts-ignore\n return class extends BaseClass {\n static config = {\n ...(BaseClass.config || {}),\n name: `${BaseClass?.config?.name ?? ''}WithBreakpointObserver`,\n options: {\n ...(BaseClass?.config?.options || {}),\n activeBreakpoints: String,\n inactiveBreakpoints: String,\n },\n };\n\n /**\n * Watch for the document resize to test the breakpoints.\n * @this {Base & WithBreakpointObserverInterface}\n * @param {HTMLElement} element The component's root element.\n */\n constructor(element) {\n super(element);\n\n const { remove, props } = useResize();\n const { name } = this.$options;\n\n // Do nothing if no breakpoint has been defined.\n // @see https://js-toolkit.meta.fr/services/resize.html#breakpoint\n if (!props().breakpoint) {\n throw new Error(\n `[${name}] The \\`BreakpointObserver\\` class requires breakpoints to be defined.`\n );\n }\n\n const key = `BreakpointObserver-${this.$id}`;\n\n // Watch change on the `data-options` attribute to emit the `set:options` event.\n const mutationObserver = new MutationObserver(([mutation]) => {\n if (\n mutation.type === 'attributes' &&\n (mutation.attributeName === 'data-options' ||\n mutation.attributeName.startsWith('data-option-'))\n ) {\n // Stop here silently when no breakpoint configuration given.\n if (!hasBreakpointConfiguration(this)) {\n this.$mount();\n remove(key);\n return;\n }\n\n addToResize(key, this);\n }\n });\n mutationObserver.observe(this.$el, { attributes: true });\n\n // Stop here silently when no breakpoint configuration given.\n if (!hasBreakpointConfiguration(this)) {\n return this;\n }\n\n addToResize(key, this);\n return this;\n }\n\n /**\n * Override the default $mount method to prevent component's from being\n * mounted when they should not.\n * @return {this}\n */\n $mount() {\n // Execute normal behavior when no breakpoint configuration given.\n if (!hasBreakpointConfiguration(this)) {\n return super.$mount();\n }\n\n const action = testBreakpoints(this);\n if (action === '$mount') {\n return super.$mount();\n }\n\n return this;\n }\n };\n}\n"],"file":"withBreakpointObserver.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/decorators/withDrag.js"],"names":["useDrag","withDrag","BaseClass","options","target","$el","constructor","el","$on","otherOptions","boundUseDrag","bind","undefined","call","$services","register","enable","disable","unregister"],"mappings":";;AAAA,OAAOA,OAAP,MAAoB,qBAApB;AAoBA,eAAe,SAASC,QAAT,CACbC,SADa,EAOb;AAAA,MALAC,OAKA,uEALU;AACRC,IAAAA,MAAM,GAAG;AACP,aAAO,KAAKC,GAAZ;AACD;;AAHO,GAKV;AAEA,SAAO,cAAcH,SAAd,CAAwB;AAK7BI,IAAAA,WAAW,CAACC,EAAD,EAAK;AACd,YAAMA,EAAN;AAEA,WAAKC,GAAL,CAAS,SAAT,EAAoB,MAAM;AACxB,YAAM;AAAEJ,UAAAA;AAAF,YAA8BD,OAApC;AAAA,YAAmBM,YAAnB,4BAAoCN,OAApC;;AACA,YAAMO,YAAY,GAAGV,OAAO,CAACW,IAAR,CAAaC,SAAb,EAAwBR,MAAM,CAACS,IAAP,CAAY,IAAZ,CAAxB,EAA2CJ,YAA3C,CAArB;AACA,aAAKK,SAAL,CAAeC,QAAf,CAAwB,SAAxB,EAAmCL,YAAnC;AACA,aAAKI,SAAL,CAAeE,MAAf,CAAsB,SAAtB;AACD,OALD;AAOA,WAAKR,GAAL,CAAS,WAAT,EAAsB,MAAM;AAC1B,aAAKM,SAAL,CAAeG,OAAf,CAAuB,SAAvB;AACA,aAAKH,SAAL,CAAeI,UAAf,CAA0B,SAA1B;AACD,OAHD;AAID;;AAnB4B,GAA/B;AAqBD","sourcesContent":["import useDrag from '../services/drag.js';\n\n/**\n * @typedef {import('../Base').default} Base\n * @typedef {import('../Base').BaseComponent} BaseComponent\n * @typedef {import('../services/drag').DragServiceOptions} DragServiceOptions\n */\n\n/**\n * @typedef {DragServiceOptions & { target: (this:Base) => HTMLElement }} DragDecoratorOptions\n */\n\n/**\n * Add dragging capabilities to a component.\n *\n * @template {BaseComponent} T\n * @param {T} BaseClass\n * @param {DragDecoratorOptions} options\n * @return {T}\n */\nexport default function withDrag(\n BaseClass,\n options = {\n target() {\n return this.$el;\n },\n }\n) {\n // @ts-ignore\n return class extends BaseClass {\n /**\n * Class constructor.\n * @param {HTMLElement} el\n */\n constructor(el) {\n super(el);\n\n this.$on('mounted', () => {\n const { target, ...otherOptions } = options;\n const boundUseDrag = useDrag.bind(undefined, target.call(this), otherOptions);\n this.$services.register('dragged', boundUseDrag);\n this.$services.enable('dragged');\n });\n\n this.$on('destroyed', () => {\n this.$services.disable('dragged');\n this.$services.unregister('dragged');\n });\n }\n };\n}\n"],"file":"withDrag.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/decorators/withExtraConfig.js"],"names":["merge","withExtraConfig","BaseClass","config","options","newConfig","name"],"mappings":";AAAA,OAAOA,KAAP,MAAkB,WAAlB;AAiBA,eAAe,SAASC,eAAT,CAAyBC,SAAzB,EAAoCC,MAApC,EAA0D;AAAA;;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AACvE,MAAMC,SAAS,GAAGL,KAAK,CAACE,SAAS,CAACC,MAAX,EAAmBA,MAAnB,EAA2BC,OAA3B,CAAvB;;AAEA,MAAIC,SAAS,CAACC,IAAV,KAAmBJ,SAAS,CAACC,MAAV,CAAiBG,IAAxC,EAA8C;AAC5CD,IAAAA,SAAS,CAACC,IAAV,aAAoBJ,SAAS,CAACC,MAAV,CAAiBG,IAArC;AACD;;AAGD,0BAAO,cAAcJ,SAAd,CAAwB,EAA/B,oCAKkBG,SALlB;AAOD","sourcesContent":["import merge from 'deepmerge';\n\n/**\n * @typedef {import('deepmerge').Options} DeepmergeOptions\n * @typedef {import('../Base').BaseConfig} BaseConfig\n * @typedef {import('../Base').BaseComponent} BaseComponent\n */\n\n/**\n * Extends the configuration of an existing class.\n *\n * @template {BaseComponent} T\n * @param {T} BaseClass The Base class to extend.\n * @param {Partial<BaseConfig>} config Extra configuration to merge.\n * @param {DeepmergeOptions} options Options for the `deepmerge` function. {@link https://github.com/TehShrike/deepmerge#options}\n * @return {T}\n */\nexport default function withExtraConfig(BaseClass, config, options = {}) {\n const newConfig = merge(BaseClass.config, config, options);\n\n if (newConfig.name === BaseClass.config.name) {\n newConfig.name = `${BaseClass.config.name}WithExtraConfig`;\n }\n\n // @ts-ignore\n return class extends BaseClass {\n /**\n * Class config.\n * @type {BaseConfig}\n */\n static config = newConfig;\n };\n}\n"],"file":"withExtraConfig.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/decorators/withIntersectionObserver.js"],"names":["createArrayOfNumber","length","Array","map","val","index","withIntersectionObserver","BaseClass","defaultOptions","threshold","__excludeFromAutoBind","constructor","element","intersected","Error","$observer","IntersectionObserver","entries","__debug","$emit","$options","intersectionObserver","$isMounted","observe","$el","$on","unobserve","config","name","options","Object"],"mappings":";;;;;;AAsBA,SAASA,mBAAT,CAA6BC,MAA7B,EAAqC;AACnC,SAAO,CAAC,GAAG,IAAIC,KAAJ,CAAUD,MAAM,GAAG,CAAnB,CAAJ,EAA2BE,GAA3B,CAA+B,CAACC,GAAD,EAAMC,KAAN,KAAgBA,KAAK,GAAGJ,MAAvD,CAAP;AACD;;AAUD,eAAe,SAASK,wBAAT,CACbC,SADa,EAGb;AAAA;;AAAA,MADAC,cACA,uEADiB;AAAEC,IAAAA,SAAS,EAAET,mBAAmB,CAAC,GAAD;AAAhC,GACjB;AAEA,0BAAO,cAAcO,SAAd,CAAwB;AAIJ,QAArBG,qBAAqB,GAAG;AAC1B,aAAO,CAAC,IAAI,MAAMA,qBAAN,IAA+B,EAAnC,CAAD,EAAyC,aAAzC,CAAP;AACD;;AAiBDC,IAAAA,WAAW,CAACC,OAAD,EAAU;AACnB,YAAMA,OAAN;;AAEA,UAAI,CAAC,KAAKC,WAAN,IAAqB,OAAO,KAAKA,WAAZ,KAA4B,UAArD,EAAiE;AAC/D,cAAM,IAAIC,KAAJ,CAAU,sEAAV,CAAN;AACD;;AAED,WAAKC,SAAL,GAAiB,IAAIC,oBAAJ,CACdC,OAAD,IAAa;AACX,aAAKC,OAAL,CAAa,aAAb,EAA4BD,OAA5B;;AACA,aAAKE,KAAL,CAAW,aAAX,EAA0BF,OAA1B;AACA,aAAKJ,WAAL,CAAiBI,OAAjB;AACD,OALc,kCAMVT,cANU,GAMU,KAAKY,QAAL,CAAcC,oBAAd,IAAsC,EANhD,EAAjB;;AASA,UAAI,KAAKC,UAAT,EAAqB;AACnB,aAAKP,SAAL,CAAeQ,OAAf,CAAuB,KAAKC,GAA5B;AACD;;AAED,WAAKC,GAAL,CAAS,SAAT,EAAoB,MAAM;AACxB,aAAKV,SAAL,CAAeQ,OAAf,CAAuB,KAAKC,GAA5B;AACD,OAFD;AAIA,WAAKC,GAAL,CAAS,WAAT,EAAsB,MAAM;AAC1B,aAAKV,SAAL,CAAeW,SAAf,CAAyB,KAAKF,GAA9B;AACD,OAFD;AAIA,aAAO,IAAP;AACD;;AApD4B,GAA/B,oEASQjB,SAAS,CAACoB,MAAV,IAAoB,EAT5B;AAUIC,IAAAA,IAAI,qCAAKrB,SAAL,aAAKA,SAAL,4CAAKA,SAAS,CAAEoB,MAAhB,sDAAK,kBAAmBC,IAAxB,yEAAgC,EAAhC,6BAVR;AAWIC,IAAAA,OAAO,kCACD,CAAAtB,SAAS,SAAT,IAAAA,SAAS,WAAT,kCAAAA,SAAS,CAAEoB,MAAX,0EAAmBE,OAAnB,KAA8B,EAD7B;AAELR,MAAAA,oBAAoB,EAAES;AAFjB;AAXX;AAsDD","sourcesContent":["/**\n * @typedef {import('../Base').default} Base\n * @typedef {import('../Base').BaseComponent} BaseComponent\n */\n\n/**\n * @typedef {Object} WithIntersectionObserverOptions\n * @property {Object} intersectionObserver\n */\n\n/**\n * @typedef {Object} WithIntersectionObserverInterface\n * @property {WithIntersectionObserverOptions} $options\n * @property {IntersectionObserver} $observer\n * @property {(entries: IntersectionObserverEntry[]) => void} intersected\n */\n\n/**\n * Create an array of number between 0 and 1 from the given length.\n * @param {Number} length The length of the array.\n * @return {Array} An array of number.\n */\nfunction createArrayOfNumber(length) {\n return [...new Array(length + 1)].map((val, index) => index / length);\n}\n\n/**\n * IntersectionObserver decoration.\n *\n * @template {BaseComponent} T\n * @param {T} BaseClass The Base class to extend.\n * @param {Object} [defaultOptions] The options for the IntersectionObserver instance.\n * @return {T & { new: (element:HTMLElement) => { $observer: IntersectionObserver }}}\n */\nexport default function withIntersectionObserver(\n BaseClass,\n defaultOptions = { threshold: createArrayOfNumber(100) }\n) {\n // @ts-ignore\n return class extends BaseClass {\n /**\n * Add the `intersected` method to the list of method to exclude from the `autoBind` call.\n */\n get __excludeFromAutoBind() {\n return [...(super.__excludeFromAutoBind || []), 'intersected'];\n }\n\n static config = {\n ...(BaseClass.config || {}),\n name: `${BaseClass?.config?.name ?? ''}WithIntersectionObserver`,\n options: {\n ...(BaseClass?.config?.options || {}),\n intersectionObserver: Object,\n },\n };\n\n /**\n * Create an observer when the class in instantiated.\n *\n * @this {Base & WithIntersectionObserverInterface}\n * @param {HTMLElement} element The component's root element.\n */\n constructor(element) {\n super(element);\n\n if (!this.intersected || typeof this.intersected !== 'function') {\n throw new Error('[withIntersectionObserver] The `intersected` method must be defined.');\n }\n\n this.$observer = new IntersectionObserver(\n (entries) => {\n this.__debug('intersected', entries);\n this.$emit('intersected', entries);\n this.intersected(entries);\n },\n { ...defaultOptions, ...(this.$options.intersectionObserver || {}) }\n );\n\n if (this.$isMounted) {\n this.$observer.observe(this.$el);\n }\n\n this.$on('mounted', () => {\n this.$observer.observe(this.$el);\n });\n\n this.$on('destroyed', () => {\n this.$observer.unobserve(this.$el);\n });\n\n return this;\n }\n };\n}\n"],"file":"withIntersectionObserver.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/decorators/withMountWhenInView.js"],"names":["withMountWhenInView","BaseClass","defaultOptions","threshold","constructor","element","IntersectionObserver","entries","isVisible","reduce","acc","entry","isIntersecting","method","$options","intersectionObserver","observe","$el","$on","disconnect","$mount","config","name","options","Object"],"mappings":";;;;;;;;AAyBA,eAAe,SAASA,mBAAT,CAA6BC,SAA7B,EAAgF;AAAA;;AAAA,MAAxCC,cAAwC,uEAAvB;AAAEC,IAAAA,SAAS,EAAE,CAAC,CAAD,EAAI,CAAJ;AAAb,GAAuB;AAE7F,kFAAO,cAAcF,SAAd,CAAwB;AA+B7BG,IAAAA,WAAW,CAACC,OAAD,EAAU;AACnB,YAAMA,OAAN;;AADmB;AAAA;AAAA,eAbR;AAaQ;;AAAA;AAAA;AAAA;AAAA;;AAGnB,6CAAiB,IAAIC,oBAAJ,CACdC,OAAD,IAAa;AACX,YAAMC,SAAS,GAAGD,OAAO,CAACE,MAAR,CAAe,CAACC,GAAD,EAAMC,KAAN,KAAgBD,GAAG,IAAIC,KAAK,CAACC,cAA5C,EAA4D,KAA5D,CAAlB;;AACA,YAAI,4CAAoBJ,SAAxB,EAAmC;AACjC,kDAAkBA,SAAlB;;AAEA,cAAMK,MAAM,GAAGL,SAAS,GAAG,QAAH,GAAc,UAAtC;AACA,eAAKK,MAAL;AACD;AACF,OATc,kCAUVX,cAVU,GAUS,KAAKY,QAAL,CAAcC,oBAVvB,EAAjB;;AAaA,6CAAeC,OAAf,CAAuB,KAAKC,GAA5B;;AAEA,WAAKC,GAAL,CAAS,YAAT,EAAuB,MAAM;AAC3B,+CAAeC,UAAf;AACD,OAFD;AAIA,aAAO,IAAP;AACD;;AAODC,IAAAA,MAAM,GAAG;AACP,gCAAI,IAAJ,eAAqB;AACnB,cAAMA,MAAN;AACD;;AAED,aAAO,IAAP;AACD;;AAnE4B,GAA/B,qEAMQnB,SAAS,CAACoB,MAAV,IAAoB,EAN5B;AAOIC,IAAAA,IAAI,qCAAKrB,SAAL,aAAKA,SAAL,4CAAKA,SAAS,CAAEoB,MAAhB,sDAAK,kBAAmBC,IAAxB,yEAAgC,EAAhC,wBAPR;AAQIC,IAAAA,OAAO,kCACD,CAAAtB,SAAS,SAAT,IAAAA,SAAS,WAAT,kCAAAA,SAAS,CAAEoB,MAAX,0EAAmBE,OAAnB,KAA8B,EAD7B;AAELR,MAAAA,oBAAoB,EAAES;AAFjB;AARX;AAqED","sourcesContent":["/**\n * @typedef {import('../Base').default} Base\n * @typedef {import('../Base').BaseOptions} BaseOptions\n * @typedef {import('../Base').BaseComponent} BaseComponent\n */\n\n/**\n * @typedef {Object} WithMountWhenInViewOptions\n * @property {Object} intersectionObserver\n */\n\n/**\n * @typedef {Object} WithMountWhenInViewInterface\n * @property {() => void} terminated\n * @property {WithMountWhenInViewOptions & BaseOptions} $options\n */\n\n/**\n * IntersectionObserver decoration.\n *\n * @template {BaseComponent} T\n * @param {T} BaseClass The Base class to extend.\n * @param {Object} [defaultOptions] The options for the IntersectionObserver instance.\n * @return {T}\n */\nexport default function withMountWhenInView(BaseClass, defaultOptions = { threshold: [0, 1] }) {\n // @ts-ignore\n return class extends BaseClass {\n /**\n * Class config.\n * @type {Object}\n */\n static config = {\n ...(BaseClass.config || {}),\n name: `${BaseClass?.config?.name ?? ''}WithMountWhenInView`,\n options: {\n ...(BaseClass?.config?.options || {}),\n intersectionObserver: Object,\n },\n };\n\n /**\n * Is the component visible?\n * @type {Boolean}\n */\n #isVisible = false;\n\n /**\n * The component's observer.\n * @type {IntersectionObserver}\n */\n #observer;\n\n /**\n * Create an observer when the class in instantiated.\n *\n * @param {HTMLElement} element The component's root element.\n */\n constructor(element) {\n super(element);\n\n this.#observer = new IntersectionObserver(\n (entries) => {\n const isVisible = entries.reduce((acc, entry) => acc || entry.isIntersecting, false);\n if (this.#isVisible !== isVisible) {\n this.#isVisible = isVisible;\n\n const method = isVisible ? '$mount' : '$destroy';\n this[method]();\n }\n },\n { ...defaultOptions, ...this.$options.intersectionObserver }\n );\n\n this.#observer.observe(this.$el);\n\n this.$on('terminated', () => {\n this.#observer.disconnect();\n });\n\n return this;\n }\n\n /**\n * Override the mounting of the component.\n *\n * @return {this}\n */\n $mount() {\n if (this.#isVisible) {\n super.$mount();\n }\n\n return this;\n }\n };\n}\n"],"file":"withMountWhenInView.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/helpers/createApp.js"],"names":["createApp","App","rootElement","isLoaded","document","readyState","app","addEventListener","$mount","useApp","Promise","resolve","setTimeout"],"mappings":"AAoCA,eAAe,SAASA,SAAT,CAAmBC,GAAnB,EAAwBC,WAAxB,EAAqC;AAClD,MAAIC,QAAQ,GAAGC,QAAQ,CAACC,UAAT,KAAwB,UAAvC;AACA,MAAIC,GAAJ;;AAEA,MAAI,CAACH,QAAL,EAAe;AACbC,IAAAA,QAAQ,CAACG,gBAAT,CAA0B,kBAA1B,EAA8C,MAAM;AAClD,UAAIH,QAAQ,CAACC,UAAT,KAAwB,UAA5B,EAAwC;AACtCC,QAAAA,GAAG,GAAG,IAAIL,GAAJ,CAAQC,WAAR,EAAqBM,MAArB,EAAN;AACAL,QAAAA,QAAQ,GAAG,IAAX;AACD;AACF,KALD;AAMD,GAPD,MAOO;AACLG,IAAAA,GAAG,GAAG,IAAIL,GAAJ,CAAQC,WAAR,EAAqBM,MAArB,EAAN;AACD;;AAED,SAAO,SAASC,MAAT,GAAkB;AACvB,QAAIN,QAAJ,EAAc;AACZ,aAAOO,OAAO,CAACC,OAAR,CAAgBL,GAAhB,CAAP;AACD;;AAED,WAAO,IAAII,OAAJ,CAAaC,OAAD,IAAa;AAC9BP,MAAAA,QAAQ,CAACG,gBAAT,CAA0B,kBAA1B,EAA8C,MAAM;AAClD,YAAIH,QAAQ,CAACC,UAAT,KAAwB,UAA5B,EAAwC;AACtCO,UAAAA,UAAU,CAAC,MAAMD,OAAO,CAACL,GAAD,CAAd,EAAqB,CAArB,CAAV;AACD;AACF,OAJD;AAKD,KANM,CAAP;AAOD,GAZD;AAaD","sourcesContent":["/**\n * @typedef {import('../Base/index.js').BaseComponent} BaseComponent\n */\n\n/**\n * Instantiate and mount the given component on the given root element when the page has been loaded\n * and return a function to use the app instance when it is ready.\n *\n * @usage\n * ```js\n * // app.js\n * import Base, { createApp } from '@studiometa/js-toolkit';\n *\n * class App extends Base {\n * static config = {\n * name: 'App',\n * }\n * }\n *\n * export default createApp(App, document.body);\n * ```\n * ```js\n * // other.js\n * import useApp from './app.js';\n *\n * const app = await useApp();\n * console.log(app.$options.name); // 'App'\n * ```\n *\n * @template {BaseComponent} T\n * @param {T} App\n * @param {HTMLElement} rootElement\n *\n * @return {() => Promise<InstanceType<T>>}\n *\n */\nexport default function createApp(App, rootElement) {\n let isLoaded = document.readyState === 'complete';\n let app;\n\n if (!isLoaded) {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n app = new App(rootElement).$mount();\n isLoaded = true;\n }\n });\n } else {\n app = new App(rootElement).$mount();\n }\n\n return function useApp() {\n if (isLoaded) {\n return Promise.resolve(app);\n }\n\n return new Promise((resolve) => {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n setTimeout(() => resolve(app), 0);\n }\n });\n });\n };\n}\n"],"file":"createApp.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/helpers/importOnInteraction.js"],"names":["getTargetElements","importOnInteraction","fn","nameOrSelectorOrElement","events","parent","normalizedEvents","ResolvedClass","resolver","resolve","then","module","default","Promise","elements","$el","eventListenerOptions","capture","passive","once","handler","forEach","element","event","addEventListener"],"mappings":"AAAA,SAASA,iBAAT,QAAkC,YAAlC;AAuBA,eAAe,SAASC,mBAAT,CAA6BC,EAA7B,EAAiCC,uBAAjC,EAA0DC,MAA1D,EAAkEC,MAAlE,EAA0E;AACvF,MAAMC,gBAAgB,GAAG,OAAOF,MAAP,KAAkB,QAAlB,GAA6B,CAACA,MAAD,CAA7B,GAAwCA,MAAjE;AAEA,MAAIG,aAAJ;;AAEA,MAAMC,QAAQ,GAAIC,OAAD,IAAa;AAC5BP,IAAAA,EAAE,GAAGQ,IAAL,CAAWC,MAAD,IAAY;AACpBJ,MAAAA,aAAa,GAAG,aAAaI,MAAb,GAAsBA,MAAM,CAACC,OAA7B,GAAuCD,MAAvD;AACAF,MAAAA,OAAO,CAACF,aAAD,CAAP;AACD,KAHD;AAID,GALD;;AAOA,SAAO,IAAIM,OAAJ,CAAaJ,OAAD,IAAa;AAC9B,QAAMK,QAAQ,GAAGd,iBAAiB,CAACG,uBAAD,EAA0BE,MAA1B,aAA0BA,MAA1B,uBAA0BA,MAAM,CAAEU,GAAlC,CAAlC;AACA,QAAMC,oBAAoB,GAAG;AAC3BC,MAAAA,OAAO,EAAE,IADkB;AAE3BC,MAAAA,OAAO,EAAE,IAFkB;AAG3BC,MAAAA,IAAI,EAAE;AAHqB,KAA7B;;AAKA,QAAMC,OAAO,GAAG,MAAM;AACpBZ,MAAAA,QAAQ,CAACC,OAAD,CAAR;AACD,KAFD;;AAIAK,IAAAA,QAAQ,CAACO,OAAT,CAAkBC,OAAD,IAAa;AAC5BhB,MAAAA,gBAAgB,CAACe,OAAjB,CAA0BE,KAAD,IAAW;AAClCD,QAAAA,OAAO,CAACE,gBAAR,CAAyBD,KAAzB,EAAgCH,OAAhC,EAAyCJ,oBAAzC;AACD,OAFD;AAGD,KAJD;AAKD,GAhBM,CAAP;AAiBD","sourcesContent":["import { getTargetElements } from './utils.js';\n\n/**\n * @typedef {import('../Base/index.js').BaseComponent} BaseComponent\n * @typedef {import('../Base/index.js').default} Base\n */\n\n/**\n * Import a component on an interaction.\n *\n * @template {BaseComponent} T\n *\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {string|HTMLElement|HTMLElement[]} nameOrSelectorOrElement\n * The name or selector for the component.\n * @param {string|string[]} events\n * The events to listen to to trigger the import.\n * @param {Base=} [parent]\n * The parent component.\n *\n * @return {Promise<T>}\n */\nexport default function importOnInteraction(fn, nameOrSelectorOrElement, events, parent) {\n const normalizedEvents = typeof events === 'string' ? [events] : events;\n\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);\n const eventListenerOptions = {\n capture: true,\n passive: true,\n once: true,\n };\n const handler = () => {\n resolver(resolve);\n };\n\n elements.forEach((element) => {\n normalizedEvents.forEach((event) => {\n element.addEventListener(event, handler, eventListenerOptions);\n });\n });\n });\n}\n"],"file":"importOnInteraction.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/helpers/importWhenIdle.js"],"names":["importWhenIdle","fn","options","ResolvedClass","resolver","resolve","then","module","default","Promise","timeout","window","setTimeout","requestIdleCallback"],"mappings":"AAiBA,eAAe,SAASA,cAAT,CAAwBC,EAAxB,EAA4BC,OAA5B,EAAqC;AAClD,MAAIC,aAAJ;;AAEA,MAAMC,QAAQ,GAAIC,OAAD,IAAa;AAC5BJ,IAAAA,EAAE,GAAGK,IAAL,CAAWC,MAAD,IAAY;AACpBJ,MAAAA,aAAa,GAAG,aAAaI,MAAb,GAAsBA,MAAM,CAACC,OAA7B,GAAuCD,MAAvD;AACAF,MAAAA,OAAO,CAACF,aAAD,CAAP;AACD,KAHD;AAID,GALD;;AAOA,SAAO,IAAIM,OAAJ,CAAaJ,OAAD,IAAa;AAAA;;AAC9B,QAAMK,OAAO,uBAAGR,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEQ,OAAZ,+DAAuB,CAApC;;AAEA,QAAI,EAAE,yBAAyBC,MAA3B,CAAJ,EAAwC;AACtCC,MAAAA,UAAU,CAAC,MAAM;AACfR,QAAAA,QAAQ,CAACC,OAAD,CAAR;AACD,OAFS,EAEPK,OAFO,CAAV;AAGD,KAJD,MAIO;AACLC,MAAAA,MAAM,CAACE,mBAAP,CACE,MAAM;AACJD,QAAAA,UAAU,CAAC,MAAM;AACfR,UAAAA,QAAQ,CAACC,OAAD,CAAR;AACD,SAFS,EAEP,CAFO,CAAV;AAGD,OALH,EAME;AAAEK,QAAAA,OAAO,EAAER,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEQ;AAApB,OANF;AAQD;AACF,GAjBM,CAAP;AAkBD","sourcesContent":["/**\n * @typedef {import('../Base/index.js').BaseComponent} BaseComponent\n * @typedef {{ timeout?: number }} ImportWhenIdleOptions\n */\n\n/**\n * Import a component when user is idle.\n *\n * @template {BaseComponent} T\n *\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {ImportWhenIdleOptions=} [options]\n * The time to wait before triggering the callback if never idle.\n *\n * @return {Promise<T>}\n */\nexport default function importWhenIdle(fn, options) {\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n const timeout = options?.timeout ?? 1;\n\n if (!('requestIdleCallback' in window)) {\n setTimeout(() => {\n resolver(resolve);\n }, timeout);\n } else {\n window.requestIdleCallback(\n () => {\n setTimeout(() => {\n resolver(resolve);\n }, 0);\n },\n { timeout: options?.timeout }\n );\n }\n });\n}\n"],"file":"importWhenIdle.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/helpers/importWhenVisible.js"],"names":["getTargetElements","importWhenVisible","fn","nameOrSelectorOrElement","parent","observerOptions","ResolvedClass","resolver","resolve","cb","then","module","default","Promise","observer","IntersectionObserver","entries","someEntriesAreVisible","some","entry","isIntersecting","setTimeout","disconnect","elements","$el","forEach","element","observe"],"mappings":"AAAA,SAASA,iBAAT,QAAkC,YAAlC;AAuBA,eAAe,SAASC,iBAAT,CACbC,EADa,EAEbC,uBAFa,EAGbC,MAHa,EAKb;AAAA,MADAC,eACA,uEADkB,EAClB;AACA,MAAIC,aAAJ;;AAEA,MAAMC,QAAQ,GAAG,CAACC,OAAD,EAAUC,EAAV,KAAiB;AAChCP,IAAAA,EAAE,GAAGQ,IAAL,CAAWC,MAAD,IAAY;AACpBL,MAAAA,aAAa,GAAG,aAAaK,MAAb,GAAsBA,MAAM,CAACC,OAA7B,GAAuCD,MAAvD;AACAH,MAAAA,OAAO,CAACF,aAAD,CAAP;;AAEA,UAAI,OAAOG,EAAP,KAAc,UAAlB,EAA8B;AAC5BA,QAAAA,EAAE;AACH;AACF,KAPD;AAQD,GATD;;AAWA,SAAO,IAAII,OAAJ,CAAaL,OAAD,IAAa;AAC9B,QAAMM,QAAQ,GAAG,IAAIC,oBAAJ,CAA0BC,OAAD,IAAa;AACrD,UAAMC,qBAAqB,GAAGD,OAAO,CAACE,IAAR,CAAcC,KAAD,IAAWA,KAAK,CAACC,cAA9B,CAA9B;;AACA,UAAIH,qBAAJ,EAA2B;AACzBI,QAAAA,UAAU,CAAC,MAAM;AACfd,UAAAA,QAAQ,CAACC,OAAD,EAAU,MAAMM,QAAQ,CAACQ,UAAT,EAAhB,CAAR;AACD,SAFS,EAEP,CAFO,CAAV;AAGD;AACF,KAPgB,EAOdjB,eAPc,CAAjB;AASA,QAAMkB,QAAQ,GAAGvB,iBAAiB,CAACG,uBAAD,EAA0BC,MAA1B,aAA0BA,MAA1B,uBAA0BA,MAAM,CAAEoB,GAAlC,CAAlC;AACAD,IAAAA,QAAQ,CAACE,OAAT,CAAkBC,OAAD,IAAaZ,QAAQ,CAACa,OAAT,CAAiBD,OAAjB,CAA9B;AACD,GAZM,CAAP;AAaD","sourcesContent":["import { getTargetElements } from './utils.js';\n\n/**\n * @typedef {import('../Base/index.js').default} Base\n * @typedef {import('../Base/index.js').BaseComponent} BaseComponent\n */\n\n/**\n * Import a component when it is visible.\n *\n * @template {BaseComponent} T\n *\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {string|HTMLElement|HTMLElement[]} nameOrSelectorOrElement\n * The name or selector for the component.\n * @param {Base=} [parent]\n * The parent component.\n * @param {IntersectionObserverInit=} [observerOptions]\n * Options for the `IntersectionObserver` instance.\n *\n * @return {Promise<T>}\n */\nexport default function importWhenVisible(\n fn,\n nameOrSelectorOrElement,\n parent,\n observerOptions = {}\n) {\n let ResolvedClass;\n\n const resolver = (resolve, cb) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n\n if (typeof cb === 'function') {\n cb();\n }\n });\n };\n\n return new Promise((resolve) => {\n const observer = new IntersectionObserver((entries) => {\n const someEntriesAreVisible = entries.some((entry) => entry.isIntersecting);\n if (someEntriesAreVisible) {\n setTimeout(() => {\n resolver(resolve, () => observer.disconnect());\n }, 0);\n }\n }, observerOptions);\n\n const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);\n elements.forEach((element) => observer.observe(element));\n });\n}\n"],"file":"importWhenVisible.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/helpers/index.js"],"names":["createApp","importOnInteraction","importWhenIdle","importWhenVisible"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,gBAAtB;AACA,OAAOC,mBAAP,MAAgC,0BAAhC;AACA,OAAOC,cAAP,MAA2B,qBAA3B;AACA,OAAOC,iBAAP,MAA8B,wBAA9B;AAEA,SACEH,SADF,EAEEC,mBAFF,EAGEC,cAHF,EAIEC,iBAJF","sourcesContent":["import createApp from './createApp.js';\nimport importOnInteraction from './importOnInteraction.js';\nimport importWhenIdle from './importWhenIdle.js';\nimport importWhenVisible from './importWhenVisible.js';\n\nexport {\n createApp,\n importOnInteraction,\n importWhenIdle,\n importWhenVisible,\n};\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/helpers/utils.js"],"names":["getComponentElements","getTargetElements","nameOrSelectorOrElement","context","Array","isArray"],"mappings":"AACA,SAASA,oBAAT,QAAqC,kBAArC;AAYA,OAAO,SAASC,iBAAT,CAA2BC,uBAA3B,EAAoDC,OAApD,EAA6D;AAClE,MAAI,OAAOD,uBAAP,KAAmC,QAAvC,EAAiD;AAC/C,WAAOF,oBAAoB,CAACE,uBAAD,EAA0BC,OAA1B,CAA3B;AACD;;AAED,MAAI,CAACC,KAAK,CAACC,OAAN,CAAcH,uBAAd,CAAL,EAA6C;AAC3C,WAAO,CAACA,uBAAD,CAAP;AACD;;AAED,SAAOA,uBAAP;AACD","sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport { getComponentElements } from '../Base/utils.js';\n\n/**\n * Get the target elements for the lazy import helper functions.\n *\n * @param {string|HTMLElement|HTMLElement[]} nameOrSelectorOrElement\n * The original selector or element, or list of elements.\n * @param {HTMLElement=} [context]\n * The optional context to use to query for elements.\n *\n * @return {HTMLElement[]} A normalized list of elements.\n */\nexport function getTargetElements(nameOrSelectorOrElement, context) {\n if (typeof nameOrSelectorOrElement === 'string') {\n return getComponentElements(nameOrSelectorOrElement, context);\n }\n\n if (!Array.isArray(nameOrSelectorOrElement)) {\n return [nameOrSelectorOrElement];\n }\n\n return nameOrSelectorOrElement;\n}\n"],"file":"utils.js"}
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../packages/js-toolkit/index.js"],"names":["Base","withDrag","withBreakpointManager","withBreakpointObserver","withExtraConfig","withIntersectionObserver","withMountWhenInView","createApp","importOnInteraction","importWhenIdle","importWhenVisible","useDrag","useKey","useLoad","usePointer","useRaf","useResize","useScroll"],"mappings":"AAAA,OAAOA,IAAP,MAAiB,iBAAjB;AACA,SACEC,QADF,EAEEC,qBAFF,EAGEC,sBAHF,EAIEC,eAJF,EAKEC,wBALF,EAMEC,mBANF,QAOO,uBAPP;AAQA,SACEC,SADF,EAEEC,mBAFF,EAGEC,cAHF,EAIEC,iBAJF,QAKO,oBALP;AAMA,SACEC,OADF,EAEEC,MAFF,EAGEC,OAHF,EAIEC,UAJF,EAKEC,MALF,EAMEC,SANF,EAOEC,SAPF,QAQO,qBARP;AAUA,SACEjB,IADF,EAEEO,SAFF,EAGEC,mBAHF,EAIEC,cAJF,EAKEC,iBALF,EAMEC,OANF,EAOEC,MAPF,EAQEC,OARF,EASEC,UATF,EAUEC,MAVF,EAWEC,SAXF,EAYEC,SAZF,EAaEhB,QAbF,EAcEC,qBAdF,EAeEC,sBAfF,EAgBEC,eAhBF,EAiBEC,wBAjBF,EAkBEC,mBAlBF","sourcesContent":["import Base from './Base/index.js';\nimport {\n withDrag,\n withBreakpointManager,\n withBreakpointObserver,\n withExtraConfig,\n withIntersectionObserver,\n withMountWhenInView,\n} from './decorators/index.js';\nimport {\n createApp,\n importOnInteraction,\n importWhenIdle,\n importWhenVisible,\n} from './helpers/index.js';\nimport {\n useDrag,\n useKey,\n useLoad,\n usePointer,\n useRaf,\n useResize,\n useScroll,\n} from './services/index.js';\n\nexport {\n Base,\n createApp,\n importOnInteraction,\n importWhenIdle,\n importWhenVisible,\n useDrag,\n useKey,\n useLoad,\n usePointer,\n useRaf,\n useResize,\n useScroll,\n withDrag,\n withBreakpointManager,\n withBreakpointObserver,\n withExtraConfig,\n withIntersectionObserver,\n withMountWhenInView,\n};\n"],"file":"index.js"}