@studiometa/js-toolkit 2.5.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/Base/index.cjs +56 -62
  2. package/Base/index.cjs.map +7 -0
  3. package/Base/index.d.ts +5 -5
  4. package/Base/index.js +63 -69
  5. package/Base/index.js.map +7 -0
  6. package/Base/managers/AbstractManager.cjs +8 -12
  7. package/Base/managers/AbstractManager.cjs.map +7 -0
  8. package/Base/managers/AbstractManager.d.ts +11 -21
  9. package/Base/managers/AbstractManager.js +7 -12
  10. package/Base/managers/AbstractManager.js.map +7 -0
  11. package/Base/managers/ChildrenManager.cjs +6 -20
  12. package/Base/managers/ChildrenManager.cjs.map +7 -0
  13. package/Base/managers/ChildrenManager.d.ts +2 -2
  14. package/Base/managers/ChildrenManager.js +5 -14
  15. package/Base/managers/ChildrenManager.js.map +7 -0
  16. package/Base/managers/EventsManager.cjs +60 -64
  17. package/Base/managers/EventsManager.cjs.map +7 -0
  18. package/Base/managers/EventsManager.d.ts +2 -2
  19. package/Base/managers/EventsManager.js +59 -64
  20. package/Base/managers/EventsManager.js.map +7 -0
  21. package/Base/managers/OptionsManager.cjs +14 -22
  22. package/Base/managers/OptionsManager.cjs.map +7 -0
  23. package/Base/managers/OptionsManager.d.ts +42 -55
  24. package/Base/managers/OptionsManager.js +12 -21
  25. package/Base/managers/OptionsManager.js.map +7 -0
  26. package/Base/managers/RefsManager.cjs +11 -16
  27. package/Base/managers/RefsManager.cjs.map +7 -0
  28. package/Base/managers/RefsManager.d.ts +3 -11
  29. package/Base/managers/RefsManager.js +9 -8
  30. package/Base/managers/RefsManager.js.map +7 -0
  31. package/Base/managers/ResponsiveOptionsManager.cjs +4 -9
  32. package/Base/managers/ResponsiveOptionsManager.cjs.map +7 -0
  33. package/Base/managers/ResponsiveOptionsManager.d.ts +8 -4
  34. package/Base/managers/ResponsiveOptionsManager.js +3 -2
  35. package/Base/managers/ResponsiveOptionsManager.js.map +7 -0
  36. package/Base/managers/ServicesManager.cjs +21 -45
  37. package/Base/managers/ServicesManager.cjs.map +7 -0
  38. package/Base/managers/ServicesManager.d.ts +33 -58
  39. package/Base/managers/ServicesManager.js +13 -32
  40. package/Base/managers/ServicesManager.js.map +7 -0
  41. package/Base/types.cjs +1 -0
  42. package/Base/types.cjs.map +7 -0
  43. package/Base/types.js +1 -0
  44. package/Base/types.js.map +7 -0
  45. package/Base/utils.cjs +1 -0
  46. package/Base/utils.cjs.map +7 -0
  47. package/Base/utils.js +1 -0
  48. package/Base/utils.js.map +7 -0
  49. package/decorators/index.cjs +1 -0
  50. package/decorators/index.cjs.map +7 -0
  51. package/decorators/index.js +1 -0
  52. package/decorators/index.js.map +7 -0
  53. package/decorators/withBreakpointManager.cjs +1 -0
  54. package/decorators/withBreakpointManager.cjs.map +7 -0
  55. package/decorators/withBreakpointManager.js +1 -0
  56. package/decorators/withBreakpointManager.js.map +7 -0
  57. package/decorators/withBreakpointObserver.cjs +10 -15
  58. package/decorators/withBreakpointObserver.cjs.map +7 -0
  59. package/decorators/withBreakpointObserver.js +10 -16
  60. package/decorators/withBreakpointObserver.js.map +7 -0
  61. package/decorators/withDrag.cjs +5 -9
  62. package/decorators/withDrag.cjs.map +7 -0
  63. package/decorators/withDrag.js +5 -10
  64. package/decorators/withDrag.js.map +7 -0
  65. package/decorators/withExtraConfig.cjs +2 -6
  66. package/decorators/withExtraConfig.cjs.map +7 -0
  67. package/decorators/withExtraConfig.js +2 -7
  68. package/decorators/withExtraConfig.js.map +7 -0
  69. package/decorators/withFreezedOptions.cjs +2 -9
  70. package/decorators/withFreezedOptions.cjs.map +7 -0
  71. package/decorators/withFreezedOptions.js +2 -10
  72. package/decorators/withFreezedOptions.js.map +7 -0
  73. package/decorators/withIntersectionObserver.cjs +11 -16
  74. package/decorators/withIntersectionObserver.cjs.map +7 -0
  75. package/decorators/withIntersectionObserver.js +11 -17
  76. package/decorators/withIntersectionObserver.js.map +7 -0
  77. package/decorators/withMountWhenInView.cjs +11 -16
  78. package/decorators/withMountWhenInView.cjs.map +7 -0
  79. package/decorators/withMountWhenInView.js +11 -17
  80. package/decorators/withMountWhenInView.js.map +7 -0
  81. package/decorators/withResponsiveOptions.cjs +3 -8
  82. package/decorators/withResponsiveOptions.cjs.map +7 -0
  83. package/decorators/withResponsiveOptions.js +2 -1
  84. package/decorators/withResponsiveOptions.js.map +7 -0
  85. package/decorators/withScrolledInView.cjs +45 -50
  86. package/decorators/withScrolledInView.cjs.map +7 -0
  87. package/decorators/withScrolledInView.js +45 -51
  88. package/decorators/withScrolledInView.js.map +7 -0
  89. package/decorators/withVue2.cjs +9 -15
  90. package/decorators/withVue2.cjs.map +7 -0
  91. package/decorators/withVue2.js +9 -16
  92. package/decorators/withVue2.js.map +7 -0
  93. package/helpers/createApp.cjs +1 -0
  94. package/helpers/createApp.cjs.map +7 -0
  95. package/helpers/createApp.js +1 -0
  96. package/helpers/createApp.js.map +7 -0
  97. package/helpers/getClosestParent.cjs +1 -0
  98. package/helpers/getClosestParent.cjs.map +7 -0
  99. package/helpers/getClosestParent.js +1 -0
  100. package/helpers/getClosestParent.js.map +7 -0
  101. package/helpers/getDirectChildren.cjs +1 -0
  102. package/helpers/getDirectChildren.cjs.map +7 -0
  103. package/helpers/getDirectChildren.js +1 -0
  104. package/helpers/getDirectChildren.js.map +7 -0
  105. package/helpers/getInstanceFromElement.cjs +1 -0
  106. package/helpers/getInstanceFromElement.cjs.map +7 -0
  107. package/helpers/getInstanceFromElement.js +1 -0
  108. package/helpers/getInstanceFromElement.js.map +7 -0
  109. package/helpers/importOnInteraction.cjs +2 -1
  110. package/helpers/importOnInteraction.cjs.map +7 -0
  111. package/helpers/importOnInteraction.js +2 -1
  112. package/helpers/importOnInteraction.js.map +7 -0
  113. package/helpers/importWhenIdle.cjs +1 -0
  114. package/helpers/importWhenIdle.cjs.map +7 -0
  115. package/helpers/importWhenIdle.js +1 -0
  116. package/helpers/importWhenIdle.js.map +7 -0
  117. package/helpers/importWhenVisible.cjs +2 -1
  118. package/helpers/importWhenVisible.cjs.map +7 -0
  119. package/helpers/importWhenVisible.js +2 -1
  120. package/helpers/importWhenVisible.js.map +7 -0
  121. package/helpers/index.cjs +1 -0
  122. package/helpers/index.cjs.map +7 -0
  123. package/helpers/index.js +1 -0
  124. package/helpers/index.js.map +7 -0
  125. package/helpers/utils.cjs +1 -0
  126. package/helpers/utils.cjs.map +7 -0
  127. package/helpers/utils.js +1 -0
  128. package/helpers/utils.js.map +7 -0
  129. package/index.cjs +1 -0
  130. package/index.cjs.map +7 -0
  131. package/index.js +1 -0
  132. package/index.js.map +7 -0
  133. package/package.json +1 -1
  134. package/services/drag.cjs +1 -0
  135. package/services/drag.cjs.map +7 -0
  136. package/services/drag.js +1 -0
  137. package/services/drag.js.map +7 -0
  138. package/services/index.cjs +1 -0
  139. package/services/index.cjs.map +7 -0
  140. package/services/index.js +1 -0
  141. package/services/index.js.map +7 -0
  142. package/services/key.cjs +2 -1
  143. package/services/key.cjs.map +7 -0
  144. package/services/key.js +2 -1
  145. package/services/key.js.map +7 -0
  146. package/services/load.cjs +1 -0
  147. package/services/load.cjs.map +7 -0
  148. package/services/load.js +1 -0
  149. package/services/load.js.map +7 -0
  150. package/services/pointer.cjs +3 -3
  151. package/services/pointer.cjs.map +7 -0
  152. package/services/pointer.js +3 -3
  153. package/services/pointer.js.map +7 -0
  154. package/services/raf.cjs +1 -0
  155. package/services/raf.cjs.map +7 -0
  156. package/services/raf.js +1 -0
  157. package/services/raf.js.map +7 -0
  158. package/services/resize.cjs +1 -0
  159. package/services/resize.cjs.map +7 -0
  160. package/services/resize.js +1 -0
  161. package/services/resize.js.map +7 -0
  162. package/services/scroll.cjs +1 -0
  163. package/services/scroll.cjs.map +7 -0
  164. package/services/scroll.js +1 -0
  165. package/services/scroll.js.map +7 -0
  166. package/services/service.cjs +1 -0
  167. package/services/service.cjs.map +7 -0
  168. package/services/service.js +1 -0
  169. package/services/service.js.map +7 -0
  170. package/utils/collide/boundingRectToCircle.cjs +1 -0
  171. package/utils/collide/boundingRectToCircle.cjs.map +7 -0
  172. package/utils/collide/boundingRectToCircle.js +1 -0
  173. package/utils/collide/boundingRectToCircle.js.map +7 -0
  174. package/utils/collide/collideCircleCircle.cjs +1 -0
  175. package/utils/collide/collideCircleCircle.cjs.map +7 -0
  176. package/utils/collide/collideCircleCircle.js +1 -0
  177. package/utils/collide/collideCircleCircle.js.map +7 -0
  178. package/utils/collide/collideCircleRect.cjs +1 -0
  179. package/utils/collide/collideCircleRect.cjs.map +7 -0
  180. package/utils/collide/collideCircleRect.js +1 -0
  181. package/utils/collide/collideCircleRect.js.map +7 -0
  182. package/utils/collide/collidePointCircle.cjs +1 -0
  183. package/utils/collide/collidePointCircle.cjs.map +7 -0
  184. package/utils/collide/collidePointCircle.js +1 -0
  185. package/utils/collide/collidePointCircle.js.map +7 -0
  186. package/utils/collide/collidePointRect.cjs +1 -0
  187. package/utils/collide/collidePointRect.cjs.map +7 -0
  188. package/utils/collide/collidePointRect.js +1 -0
  189. package/utils/collide/collidePointRect.js.map +7 -0
  190. package/utils/collide/collideRectRect.cjs +1 -0
  191. package/utils/collide/collideRectRect.cjs.map +7 -0
  192. package/utils/collide/collideRectRect.js +1 -0
  193. package/utils/collide/collideRectRect.js.map +7 -0
  194. package/utils/collide/index.cjs +1 -0
  195. package/utils/collide/index.cjs.map +7 -0
  196. package/utils/collide/index.js +1 -0
  197. package/utils/collide/index.js.map +7 -0
  198. package/utils/css/animate.cjs +38 -14
  199. package/utils/css/animate.cjs.map +7 -0
  200. package/utils/css/animate.d.ts +4 -24
  201. package/utils/css/animate.js +38 -14
  202. package/utils/css/animate.js.map +7 -0
  203. package/utils/css/classes.cjs +7 -3
  204. package/utils/css/classes.cjs.map +7 -0
  205. package/utils/css/classes.d.ts +6 -6
  206. package/utils/css/classes.js +7 -3
  207. package/utils/css/classes.js.map +7 -0
  208. package/utils/css/getOffsetSizes.cjs +1 -0
  209. package/utils/css/getOffsetSizes.cjs.map +7 -0
  210. package/utils/css/getOffsetSizes.js +1 -0
  211. package/utils/css/getOffsetSizes.js.map +7 -0
  212. package/utils/css/index.cjs +2 -1
  213. package/utils/css/index.cjs.map +7 -0
  214. package/utils/css/index.d.ts +7 -7
  215. package/utils/css/index.js +1 -0
  216. package/utils/css/index.js.map +7 -0
  217. package/utils/css/matrix.cjs +2 -2
  218. package/utils/css/matrix.cjs.map +7 -0
  219. package/utils/css/matrix.js +2 -2
  220. package/utils/css/matrix.js.map +7 -0
  221. package/utils/css/styles.cjs +12 -8
  222. package/utils/css/styles.cjs.map +7 -0
  223. package/utils/css/styles.d.ts +4 -4
  224. package/utils/css/styles.js +12 -8
  225. package/utils/css/styles.js.map +7 -0
  226. package/utils/css/transform.cjs +7 -4
  227. package/utils/css/transform.cjs.map +7 -0
  228. package/utils/css/transform.d.ts +2 -2
  229. package/utils/css/transform.js +7 -4
  230. package/utils/css/transform.js.map +7 -0
  231. package/utils/css/transition.cjs +10 -8
  232. package/utils/css/transition.cjs.map +7 -0
  233. package/utils/css/transition.d.ts +5 -8
  234. package/utils/css/transition.js +10 -9
  235. package/utils/css/transition.js.map +7 -0
  236. package/utils/css/utils.cjs +32 -0
  237. package/utils/css/utils.cjs.map +7 -0
  238. package/utils/css/utils.d.ts +1 -0
  239. package/utils/css/utils.js +10 -0
  240. package/utils/css/utils.js.map +7 -0
  241. package/utils/debounce.cjs +1 -0
  242. package/utils/debounce.cjs.map +7 -0
  243. package/utils/debounce.js +1 -0
  244. package/utils/debounce.js.map +7 -0
  245. package/utils/focusTrap.cjs +1 -0
  246. package/utils/focusTrap.cjs.map +7 -0
  247. package/utils/focusTrap.js +1 -0
  248. package/utils/focusTrap.js.map +7 -0
  249. package/utils/has.cjs +1 -0
  250. package/utils/has.cjs.map +7 -0
  251. package/utils/has.js +1 -0
  252. package/utils/has.js.map +7 -0
  253. package/utils/history.cjs +1 -0
  254. package/utils/history.cjs.map +7 -0
  255. package/utils/history.js +1 -0
  256. package/utils/history.js.map +7 -0
  257. package/utils/index.cjs +2 -1
  258. package/utils/index.cjs.map +7 -0
  259. package/utils/index.d.ts +19 -19
  260. package/utils/index.js +1 -0
  261. package/utils/index.js.map +7 -0
  262. package/utils/is.cjs +1 -0
  263. package/utils/is.cjs.map +7 -0
  264. package/utils/is.js +1 -0
  265. package/utils/is.js.map +7 -0
  266. package/utils/keyCodes.cjs +1 -0
  267. package/utils/keyCodes.cjs.map +7 -0
  268. package/utils/keyCodes.js +1 -0
  269. package/utils/keyCodes.js.map +7 -0
  270. package/utils/math/clamp.cjs +1 -0
  271. package/utils/math/clamp.cjs.map +7 -0
  272. package/utils/math/clamp.js +1 -0
  273. package/utils/math/clamp.js.map +7 -0
  274. package/utils/math/clamp01.cjs +1 -0
  275. package/utils/math/clamp01.cjs.map +7 -0
  276. package/utils/math/clamp01.js +1 -0
  277. package/utils/math/clamp01.js.map +7 -0
  278. package/utils/math/createEases.cjs +1 -0
  279. package/utils/math/createEases.cjs.map +7 -0
  280. package/utils/math/createEases.js +1 -0
  281. package/utils/math/createEases.js.map +7 -0
  282. package/utils/math/damp.cjs +1 -0
  283. package/utils/math/damp.cjs.map +7 -0
  284. package/utils/math/damp.js +1 -0
  285. package/utils/math/damp.js.map +7 -0
  286. package/utils/math/ease.cjs +1 -0
  287. package/utils/math/ease.cjs.map +7 -0
  288. package/utils/math/ease.js +1 -0
  289. package/utils/math/ease.js.map +7 -0
  290. package/utils/math/index.cjs +1 -0
  291. package/utils/math/index.cjs.map +7 -0
  292. package/utils/math/index.js +1 -0
  293. package/utils/math/index.js.map +7 -0
  294. package/utils/math/inertiaFinalValue.cjs +1 -0
  295. package/utils/math/inertiaFinalValue.cjs.map +7 -0
  296. package/utils/math/inertiaFinalValue.js +1 -0
  297. package/utils/math/inertiaFinalValue.js.map +7 -0
  298. package/utils/math/lerp.cjs +1 -0
  299. package/utils/math/lerp.cjs.map +7 -0
  300. package/utils/math/lerp.js +1 -0
  301. package/utils/math/lerp.js.map +7 -0
  302. package/utils/math/map.cjs +1 -0
  303. package/utils/math/map.cjs.map +7 -0
  304. package/utils/math/map.js +1 -0
  305. package/utils/math/map.js.map +7 -0
  306. package/utils/math/round.cjs +1 -0
  307. package/utils/math/round.cjs.map +7 -0
  308. package/utils/math/round.js +1 -0
  309. package/utils/math/round.js.map +7 -0
  310. package/utils/memoize.cjs +1 -0
  311. package/utils/memoize.cjs.map +7 -0
  312. package/utils/memoize.js +1 -0
  313. package/utils/memoize.js.map +7 -0
  314. package/utils/nextFrame.cjs +1 -0
  315. package/utils/nextFrame.cjs.map +7 -0
  316. package/utils/nextFrame.js +1 -0
  317. package/utils/nextFrame.js.map +7 -0
  318. package/utils/nextMicrotask.cjs +1 -0
  319. package/utils/nextMicrotask.cjs.map +7 -0
  320. package/utils/nextMicrotask.js +1 -0
  321. package/utils/nextMicrotask.js.map +7 -0
  322. package/utils/nextTick.cjs +1 -0
  323. package/utils/nextTick.cjs.map +7 -0
  324. package/utils/nextTick.js +1 -0
  325. package/utils/nextTick.js.map +7 -0
  326. package/utils/noop.cjs +1 -0
  327. package/utils/noop.cjs.map +7 -0
  328. package/utils/noop.js +1 -0
  329. package/utils/noop.js.map +7 -0
  330. package/utils/object/autoBind.cjs +1 -0
  331. package/utils/object/autoBind.cjs.map +7 -0
  332. package/utils/object/autoBind.js +1 -0
  333. package/utils/object/autoBind.js.map +7 -0
  334. package/utils/object/getAllProperties.cjs +1 -0
  335. package/utils/object/getAllProperties.cjs.map +7 -0
  336. package/utils/object/getAllProperties.js +1 -0
  337. package/utils/object/getAllProperties.js.map +7 -0
  338. package/utils/object/index.cjs +1 -0
  339. package/utils/object/index.cjs.map +7 -0
  340. package/utils/object/index.js +1 -0
  341. package/utils/object/index.js.map +7 -0
  342. package/utils/scheduler.cjs +1 -0
  343. package/utils/scheduler.cjs.map +7 -0
  344. package/utils/scheduler.js +1 -0
  345. package/utils/scheduler.js.map +7 -0
  346. package/utils/scrollTo.cjs +1 -0
  347. package/utils/scrollTo.cjs.map +7 -0
  348. package/utils/scrollTo.js +1 -0
  349. package/utils/scrollTo.js.map +7 -0
  350. package/utils/string/index.cjs +1 -0
  351. package/utils/string/index.cjs.map +7 -0
  352. package/utils/string/index.js +1 -0
  353. package/utils/string/index.js.map +7 -0
  354. package/utils/string/withLeadingCharacters.cjs +1 -0
  355. package/utils/string/withLeadingCharacters.cjs.map +7 -0
  356. package/utils/string/withLeadingCharacters.js +1 -0
  357. package/utils/string/withLeadingCharacters.js.map +7 -0
  358. package/utils/string/withLeadingSlash.cjs +1 -0
  359. package/utils/string/withLeadingSlash.cjs.map +7 -0
  360. package/utils/string/withLeadingSlash.js +1 -0
  361. package/utils/string/withLeadingSlash.js.map +7 -0
  362. package/utils/string/withTrailingCharacters.cjs +1 -0
  363. package/utils/string/withTrailingCharacters.cjs.map +7 -0
  364. package/utils/string/withTrailingCharacters.js +1 -0
  365. package/utils/string/withTrailingCharacters.js.map +7 -0
  366. package/utils/string/withTrailingSlash.cjs +1 -0
  367. package/utils/string/withTrailingSlash.cjs.map +7 -0
  368. package/utils/string/withTrailingSlash.js +1 -0
  369. package/utils/string/withTrailingSlash.js.map +7 -0
  370. package/utils/string/withoutLeadingCharacters.cjs +1 -0
  371. package/utils/string/withoutLeadingCharacters.cjs.map +7 -0
  372. package/utils/string/withoutLeadingCharacters.js +1 -0
  373. package/utils/string/withoutLeadingCharacters.js.map +7 -0
  374. package/utils/string/withoutLeadingCharactersRecursive.cjs +1 -0
  375. package/utils/string/withoutLeadingCharactersRecursive.cjs.map +7 -0
  376. package/utils/string/withoutLeadingCharactersRecursive.js +1 -0
  377. package/utils/string/withoutLeadingCharactersRecursive.js.map +7 -0
  378. package/utils/string/withoutLeadingSlash.cjs +1 -0
  379. package/utils/string/withoutLeadingSlash.cjs.map +7 -0
  380. package/utils/string/withoutLeadingSlash.js +1 -0
  381. package/utils/string/withoutLeadingSlash.js.map +7 -0
  382. package/utils/string/withoutTrailingCharacters.cjs +1 -0
  383. package/utils/string/withoutTrailingCharacters.cjs.map +7 -0
  384. package/utils/string/withoutTrailingCharacters.js +1 -0
  385. package/utils/string/withoutTrailingCharacters.js.map +7 -0
  386. package/utils/string/withoutTrailingCharactersRecursive.cjs +1 -0
  387. package/utils/string/withoutTrailingCharactersRecursive.cjs.map +7 -0
  388. package/utils/string/withoutTrailingCharactersRecursive.js +1 -0
  389. package/utils/string/withoutTrailingCharactersRecursive.js.map +7 -0
  390. package/utils/string/withoutTrailingSlash.cjs +1 -0
  391. package/utils/string/withoutTrailingSlash.cjs.map +7 -0
  392. package/utils/string/withoutTrailingSlash.js +1 -0
  393. package/utils/string/withoutTrailingSlash.js.map +7 -0
  394. package/utils/throttle.cjs +1 -0
  395. package/utils/throttle.cjs.map +7 -0
  396. package/utils/throttle.js +1 -0
  397. package/utils/throttle.js.map +7 -0
  398. package/utils/tween.cjs +2 -2
  399. package/utils/tween.cjs.map +7 -0
  400. package/utils/tween.js +2 -2
  401. package/utils/tween.js.map +7 -0
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
+ }
@@ -10,3 +10,4 @@ function boundingRectToCircle({ x, y, width, height }, force = false) {
10
10
  export {
11
11
  boundingRectToCircle as default
12
12
  };
13
+ //# sourceMappingURL=boundingRectToCircle.js.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": "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
+ }
@@ -32,3 +32,4 @@ function collideCircleCircle(circle1, circle2) {
32
32
  return false;
33
33
  }
34
34
  if (module.exports.default) module.exports = module.exports.default;
35
+ //# sourceMappingURL=collideCircleCircle.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collideCircleCircle.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 * Test if a circle collides with another.\n * Inspired by http://www.jeffreythompson.org/collision-detection/circle-circle.php\n *\n * @param {Circle} circle1 Circle 1\n * @param {Circle} circle2 Circle 2\n * @returns {boolean} Are the sides of one circle touching the other ?\n */\nexport default function collideCircleCircle(circle1, circle2) {\n // get distance between the circle's centers\n // use the Pythagorean Theorem to compute the distance\n const distX = circle1.x - circle2.x;\n const distY = circle1.y - circle2.y;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the sum of the circle's\n // radii, the circles are touching!\n if (distance <= circle1.radius + circle2.radius) {\n return true;\n }\n return false;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAee,SAAR,oBAAqC,SAAS,SAAS;AAG5D,QAAM,QAAQ,QAAQ,IAAI,QAAQ;AAClC,QAAM,QAAQ,QAAQ,IAAI,QAAQ;AAClC,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAIxD,MAAI,YAAY,QAAQ,SAAS,QAAQ,QAAQ;AAC/C,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -10,3 +10,4 @@ function collideCircleCircle(circle1, circle2) {
10
10
  export {
11
11
  collideCircleCircle as default
12
12
  };
13
+ //# sourceMappingURL=collideCircleCircle.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collideCircleCircle.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 * Test if a circle collides with another.\n * Inspired by http://www.jeffreythompson.org/collision-detection/circle-circle.php\n *\n * @param {Circle} circle1 Circle 1\n * @param {Circle} circle2 Circle 2\n * @returns {boolean} Are the sides of one circle touching the other ?\n */\nexport default function collideCircleCircle(circle1, circle2) {\n // get distance between the circle's centers\n // use the Pythagorean Theorem to compute the distance\n const distX = circle1.x - circle2.x;\n const distY = circle1.y - circle2.y;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the sum of the circle's\n // radii, the circles are touching!\n if (distance <= circle1.radius + circle2.radius) {\n return true;\n }\n return false;\n}\n"],
5
+ "mappings": "AAee,SAAR,oBAAqC,SAAS,SAAS;AAG5D,QAAM,QAAQ,QAAQ,IAAI,QAAQ;AAClC,QAAM,QAAQ,QAAQ,IAAI,QAAQ;AAClC,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAIxD,MAAI,YAAY,QAAQ,SAAS,QAAQ,QAAQ;AAC/C,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -44,3 +44,4 @@ function collideCircleRect(circle, rect) {
44
44
  return false;
45
45
  }
46
46
  if (module.exports.default) module.exports = module.exports.default;
47
+ //# sourceMappingURL=collideCircleRect.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collideCircleRect.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\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 * Test if a circle collides with a rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/circle-rect.php\n *\n * @param {Circle} circle Circle\n * @param {Rect} rect Rectangle\n * @returns {boolean} Are the sides of the circle touching the rectangle ?\n */\nexport default function collideCircleRect(circle, rect) {\n // temporary variables to set edges for testing\n let testX = circle.x;\n let testY = circle.y;\n\n // which edge is closest?\n if (circle.x < rect.x) {\n testX = rect.x; // test left edge\n } else if (circle.x > rect.x + rect.width) {\n testX = rect.x + rect.width; // right edge\n }\n\n if (circle.y < rect.y) {\n testY = rect.y; // top edge\n } else if (circle.y > rect.y + rect.height) {\n testY = rect.y + rect.height; // bottom edge\n }\n\n // get distance from closest edges\n const distX = circle.x - testX;\n const distY = circle.y - testY;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the radius, collision!\n if (distance <= circle.radius) {\n return true;\n }\n return false;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBe,SAAR,kBAAmC,QAAQ,MAAM;AAEtD,MAAI,QAAQ,OAAO;AACnB,MAAI,QAAQ,OAAO;AAGnB,MAAI,OAAO,IAAI,KAAK,GAAG;AACrB,YAAQ,KAAK;AAAA,EACf,WAAW,OAAO,IAAI,KAAK,IAAI,KAAK,OAAO;AACzC,YAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAEA,MAAI,OAAO,IAAI,KAAK,GAAG;AACrB,YAAQ,KAAK;AAAA,EACf,WAAW,OAAO,IAAI,KAAK,IAAI,KAAK,QAAQ;AAC1C,YAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAGA,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAGxD,MAAI,YAAY,OAAO,QAAQ;AAC7B,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -22,3 +22,4 @@ function collideCircleRect(circle, rect) {
22
22
  export {
23
23
  collideCircleRect as default
24
24
  };
25
+ //# sourceMappingURL=collideCircleRect.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collideCircleRect.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\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 * Test if a circle collides with a rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/circle-rect.php\n *\n * @param {Circle} circle Circle\n * @param {Rect} rect Rectangle\n * @returns {boolean} Are the sides of the circle touching the rectangle ?\n */\nexport default function collideCircleRect(circle, rect) {\n // temporary variables to set edges for testing\n let testX = circle.x;\n let testY = circle.y;\n\n // which edge is closest?\n if (circle.x < rect.x) {\n testX = rect.x; // test left edge\n } else if (circle.x > rect.x + rect.width) {\n testX = rect.x + rect.width; // right edge\n }\n\n if (circle.y < rect.y) {\n testY = rect.y; // top edge\n } else if (circle.y > rect.y + rect.height) {\n testY = rect.y + rect.height; // bottom edge\n }\n\n // get distance from closest edges\n const distX = circle.x - testX;\n const distY = circle.y - testY;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the radius, collision!\n if (distance <= circle.radius) {\n return true;\n }\n return false;\n}\n"],
5
+ "mappings": "AAuBe,SAAR,kBAAmC,QAAQ,MAAM;AAEtD,MAAI,QAAQ,OAAO;AACnB,MAAI,QAAQ,OAAO;AAGnB,MAAI,OAAO,IAAI,KAAK,GAAG;AACrB,YAAQ,KAAK;AAAA,EACf,WAAW,OAAO,IAAI,KAAK,IAAI,KAAK,OAAO;AACzC,YAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAEA,MAAI,OAAO,IAAI,KAAK,GAAG;AACrB,YAAQ,KAAK;AAAA,EACf,WAAW,OAAO,IAAI,KAAK,IAAI,KAAK,QAAQ;AAC1C,YAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAGA,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAGxD,MAAI,YAAY,OAAO,QAAQ;AAC7B,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -29,3 +29,4 @@ function collidePointCircle(point, circle) {
29
29
  return distance <= circle.radius;
30
30
  }
31
31
  if (module.exports.default) module.exports = module.exports.default;
32
+ //# sourceMappingURL=collidePointCircle.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collidePointCircle.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Point\n * @property {number} x Point's x position\n * @property {number} y Point's y position\n */\n\n/**\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 * Test if a point is inside a circle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/point-circle.php\n *\n * @param {Point} point Point\n * @param {Circle} circle Circle\n * @returns {boolean} Is the point inside the circle's bounds ?\n */\nexport default function collidePointCircle(point, circle) {\n // get distance between the point and circle's center\n // using the Pythagorean Theorem\n const distX = point.x - circle.x;\n const distY = point.y - circle.y;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the circle's\n // radius the point is inside!\n return distance <= circle.radius;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBe,SAAR,mBAAoC,OAAO,QAAQ;AAGxD,QAAM,QAAQ,MAAM,IAAI,OAAO;AAC/B,QAAM,QAAQ,MAAM,IAAI,OAAO;AAC/B,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAIxD,SAAO,YAAY,OAAO;AAC5B;",
6
+ "names": []
7
+ }
@@ -7,3 +7,4 @@ function collidePointCircle(point, circle) {
7
7
  export {
8
8
  collidePointCircle as default
9
9
  };
10
+ //# sourceMappingURL=collidePointCircle.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collidePointCircle.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Point\n * @property {number} x Point's x position\n * @property {number} y Point's y position\n */\n\n/**\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 * Test if a point is inside a circle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/point-circle.php\n *\n * @param {Point} point Point\n * @param {Circle} circle Circle\n * @returns {boolean} Is the point inside the circle's bounds ?\n */\nexport default function collidePointCircle(point, circle) {\n // get distance between the point and circle's center\n // using the Pythagorean Theorem\n const distX = point.x - circle.x;\n const distY = point.y - circle.y;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the circle's\n // radius the point is inside!\n return distance <= circle.radius;\n}\n"],
5
+ "mappings": "AAqBe,SAAR,mBAAoC,OAAO,QAAQ;AAGxD,QAAM,QAAQ,MAAM,IAAI,OAAO;AAC/B,QAAM,QAAQ,MAAM,IAAI,OAAO;AAC/B,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAIxD,SAAO,YAAY,OAAO;AAC5B;",
6
+ "names": []
7
+ }
@@ -26,3 +26,4 @@ function collidePointRect(point, rect) {
26
26
  return point.x >= rect.x && point.x <= rect.x + rect.width && point.y >= rect.y && point.y <= rect.y + rect.height;
27
27
  }
28
28
  if (module.exports.default) module.exports = module.exports.default;
29
+ //# sourceMappingURL=collidePointRect.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collidePointRect.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Point\n * @property {number} x Point's x position\n * @property {number} y Point's y position\n */\n\n/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\n * Test if a point collides with a rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/point-rect.php\n *\n * @param {Point} point Point\n * @param {Rect} rect Rectangle\n * @returns {boolean} Is the point inside the rectangle's bounds ?\n */\nexport default function collidePointRect(point, rect) {\n return (\n point.x >= rect.x && // right of the left edge AND\n point.x <= rect.x + rect.width && // left of the right edge AND\n point.y >= rect.y && // below the top AND\n point.y <= rect.y + rect.height // above the bottom\n );\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBe,SAAR,iBAAkC,OAAO,MAAM;AACpD,SACE,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,KAAK,IAAI,KAAK,SACzB,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,KAAK,IAAI,KAAK;AAE7B;",
6
+ "names": []
7
+ }
@@ -4,3 +4,4 @@ function collidePointRect(point, rect) {
4
4
  export {
5
5
  collidePointRect as default
6
6
  };
7
+ //# sourceMappingURL=collidePointRect.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collidePointRect.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Point\n * @property {number} x Point's x position\n * @property {number} y Point's y position\n */\n\n/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\n * Test if a point collides with a rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/point-rect.php\n *\n * @param {Point} point Point\n * @param {Rect} rect Rectangle\n * @returns {boolean} Is the point inside the rectangle's bounds ?\n */\nexport default function collidePointRect(point, rect) {\n return (\n point.x >= rect.x && // right of the left edge AND\n point.x <= rect.x + rect.width && // left of the right edge AND\n point.y >= rect.y && // below the top AND\n point.y <= rect.y + rect.height // above the bottom\n );\n}\n"],
5
+ "mappings": "AAsBe,SAAR,iBAAkC,OAAO,MAAM;AACpD,SACE,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,KAAK,IAAI,KAAK,SACzB,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,KAAK,IAAI,KAAK;AAE7B;",
6
+ "names": []
7
+ }
@@ -26,3 +26,4 @@ function collideRectRect(rect1, rect2) {
26
26
  return rect1.x + rect1.width >= rect2.x && rect1.x <= rect2.x + rect2.width && rect1.y + rect1.height >= rect2.y && rect1.y <= rect2.y + rect2.height;
27
27
  }
28
28
  if (module.exports.default) module.exports = module.exports.default;
29
+ //# sourceMappingURL=collideRectRect.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collideRectRect.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\n * Test if a rectangle collides with another rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/rect-rect.php\n *\n * @param {Rect} rect1 Rectangle 1\n * @param {Rect} rect2 Rectangle 2\n * @returns {boolean} Are the sides of one rectangle touching the other ?\n */\nexport default function collideRectRect(rect1, rect2) {\n return (\n rect1.x + rect1.width >= rect2.x && // rect1 right edge past rect2 left AND\n rect1.x <= rect2.x + rect2.width && // rect1 left edge past rect2 right AND\n rect1.y + rect1.height >= rect2.y && // rect1 top edge past rect2 bottom AND\n rect1.y <= rect2.y + rect2.height // rect1 bottom edge past rect2 top\n );\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBe,SAAR,gBAAiC,OAAO,OAAO;AACpD,SACE,MAAM,IAAI,MAAM,SAAS,MAAM,KAC/B,MAAM,KAAK,MAAM,IAAI,MAAM,SAC3B,MAAM,IAAI,MAAM,UAAU,MAAM,KAChC,MAAM,KAAK,MAAM,IAAI,MAAM;AAE/B;",
6
+ "names": []
7
+ }
@@ -4,3 +4,4 @@ function collideRectRect(rect1, rect2) {
4
4
  export {
5
5
  collideRectRect as default
6
6
  };
7
+ //# sourceMappingURL=collideRectRect.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/collideRectRect.js"],
4
+ "sourcesContent": ["/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\n * Test if a rectangle collides with another rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/rect-rect.php\n *\n * @param {Rect} rect1 Rectangle 1\n * @param {Rect} rect2 Rectangle 2\n * @returns {boolean} Are the sides of one rectangle touching the other ?\n */\nexport default function collideRectRect(rect1, rect2) {\n return (\n rect1.x + rect1.width >= rect2.x && // rect1 right edge past rect2 left AND\n rect1.x <= rect2.x + rect2.width && // rect1 left edge past rect2 right AND\n rect1.y + rect1.height >= rect2.y && // rect1 top edge past rect2 bottom AND\n rect1.y <= rect2.y + rect2.height // rect1 bottom edge past rect2 top\n );\n}\n"],
5
+ "mappings": "AAgBe,SAAR,gBAAiC,OAAO,OAAO;AACpD,SACE,MAAM,IAAI,MAAM,SAAS,MAAM,KAC/B,MAAM,KAAK,MAAM,IAAI,MAAM,SAC3B,MAAM,IAAI,MAAM,UAAU,MAAM,KAChC,MAAM,KAAK,MAAM,IAAI,MAAM;AAE/B;",
6
+ "names": []
7
+ }
@@ -40,3 +40,4 @@ var import_collidePointCircle = __toESM(require("./collidePointCircle.cjs"), 1);
40
40
  var import_collidePointRect = __toESM(require("./collidePointRect.cjs"), 1);
41
41
  var import_collideRectRect = __toESM(require("./collideRectRect.cjs"), 1);
42
42
  if (module.exports.default) module.exports = module.exports.default;
43
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/index.js"],
4
+ "sourcesContent": ["/**\n * Inspired by http://www.jeffreythompson.org/collision-detection/\n */\nexport { default as boundingRectToCircle } from './boundingRectToCircle.js';\nexport { default as collideCircleCircle } from './collideCircleCircle.js';\nexport { default as collideCircleRect } from './collideCircleRect.js';\nexport { default as collidePointCircle } from './collidePointCircle.js';\nexport { default as collidePointRect } from './collidePointRect.js';\nexport { default as collideRectRect } from './collideRectRect.js';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kCAAgD;AAChD,iCAA+C;AAC/C,+BAA6C;AAC7C,gCAA8C;AAC9C,8BAA4C;AAC5C,6BAA2C;",
6
+ "names": []
7
+ }
@@ -12,3 +12,4 @@ export {
12
12
  default6 as collidePointRect,
13
13
  default7 as collideRectRect
14
14
  };
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/collide/index.js"],
4
+ "sourcesContent": ["/**\n * Inspired by http://www.jeffreythompson.org/collision-detection/\n */\nexport { default as boundingRectToCircle } from './boundingRectToCircle.js';\nexport { default as collideCircleCircle } from './collideCircleCircle.js';\nexport { default as collideCircleRect } from './collideCircleRect.js';\nexport { default as collidePointCircle } from './collidePointCircle.js';\nexport { default as collidePointRect } from './collidePointRect.js';\nexport { default as collideRectRect } from './collideRectRect.js';\n"],
5
+ "mappings": "AAGA,SAAoB,WAAXA,gBAAuC;AAChD,SAAoB,WAAXA,gBAAsC;AAC/C,SAAoB,WAAXA,gBAAoC;AAC7C,SAAoB,WAAXA,gBAAqC;AAC9C,SAAoB,WAAXA,gBAAmC;AAC5C,SAAoB,WAAXA,gBAAkC;",
6
+ "names": ["default"]
7
+ }
@@ -33,6 +33,7 @@ var import_is = require("../is.cjs");
33
33
  var import_transform = __toESM(require("./transform.cjs"), 1);
34
34
  var import_scheduler = require("../scheduler.cjs");
35
35
  var import_tween = require("../tween.cjs");
36
+ var import_utils = require("./utils.cjs");
36
37
  var id = 0;
37
38
  var running = /* @__PURE__ */ new WeakMap();
38
39
  var CSSUnitConverter = {
@@ -52,13 +53,16 @@ function getAnimationStepValue(val, getSizeRef) {
52
53
  return CSSUnitConverter[val[1]](val[0], getSizeRef);
53
54
  }
54
55
  var generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(
55
- getAnimationStepValue(fromValue != null ? fromValue : 0, () => element[sizeRef]),
56
- getAnimationStepValue(toValue != null ? toValue : 0, () => element[sizeRef]),
56
+ getAnimationStepValue(
57
+ fromValue ?? 0,
58
+ () => element[sizeRef]
59
+ ),
60
+ getAnimationStepValue(toValue ?? 0, () => element[sizeRef]),
57
61
  progress
58
62
  );
59
63
  var widthBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetWidth");
60
64
  var heightBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetHeight");
61
- var generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(fromValue != null ? fromValue : defaultValue, toValue != null ? toValue : defaultValue, progress);
65
+ var generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(fromValue ?? defaultValue, toValue ?? defaultValue, progress);
62
66
  var scaleRenderStrategy = generateLerpRenderStrategy(1);
63
67
  var degreesRenderStrategy = generateLerpRenderStrategy(0);
64
68
  var transformRenderStrategies = {
@@ -80,10 +84,9 @@ var transformRenderStrategies = {
80
84
  function render(element, from, to, progress) {
81
85
  const stepProgress = to.easing((0, import_math.map)(progress, from.offset, to.offset, 0, 1));
82
86
  import_scheduler.domScheduler.read(function renderRead() {
83
- var _a, _b;
84
87
  let opacity = false;
85
88
  if ((0, import_is.isDefined)(from.opacity) || (0, import_is.isDefined)(to.opacity)) {
86
- opacity = (0, import_math.map)(stepProgress, 0, 1, (_a = from.opacity) != null ? _a : 1, (_b = to.opacity) != null ? _b : 1);
89
+ opacity = (0, import_math.map)(stepProgress, 0, 1, from.opacity ?? 1, to.opacity ?? 1);
87
90
  } else if (element.style.opacity) {
88
91
  opacity = "";
89
92
  }
@@ -109,17 +112,14 @@ function render(element, from, to, progress) {
109
112
  });
110
113
  });
111
114
  }
112
- function animate(element, keyframes, options = {}) {
115
+ function singleAnimate(element, keyframes, options = {}) {
113
116
  const keyframesCount = keyframes.length - 1;
114
117
  const normalizedKeyframes = keyframes.map(
115
- (keyframe, index) => {
116
- var _a;
117
- return {
118
- ...keyframe,
119
- offset: (_a = keyframe.offset) != null ? _a : index / keyframesCount,
120
- easing: (0, import_tween.normalizeEase)(keyframe.easing)
121
- };
122
- }
118
+ (keyframe, index) => ({
119
+ ...keyframe,
120
+ offset: keyframe.offset ?? index / keyframesCount,
121
+ easing: (0, import_tween.normalizeEase)(keyframe.easing)
122
+ })
123
123
  );
124
124
  if (!running.has(element)) {
125
125
  running.set(element, /* @__PURE__ */ new Map());
@@ -150,4 +150,28 @@ function animate(element, keyframes, options = {}) {
150
150
  });
151
151
  return controls;
152
152
  }
153
+ function animate(elementOrElements, keyframes, options = {}) {
154
+ const controls = (0, import_utils.eachElements)(
155
+ elementOrElements,
156
+ (element) => singleAnimate(element, keyframes, options)
157
+ );
158
+ const delegate = (key) => {
159
+ return (...args) => {
160
+ if (key === "progress" && args.length === 0) {
161
+ return controls[0][key]();
162
+ }
163
+ controls.forEach((control) => {
164
+ control[key](...args);
165
+ });
166
+ };
167
+ };
168
+ return {
169
+ start: delegate("start"),
170
+ pause: delegate("pause"),
171
+ finish: delegate("finish"),
172
+ play: delegate("play"),
173
+ progress: delegate("progress")
174
+ };
175
+ }
153
176
  if (module.exports.default) module.exports = module.exports.default;
177
+ //# sourceMappingURL=animate.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/css/animate.js"],
4
+ "sourcesContent": ["import { lerp, map } from '../math/index.js';\nimport { isDefined, isFunction, isNumber } from '../is.js';\nimport transform, { TRANSFORM_PROPS } from './transform.js';\nimport { domScheduler as scheduler } from '../scheduler.js';\nimport { tween, normalizeEase } from '../tween.js';\n// eslint-disable-next-line import/extensions\nimport { eachElements } from './utils.js';\n\nlet id = 0;\nconst running = new WeakMap();\n\nconst CSSUnitConverter = {\n '%': (value, getSizeRef) => (value * getSizeRef()) / 100,\n vh: (value) => (value * window.innerHeight) / 100,\n vw: (value) => (value * window.innerWidth) / 100,\n vmin: (value) => (value * Math.min(window.innerWidth, window.innerHeight)) / 100,\n vmax: (value) => (value * Math.max(window.innerWidth, window.innerHeight)) / 100,\n};\n\n/**\n * Get the value from a step property.\n * @param {number|[number, string]} val\n * @param {() => number} getSizeRef\n * @returns {number}\n */\nfunction getAnimationStepValue(val, getSizeRef) {\n if (isNumber(val)) {\n return val;\n }\n\n if (!val[1] || !CSSUnitConverter[val[1]]) {\n return val[0];\n }\n\n return CSSUnitConverter[val[1]](val[0], getSizeRef);\n}\n\nconst generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) =>\n lerp(\n getAnimationStepValue(\n fromValue ?? 0,\n /* istanbul ignore next */\n () => element[sizeRef],\n ),\n getAnimationStepValue(toValue ?? 0, () => element[sizeRef]),\n progress,\n );\nconst widthBasedTranslateRenderStrategy = generateTranslateRenderStrategy('offsetWidth');\nconst heightBasedTranslateRenderStrategy = generateTranslateRenderStrategy('offsetHeight');\n\nconst generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) =>\n lerp(fromValue ?? defaultValue, toValue ?? defaultValue, progress);\nconst scaleRenderStrategy = generateLerpRenderStrategy(1);\nconst degreesRenderStrategy = generateLerpRenderStrategy(0);\n\nconst transformRenderStrategies = {\n x: widthBasedTranslateRenderStrategy,\n y: heightBasedTranslateRenderStrategy,\n z: widthBasedTranslateRenderStrategy,\n scale: scaleRenderStrategy,\n scaleX: scaleRenderStrategy,\n scaleY: scaleRenderStrategy,\n scaleZ: scaleRenderStrategy,\n skew: degreesRenderStrategy,\n skewX: degreesRenderStrategy,\n skewY: degreesRenderStrategy,\n rotate: degreesRenderStrategy,\n rotateX: degreesRenderStrategy,\n rotateY: degreesRenderStrategy,\n rotateZ: degreesRenderStrategy,\n};\n\n/**\n * Render an element style based on 2 keyframes and a progress value.\n *\n * @param {HTMLElement} element\n * @param {NormalizedKeyframe} from\n * @param {NormalizedKeyframe} to\n * @param {number} progress\n * @returns {void}\n */\nfunction render(element, from, to, progress) {\n const stepProgress = to.easing(map(progress, from.offset, to.offset, 0, 1));\n\n scheduler.read(function renderRead() {\n /** @type {false|number|string} */\n let opacity = false;\n if (isDefined(from.opacity) || isDefined(to.opacity)) {\n opacity = map(stepProgress, 0, 1, from.opacity ?? 1, to.opacity ?? 1);\n } else if (element.style.opacity) {\n opacity = '';\n }\n\n /** @type {false|string} */\n let transformOrigin = false;\n if (isDefined(to.transformOrigin)) {\n transformOrigin = to.transformOrigin;\n } else if (element.style.transformOrigin) {\n transformOrigin = '';\n }\n\n const props = Object.fromEntries(\n TRANSFORM_PROPS.filter((name) => isDefined(from[name]) || isDefined(to[name])).map((name) => {\n return [name, transformRenderStrategies[name](element, from[name], to[name], stepProgress)];\n }),\n );\n scheduler.write(function renderWrite() {\n if (opacity !== false) {\n // @ts-ignore\n element.style.opacity = opacity;\n }\n if (transformOrigin !== false) {\n element.style.transformOrigin = transformOrigin;\n }\n transform(element, props);\n });\n });\n}\n\n/**\n * @typedef {import('./transform.js').TransformProps} TransformProps\n * @typedef {TransformProps & {\n * opacity?: number;\n * transformOrigin?: string;\n * easing?: import('../math/createEases.js').EasingFunction|import('../tween.js').BezierCurve;\n * offset?: number;\n * }} Keyframe\n * @typedef {Keyframe & {\n * easing: import('../math/createEases.js').EasingFunction;\n * offset: number;\n * }} NormalizedKeyframe\n * @typedef {{\n * start: () => void;\n * pause: () => void;\n * play: () => void;\n * finish: () => void;\n * progress: (value?: number) => number\n * }} Animate\n */\n\n/**\n * Animate an element.\n * @param {HTMLElement} element\n * @param {Keyframe[]} keyframes\n * @param {import('../tween.js').TweenOptions} [options]\n * @returns {Animate}\n */\nfunction singleAnimate(element, keyframes, options = {}) {\n const keyframesCount = keyframes.length - 1;\n const normalizedKeyframes = keyframes.map(\n (keyframe, index) =>\n /** @type {NormalizedKeyframe} */ ({\n ...keyframe,\n offset: keyframe.offset ?? index / keyframesCount,\n easing: normalizeEase(keyframe.easing),\n }),\n );\n\n if (!running.has(element)) {\n running.set(element, new Map());\n }\n\n const key = `animate-${id}`;\n id += 1;\n\n /**\n * Set the progress value.\n *\n * @param {number} progress The progress value.\n */\n function callback(progress) {\n let toIndex = 0;\n while (\n normalizedKeyframes[toIndex] &&\n normalizedKeyframes[toIndex].offset <= progress &&\n normalizedKeyframes[toIndex].offset !== 1\n ) {\n toIndex += 1;\n }\n\n render(element, normalizedKeyframes[toIndex - 1], normalizedKeyframes[toIndex], progress);\n }\n\n const controls = tween(callback, {\n ...options,\n onStart() {\n if (isFunction(options.onStart)) {\n options.onStart();\n }\n // Stop running instances\n const runningKeys = running.get(element);\n runningKeys.forEach((runningPause, runningKey) => {\n runningPause();\n runningKeys.delete(runningKey);\n });\n runningKeys.set(key, controls.pause);\n running.set(element, runningKeys);\n },\n });\n\n return controls;\n}\n\n/**\n * Animate one or more elements.\n * @param {HTMLElement|HTMLElement[]|NodeListOf<HTMLElement>} elementOrElements\n * @param {Keyframe[]} keyframes\n * @param {import('../tween.js').TweenOptions} [options]\n * @returns {Animate}\n */\nexport function animate(elementOrElements, keyframes, options = {}) {\n const controls = eachElements(elementOrElements, (element) =>\n singleAnimate(element, keyframes, options),\n );\n\n const delegate = (key) => {\n // eslint-disable-next-line consistent-return\n return (...args) => {\n if (key === 'progress' && args.length === 0) {\n return controls[0][key]();\n }\n\n controls.forEach((control) => {\n control[key](...args);\n });\n };\n };\n\n return {\n start: delegate('start'),\n pause: delegate('pause'),\n finish: delegate('finish'),\n play: delegate('play'),\n progress: delegate('progress'),\n };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA0B;AAC1B,gBAAgD;AAChD,uBAA2C;AAC3C,uBAA0C;AAC1C,mBAAqC;AAErC,mBAA6B;AAE7B,IAAI,KAAK;AACT,IAAM,UAAU,oBAAI,QAAQ;AAE5B,IAAM,mBAAmB;AAAA,EACvB,KAAK,CAAC,OAAO,eAAgB,QAAQ,WAAW,IAAK;AAAA,EACrD,IAAI,CAAC,UAAW,QAAQ,OAAO,cAAe;AAAA,EAC9C,IAAI,CAAC,UAAW,QAAQ,OAAO,aAAc;AAAA,EAC7C,MAAM,CAAC,UAAW,QAAQ,KAAK,IAAI,OAAO,YAAY,OAAO,WAAW,IAAK;AAAA,EAC7E,MAAM,CAAC,UAAW,QAAQ,KAAK,IAAI,OAAO,YAAY,OAAO,WAAW,IAAK;AAC/E;AAQA,SAAS,sBAAsB,KAAK,YAAY;AAC9C,UAAI,oBAAS,GAAG,GAAG;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,IAAI,MAAM,CAAC,iBAAiB,IAAI,KAAK;AACxC,WAAO,IAAI;AAAA,EACb;AAEA,SAAO,iBAAiB,IAAI,IAAI,IAAI,IAAI,UAAU;AACpD;AAEA,IAAM,kCAAkC,CAAC,YAAY,CAAC,SAAS,WAAW,SAAS,iBACjF;AAAA,EACE;AAAA,IACE,aAAa;AAAA,IAEb,MAAM,QAAQ;AAAA,EAChB;AAAA,EACA,sBAAsB,WAAW,GAAG,MAAM,QAAQ,QAAQ;AAAA,EAC1D;AACF;AACF,IAAM,oCAAoC,gCAAgC,aAAa;AACvF,IAAM,qCAAqC,gCAAgC,cAAc;AAEzF,IAAM,6BAA6B,CAAC,iBAAiB,CAAC,SAAS,WAAW,SAAS,iBACjF,kBAAK,aAAa,cAAc,WAAW,cAAc,QAAQ;AACnE,IAAM,sBAAsB,2BAA2B,CAAC;AACxD,IAAM,wBAAwB,2BAA2B,CAAC;AAE1D,IAAM,4BAA4B;AAAA,EAChC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAWA,SAAS,OAAO,SAAS,MAAM,IAAI,UAAU;AAC3C,QAAM,eAAe,GAAG,WAAO,iBAAI,UAAU,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;AAE1E,mBAAAA,aAAU,KAAK,SAAS,aAAa;AAEnC,QAAI,UAAU;AACd,YAAI,qBAAU,KAAK,OAAO,SAAK,qBAAU,GAAG,OAAO,GAAG;AACpD,oBAAU,iBAAI,cAAc,GAAG,GAAG,KAAK,WAAW,GAAG,GAAG,WAAW,CAAC;AAAA,IACtE,WAAW,QAAQ,MAAM,SAAS;AAChC,gBAAU;AAAA,IACZ;AAGA,QAAI,kBAAkB;AACtB,YAAI,qBAAU,GAAG,eAAe,GAAG;AACjC,wBAAkB,GAAG;AAAA,IACvB,WAAW,QAAQ,MAAM,iBAAiB;AACxC,wBAAkB;AAAA,IACpB;AAEA,UAAM,QAAQ,OAAO;AAAA,MACnB,iCAAgB,OAAO,CAAC,aAAS,qBAAU,KAAK,KAAK,SAAK,qBAAU,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS;AAC3F,eAAO,CAAC,MAAM,0BAA0B,MAAM,SAAS,KAAK,OAAO,GAAG,OAAO,YAAY,CAAC;AAAA,MAC5F,CAAC;AAAA,IACH;AACA,qBAAAA,aAAU,MAAM,SAAS,cAAc;AACrC,UAAI,YAAY,OAAO;AAErB,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AACA,UAAI,oBAAoB,OAAO;AAC7B,gBAAQ,MAAM,kBAAkB;AAAA,MAClC;AACA,2BAAAC,SAAU,SAAS,KAAK;AAAA,IAC1B,CAAC;AAAA,EACH,CAAC;AACH;AA8BA,SAAS,cAAc,SAAS,WAAW,UAAU,CAAC,GAAG;AACvD,QAAM,iBAAiB,UAAU,SAAS;AAC1C,QAAM,sBAAsB,UAAU;AAAA,IACpC,CAAC,UAAU,WAC0B;AAAA,MACjC,GAAG;AAAA,MACH,QAAQ,SAAS,UAAU,QAAQ;AAAA,MACnC,YAAQ,4BAAc,SAAS,MAAM;AAAA,IACvC;AAAA,EACJ;AAEA,MAAI,CAAC,QAAQ,IAAI,OAAO,GAAG;AACzB,YAAQ,IAAI,SAAS,oBAAI,IAAI,CAAC;AAAA,EAChC;AAEA,QAAM,MAAM,WAAW;AACvB,QAAM;AAON,WAAS,SAAS,UAAU;AAC1B,QAAI,UAAU;AACd,WACE,oBAAoB,YACpB,oBAAoB,SAAS,UAAU,YACvC,oBAAoB,SAAS,WAAW,GACxC;AACA,iBAAW;AAAA,IACb;AAEA,WAAO,SAAS,oBAAoB,UAAU,IAAI,oBAAoB,UAAU,QAAQ;AAAA,EAC1F;AAEA,QAAM,eAAW,oBAAM,UAAU;AAAA,IAC/B,GAAG;AAAA,IACH,UAAU;AACR,cAAI,sBAAW,QAAQ,OAAO,GAAG;AAC/B,gBAAQ,QAAQ;AAAA,MAClB;AAEA,YAAM,cAAc,QAAQ,IAAI,OAAO;AACvC,kBAAY,QAAQ,CAAC,cAAc,eAAe;AAChD,qBAAa;AACb,oBAAY,OAAO,UAAU;AAAA,MAC/B,CAAC;AACD,kBAAY,IAAI,KAAK,SAAS,KAAK;AACnC,cAAQ,IAAI,SAAS,WAAW;AAAA,IAClC;AAAA,EACF,CAAC;AAED,SAAO;AACT;AASO,SAAS,QAAQ,mBAAmB,WAAW,UAAU,CAAC,GAAG;AAClE,QAAM,eAAW;AAAA,IAAa;AAAA,IAAmB,CAAC,YAChD,cAAc,SAAS,WAAW,OAAO;AAAA,EAC3C;AAEA,QAAM,WAAW,CAAC,QAAQ;AAExB,WAAO,IAAI,SAAS;AAClB,UAAI,QAAQ,cAAc,KAAK,WAAW,GAAG;AAC3C,eAAO,SAAS,GAAG,KAAK;AAAA,MAC1B;AAEA,eAAS,QAAQ,CAAC,YAAY;AAC5B,gBAAQ,KAAK,GAAG,IAAI;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,SAAS,OAAO;AAAA,IACvB,OAAO,SAAS,OAAO;AAAA,IACvB,QAAQ,SAAS,QAAQ;AAAA,IACzB,MAAM,SAAS,MAAM;AAAA,IACrB,UAAU,SAAS,UAAU;AAAA,EAC/B;AACF;",
6
+ "names": ["scheduler", "transform"]
7
+ }
@@ -1,31 +1,11 @@
1
1
  /**
2
- * @typedef {import('./transform.js').TransformProps} TransformProps
3
- * @typedef {TransformProps & {
4
- * opacity?: number;
5
- * transformOrigin?: string;
6
- * easing?: import('../math/createEases.js').EasingFunction|import('../tween.js').BezierCurve;
7
- * offset?: number;
8
- * }} Keyframe
9
- * @typedef {Keyframe & {
10
- * easing: import('../math/createEases.js').EasingFunction;
11
- * offset: number;
12
- * }} NormalizedKeyframe
13
- * @typedef {{
14
- * start: () => void;
15
- * pause: () => void;
16
- * play: () => void;
17
- * finish: () => void;
18
- * progress: (value: number?) => number
19
- * }} Animate
20
- */
21
- /**
22
- * Animate an element.
23
- * @param {HTMLElement} element
2
+ * Animate one or more elements.
3
+ * @param {HTMLElement|HTMLElement[]|NodeListOf<HTMLElement>} elementOrElements
24
4
  * @param {Keyframe[]} keyframes
25
5
  * @param {import('../tween.js').TweenOptions} [options]
26
6
  * @returns {Animate}
27
7
  */
28
- export function animate(element: HTMLElement, keyframes: Keyframe[], options?: import('../tween.js').TweenOptions): Animate;
8
+ export function animate(elementOrElements: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>, keyframes: Keyframe[], options?: import('../tween.js').TweenOptions): Animate;
29
9
  export type TransformProps = import('./transform.js').TransformProps;
30
10
  export type Keyframe = TransformProps & {
31
11
  opacity?: number;
@@ -42,5 +22,5 @@ export type Animate = {
42
22
  pause: () => void;
43
23
  play: () => void;
44
24
  finish: () => void;
45
- progress: (value: number | null) => number;
25
+ progress: (value?: number) => number;
46
26
  };