@studiometa/js-toolkit 2.6.0 → 2.6.3

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 (387) hide show
  1. package/Base/index.cjs +41 -41
  2. package/Base/index.cjs.map +7 -0
  3. package/Base/index.js +58 -64
  4. package/Base/index.js.map +7 -0
  5. package/Base/managers/AbstractManager.cjs +6 -10
  6. package/Base/managers/AbstractManager.cjs.map +7 -0
  7. package/Base/managers/AbstractManager.js +6 -11
  8. package/Base/managers/AbstractManager.js.map +7 -0
  9. package/Base/managers/ChildrenManager.cjs +3 -11
  10. package/Base/managers/ChildrenManager.cjs.map +7 -0
  11. package/Base/managers/ChildrenManager.js +3 -12
  12. package/Base/managers/ChildrenManager.js.map +7 -0
  13. package/Base/managers/EventsManager.cjs +57 -61
  14. package/Base/managers/EventsManager.cjs.map +7 -0
  15. package/Base/managers/EventsManager.js +57 -62
  16. package/Base/managers/EventsManager.js.map +7 -0
  17. package/Base/managers/OptionsManager.cjs +8 -14
  18. package/Base/managers/OptionsManager.cjs.map +7 -0
  19. package/Base/managers/OptionsManager.js +8 -15
  20. package/Base/managers/OptionsManager.js.map +7 -0
  21. package/Base/managers/RefsManager.cjs +2 -2
  22. package/Base/managers/RefsManager.cjs.map +7 -0
  23. package/Base/managers/RefsManager.js +2 -2
  24. package/Base/managers/RefsManager.js.map +7 -0
  25. package/Base/managers/ResponsiveOptionsManager.cjs +1 -0
  26. package/Base/managers/ResponsiveOptionsManager.cjs.map +7 -0
  27. package/Base/managers/ResponsiveOptionsManager.js +1 -0
  28. package/Base/managers/ResponsiveOptionsManager.js.map +7 -0
  29. package/Base/managers/ServicesManager.cjs +3 -12
  30. package/Base/managers/ServicesManager.cjs.map +7 -0
  31. package/Base/managers/ServicesManager.js +3 -13
  32. package/Base/managers/ServicesManager.js.map +7 -0
  33. package/Base/types.cjs +1 -0
  34. package/Base/types.cjs.map +7 -0
  35. package/Base/types.js +1 -0
  36. package/Base/types.js.map +7 -0
  37. package/Base/utils.cjs +1 -0
  38. package/Base/utils.cjs.map +7 -0
  39. package/Base/utils.js +1 -0
  40. package/Base/utils.js.map +7 -0
  41. package/decorators/index.cjs +1 -0
  42. package/decorators/index.cjs.map +7 -0
  43. package/decorators/index.js +1 -0
  44. package/decorators/index.js.map +7 -0
  45. package/decorators/withBreakpointManager.cjs +1 -0
  46. package/decorators/withBreakpointManager.cjs.map +7 -0
  47. package/decorators/withBreakpointManager.js +1 -0
  48. package/decorators/withBreakpointManager.js.map +7 -0
  49. package/decorators/withBreakpointObserver.cjs +10 -15
  50. package/decorators/withBreakpointObserver.cjs.map +7 -0
  51. package/decorators/withBreakpointObserver.js +10 -16
  52. package/decorators/withBreakpointObserver.js.map +7 -0
  53. package/decorators/withDrag.cjs +5 -9
  54. package/decorators/withDrag.cjs.map +7 -0
  55. package/decorators/withDrag.js +5 -10
  56. package/decorators/withDrag.js.map +7 -0
  57. package/decorators/withExtraConfig.cjs +2 -6
  58. package/decorators/withExtraConfig.cjs.map +7 -0
  59. package/decorators/withExtraConfig.js +2 -7
  60. package/decorators/withExtraConfig.js.map +7 -0
  61. package/decorators/withFreezedOptions.cjs +2 -9
  62. package/decorators/withFreezedOptions.cjs.map +7 -0
  63. package/decorators/withFreezedOptions.js +2 -10
  64. package/decorators/withFreezedOptions.js.map +7 -0
  65. package/decorators/withIntersectionObserver.cjs +11 -16
  66. package/decorators/withIntersectionObserver.cjs.map +7 -0
  67. package/decorators/withIntersectionObserver.js +11 -17
  68. package/decorators/withIntersectionObserver.js.map +7 -0
  69. package/decorators/withMountWhenInView.cjs +11 -16
  70. package/decorators/withMountWhenInView.cjs.map +7 -0
  71. package/decorators/withMountWhenInView.js +11 -17
  72. package/decorators/withMountWhenInView.js.map +7 -0
  73. package/decorators/withResponsiveOptions.cjs +1 -0
  74. package/decorators/withResponsiveOptions.cjs.map +7 -0
  75. package/decorators/withResponsiveOptions.js +1 -0
  76. package/decorators/withResponsiveOptions.js.map +7 -0
  77. package/decorators/withScrolledInView.cjs +45 -50
  78. package/decorators/withScrolledInView.cjs.map +7 -0
  79. package/decorators/withScrolledInView.js +45 -51
  80. package/decorators/withScrolledInView.js.map +7 -0
  81. package/decorators/withVue2.cjs +9 -15
  82. package/decorators/withVue2.cjs.map +7 -0
  83. package/decorators/withVue2.js +9 -16
  84. package/decorators/withVue2.js.map +7 -0
  85. package/helpers/createApp.cjs +1 -0
  86. package/helpers/createApp.cjs.map +7 -0
  87. package/helpers/createApp.js +1 -0
  88. package/helpers/createApp.js.map +7 -0
  89. package/helpers/getClosestParent.cjs +1 -0
  90. package/helpers/getClosestParent.cjs.map +7 -0
  91. package/helpers/getClosestParent.js +1 -0
  92. package/helpers/getClosestParent.js.map +7 -0
  93. package/helpers/getDirectChildren.cjs +1 -0
  94. package/helpers/getDirectChildren.cjs.map +7 -0
  95. package/helpers/getDirectChildren.js +1 -0
  96. package/helpers/getDirectChildren.js.map +7 -0
  97. package/helpers/getInstanceFromElement.cjs +1 -0
  98. package/helpers/getInstanceFromElement.cjs.map +7 -0
  99. package/helpers/getInstanceFromElement.js +1 -0
  100. package/helpers/getInstanceFromElement.js.map +7 -0
  101. package/helpers/importOnInteraction.cjs +2 -1
  102. package/helpers/importOnInteraction.cjs.map +7 -0
  103. package/helpers/importOnInteraction.js +2 -1
  104. package/helpers/importOnInteraction.js.map +7 -0
  105. package/helpers/importWhenIdle.cjs +1 -0
  106. package/helpers/importWhenIdle.cjs.map +7 -0
  107. package/helpers/importWhenIdle.js +1 -0
  108. package/helpers/importWhenIdle.js.map +7 -0
  109. package/helpers/importWhenVisible.cjs +2 -1
  110. package/helpers/importWhenVisible.cjs.map +7 -0
  111. package/helpers/importWhenVisible.js +2 -1
  112. package/helpers/importWhenVisible.js.map +7 -0
  113. package/helpers/index.cjs +1 -0
  114. package/helpers/index.cjs.map +7 -0
  115. package/helpers/index.js +1 -0
  116. package/helpers/index.js.map +7 -0
  117. package/helpers/utils.cjs +1 -0
  118. package/helpers/utils.cjs.map +7 -0
  119. package/helpers/utils.js +1 -0
  120. package/helpers/utils.js.map +7 -0
  121. package/index.cjs +1 -0
  122. package/index.cjs.map +7 -0
  123. package/index.js +1 -0
  124. package/index.js.map +7 -0
  125. package/package.json +1 -1
  126. package/services/drag.cjs +1 -0
  127. package/services/drag.cjs.map +7 -0
  128. package/services/drag.js +1 -0
  129. package/services/drag.js.map +7 -0
  130. package/services/index.cjs +1 -0
  131. package/services/index.cjs.map +7 -0
  132. package/services/index.js +1 -0
  133. package/services/index.js.map +7 -0
  134. package/services/key.cjs +2 -1
  135. package/services/key.cjs.map +7 -0
  136. package/services/key.js +2 -1
  137. package/services/key.js.map +7 -0
  138. package/services/load.cjs +1 -0
  139. package/services/load.cjs.map +7 -0
  140. package/services/load.js +1 -0
  141. package/services/load.js.map +7 -0
  142. package/services/pointer.cjs +3 -3
  143. package/services/pointer.cjs.map +7 -0
  144. package/services/pointer.js +3 -3
  145. package/services/pointer.js.map +7 -0
  146. package/services/raf.cjs +1 -0
  147. package/services/raf.cjs.map +7 -0
  148. package/services/raf.js +1 -0
  149. package/services/raf.js.map +7 -0
  150. package/services/resize.cjs +1 -0
  151. package/services/resize.cjs.map +7 -0
  152. package/services/resize.js +1 -0
  153. package/services/resize.js.map +7 -0
  154. package/services/scroll.cjs +1 -0
  155. package/services/scroll.cjs.map +7 -0
  156. package/services/scroll.js +1 -0
  157. package/services/scroll.js.map +7 -0
  158. package/services/service.cjs +1 -0
  159. package/services/service.cjs.map +7 -0
  160. package/services/service.js +1 -0
  161. package/services/service.js.map +7 -0
  162. package/utils/collide/boundingRectToCircle.cjs +1 -0
  163. package/utils/collide/boundingRectToCircle.cjs.map +7 -0
  164. package/utils/collide/boundingRectToCircle.js +1 -0
  165. package/utils/collide/boundingRectToCircle.js.map +7 -0
  166. package/utils/collide/collideCircleCircle.cjs +1 -0
  167. package/utils/collide/collideCircleCircle.cjs.map +7 -0
  168. package/utils/collide/collideCircleCircle.js +1 -0
  169. package/utils/collide/collideCircleCircle.js.map +7 -0
  170. package/utils/collide/collideCircleRect.cjs +1 -0
  171. package/utils/collide/collideCircleRect.cjs.map +7 -0
  172. package/utils/collide/collideCircleRect.js +1 -0
  173. package/utils/collide/collideCircleRect.js.map +7 -0
  174. package/utils/collide/collidePointCircle.cjs +1 -0
  175. package/utils/collide/collidePointCircle.cjs.map +7 -0
  176. package/utils/collide/collidePointCircle.js +1 -0
  177. package/utils/collide/collidePointCircle.js.map +7 -0
  178. package/utils/collide/collidePointRect.cjs +1 -0
  179. package/utils/collide/collidePointRect.cjs.map +7 -0
  180. package/utils/collide/collidePointRect.js +1 -0
  181. package/utils/collide/collidePointRect.js.map +7 -0
  182. package/utils/collide/collideRectRect.cjs +1 -0
  183. package/utils/collide/collideRectRect.cjs.map +7 -0
  184. package/utils/collide/collideRectRect.js +1 -0
  185. package/utils/collide/collideRectRect.js.map +7 -0
  186. package/utils/collide/index.cjs +1 -0
  187. package/utils/collide/index.cjs.map +7 -0
  188. package/utils/collide/index.js +1 -0
  189. package/utils/collide/index.js.map +7 -0
  190. package/utils/css/animate.cjs +10 -13
  191. package/utils/css/animate.cjs.map +7 -0
  192. package/utils/css/animate.js +10 -13
  193. package/utils/css/animate.js.map +7 -0
  194. package/utils/css/classes.cjs +2 -1
  195. package/utils/css/classes.cjs.map +7 -0
  196. package/utils/css/classes.js +2 -1
  197. package/utils/css/classes.js.map +7 -0
  198. package/utils/css/getOffsetSizes.cjs +1 -0
  199. package/utils/css/getOffsetSizes.cjs.map +7 -0
  200. package/utils/css/getOffsetSizes.js +1 -0
  201. package/utils/css/getOffsetSizes.js.map +7 -0
  202. package/utils/css/index.cjs +1 -0
  203. package/utils/css/index.cjs.map +7 -0
  204. package/utils/css/index.js +1 -0
  205. package/utils/css/index.js.map +7 -0
  206. package/utils/css/matrix.cjs +2 -2
  207. package/utils/css/matrix.cjs.map +7 -0
  208. package/utils/css/matrix.js +2 -2
  209. package/utils/css/matrix.js.map +7 -0
  210. package/utils/css/styles.cjs +1 -0
  211. package/utils/css/styles.cjs.map +7 -0
  212. package/utils/css/styles.js +1 -0
  213. package/utils/css/styles.js.map +7 -0
  214. package/utils/css/transform.cjs +2 -2
  215. package/utils/css/transform.cjs.map +7 -0
  216. package/utils/css/transform.js +2 -2
  217. package/utils/css/transform.js.map +7 -0
  218. package/utils/css/transition.cjs +3 -7
  219. package/utils/css/transition.cjs.map +7 -0
  220. package/utils/css/transition.js +3 -8
  221. package/utils/css/transition.js.map +7 -0
  222. package/utils/css/utils.cjs +1 -0
  223. package/utils/css/utils.cjs.map +7 -0
  224. package/utils/css/utils.js +1 -0
  225. package/utils/css/utils.js.map +7 -0
  226. package/utils/debounce.cjs +1 -0
  227. package/utils/debounce.cjs.map +7 -0
  228. package/utils/debounce.js +1 -0
  229. package/utils/debounce.js.map +7 -0
  230. package/utils/focusTrap.cjs +1 -0
  231. package/utils/focusTrap.cjs.map +7 -0
  232. package/utils/focusTrap.js +1 -0
  233. package/utils/focusTrap.js.map +7 -0
  234. package/utils/has.cjs +1 -0
  235. package/utils/has.cjs.map +7 -0
  236. package/utils/has.js +1 -0
  237. package/utils/has.js.map +7 -0
  238. package/utils/history.cjs +1 -0
  239. package/utils/history.cjs.map +7 -0
  240. package/utils/history.js +1 -0
  241. package/utils/history.js.map +7 -0
  242. package/utils/index.cjs +1 -0
  243. package/utils/index.cjs.map +7 -0
  244. package/utils/index.js +1 -0
  245. package/utils/index.js.map +7 -0
  246. package/utils/is.cjs +1 -0
  247. package/utils/is.cjs.map +7 -0
  248. package/utils/is.js +1 -0
  249. package/utils/is.js.map +7 -0
  250. package/utils/keyCodes.cjs +1 -0
  251. package/utils/keyCodes.cjs.map +7 -0
  252. package/utils/keyCodes.js +1 -0
  253. package/utils/keyCodes.js.map +7 -0
  254. package/utils/math/clamp.cjs +1 -0
  255. package/utils/math/clamp.cjs.map +7 -0
  256. package/utils/math/clamp.js +1 -0
  257. package/utils/math/clamp.js.map +7 -0
  258. package/utils/math/clamp01.cjs +1 -0
  259. package/utils/math/clamp01.cjs.map +7 -0
  260. package/utils/math/clamp01.js +1 -0
  261. package/utils/math/clamp01.js.map +7 -0
  262. package/utils/math/createEases.cjs +1 -0
  263. package/utils/math/createEases.cjs.map +7 -0
  264. package/utils/math/createEases.js +1 -0
  265. package/utils/math/createEases.js.map +7 -0
  266. package/utils/math/damp.cjs +1 -0
  267. package/utils/math/damp.cjs.map +7 -0
  268. package/utils/math/damp.js +1 -0
  269. package/utils/math/damp.js.map +7 -0
  270. package/utils/math/ease.cjs +1 -0
  271. package/utils/math/ease.cjs.map +7 -0
  272. package/utils/math/ease.js +1 -0
  273. package/utils/math/ease.js.map +7 -0
  274. package/utils/math/index.cjs +1 -0
  275. package/utils/math/index.cjs.map +7 -0
  276. package/utils/math/index.js +1 -0
  277. package/utils/math/index.js.map +7 -0
  278. package/utils/math/inertiaFinalValue.cjs +1 -0
  279. package/utils/math/inertiaFinalValue.cjs.map +7 -0
  280. package/utils/math/inertiaFinalValue.js +1 -0
  281. package/utils/math/inertiaFinalValue.js.map +7 -0
  282. package/utils/math/lerp.cjs +1 -0
  283. package/utils/math/lerp.cjs.map +7 -0
  284. package/utils/math/lerp.js +1 -0
  285. package/utils/math/lerp.js.map +7 -0
  286. package/utils/math/map.cjs +1 -0
  287. package/utils/math/map.cjs.map +7 -0
  288. package/utils/math/map.js +1 -0
  289. package/utils/math/map.js.map +7 -0
  290. package/utils/math/round.cjs +1 -0
  291. package/utils/math/round.cjs.map +7 -0
  292. package/utils/math/round.js +1 -0
  293. package/utils/math/round.js.map +7 -0
  294. package/utils/memoize.cjs +1 -0
  295. package/utils/memoize.cjs.map +7 -0
  296. package/utils/memoize.js +1 -0
  297. package/utils/memoize.js.map +7 -0
  298. package/utils/nextFrame.cjs +1 -0
  299. package/utils/nextFrame.cjs.map +7 -0
  300. package/utils/nextFrame.js +1 -0
  301. package/utils/nextFrame.js.map +7 -0
  302. package/utils/nextMicrotask.cjs +1 -0
  303. package/utils/nextMicrotask.cjs.map +7 -0
  304. package/utils/nextMicrotask.js +1 -0
  305. package/utils/nextMicrotask.js.map +7 -0
  306. package/utils/nextTick.cjs +1 -0
  307. package/utils/nextTick.cjs.map +7 -0
  308. package/utils/nextTick.js +1 -0
  309. package/utils/nextTick.js.map +7 -0
  310. package/utils/noop.cjs +1 -0
  311. package/utils/noop.cjs.map +7 -0
  312. package/utils/noop.js +1 -0
  313. package/utils/noop.js.map +7 -0
  314. package/utils/object/autoBind.cjs +1 -0
  315. package/utils/object/autoBind.cjs.map +7 -0
  316. package/utils/object/autoBind.js +1 -0
  317. package/utils/object/autoBind.js.map +7 -0
  318. package/utils/object/getAllProperties.cjs +1 -0
  319. package/utils/object/getAllProperties.cjs.map +7 -0
  320. package/utils/object/getAllProperties.js +1 -0
  321. package/utils/object/getAllProperties.js.map +7 -0
  322. package/utils/object/index.cjs +1 -0
  323. package/utils/object/index.cjs.map +7 -0
  324. package/utils/object/index.js +1 -0
  325. package/utils/object/index.js.map +7 -0
  326. package/utils/scheduler.cjs +1 -0
  327. package/utils/scheduler.cjs.map +7 -0
  328. package/utils/scheduler.js +1 -0
  329. package/utils/scheduler.js.map +7 -0
  330. package/utils/scrollTo.cjs +1 -0
  331. package/utils/scrollTo.cjs.map +7 -0
  332. package/utils/scrollTo.d.ts +1 -1
  333. package/utils/scrollTo.js +1 -0
  334. package/utils/scrollTo.js.map +7 -0
  335. package/utils/string/index.cjs +1 -0
  336. package/utils/string/index.cjs.map +7 -0
  337. package/utils/string/index.js +1 -0
  338. package/utils/string/index.js.map +7 -0
  339. package/utils/string/withLeadingCharacters.cjs +1 -0
  340. package/utils/string/withLeadingCharacters.cjs.map +7 -0
  341. package/utils/string/withLeadingCharacters.js +1 -0
  342. package/utils/string/withLeadingCharacters.js.map +7 -0
  343. package/utils/string/withLeadingSlash.cjs +1 -0
  344. package/utils/string/withLeadingSlash.cjs.map +7 -0
  345. package/utils/string/withLeadingSlash.js +1 -0
  346. package/utils/string/withLeadingSlash.js.map +7 -0
  347. package/utils/string/withTrailingCharacters.cjs +1 -0
  348. package/utils/string/withTrailingCharacters.cjs.map +7 -0
  349. package/utils/string/withTrailingCharacters.js +1 -0
  350. package/utils/string/withTrailingCharacters.js.map +7 -0
  351. package/utils/string/withTrailingSlash.cjs +1 -0
  352. package/utils/string/withTrailingSlash.cjs.map +7 -0
  353. package/utils/string/withTrailingSlash.js +1 -0
  354. package/utils/string/withTrailingSlash.js.map +7 -0
  355. package/utils/string/withoutLeadingCharacters.cjs +1 -0
  356. package/utils/string/withoutLeadingCharacters.cjs.map +7 -0
  357. package/utils/string/withoutLeadingCharacters.js +1 -0
  358. package/utils/string/withoutLeadingCharacters.js.map +7 -0
  359. package/utils/string/withoutLeadingCharactersRecursive.cjs +1 -0
  360. package/utils/string/withoutLeadingCharactersRecursive.cjs.map +7 -0
  361. package/utils/string/withoutLeadingCharactersRecursive.js +1 -0
  362. package/utils/string/withoutLeadingCharactersRecursive.js.map +7 -0
  363. package/utils/string/withoutLeadingSlash.cjs +1 -0
  364. package/utils/string/withoutLeadingSlash.cjs.map +7 -0
  365. package/utils/string/withoutLeadingSlash.js +1 -0
  366. package/utils/string/withoutLeadingSlash.js.map +7 -0
  367. package/utils/string/withoutTrailingCharacters.cjs +1 -0
  368. package/utils/string/withoutTrailingCharacters.cjs.map +7 -0
  369. package/utils/string/withoutTrailingCharacters.js +1 -0
  370. package/utils/string/withoutTrailingCharacters.js.map +7 -0
  371. package/utils/string/withoutTrailingCharactersRecursive.cjs +1 -0
  372. package/utils/string/withoutTrailingCharactersRecursive.cjs.map +7 -0
  373. package/utils/string/withoutTrailingCharactersRecursive.js +1 -0
  374. package/utils/string/withoutTrailingCharactersRecursive.js.map +7 -0
  375. package/utils/string/withoutTrailingSlash.cjs +1 -0
  376. package/utils/string/withoutTrailingSlash.cjs.map +7 -0
  377. package/utils/string/withoutTrailingSlash.js +1 -0
  378. package/utils/string/withoutTrailingSlash.js.map +7 -0
  379. package/utils/throttle.cjs +1 -0
  380. package/utils/throttle.cjs.map +7 -0
  381. package/utils/throttle.js +1 -0
  382. package/utils/throttle.js.map +7 -0
  383. package/utils/tween.cjs +2 -2
  384. package/utils/tween.cjs.map +7 -0
  385. package/utils/tween.d.ts +7 -1
  386. package/utils/tween.js +2 -2
  387. package/utils/tween.js.map +7 -0
@@ -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.6.0",
3
+ "version": "2.6.3",
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": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAA2B;AAC3B,iBAAmB;AACnB,+BAA8B;AAE9B,mBAA0B;AAmC1B,IAAM,QAAQ;AAAA,EACZ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AACR;AAEA,IAAI,QAAQ;AACZ,IAAM,SAAS,CAAC,eAAe,WAAW;AAC1C,IAAM,sBAAsB,EAAE,SAAS,KAAK;AAO5C,SAAS,iBAAiB,OAAO;AAE/B,QAAM,mBAAe,wBAAU,MAAM,OAAO,IAAI,MAAM,QAAQ,KAAK;AACnE,SAAO;AAAA,IACL,GAAG,aAAa;AAAA,IAChB,GAAG,aAAa;AAAA,EAClB;AACF;AAUA,SAAS,kBAAkB,QAAQ,EAAE,aAAa,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG;AAChF,WAAS;AACT,QAAM,KAAK,QAAQ;AACnB,MAAI;AAQJ,WAAS,qBAAqB;AAC5B,WAAO,KAAK,IAAI,MAAM,SAAS,CAAC,IAAI,gBAAgB,KAAK,IAAI,MAAM,SAAS,CAAC,IAAI;AAAA,EACnF;AAQA,WAAS,MAAM,GAAG,GAAG;AACnB,QAAI,MAAM,YAAY;AACpB;AAAA,IACF;AAGA,UAAM,IAAI;AACV,UAAM,IAAI;AACV,UAAM,OAAO,IAAI;AACjB,UAAM,OAAO,IAAI;AACjB,UAAM,MAAM,IAAI;AAChB,UAAM,MAAM,IAAI;AAChB,UAAM,SAAS,IAAI;AACnB,UAAM,SAAS,IAAI;AACnB,UAAM,MAAM,IAAI;AAChB,UAAM,MAAM,IAAI;AAEhB,UAAM,OAAO,MAAM;AAGnB,UAAM,aAAa;AAEnB,YAAQ,KAAK;AAEb,aAAS,iBAAiB,aAAa,aAAa,mBAAmB;AACvE,aAAS,iBAAiB,aAAa,aAAa,mBAAmB;AAAA,EACzE;AAMA,WAAS,OAAO;AACd,aAAS,oBAAoB,aAAa,WAAW;AACrD,aAAS,oBAAoB,aAAa,WAAW;AACrD,UAAM,aAAa;AACnB,UAAM,OAAO,MAAM;AAEnB,UAAM,aAAa;AACnB,UAAM,MAAM,QAAI,yBAAAA,SAAkB,MAAM,GAAG,MAAM,MAAM,GAAG,UAAU;AACpE,UAAM,MAAM,QAAI,yBAAAA,SAAkB,MAAM,GAAG,MAAM,MAAM,GAAG,UAAU;AAEpE,YAAQ,KAAK;AAEb,eAAW,MAAM;AACf,YAAM,UAAM,WAAAC,SAAO;AACnB,UAAI,OAAO,EAAE;AACb,UAAI,IAAI,IAAI,UAAU;AAAA,IACxB,GAAG,CAAC;AAAA,EACN;AAKA,WAAS,OAAO;AACd,mBAAAA,SAAO,EAAE,OAAO,EAAE;AAClB,UAAM,aAAa;AACnB,UAAM,aAAa;AACnB,UAAM,OAAO,MAAM;AACnB,YAAQ,KAAK;AAAA,EACf;AAMA,WAAS,aAAa;AACpB,QAAI,CAAC,MAAM,YAAY;AACrB,YAAM,KAAK,MAAM,MAAM;AACvB,YAAM,KAAK,MAAM,MAAM;AACvB,YAAM,SAAS,IAAI,MAAM,IAAI,MAAM,OAAO;AAC1C,YAAM,SAAS,IAAI,MAAM,IAAI,MAAM,OAAO;AAE1C,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK;AAEjB,UAAI,MAAM,SAAS,MAAM,SAAS;AAChC,cAAM,OAAO,MAAM;AAAA,MACrB;AAEA,cAAQ,KAAK;AAEb,UAAI,KAAK,IAAI,MAAM,MAAM,CAAC,IAAI,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC,IAAI,KAAK;AAClE,aAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAOA,WAAS,KAAK,OAAO;AACnB,QAAI,MAAM,YAAY;AACpB,YAAM,WAAW,iBAAiB,KAAK;AACvC,YAAM,IAAI,SAAS;AACnB,YAAM,IAAI,SAAS;AAEnB,UAAI,eAAe;AACjB,cAAM,mBAAmB,iBAAiB,aAAa;AACvD,cAAM,MAAM,IAAI,SAAS,IAAI,iBAAiB;AAC9C,cAAM,MAAM,IAAI,SAAS,IAAI,iBAAiB;AAAA,MAChD;AAEA,YAAM,MAAM,IAAI,SAAS;AACzB,YAAM,MAAM,IAAI,SAAS;AACzB,YAAM,SAAS,IAAI,MAAM,IAAI,MAAM,OAAO;AAC1C,YAAM,SAAS,IAAI,MAAM,IAAI,MAAM,OAAO;AAE1C,UAAI,MAAM,SAAS,MAAM,MAAM;AAC7B,cAAM,OAAO,MAAM;AAAA,MACrB;AAEA,cAAQ,KAAK;AACb,sBAAgB;AAAA,IAClB;AAAA,EACF;AAMA,WAAS,YAAY,OAAO;AAC1B,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK;AACH,cAAM,eAAe;AACrB;AAAA,MACF,KAAK;AACH,YAAI,mBAAmB,GAAG;AACxB,gBAAM,yBAAyB;AAC/B,gBAAM,gBAAgB;AACtB,gBAAM,eAAe;AAAA,QACvB;AACA;AAAA,MACF,KAAK;AACH,aAAK;AACL;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,aAAK,KAAK;AACV;AAAA,MACF;AACE,YAAI,MAAM,WAAW,GAAG;AACtB,gBAAM,MAAM,GAAG,MAAM,CAAC;AAAA,QACxB;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,SAAS,MAAM,QAAI,2BAAW;AAAA,IAItD,OAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,UAAU;AAAA,QACR,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,IACF;AAAA,IACA,OAAO;AACL,aAAO,QAAQ,CAAC,UAAU;AACxB,eAAO,iBAAiB,OAAO,aAAa,mBAAmB;AAAA,MACjE,CAAC;AACD,aAAO,iBAAiB,aAAa,aAAa,EAAE,SAAS,KAAK,CAAC;AACnE,aAAO,iBAAiB,SAAS,aAAa,EAAE,SAAS,KAAK,CAAC;AAAA,IACjE;AAAA,IACA,OAAO;AACL,aAAO,QAAQ,CAAC,UAAU;AACxB,eAAO,oBAAoB,OAAO,WAAW;AAAA,MAC/C,CAAC;AACD,aAAO,oBAAoB,aAAa,WAAW;AACnD,aAAO,oBAAoB,SAAS,WAAW;AAAA,IACjD;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAKA,IAAM,YAAY,oBAAI,QAAQ;AAkBf,SAAR,QAAyB,QAAQ,SAAS;AAC/C,MAAI,CAAC,UAAU,IAAI,MAAM,GAAG;AAC1B,cAAU,IAAI,QAAQ,kBAAkB,QAAQ,OAAO,CAAC;AAAA,EAC1D;AAEA,SAAO,UAAU,IAAI,MAAM;AAC7B;",
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
+ }
package/services/raf.js CHANGED
@@ -55,3 +55,4 @@ function useRaf() {
55
55
  export {
56
56
  useRaf as default
57
57
  };
58
+ //# sourceMappingURL=raf.js.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": "AACA,SAAS,kBAAkB;AAC3B,SAAS,UAAU,gCAAgC;AACnD,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAE3B,MAAM,YAAY,aAAa,CAAC,UAAU,QAAQ,CAAC;AAYnD,SAAS,mBAAmB;AAC1B,MAAI,YAAY;AAChB,QAAM,MAAM,yBAAyB;AAOrC,WAAS,QAAQA,QAAO;AACtB,cAAU,QAAQ,SAAS,gBAAgB,UAAU;AACnD,gBAAU,OAAO,SAAS,YAAY;AACpC,cAAM,SAAS,SAASA,MAAK;AAC7B,YAAI,WAAW,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,IAAI,WAAW;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": ["props"]
7
+ }
@@ -100,3 +100,4 @@ function useResize() {
100
100
  return resize;
101
101
  }
102
102
  if (module.exports.default) module.exports = module.exports.default;
103
+ //# sourceMappingURL=resize.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/resize.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport debounce from '../utils/debounce.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<ResizeServiceProps>} ResizeService\n * @typedef {Object} ResizeServiceProps\n * @property {number} width\n * @property {number} height\n * @property {number} ratio\n * @property {'square'|'landscape'|'portrait'} orientation\n * @property {string} [breakpoint]\n * @property {string[]} [breakpoints]\n */\n\nlet breakpointElement;\nlet breakpoints = [];\n\n/**\n * The element holding the breakpoints data.\n * @returns {HTMLElement}\n */\nfunction getBreakpointElement() {\n if (!breakpointElement) {\n breakpointElement = document.querySelector('[data-breakpoint]');\n }\n return breakpointElement;\n}\n\n/**\n * Get the current breakpoint.\n * @returns {string|null}\n */\nfunction getBreakpoint() {\n return getBreakpointElement()\n ? window\n .getComputedStyle(getBreakpointElement(), '::before')\n .getPropertyValue('content')\n .replaceAll('\"', '')\n : undefined;\n}\n\n/**\n * Get all breakpoints.\n * @returns {string[]}\n */\nfunction getBreakpoints() {\n if (!getBreakpointElement() || breakpoints.length) {\n return breakpoints;\n }\n breakpoints = window\n .getComputedStyle(getBreakpointElement(), '::after')\n .getPropertyValue('content')\n .replaceAll('\"', '')\n .split(',');\n\n return breakpoints;\n}\n\n/**\n * Get resize service.\n * @returns {ResizeService}\n */\nfunction createResizeService() {\n /**\n * Update props.\n * @returns {ResizeServiceProps}\n */\n function updateProps() {\n props.width = window.innerWidth;\n props.height = window.innerHeight;\n props.ratio = window.innerWidth / window.innerHeight;\n props.orientation = 'square';\n\n if (props.ratio > 1) {\n props.orientation = 'landscape';\n }\n\n if (props.ratio < 1) {\n props.orientation = 'portrait';\n }\n\n return props;\n }\n\n const onResize = debounce(() => {\n trigger(updateProps());\n });\n\n const { add, remove, has, trigger, props } = useService({\n /**\n * @type {ResizeServiceProps}\n */\n props: {\n width: window.innerWidth,\n height: window.innerHeight,\n ratio: window.innerWidth / window.innerHeight,\n orientation: 'square',\n get breakpoint() {\n return getBreakpoint();\n },\n get breakpoints() {\n return getBreakpoints();\n },\n },\n init() {\n window.addEventListener('resize', onResize);\n },\n kill() {\n window.removeEventListener('resize', onResize);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet resize;\n\n/**\n * Use the resize service.\n *\n * @returns {ResizeService}\n */\nexport default function useResize() {\n if (!resize) {\n resize = createResizeService();\n }\n\n return resize;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAA2B;AAC3B,sBAAqB;AAarB,IAAI;AACJ,IAAI,cAAc,CAAC;AAMnB,SAAS,uBAAuB;AAC9B,MAAI,CAAC,mBAAmB;AACtB,wBAAoB,SAAS,cAAc,mBAAmB;AAAA,EAChE;AACA,SAAO;AACT;AAMA,SAAS,gBAAgB;AACvB,SAAO,qBAAqB,IACxB,OACG,iBAAiB,qBAAqB,GAAG,UAAU,EACnD,iBAAiB,SAAS,EAC1B,WAAW,KAAK,EAAE,IACrB;AACN;AAMA,SAAS,iBAAiB;AACxB,MAAI,CAAC,qBAAqB,KAAK,YAAY,QAAQ;AACjD,WAAO;AAAA,EACT;AACA,gBAAc,OACX,iBAAiB,qBAAqB,GAAG,SAAS,EAClD,iBAAiB,SAAS,EAC1B,WAAW,KAAK,EAAE,EAClB,MAAM,GAAG;AAEZ,SAAO;AACT;AAMA,SAAS,sBAAsB;AAK7B,WAAS,cAAc;AACrB,UAAM,QAAQ,OAAO;AACrB,UAAM,SAAS,OAAO;AACtB,UAAM,QAAQ,OAAO,aAAa,OAAO;AACzC,UAAM,cAAc;AAEpB,QAAI,MAAM,QAAQ,GAAG;AACnB,YAAM,cAAc;AAAA,IACtB;AAEA,QAAI,MAAM,QAAQ,GAAG;AACnB,YAAM,cAAc;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,eAAW,gBAAAA,SAAS,MAAM;AAC9B,YAAQ,YAAY,CAAC;AAAA,EACvB,CAAC;AAED,QAAM,EAAE,KAAK,QAAQ,KAAK,SAAS,MAAM,QAAI,2BAAW;AAAA,IAItD,OAAO;AAAA,MACL,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO,aAAa,OAAO;AAAA,MAClC,aAAa;AAAA,MACb,IAAI,aAAa;AACf,eAAO,cAAc;AAAA,MACvB;AAAA,MACA,IAAI,cAAc;AAChB,eAAO,eAAe;AAAA,MACxB;AAAA,IACF;AAAA,IACA,OAAO;AACL,aAAO,iBAAiB,UAAU,QAAQ;AAAA,IAC5C;AAAA,IACA,OAAO;AACL,aAAO,oBAAoB,UAAU,QAAQ;AAAA,IAC/C;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAOW,SAAR,YAA6B;AAClC,MAAI,CAAC,QAAQ;AACX,aAAS,oBAAoB;AAAA,EAC/B;AAEA,SAAO;AACT;",
6
+ "names": ["debounce"]
7
+ }
@@ -72,3 +72,4 @@ function useResize() {
72
72
  export {
73
73
  useResize as default
74
74
  };
75
+ //# sourceMappingURL=resize.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/resize.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport debounce from '../utils/debounce.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<ResizeServiceProps>} ResizeService\n * @typedef {Object} ResizeServiceProps\n * @property {number} width\n * @property {number} height\n * @property {number} ratio\n * @property {'square'|'landscape'|'portrait'} orientation\n * @property {string} [breakpoint]\n * @property {string[]} [breakpoints]\n */\n\nlet breakpointElement;\nlet breakpoints = [];\n\n/**\n * The element holding the breakpoints data.\n * @returns {HTMLElement}\n */\nfunction getBreakpointElement() {\n if (!breakpointElement) {\n breakpointElement = document.querySelector('[data-breakpoint]');\n }\n return breakpointElement;\n}\n\n/**\n * Get the current breakpoint.\n * @returns {string|null}\n */\nfunction getBreakpoint() {\n return getBreakpointElement()\n ? window\n .getComputedStyle(getBreakpointElement(), '::before')\n .getPropertyValue('content')\n .replaceAll('\"', '')\n : undefined;\n}\n\n/**\n * Get all breakpoints.\n * @returns {string[]}\n */\nfunction getBreakpoints() {\n if (!getBreakpointElement() || breakpoints.length) {\n return breakpoints;\n }\n breakpoints = window\n .getComputedStyle(getBreakpointElement(), '::after')\n .getPropertyValue('content')\n .replaceAll('\"', '')\n .split(',');\n\n return breakpoints;\n}\n\n/**\n * Get resize service.\n * @returns {ResizeService}\n */\nfunction createResizeService() {\n /**\n * Update props.\n * @returns {ResizeServiceProps}\n */\n function updateProps() {\n props.width = window.innerWidth;\n props.height = window.innerHeight;\n props.ratio = window.innerWidth / window.innerHeight;\n props.orientation = 'square';\n\n if (props.ratio > 1) {\n props.orientation = 'landscape';\n }\n\n if (props.ratio < 1) {\n props.orientation = 'portrait';\n }\n\n return props;\n }\n\n const onResize = debounce(() => {\n trigger(updateProps());\n });\n\n const { add, remove, has, trigger, props } = useService({\n /**\n * @type {ResizeServiceProps}\n */\n props: {\n width: window.innerWidth,\n height: window.innerHeight,\n ratio: window.innerWidth / window.innerHeight,\n orientation: 'square',\n get breakpoint() {\n return getBreakpoint();\n },\n get breakpoints() {\n return getBreakpoints();\n },\n },\n init() {\n window.addEventListener('resize', onResize);\n },\n kill() {\n window.removeEventListener('resize', onResize);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet resize;\n\n/**\n * Use the resize service.\n *\n * @returns {ResizeService}\n */\nexport default function useResize() {\n if (!resize) {\n resize = createResizeService();\n }\n\n return resize;\n}\n"],
5
+ "mappings": "AACA,SAAS,kBAAkB;AAC3B,OAAO,cAAc;AAarB,IAAI;AACJ,IAAI,cAAc,CAAC;AAMnB,SAAS,uBAAuB;AAC9B,MAAI,CAAC,mBAAmB;AACtB,wBAAoB,SAAS,cAAc,mBAAmB;AAAA,EAChE;AACA,SAAO;AACT;AAMA,SAAS,gBAAgB;AACvB,SAAO,qBAAqB,IACxB,OACG,iBAAiB,qBAAqB,GAAG,UAAU,EACnD,iBAAiB,SAAS,EAC1B,WAAW,KAAK,EAAE,IACrB;AACN;AAMA,SAAS,iBAAiB;AACxB,MAAI,CAAC,qBAAqB,KAAK,YAAY,QAAQ;AACjD,WAAO;AAAA,EACT;AACA,gBAAc,OACX,iBAAiB,qBAAqB,GAAG,SAAS,EAClD,iBAAiB,SAAS,EAC1B,WAAW,KAAK,EAAE,EAClB,MAAM,GAAG;AAEZ,SAAO;AACT;AAMA,SAAS,sBAAsB;AAK7B,WAAS,cAAc;AACrB,UAAM,QAAQ,OAAO;AACrB,UAAM,SAAS,OAAO;AACtB,UAAM,QAAQ,OAAO,aAAa,OAAO;AACzC,UAAM,cAAc;AAEpB,QAAI,MAAM,QAAQ,GAAG;AACnB,YAAM,cAAc;AAAA,IACtB;AAEA,QAAI,MAAM,QAAQ,GAAG;AACnB,YAAM,cAAc;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,SAAS,MAAM;AAC9B,YAAQ,YAAY,CAAC;AAAA,EACvB,CAAC;AAED,QAAM,EAAE,KAAK,QAAQ,KAAK,SAAS,MAAM,IAAI,WAAW;AAAA,IAItD,OAAO;AAAA,MACL,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO,aAAa,OAAO;AAAA,MAClC,aAAa;AAAA,MACb,IAAI,aAAa;AACf,eAAO,cAAc;AAAA,MACvB;AAAA,MACA,IAAI,cAAc;AAChB,eAAO,eAAe;AAAA,MACxB;AAAA,IACF;AAAA,IACA,OAAO;AACL,aAAO,iBAAiB,UAAU,QAAQ;AAAA,IAC5C;AAAA,IACA,OAAO;AACL,aAAO,oBAAoB,UAAU,QAAQ;AAAA,IAC/C;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAOW,SAAR,YAA6B;AAClC,MAAI,CAAC,QAAQ;AACX,aAAS,oBAAoB;AAAA,EAC/B;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -112,3 +112,4 @@ function useScroll() {
112
112
  return scroll;
113
113
  }
114
114
  if (module.exports.default) module.exports = module.exports.default;
115
+ //# sourceMappingURL=scroll.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/scroll.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport debounce from '../utils/debounce.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<ScrollServiceProps>} ScrollService\n * @typedef {Object} ScrollServiceProps\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 * @property {{ x: 'LEFT'|'RIGHT'|'NONE', y: 'UP'|'DOWN'|'NONE' }} direction\n */\n\n/**\n * Create scroll service.\n * @returns {ScrollService}\n */\nfunction createScrollService() {\n /**\n * Update props.\n * @returns {ScrollServiceProps}\n */\n function updateProps() {\n const yLast = props.y;\n const xLast = props.x;\n\n // Check scroll Y\n if (window.pageYOffset !== props.y) {\n props.y = window.pageYOffset;\n }\n\n // Check scroll x\n if (window.pageXOffset !== props.x) {\n props.x = window.pageXOffset;\n }\n\n props.changed.x = props.x !== xLast;\n props.changed.y = props.y !== yLast;\n props.last.x = xLast;\n props.last.y = yLast;\n props.delta.x = props.x - xLast;\n props.delta.y = props.y - yLast;\n props.max.x = (document.scrollingElement || document.body).scrollWidth - window.innerWidth;\n props.max.y = (document.scrollingElement || document.body).scrollHeight - window.innerHeight;\n props.progress.x = props.max.x === 0 ? 1 : props.x / props.max.x;\n props.progress.y = props.max.y === 0 ? 1 : props.y / props.max.y;\n /* eslint-disable no-nested-ternary */\n props.direction.x = props.x > xLast ? 'RIGHT' : props.x < xLast ? 'LEFT' : 'NONE';\n props.direction.y = props.y > yLast ? 'DOWN' : props.y < yLast ? 'UP' : 'NONE';\n /* eslint-enable no-nested-ternary */\n\n return props;\n }\n\n const onScrollDebounced = debounce(() => {\n trigger(updateProps());\n }, 100);\n\n /**\n * Scroll handler.\n * @returns {void}\n */\n function onScroll() {\n trigger(updateProps());\n onScrollDebounced();\n }\n\n const { add, remove, has, props, trigger } = useService({\n /**\n * @type {ScrollServiceProps}\n */\n props: {\n x: window.pageXOffset,\n y: window.pageYOffset,\n changed: {\n x: false,\n y: false,\n },\n last: {\n x: window.pageXOffset,\n y: window.pageYOffset,\n },\n delta: {\n x: 0,\n y: 0,\n },\n max: {\n x: (document.scrollingElement || document.body).scrollWidth - window.innerWidth,\n y: (document.scrollingElement || document.body).scrollHeight - window.innerHeight,\n },\n progress: {\n x: 0,\n y: 0,\n },\n direction: {\n x: 'NONE',\n y: 'NONE',\n },\n },\n init() {\n document.addEventListener('scroll', onScroll, { passive: true, capture: true });\n },\n kill() {\n document.removeEventListener('scroll', onScroll);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet scroll;\n\n/**\n * Use the scroll service.\n *\n * ```js\n * import { useScroll } from '@studiometa/js-toolkit/services';\n * const { add, remove, props } = useScroll();\n * add(key, (props) => {});\n * remove(key);\n * props();\n * ```\n *\n * @returns {ScrollService}\n */\nexport default function useScroll() {\n if (!scroll) {\n scroll = createScrollService();\n }\n\n return scroll;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAA2B;AAC3B,sBAAqB;AAmBrB,SAAS,sBAAsB;AAK7B,WAAS,cAAc;AACrB,UAAM,QAAQ,MAAM;AACpB,UAAM,QAAQ,MAAM;AAGpB,QAAI,OAAO,gBAAgB,MAAM,GAAG;AAClC,YAAM,IAAI,OAAO;AAAA,IACnB;AAGA,QAAI,OAAO,gBAAgB,MAAM,GAAG;AAClC,YAAM,IAAI,OAAO;AAAA,IACnB;AAEA,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,KAAK,IAAI;AACf,UAAM,KAAK,IAAI;AACf,UAAM,MAAM,IAAI,MAAM,IAAI;AAC1B,UAAM,MAAM,IAAI,MAAM,IAAI;AAC1B,UAAM,IAAI,KAAK,SAAS,oBAAoB,SAAS,MAAM,cAAc,OAAO;AAChF,UAAM,IAAI,KAAK,SAAS,oBAAoB,SAAS,MAAM,eAAe,OAAO;AACjF,UAAM,SAAS,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI;AAC/D,UAAM,SAAS,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI;AAE/D,UAAM,UAAU,IAAI,MAAM,IAAI,QAAQ,UAAU,MAAM,IAAI,QAAQ,SAAS;AAC3E,UAAM,UAAU,IAAI,MAAM,IAAI,QAAQ,SAAS,MAAM,IAAI,QAAQ,OAAO;AAGxE,WAAO;AAAA,EACT;AAEA,QAAM,wBAAoB,gBAAAA,SAAS,MAAM;AACvC,YAAQ,YAAY,CAAC;AAAA,EACvB,GAAG,GAAG;AAMN,WAAS,WAAW;AAClB,YAAQ,YAAY,CAAC;AACrB,sBAAkB;AAAA,EACpB;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,OAAO,QAAQ,QAAI,2BAAW;AAAA,IAItD,OAAO;AAAA,MACL,GAAG,OAAO;AAAA,MACV,GAAG,OAAO;AAAA,MACV,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,GAAG,OAAO;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,KAAK;AAAA,QACH,IAAI,SAAS,oBAAoB,SAAS,MAAM,cAAc,OAAO;AAAA,QACrE,IAAI,SAAS,oBAAoB,SAAS,MAAM,eAAe,OAAO;AAAA,MACxE;AAAA,MACA,UAAU;AAAA,QACR,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,WAAW;AAAA,QACT,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,IACF;AAAA,IACA,OAAO;AACL,eAAS,iBAAiB,UAAU,UAAU,EAAE,SAAS,MAAM,SAAS,KAAK,CAAC;AAAA,IAChF;AAAA,IACA,OAAO;AACL,eAAS,oBAAoB,UAAU,QAAQ;AAAA,IACjD;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAeW,SAAR,YAA6B;AAClC,MAAI,CAAC,QAAQ;AACX,aAAS,oBAAoB;AAAA,EAC/B;AAEA,SAAO;AACT;",
6
+ "names": ["debounce"]
7
+ }
@@ -84,3 +84,4 @@ function useScroll() {
84
84
  export {
85
85
  useScroll as default
86
86
  };
87
+ //# sourceMappingURL=scroll.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/scroll.js"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { useService } from './service.js';\nimport debounce from '../utils/debounce.js';\n\n/**\n * @typedef {import('./index').ServiceInterface<ScrollServiceProps>} ScrollService\n * @typedef {Object} ScrollServiceProps\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 * @property {{ x: 'LEFT'|'RIGHT'|'NONE', y: 'UP'|'DOWN'|'NONE' }} direction\n */\n\n/**\n * Create scroll service.\n * @returns {ScrollService}\n */\nfunction createScrollService() {\n /**\n * Update props.\n * @returns {ScrollServiceProps}\n */\n function updateProps() {\n const yLast = props.y;\n const xLast = props.x;\n\n // Check scroll Y\n if (window.pageYOffset !== props.y) {\n props.y = window.pageYOffset;\n }\n\n // Check scroll x\n if (window.pageXOffset !== props.x) {\n props.x = window.pageXOffset;\n }\n\n props.changed.x = props.x !== xLast;\n props.changed.y = props.y !== yLast;\n props.last.x = xLast;\n props.last.y = yLast;\n props.delta.x = props.x - xLast;\n props.delta.y = props.y - yLast;\n props.max.x = (document.scrollingElement || document.body).scrollWidth - window.innerWidth;\n props.max.y = (document.scrollingElement || document.body).scrollHeight - window.innerHeight;\n props.progress.x = props.max.x === 0 ? 1 : props.x / props.max.x;\n props.progress.y = props.max.y === 0 ? 1 : props.y / props.max.y;\n /* eslint-disable no-nested-ternary */\n props.direction.x = props.x > xLast ? 'RIGHT' : props.x < xLast ? 'LEFT' : 'NONE';\n props.direction.y = props.y > yLast ? 'DOWN' : props.y < yLast ? 'UP' : 'NONE';\n /* eslint-enable no-nested-ternary */\n\n return props;\n }\n\n const onScrollDebounced = debounce(() => {\n trigger(updateProps());\n }, 100);\n\n /**\n * Scroll handler.\n * @returns {void}\n */\n function onScroll() {\n trigger(updateProps());\n onScrollDebounced();\n }\n\n const { add, remove, has, props, trigger } = useService({\n /**\n * @type {ScrollServiceProps}\n */\n props: {\n x: window.pageXOffset,\n y: window.pageYOffset,\n changed: {\n x: false,\n y: false,\n },\n last: {\n x: window.pageXOffset,\n y: window.pageYOffset,\n },\n delta: {\n x: 0,\n y: 0,\n },\n max: {\n x: (document.scrollingElement || document.body).scrollWidth - window.innerWidth,\n y: (document.scrollingElement || document.body).scrollHeight - window.innerHeight,\n },\n progress: {\n x: 0,\n y: 0,\n },\n direction: {\n x: 'NONE',\n y: 'NONE',\n },\n },\n init() {\n document.addEventListener('scroll', onScroll, { passive: true, capture: true });\n },\n kill() {\n document.removeEventListener('scroll', onScroll);\n },\n });\n\n return {\n add,\n remove,\n has,\n props: () => props,\n };\n}\n\nlet scroll;\n\n/**\n * Use the scroll service.\n *\n * ```js\n * import { useScroll } from '@studiometa/js-toolkit/services';\n * const { add, remove, props } = useScroll();\n * add(key, (props) => {});\n * remove(key);\n * props();\n * ```\n *\n * @returns {ScrollService}\n */\nexport default function useScroll() {\n if (!scroll) {\n scroll = createScrollService();\n }\n\n return scroll;\n}\n"],
5
+ "mappings": "AACA,SAAS,kBAAkB;AAC3B,OAAO,cAAc;AAmBrB,SAAS,sBAAsB;AAK7B,WAAS,cAAc;AACrB,UAAM,QAAQ,MAAM;AACpB,UAAM,QAAQ,MAAM;AAGpB,QAAI,OAAO,gBAAgB,MAAM,GAAG;AAClC,YAAM,IAAI,OAAO;AAAA,IACnB;AAGA,QAAI,OAAO,gBAAgB,MAAM,GAAG;AAClC,YAAM,IAAI,OAAO;AAAA,IACnB;AAEA,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,KAAK,IAAI;AACf,UAAM,KAAK,IAAI;AACf,UAAM,MAAM,IAAI,MAAM,IAAI;AAC1B,UAAM,MAAM,IAAI,MAAM,IAAI;AAC1B,UAAM,IAAI,KAAK,SAAS,oBAAoB,SAAS,MAAM,cAAc,OAAO;AAChF,UAAM,IAAI,KAAK,SAAS,oBAAoB,SAAS,MAAM,eAAe,OAAO;AACjF,UAAM,SAAS,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI;AAC/D,UAAM,SAAS,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI;AAE/D,UAAM,UAAU,IAAI,MAAM,IAAI,QAAQ,UAAU,MAAM,IAAI,QAAQ,SAAS;AAC3E,UAAM,UAAU,IAAI,MAAM,IAAI,QAAQ,SAAS,MAAM,IAAI,QAAQ,OAAO;AAGxE,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,SAAS,MAAM;AACvC,YAAQ,YAAY,CAAC;AAAA,EACvB,GAAG,GAAG;AAMN,WAAS,WAAW;AAClB,YAAQ,YAAY,CAAC;AACrB,sBAAkB;AAAA,EACpB;AAEA,QAAM,EAAE,KAAK,QAAQ,KAAK,OAAO,QAAQ,IAAI,WAAW;AAAA,IAItD,OAAO;AAAA,MACL,GAAG,OAAO;AAAA,MACV,GAAG,OAAO;AAAA,MACV,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,GAAG,OAAO;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,KAAK;AAAA,QACH,IAAI,SAAS,oBAAoB,SAAS,MAAM,cAAc,OAAO;AAAA,QACrE,IAAI,SAAS,oBAAoB,SAAS,MAAM,eAAe,OAAO;AAAA,MACxE;AAAA,MACA,UAAU;AAAA,QACR,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,MACA,WAAW;AAAA,QACT,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,IACF;AAAA,IACA,OAAO;AACL,eAAS,iBAAiB,UAAU,UAAU,EAAE,SAAS,MAAM,SAAS,KAAK,CAAC;AAAA,IAChF;AAAA,IACA,OAAO;AACL,eAAS,oBAAoB,UAAU,QAAQ;AAAA,IACjD;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,IAAI;AAeW,SAAR,YAA6B;AAClC,MAAI,CAAC,QAAQ;AACX,aAAS,oBAAoB;AAAA,EAC/B;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -66,3 +66,4 @@ function useService(options) {
66
66
  };
67
67
  }
68
68
  if (module.exports.default) module.exports = module.exports.default;
69
+ //# sourceMappingURL=service.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/service.js"],
4
+ "sourcesContent": ["// eslint-disable-next-line jsdoc/require-returns\n/**\n * Use a service.\n * @template {Record<string, any>} T\n * @param {{ init: () => void, kill: () => void, props: T }} options\n */\nexport function useService(options) {\n /**\n * @type {Map<string, (props:T) => any>}\n */\n const callbacks = new Map();\n let isInit = false;\n\n const { init, kill, props } = options;\n\n /**\n * Does the service has the given key?\n * @param {string} key\n * @returns {boolean}\n */\n function has(key) {\n return callbacks.has(key);\n }\n\n /**\n * Get a service callback by its key.\n * @param {string} key\n * @returns {(props:T) => any}\n */\n function get(key) {\n return callbacks.get(key);\n }\n\n /**\n * Add a callback to the service.\n * @param {string} key\n * @param {(props:T) => any} callback\n */\n function add(key, callback) {\n if (has(key)) {\n console.warn(`The key \\`${key}\\` has already been added.`);\n return;\n }\n\n // Initialize the service when we add the first callback\n if (callbacks.size === 0 && !isInit) {\n init();\n isInit = true;\n }\n\n callbacks.set(key, callback);\n }\n\n /**\n * Remove a callback from the service by its key.\n * @param {string} key\n * @returns {void}\n */\n function remove(key) {\n callbacks.delete(key);\n\n // Kill the service when we remove the last callback\n if (callbacks.size === 0 && isInit) {\n kill();\n isInit = false;\n }\n }\n\n /**\n * Trigger all service callbacks with service props.\n * @param {T} p\n * @returns {void}\n */\n function trigger(p) {\n callbacks.forEach(function forEachCallback(callback) {\n callback(p);\n });\n }\n\n return {\n callbacks,\n props,\n add,\n remove,\n has,\n get,\n trigger,\n };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,SAAS,WAAW,SAAS;AAIlC,QAAM,YAAY,oBAAI,IAAI;AAC1B,MAAI,SAAS;AAEb,QAAM,EAAE,MAAM,MAAM,MAAM,IAAI;AAO9B,WAAS,IAAI,KAAK;AAChB,WAAO,UAAU,IAAI,GAAG;AAAA,EAC1B;AAOA,WAAS,IAAI,KAAK;AAChB,WAAO,UAAU,IAAI,GAAG;AAAA,EAC1B;AAOA,WAAS,IAAI,KAAK,UAAU;AAC1B,QAAI,IAAI,GAAG,GAAG;AACZ,cAAQ,KAAK,aAAa,+BAA+B;AACzD;AAAA,IACF;AAGA,QAAI,UAAU,SAAS,KAAK,CAAC,QAAQ;AACnC,WAAK;AACL,eAAS;AAAA,IACX;AAEA,cAAU,IAAI,KAAK,QAAQ;AAAA,EAC7B;AAOA,WAAS,OAAO,KAAK;AACnB,cAAU,OAAO,GAAG;AAGpB,QAAI,UAAU,SAAS,KAAK,QAAQ;AAClC,WAAK;AACL,eAAS;AAAA,IACX;AAAA,EACF;AAOA,WAAS,QAAQ,GAAG;AAClB,cAAU,QAAQ,SAAS,gBAAgB,UAAU;AACnD,eAAS,CAAC;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -44,3 +44,4 @@ function useService(options) {
44
44
  export {
45
45
  useService
46
46
  };
47
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/js-toolkit/services/service.js"],
4
+ "sourcesContent": ["// eslint-disable-next-line jsdoc/require-returns\n/**\n * Use a service.\n * @template {Record<string, any>} T\n * @param {{ init: () => void, kill: () => void, props: T }} options\n */\nexport function useService(options) {\n /**\n * @type {Map<string, (props:T) => any>}\n */\n const callbacks = new Map();\n let isInit = false;\n\n const { init, kill, props } = options;\n\n /**\n * Does the service has the given key?\n * @param {string} key\n * @returns {boolean}\n */\n function has(key) {\n return callbacks.has(key);\n }\n\n /**\n * Get a service callback by its key.\n * @param {string} key\n * @returns {(props:T) => any}\n */\n function get(key) {\n return callbacks.get(key);\n }\n\n /**\n * Add a callback to the service.\n * @param {string} key\n * @param {(props:T) => any} callback\n */\n function add(key, callback) {\n if (has(key)) {\n console.warn(`The key \\`${key}\\` has already been added.`);\n return;\n }\n\n // Initialize the service when we add the first callback\n if (callbacks.size === 0 && !isInit) {\n init();\n isInit = true;\n }\n\n callbacks.set(key, callback);\n }\n\n /**\n * Remove a callback from the service by its key.\n * @param {string} key\n * @returns {void}\n */\n function remove(key) {\n callbacks.delete(key);\n\n // Kill the service when we remove the last callback\n if (callbacks.size === 0 && isInit) {\n kill();\n isInit = false;\n }\n }\n\n /**\n * Trigger all service callbacks with service props.\n * @param {T} p\n * @returns {void}\n */\n function trigger(p) {\n callbacks.forEach(function forEachCallback(callback) {\n callback(p);\n });\n }\n\n return {\n callbacks,\n props,\n add,\n remove,\n has,\n get,\n trigger,\n };\n}\n"],
5
+ "mappings": "AAMO,SAAS,WAAW,SAAS;AAIlC,QAAM,YAAY,oBAAI,IAAI;AAC1B,MAAI,SAAS;AAEb,QAAM,EAAE,MAAM,MAAM,MAAM,IAAI;AAO9B,WAAS,IAAI,KAAK;AAChB,WAAO,UAAU,IAAI,GAAG;AAAA,EAC1B;AAOA,WAAS,IAAI,KAAK;AAChB,WAAO,UAAU,IAAI,GAAG;AAAA,EAC1B;AAOA,WAAS,IAAI,KAAK,UAAU;AAC1B,QAAI,IAAI,GAAG,GAAG;AACZ,cAAQ,KAAK,aAAa,+BAA+B;AACzD;AAAA,IACF;AAGA,QAAI,UAAU,SAAS,KAAK,CAAC,QAAQ;AACnC,WAAK;AACL,eAAS;AAAA,IACX;AAEA,cAAU,IAAI,KAAK,QAAQ;AAAA,EAC7B;AAOA,WAAS,OAAO,KAAK;AACnB,cAAU,OAAO,GAAG;AAGpB,QAAI,UAAU,SAAS,KAAK,QAAQ;AAClC,WAAK;AACL,eAAS;AAAA,IACX;AAAA,EACF;AAOA,WAAS,QAAQ,GAAG;AAClB,cAAU,QAAQ,SAAS,gBAAgB,UAAU;AACnD,eAAS,CAAC;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -32,3 +32,4 @@ function boundingRectToCircle({ x, y, width, height }, force = false) {
32
32
  };
33
33
  }
34
34
  if (module.exports.default) module.exports = module.exports.default;
35
+ //# sourceMappingURL=boundingRectToCircle.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/boundingRectToCircle.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Circle\n * @property {number} x Circle's x position\n * @property {number} y Circle's y position\n * @property {number} radius Circle's radius\n */\n\n/**\n * Convert clientRect to a formatted circle object\n *\n * @param {Partial<DOMRect>} domRect DOMRect of a square DOMElement\n * @param {boolean} force Force usage of non-square DOMElements\n * @returns {Circle} Circle object that can be used in collides functions\n */\nexport default function boundingRectToCircle({ x, y, width, height }, force = false) {\n if (width !== height && !force)\n throw new Error('Initial DOMElement is not a square. Please use the force mode.');\n return {\n x: x + width / 2,\n y: y + height / 2,\n radius: (width + height) / 4,\n };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAce,SAAR,qBAAsC,EAAE,GAAG,GAAG,OAAO,OAAO,GAAG,QAAQ,OAAO;AACnF,MAAI,UAAU,UAAU,CAAC;AACvB,UAAM,IAAI,MAAM,gEAAgE;AAClF,SAAO;AAAA,IACL,GAAG,IAAI,QAAQ;AAAA,IACf,GAAG,IAAI,SAAS;AAAA,IAChB,SAAS,QAAQ,UAAU;AAAA,EAC7B;AACF;",
6
+ "names": []
7
+ }