@studiometa/js-toolkit 2.5.0 → 2.6.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 (401) hide show
  1. package/Base/index.cjs +56 -62
  2. package/Base/index.cjs.map +7 -0
  3. package/Base/index.d.ts +5 -5
  4. package/Base/index.js +63 -69
  5. package/Base/index.js.map +7 -0
  6. package/Base/managers/AbstractManager.cjs +8 -12
  7. package/Base/managers/AbstractManager.cjs.map +7 -0
  8. package/Base/managers/AbstractManager.d.ts +11 -21
  9. package/Base/managers/AbstractManager.js +7 -12
  10. package/Base/managers/AbstractManager.js.map +7 -0
  11. package/Base/managers/ChildrenManager.cjs +6 -20
  12. package/Base/managers/ChildrenManager.cjs.map +7 -0
  13. package/Base/managers/ChildrenManager.d.ts +2 -2
  14. package/Base/managers/ChildrenManager.js +5 -14
  15. package/Base/managers/ChildrenManager.js.map +7 -0
  16. package/Base/managers/EventsManager.cjs +60 -64
  17. package/Base/managers/EventsManager.cjs.map +7 -0
  18. package/Base/managers/EventsManager.d.ts +2 -2
  19. package/Base/managers/EventsManager.js +59 -64
  20. package/Base/managers/EventsManager.js.map +7 -0
  21. package/Base/managers/OptionsManager.cjs +14 -22
  22. package/Base/managers/OptionsManager.cjs.map +7 -0
  23. package/Base/managers/OptionsManager.d.ts +42 -55
  24. package/Base/managers/OptionsManager.js +12 -21
  25. package/Base/managers/OptionsManager.js.map +7 -0
  26. package/Base/managers/RefsManager.cjs +11 -16
  27. package/Base/managers/RefsManager.cjs.map +7 -0
  28. package/Base/managers/RefsManager.d.ts +3 -11
  29. package/Base/managers/RefsManager.js +9 -8
  30. package/Base/managers/RefsManager.js.map +7 -0
  31. package/Base/managers/ResponsiveOptionsManager.cjs +4 -9
  32. package/Base/managers/ResponsiveOptionsManager.cjs.map +7 -0
  33. package/Base/managers/ResponsiveOptionsManager.d.ts +8 -4
  34. package/Base/managers/ResponsiveOptionsManager.js +3 -2
  35. package/Base/managers/ResponsiveOptionsManager.js.map +7 -0
  36. package/Base/managers/ServicesManager.cjs +21 -45
  37. package/Base/managers/ServicesManager.cjs.map +7 -0
  38. package/Base/managers/ServicesManager.d.ts +33 -58
  39. package/Base/managers/ServicesManager.js +13 -32
  40. package/Base/managers/ServicesManager.js.map +7 -0
  41. package/Base/types.cjs +1 -0
  42. package/Base/types.cjs.map +7 -0
  43. package/Base/types.js +1 -0
  44. package/Base/types.js.map +7 -0
  45. package/Base/utils.cjs +1 -0
  46. package/Base/utils.cjs.map +7 -0
  47. package/Base/utils.js +1 -0
  48. package/Base/utils.js.map +7 -0
  49. package/decorators/index.cjs +1 -0
  50. package/decorators/index.cjs.map +7 -0
  51. package/decorators/index.js +1 -0
  52. package/decorators/index.js.map +7 -0
  53. package/decorators/withBreakpointManager.cjs +1 -0
  54. package/decorators/withBreakpointManager.cjs.map +7 -0
  55. package/decorators/withBreakpointManager.js +1 -0
  56. package/decorators/withBreakpointManager.js.map +7 -0
  57. package/decorators/withBreakpointObserver.cjs +10 -15
  58. package/decorators/withBreakpointObserver.cjs.map +7 -0
  59. package/decorators/withBreakpointObserver.js +10 -16
  60. package/decorators/withBreakpointObserver.js.map +7 -0
  61. package/decorators/withDrag.cjs +5 -9
  62. package/decorators/withDrag.cjs.map +7 -0
  63. package/decorators/withDrag.js +5 -10
  64. package/decorators/withDrag.js.map +7 -0
  65. package/decorators/withExtraConfig.cjs +2 -6
  66. package/decorators/withExtraConfig.cjs.map +7 -0
  67. package/decorators/withExtraConfig.js +2 -7
  68. package/decorators/withExtraConfig.js.map +7 -0
  69. package/decorators/withFreezedOptions.cjs +2 -9
  70. package/decorators/withFreezedOptions.cjs.map +7 -0
  71. package/decorators/withFreezedOptions.js +2 -10
  72. package/decorators/withFreezedOptions.js.map +7 -0
  73. package/decorators/withIntersectionObserver.cjs +11 -16
  74. package/decorators/withIntersectionObserver.cjs.map +7 -0
  75. package/decorators/withIntersectionObserver.js +11 -17
  76. package/decorators/withIntersectionObserver.js.map +7 -0
  77. package/decorators/withMountWhenInView.cjs +11 -16
  78. package/decorators/withMountWhenInView.cjs.map +7 -0
  79. package/decorators/withMountWhenInView.js +11 -17
  80. package/decorators/withMountWhenInView.js.map +7 -0
  81. package/decorators/withResponsiveOptions.cjs +3 -8
  82. package/decorators/withResponsiveOptions.cjs.map +7 -0
  83. package/decorators/withResponsiveOptions.js +2 -1
  84. package/decorators/withResponsiveOptions.js.map +7 -0
  85. package/decorators/withScrolledInView.cjs +45 -50
  86. package/decorators/withScrolledInView.cjs.map +7 -0
  87. package/decorators/withScrolledInView.js +45 -51
  88. package/decorators/withScrolledInView.js.map +7 -0
  89. package/decorators/withVue2.cjs +9 -15
  90. package/decorators/withVue2.cjs.map +7 -0
  91. package/decorators/withVue2.js +9 -16
  92. package/decorators/withVue2.js.map +7 -0
  93. package/helpers/createApp.cjs +1 -0
  94. package/helpers/createApp.cjs.map +7 -0
  95. package/helpers/createApp.js +1 -0
  96. package/helpers/createApp.js.map +7 -0
  97. package/helpers/getClosestParent.cjs +1 -0
  98. package/helpers/getClosestParent.cjs.map +7 -0
  99. package/helpers/getClosestParent.js +1 -0
  100. package/helpers/getClosestParent.js.map +7 -0
  101. package/helpers/getDirectChildren.cjs +1 -0
  102. package/helpers/getDirectChildren.cjs.map +7 -0
  103. package/helpers/getDirectChildren.js +1 -0
  104. package/helpers/getDirectChildren.js.map +7 -0
  105. package/helpers/getInstanceFromElement.cjs +1 -0
  106. package/helpers/getInstanceFromElement.cjs.map +7 -0
  107. package/helpers/getInstanceFromElement.js +1 -0
  108. package/helpers/getInstanceFromElement.js.map +7 -0
  109. package/helpers/importOnInteraction.cjs +2 -1
  110. package/helpers/importOnInteraction.cjs.map +7 -0
  111. package/helpers/importOnInteraction.js +2 -1
  112. package/helpers/importOnInteraction.js.map +7 -0
  113. package/helpers/importWhenIdle.cjs +1 -0
  114. package/helpers/importWhenIdle.cjs.map +7 -0
  115. package/helpers/importWhenIdle.js +1 -0
  116. package/helpers/importWhenIdle.js.map +7 -0
  117. package/helpers/importWhenVisible.cjs +2 -1
  118. package/helpers/importWhenVisible.cjs.map +7 -0
  119. package/helpers/importWhenVisible.js +2 -1
  120. package/helpers/importWhenVisible.js.map +7 -0
  121. package/helpers/index.cjs +1 -0
  122. package/helpers/index.cjs.map +7 -0
  123. package/helpers/index.js +1 -0
  124. package/helpers/index.js.map +7 -0
  125. package/helpers/utils.cjs +1 -0
  126. package/helpers/utils.cjs.map +7 -0
  127. package/helpers/utils.js +1 -0
  128. package/helpers/utils.js.map +7 -0
  129. package/index.cjs +1 -0
  130. package/index.cjs.map +7 -0
  131. package/index.js +1 -0
  132. package/index.js.map +7 -0
  133. package/package.json +1 -1
  134. package/services/drag.cjs +1 -0
  135. package/services/drag.cjs.map +7 -0
  136. package/services/drag.js +1 -0
  137. package/services/drag.js.map +7 -0
  138. package/services/index.cjs +1 -0
  139. package/services/index.cjs.map +7 -0
  140. package/services/index.js +1 -0
  141. package/services/index.js.map +7 -0
  142. package/services/key.cjs +2 -1
  143. package/services/key.cjs.map +7 -0
  144. package/services/key.js +2 -1
  145. package/services/key.js.map +7 -0
  146. package/services/load.cjs +1 -0
  147. package/services/load.cjs.map +7 -0
  148. package/services/load.js +1 -0
  149. package/services/load.js.map +7 -0
  150. package/services/pointer.cjs +3 -3
  151. package/services/pointer.cjs.map +7 -0
  152. package/services/pointer.js +3 -3
  153. package/services/pointer.js.map +7 -0
  154. package/services/raf.cjs +1 -0
  155. package/services/raf.cjs.map +7 -0
  156. package/services/raf.js +1 -0
  157. package/services/raf.js.map +7 -0
  158. package/services/resize.cjs +1 -0
  159. package/services/resize.cjs.map +7 -0
  160. package/services/resize.js +1 -0
  161. package/services/resize.js.map +7 -0
  162. package/services/scroll.cjs +1 -0
  163. package/services/scroll.cjs.map +7 -0
  164. package/services/scroll.js +1 -0
  165. package/services/scroll.js.map +7 -0
  166. package/services/service.cjs +1 -0
  167. package/services/service.cjs.map +7 -0
  168. package/services/service.js +1 -0
  169. package/services/service.js.map +7 -0
  170. package/utils/collide/boundingRectToCircle.cjs +1 -0
  171. package/utils/collide/boundingRectToCircle.cjs.map +7 -0
  172. package/utils/collide/boundingRectToCircle.js +1 -0
  173. package/utils/collide/boundingRectToCircle.js.map +7 -0
  174. package/utils/collide/collideCircleCircle.cjs +1 -0
  175. package/utils/collide/collideCircleCircle.cjs.map +7 -0
  176. package/utils/collide/collideCircleCircle.js +1 -0
  177. package/utils/collide/collideCircleCircle.js.map +7 -0
  178. package/utils/collide/collideCircleRect.cjs +1 -0
  179. package/utils/collide/collideCircleRect.cjs.map +7 -0
  180. package/utils/collide/collideCircleRect.js +1 -0
  181. package/utils/collide/collideCircleRect.js.map +7 -0
  182. package/utils/collide/collidePointCircle.cjs +1 -0
  183. package/utils/collide/collidePointCircle.cjs.map +7 -0
  184. package/utils/collide/collidePointCircle.js +1 -0
  185. package/utils/collide/collidePointCircle.js.map +7 -0
  186. package/utils/collide/collidePointRect.cjs +1 -0
  187. package/utils/collide/collidePointRect.cjs.map +7 -0
  188. package/utils/collide/collidePointRect.js +1 -0
  189. package/utils/collide/collidePointRect.js.map +7 -0
  190. package/utils/collide/collideRectRect.cjs +1 -0
  191. package/utils/collide/collideRectRect.cjs.map +7 -0
  192. package/utils/collide/collideRectRect.js +1 -0
  193. package/utils/collide/collideRectRect.js.map +7 -0
  194. package/utils/collide/index.cjs +1 -0
  195. package/utils/collide/index.cjs.map +7 -0
  196. package/utils/collide/index.js +1 -0
  197. package/utils/collide/index.js.map +7 -0
  198. package/utils/css/animate.cjs +38 -14
  199. package/utils/css/animate.cjs.map +7 -0
  200. package/utils/css/animate.d.ts +4 -24
  201. package/utils/css/animate.js +38 -14
  202. package/utils/css/animate.js.map +7 -0
  203. package/utils/css/classes.cjs +7 -3
  204. package/utils/css/classes.cjs.map +7 -0
  205. package/utils/css/classes.d.ts +6 -6
  206. package/utils/css/classes.js +7 -3
  207. package/utils/css/classes.js.map +7 -0
  208. package/utils/css/getOffsetSizes.cjs +1 -0
  209. package/utils/css/getOffsetSizes.cjs.map +7 -0
  210. package/utils/css/getOffsetSizes.js +1 -0
  211. package/utils/css/getOffsetSizes.js.map +7 -0
  212. package/utils/css/index.cjs +2 -1
  213. package/utils/css/index.cjs.map +7 -0
  214. package/utils/css/index.d.ts +7 -7
  215. package/utils/css/index.js +1 -0
  216. package/utils/css/index.js.map +7 -0
  217. package/utils/css/matrix.cjs +2 -2
  218. package/utils/css/matrix.cjs.map +7 -0
  219. package/utils/css/matrix.js +2 -2
  220. package/utils/css/matrix.js.map +7 -0
  221. package/utils/css/styles.cjs +12 -8
  222. package/utils/css/styles.cjs.map +7 -0
  223. package/utils/css/styles.d.ts +4 -4
  224. package/utils/css/styles.js +12 -8
  225. package/utils/css/styles.js.map +7 -0
  226. package/utils/css/transform.cjs +7 -4
  227. package/utils/css/transform.cjs.map +7 -0
  228. package/utils/css/transform.d.ts +2 -2
  229. package/utils/css/transform.js +7 -4
  230. package/utils/css/transform.js.map +7 -0
  231. package/utils/css/transition.cjs +10 -8
  232. package/utils/css/transition.cjs.map +7 -0
  233. package/utils/css/transition.d.ts +5 -8
  234. package/utils/css/transition.js +10 -9
  235. package/utils/css/transition.js.map +7 -0
  236. package/utils/css/utils.cjs +32 -0
  237. package/utils/css/utils.cjs.map +7 -0
  238. package/utils/css/utils.d.ts +1 -0
  239. package/utils/css/utils.js +10 -0
  240. package/utils/css/utils.js.map +7 -0
  241. package/utils/debounce.cjs +1 -0
  242. package/utils/debounce.cjs.map +7 -0
  243. package/utils/debounce.js +1 -0
  244. package/utils/debounce.js.map +7 -0
  245. package/utils/focusTrap.cjs +1 -0
  246. package/utils/focusTrap.cjs.map +7 -0
  247. package/utils/focusTrap.js +1 -0
  248. package/utils/focusTrap.js.map +7 -0
  249. package/utils/has.cjs +1 -0
  250. package/utils/has.cjs.map +7 -0
  251. package/utils/has.js +1 -0
  252. package/utils/has.js.map +7 -0
  253. package/utils/history.cjs +1 -0
  254. package/utils/history.cjs.map +7 -0
  255. package/utils/history.js +1 -0
  256. package/utils/history.js.map +7 -0
  257. package/utils/index.cjs +2 -1
  258. package/utils/index.cjs.map +7 -0
  259. package/utils/index.d.ts +19 -19
  260. package/utils/index.js +1 -0
  261. package/utils/index.js.map +7 -0
  262. package/utils/is.cjs +1 -0
  263. package/utils/is.cjs.map +7 -0
  264. package/utils/is.js +1 -0
  265. package/utils/is.js.map +7 -0
  266. package/utils/keyCodes.cjs +1 -0
  267. package/utils/keyCodes.cjs.map +7 -0
  268. package/utils/keyCodes.js +1 -0
  269. package/utils/keyCodes.js.map +7 -0
  270. package/utils/math/clamp.cjs +1 -0
  271. package/utils/math/clamp.cjs.map +7 -0
  272. package/utils/math/clamp.js +1 -0
  273. package/utils/math/clamp.js.map +7 -0
  274. package/utils/math/clamp01.cjs +1 -0
  275. package/utils/math/clamp01.cjs.map +7 -0
  276. package/utils/math/clamp01.js +1 -0
  277. package/utils/math/clamp01.js.map +7 -0
  278. package/utils/math/createEases.cjs +1 -0
  279. package/utils/math/createEases.cjs.map +7 -0
  280. package/utils/math/createEases.js +1 -0
  281. package/utils/math/createEases.js.map +7 -0
  282. package/utils/math/damp.cjs +1 -0
  283. package/utils/math/damp.cjs.map +7 -0
  284. package/utils/math/damp.js +1 -0
  285. package/utils/math/damp.js.map +7 -0
  286. package/utils/math/ease.cjs +1 -0
  287. package/utils/math/ease.cjs.map +7 -0
  288. package/utils/math/ease.js +1 -0
  289. package/utils/math/ease.js.map +7 -0
  290. package/utils/math/index.cjs +1 -0
  291. package/utils/math/index.cjs.map +7 -0
  292. package/utils/math/index.js +1 -0
  293. package/utils/math/index.js.map +7 -0
  294. package/utils/math/inertiaFinalValue.cjs +1 -0
  295. package/utils/math/inertiaFinalValue.cjs.map +7 -0
  296. package/utils/math/inertiaFinalValue.js +1 -0
  297. package/utils/math/inertiaFinalValue.js.map +7 -0
  298. package/utils/math/lerp.cjs +1 -0
  299. package/utils/math/lerp.cjs.map +7 -0
  300. package/utils/math/lerp.js +1 -0
  301. package/utils/math/lerp.js.map +7 -0
  302. package/utils/math/map.cjs +1 -0
  303. package/utils/math/map.cjs.map +7 -0
  304. package/utils/math/map.js +1 -0
  305. package/utils/math/map.js.map +7 -0
  306. package/utils/math/round.cjs +1 -0
  307. package/utils/math/round.cjs.map +7 -0
  308. package/utils/math/round.js +1 -0
  309. package/utils/math/round.js.map +7 -0
  310. package/utils/memoize.cjs +1 -0
  311. package/utils/memoize.cjs.map +7 -0
  312. package/utils/memoize.js +1 -0
  313. package/utils/memoize.js.map +7 -0
  314. package/utils/nextFrame.cjs +1 -0
  315. package/utils/nextFrame.cjs.map +7 -0
  316. package/utils/nextFrame.js +1 -0
  317. package/utils/nextFrame.js.map +7 -0
  318. package/utils/nextMicrotask.cjs +1 -0
  319. package/utils/nextMicrotask.cjs.map +7 -0
  320. package/utils/nextMicrotask.js +1 -0
  321. package/utils/nextMicrotask.js.map +7 -0
  322. package/utils/nextTick.cjs +1 -0
  323. package/utils/nextTick.cjs.map +7 -0
  324. package/utils/nextTick.js +1 -0
  325. package/utils/nextTick.js.map +7 -0
  326. package/utils/noop.cjs +1 -0
  327. package/utils/noop.cjs.map +7 -0
  328. package/utils/noop.js +1 -0
  329. package/utils/noop.js.map +7 -0
  330. package/utils/object/autoBind.cjs +1 -0
  331. package/utils/object/autoBind.cjs.map +7 -0
  332. package/utils/object/autoBind.js +1 -0
  333. package/utils/object/autoBind.js.map +7 -0
  334. package/utils/object/getAllProperties.cjs +1 -0
  335. package/utils/object/getAllProperties.cjs.map +7 -0
  336. package/utils/object/getAllProperties.js +1 -0
  337. package/utils/object/getAllProperties.js.map +7 -0
  338. package/utils/object/index.cjs +1 -0
  339. package/utils/object/index.cjs.map +7 -0
  340. package/utils/object/index.js +1 -0
  341. package/utils/object/index.js.map +7 -0
  342. package/utils/scheduler.cjs +1 -0
  343. package/utils/scheduler.cjs.map +7 -0
  344. package/utils/scheduler.js +1 -0
  345. package/utils/scheduler.js.map +7 -0
  346. package/utils/scrollTo.cjs +1 -0
  347. package/utils/scrollTo.cjs.map +7 -0
  348. package/utils/scrollTo.js +1 -0
  349. package/utils/scrollTo.js.map +7 -0
  350. package/utils/string/index.cjs +1 -0
  351. package/utils/string/index.cjs.map +7 -0
  352. package/utils/string/index.js +1 -0
  353. package/utils/string/index.js.map +7 -0
  354. package/utils/string/withLeadingCharacters.cjs +1 -0
  355. package/utils/string/withLeadingCharacters.cjs.map +7 -0
  356. package/utils/string/withLeadingCharacters.js +1 -0
  357. package/utils/string/withLeadingCharacters.js.map +7 -0
  358. package/utils/string/withLeadingSlash.cjs +1 -0
  359. package/utils/string/withLeadingSlash.cjs.map +7 -0
  360. package/utils/string/withLeadingSlash.js +1 -0
  361. package/utils/string/withLeadingSlash.js.map +7 -0
  362. package/utils/string/withTrailingCharacters.cjs +1 -0
  363. package/utils/string/withTrailingCharacters.cjs.map +7 -0
  364. package/utils/string/withTrailingCharacters.js +1 -0
  365. package/utils/string/withTrailingCharacters.js.map +7 -0
  366. package/utils/string/withTrailingSlash.cjs +1 -0
  367. package/utils/string/withTrailingSlash.cjs.map +7 -0
  368. package/utils/string/withTrailingSlash.js +1 -0
  369. package/utils/string/withTrailingSlash.js.map +7 -0
  370. package/utils/string/withoutLeadingCharacters.cjs +1 -0
  371. package/utils/string/withoutLeadingCharacters.cjs.map +7 -0
  372. package/utils/string/withoutLeadingCharacters.js +1 -0
  373. package/utils/string/withoutLeadingCharacters.js.map +7 -0
  374. package/utils/string/withoutLeadingCharactersRecursive.cjs +1 -0
  375. package/utils/string/withoutLeadingCharactersRecursive.cjs.map +7 -0
  376. package/utils/string/withoutLeadingCharactersRecursive.js +1 -0
  377. package/utils/string/withoutLeadingCharactersRecursive.js.map +7 -0
  378. package/utils/string/withoutLeadingSlash.cjs +1 -0
  379. package/utils/string/withoutLeadingSlash.cjs.map +7 -0
  380. package/utils/string/withoutLeadingSlash.js +1 -0
  381. package/utils/string/withoutLeadingSlash.js.map +7 -0
  382. package/utils/string/withoutTrailingCharacters.cjs +1 -0
  383. package/utils/string/withoutTrailingCharacters.cjs.map +7 -0
  384. package/utils/string/withoutTrailingCharacters.js +1 -0
  385. package/utils/string/withoutTrailingCharacters.js.map +7 -0
  386. package/utils/string/withoutTrailingCharactersRecursive.cjs +1 -0
  387. package/utils/string/withoutTrailingCharactersRecursive.cjs.map +7 -0
  388. package/utils/string/withoutTrailingCharactersRecursive.js +1 -0
  389. package/utils/string/withoutTrailingCharactersRecursive.js.map +7 -0
  390. package/utils/string/withoutTrailingSlash.cjs +1 -0
  391. package/utils/string/withoutTrailingSlash.cjs.map +7 -0
  392. package/utils/string/withoutTrailingSlash.js +1 -0
  393. package/utils/string/withoutTrailingSlash.js.map +7 -0
  394. package/utils/throttle.cjs +1 -0
  395. package/utils/throttle.cjs.map +7 -0
  396. package/utils/throttle.js +1 -0
  397. package/utils/throttle.js.map +7 -0
  398. package/utils/tween.cjs +2 -2
  399. package/utils/tween.cjs.map +7 -0
  400. package/utils/tween.js +2 -2
  401. package/utils/tween.js.map +7 -0
@@ -34,7 +34,7 @@ function importOnInteraction(fn, nameOrSelectorOrElement, events, parent) {
34
34
  });
35
35
  };
36
36
  return new Promise((resolve) => {
37
- const elements = (0, import_utils.getTargetElements)(nameOrSelectorOrElement, parent == null ? void 0 : parent.$el);
37
+ const elements = (0, import_utils.getTargetElements)(nameOrSelectorOrElement, parent?.$el);
38
38
  const eventListenerOptions = {
39
39
  capture: true,
40
40
  passive: true,
@@ -51,3 +51,4 @@ function importOnInteraction(fn, nameOrSelectorOrElement, events, parent) {
51
51
  });
52
52
  }
53
53
  if (module.exports.default) module.exports = module.exports.default;
54
+ //# sourceMappingURL=importOnInteraction.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/importOnInteraction.ts"],
4
+ "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport { getTargetElements } from './utils.js';\nimport { isString } from '../utils/index.js';\n\n/**\n * Import a component on an interaction.\n *\n * @template {BaseConstructor} [T=BaseConstructor]\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 * @returns {Promise<InstanceType<T>>}\n */\nexport default function importOnInteraction<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default:T }>,\n nameOrSelectorOrElement:string | HTMLElement | HTMLElement[],\n events:string | string[],\n parent?: Base,\n):Promise<T> {\n const normalizedEvents = isString(events) ? [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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkC;AAClC,IAAAA,gBAAyB;AAgBV,SAAR,oBACL,IACA,yBACA,QACA,QACW;AACX,QAAM,uBAAmB,wBAAS,MAAM,IAAI,CAAC,MAAM,IAAI;AAEvD,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAACC,YAAW;AACpB,sBAAgB,aAAaA,UAASA,QAAO,UAAUA;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,eAAW,gCAAkB,yBAAyB,QAAQ,GAAG;AACvE,UAAM,uBAAuB;AAAA,MAC3B,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AACA,UAAM,UAAU,MAAM;AACpB,eAAS,OAAO;AAAA,IAClB;AAEA,aAAS,QAAQ,CAAC,YAAY;AAC5B,uBAAiB,QAAQ,CAAC,UAAU;AAClC,gBAAQ,iBAAiB,OAAO,SAAS,oBAAoB;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;",
6
+ "names": ["import_utils", "module"]
7
+ }
@@ -10,7 +10,7 @@ function importOnInteraction(fn, nameOrSelectorOrElement, events, parent) {
10
10
  });
11
11
  };
12
12
  return new Promise((resolve) => {
13
- const elements = getTargetElements(nameOrSelectorOrElement, parent == null ? void 0 : parent.$el);
13
+ const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);
14
14
  const eventListenerOptions = {
15
15
  capture: true,
16
16
  passive: true,
@@ -29,3 +29,4 @@ function importOnInteraction(fn, nameOrSelectorOrElement, events, parent) {
29
29
  export {
30
30
  importOnInteraction as default
31
31
  };
32
+ //# sourceMappingURL=importOnInteraction.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/importOnInteraction.ts"],
4
+ "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport { getTargetElements } from './utils.js';\nimport { isString } from '../utils/index.js';\n\n/**\n * Import a component on an interaction.\n *\n * @template {BaseConstructor} [T=BaseConstructor]\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 * @returns {Promise<InstanceType<T>>}\n */\nexport default function importOnInteraction<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default:T }>,\n nameOrSelectorOrElement:string | HTMLElement | HTMLElement[],\n events:string | string[],\n parent?: Base,\n):Promise<T> {\n const normalizedEvents = isString(events) ? [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"],
5
+ "mappings": "AACA,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AAgBV,SAAR,oBACL,IACA,yBACA,QACA,QACW;AACX,QAAM,mBAAmB,SAAS,MAAM,IAAI,CAAC,MAAM,IAAI;AAEvD,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAAC,WAAW;AACpB,sBAAgB,aAAa,SAAS,OAAO,UAAU;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,WAAW,kBAAkB,yBAAyB,QAAQ,GAAG;AACvE,UAAM,uBAAuB;AAAA,MAC3B,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AACA,UAAM,UAAU,MAAM;AACpB,eAAS,OAAO;AAAA,IAClB;AAEA,aAAS,QAAQ,CAAC,YAAY;AAC5B,uBAAiB,QAAQ,CAAC,UAAU;AAClC,gBAAQ,iBAAiB,OAAO,SAAS,oBAAoB;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -48,3 +48,4 @@ function importWhenIdle(fn, { timeout = 1 } = {}) {
48
48
  });
49
49
  }
50
50
  if (module.exports.default) module.exports = module.exports.default;
51
+ //# sourceMappingURL=importWhenIdle.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/importWhenIdle.ts"],
4
+ "sourcesContent": ["import type { BaseConstructor } from '../Base/index.js';\n\ntype ImportWhenIdleOptions = {\n timeout?: number;\n};\n\n/**\n * Import a component when user is idle.\n *\n * @template {BaseConstructor} T\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 * @returns {Promise<T>}\n */\nexport default function importWhenIdle<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n { timeout = 1 }: ImportWhenIdleOptions = {},\n):Promise<T> {\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 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 },\n );\n }\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBe,SAAR,eACL,IACA,EAAE,UAAU,EAAE,IAA2B,CAAC,GAC/B;AACX,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAACA,YAAW;AACpB,sBAAgB,aAAaA,UAASA,QAAO,UAAUA;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,EAAE,yBAAyB,SAAS;AACtC,iBAAW,MAAM;AACf,iBAAS,OAAO;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ,OAAO;AACL,aAAO;AAAA,QACL,MAAM;AACJ,qBAAW,MAAM;AACf,qBAAS,OAAO;AAAA,UAClB,GAAG,CAAC;AAAA,QACN;AAAA,QACA,EAAE,QAAQ;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;",
6
+ "names": ["module"]
7
+ }
@@ -26,3 +26,4 @@ function importWhenIdle(fn, { timeout = 1 } = {}) {
26
26
  export {
27
27
  importWhenIdle as default
28
28
  };
29
+ //# sourceMappingURL=importWhenIdle.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/importWhenIdle.ts"],
4
+ "sourcesContent": ["import type { BaseConstructor } from '../Base/index.js';\n\ntype ImportWhenIdleOptions = {\n timeout?: number;\n};\n\n/**\n * Import a component when user is idle.\n *\n * @template {BaseConstructor} T\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 * @returns {Promise<T>}\n */\nexport default function importWhenIdle<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n { timeout = 1 }: ImportWhenIdleOptions = {},\n):Promise<T> {\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 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 },\n );\n }\n });\n}\n"],
5
+ "mappings": "AAgBe,SAAR,eACL,IACA,EAAE,UAAU,EAAE,IAA2B,CAAC,GAC/B;AACX,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAAC,WAAW;AACpB,sBAAgB,aAAa,SAAS,OAAO,UAAU;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,EAAE,yBAAyB,SAAS;AACtC,iBAAW,MAAM;AACf,iBAAS,OAAO;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ,OAAO;AACL,aAAO;AAAA,QACL,MAAM;AACJ,qBAAW,MAAM;AACf,qBAAS,OAAO;AAAA,UAClB,GAAG,CAAC;AAAA,QACN;AAAA,QACA,EAAE,QAAQ;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -44,8 +44,9 @@ function importWhenVisible(fn, nameOrSelectorOrElement, parent, observerOptions
44
44
  }, 0);
45
45
  }
46
46
  }, observerOptions);
47
- const elements = (0, import_utils.getTargetElements)(nameOrSelectorOrElement, parent == null ? void 0 : parent.$el);
47
+ const elements = (0, import_utils.getTargetElements)(nameOrSelectorOrElement, parent?.$el);
48
48
  elements.forEach((element) => observer.observe(element));
49
49
  });
50
50
  }
51
51
  if (module.exports.default) module.exports = module.exports.default;
52
+ //# sourceMappingURL=importWhenVisible.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/importWhenVisible.ts"],
4
+ "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport { getTargetElements } from './utils.js';\nimport { isFunction } from '../utils/index.js';\n\n/**\n * Import a component when it is visible.\n *\n * @template {BaseConstructor} T\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 * @returns {Promise<T>}\n */\nexport default function importWhenVisible<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n nameOrSelectorOrElement: string | HTMLElement | HTMLElement[],\n parent?: Base,\n observerOptions: IntersectionObserverInit = {},\n): Promise<T> {\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 (isFunction(cb)) {\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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkC;AAClC,IAAAA,gBAA2B;AAgBZ,SAAR,kBACL,IACA,yBACA,QACA,kBAA4C,CAAC,GACjC;AACZ,MAAI;AAEJ,QAAM,WAAW,CAAC,SAAS,OAAO;AAChC,OAAG,EAAE,KAAK,CAACC,YAAW;AACpB,sBAAgB,aAAaA,UAASA,QAAO,UAAUA;AACvD,cAAQ,aAAa;AAErB,cAAI,0BAAW,EAAE,GAAG;AAClB,WAAG;AAAA,MACL;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,WAAW,IAAI,qBAAqB,CAAC,YAAY;AACrD,YAAM,wBAAwB,QAAQ,KAAK,CAAC,UAAU,MAAM,cAAc;AAC1E,UAAI,uBAAuB;AACzB,mBAAW,MAAM;AACf,mBAAS,SAAS,MAAM,SAAS,WAAW,CAAC;AAAA,QAC/C,GAAG,CAAC;AAAA,MACN;AAAA,IACF,GAAG,eAAe;AAElB,UAAM,eAAW,gCAAkB,yBAAyB,QAAQ,GAAG;AACvE,aAAS,QAAQ,CAAC,YAAY,SAAS,QAAQ,OAAO,CAAC;AAAA,EACzD,CAAC;AACH;",
6
+ "names": ["import_utils", "module"]
7
+ }
@@ -20,10 +20,11 @@ function importWhenVisible(fn, nameOrSelectorOrElement, parent, observerOptions
20
20
  }, 0);
21
21
  }
22
22
  }, observerOptions);
23
- const elements = getTargetElements(nameOrSelectorOrElement, parent == null ? void 0 : parent.$el);
23
+ const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);
24
24
  elements.forEach((element) => observer.observe(element));
25
25
  });
26
26
  }
27
27
  export {
28
28
  importWhenVisible as default
29
29
  };
30
+ //# sourceMappingURL=importWhenVisible.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/importWhenVisible.ts"],
4
+ "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport { getTargetElements } from './utils.js';\nimport { isFunction } from '../utils/index.js';\n\n/**\n * Import a component when it is visible.\n *\n * @template {BaseConstructor} T\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 * @returns {Promise<T>}\n */\nexport default function importWhenVisible<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n nameOrSelectorOrElement: string | HTMLElement | HTMLElement[],\n parent?: Base,\n observerOptions: IntersectionObserverInit = {},\n): Promise<T> {\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 (isFunction(cb)) {\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"],
5
+ "mappings": "AACA,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAgBZ,SAAR,kBACL,IACA,yBACA,QACA,kBAA4C,CAAC,GACjC;AACZ,MAAI;AAEJ,QAAM,WAAW,CAAC,SAAS,OAAO;AAChC,OAAG,EAAE,KAAK,CAAC,WAAW;AACpB,sBAAgB,aAAa,SAAS,OAAO,UAAU;AACvD,cAAQ,aAAa;AAErB,UAAI,WAAW,EAAE,GAAG;AAClB,WAAG;AAAA,MACL;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,WAAW,IAAI,qBAAqB,CAAC,YAAY;AACrD,YAAM,wBAAwB,QAAQ,KAAK,CAAC,UAAU,MAAM,cAAc;AAC1E,UAAI,uBAAuB;AACzB,mBAAW,MAAM;AACf,mBAAS,SAAS,MAAM,SAAS,WAAW,CAAC;AAAA,QAC/C,GAAG,CAAC;AAAA,MACN;AAAA,IACF,GAAG,eAAe;AAElB,UAAM,WAAW,kBAAkB,yBAAyB,QAAQ,GAAG;AACvE,aAAS,QAAQ,CAAC,YAAY,SAAS,QAAQ,OAAO,CAAC;AAAA,EACzD,CAAC;AACH;",
6
+ "names": []
7
+ }
package/helpers/index.cjs CHANGED
@@ -42,3 +42,4 @@ var import_importOnInteraction = __toESM(require("./importOnInteraction.cjs"), 1
42
42
  var import_importWhenIdle = __toESM(require("./importWhenIdle.cjs"), 1);
43
43
  var import_importWhenVisible = __toESM(require("./importWhenVisible.cjs"), 1);
44
44
  if (module.exports.default) module.exports = module.exports.default;
45
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/index.ts"],
4
+ "sourcesContent": ["export * from './getDirectChildren.js';\nexport { default as createApp } from './createApp.js';\nexport { default as getClosestParent } from './getClosestParent.js';\nexport { default as getInstanceFromElement } from './getInstanceFromElement.js';\nexport { default as importOnInteraction } from './importOnInteraction.js';\nexport { default as importWhenIdle } from './importWhenIdle.js';\nexport { default as importWhenVisible } from './importWhenVisible.js';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAc,oCAAd;AACA,uBAAqC;AACrC,8BAA4C;AAC5C,oCAAkD;AAClD,iCAA+C;AAC/C,4BAA0C;AAC1C,+BAA6C;",
6
+ "names": []
7
+ }
package/helpers/index.js CHANGED
@@ -13,3 +13,4 @@ export {
13
13
  default6 as importWhenIdle,
14
14
  default7 as importWhenVisible
15
15
  };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/index.ts"],
4
+ "sourcesContent": ["export * from './getDirectChildren.js';\nexport { default as createApp } from './createApp.js';\nexport { default as getClosestParent } from './getClosestParent.js';\nexport { default as getInstanceFromElement } from './getInstanceFromElement.js';\nexport { default as importOnInteraction } from './importOnInteraction.js';\nexport { default as importWhenIdle } from './importWhenIdle.js';\nexport { default as importWhenVisible } from './importWhenVisible.js';\n"],
5
+ "mappings": "AAAA,cAAc;AACd,SAAoB,WAAXA,gBAA4B;AACrC,SAAoB,WAAXA,gBAAmC;AAC5C,SAAoB,WAAXA,gBAAyC;AAClD,SAAoB,WAAXA,gBAAsC;AAC/C,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAoC;",
6
+ "names": ["default"]
7
+ }
package/helpers/utils.cjs CHANGED
@@ -34,3 +34,4 @@ function getTargetElements(nameOrSelectorOrElement, context) {
34
34
  return nameOrSelectorOrElement;
35
35
  }
36
36
  if (module.exports.default) module.exports = module.exports.default;
37
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/utils.ts"],
4
+ "sourcesContent": ["/* eslint-disable import/prefer-default-export */\nimport { getComponentElements } from '../Base/utils.js';\nimport { isString, isArray } from '../utils/index.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 * @returns {HTMLElement[]} A normalized list of elements.\n */\nexport function getTargetElements(\n nameOrSelectorOrElement: string | HTMLElement | HTMLElement[],\n context: HTMLElement,\n): HTMLElement[] {\n if (isString(nameOrSelectorOrElement)) {\n return getComponentElements(nameOrSelectorOrElement, context);\n }\n\n if (!isArray(nameOrSelectorOrElement)) {\n return [nameOrSelectorOrElement];\n }\n\n return nameOrSelectorOrElement;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAqC;AACrC,IAAAA,gBAAkC;AAW3B,SAAS,kBACd,yBACA,SACe;AACf,UAAI,wBAAS,uBAAuB,GAAG;AACrC,eAAO,mCAAqB,yBAAyB,OAAO;AAAA,EAC9D;AAEA,MAAI,KAAC,uBAAQ,uBAAuB,GAAG;AACrC,WAAO,CAAC,uBAAuB;AAAA,EACjC;AAEA,SAAO;AACT;",
6
+ "names": ["import_utils"]
7
+ }
package/helpers/utils.js CHANGED
@@ -12,3 +12,4 @@ function getTargetElements(nameOrSelectorOrElement, context) {
12
12
  export {
13
13
  getTargetElements
14
14
  };
15
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/helpers/utils.ts"],
4
+ "sourcesContent": ["/* eslint-disable import/prefer-default-export */\nimport { getComponentElements } from '../Base/utils.js';\nimport { isString, isArray } from '../utils/index.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 * @returns {HTMLElement[]} A normalized list of elements.\n */\nexport function getTargetElements(\n nameOrSelectorOrElement: string | HTMLElement | HTMLElement[],\n context: HTMLElement,\n): HTMLElement[] {\n if (isString(nameOrSelectorOrElement)) {\n return getComponentElements(nameOrSelectorOrElement, context);\n }\n\n if (!isArray(nameOrSelectorOrElement)) {\n return [nameOrSelectorOrElement];\n }\n\n return nameOrSelectorOrElement;\n}\n"],
5
+ "mappings": "AACA,SAAS,4BAA4B;AACrC,SAAS,UAAU,eAAe;AAW3B,SAAS,kBACd,yBACA,SACe;AACf,MAAI,SAAS,uBAAuB,GAAG;AACrC,WAAO,qBAAqB,yBAAyB,OAAO;AAAA,EAC9D;AAEA,MAAI,CAAC,QAAQ,uBAAuB,GAAG;AACrC,WAAO,CAAC,uBAAuB;AAAA,EACjC;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
package/index.cjs CHANGED
@@ -28,3 +28,4 @@ __reExport(js_toolkit_exports, require("./decorators/index.cjs"), module.exports
28
28
  __reExport(js_toolkit_exports, require("./helpers/index.cjs"), module.exports);
29
29
  __reExport(js_toolkit_exports, require("./services/index.cjs"), module.exports);
30
30
  if (module.exports.default) module.exports = module.exports.default;
31
+ //# sourceMappingURL=index.cjs.map
package/index.cjs.map ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../packages/js-toolkit/index.ts"],
4
+ "sourcesContent": ["export { Base } from './Base/index.js';\nexport * from './decorators/index.js';\nexport * from './helpers/index.js';\nexport * from './services/index.js';\n\nexport type {\n BaseProps,\n BaseConstructor,\n BaseAsyncConstructor,\n BaseConfig,\n} from './Base/index.js';\n\nexport type { BaseInterface, BaseDecorator } from './Base/types.js';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAqB;AACrB,+BAAc,mCADd;AAEA,+BAAc,gCAFd;AAGA,+BAAc,iCAHd;",
6
+ "names": []
7
+ }
package/index.js CHANGED
@@ -5,3 +5,4 @@ export * from "./services/index.js";
5
5
  export {
6
6
  Base
7
7
  };
8
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../packages/js-toolkit/index.ts"],
4
+ "sourcesContent": ["export { Base } from './Base/index.js';\nexport * from './decorators/index.js';\nexport * from './helpers/index.js';\nexport * from './services/index.js';\n\nexport type {\n BaseProps,\n BaseConstructor,\n BaseAsyncConstructor,\n BaseConfig,\n} from './Base/index.js';\n\nexport type { BaseInterface, BaseDecorator } from './Base/types.js';\n"],
5
+ "mappings": "AAAA,SAAS,YAAY;AACrB,cAAc;AACd,cAAc;AACd,cAAc;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studiometa/js-toolkit",
3
- "version": "2.5.0",
3
+ "version": "2.6.1",
4
4
  "description": "A set of useful little bits of JavaScript to boost your project! 🚀",
5
5
  "publishConfig": {
6
6
  "access": "public"
package/services/drag.cjs CHANGED
@@ -216,3 +216,4 @@ function useDrag(target, options) {
216
216
  return instances.get(target);
217
217
  }
218
218
  if (module.exports.default) module.exports = module.exports.default;
219
+ //# sourceMappingURL=drag.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/drag.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport useRaf from './raf.js';\nimport inertiaFinalValue from '../utils/math/inertiaFinalValue.js';\n// eslint-disable-next-line import/extensions\nimport { isDefined } from '../utils/index.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<DragServiceProps>} DragService\n * @typedef {import('./pointer.js').PointerServiceProps} PointerServiceProps\n * @typedef {'start'|'drag'|'drop'|'inertia'|'stop'} DragLifecycle\n * @typedef {Object} DragServiceProps\n * @property {DragLifecycle} mode\n * The current mode of the dragging logic.\n * @property {HTMLElement} target\n * The target element of the drag.\n * @property {boolean} isGrabbing\n * Whether the user is currently grabbing the targeted element or not.\n * @property {boolean} hasInertia\n * Whether the drag currently has inertia or not.\n * @property {number} x\n * The current horizontal position in the viewport.\n * @property {number} y\n * The current vertical position in the viewport.\n * @property {{ x: number, y: number }} delta\n * The delta between the current position and the last.\n * @property {{ x: number, y: number }} origin\n * The initial position where the dragging started.\n * @property {{ x: number, y: number }} distance\n * The distance from the current position to the origin.\n * @property {{ x: number, y: number }} final\n * The final position that will be reached at the end of the inertia.\n * @typedef {Object} DragServiceOptions\n * @property {number} [dampFactor]\n * @property {number} [dragTreshold]\n */\n\n/**\n * @type {Record<Uppercase<DragLifecycle>, DragLifecycle>}\n */\nconst MODES = {\n START: 'start',\n DRAG: 'drag',\n DROP: 'drop',\n INERTIA: 'inertia',\n STOP: 'stop',\n};\n\nlet count = 0;\nconst events = ['pointerdown', 'pointerup'];\nconst passiveEventOptions = { passive: true };\n\n/**\n * Get the client value for the given axis.\n * @param {MouseEvent|TouchEvent} event\n * @returns {{ x: number, y: number }}\n */\nfunction getEventPosition(event) {\n // @ts-ignore\n const eventOrTouch = isDefined(event.touches) ? event.touches[0] : event;\n return {\n x: eventOrTouch.clientX,\n y: eventOrTouch.clientY,\n };\n}\n\n/**\n * Get drag service.\n * @param {HTMLElement} target\n * @param {Object} [options]\n * @param {number} [options.dampFactor]\n * @param {number} [options.dragTreshold]\n * @returns {DragService}\n */\nfunction createDragService(target, { dampFactor = 0.85, dragTreshold = 10 } = {}) {\n count += 1;\n const id = `drag-${count}`;\n let previousEvent;\n\n /**\n * Test if we should allow click on links and buttons.\n *\n * @private\n * @returns {boolean}\n */\n function shouldPreventClick() {\n return Math.abs(props.distance.x) > dragTreshold || Math.abs(props.distance.y) > dragTreshold;\n }\n\n /**\n * Start the drag.\n * @param {number} x The initial horizontal position.\n * @param {number} y The initial vertical position.\n * @returns {void}\n */\n function start(x, y) {\n if (props.isGrabbing) {\n return;\n }\n\n // Reset state\n props.x = x;\n props.y = y;\n props.origin.x = x;\n props.origin.y = y;\n props.delta.x = 0;\n props.delta.y = 0;\n props.distance.x = 0;\n props.distance.y = 0;\n props.final.x = x;\n props.final.y = y;\n\n props.mode = MODES.START;\n\n // Enable grabbing\n props.isGrabbing = true;\n\n trigger(props);\n\n document.addEventListener('touchmove', handleEvent, passiveEventOptions);\n document.addEventListener('mousemove', handleEvent, passiveEventOptions);\n }\n\n /**\n * Stop the drag, or drop.\n * @returns {void}\n */\n function drop() {\n document.removeEventListener('touchmove', handleEvent);\n document.removeEventListener('mousemove', handleEvent);\n props.isGrabbing = false;\n props.mode = MODES.DROP;\n\n props.hasInertia = true;\n props.final.x = inertiaFinalValue(props.x, props.delta.x, dampFactor);\n props.final.y = inertiaFinalValue(props.y, props.delta.y, dampFactor);\n\n trigger(props);\n\n setTimeout(() => {\n const raf = useRaf();\n raf.remove(id);\n raf.add(id, rafHandler);\n }, 0);\n }\n\n /**\n * Stop the drag.\n */\n function stop() {\n useRaf().remove(id);\n props.isGrabbing = false;\n props.hasInertia = false;\n props.mode = MODES.STOP;\n trigger(props);\n }\n\n /**\n * Raf service handler.\n * @returns {void}\n */\n function rafHandler() {\n if (!props.isGrabbing) {\n props.x += props.delta.x;\n props.y += props.delta.y;\n props.distance.x = props.x - props.origin.x;\n props.distance.y = props.y - props.origin.y;\n\n props.delta.x *= dampFactor;\n props.delta.y *= dampFactor;\n\n if (props.mode !== MODES.INERTIA) {\n props.mode = MODES.INERTIA;\n }\n\n trigger(props);\n\n if (Math.abs(props.delta.x) < 0.1 && Math.abs(props.delta.y) < 0.1) {\n stop();\n }\n }\n }\n\n /**\n * Pointer service handler.\n * @param {TouchEvent|MouseEvent} event\n * @returns {void}\n */\n function drag(event) {\n if (props.isGrabbing) {\n const position = getEventPosition(event);\n props.x = position.x;\n props.y = position.y;\n\n if (previousEvent) {\n const previousPosition = getEventPosition(previousEvent);\n props.delta.x = position.x - previousPosition.x;\n props.delta.y = position.y - previousPosition.y;\n }\n\n props.final.x = position.x;\n props.final.y = position.y;\n props.distance.x = props.x - props.origin.x;\n props.distance.y = props.y - props.origin.y;\n\n if (props.mode !== MODES.DRAG) {\n props.mode = MODES.DRAG;\n }\n\n trigger(props);\n previousEvent = event;\n }\n }\n\n /**\n * Handle any event.\n * @param {MouseEvent|PointerEvent|DragEvent} event\n */\n function handleEvent(event) {\n switch (event.type) {\n case 'dragstart':\n event.preventDefault();\n break;\n case 'click':\n if (shouldPreventClick()) {\n event.stopImmediatePropagation();\n event.stopPropagation();\n event.preventDefault();\n }\n break;\n case 'pointerup':\n drop();\n break;\n case 'touchmove':\n case 'mousemove':\n drag(event);\n break;\n default:\n if (event.button === 0) {\n start(event.x, event.y);\n }\n }\n }\n\n const { add, remove, has, trigger, props } = useService({\n /**\n * @type {DragServiceProps}\n */\n props: {\n target,\n mode: undefined,\n isGrabbing: false,\n hasInertia: false,\n x: 0,\n y: 0,\n delta: {\n x: 0,\n y: 0,\n },\n origin: {\n x: 0,\n y: 0,\n },\n distance: {\n x: 0,\n y: 0,\n },\n final: {\n x: 0,\n y: 0,\n },\n },\n init() {\n events.forEach((event) => {\n target.addEventListener(event, handleEvent, passiveEventOptions);\n });\n target.addEventListener('dragstart', handleEvent, { capture: true });\n target.addEventListener('click', handleEvent, { capture: true });\n },\n kill() {\n events.forEach((event) => {\n target.removeEventListener(event, handleEvent);\n });\n target.removeEventListener('dragstart', handleEvent);\n target.removeEventListener('click', handleEvent);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\n/**\n * @type {WeakMap<HTMLElement, DragService | undefined>}\n */\nconst instances = new WeakMap();\n\n/**\n * Use the drag service.\n *\n * ```js\n * import { useDrag } from '@studiometa/js-toolkit/services';\n * const { add, remove, props } = useDrag();\n * const draggableElement = document.querySelector('.draggable');\n * add(draggableElement, (props) => {}, { factor: 0.8 });\n * remove(draggableElement);\n * props(draggableElement);\n * ```\n *\n * @param {HTMLElement} target\n * @param {DragServiceOptions} options\n * @returns {DragService}\n */\nexport default function useDrag(target, options) {\n if (!instances.has(target)) {\n instances.set(target, createDragService(target, options));\n }\n\n return instances.get(target);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["inertiaFinalValue", "useRaf"]
7
+ }
package/services/drag.js CHANGED
@@ -188,3 +188,4 @@ function useDrag(target, options) {
188
188
  export {
189
189
  useDrag as default
190
190
  };
191
+ //# sourceMappingURL=drag.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/drag.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport useRaf from './raf.js';\nimport inertiaFinalValue from '../utils/math/inertiaFinalValue.js';\n// eslint-disable-next-line import/extensions\nimport { isDefined } from '../utils/index.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<DragServiceProps>} DragService\n * @typedef {import('./pointer.js').PointerServiceProps} PointerServiceProps\n * @typedef {'start'|'drag'|'drop'|'inertia'|'stop'} DragLifecycle\n * @typedef {Object} DragServiceProps\n * @property {DragLifecycle} mode\n * The current mode of the dragging logic.\n * @property {HTMLElement} target\n * The target element of the drag.\n * @property {boolean} isGrabbing\n * Whether the user is currently grabbing the targeted element or not.\n * @property {boolean} hasInertia\n * Whether the drag currently has inertia or not.\n * @property {number} x\n * The current horizontal position in the viewport.\n * @property {number} y\n * The current vertical position in the viewport.\n * @property {{ x: number, y: number }} delta\n * The delta between the current position and the last.\n * @property {{ x: number, y: number }} origin\n * The initial position where the dragging started.\n * @property {{ x: number, y: number }} distance\n * The distance from the current position to the origin.\n * @property {{ x: number, y: number }} final\n * The final position that will be reached at the end of the inertia.\n * @typedef {Object} DragServiceOptions\n * @property {number} [dampFactor]\n * @property {number} [dragTreshold]\n */\n\n/**\n * @type {Record<Uppercase<DragLifecycle>, DragLifecycle>}\n */\nconst MODES = {\n START: 'start',\n DRAG: 'drag',\n DROP: 'drop',\n INERTIA: 'inertia',\n STOP: 'stop',\n};\n\nlet count = 0;\nconst events = ['pointerdown', 'pointerup'];\nconst passiveEventOptions = { passive: true };\n\n/**\n * Get the client value for the given axis.\n * @param {MouseEvent|TouchEvent} event\n * @returns {{ x: number, y: number }}\n */\nfunction getEventPosition(event) {\n // @ts-ignore\n const eventOrTouch = isDefined(event.touches) ? event.touches[0] : event;\n return {\n x: eventOrTouch.clientX,\n y: eventOrTouch.clientY,\n };\n}\n\n/**\n * Get drag service.\n * @param {HTMLElement} target\n * @param {Object} [options]\n * @param {number} [options.dampFactor]\n * @param {number} [options.dragTreshold]\n * @returns {DragService}\n */\nfunction createDragService(target, { dampFactor = 0.85, dragTreshold = 10 } = {}) {\n count += 1;\n const id = `drag-${count}`;\n let previousEvent;\n\n /**\n * Test if we should allow click on links and buttons.\n *\n * @private\n * @returns {boolean}\n */\n function shouldPreventClick() {\n return Math.abs(props.distance.x) > dragTreshold || Math.abs(props.distance.y) > dragTreshold;\n }\n\n /**\n * Start the drag.\n * @param {number} x The initial horizontal position.\n * @param {number} y The initial vertical position.\n * @returns {void}\n */\n function start(x, y) {\n if (props.isGrabbing) {\n return;\n }\n\n // Reset state\n props.x = x;\n props.y = y;\n props.origin.x = x;\n props.origin.y = y;\n props.delta.x = 0;\n props.delta.y = 0;\n props.distance.x = 0;\n props.distance.y = 0;\n props.final.x = x;\n props.final.y = y;\n\n props.mode = MODES.START;\n\n // Enable grabbing\n props.isGrabbing = true;\n\n trigger(props);\n\n document.addEventListener('touchmove', handleEvent, passiveEventOptions);\n document.addEventListener('mousemove', handleEvent, passiveEventOptions);\n }\n\n /**\n * Stop the drag, or drop.\n * @returns {void}\n */\n function drop() {\n document.removeEventListener('touchmove', handleEvent);\n document.removeEventListener('mousemove', handleEvent);\n props.isGrabbing = false;\n props.mode = MODES.DROP;\n\n props.hasInertia = true;\n props.final.x = inertiaFinalValue(props.x, props.delta.x, dampFactor);\n props.final.y = inertiaFinalValue(props.y, props.delta.y, dampFactor);\n\n trigger(props);\n\n setTimeout(() => {\n const raf = useRaf();\n raf.remove(id);\n raf.add(id, rafHandler);\n }, 0);\n }\n\n /**\n * Stop the drag.\n */\n function stop() {\n useRaf().remove(id);\n props.isGrabbing = false;\n props.hasInertia = false;\n props.mode = MODES.STOP;\n trigger(props);\n }\n\n /**\n * Raf service handler.\n * @returns {void}\n */\n function rafHandler() {\n if (!props.isGrabbing) {\n props.x += props.delta.x;\n props.y += props.delta.y;\n props.distance.x = props.x - props.origin.x;\n props.distance.y = props.y - props.origin.y;\n\n props.delta.x *= dampFactor;\n props.delta.y *= dampFactor;\n\n if (props.mode !== MODES.INERTIA) {\n props.mode = MODES.INERTIA;\n }\n\n trigger(props);\n\n if (Math.abs(props.delta.x) < 0.1 && Math.abs(props.delta.y) < 0.1) {\n stop();\n }\n }\n }\n\n /**\n * Pointer service handler.\n * @param {TouchEvent|MouseEvent} event\n * @returns {void}\n */\n function drag(event) {\n if (props.isGrabbing) {\n const position = getEventPosition(event);\n props.x = position.x;\n props.y = position.y;\n\n if (previousEvent) {\n const previousPosition = getEventPosition(previousEvent);\n props.delta.x = position.x - previousPosition.x;\n props.delta.y = position.y - previousPosition.y;\n }\n\n props.final.x = position.x;\n props.final.y = position.y;\n props.distance.x = props.x - props.origin.x;\n props.distance.y = props.y - props.origin.y;\n\n if (props.mode !== MODES.DRAG) {\n props.mode = MODES.DRAG;\n }\n\n trigger(props);\n previousEvent = event;\n }\n }\n\n /**\n * Handle any event.\n * @param {MouseEvent|PointerEvent|DragEvent} event\n */\n function handleEvent(event) {\n switch (event.type) {\n case 'dragstart':\n event.preventDefault();\n break;\n case 'click':\n if (shouldPreventClick()) {\n event.stopImmediatePropagation();\n event.stopPropagation();\n event.preventDefault();\n }\n break;\n case 'pointerup':\n drop();\n break;\n case 'touchmove':\n case 'mousemove':\n drag(event);\n break;\n default:\n if (event.button === 0) {\n start(event.x, event.y);\n }\n }\n }\n\n const { add, remove, has, trigger, props } = useService({\n /**\n * @type {DragServiceProps}\n */\n props: {\n target,\n mode: undefined,\n isGrabbing: false,\n hasInertia: false,\n x: 0,\n y: 0,\n delta: {\n x: 0,\n y: 0,\n },\n origin: {\n x: 0,\n y: 0,\n },\n distance: {\n x: 0,\n y: 0,\n },\n final: {\n x: 0,\n y: 0,\n },\n },\n init() {\n events.forEach((event) => {\n target.addEventListener(event, handleEvent, passiveEventOptions);\n });\n target.addEventListener('dragstart', handleEvent, { capture: true });\n target.addEventListener('click', handleEvent, { capture: true });\n },\n kill() {\n events.forEach((event) => {\n target.removeEventListener(event, handleEvent);\n });\n target.removeEventListener('dragstart', handleEvent);\n target.removeEventListener('click', handleEvent);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\n/**\n * @type {WeakMap<HTMLElement, DragService | undefined>}\n */\nconst instances = new WeakMap();\n\n/**\n * Use the drag service.\n *\n * ```js\n * import { useDrag } from '@studiometa/js-toolkit/services';\n * const { add, remove, props } = useDrag();\n * const draggableElement = document.querySelector('.draggable');\n * add(draggableElement, (props) => {}, { factor: 0.8 });\n * remove(draggableElement);\n * props(draggableElement);\n * ```\n *\n * @param {HTMLElement} target\n * @param {DragServiceOptions} options\n * @returns {DragService}\n */\nexport default function useDrag(target, options) {\n if (!instances.has(target)) {\n instances.set(target, createDragService(target, options));\n }\n\n return instances.get(target);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -44,3 +44,4 @@ var import_resize = __toESM(require("./resize.cjs"), 1);
44
44
  var import_scroll = __toESM(require("./scroll.cjs"), 1);
45
45
  var import_service = require("./service.cjs");
46
46
  if (module.exports.default) module.exports = module.exports.default;
47
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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 = ServiceInterface<ResizeServiceProps>;\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": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CA,kBAAmC;AACnC,iBAAkC;AAClC,kBAAmC;AACnC,qBAAsC;AACtC,iBAAkC;AAClC,oBAAqC;AACrC,oBAAqC;AACrC,qBAA2B;",
6
+ "names": []
7
+ }
package/services/index.js CHANGED
@@ -16,3 +16,4 @@ export {
16
16
  default8 as useScroll,
17
17
  useService
18
18
  };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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 = ServiceInterface<ResizeServiceProps>;\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": "AA6CA,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"]
7
+ }
package/services/key.cjs CHANGED
@@ -43,7 +43,7 @@ function createKeyService() {
43
43
  if (!previousEvent) {
44
44
  props.triggered = 0;
45
45
  }
46
- if (props.event.type === "keydown" && (previousEvent == null ? void 0 : previousEvent.type) === "keydown") {
46
+ if (props.event.type === "keydown" && previousEvent?.type === "keydown") {
47
47
  props.triggered += 1;
48
48
  } else {
49
49
  props.triggered = 1;
@@ -90,3 +90,4 @@ function useKey() {
90
90
  return key;
91
91
  }
92
92
  if (module.exports.default) module.exports = module.exports.default;
93
+ //# sourceMappingURL=key.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/key.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport keyCodes from '../utils/keyCodes.js';\n\n/**\n * @returns {Record<keyof keyCodes, false>}\n */\nfunction getInitialKeyCodes() {\n return /** @type {Record<keyof keyCodes, false>} */ (\n Object.fromEntries(Object.keys(keyCodes).map((key) => [key, false]))\n );\n}\n\n/**\n * @typedef {import('./index').ServiceInterface<KeyServiceProps>} KeyService\n * @typedef {Object} KeyServiceProps\n * @property {KeyboardEvent} event\n * @property {number} triggered\n * @property {'up'|'down'|'none'} direction\n * @property {boolean} isUp\n * @property {boolean} isDown\n * @property {boolean} ENTER\n * @property {boolean} SPACE\n * @property {boolean} TAB\n * @property {boolean} ESC\n * @property {boolean} LEFT\n * @property {boolean} UP\n * @property {boolean} RIGHT\n * @property {boolean} DOWN\n */\n\n/**\n * Create key service.\n * @returns {KeyService}\n */\nfunction createKeyService() {\n let previousEvent;\n\n /**\n * Update props\n * @param {KeyboardEvent} event\n * @returns {KeyServiceProps}\n */\n function updateProps(event) {\n props.event = event;\n\n Object.entries(keyCodes).forEach(([name, code]) => {\n props[name] = code === event.keyCode;\n });\n\n if (!previousEvent) {\n props.triggered = 0;\n }\n\n if (props.event.type === 'keydown' && previousEvent?.type === 'keydown') {\n props.triggered += 1;\n } else {\n props.triggered = 1;\n }\n\n previousEvent = props.event;\n\n props.direction = props.event.type === 'keydown' ? 'down' : 'up';\n props.isUp = props.event.type === 'keyup';\n props.isDown = props.event.type === 'keydown';\n\n return props;\n }\n\n /**\n * Desc.\n * @param {KeyboardEvent} event\n * @returns {void}\n */\n function onKey(event) {\n trigger(updateProps(event));\n }\n\n const { add, remove, has, trigger, props } = useService({\n /**\n * @type {KeyServiceProps}\n */\n props: {\n event: null,\n triggered: 0,\n isUp: false,\n isDown: false,\n direction: 'none',\n ...getInitialKeyCodes(),\n },\n init() {\n document.addEventListener('keydown', onKey);\n document.addEventListener('keyup', onKey);\n },\n kill() {\n document.removeEventListener('keydown', onKey);\n document.removeEventListener('keyup', onKey);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet key;\n\n/**\n * Use the keyboard service.\n *\n * @returns {KeyService}\n */\nexport default function useKey() {\n if (!key) {\n key = createKeyService();\n }\n\n return key;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAA2B;AAC3B,sBAAqB;AAKrB,SAAS,qBAAqB;AAC5B,SACE,OAAO,YAAY,OAAO,KAAK,gBAAAA,OAAQ,EAAE,IAAI,CAACC,SAAQ,CAACA,MAAK,KAAK,CAAC,CAAC;AAEvE;AAwBA,SAAS,mBAAmB;AAC1B,MAAI;AAOJ,WAAS,YAAY,OAAO;AAC1B,UAAM,QAAQ;AAEd,WAAO,QAAQ,gBAAAD,OAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,IAAI,MAAM;AACjD,YAAM,QAAQ,SAAS,MAAM;AAAA,IAC/B,CAAC;AAED,QAAI,CAAC,eAAe;AAClB,YAAM,YAAY;AAAA,IACpB;AAEA,QAAI,MAAM,MAAM,SAAS,aAAa,eAAe,SAAS,WAAW;AACvE,YAAM,aAAa;AAAA,IACrB,OAAO;AACL,YAAM,YAAY;AAAA,IACpB;AAEA,oBAAgB,MAAM;AAEtB,UAAM,YAAY,MAAM,MAAM,SAAS,YAAY,SAAS;AAC5D,UAAM,OAAO,MAAM,MAAM,SAAS;AAClC,UAAM,SAAS,MAAM,MAAM,SAAS;AAEpC,WAAO;AAAA,EACT;AAOA,WAAS,MAAM,OAAO;AACpB,YAAQ,YAAY,KAAK,CAAC;AAAA,EAC5B;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,SAAS,MAAM,QAAI,2BAAW;AAAA,IAItD,OAAO;AAAA,MACL,OAAO;AAAA,MACP,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,GAAG,mBAAmB;AAAA,IACxB;AAAA,IACA,OAAO;AACL,eAAS,iBAAiB,WAAW,KAAK;AAC1C,eAAS,iBAAiB,SAAS,KAAK;AAAA,IAC1C;AAAA,IACA,OAAO;AACL,eAAS,oBAAoB,WAAW,KAAK;AAC7C,eAAS,oBAAoB,SAAS,KAAK;AAAA,IAC7C;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAOW,SAAR,SAA0B;AAC/B,MAAI,CAAC,KAAK;AACR,UAAM,iBAAiB;AAAA,EACzB;AAEA,SAAO;AACT;",
6
+ "names": ["keyCodes", "key"]
7
+ }
package/services/key.js CHANGED
@@ -13,7 +13,7 @@ function createKeyService() {
13
13
  if (!previousEvent) {
14
14
  props.triggered = 0;
15
15
  }
16
- if (props.event.type === "keydown" && (previousEvent == null ? void 0 : previousEvent.type) === "keydown") {
16
+ if (props.event.type === "keydown" && previousEvent?.type === "keydown") {
17
17
  props.triggered += 1;
18
18
  } else {
19
19
  props.triggered = 1;
@@ -62,3 +62,4 @@ function useKey() {
62
62
  export {
63
63
  useKey as default
64
64
  };
65
+ //# sourceMappingURL=key.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/key.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport keyCodes from '../utils/keyCodes.js';\n\n/**\n * @returns {Record<keyof keyCodes, false>}\n */\nfunction getInitialKeyCodes() {\n return /** @type {Record<keyof keyCodes, false>} */ (\n Object.fromEntries(Object.keys(keyCodes).map((key) => [key, false]))\n );\n}\n\n/**\n * @typedef {import('./index').ServiceInterface<KeyServiceProps>} KeyService\n * @typedef {Object} KeyServiceProps\n * @property {KeyboardEvent} event\n * @property {number} triggered\n * @property {'up'|'down'|'none'} direction\n * @property {boolean} isUp\n * @property {boolean} isDown\n * @property {boolean} ENTER\n * @property {boolean} SPACE\n * @property {boolean} TAB\n * @property {boolean} ESC\n * @property {boolean} LEFT\n * @property {boolean} UP\n * @property {boolean} RIGHT\n * @property {boolean} DOWN\n */\n\n/**\n * Create key service.\n * @returns {KeyService}\n */\nfunction createKeyService() {\n let previousEvent;\n\n /**\n * Update props\n * @param {KeyboardEvent} event\n * @returns {KeyServiceProps}\n */\n function updateProps(event) {\n props.event = event;\n\n Object.entries(keyCodes).forEach(([name, code]) => {\n props[name] = code === event.keyCode;\n });\n\n if (!previousEvent) {\n props.triggered = 0;\n }\n\n if (props.event.type === 'keydown' && previousEvent?.type === 'keydown') {\n props.triggered += 1;\n } else {\n props.triggered = 1;\n }\n\n previousEvent = props.event;\n\n props.direction = props.event.type === 'keydown' ? 'down' : 'up';\n props.isUp = props.event.type === 'keyup';\n props.isDown = props.event.type === 'keydown';\n\n return props;\n }\n\n /**\n * Desc.\n * @param {KeyboardEvent} event\n * @returns {void}\n */\n function onKey(event) {\n trigger(updateProps(event));\n }\n\n const { add, remove, has, trigger, props } = useService({\n /**\n * @type {KeyServiceProps}\n */\n props: {\n event: null,\n triggered: 0,\n isUp: false,\n isDown: false,\n direction: 'none',\n ...getInitialKeyCodes(),\n },\n init() {\n document.addEventListener('keydown', onKey);\n document.addEventListener('keyup', onKey);\n },\n kill() {\n document.removeEventListener('keydown', onKey);\n document.removeEventListener('keyup', onKey);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet key;\n\n/**\n * Use the keyboard service.\n *\n * @returns {KeyService}\n */\nexport default function useKey() {\n if (!key) {\n key = createKeyService();\n }\n\n return key;\n}\n"],
5
+ "mappings": "AACA,SAAS,kBAAkB;AAC3B,OAAO,cAAc;AAKrB,SAAS,qBAAqB;AAC5B,SACE,OAAO,YAAY,OAAO,KAAK,QAAQ,EAAE,IAAI,CAACA,SAAQ,CAACA,MAAK,KAAK,CAAC,CAAC;AAEvE;AAwBA,SAAS,mBAAmB;AAC1B,MAAI;AAOJ,WAAS,YAAY,OAAO;AAC1B,UAAM,QAAQ;AAEd,WAAO,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,IAAI,MAAM;AACjD,YAAM,QAAQ,SAAS,MAAM;AAAA,IAC/B,CAAC;AAED,QAAI,CAAC,eAAe;AAClB,YAAM,YAAY;AAAA,IACpB;AAEA,QAAI,MAAM,MAAM,SAAS,aAAa,eAAe,SAAS,WAAW;AACvE,YAAM,aAAa;AAAA,IACrB,OAAO;AACL,YAAM,YAAY;AAAA,IACpB;AAEA,oBAAgB,MAAM;AAEtB,UAAM,YAAY,MAAM,MAAM,SAAS,YAAY,SAAS;AAC5D,UAAM,OAAO,MAAM,MAAM,SAAS;AAClC,UAAM,SAAS,MAAM,MAAM,SAAS;AAEpC,WAAO;AAAA,EACT;AAOA,WAAS,MAAM,OAAO;AACpB,YAAQ,YAAY,KAAK,CAAC;AAAA,EAC5B;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,SAAS,MAAM,IAAI,WAAW;AAAA,IAItD,OAAO;AAAA,MACL,OAAO;AAAA,MACP,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,GAAG,mBAAmB;AAAA,IACxB;AAAA,IACA,OAAO;AACL,eAAS,iBAAiB,WAAW,KAAK;AAC1C,eAAS,iBAAiB,SAAS,KAAK;AAAA,IAC1C;AAAA,IACA,OAAO;AACL,eAAS,oBAAoB,WAAW,KAAK;AAC7C,eAAS,oBAAoB,SAAS,KAAK;AAAA,IAC7C;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAOW,SAAR,SAA0B;AAC/B,MAAI,CAAC,KAAK;AACR,UAAM,iBAAiB;AAAA,EACzB;AAEA,SAAO;AACT;",
6
+ "names": ["key"]
7
+ }
package/services/load.cjs CHANGED
@@ -54,3 +54,4 @@ function useLoad() {
54
54
  return load;
55
55
  }
56
56
  if (module.exports.default) module.exports = module.exports.default;
57
+ //# sourceMappingURL=load.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/load.js"],
4
+ "sourcesContent": ["import { useService } from './service.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<LoadServiceProps>} LoadService\n * @typedef {Object} LoadServiceProps\n * @property {DOMHighResTimeStamp} time\n */\n\n/**\n * Get load service.\n * @returns {LoadService}\n */\nfunction createLoadService() {\n /**\n * Trigger on load\n * @returns {void}\n */\n function onLoad() {\n // eslint-disable-next-line no-use-before-define\n props.time = window.performance.now();\n // eslint-disable-next-line no-use-before-define\n trigger(props);\n }\n\n const { add, remove, has, props, trigger } = useService({\n /**\n * @type {LoadServiceProps}\n */\n props: {\n time: performance.now(),\n },\n init() {\n window.addEventListener('load', onLoad);\n },\n kill() {\n window.removeEventListener('load', onLoad);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet load;\n\n/**\n * Use the load service.\n *\n * @returns {LoadService}\n */\nexport default function useLoad() {\n if (!load) {\n load = createLoadService();\n }\n\n return load;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA2B;AAY3B,SAAS,oBAAoB;AAK3B,WAAS,SAAS;AAEhB,UAAM,OAAO,OAAO,YAAY,IAAI;AAEpC,YAAQ,KAAK;AAAA,EACf;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,OAAO,QAAQ,QAAI,2BAAW;AAAA,IAItD,OAAO;AAAA,MACL,MAAM,YAAY,IAAI;AAAA,IACxB;AAAA,IACA,OAAO;AACL,aAAO,iBAAiB,QAAQ,MAAM;AAAA,IACxC;AAAA,IACA,OAAO;AACL,aAAO,oBAAoB,QAAQ,MAAM;AAAA,IAC3C;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAOW,SAAR,UAA2B;AAChC,MAAI,CAAC,MAAM;AACT,WAAO,kBAAkB;AAAA,EAC3B;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
package/services/load.js CHANGED
@@ -32,3 +32,4 @@ function useLoad() {
32
32
  export {
33
33
  useLoad as default
34
34
  };
35
+ //# sourceMappingURL=load.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/load.js"],
4
+ "sourcesContent": ["import { useService } from './service.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<LoadServiceProps>} LoadService\n * @typedef {Object} LoadServiceProps\n * @property {DOMHighResTimeStamp} time\n */\n\n/**\n * Get load service.\n * @returns {LoadService}\n */\nfunction createLoadService() {\n /**\n * Trigger on load\n * @returns {void}\n */\n function onLoad() {\n // eslint-disable-next-line no-use-before-define\n props.time = window.performance.now();\n // eslint-disable-next-line no-use-before-define\n trigger(props);\n }\n\n const { add, remove, has, props, trigger } = useService({\n /**\n * @type {LoadServiceProps}\n */\n props: {\n time: performance.now(),\n },\n init() {\n window.addEventListener('load', onLoad);\n },\n kill() {\n window.removeEventListener('load', onLoad);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet load;\n\n/**\n * Use the load service.\n *\n * @returns {LoadService}\n */\nexport default function useLoad() {\n if (!load) {\n load = createLoadService();\n }\n\n return load;\n}\n"],
5
+ "mappings": "AAAA,SAAS,kBAAkB;AAY3B,SAAS,oBAAoB;AAK3B,WAAS,SAAS;AAEhB,UAAM,OAAO,OAAO,YAAY,IAAI;AAEpC,YAAQ,KAAK;AAAA,EACf;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,OAAO,QAAQ,IAAI,WAAW;AAAA,IAItD,OAAO;AAAA,MACL,MAAM,YAAY,IAAI;AAAA,IACxB;AAAA,IACA,OAAO;AACL,aAAO,iBAAiB,QAAQ,MAAM;AAAA,IACxC;AAAA,IACA,OAAO;AACL,aAAO,oBAAoB,QAAQ,MAAM;AAAA,IAC3C;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAOW,SAAR,UAA2B;AAChC,MAAI,CAAC,MAAM;AACT,WAAO,kBAAkB;AAAA,EAC3B;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -29,15 +29,14 @@ function isTouchEvent(event) {
29
29
  var events = ["mousemove", "touchmove", "mousedown", "touchstart", "mouseup", "touchend"];
30
30
  function createPointerService() {
31
31
  function updateProps(event) {
32
- var _a, _b;
33
32
  props.event = event;
34
33
  const yLast = props.y;
35
34
  const xLast = props.x;
36
- const y = isTouchEvent(event) ? (_a = event.touches[0]) == null ? void 0 : _a.clientY : event.clientY;
35
+ const y = isTouchEvent(event) ? event.touches[0]?.clientY : event.clientY;
37
36
  if (y !== props.y) {
38
37
  props.y = y;
39
38
  }
40
- const x = isTouchEvent(event) ? (_b = event.touches[0]) == null ? void 0 : _b.clientX : event.clientX;
39
+ const x = isTouchEvent(event) ? event.touches[0]?.clientX : event.clientX;
41
40
  if (x !== props.x) {
42
41
  props.x = x;
43
42
  }
@@ -130,3 +129,4 @@ function usePointer() {
130
129
  return pointer;
131
130
  }
132
131
  if (module.exports.default) module.exports = module.exports.default;
132
+ //# sourceMappingURL=pointer.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/pointer.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<PointerServiceProps>} PointerService\n * @typedef {Object} PointerServiceProps\n * @property {MouseEvent | TouchEvent} event\n * @property {boolean} isDown\n * @property {number} x\n * @property {number} y\n * @property {{ x: boolean, y: boolean }} changed\n * @property {{ x: number, y: number }} last\n * @property {{ x: number, y: number }} delta\n * @property {{ x: number, y: number }} progress\n * @property {{ x: number, y: number }} max\n */\n\n/**\n * Test if an event is an instance of TouchEvent.\n *\n * @param {TouchEvent|MouseEvent} event The event instance to test.\n * @returns {boolean} Is it a TouchEvent?\n */\nfunction isTouchEvent(event) {\n return typeof TouchEvent !== 'undefined' && event instanceof TouchEvent;\n}\n\nconst events = ['mousemove', 'touchmove', 'mousedown', 'touchstart', 'mouseup', 'touchend'];\n\n/**\n * Get pointer service.\n * @returns {PointerService}\n */\nfunction createPointerService() {\n /**\n * Update the pointer positions.\n *\n * @param {MouseEvent|TouchEvent} event The event object.\n * @returns {PointerServiceProps}\n */\n function updateProps(event) {\n props.event = event;\n const yLast = props.y;\n const xLast = props.x;\n\n // Check pointer Y\n // We either get data from a touch event `event.touches[0].clientY` or from\n // a mouse event `event.clientY`.\n const y = isTouchEvent(event)\n ? /** @type {TouchEvent} */ (event).touches[0]?.clientY\n : /** @type {MouseEvent} */ (event).clientY;\n if (y !== props.y) {\n props.y = y;\n }\n\n // Check pointer X\n // We either get data from a touch event `event.touches[0].clientX` or from\n // a mouse event `event.clientX`.\n const x = isTouchEvent(event)\n ? /** @type {TouchEvent} */ (event).touches[0]?.clientX\n : /** @type {MouseEvent} */ (event).clientX;\n if (x !== props.x) {\n props.x = x;\n }\n\n props.changed.x = props.x !== xLast;\n props.changed.y = props.y !== yLast;\n\n props.last.x = xLast;\n props.last.y = yLast;\n\n props.delta.x = props.x - xLast;\n props.delta.y = props.y - yLast;\n\n props.max.x = window.innerWidth;\n props.max.y = window.innerHeight;\n\n props.progress.x = props.x / props.max.x;\n props.progress.y = props.y / props.max.y;\n\n return props;\n }\n\n /**\n * Handle events.\n * @param {MouseEvent|TouchEvent} event The event object.\n */\n function handleEvent(event) {\n // eslint-disable-next-line default-case\n switch (event.type) {\n case 'mouseenter':\n case 'mousemove':\n case 'touchmove':\n trigger(updateProps(event));\n break;\n case 'mousedown':\n case 'touchstart':\n props.isDown = true;\n trigger(props);\n break;\n case 'mouseup':\n case 'touchend':\n props.isDown = false;\n trigger(props);\n break;\n }\n }\n\n const { add, remove, has, trigger, props } = useService({\n /**\n * @type {PointerServiceProps}\n */\n props: {\n event: null,\n isDown: false,\n x: window.innerWidth / 2,\n y: window.innerHeight / 2,\n changed: {\n x: false,\n y: false,\n },\n last: {\n x: window.innerWidth / 2,\n y: window.innerHeight / 2,\n },\n delta: {\n x: 0,\n y: 0,\n },\n progress: {\n x: 0.5,\n y: 0.5,\n },\n max: {\n x: window.innerWidth,\n y: window.innerHeight,\n },\n },\n init() {\n document.documentElement.addEventListener('mouseenter', handleEvent, {\n once: true,\n capture: true,\n });\n\n const options = { passive: true, capture: true };\n events.forEach((event) => {\n document.addEventListener(event, handleEvent, options);\n });\n },\n kill() {\n events.forEach((event) => {\n document.removeEventListener(event, handleEvent);\n });\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet pointer;\n\n/**\n * Use the pointer service.\n *\n * @todo Add element as parameter to get the pointer position relatively from.\n * @returns {PointerService}\n */\nexport default function usePointer() {\n if (!pointer) {\n pointer = createPointerService();\n }\n return pointer;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -5,15 +5,14 @@ function isTouchEvent(event) {
5
5
  const events = ["mousemove", "touchmove", "mousedown", "touchstart", "mouseup", "touchend"];
6
6
  function createPointerService() {
7
7
  function updateProps(event) {
8
- var _a, _b;
9
8
  props.event = event;
10
9
  const yLast = props.y;
11
10
  const xLast = props.x;
12
- const y = isTouchEvent(event) ? (_a = event.touches[0]) == null ? void 0 : _a.clientY : event.clientY;
11
+ const y = isTouchEvent(event) ? event.touches[0]?.clientY : event.clientY;
13
12
  if (y !== props.y) {
14
13
  props.y = y;
15
14
  }
16
- const x = isTouchEvent(event) ? (_b = event.touches[0]) == null ? void 0 : _b.clientX : event.clientX;
15
+ const x = isTouchEvent(event) ? event.touches[0]?.clientX : event.clientX;
17
16
  if (x !== props.x) {
18
17
  props.x = x;
19
18
  }
@@ -108,3 +107,4 @@ function usePointer() {
108
107
  export {
109
108
  usePointer as default
110
109
  };
110
+ //# sourceMappingURL=pointer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/pointer.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<PointerServiceProps>} PointerService\n * @typedef {Object} PointerServiceProps\n * @property {MouseEvent | TouchEvent} event\n * @property {boolean} isDown\n * @property {number} x\n * @property {number} y\n * @property {{ x: boolean, y: boolean }} changed\n * @property {{ x: number, y: number }} last\n * @property {{ x: number, y: number }} delta\n * @property {{ x: number, y: number }} progress\n * @property {{ x: number, y: number }} max\n */\n\n/**\n * Test if an event is an instance of TouchEvent.\n *\n * @param {TouchEvent|MouseEvent} event The event instance to test.\n * @returns {boolean} Is it a TouchEvent?\n */\nfunction isTouchEvent(event) {\n return typeof TouchEvent !== 'undefined' && event instanceof TouchEvent;\n}\n\nconst events = ['mousemove', 'touchmove', 'mousedown', 'touchstart', 'mouseup', 'touchend'];\n\n/**\n * Get pointer service.\n * @returns {PointerService}\n */\nfunction createPointerService() {\n /**\n * Update the pointer positions.\n *\n * @param {MouseEvent|TouchEvent} event The event object.\n * @returns {PointerServiceProps}\n */\n function updateProps(event) {\n props.event = event;\n const yLast = props.y;\n const xLast = props.x;\n\n // Check pointer Y\n // We either get data from a touch event `event.touches[0].clientY` or from\n // a mouse event `event.clientY`.\n const y = isTouchEvent(event)\n ? /** @type {TouchEvent} */ (event).touches[0]?.clientY\n : /** @type {MouseEvent} */ (event).clientY;\n if (y !== props.y) {\n props.y = y;\n }\n\n // Check pointer X\n // We either get data from a touch event `event.touches[0].clientX` or from\n // a mouse event `event.clientX`.\n const x = isTouchEvent(event)\n ? /** @type {TouchEvent} */ (event).touches[0]?.clientX\n : /** @type {MouseEvent} */ (event).clientX;\n if (x !== props.x) {\n props.x = x;\n }\n\n props.changed.x = props.x !== xLast;\n props.changed.y = props.y !== yLast;\n\n props.last.x = xLast;\n props.last.y = yLast;\n\n props.delta.x = props.x - xLast;\n props.delta.y = props.y - yLast;\n\n props.max.x = window.innerWidth;\n props.max.y = window.innerHeight;\n\n props.progress.x = props.x / props.max.x;\n props.progress.y = props.y / props.max.y;\n\n return props;\n }\n\n /**\n * Handle events.\n * @param {MouseEvent|TouchEvent} event The event object.\n */\n function handleEvent(event) {\n // eslint-disable-next-line default-case\n switch (event.type) {\n case 'mouseenter':\n case 'mousemove':\n case 'touchmove':\n trigger(updateProps(event));\n break;\n case 'mousedown':\n case 'touchstart':\n props.isDown = true;\n trigger(props);\n break;\n case 'mouseup':\n case 'touchend':\n props.isDown = false;\n trigger(props);\n break;\n }\n }\n\n const { add, remove, has, trigger, props } = useService({\n /**\n * @type {PointerServiceProps}\n */\n props: {\n event: null,\n isDown: false,\n x: window.innerWidth / 2,\n y: window.innerHeight / 2,\n changed: {\n x: false,\n y: false,\n },\n last: {\n x: window.innerWidth / 2,\n y: window.innerHeight / 2,\n },\n delta: {\n x: 0,\n y: 0,\n },\n progress: {\n x: 0.5,\n y: 0.5,\n },\n max: {\n x: window.innerWidth,\n y: window.innerHeight,\n },\n },\n init() {\n document.documentElement.addEventListener('mouseenter', handleEvent, {\n once: true,\n capture: true,\n });\n\n const options = { passive: true, capture: true };\n events.forEach((event) => {\n document.addEventListener(event, handleEvent, options);\n });\n },\n kill() {\n events.forEach((event) => {\n document.removeEventListener(event, handleEvent);\n });\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet pointer;\n\n/**\n * Use the pointer service.\n *\n * @todo Add element as parameter to get the pointer position relatively from.\n * @returns {PointerService}\n */\nexport default function usePointer() {\n if (!pointer) {\n pointer = createPointerService();\n }\n return pointer;\n}\n"],
5
+ "mappings": "AACA,SAAS,kBAAkB;AAsB3B,SAAS,aAAa,OAAO;AAC3B,SAAO,OAAO,eAAe,eAAe,iBAAiB;AAC/D;AAEA,MAAM,SAAS,CAAC,aAAa,aAAa,aAAa,cAAc,WAAW,UAAU;AAM1F,SAAS,uBAAuB;AAO9B,WAAS,YAAY,OAAO;AAC1B,UAAM,QAAQ;AACd,UAAM,QAAQ,MAAM;AACpB,UAAM,QAAQ,MAAM;AAKpB,UAAM,IAAI,aAAa,KAAK,IACG,MAAO,QAAQ,IAAI,UACnB,MAAO;AACtC,QAAI,MAAM,MAAM,GAAG;AACjB,YAAM,IAAI;AAAA,IACZ;AAKA,UAAM,IAAI,aAAa,KAAK,IACG,MAAO,QAAQ,IAAI,UACnB,MAAO;AACtC,QAAI,MAAM,MAAM,GAAG;AACjB,YAAM,IAAI;AAAA,IACZ;AAEA,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,QAAQ,IAAI,MAAM,MAAM;AAE9B,UAAM,KAAK,IAAI;AACf,UAAM,KAAK,IAAI;AAEf,UAAM,MAAM,IAAI,MAAM,IAAI;AAC1B,UAAM,MAAM,IAAI,MAAM,IAAI;AAE1B,UAAM,IAAI,IAAI,OAAO;AACrB,UAAM,IAAI,IAAI,OAAO;AAErB,UAAM,SAAS,IAAI,MAAM,IAAI,MAAM,IAAI;AACvC,UAAM,SAAS,IAAI,MAAM,IAAI,MAAM,IAAI;AAEvC,WAAO;AAAA,EACT;AAMA,WAAS,YAAY,OAAO;AAE1B,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,gBAAQ,YAAY,KAAK,CAAC;AAC1B;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,cAAM,SAAS;AACf,gBAAQ,KAAK;AACb;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,cAAM,SAAS;AACf,gBAAQ,KAAK;AACb;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,SAAS,MAAM,IAAI,WAAW;AAAA,IAItD,OAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,GAAG,OAAO,aAAa;AAAA,MACvB,GAAG,OAAO,cAAc;AAAA,MACxB,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,GAAG,OAAO,aAAa;AAAA,QACvB,GAAG,OAAO,cAAc;AAAA,MAC1B;AAAA,MACA,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,UAAU;AAAA,QACR,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,KAAK;AAAA,QACH,GAAG,OAAO;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,IACF;AAAA,IACA,OAAO;AACL,eAAS,gBAAgB,iBAAiB,cAAc,aAAa;AAAA,QACnE,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAED,YAAM,UAAU,EAAE,SAAS,MAAM,SAAS,KAAK;AAC/C,aAAO,QAAQ,CAAC,UAAU;AACxB,iBAAS,iBAAiB,OAAO,aAAa,OAAO;AAAA,MACvD,CAAC;AAAA,IACH;AAAA,IACA,OAAO;AACL,aAAO,QAAQ,CAAC,UAAU;AACxB,iBAAS,oBAAoB,OAAO,WAAW;AAAA,MACjD,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAQW,SAAR,aAA8B;AACnC,MAAI,CAAC,SAAS;AACZ,cAAU,qBAAqB;AAAA,EACjC;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
package/services/raf.cjs CHANGED
@@ -77,3 +77,4 @@ function useRaf() {
77
77
  return raf;
78
78
  }
79
79
  if (module.exports.default) module.exports = module.exports.default;
80
+ //# sourceMappingURL=raf.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/raf.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport { getRaf as getRequestAnimationFrame } from '../utils/nextFrame.js';\nimport { useScheduler } from '../utils/scheduler.js';\nimport { isFunction } from '../utils/is.js';\n\nconst scheduler = useScheduler(['update', 'render']);\n\n/**\n * @typedef {import('./index').ServiceInterface<RafServiceProps>} RafService\n * @typedef {Object} RafServiceProps\n * @property {DOMHighResTimeStamp} time\n */\n\n/**\n * Create raf service.\n * @returns {RafService} [description]\n */\nfunction createRafService() {\n let isTicking = false;\n const RAF = getRequestAnimationFrame();\n\n /**\n * Trigger callbacks.\n * @param {RafServiceProps} props\n * @returns {void}\n */\n function trigger(props) {\n callbacks.forEach(function forEachCallback(callback) {\n scheduler.update(function rafUpdate() {\n const render = callback(props);\n if (isFunction(render)) {\n scheduler.render(function rafRender() {\n render(props);\n });\n }\n });\n });\n }\n\n /**\n * Loop;\n * @returns {void}\n */\n function loop() {\n // eslint-disable-next-line no-use-before-define\n props.time = performance.now();\n trigger(props);\n\n if (!isTicking) {\n return;\n }\n\n RAF(loop);\n }\n\n const { add, remove, has, props, callbacks } = useService({\n /**\n * @type {RafServiceProps}\n */\n props: {\n time: performance.now(),\n },\n init() {\n isTicking = true;\n RAF(loop);\n },\n kill() {\n isTicking = false;\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet raf;\n\n/**\n * Use the RequestAnimationFrame (raf) service.\n *\n * @returns {RafService}\n */\nexport default function useRaf() {\n if (!raf) {\n raf = createRafService();\n }\n\n return raf;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAA2B;AAC3B,uBAAmD;AACnD,uBAA6B;AAC7B,gBAA2B;AAE3B,IAAM,gBAAY,+BAAa,CAAC,UAAU,QAAQ,CAAC;AAYnD,SAAS,mBAAmB;AAC1B,MAAI,YAAY;AAChB,QAAM,UAAM,iBAAAA,QAAyB;AAOrC,WAAS,QAAQC,QAAO;AACtB,cAAU,QAAQ,SAAS,gBAAgB,UAAU;AACnD,gBAAU,OAAO,SAAS,YAAY;AACpC,cAAM,SAAS,SAASA,MAAK;AAC7B,gBAAI,sBAAW,MAAM,GAAG;AACtB,oBAAU,OAAO,SAAS,YAAY;AACpC,mBAAOA,MAAK;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAMA,WAAS,OAAO;AAEd,UAAM,OAAO,YAAY,IAAI;AAC7B,YAAQ,KAAK;AAEb,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,QAAI,IAAI;AAAA,EACV;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,OAAO,UAAU,QAAI,2BAAW;AAAA,IAIxD,OAAO;AAAA,MACL,MAAM,YAAY,IAAI;AAAA,IACxB;AAAA,IACA,OAAO;AACL,kBAAY;AACZ,UAAI,IAAI;AAAA,IACV;AAAA,IACA,OAAO;AACL,kBAAY;AAAA,IACd;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAOW,SAAR,SAA0B;AAC/B,MAAI,CAAC,KAAK;AACR,UAAM,iBAAiB;AAAA,EACzB;AAEA,SAAO;AACT;",
6
+ "names": ["getRequestAnimationFrame", "props"]
7
+ }