@studiometa/js-toolkit 2.6.5 → 2.8.0

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 (363) hide show
  1. package/Base/features.cjs +27 -0
  2. package/Base/features.cjs.map +7 -0
  3. package/Base/features.d.ts +2 -0
  4. package/Base/features.js +5 -0
  5. package/Base/features.js.map +7 -0
  6. package/Base/index.cjs +12 -15
  7. package/Base/index.cjs.map +2 -2
  8. package/Base/index.d.ts +11 -15
  9. package/Base/index.js +10 -6
  10. package/Base/index.js.map +2 -2
  11. package/Base/managers/AsyncChildrenManager.cjs +61 -0
  12. package/Base/managers/AsyncChildrenManager.cjs.map +7 -0
  13. package/Base/managers/AsyncChildrenManager.d.ts +18 -0
  14. package/Base/managers/AsyncChildrenManager.js +39 -0
  15. package/Base/managers/AsyncChildrenManager.js.map +7 -0
  16. package/Base/managers/ChildrenManager.cjs +32 -29
  17. package/Base/managers/ChildrenManager.cjs.map +2 -2
  18. package/Base/managers/ChildrenManager.d.ts +21 -1
  19. package/Base/managers/ChildrenManager.js +32 -29
  20. package/Base/managers/ChildrenManager.js.map +2 -2
  21. package/Base/managers/EventsManager.cjs.map +2 -2
  22. package/Base/managers/EventsManager.js.map +2 -2
  23. package/Base/managers/OptionsManager.d.ts +9 -9
  24. package/Base/managers/RefsManager.cjs +13 -8
  25. package/Base/managers/RefsManager.cjs.map +2 -2
  26. package/Base/managers/RefsManager.js +14 -9
  27. package/Base/managers/RefsManager.js.map +2 -2
  28. package/Base/managers/ResponsiveOptionsManager.d.ts +1 -1
  29. package/Base/managers/ServicesManager.d.ts +2 -2
  30. package/Base/managers/index.cjs +41 -0
  31. package/Base/managers/index.cjs.map +7 -0
  32. package/Base/managers/index.d.ts +8 -0
  33. package/Base/managers/index.js +19 -0
  34. package/Base/managers/index.js.map +7 -0
  35. package/Base/types.cjs.map +1 -1
  36. package/Base/types.d.ts +1 -1
  37. package/Base/utils.cjs +15 -1
  38. package/Base/utils.cjs.map +2 -2
  39. package/Base/utils.d.ts +1 -0
  40. package/Base/utils.js +15 -1
  41. package/Base/utils.js.map +2 -2
  42. package/decorators/index.cjs +1 -1
  43. package/decorators/index.cjs.map +2 -2
  44. package/decorators/index.d.ts +1 -1
  45. package/decorators/index.js +1 -1
  46. package/decorators/index.js.map +1 -1
  47. package/decorators/withBreakpointManager.cjs.map +2 -2
  48. package/decorators/withBreakpointManager.js.map +2 -2
  49. package/decorators/withBreakpointObserver.cjs.map +2 -2
  50. package/decorators/withBreakpointObserver.js.map +2 -2
  51. package/decorators/withDrag.cjs.map +2 -2
  52. package/decorators/withDrag.d.ts +1 -1
  53. package/decorators/withDrag.js.map +2 -2
  54. package/decorators/withMountWhenInView.cjs.map +2 -2
  55. package/decorators/withMountWhenInView.js.map +2 -2
  56. package/decorators/withResponsiveOptions.cjs.map +2 -2
  57. package/decorators/withResponsiveOptions.js.map +2 -2
  58. package/decorators/withScrolledInView/index.cjs +22 -0
  59. package/decorators/withScrolledInView/index.cjs.map +7 -0
  60. package/decorators/withScrolledInView/index.d.ts +2 -0
  61. package/decorators/withScrolledInView/index.js +3 -0
  62. package/decorators/withScrolledInView/index.js.map +7 -0
  63. package/decorators/withScrolledInView/types.cjs +19 -0
  64. package/decorators/withScrolledInView/types.cjs.map +7 -0
  65. package/decorators/withScrolledInView/types.d.ts +2 -0
  66. package/decorators/withScrolledInView/types.js +1 -0
  67. package/decorators/withScrolledInView/types.js.map +7 -0
  68. package/decorators/withScrolledInView/utils.cjs +99 -0
  69. package/decorators/withScrolledInView/utils.cjs.map +7 -0
  70. package/decorators/withScrolledInView/utils.d.ts +17 -0
  71. package/decorators/withScrolledInView/utils.js +77 -0
  72. package/decorators/withScrolledInView/utils.js.map +7 -0
  73. package/decorators/{withScrolledInView.cjs → withScrolledInView/withScrolledInView.cjs} +25 -10
  74. package/decorators/withScrolledInView/withScrolledInView.cjs.map +7 -0
  75. package/decorators/{withScrolledInView.d.ts → withScrolledInView/withScrolledInView.d.ts} +6 -5
  76. package/decorators/{withScrolledInView.js → withScrolledInView/withScrolledInView.js} +31 -9
  77. package/decorators/withScrolledInView/withScrolledInView.js.map +7 -0
  78. package/decorators/withVue2.cjs.map +2 -2
  79. package/decorators/withVue2.js.map +2 -2
  80. package/helpers/createApp.cjs +23 -19
  81. package/helpers/createApp.cjs.map +2 -2
  82. package/helpers/createApp.d.ts +6 -1
  83. package/helpers/createApp.js +23 -19
  84. package/helpers/createApp.js.map +2 -2
  85. package/helpers/getClosestParent.cjs +3 -11
  86. package/helpers/getClosestParent.cjs.map +2 -2
  87. package/helpers/getClosestParent.js +3 -11
  88. package/helpers/getClosestParent.js.map +2 -2
  89. package/helpers/getInstanceFromElement.cjs.map +2 -2
  90. package/helpers/getInstanceFromElement.js.map +2 -2
  91. package/helpers/importOnInteraction.cjs.map +2 -2
  92. package/helpers/importOnInteraction.js.map +2 -2
  93. package/helpers/importWhenIdle.cjs.map +2 -2
  94. package/helpers/importWhenIdle.d.ts +1 -1
  95. package/helpers/importWhenIdle.js.map +2 -2
  96. package/index.cjs.map +1 -1
  97. package/index.d.ts +1 -1
  98. package/index.js.map +1 -1
  99. package/package.json +2 -2
  100. package/services/drag.cjs +1 -1
  101. package/services/drag.cjs.map +3 -3
  102. package/services/drag.d.ts +21 -24
  103. package/services/drag.js.map +3 -3
  104. package/services/index.d.ts +7 -7
  105. package/services/key.cjs +1 -1
  106. package/services/key.cjs.map +3 -3
  107. package/services/key.d.ts +8 -9
  108. package/services/key.js.map +3 -3
  109. package/services/load.cjs +1 -1
  110. package/services/load.cjs.map +3 -3
  111. package/services/load.d.ts +6 -5
  112. package/services/load.js.map +3 -3
  113. package/services/pointer.cjs +1 -1
  114. package/services/pointer.cjs.map +3 -3
  115. package/services/pointer.d.ts +10 -10
  116. package/services/pointer.js.map +3 -3
  117. package/services/raf.cjs +4 -4
  118. package/services/raf.cjs.map +3 -3
  119. package/services/raf.d.ts +6 -7
  120. package/services/raf.js +3 -3
  121. package/services/raf.js.map +3 -3
  122. package/services/resize.cjs +1 -1
  123. package/services/resize.cjs.map +3 -3
  124. package/services/resize.d.ts +8 -9
  125. package/services/resize.js.map +3 -3
  126. package/services/scroll.cjs +1 -1
  127. package/services/scroll.cjs.map +3 -3
  128. package/services/scroll.d.ts +16 -17
  129. package/services/scroll.js.map +3 -3
  130. package/services/service.cjs +2 -2
  131. package/services/service.cjs.map +3 -3
  132. package/services/service.d.ts +12 -14
  133. package/services/service.js +1 -1
  134. package/services/service.js.map +3 -3
  135. package/utils/Queue.cjs +60 -0
  136. package/utils/Queue.cjs.map +7 -0
  137. package/utils/Queue.d.ts +44 -0
  138. package/utils/Queue.js +38 -0
  139. package/utils/Queue.js.map +7 -0
  140. package/utils/collide/boundingRectToCircle.cjs +3 -2
  141. package/utils/collide/boundingRectToCircle.cjs.map +3 -3
  142. package/utils/collide/boundingRectToCircle.d.ts +8 -13
  143. package/utils/collide/boundingRectToCircle.js +2 -1
  144. package/utils/collide/boundingRectToCircle.js.map +3 -3
  145. package/utils/collide/collideCircleCircle.cjs +1 -1
  146. package/utils/collide/collideCircleCircle.cjs.map +1 -1
  147. package/utils/collide/collideCircleCircle.d.ts +1 -15
  148. package/utils/collide/collideCircleCircle.js.map +1 -1
  149. package/utils/collide/collideCircleRect.cjs +1 -1
  150. package/utils/collide/collideCircleRect.cjs.map +1 -1
  151. package/utils/collide/collideCircleRect.d.ts +1 -33
  152. package/utils/collide/collideCircleRect.js.map +1 -1
  153. package/utils/collide/collidePointCircle.cjs +1 -1
  154. package/utils/collide/collidePointCircle.cjs.map +1 -1
  155. package/utils/collide/collidePointCircle.d.ts +1 -25
  156. package/utils/collide/collidePointCircle.js.map +1 -1
  157. package/utils/collide/collidePointRect.cjs +1 -1
  158. package/utils/collide/collidePointRect.cjs.map +1 -1
  159. package/utils/collide/collidePointRect.d.ts +1 -29
  160. package/utils/collide/collidePointRect.js.map +1 -1
  161. package/utils/collide/collideRectRect.cjs +1 -1
  162. package/utils/collide/collideRectRect.cjs.map +1 -1
  163. package/utils/collide/collideRectRect.d.ts +1 -19
  164. package/utils/collide/collideRectRect.js.map +1 -1
  165. package/utils/collide/index.cjs +1 -1
  166. package/utils/collide/index.cjs.map +1 -1
  167. package/utils/collide/index.d.ts +9 -6
  168. package/utils/collide/index.js.map +1 -1
  169. package/utils/css/animate.cjs +32 -16
  170. package/utils/css/animate.cjs.map +4 -4
  171. package/utils/css/animate.d.ts +12 -11
  172. package/utils/css/animate.js +31 -15
  173. package/utils/css/animate.js.map +4 -4
  174. package/utils/css/classes.cjs +1 -1
  175. package/utils/css/classes.cjs.map +3 -3
  176. package/utils/css/classes.d.ts +3 -16
  177. package/utils/css/classes.js.map +3 -3
  178. package/utils/css/getOffsetSizes.cjs +2 -2
  179. package/utils/css/getOffsetSizes.cjs.map +3 -3
  180. package/utils/css/getOffsetSizes.d.ts +0 -2
  181. package/utils/css/getOffsetSizes.js +1 -1
  182. package/utils/css/getOffsetSizes.js.map +3 -3
  183. package/utils/css/matrix.cjs +1 -1
  184. package/utils/css/matrix.cjs.map +3 -3
  185. package/utils/css/matrix.d.ts +10 -8
  186. package/utils/css/matrix.js.map +3 -3
  187. package/utils/css/styles.cjs +1 -1
  188. package/utils/css/styles.cjs.map +3 -3
  189. package/utils/css/styles.d.ts +2 -10
  190. package/utils/css/styles.js.map +3 -3
  191. package/utils/css/transform.cjs +1 -1
  192. package/utils/css/transform.cjs.map +3 -3
  193. package/utils/css/transform.d.ts +5 -27
  194. package/utils/css/transform.js.map +3 -3
  195. package/utils/css/transition.cjs +2 -2
  196. package/utils/css/transition.cjs.map +3 -3
  197. package/utils/css/transition.d.ts +11 -15
  198. package/utils/css/transition.js +1 -1
  199. package/utils/css/transition.js.map +3 -3
  200. package/utils/debounce.cjs +1 -1
  201. package/utils/debounce.cjs.map +3 -3
  202. package/utils/debounce.d.ts +3 -3
  203. package/utils/debounce.js.map +3 -3
  204. package/utils/dom/ancestors.cjs +37 -0
  205. package/utils/dom/ancestors.cjs.map +7 -0
  206. package/utils/dom/ancestors.d.ts +8 -0
  207. package/utils/dom/ancestors.js +15 -0
  208. package/utils/dom/ancestors.js.map +7 -0
  209. package/utils/dom/index.cjs +21 -0
  210. package/utils/dom/index.cjs.map +7 -0
  211. package/utils/dom/index.d.ts +1 -0
  212. package/utils/dom/index.js +2 -0
  213. package/utils/dom/index.js.map +7 -0
  214. package/utils/focusTrap.cjs +4 -2
  215. package/utils/focusTrap.cjs.map +3 -3
  216. package/utils/focusTrap.d.ts +3 -4
  217. package/utils/focusTrap.js +3 -1
  218. package/utils/focusTrap.js.map +3 -3
  219. package/utils/has.cjs +1 -1
  220. package/utils/has.cjs.map +3 -3
  221. package/utils/has.d.ts +1 -3
  222. package/utils/has.js.map +3 -3
  223. package/utils/history.cjs +1 -1
  224. package/utils/history.cjs.map +3 -3
  225. package/utils/history.d.ts +10 -10
  226. package/utils/history.js.map +3 -3
  227. package/utils/index.cjs +3 -0
  228. package/utils/index.cjs.map +2 -2
  229. package/utils/index.d.ts +2 -0
  230. package/utils/index.js +3 -0
  231. package/utils/index.js.map +2 -2
  232. package/utils/is.cjs +2 -2
  233. package/utils/is.cjs.map +3 -3
  234. package/utils/is.d.ts +26 -8
  235. package/utils/is.js +1 -1
  236. package/utils/is.js.map +3 -3
  237. package/utils/keyCodes.cjs +1 -1
  238. package/utils/keyCodes.cjs.map +2 -2
  239. package/utils/keyCodes.d.ts +10 -10
  240. package/utils/keyCodes.js.map +2 -2
  241. package/utils/math/clamp.cjs +1 -1
  242. package/utils/math/clamp.cjs.map +3 -3
  243. package/utils/math/clamp.js.map +3 -3
  244. package/utils/math/clamp01.cjs +1 -1
  245. package/utils/math/clamp01.cjs.map +3 -3
  246. package/utils/math/clamp01.js.map +3 -3
  247. package/utils/math/createEases.cjs +1 -1
  248. package/utils/math/createEases.cjs.map +3 -3
  249. package/utils/math/createEases.d.ts +3 -6
  250. package/utils/math/createEases.js.map +3 -3
  251. package/utils/math/damp.cjs +1 -1
  252. package/utils/math/damp.cjs.map +3 -3
  253. package/utils/math/damp.js.map +3 -3
  254. package/utils/math/ease.cjs +1 -1
  255. package/utils/math/ease.cjs.map +3 -3
  256. package/utils/math/ease.d.ts +21 -21
  257. package/utils/math/ease.js.map +3 -3
  258. package/utils/math/index.cjs +1 -1
  259. package/utils/math/index.cjs.map +1 -1
  260. package/utils/math/index.d.ts +10 -10
  261. package/utils/math/index.js.map +1 -1
  262. package/utils/math/inertiaFinalValue.cjs +1 -1
  263. package/utils/math/inertiaFinalValue.cjs.map +3 -3
  264. package/utils/math/inertiaFinalValue.js.map +3 -3
  265. package/utils/math/lerp.cjs +1 -1
  266. package/utils/math/lerp.cjs.map +3 -3
  267. package/utils/math/lerp.js.map +3 -3
  268. package/utils/math/map.cjs +1 -1
  269. package/utils/math/map.cjs.map +3 -3
  270. package/utils/math/map.js.map +3 -3
  271. package/utils/math/round.cjs +1 -1
  272. package/utils/math/round.cjs.map +3 -3
  273. package/utils/math/round.js.map +3 -3
  274. package/utils/memoize.cjs +6 -2
  275. package/utils/memoize.cjs.map +3 -3
  276. package/utils/memoize.d.ts +18 -28
  277. package/utils/memoize.js +5 -1
  278. package/utils/memoize.js.map +3 -3
  279. package/utils/nextFrame.cjs +1 -1
  280. package/utils/nextFrame.cjs.map +3 -3
  281. package/utils/nextFrame.d.ts +3 -6
  282. package/utils/nextFrame.js.map +3 -3
  283. package/utils/nextMicrotask.cjs +1 -1
  284. package/utils/nextMicrotask.cjs.map +3 -3
  285. package/utils/nextMicrotask.d.ts +1 -5
  286. package/utils/nextMicrotask.js.map +3 -3
  287. package/utils/nextTick.cjs +5 -5
  288. package/utils/nextTick.cjs.map +3 -3
  289. package/utils/nextTick.d.ts +1 -5
  290. package/utils/nextTick.js +4 -4
  291. package/utils/nextTick.js.map +3 -3
  292. package/utils/noop.cjs +1 -1
  293. package/utils/noop.cjs.map +3 -3
  294. package/utils/noop.d.ts +2 -5
  295. package/utils/noop.js.map +3 -3
  296. package/utils/object/autoBind.cjs +1 -1
  297. package/utils/object/autoBind.cjs.map +3 -3
  298. package/utils/object/autoBind.d.ts +5 -4
  299. package/utils/object/autoBind.js.map +3 -3
  300. package/utils/object/getAllProperties.cjs +3 -3
  301. package/utils/object/getAllProperties.cjs.map +3 -3
  302. package/utils/object/getAllProperties.d.ts +1 -1
  303. package/utils/object/getAllProperties.js +2 -2
  304. package/utils/object/getAllProperties.js.map +3 -3
  305. package/utils/object/index.cjs +1 -1
  306. package/utils/object/index.cjs.map +1 -1
  307. package/utils/object/index.d.ts +2 -2
  308. package/utils/object/index.js.map +1 -1
  309. package/utils/scheduler.cjs +2 -2
  310. package/utils/scheduler.cjs.map +3 -3
  311. package/utils/scheduler.d.ts +4 -13
  312. package/utils/scheduler.js +1 -1
  313. package/utils/scheduler.js.map +3 -3
  314. package/utils/scrollTo.cjs +1 -1
  315. package/utils/scrollTo.cjs.map +3 -3
  316. package/utils/scrollTo.d.ts +0 -3
  317. package/utils/scrollTo.js.map +3 -3
  318. package/utils/string/index.cjs +1 -1
  319. package/utils/string/index.cjs.map +1 -1
  320. package/utils/string/index.d.ts +10 -10
  321. package/utils/string/index.js.map +1 -1
  322. package/utils/string/withLeadingCharacters.cjs +1 -1
  323. package/utils/string/withLeadingCharacters.cjs.map +3 -3
  324. package/utils/string/withLeadingCharacters.js.map +3 -3
  325. package/utils/string/withLeadingSlash.cjs +1 -1
  326. package/utils/string/withLeadingSlash.cjs.map +3 -3
  327. package/utils/string/withLeadingSlash.js.map +3 -3
  328. package/utils/string/withTrailingCharacters.cjs +1 -1
  329. package/utils/string/withTrailingCharacters.cjs.map +3 -3
  330. package/utils/string/withTrailingCharacters.js.map +3 -3
  331. package/utils/string/withTrailingSlash.cjs +1 -1
  332. package/utils/string/withTrailingSlash.cjs.map +3 -3
  333. package/utils/string/withTrailingSlash.js.map +3 -3
  334. package/utils/string/withoutLeadingCharacters.cjs +1 -1
  335. package/utils/string/withoutLeadingCharacters.cjs.map +3 -3
  336. package/utils/string/withoutLeadingCharacters.js.map +3 -3
  337. package/utils/string/withoutLeadingCharactersRecursive.cjs +1 -1
  338. package/utils/string/withoutLeadingCharactersRecursive.cjs.map +3 -3
  339. package/utils/string/withoutLeadingCharactersRecursive.js.map +3 -3
  340. package/utils/string/withoutLeadingSlash.cjs +1 -1
  341. package/utils/string/withoutLeadingSlash.cjs.map +3 -3
  342. package/utils/string/withoutLeadingSlash.js.map +3 -3
  343. package/utils/string/withoutTrailingCharacters.cjs +1 -1
  344. package/utils/string/withoutTrailingCharacters.cjs.map +3 -3
  345. package/utils/string/withoutTrailingCharacters.js.map +3 -3
  346. package/utils/string/withoutTrailingCharactersRecursive.cjs +1 -1
  347. package/utils/string/withoutTrailingCharactersRecursive.cjs.map +3 -3
  348. package/utils/string/withoutTrailingCharactersRecursive.js.map +3 -3
  349. package/utils/string/withoutTrailingSlash.cjs +1 -1
  350. package/utils/string/withoutTrailingSlash.cjs.map +3 -3
  351. package/utils/string/withoutTrailingSlash.js.map +3 -3
  352. package/utils/throttle.cjs +2 -2
  353. package/utils/throttle.cjs.map +3 -3
  354. package/utils/throttle.d.ts +1 -1
  355. package/utils/throttle.js +1 -1
  356. package/utils/throttle.js.map +3 -3
  357. package/utils/tween.cjs +4 -3
  358. package/utils/tween.cjs.map +3 -3
  359. package/utils/tween.d.ts +17 -24
  360. package/utils/tween.js +3 -2
  361. package/utils/tween.js.map +3 -3
  362. package/decorators/withScrolledInView.cjs.map +0 -7
  363. package/decorators/withScrolledInView.js.map +0 -7
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/decorators/withScrolledInView/withScrolledInView.ts"],
4
+ "sourcesContent": ["import type { BaseInterface, BaseDecorator } from '../../Base/types.js';\nimport type { Base, BaseProps, BaseConfig } from '../../Base/index.js';\nimport type {\n RafServiceProps,\n ScrollServiceProps,\n ResizeServiceProps,\n} from '../../services/index.js';\nimport { withMountWhenInView } from '../withMountWhenInView.js';\nimport {\n damp,\n clamp,\n clamp01,\n getOffsetSizes,\n isFunction,\n useScheduler,\n} from '../../utils/index.js';\nimport { normalizeOffset, getEdges } from './utils.js';\n\nconst scheduler = useScheduler(['update', 'render']);\n\nexport interface WithScrolledInViewProps extends BaseProps {\n $options: {\n dampFactor: number;\n dampPrecision: number;\n offset: string;\n };\n}\n\nexport type ScrollInViewProps = {\n start: {\n x: number;\n y: number;\n };\n end: {\n x: number;\n y: number;\n };\n current: {\n x: number;\n y: number;\n };\n dampedCurrent: {\n x: number;\n y: number;\n };\n progress: {\n x: number;\n y: number;\n };\n dampedProgress: {\n x: number;\n y: number;\n };\n};\n\nexport type WithScrolledInViewOptions = IntersectionObserverInit & {\n useOffsetSizes?: boolean;\n};\n\n/**\n * Update props on tick.\n */\nfunction updateProps(\n props: ScrollInViewProps,\n dampFactor: number,\n dampPrecision: number,\n axis: 'x' | 'y' = 'x',\n): void {\n props.current[axis] = clamp(\n axis === 'x' ? window.pageXOffset : window.pageYOffset,\n props.start[axis],\n props.end[axis],\n );\n props.dampedCurrent[axis] = damp(\n props.current[axis],\n props.dampedCurrent[axis],\n dampFactor,\n dampPrecision,\n );\n props.progress[axis] = clamp01(\n (props.current[axis] - props.start[axis]) / (props.end[axis] - props.start[axis]),\n );\n props.dampedProgress[axis] = clamp01(\n (props.dampedCurrent[axis] - props.start[axis]) / (props.end[axis] - props.start[axis]),\n );\n}\n\nexport interface WithScrolledInViewInterface extends BaseInterface {\n /**\n * @private\n * @type {ScrollInViewProps}\n */\n __props: ScrollInViewProps;\n dampFactor?: number;\n dampPrecision?: number;\n mounted(): void;\n resized(props: ResizeServiceProps): void;\n scrolled(props: ScrollServiceProps): void;\n ticked(props: RafServiceProps): void;\n destroyed(): void;\n /**\n * @private\n */\n __setProps(): void;\n}\n\n/**\n * Add scrolled in view capabilities to a component.\n */\nexport function withScrolledInView<S extends Base = Base>(\n BaseClass: typeof Base,\n options: WithScrolledInViewOptions = {},\n): BaseDecorator<WithScrolledInViewInterface, S, WithScrolledInViewProps> {\n /**\n * Class.\n */\n class WithScrolledInView<T extends BaseProps = BaseProps> extends withMountWhenInView(\n BaseClass,\n options,\n )<T & WithScrolledInViewProps> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: `${BaseClass.config.name}WithMountWhenInView`,\n emits: ['scrolledInView'],\n options: {\n dampFactor: {\n type: Number,\n default: 0.1,\n },\n dampPrecision: {\n type: Number,\n default: 0.001,\n },\n offset: {\n type: String,\n default: 'start end / end start',\n },\n },\n };\n\n __props: ScrollInViewProps = {\n start: {\n x: 0,\n y: 0,\n },\n end: {\n x: 0,\n y: 0,\n },\n current: {\n x: 0,\n y: 0,\n },\n dampedCurrent: {\n x: 0,\n y: 0,\n },\n progress: {\n x: 0,\n y: 0,\n },\n dampedProgress: {\n x: 0,\n y: 0,\n },\n };\n\n /**\n * Factor used for the `dampedProgress` props.\n * @deprecated\n * @todo v3 delete in favor of option API\n */\n dampFactor?: number = null;\n\n /**\n * Precision for the `dampedProgress` props.\n * @deprecated\n * @todo v3 delete in favor of option API\n */\n dampPrecision?: number = null;\n\n /**\n * Bind listeners.\n */\n constructor(element: HTMLElement) {\n super(element);\n\n const render = () => {\n scheduler.update(() => {\n // @ts-ignore\n const renderFn = this.__callMethod('scrolledInView', this.__props);\n if (isFunction(renderFn)) {\n scheduler.render(() => {\n renderFn(this.__props);\n });\n }\n });\n };\n\n const delegate = {\n handleEvent(event) {\n delegate[event.type](event.detail[0]);\n },\n resized: () => {\n this.__setProps();\n },\n scrolled: (props) => {\n if ((!this.$services.has('ticked') && props.changed.y) || props.changed.x) {\n this.$services.enable('ticked');\n }\n },\n ticked: () => {\n const dampFactor = this.dampFactor ?? this.$options.dampFactor;\n const dampPrecision = this.dampPrecision ?? this.$options.dampPrecision;\n\n updateProps(this.__props, dampFactor, dampPrecision, 'x');\n updateProps(this.__props, dampFactor, dampPrecision, 'y');\n\n if (\n this.__props.dampedCurrent.x === this.__props.current.x &&\n this.__props.dampedCurrent.y === this.__props.current.y\n ) {\n this.$services.disable('ticked');\n }\n\n render();\n },\n };\n\n this.$on('before-mounted', () => {\n this.$on('resized', delegate);\n this.$on('scrolled', delegate);\n this.$on('ticked', delegate);\n });\n\n this.$on('mounted', () => {\n this.__setProps();\n });\n\n this.$on('destroyed', () => {\n this.$off('resized', delegate);\n this.$off('scrolled', delegate);\n this.$off('ticked', delegate);\n\n // Clamp damped values to their final value and trigger one last render on destroy\n this.__props.dampedCurrent.x = this.__props.current.x;\n this.__props.dampedCurrent.y = this.__props.current.y;\n this.__props.dampedProgress.x = this.__props.progress.x;\n this.__props.dampedProgress.y = this.__props.progress.y;\n render();\n });\n }\n\n /**\n * Mounted hook.\n */\n mounted() {\n // @ts-ignore\n if (isFunction(super.mounted)) {\n // @ts-ignore\n super.mounted();\n }\n }\n\n /**\n * Resized hook.\n */\n resized(props: ResizeServiceProps) {\n // @ts-ignore\n if (isFunction(super.resized)) {\n // @ts-ignore\n super.resized(props);\n }\n }\n\n /**\n * Scrolled hook.\n */\n scrolled(props: ScrollServiceProps) {\n // @ts-ignore\n if (isFunction(super.scrolled)) {\n // @ts-ignore\n super.scrolled(props);\n }\n }\n\n /**\n * Ticked hook.\n */\n ticked(props: RafServiceProps) {\n // @ts-ignore\n if (isFunction(super.ticked)) {\n // @ts-ignore\n super.ticked(props);\n }\n }\n\n /**\n * Destroyed hook.\n */\n destroyed() {\n // @ts-ignore\n if (isFunction(super.destroyed)) {\n // @ts-ignore\n super.destroyed();\n }\n }\n\n /**\n * Set the decorator props.\n */\n __setProps() {\n const targetSizes = options.useOffsetSizes\n ? getOffsetSizes(this.$el)\n : this.$el.getBoundingClientRect();\n\n targetSizes.y += window.pageYOffset;\n targetSizes.x += window.pageXOffset;\n\n const containerSizes = {\n x: 0,\n y: 0,\n height: window.innerHeight,\n width: window.innerWidth,\n };\n\n const offset = normalizeOffset(this.$options.offset);\n\n // Y axis\n const [yStart, yEnd] = getEdges('y', targetSizes, containerSizes, offset);\n const yCurrent = clamp(window.pageYOffset, yStart, yEnd);\n const yProgress = clamp01((yCurrent - yStart) / (yEnd - yStart));\n // X axis\n const [xStart, xEnd] = getEdges('x', targetSizes, containerSizes, offset);\n const xCurrent = clamp(window.pageXOffset, xStart, xEnd);\n const xProgress = clamp01((xCurrent - xStart) / (xEnd - xStart));\n\n this.__props.start.x = xStart;\n this.__props.start.y = yStart;\n this.__props.end.x = xEnd;\n this.__props.end.y = yEnd;\n this.__props.current.x = xCurrent;\n this.__props.current.y = yCurrent;\n this.__props.dampedCurrent.x = damp(\n xCurrent,\n this.__props.dampedCurrent.x,\n this.dampFactor,\n this.dampPrecision,\n );\n this.__props.dampedCurrent.y = damp(\n yCurrent,\n this.__props.dampedCurrent.y,\n this.dampFactor,\n this.dampPrecision,\n );\n this.__props.progress.x = xProgress;\n this.__props.progress.y = yProgress;\n this.__props.dampedProgress.x = clamp01(\n (this.__props.dampedCurrent.x - xStart) / (xEnd - xStart),\n );\n this.__props.dampedProgress.y = clamp01(\n (this.__props.dampedCurrent.y - yStart) / (yEnd - yStart),\n );\n }\n }\n\n // @ts-ignore\n return WithScrolledInView;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/decorators/withVue2.ts"],
4
- "sourcesContent": ["import type Vue from 'vue';\nimport type { ComponentOptions, VueConstructor } from 'vue';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\nimport type { Base, BaseConfig, BaseProps } from '../Base/index.js';\nimport { isDev, isFunction } from '../utils/index.js';\n\nexport interface WithVue2Props extends BaseProps {\n $refs: {\n vue: HTMLElement;\n };\n}\n\nexport interface WithVue2Interface extends BaseInterface {\n $vue: Vue;\n}\n\n/**\n * withVue decorator.\n */\nexport function withVue2<S extends Base, T extends Vue = Vue>(\n BaseClass: typeof Base,\n VueCtor: VueConstructor,\n): BaseDecorator<WithVue2Interface, S, WithVue2Props> {\n type VueConfig = ComponentOptions<T> & {\n render: ComponentOptions<T>['render'];\n };\n\n /**\n * Class.\n */\n class WithVue2 extends BaseClass {\n static config:BaseConfig = {\n ...BaseClass.config,\n name: `${BaseClass.config.name}WithVue`,\n refs: [...(BaseClass.config?.refs ?? []), 'vue'],\n };\n\n $vue: Vue;\n\n /**\n * Vue app configuration.\n */\n static vueConfig: VueConfig;\n\n constructor(element: HTMLElement) {\n super(element);\n\n // @ts-ignore\n const vueConfig: VueConfig = this.vueConfig ?? this.constructor.vueConfig;\n\n if (!vueConfig) {\n if (isDev) {\n throw new Error('[withVue] You must define a `vueConfig` object.');\n }\n return;\n }\n\n if (!isFunction(vueConfig.render)) {\n if (isDev) {\n throw new Error('[withVue] You must define a `render` function in vueConfig.');\n }\n return;\n }\n\n this.$vue = new VueCtor(vueConfig);\n\n this.$on('mounted', () => {\n if (!(this.$refs.vue instanceof HTMLElement)) {\n throw new Error('[withVue] The `vue` refs must be a single HTMLElement.');\n }\n\n this.$vue.$mount(this.$refs.vue);\n });\n\n this.$on('destroyed', () => {\n this.$vue.$destroy();\n });\n }\n }\n\n // @ts-ignore\n return WithVue2;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,mBAAkC;AAe3B,SAAS,SACd,WACA,SACoD;AAQpD,QAAM,iBAAiB,UAAU;AAAA,IAC/B,OAAO,SAAoB;AAAA,MACzB,GAAG,UAAU;AAAA,MACb,MAAM,GAAG,UAAU,OAAO;AAAA,MAC1B,MAAM,CAAC,GAAI,UAAU,QAAQ,QAAQ,CAAC,GAAI,KAAK;AAAA,IACjD;AAAA,IAEA;AAAA,IAKA,OAAO;AAAA,IAEP,YAAY,SAAsB;AAChC,YAAM,OAAO;AAGb,YAAM,YAAuB,KAAK,aAAa,KAAK,YAAY;AAEhE,UAAI,CAAC,WAAW;AACd,YAAI,oBAAO;AACT,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AACA;AAAA,MACF;AAEA,UAAI,KAAC,yBAAW,UAAU,MAAM,GAAG;AACjC,YAAI,oBAAO;AACT,gBAAM,IAAI,MAAM,6DAA6D;AAAA,QAC/E;AACA;AAAA,MACF;AAEA,WAAK,OAAO,IAAI,QAAQ,SAAS;AAEjC,WAAK,IAAI,WAAW,MAAM;AACxB,YAAI,EAAE,KAAK,MAAM,eAAe,cAAc;AAC5C,gBAAM,IAAI,MAAM,wDAAwD;AAAA,QAC1E;AAEA,aAAK,KAAK,OAAO,KAAK,MAAM,GAAG;AAAA,MACjC,CAAC;AAED,WAAK,IAAI,aAAa,MAAM;AAC1B,aAAK,KAAK,SAAS;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAGA,SAAO;AACT;",
4
+ "sourcesContent": ["import type Vue from 'vue';\nimport type { ComponentOptions, VueConstructor } from 'vue';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\nimport type { Base, BaseConfig, BaseProps } from '../Base/index.js';\nimport { isDev, isFunction } from '../utils/index.js';\n\nexport interface WithVue2Props extends BaseProps {\n $refs: {\n vue: HTMLElement;\n };\n}\n\nexport interface WithVue2Interface extends BaseInterface {\n $vue: Vue;\n}\n\n/**\n * withVue decorator.\n */\nexport function withVue2<S extends Base, T extends Vue = Vue>(\n BaseClass: typeof Base,\n VueCtor: VueConstructor,\n): BaseDecorator<WithVue2Interface, S, WithVue2Props> {\n type VueConfig = ComponentOptions<T> & {\n render: ComponentOptions<T>['render'];\n };\n\n /**\n * Class.\n */\n class WithVue2 extends BaseClass {\n static config: BaseConfig = {\n ...BaseClass.config,\n name: `${BaseClass.config.name}WithVue`,\n refs: [...(BaseClass.config?.refs ?? []), 'vue'],\n };\n\n $vue: Vue;\n\n /**\n * Vue app configuration.\n */\n static vueConfig: VueConfig;\n\n constructor(element: HTMLElement) {\n super(element);\n\n // @ts-ignore\n const vueConfig: VueConfig = this.vueConfig ?? this.constructor.vueConfig;\n\n if (!vueConfig) {\n if (isDev) {\n throw new Error('[withVue] You must define a `vueConfig` object.');\n }\n return;\n }\n\n if (!isFunction(vueConfig.render)) {\n if (isDev) {\n throw new Error('[withVue] You must define a `render` function in vueConfig.');\n }\n return;\n }\n\n this.$vue = new VueCtor(vueConfig);\n\n this.$on('mounted', () => {\n if (!(this.$refs.vue instanceof HTMLElement)) {\n throw new Error('[withVue] The `vue` refs must be a single HTMLElement.');\n }\n\n this.$vue.$mount(this.$refs.vue);\n });\n\n this.$on('destroyed', () => {\n this.$vue.$destroy();\n });\n }\n }\n\n // @ts-ignore\n return WithVue2;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,mBAAkC;AAe3B,SAAS,SACd,WACA,SACoD;AAQpD,QAAM,iBAAiB,UAAU;AAAA,IAC/B,OAAO,SAAqB;AAAA,MAC1B,GAAG,UAAU;AAAA,MACb,MAAM,GAAG,UAAU,OAAO;AAAA,MAC1B,MAAM,CAAC,GAAI,UAAU,QAAQ,QAAQ,CAAC,GAAI,KAAK;AAAA,IACjD;AAAA,IAEA;AAAA,IAKA,OAAO;AAAA,IAEP,YAAY,SAAsB;AAChC,YAAM,OAAO;AAGb,YAAM,YAAuB,KAAK,aAAa,KAAK,YAAY;AAEhE,UAAI,CAAC,WAAW;AACd,YAAI,oBAAO;AACT,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AACA;AAAA,MACF;AAEA,UAAI,KAAC,yBAAW,UAAU,MAAM,GAAG;AACjC,YAAI,oBAAO;AACT,gBAAM,IAAI,MAAM,6DAA6D;AAAA,QAC/E;AACA;AAAA,MACF;AAEA,WAAK,OAAO,IAAI,QAAQ,SAAS;AAEjC,WAAK,IAAI,WAAW,MAAM;AACxB,YAAI,EAAE,KAAK,MAAM,eAAe,cAAc;AAC5C,gBAAM,IAAI,MAAM,wDAAwD;AAAA,QAC1E;AAEA,aAAK,KAAK,OAAO,KAAK,MAAM,GAAG;AAAA,MACjC,CAAC;AAED,WAAK,IAAI,aAAa,MAAM;AAC1B,aAAK,KAAK,SAAS;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAGA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/decorators/withVue2.ts"],
4
- "sourcesContent": ["import type Vue from 'vue';\nimport type { ComponentOptions, VueConstructor } from 'vue';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\nimport type { Base, BaseConfig, BaseProps } from '../Base/index.js';\nimport { isDev, isFunction } from '../utils/index.js';\n\nexport interface WithVue2Props extends BaseProps {\n $refs: {\n vue: HTMLElement;\n };\n}\n\nexport interface WithVue2Interface extends BaseInterface {\n $vue: Vue;\n}\n\n/**\n * withVue decorator.\n */\nexport function withVue2<S extends Base, T extends Vue = Vue>(\n BaseClass: typeof Base,\n VueCtor: VueConstructor,\n): BaseDecorator<WithVue2Interface, S, WithVue2Props> {\n type VueConfig = ComponentOptions<T> & {\n render: ComponentOptions<T>['render'];\n };\n\n /**\n * Class.\n */\n class WithVue2 extends BaseClass {\n static config:BaseConfig = {\n ...BaseClass.config,\n name: `${BaseClass.config.name}WithVue`,\n refs: [...(BaseClass.config?.refs ?? []), 'vue'],\n };\n\n $vue: Vue;\n\n /**\n * Vue app configuration.\n */\n static vueConfig: VueConfig;\n\n constructor(element: HTMLElement) {\n super(element);\n\n // @ts-ignore\n const vueConfig: VueConfig = this.vueConfig ?? this.constructor.vueConfig;\n\n if (!vueConfig) {\n if (isDev) {\n throw new Error('[withVue] You must define a `vueConfig` object.');\n }\n return;\n }\n\n if (!isFunction(vueConfig.render)) {\n if (isDev) {\n throw new Error('[withVue] You must define a `render` function in vueConfig.');\n }\n return;\n }\n\n this.$vue = new VueCtor(vueConfig);\n\n this.$on('mounted', () => {\n if (!(this.$refs.vue instanceof HTMLElement)) {\n throw new Error('[withVue] The `vue` refs must be a single HTMLElement.');\n }\n\n this.$vue.$mount(this.$refs.vue);\n });\n\n this.$on('destroyed', () => {\n this.$vue.$destroy();\n });\n }\n }\n\n // @ts-ignore\n return WithVue2;\n}\n"],
5
- "mappings": "AAIA,SAAS,OAAO,kBAAkB;AAe3B,SAAS,SACd,WACA,SACoD;AAQpD,QAAM,iBAAiB,UAAU;AAAA,IAC/B,OAAO,SAAoB;AAAA,MACzB,GAAG,UAAU;AAAA,MACb,MAAM,GAAG,UAAU,OAAO;AAAA,MAC1B,MAAM,CAAC,GAAI,UAAU,QAAQ,QAAQ,CAAC,GAAI,KAAK;AAAA,IACjD;AAAA,IAEA;AAAA,IAKA,OAAO;AAAA,IAEP,YAAY,SAAsB;AAChC,YAAM,OAAO;AAGb,YAAM,YAAuB,KAAK,aAAa,KAAK,YAAY;AAEhE,UAAI,CAAC,WAAW;AACd,YAAI,OAAO;AACT,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AACA;AAAA,MACF;AAEA,UAAI,CAAC,WAAW,UAAU,MAAM,GAAG;AACjC,YAAI,OAAO;AACT,gBAAM,IAAI,MAAM,6DAA6D;AAAA,QAC/E;AACA;AAAA,MACF;AAEA,WAAK,OAAO,IAAI,QAAQ,SAAS;AAEjC,WAAK,IAAI,WAAW,MAAM;AACxB,YAAI,EAAE,KAAK,MAAM,eAAe,cAAc;AAC5C,gBAAM,IAAI,MAAM,wDAAwD;AAAA,QAC1E;AAEA,aAAK,KAAK,OAAO,KAAK,MAAM,GAAG;AAAA,MACjC,CAAC;AAED,WAAK,IAAI,aAAa,MAAM;AAC1B,aAAK,KAAK,SAAS;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAGA,SAAO;AACT;",
4
+ "sourcesContent": ["import type Vue from 'vue';\nimport type { ComponentOptions, VueConstructor } from 'vue';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\nimport type { Base, BaseConfig, BaseProps } from '../Base/index.js';\nimport { isDev, isFunction } from '../utils/index.js';\n\nexport interface WithVue2Props extends BaseProps {\n $refs: {\n vue: HTMLElement;\n };\n}\n\nexport interface WithVue2Interface extends BaseInterface {\n $vue: Vue;\n}\n\n/**\n * withVue decorator.\n */\nexport function withVue2<S extends Base, T extends Vue = Vue>(\n BaseClass: typeof Base,\n VueCtor: VueConstructor,\n): BaseDecorator<WithVue2Interface, S, WithVue2Props> {\n type VueConfig = ComponentOptions<T> & {\n render: ComponentOptions<T>['render'];\n };\n\n /**\n * Class.\n */\n class WithVue2 extends BaseClass {\n static config: BaseConfig = {\n ...BaseClass.config,\n name: `${BaseClass.config.name}WithVue`,\n refs: [...(BaseClass.config?.refs ?? []), 'vue'],\n };\n\n $vue: Vue;\n\n /**\n * Vue app configuration.\n */\n static vueConfig: VueConfig;\n\n constructor(element: HTMLElement) {\n super(element);\n\n // @ts-ignore\n const vueConfig: VueConfig = this.vueConfig ?? this.constructor.vueConfig;\n\n if (!vueConfig) {\n if (isDev) {\n throw new Error('[withVue] You must define a `vueConfig` object.');\n }\n return;\n }\n\n if (!isFunction(vueConfig.render)) {\n if (isDev) {\n throw new Error('[withVue] You must define a `render` function in vueConfig.');\n }\n return;\n }\n\n this.$vue = new VueCtor(vueConfig);\n\n this.$on('mounted', () => {\n if (!(this.$refs.vue instanceof HTMLElement)) {\n throw new Error('[withVue] The `vue` refs must be a single HTMLElement.');\n }\n\n this.$vue.$mount(this.$refs.vue);\n });\n\n this.$on('destroyed', () => {\n this.$vue.$destroy();\n });\n }\n }\n\n // @ts-ignore\n return WithVue2;\n}\n"],
5
+ "mappings": "AAIA,SAAS,OAAO,kBAAkB;AAe3B,SAAS,SACd,WACA,SACoD;AAQpD,QAAM,iBAAiB,UAAU;AAAA,IAC/B,OAAO,SAAqB;AAAA,MAC1B,GAAG,UAAU;AAAA,MACb,MAAM,GAAG,UAAU,OAAO;AAAA,MAC1B,MAAM,CAAC,GAAI,UAAU,QAAQ,QAAQ,CAAC,GAAI,KAAK;AAAA,IACjD;AAAA,IAEA;AAAA,IAKA,OAAO;AAAA,IAEP,YAAY,SAAsB;AAChC,YAAM,OAAO;AAGb,YAAM,YAAuB,KAAK,aAAa,KAAK,YAAY;AAEhE,UAAI,CAAC,WAAW;AACd,YAAI,OAAO;AACT,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AACA;AAAA,MACF;AAEA,UAAI,CAAC,WAAW,UAAU,MAAM,GAAG;AACjC,YAAI,OAAO;AACT,gBAAM,IAAI,MAAM,6DAA6D;AAAA,QAC/E;AACA;AAAA,MACF;AAEA,WAAK,OAAO,IAAI,QAAQ,SAAS;AAEjC,WAAK,IAAI,WAAW,MAAM;AACxB,YAAI,EAAE,KAAK,MAAM,eAAe,cAAc;AAC5C,gBAAM,IAAI,MAAM,wDAAwD;AAAA,QAC1E;AAEA,aAAK,KAAK,OAAO,KAAK,MAAM,GAAG;AAAA,MACjC,CAAC;AAED,WAAK,IAAI,aAAa,MAAM;AAC1B,aAAK,KAAK,SAAS;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAGA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -22,31 +22,35 @@ __export(createApp_exports, {
22
22
  default: () => createApp
23
23
  });
24
24
  module.exports = __toCommonJS(createApp_exports);
25
+ var import_features = require("../Base/features.cjs");
26
+ var import_utils = require("../utils/index.cjs");
25
27
  function createApp(App, rootElement = document.body) {
26
- let isLoaded = document.readyState === "complete";
27
28
  let app;
28
- if (!isLoaded) {
29
- document.addEventListener("readystatechange", () => {
30
- if (document.readyState === "complete") {
31
- app = new App(rootElement).$mount();
32
- isLoaded = true;
33
- }
29
+ const options = rootElement instanceof HTMLElement ? { root: rootElement, features: void 0 } : { root: document.body, ...rootElement };
30
+ if ((0, import_utils.isDefined)(options.features)) {
31
+ Object.entries(options.features).forEach(([feature, value]) => {
32
+ import_features.features.set(feature, value);
34
33
  });
35
- } else {
36
- app = new App(rootElement).$mount();
37
34
  }
38
- const promise = new Promise((resolve) => {
39
- document.addEventListener("readystatechange", () => {
40
- if (document.readyState === "complete") {
41
- setTimeout(() => resolve(app), 0);
42
- }
43
- });
35
+ const p = new Promise((resolve) => {
36
+ const callback = () => {
37
+ setTimeout(() => {
38
+ app = new App(options.root).$mount();
39
+ resolve(app);
40
+ }, 0);
41
+ };
42
+ if (import_features.features.get("asyncChildren") || document.readyState === "complete") {
43
+ callback();
44
+ } else {
45
+ document.addEventListener("readystatechange", () => {
46
+ if (document.readyState === "complete") {
47
+ callback();
48
+ }
49
+ });
50
+ }
44
51
  });
45
52
  return function useApp() {
46
- if (isLoaded) {
47
- return Promise.resolve(app);
48
- }
49
- return promise;
53
+ return p;
50
54
  };
51
55
  }
52
56
  if (module.exports.default) module.exports = module.exports.default;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/createApp.ts"],
4
- "sourcesContent": ["import type { Base, BaseConstructor, BaseProps } from '../Base/index.js';\n\n/**\n * Instantiate and mount the given component on the given root element when the page has been loaded\n * and return a function to use the app instance when it is ready.\n */\nexport default function createApp<\n S extends BaseConstructor<Base>,\n T extends BaseProps = BaseProps,\n>(App: S, rootElement: HTMLElement = document.body): () => Promise<S & Base<T>> {\n let isLoaded = document.readyState === 'complete';\n let app: S & Base<T>;\n\n if (!isLoaded) {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n app = (new App(rootElement) as S & Base<T>).$mount();\n isLoaded = true;\n }\n });\n } else {\n app = (new App(rootElement) as S & Base<T>).$mount();\n }\n\n const promise:Promise<S & Base<T>> = new Promise((resolve) => {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n setTimeout(() => resolve(app), 0);\n }\n });\n });\n\n return function useApp() {\n if (isLoaded) {\n return Promise.resolve(app);\n }\n\n return promise;\n };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMe,SAAR,UAGL,KAAQ,cAA2B,SAAS,MAAkC;AAC9E,MAAI,WAAW,SAAS,eAAe;AACvC,MAAI;AAEJ,MAAI,CAAC,UAAU;AACb,aAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAI,SAAS,eAAe,YAAY;AACtC,cAAO,IAAI,IAAI,WAAW,EAAkB,OAAO;AACnD,mBAAW;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH,OAAO;AACL,UAAO,IAAI,IAAI,WAAW,EAAkB,OAAO;AAAA,EACrD;AAEA,QAAM,UAA+B,IAAI,QAAQ,CAAC,YAAY;AAC5D,aAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAI,SAAS,eAAe,YAAY;AACtC,mBAAW,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO,SAAS,SAAS;AACvB,QAAI,UAAU;AACZ,aAAO,QAAQ,QAAQ,GAAG;AAAA,IAC5B;AAEA,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import type { Base, BaseConstructor, BaseProps } from '../Base/index.js';\nimport type { Features } from '../Base/features.js';\nimport { features } from '../Base/features.js';\nimport { isDefined } from '../utils/index.js';\n\nexport type CreateAppOptions = {\n root: HTMLElement;\n features: Features;\n};\n\n/**\n * Instantiate and mount the given component on the given root element when the page has been loaded\n * and return a function to use the app instance when it is ready.\n */\nexport default function createApp<S extends BaseConstructor<Base>, T extends BaseProps = BaseProps>(\n App: S,\n rootElement: HTMLElement | Partial<CreateAppOptions> = document.body,\n): () => Promise<S & Base<T>> {\n let app: S & Base<T>;\n const options =\n rootElement instanceof HTMLElement\n ? { root: rootElement, features: undefined }\n : { root: document.body, ...rootElement };\n\n if (isDefined(options.features)) {\n Object.entries(options.features).forEach(([feature, value]) => {\n features.set(feature as keyof Features, value);\n });\n }\n\n const p: Promise<S & Base<T>> = new Promise((resolve) => {\n const callback = () => {\n setTimeout(() => {\n app = (new App(options.root) as S & Base<T>).$mount();\n resolve(app);\n }, 0);\n };\n\n if (features.get('asyncChildren') || document.readyState === 'complete') {\n callback();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n callback();\n }\n });\n }\n });\n\n return function useApp() {\n return p;\n };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAAyB;AACzB,mBAA0B;AAWX,SAAR,UACL,KACA,cAAuD,SAAS,MACpC;AAC5B,MAAI;AACJ,QAAM,UACJ,uBAAuB,cACnB,EAAE,MAAM,aAAa,UAAU,OAAU,IACzC,EAAE,MAAM,SAAS,MAAM,GAAG,YAAY;AAE5C,UAAI,wBAAU,QAAQ,QAAQ,GAAG;AAC/B,WAAO,QAAQ,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS,KAAK,MAAM;AAC7D,+BAAS,IAAI,SAA2B,KAAK;AAAA,IAC/C,CAAC;AAAA,EACH;AAEA,QAAM,IAA0B,IAAI,QAAQ,CAAC,YAAY;AACvD,UAAM,WAAW,MAAM;AACrB,iBAAW,MAAM;AACf,cAAO,IAAI,IAAI,QAAQ,IAAI,EAAkB,OAAO;AACpD,gBAAQ,GAAG;AAAA,MACb,GAAG,CAAC;AAAA,IACN;AAEA,QAAI,yBAAS,IAAI,eAAe,KAAK,SAAS,eAAe,YAAY;AACvE,eAAS;AAAA,IACX,OAAO;AACL,eAAS,iBAAiB,oBAAoB,MAAM;AAClD,YAAI,SAAS,eAAe,YAAY;AACtC,mBAAS;AAAA,QACX;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO,SAAS,SAAS;AACvB,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,11 @@
1
1
  import type { Base, BaseConstructor, BaseProps } from '../Base/index.js';
2
+ import type { Features } from '../Base/features.js';
3
+ export type CreateAppOptions = {
4
+ root: HTMLElement;
5
+ features: Features;
6
+ };
2
7
  /**
3
8
  * Instantiate and mount the given component on the given root element when the page has been loaded
4
9
  * and return a function to use the app instance when it is ready.
5
10
  */
6
- export default function createApp<S extends BaseConstructor<Base>, T extends BaseProps = BaseProps>(App: S, rootElement?: HTMLElement): () => Promise<S & Base<T>>;
11
+ export default function createApp<S extends BaseConstructor<Base>, T extends BaseProps = BaseProps>(App: S, rootElement?: HTMLElement | Partial<CreateAppOptions>): () => Promise<S & Base<T>>;
@@ -1,28 +1,32 @@
1
+ import { features } from "../Base/features.js";
2
+ import { isDefined } from "../utils/index.js";
1
3
  function createApp(App, rootElement = document.body) {
2
- let isLoaded = document.readyState === "complete";
3
4
  let app;
4
- if (!isLoaded) {
5
- document.addEventListener("readystatechange", () => {
6
- if (document.readyState === "complete") {
7
- app = new App(rootElement).$mount();
8
- isLoaded = true;
9
- }
5
+ const options = rootElement instanceof HTMLElement ? { root: rootElement, features: void 0 } : { root: document.body, ...rootElement };
6
+ if (isDefined(options.features)) {
7
+ Object.entries(options.features).forEach(([feature, value]) => {
8
+ features.set(feature, value);
10
9
  });
11
- } else {
12
- app = new App(rootElement).$mount();
13
10
  }
14
- const promise = new Promise((resolve) => {
15
- document.addEventListener("readystatechange", () => {
16
- if (document.readyState === "complete") {
17
- setTimeout(() => resolve(app), 0);
18
- }
19
- });
11
+ const p = new Promise((resolve) => {
12
+ const callback = () => {
13
+ setTimeout(() => {
14
+ app = new App(options.root).$mount();
15
+ resolve(app);
16
+ }, 0);
17
+ };
18
+ if (features.get("asyncChildren") || document.readyState === "complete") {
19
+ callback();
20
+ } else {
21
+ document.addEventListener("readystatechange", () => {
22
+ if (document.readyState === "complete") {
23
+ callback();
24
+ }
25
+ });
26
+ }
20
27
  });
21
28
  return function useApp() {
22
- if (isLoaded) {
23
- return Promise.resolve(app);
24
- }
25
- return promise;
29
+ return p;
26
30
  };
27
31
  }
28
32
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/createApp.ts"],
4
- "sourcesContent": ["import type { Base, BaseConstructor, BaseProps } from '../Base/index.js';\n\n/**\n * Instantiate and mount the given component on the given root element when the page has been loaded\n * and return a function to use the app instance when it is ready.\n */\nexport default function createApp<\n S extends BaseConstructor<Base>,\n T extends BaseProps = BaseProps,\n>(App: S, rootElement: HTMLElement = document.body): () => Promise<S & Base<T>> {\n let isLoaded = document.readyState === 'complete';\n let app: S & Base<T>;\n\n if (!isLoaded) {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n app = (new App(rootElement) as S & Base<T>).$mount();\n isLoaded = true;\n }\n });\n } else {\n app = (new App(rootElement) as S & Base<T>).$mount();\n }\n\n const promise:Promise<S & Base<T>> = new Promise((resolve) => {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n setTimeout(() => resolve(app), 0);\n }\n });\n });\n\n return function useApp() {\n if (isLoaded) {\n return Promise.resolve(app);\n }\n\n return promise;\n };\n}\n"],
5
- "mappings": "AAMe,SAAR,UAGL,KAAQ,cAA2B,SAAS,MAAkC;AAC9E,MAAI,WAAW,SAAS,eAAe;AACvC,MAAI;AAEJ,MAAI,CAAC,UAAU;AACb,aAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAI,SAAS,eAAe,YAAY;AACtC,cAAO,IAAI,IAAI,WAAW,EAAkB,OAAO;AACnD,mBAAW;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH,OAAO;AACL,UAAO,IAAI,IAAI,WAAW,EAAkB,OAAO;AAAA,EACrD;AAEA,QAAM,UAA+B,IAAI,QAAQ,CAAC,YAAY;AAC5D,aAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAI,SAAS,eAAe,YAAY;AACtC,mBAAW,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO,SAAS,SAAS;AACvB,QAAI,UAAU;AACZ,aAAO,QAAQ,QAAQ,GAAG;AAAA,IAC5B;AAEA,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import type { Base, BaseConstructor, BaseProps } from '../Base/index.js';\nimport type { Features } from '../Base/features.js';\nimport { features } from '../Base/features.js';\nimport { isDefined } from '../utils/index.js';\n\nexport type CreateAppOptions = {\n root: HTMLElement;\n features: Features;\n};\n\n/**\n * Instantiate and mount the given component on the given root element when the page has been loaded\n * and return a function to use the app instance when it is ready.\n */\nexport default function createApp<S extends BaseConstructor<Base>, T extends BaseProps = BaseProps>(\n App: S,\n rootElement: HTMLElement | Partial<CreateAppOptions> = document.body,\n): () => Promise<S & Base<T>> {\n let app: S & Base<T>;\n const options =\n rootElement instanceof HTMLElement\n ? { root: rootElement, features: undefined }\n : { root: document.body, ...rootElement };\n\n if (isDefined(options.features)) {\n Object.entries(options.features).forEach(([feature, value]) => {\n features.set(feature as keyof Features, value);\n });\n }\n\n const p: Promise<S & Base<T>> = new Promise((resolve) => {\n const callback = () => {\n setTimeout(() => {\n app = (new App(options.root) as S & Base<T>).$mount();\n resolve(app);\n }, 0);\n };\n\n if (features.get('asyncChildren') || document.readyState === 'complete') {\n callback();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n callback();\n }\n });\n }\n });\n\n return function useApp() {\n return p;\n };\n}\n"],
5
+ "mappings": "AAEA,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAWX,SAAR,UACL,KACA,cAAuD,SAAS,MACpC;AAC5B,MAAI;AACJ,QAAM,UACJ,uBAAuB,cACnB,EAAE,MAAM,aAAa,UAAU,OAAU,IACzC,EAAE,MAAM,SAAS,MAAM,GAAG,YAAY;AAE5C,MAAI,UAAU,QAAQ,QAAQ,GAAG;AAC/B,WAAO,QAAQ,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS,KAAK,MAAM;AAC7D,eAAS,IAAI,SAA2B,KAAK;AAAA,IAC/C,CAAC;AAAA,EACH;AAEA,QAAM,IAA0B,IAAI,QAAQ,CAAC,YAAY;AACvD,UAAM,WAAW,MAAM;AACrB,iBAAW,MAAM;AACf,cAAO,IAAI,IAAI,QAAQ,IAAI,EAAkB,OAAO;AACpD,gBAAQ,GAAG;AAAA,MACb,GAAG,CAAC;AAAA,IACN;AAEA,QAAI,SAAS,IAAI,eAAe,KAAK,SAAS,eAAe,YAAY;AACvE,eAAS;AAAA,IACX,OAAO;AACL,eAAS,iBAAiB,oBAAoB,MAAM;AAClD,YAAI,SAAS,eAAe,YAAY;AACtC,mBAAS;AAAA,QACX;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO,SAAS,SAAS;AACvB,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -29,19 +29,11 @@ __export(getClosestParent_exports, {
29
29
  });
30
30
  module.exports = __toCommonJS(getClosestParent_exports);
31
31
  var import_getInstanceFromElement = __toESM(require("./getInstanceFromElement.cjs"), 1);
32
- function walkAncestorsWhile(element, condition, limit = 1e3) {
33
- let parent = element.parentElement;
34
- let count = 0;
35
- while (parent && condition(parent) && count < limit) {
36
- parent = parent.parentElement;
37
- count += 1;
38
- }
39
- return parent;
40
- }
32
+ var import_utils = require("../utils/index.cjs");
41
33
  function getClosestParent(childInstance, ParentConstructor) {
42
- const parentEl = walkAncestorsWhile(
34
+ const parentEl = (0, import_utils.getAncestorWhere)(
43
35
  childInstance.$el,
44
- (element) => !(0, import_getInstanceFromElement.default)(element, ParentConstructor)
36
+ (element) => element && (0, import_getInstanceFromElement.default)(element, ParentConstructor) !== null
45
37
  );
46
38
  return parentEl ? (0, import_getInstanceFromElement.default)(parentEl, ParentConstructor) : null;
47
39
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/getClosestParent.ts"],
4
- "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport getInstanceFromElement from './getInstanceFromElement.js';\n\n/**\n * Walk through an element ancestors while the given condition is true with a\n * limit of 1000 iteration to avoid infinite loops.\n */\nfunction walkAncestorsWhile(\n element: HTMLElement,\n condition: (element: HTMLElement) => boolean,\n limit = 1000,\n): HTMLElement | null {\n let parent = element.parentElement;\n let count = 0;\n\n while (parent && condition(parent) && count < limit) {\n parent = parent.parentElement;\n count += 1;\n }\n\n return parent;\n}\n\n/**\n * Get the closest parent of a component.\n */\nexport default function getClosestParent<T extends BaseConstructor>(childInstance:Base, ParentConstructor:T) {\n const parentEl = walkAncestorsWhile(\n childInstance.$el,\n (element) => !getInstanceFromElement(element, ParentConstructor),\n );\n\n return parentEl ? getInstanceFromElement(parentEl, ParentConstructor) : null;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oCAAmC;AAMnC,SAAS,mBACP,SACA,WACA,QAAQ,KACY;AACpB,MAAI,SAAS,QAAQ;AACrB,MAAI,QAAQ;AAEZ,SAAO,UAAU,UAAU,MAAM,KAAK,QAAQ,OAAO;AACnD,aAAS,OAAO;AAChB,aAAS;AAAA,EACX;AAEA,SAAO;AACT;AAKe,SAAR,iBAA6D,eAAoB,mBAAqB;AAC3G,QAAM,WAAW;AAAA,IACf,cAAc;AAAA,IACd,CAAC,YAAY,KAAC,8BAAAA,SAAuB,SAAS,iBAAiB;AAAA,EACjE;AAEA,SAAO,eAAW,8BAAAA,SAAuB,UAAU,iBAAiB,IAAI;AAC1E;",
4
+ "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport getInstanceFromElement from './getInstanceFromElement.js';\nimport { getAncestorWhere } from '../utils/index.js';\n\n/**\n * Get the closest parent of a component.\n */\nexport default function getClosestParent<T extends BaseConstructor>(\n childInstance: Base,\n ParentConstructor: T,\n) {\n const parentEl = getAncestorWhere(\n childInstance.$el,\n (element) => element && getInstanceFromElement(element, ParentConstructor) !== null,\n );\n\n return parentEl ? getInstanceFromElement(parentEl, ParentConstructor) : null;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oCAAmC;AACnC,mBAAiC;AAKlB,SAAR,iBACL,eACA,mBACA;AACA,QAAM,eAAW;AAAA,IACf,cAAc;AAAA,IACd,CAAC,YAAY,eAAW,8BAAAA,SAAuB,SAAS,iBAAiB,MAAM;AAAA,EACjF;AAEA,SAAO,eAAW,8BAAAA,SAAuB,UAAU,iBAAiB,IAAI;AAC1E;",
6
6
  "names": ["getInstanceFromElement"]
7
7
  }
@@ -1,17 +1,9 @@
1
1
  import getInstanceFromElement from "./getInstanceFromElement.js";
2
- function walkAncestorsWhile(element, condition, limit = 1e3) {
3
- let parent = element.parentElement;
4
- let count = 0;
5
- while (parent && condition(parent) && count < limit) {
6
- parent = parent.parentElement;
7
- count += 1;
8
- }
9
- return parent;
10
- }
2
+ import { getAncestorWhere } from "../utils/index.js";
11
3
  function getClosestParent(childInstance, ParentConstructor) {
12
- const parentEl = walkAncestorsWhile(
4
+ const parentEl = getAncestorWhere(
13
5
  childInstance.$el,
14
- (element) => !getInstanceFromElement(element, ParentConstructor)
6
+ (element) => element && getInstanceFromElement(element, ParentConstructor) !== null
15
7
  );
16
8
  return parentEl ? getInstanceFromElement(parentEl, ParentConstructor) : null;
17
9
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/getClosestParent.ts"],
4
- "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport getInstanceFromElement from './getInstanceFromElement.js';\n\n/**\n * Walk through an element ancestors while the given condition is true with a\n * limit of 1000 iteration to avoid infinite loops.\n */\nfunction walkAncestorsWhile(\n element: HTMLElement,\n condition: (element: HTMLElement) => boolean,\n limit = 1000,\n): HTMLElement | null {\n let parent = element.parentElement;\n let count = 0;\n\n while (parent && condition(parent) && count < limit) {\n parent = parent.parentElement;\n count += 1;\n }\n\n return parent;\n}\n\n/**\n * Get the closest parent of a component.\n */\nexport default function getClosestParent<T extends BaseConstructor>(childInstance:Base, ParentConstructor:T) {\n const parentEl = walkAncestorsWhile(\n childInstance.$el,\n (element) => !getInstanceFromElement(element, ParentConstructor),\n );\n\n return parentEl ? getInstanceFromElement(parentEl, ParentConstructor) : null;\n}\n"],
5
- "mappings": "AACA,OAAO,4BAA4B;AAMnC,SAAS,mBACP,SACA,WACA,QAAQ,KACY;AACpB,MAAI,SAAS,QAAQ;AACrB,MAAI,QAAQ;AAEZ,SAAO,UAAU,UAAU,MAAM,KAAK,QAAQ,OAAO;AACnD,aAAS,OAAO;AAChB,aAAS;AAAA,EACX;AAEA,SAAO;AACT;AAKe,SAAR,iBAA6D,eAAoB,mBAAqB;AAC3G,QAAM,WAAW;AAAA,IACf,cAAc;AAAA,IACd,CAAC,YAAY,CAAC,uBAAuB,SAAS,iBAAiB;AAAA,EACjE;AAEA,SAAO,WAAW,uBAAuB,UAAU,iBAAiB,IAAI;AAC1E;",
4
+ "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport getInstanceFromElement from './getInstanceFromElement.js';\nimport { getAncestorWhere } from '../utils/index.js';\n\n/**\n * Get the closest parent of a component.\n */\nexport default function getClosestParent<T extends BaseConstructor>(\n childInstance: Base,\n ParentConstructor: T,\n) {\n const parentEl = getAncestorWhere(\n childInstance.$el,\n (element) => element && getInstanceFromElement(element, ParentConstructor) !== null,\n );\n\n return parentEl ? getInstanceFromElement(parentEl, ParentConstructor) : null;\n}\n"],
5
+ "mappings": "AACA,OAAO,4BAA4B;AACnC,SAAS,wBAAwB;AAKlB,SAAR,iBACL,eACA,mBACA;AACA,QAAM,WAAW;AAAA,IACf,cAAc;AAAA,IACd,CAAC,YAAY,WAAW,uBAAuB,SAAS,iBAAiB,MAAM;AAAA,EACjF;AAEA,SAAO,WAAW,uBAAuB,UAAU,iBAAiB,IAAI;AAC1E;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/getInstanceFromElement.ts"],
4
- "sourcesContent": ["import type { BaseConstructor, BaseEl } from '../Base/index.js';\n\n/**\n * Get a component instance from a DOM element.\n */\nexport default function getInstanceFromElement<T extends BaseConstructor>(\n element: BaseEl,\n Constructor: T,\n):InstanceType<T> | null {\n if (!element.__base__ || !element.__base__.has(Constructor)) {\n return null;\n }\n\n return element.__base__.get(Constructor) as InstanceType<T>;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKe,SAAR,uBACL,SACA,aACuB;AACvB,MAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,SAAS,IAAI,WAAW,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,SAAS,IAAI,WAAW;AACzC;",
4
+ "sourcesContent": ["import type { BaseConstructor, BaseEl } from '../Base/index.js';\n\n/**\n * Get a component instance from a DOM element.\n */\nexport default function getInstanceFromElement<T extends BaseConstructor>(\n element: BaseEl,\n Constructor: T,\n): InstanceType<T> | null {\n if (!element.__base__ || !element.__base__.has(Constructor)) {\n return null;\n }\n\n return element.__base__.get(Constructor) as InstanceType<T>;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKe,SAAR,uBACL,SACA,aACwB;AACxB,MAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,SAAS,IAAI,WAAW,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,SAAS,IAAI,WAAW;AACzC;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/getInstanceFromElement.ts"],
4
- "sourcesContent": ["import type { BaseConstructor, BaseEl } from '../Base/index.js';\n\n/**\n * Get a component instance from a DOM element.\n */\nexport default function getInstanceFromElement<T extends BaseConstructor>(\n element: BaseEl,\n Constructor: T,\n):InstanceType<T> | null {\n if (!element.__base__ || !element.__base__.has(Constructor)) {\n return null;\n }\n\n return element.__base__.get(Constructor) as InstanceType<T>;\n}\n"],
5
- "mappings": "AAKe,SAAR,uBACL,SACA,aACuB;AACvB,MAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,SAAS,IAAI,WAAW,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,SAAS,IAAI,WAAW;AACzC;",
4
+ "sourcesContent": ["import type { BaseConstructor, BaseEl } from '../Base/index.js';\n\n/**\n * Get a component instance from a DOM element.\n */\nexport default function getInstanceFromElement<T extends BaseConstructor>(\n element: BaseEl,\n Constructor: T,\n): InstanceType<T> | null {\n if (!element.__base__ || !element.__base__.has(Constructor)) {\n return null;\n }\n\n return element.__base__.get(Constructor) as InstanceType<T>;\n}\n"],
5
+ "mappings": "AAKe,SAAR,uBACL,SACA,aACwB;AACxB,MAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,SAAS,IAAI,WAAW,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,SAAS,IAAI,WAAW;AACzC;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/importOnInteraction.ts"],
4
- "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport { getTargetElements } from './utils.js';\nimport { isString } from '../utils/index.js';\n\n/**\n * Import a component on an interaction.\n *\n * @template {BaseConstructor} [T=BaseConstructor]\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {string|HTMLElement|HTMLElement[]} nameOrSelectorOrElement\n * The name or selector for the component.\n * @param {string|string[]} events\n * The events to listen to to trigger the import.\n * @param {Base} [parent]\n * The parent component.\n * @returns {Promise<InstanceType<T>>}\n */\nexport default function importOnInteraction<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default:T }>,\n nameOrSelectorOrElement:string | HTMLElement | HTMLElement[],\n events:string | string[],\n parent?: Base,\n):Promise<T> {\n const normalizedEvents = isString(events) ? [events] : events;\n\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);\n const eventListenerOptions = {\n capture: true,\n passive: true,\n once: true,\n };\n const handler = () => {\n resolver(resolve);\n };\n\n elements.forEach((element) => {\n normalizedEvents.forEach((event) => {\n element.addEventListener(event, handler, eventListenerOptions);\n });\n });\n });\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkC;AAClC,IAAAA,gBAAyB;AAgBV,SAAR,oBACL,IACA,yBACA,QACA,QACW;AACX,QAAM,uBAAmB,wBAAS,MAAM,IAAI,CAAC,MAAM,IAAI;AAEvD,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAACC,YAAW;AACpB,sBAAgB,aAAaA,UAASA,QAAO,UAAUA;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,eAAW,gCAAkB,yBAAyB,QAAQ,GAAG;AACvE,UAAM,uBAAuB;AAAA,MAC3B,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AACA,UAAM,UAAU,MAAM;AACpB,eAAS,OAAO;AAAA,IAClB;AAEA,aAAS,QAAQ,CAAC,YAAY;AAC5B,uBAAiB,QAAQ,CAAC,UAAU;AAClC,gBAAQ,iBAAiB,OAAO,SAAS,oBAAoB;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;",
4
+ "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport { getTargetElements } from './utils.js';\nimport { isString } from '../utils/index.js';\n\n/**\n * Import a component on an interaction.\n *\n * @template {BaseConstructor} [T=BaseConstructor]\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {string|HTMLElement|HTMLElement[]} nameOrSelectorOrElement\n * The name or selector for the component.\n * @param {string|string[]} events\n * The events to listen to to trigger the import.\n * @param {Base} [parent]\n * The parent component.\n * @returns {Promise<InstanceType<T>>}\n */\nexport default function importOnInteraction<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n nameOrSelectorOrElement: string | HTMLElement | HTMLElement[],\n events: string | string[],\n parent?: Base,\n): Promise<T> {\n const normalizedEvents = isString(events) ? [events] : events;\n\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);\n const eventListenerOptions = {\n capture: true,\n passive: true,\n once: true,\n };\n const handler = () => {\n resolver(resolve);\n };\n\n elements.forEach((element) => {\n normalizedEvents.forEach((event) => {\n element.addEventListener(event, handler, eventListenerOptions);\n });\n });\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkC;AAClC,IAAAA,gBAAyB;AAgBV,SAAR,oBACL,IACA,yBACA,QACA,QACY;AACZ,QAAM,uBAAmB,wBAAS,MAAM,IAAI,CAAC,MAAM,IAAI;AAEvD,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAACC,YAAW;AACpB,sBAAgB,aAAaA,UAASA,QAAO,UAAUA;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,eAAW,gCAAkB,yBAAyB,QAAQ,GAAG;AACvE,UAAM,uBAAuB;AAAA,MAC3B,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AACA,UAAM,UAAU,MAAM;AACpB,eAAS,OAAO;AAAA,IAClB;AAEA,aAAS,QAAQ,CAAC,YAAY;AAC5B,uBAAiB,QAAQ,CAAC,UAAU;AAClC,gBAAQ,iBAAiB,OAAO,SAAS,oBAAoB;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;",
6
6
  "names": ["import_utils", "module"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/importOnInteraction.ts"],
4
- "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport { getTargetElements } from './utils.js';\nimport { isString } from '../utils/index.js';\n\n/**\n * Import a component on an interaction.\n *\n * @template {BaseConstructor} [T=BaseConstructor]\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {string|HTMLElement|HTMLElement[]} nameOrSelectorOrElement\n * The name or selector for the component.\n * @param {string|string[]} events\n * The events to listen to to trigger the import.\n * @param {Base} [parent]\n * The parent component.\n * @returns {Promise<InstanceType<T>>}\n */\nexport default function importOnInteraction<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default:T }>,\n nameOrSelectorOrElement:string | HTMLElement | HTMLElement[],\n events:string | string[],\n parent?: Base,\n):Promise<T> {\n const normalizedEvents = isString(events) ? [events] : events;\n\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);\n const eventListenerOptions = {\n capture: true,\n passive: true,\n once: true,\n };\n const handler = () => {\n resolver(resolve);\n };\n\n elements.forEach((element) => {\n normalizedEvents.forEach((event) => {\n element.addEventListener(event, handler, eventListenerOptions);\n });\n });\n });\n}\n"],
5
- "mappings": "AACA,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AAgBV,SAAR,oBACL,IACA,yBACA,QACA,QACW;AACX,QAAM,mBAAmB,SAAS,MAAM,IAAI,CAAC,MAAM,IAAI;AAEvD,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAAC,WAAW;AACpB,sBAAgB,aAAa,SAAS,OAAO,UAAU;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,WAAW,kBAAkB,yBAAyB,QAAQ,GAAG;AACvE,UAAM,uBAAuB;AAAA,MAC3B,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AACA,UAAM,UAAU,MAAM;AACpB,eAAS,OAAO;AAAA,IAClB;AAEA,aAAS,QAAQ,CAAC,YAAY;AAC5B,uBAAiB,QAAQ,CAAC,UAAU;AAClC,gBAAQ,iBAAiB,OAAO,SAAS,oBAAoB;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;",
4
+ "sourcesContent": ["import type { Base, BaseConstructor } from '../Base/index.js';\nimport { getTargetElements } from './utils.js';\nimport { isString } from '../utils/index.js';\n\n/**\n * Import a component on an interaction.\n *\n * @template {BaseConstructor} [T=BaseConstructor]\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {string|HTMLElement|HTMLElement[]} nameOrSelectorOrElement\n * The name or selector for the component.\n * @param {string|string[]} events\n * The events to listen to to trigger the import.\n * @param {Base} [parent]\n * The parent component.\n * @returns {Promise<InstanceType<T>>}\n */\nexport default function importOnInteraction<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n nameOrSelectorOrElement: string | HTMLElement | HTMLElement[],\n events: string | string[],\n parent?: Base,\n): Promise<T> {\n const normalizedEvents = isString(events) ? [events] : events;\n\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);\n const eventListenerOptions = {\n capture: true,\n passive: true,\n once: true,\n };\n const handler = () => {\n resolver(resolve);\n };\n\n elements.forEach((element) => {\n normalizedEvents.forEach((event) => {\n element.addEventListener(event, handler, eventListenerOptions);\n });\n });\n });\n}\n"],
5
+ "mappings": "AACA,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AAgBV,SAAR,oBACL,IACA,yBACA,QACA,QACY;AACZ,QAAM,mBAAmB,SAAS,MAAM,IAAI,CAAC,MAAM,IAAI;AAEvD,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAAC,WAAW;AACpB,sBAAgB,aAAa,SAAS,OAAO,UAAU;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,WAAW,kBAAkB,yBAAyB,QAAQ,GAAG;AACvE,UAAM,uBAAuB;AAAA,MAC3B,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AACA,UAAM,UAAU,MAAM;AACpB,eAAS,OAAO;AAAA,IAClB;AAEA,aAAS,QAAQ,CAAC,YAAY;AAC5B,uBAAiB,QAAQ,CAAC,UAAU;AAClC,gBAAQ,iBAAiB,OAAO,SAAS,oBAAoB;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/importWhenIdle.ts"],
4
- "sourcesContent": ["import type { BaseConstructor } from '../Base/index.js';\n\ntype ImportWhenIdleOptions = {\n timeout?: number;\n};\n\n/**\n * Import a component when user is idle.\n *\n * @template {BaseConstructor} T\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {ImportWhenIdleOptions} [options]\n * The time to wait before triggering the callback if never idle.\n * @returns {Promise<T>}\n */\nexport default function importWhenIdle<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n { timeout = 1 }: ImportWhenIdleOptions = {},\n):Promise<T> {\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n if (!('requestIdleCallback' in window)) {\n setTimeout(() => {\n resolver(resolve);\n }, timeout);\n } else {\n window.requestIdleCallback(\n () => {\n setTimeout(() => {\n resolver(resolve);\n }, 0);\n },\n { timeout },\n );\n }\n });\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBe,SAAR,eACL,IACA,EAAE,UAAU,EAAE,IAA2B,CAAC,GAC/B;AACX,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAACA,YAAW;AACpB,sBAAgB,aAAaA,UAASA,QAAO,UAAUA;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,EAAE,yBAAyB,SAAS;AACtC,iBAAW,MAAM;AACf,iBAAS,OAAO;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ,OAAO;AACL,aAAO;AAAA,QACL,MAAM;AACJ,qBAAW,MAAM;AACf,qBAAS,OAAO;AAAA,UAClB,GAAG,CAAC;AAAA,QACN;AAAA,QACA,EAAE,QAAQ;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import type { BaseConstructor } from '../Base/index.js';\n\ntype ImportWhenIdleOptions = {\n timeout?: number;\n};\n\n/**\n * Import a component when user is idle.\n *\n * @template {BaseConstructor} T\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {ImportWhenIdleOptions} [options]\n * The time to wait before triggering the callback if never idle.\n * @returns {Promise<T>}\n */\nexport default function importWhenIdle<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n { timeout = 1 }: ImportWhenIdleOptions = {},\n): Promise<T> {\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n if (!('requestIdleCallback' in window)) {\n setTimeout(() => {\n resolver(resolve);\n }, timeout);\n } else {\n window.requestIdleCallback(\n () => {\n setTimeout(() => {\n resolver(resolve);\n }, 0);\n },\n { timeout },\n );\n }\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBe,SAAR,eACL,IACA,EAAE,UAAU,EAAE,IAA2B,CAAC,GAC9B;AACZ,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAACA,YAAW;AACpB,sBAAgB,aAAaA,UAASA,QAAO,UAAUA;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,EAAE,yBAAyB,SAAS;AACtC,iBAAW,MAAM;AACf,iBAAS,OAAO;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ,OAAO;AACL,aAAO;AAAA,QACL,MAAM;AACJ,qBAAW,MAAM;AACf,qBAAS,OAAO;AAAA,UAClB,GAAG,CAAC;AAAA,QACN;AAAA,QACA,EAAE,QAAQ;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;",
6
6
  "names": ["module"]
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import type { BaseConstructor } from '../Base/index.js';
2
- declare type ImportWhenIdleOptions = {
2
+ type ImportWhenIdleOptions = {
3
3
  timeout?: number;
4
4
  };
5
5
  /**
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/helpers/importWhenIdle.ts"],
4
- "sourcesContent": ["import type { BaseConstructor } from '../Base/index.js';\n\ntype ImportWhenIdleOptions = {\n timeout?: number;\n};\n\n/**\n * Import a component when user is idle.\n *\n * @template {BaseConstructor} T\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {ImportWhenIdleOptions} [options]\n * The time to wait before triggering the callback if never idle.\n * @returns {Promise<T>}\n */\nexport default function importWhenIdle<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n { timeout = 1 }: ImportWhenIdleOptions = {},\n):Promise<T> {\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n if (!('requestIdleCallback' in window)) {\n setTimeout(() => {\n resolver(resolve);\n }, timeout);\n } else {\n window.requestIdleCallback(\n () => {\n setTimeout(() => {\n resolver(resolve);\n }, 0);\n },\n { timeout },\n );\n }\n });\n}\n"],
5
- "mappings": "AAgBe,SAAR,eACL,IACA,EAAE,UAAU,EAAE,IAA2B,CAAC,GAC/B;AACX,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAAC,WAAW;AACpB,sBAAgB,aAAa,SAAS,OAAO,UAAU;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,EAAE,yBAAyB,SAAS;AACtC,iBAAW,MAAM;AACf,iBAAS,OAAO;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ,OAAO;AACL,aAAO;AAAA,QACL,MAAM;AACJ,qBAAW,MAAM;AACf,qBAAS,OAAO;AAAA,UAClB,GAAG,CAAC;AAAA,QACN;AAAA,QACA,EAAE,QAAQ;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import type { BaseConstructor } from '../Base/index.js';\n\ntype ImportWhenIdleOptions = {\n timeout?: number;\n};\n\n/**\n * Import a component when user is idle.\n *\n * @template {BaseConstructor} T\n * @param {() => Promise<T|{default:T}>} fn\n * The import function.\n * @param {ImportWhenIdleOptions} [options]\n * The time to wait before triggering the callback if never idle.\n * @returns {Promise<T>}\n */\nexport default function importWhenIdle<T extends BaseConstructor = BaseConstructor>(\n fn: () => Promise<T | { default: T }>,\n { timeout = 1 }: ImportWhenIdleOptions = {},\n): Promise<T> {\n let ResolvedClass;\n\n const resolver = (resolve) => {\n fn().then((module) => {\n ResolvedClass = 'default' in module ? module.default : module;\n resolve(ResolvedClass);\n });\n };\n\n return new Promise((resolve) => {\n if (!('requestIdleCallback' in window)) {\n setTimeout(() => {\n resolver(resolve);\n }, timeout);\n } else {\n window.requestIdleCallback(\n () => {\n setTimeout(() => {\n resolver(resolve);\n }, 0);\n },\n { timeout },\n );\n }\n });\n}\n"],
5
+ "mappings": "AAgBe,SAAR,eACL,IACA,EAAE,UAAU,EAAE,IAA2B,CAAC,GAC9B;AACZ,MAAI;AAEJ,QAAM,WAAW,CAAC,YAAY;AAC5B,OAAG,EAAE,KAAK,CAAC,WAAW;AACpB,sBAAgB,aAAa,SAAS,OAAO,UAAU;AACvD,cAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,EAAE,yBAAyB,SAAS;AACtC,iBAAW,MAAM;AACf,iBAAS,OAAO;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ,OAAO;AACL,aAAO;AAAA,QACL,MAAM;AACJ,qBAAW,MAAM;AACf,qBAAS,OAAO;AAAA,UAClB,GAAG,CAAC;AAAA,QACN;AAAA,QACA,EAAE,QAAQ;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
package/index.cjs.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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"],
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 { BaseProps, BaseConstructor, BaseAsyncConstructor, BaseConfig } from './Base/index.js';\n\nexport type { BaseInterface, BaseDecorator } from './Base/types.js';\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAqB;AACrB,+BAAc,mCADd;AAEA,+BAAc,gCAFd;AAGA,+BAAc,iCAHd;",
6
6
  "names": []
7
7
  }
package/index.d.ts CHANGED
@@ -2,5 +2,5 @@ export { Base } from './Base/index.js';
2
2
  export * from './decorators/index.js';
3
3
  export * from './helpers/index.js';
4
4
  export * from './services/index.js';
5
- export type { BaseProps, BaseConstructor, BaseAsyncConstructor, BaseConfig, } from './Base/index.js';
5
+ export type { BaseProps, BaseConstructor, BaseAsyncConstructor, BaseConfig } from './Base/index.js';
6
6
  export type { BaseInterface, BaseDecorator } from './Base/types.js';
package/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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"],
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 { BaseProps, BaseConstructor, BaseAsyncConstructor, BaseConfig } from './Base/index.js';\n\nexport type { BaseInterface, BaseDecorator } from './Base/types.js';\n"],
5
5
  "mappings": "AAAA,SAAS,YAAY;AACrB,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studiometa/js-toolkit",
3
- "version": "2.6.5",
3
+ "version": "2.8.0",
4
4
  "description": "A set of useful little bits of JavaScript to boost your project! 🚀",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -41,7 +41,7 @@
41
41
  "toolkit"
42
42
  ],
43
43
  "dependencies": {
44
- "@motionone/easing": "^10.14.0",
44
+ "@motionone/easing": "^10.15.1",
45
45
  "deepmerge": "^4.2.2"
46
46
  },
47
47
  "devDependencies": {
package/services/drag.cjs CHANGED
@@ -22,7 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  ));
23
23
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
24
 
25
- // packages/js-toolkit/services/drag.js
25
+ // packages/js-toolkit/services/drag.ts
26
26
  var drag_exports = {};
27
27
  __export(drag_exports, {
28
28
  default: () => useDrag
@@ -1,7 +1,7 @@
1
1
  {
2
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', 'touchend'];\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 case 'touchend':\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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",
3
+ "sources": ["../../packages/js-toolkit/services/drag.ts"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define, @typescript-eslint/no-use-before-define */\nimport { useService } from './service.js';\nimport useRaf from './raf.js';\nimport inertiaFinalValue from '../utils/math/inertiaFinalValue.js';\nimport { isDefined } from '../utils/index.js';\nimport type { ServiceInterface } from './index.js';\n\nexport type DragService = ServiceInterface<DragServiceProps>;\n\ntype DragLifecycle = 'start' | 'drag' | 'drop' | 'inertia' | 'stop';\n\nexport interface DragServiceProps {\n /**\n * The current mode of the dragging logic.\n */\n mode: DragLifecycle;\n /**\n * The target element of the drag.\n */\n target: HTMLElement;\n /**\n * Whether the user is currently grabbing the targeted element or not.\n */\n isGrabbing: boolean;\n /**\n * Whether the drag currently has inertia or not.\n */\n hasInertia: boolean;\n /**\n * The current horizontal position in the viewport.\n */\n x: number;\n /**\n * The current vertical position in the viewport.\n */\n y: number;\n /**\n * The delta between the current position and the last.\n */\n delta: { x: number; y: number };\n /**\n * The initial position where the dragging started.\n */\n origin: { x: number; y: number };\n /**\n * The distance from the current position to the origin.\n */\n distance: { x: number; y: number };\n /**\n * The final position that will be reached at the end of the inertia.\n */\n final: { x: number; y: number };\n}\n\nexport interface DragServiceOptions {\n dampFactor?: number;\n dragTreshold?: number;\n}\n\nconst MODES: Record<Uppercase<DragLifecycle>, DragLifecycle> = {\n START: 'start',\n DRAG: 'drag',\n DROP: 'drop',\n INERTIA: 'inertia',\n STOP: 'stop',\n};\n\nlet count = 0;\nconst events = ['pointerdown', 'pointerup', 'touchend'];\nconst passiveEventOptions = { passive: true };\n\n/**\n * Get the client value for the given axis.\n */\nfunction getEventPosition(event: MouseEvent | TouchEvent): { x: number; y: number } {\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 */\nfunction createDragService(\n target: HTMLElement,\n { dampFactor = 0.85, dragTreshold = 10 }: DragServiceOptions = {},\n): DragService {\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 function shouldPreventClick(): boolean {\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: number, y: number) {\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 */\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 */\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 */\n function drag(event: TouchEvent | MouseEvent) {\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 */\n function handleEvent(event: MouseEvent | PointerEvent | DragEvent) {\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 case 'touchend':\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 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 } as DragServiceProps,\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\nconst instances: WeakMap<HTMLElement, DragService | undefined> = 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 */\nexport default function useDrag(target: HTMLElement, options: DragServiceOptions): DragService {\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
6
  "names": ["inertiaFinalValue", "useRaf"]
7
7
  }