@studiometa/js-toolkit 3.5.0 → 3.6.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/Base/Base.d.ts +2 -2
  2. package/Base/Base.js.map +2 -2
  3. package/Base/managers/AbstractManager.d.ts +2 -2
  4. package/Base/types.d.ts +3 -3
  5. package/Base/utils.d.ts +1 -1
  6. package/Base/utils.js +1 -2
  7. package/Base/utils.js.map +2 -2
  8. package/README.md +10 -0
  9. package/decorators/withBreakpointManager.d.ts +1 -1
  10. package/decorators/withBreakpointManager.js.map +1 -1
  11. package/decorators/withBreakpointObserver.d.ts +1 -1
  12. package/decorators/withBreakpointObserver.js.map +1 -1
  13. package/decorators/withDrag.d.ts +1 -1
  14. package/decorators/withDrag.js.map +1 -1
  15. package/decorators/withExtraConfig.d.ts +1 -1
  16. package/decorators/withExtraConfig.js.map +1 -1
  17. package/decorators/withFreezedOptions.d.ts +1 -1
  18. package/decorators/withFreezedOptions.js.map +1 -1
  19. package/decorators/withGroup.js.map +2 -2
  20. package/decorators/withIntersectionObserver.d.ts +1 -1
  21. package/decorators/withIntersectionObserver.js.map +1 -1
  22. package/decorators/withMountOnMediaQuery.d.ts +1 -1
  23. package/decorators/withMountOnMediaQuery.js.map +1 -1
  24. package/decorators/withMountWhenInView.d.ts +1 -1
  25. package/decorators/withMountWhenInView.js.map +1 -1
  26. package/decorators/withMutation.d.ts +1 -1
  27. package/decorators/withMutation.js.map +1 -1
  28. package/decorators/withRelativePointer.d.ts +1 -1
  29. package/decorators/withRelativePointer.js.map +1 -1
  30. package/decorators/withResponsiveOptions.d.ts +1 -1
  31. package/decorators/withResponsiveOptions.js.map +1 -1
  32. package/decorators/withScrolledInView/withScrolledInView.d.ts +1 -1
  33. package/decorators/withScrolledInView/withScrolledInView.js.map +1 -1
  34. package/helpers/createApp.d.ts +1 -1
  35. package/helpers/createApp.js +6 -4
  36. package/helpers/createApp.js.map +2 -2
  37. package/helpers/getClosestParent.d.ts +1 -1
  38. package/helpers/getClosestParent.js.map +1 -1
  39. package/helpers/getDirectChildren.d.ts +2 -2
  40. package/helpers/getDirectChildren.js.map +1 -1
  41. package/helpers/getInstanceFromElement.d.ts +1 -1
  42. package/helpers/getInstanceFromElement.js.map +1 -1
  43. package/helpers/importOnInteraction.d.ts +1 -1
  44. package/helpers/importOnInteraction.js.map +1 -1
  45. package/helpers/importOnMediaQuery.d.ts +1 -1
  46. package/helpers/importOnMediaQuery.js.map +1 -1
  47. package/helpers/importWhenIdle.d.ts +1 -1
  48. package/helpers/importWhenIdle.js.map +1 -1
  49. package/helpers/importWhenPrefersMotion.d.ts +1 -1
  50. package/helpers/importWhenPrefersMotion.js.map +1 -1
  51. package/helpers/importWhenVisible.d.ts +1 -1
  52. package/helpers/importWhenVisible.js.map +1 -1
  53. package/helpers/index.d.ts +1 -0
  54. package/helpers/index.js +1 -0
  55. package/helpers/index.js.map +2 -2
  56. package/helpers/logTree.d.ts +17 -0
  57. package/helpers/logTree.js +59 -0
  58. package/helpers/logTree.js.map +7 -0
  59. package/helpers/queryComponent.js +9 -10
  60. package/helpers/queryComponent.js.map +2 -2
  61. package/index.d.ts +1 -1
  62. package/index.js +1 -1
  63. package/index.js.map +1 -1
  64. package/package.json +1 -1
  65. package/services/AbstractService.d.ts +1 -1
  66. package/services/AbstractService.js +1 -1
  67. package/services/AbstractService.js.map +2 -2
  68. package/services/DragService.d.ts +6 -6
  69. package/services/DragService.js.map +1 -1
  70. package/services/KeyService.d.ts +1 -1
  71. package/services/KeyService.js.map +1 -1
  72. package/services/LoadService.d.ts +1 -1
  73. package/services/LoadService.js.map +1 -1
  74. package/services/MutationService.d.ts +1 -1
  75. package/services/MutationService.js.map +1 -1
  76. package/services/PointerService.d.ts +1 -1
  77. package/services/PointerService.js.map +1 -1
  78. package/services/RafService.d.ts +2 -2
  79. package/services/RafService.js +13 -7
  80. package/services/RafService.js.map +2 -2
  81. package/services/ResizeService.d.ts +1 -1
  82. package/services/ResizeService.js.map +1 -1
  83. package/services/ScrollService.d.ts +22 -4
  84. package/services/ScrollService.js +55 -7
  85. package/services/ScrollService.js.map +2 -2
  86. package/utils/cache.d.ts +1 -1
  87. package/utils/cache.js.map +1 -1
  88. package/utils/collide/boundingRectToCircle.d.ts +3 -3
  89. package/utils/collide/boundingRectToCircle.js.map +1 -1
  90. package/utils/collide/collideCircleCircle.d.ts +1 -1
  91. package/utils/collide/collideCircleCircle.js.map +1 -1
  92. package/utils/collide/collideCircleRect.d.ts +1 -1
  93. package/utils/collide/collideCircleRect.js.map +1 -1
  94. package/utils/collide/collidePointCircle.d.ts +1 -1
  95. package/utils/collide/collidePointCircle.js.map +1 -1
  96. package/utils/collide/collidePointRect.d.ts +1 -1
  97. package/utils/collide/collidePointRect.js.map +1 -1
  98. package/utils/collide/collideRectRect.d.ts +1 -1
  99. package/utils/collide/collideRectRect.js.map +1 -1
  100. package/utils/css/animate.d.ts +1 -1
  101. package/utils/css/animate.js +162 -96
  102. package/utils/css/animate.js.map +2 -2
  103. package/utils/css/classes.d.ts +3 -3
  104. package/utils/css/classes.js.map +1 -1
  105. package/utils/css/getOffsetSizes.d.ts +1 -1
  106. package/utils/css/getOffsetSizes.js.map +1 -1
  107. package/utils/css/matrix.d.ts +1 -1
  108. package/utils/css/matrix.js.map +1 -1
  109. package/utils/css/styles.d.ts +2 -2
  110. package/utils/css/styles.js.map +1 -1
  111. package/utils/css/transform.d.ts +1 -1
  112. package/utils/css/transform.js +12 -13
  113. package/utils/css/transform.js.map +2 -2
  114. package/utils/css/transition.d.ts +1 -1
  115. package/utils/css/transition.js.map +1 -1
  116. package/utils/debounce.d.ts +1 -1
  117. package/utils/debounce.js.map +1 -1
  118. package/utils/history.d.ts +3 -3
  119. package/utils/history.js.map +1 -1
  120. package/utils/index.d.ts +1 -0
  121. package/utils/index.js +1 -0
  122. package/utils/index.js.map +2 -2
  123. package/utils/is.d.ts +10 -10
  124. package/utils/is.js.map +1 -1
  125. package/utils/loadElement.d.ts +5 -5
  126. package/utils/loadElement.js.map +1 -1
  127. package/utils/math/clamp.d.ts +1 -1
  128. package/utils/math/clamp.js.map +1 -1
  129. package/utils/math/clamp01.d.ts +1 -1
  130. package/utils/math/clamp01.js.map +1 -1
  131. package/utils/math/createEases.d.ts +2 -2
  132. package/utils/math/createEases.js.map +1 -1
  133. package/utils/math/createRange.d.ts +1 -1
  134. package/utils/math/createRange.js.map +1 -1
  135. package/utils/math/damp.d.ts +1 -1
  136. package/utils/math/damp.js.map +2 -2
  137. package/utils/math/inertiaFinalValue.d.ts +1 -1
  138. package/utils/math/inertiaFinalValue.js.map +1 -1
  139. package/utils/math/lerp.d.ts +1 -1
  140. package/utils/math/lerp.js.map +1 -1
  141. package/utils/math/map.d.ts +1 -1
  142. package/utils/math/map.js.map +1 -1
  143. package/utils/math/round.d.ts +1 -1
  144. package/utils/math/round.js.map +1 -1
  145. package/utils/math/smoothTo.d.ts +24 -6
  146. package/utils/math/wrap.d.ts +1 -1
  147. package/utils/math/wrap.js.map +1 -1
  148. package/utils/memo.d.ts +1 -1
  149. package/utils/memo.js.map +1 -1
  150. package/utils/memoize.d.ts +2 -2
  151. package/utils/memoize.js.map +1 -1
  152. package/utils/nextFrame.d.ts +1 -1
  153. package/utils/nextFrame.js.map +1 -1
  154. package/utils/nextMicrotask.d.ts +1 -1
  155. package/utils/nextMicrotask.js.map +1 -1
  156. package/utils/nextTick.d.ts +1 -1
  157. package/utils/nextTick.js.map +1 -1
  158. package/utils/object/getAllProperties.js +4 -2
  159. package/utils/object/getAllProperties.js.map +2 -2
  160. package/utils/random.d.ts +3 -3
  161. package/utils/random.js.map +1 -1
  162. package/utils/scheduler.d.ts +3 -3
  163. package/utils/scheduler.js.map +1 -1
  164. package/utils/scrollTo.d.ts +1 -1
  165. package/utils/scrollTo.js.map +1 -1
  166. package/utils/storage/createLocalStorageProvider.d.ts +2 -0
  167. package/utils/storage/createLocalStorageProvider.js +32 -0
  168. package/utils/storage/createLocalStorageProvider.js.map +7 -0
  169. package/utils/storage/createMemoryStorageProvider.d.ts +2 -0
  170. package/utils/storage/createMemoryStorageProvider.js +27 -0
  171. package/utils/storage/createMemoryStorageProvider.js.map +7 -0
  172. package/utils/storage/createNoopProvider.d.ts +2 -0
  173. package/utils/storage/createNoopProvider.js +23 -0
  174. package/utils/storage/createNoopProvider.js.map +7 -0
  175. package/utils/storage/createSessionStorageProvider.d.ts +2 -0
  176. package/utils/storage/createSessionStorageProvider.js +31 -0
  177. package/utils/storage/createSessionStorageProvider.js.map +7 -0
  178. package/utils/storage/createStorage.d.ts +2 -0
  179. package/utils/storage/createStorage.js +96 -0
  180. package/utils/storage/createStorage.js.map +7 -0
  181. package/utils/storage/createUrlSearchParamsInHashProvider.d.ts +2 -0
  182. package/utils/storage/createUrlSearchParamsInHashProvider.js +57 -0
  183. package/utils/storage/createUrlSearchParamsInHashProvider.js.map +7 -0
  184. package/utils/storage/createUrlSearchParamsProvider.d.ts +2 -0
  185. package/utils/storage/createUrlSearchParamsProvider.js +41 -0
  186. package/utils/storage/createUrlSearchParamsProvider.js.map +7 -0
  187. package/utils/storage/getBrowserContext.d.ts +1 -0
  188. package/utils/storage/getBrowserContext.js +17 -0
  189. package/utils/storage/getBrowserContext.js.map +7 -0
  190. package/utils/storage/getGlobalStorage.d.ts +1 -0
  191. package/utils/storage/getGlobalStorage.js +7 -0
  192. package/utils/storage/getGlobalStorage.js.map +7 -0
  193. package/utils/storage/getStorageKeys.d.ts +1 -0
  194. package/utils/storage/getStorageKeys.js +12 -0
  195. package/utils/storage/getStorageKeys.js.map +7 -0
  196. package/utils/storage/index.d.ts +8 -0
  197. package/utils/storage/index.js +62 -0
  198. package/utils/storage/index.js.map +7 -0
  199. package/utils/storage/providers.d.ts +11 -0
  200. package/utils/storage/providers.js +30 -0
  201. package/utils/storage/providers.js.map +7 -0
  202. package/utils/storage/serializers.d.ts +2 -0
  203. package/utils/storage/serializers.js +14 -0
  204. package/utils/storage/serializers.js.map +7 -0
  205. package/utils/storage/types.d.ts +33 -0
  206. package/utils/storage/types.js +1 -0
  207. package/utils/storage/types.js.map +7 -0
  208. package/utils/storage.d.ts +1 -0
  209. package/utils/storage.js +2 -0
  210. package/utils/storage.js.map +7 -0
  211. package/utils/string/changeCase.d.ts +6 -6
  212. package/utils/string/changeCase.js +1 -1
  213. package/utils/string/changeCase.js.map +2 -2
  214. package/utils/string/withLeadingCharacters.d.ts +1 -1
  215. package/utils/string/withLeadingCharacters.js.map +1 -1
  216. package/utils/string/withLeadingSlash.d.ts +1 -1
  217. package/utils/string/withLeadingSlash.js.map +1 -1
  218. package/utils/string/withTrailingCharacters.d.ts +1 -1
  219. package/utils/string/withTrailingCharacters.js.map +1 -1
  220. package/utils/string/withTrailingSlash.d.ts +1 -1
  221. package/utils/string/withTrailingSlash.js.map +1 -1
  222. package/utils/string/withoutLeadingCharacters.d.ts +1 -1
  223. package/utils/string/withoutLeadingCharacters.js.map +1 -1
  224. package/utils/string/withoutLeadingCharactersRecursive.d.ts +1 -1
  225. package/utils/string/withoutLeadingCharactersRecursive.js.map +1 -1
  226. package/utils/string/withoutLeadingSlash.d.ts +1 -1
  227. package/utils/string/withoutLeadingSlash.js.map +1 -1
  228. package/utils/string/withoutTrailingCharacters.d.ts +1 -1
  229. package/utils/string/withoutTrailingCharacters.js.map +1 -1
  230. package/utils/string/withoutTrailingCharactersRecursive.d.ts +1 -1
  231. package/utils/string/withoutTrailingCharactersRecursive.js.map +1 -1
  232. package/utils/string/withoutTrailingSlash.d.ts +1 -1
  233. package/utils/string/withoutTrailingSlash.js.map +1 -1
  234. package/utils/throttle.d.ts +1 -1
  235. package/utils/throttle.js.map +1 -1
  236. package/utils/trapFocus.d.ts +2 -2
  237. package/utils/trapFocus.js.map +1 -1
  238. package/utils/tween.js +5 -5
  239. package/utils/tween.js.map +2 -2
  240. package/tsconfig.build.tsbuildinfo +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/js-toolkit/utils/math/damp.ts"],
4
- "sourcesContent": ["/**\n * Get the next damped value for a given factor.\n *\n * @param {number} targetValue The final value.\n * @param {number} currentValue The current value.\n * @param {number} [factor=0.5] The factor used to reach the target value, defaults to `0.5`.\n * @param {number} [precision=0.01] The precision used to calculate the latest value, defaults to `0.01`.\n * @return {number} The next value.\n * @link https://js-toolkit.studiometa.dev/utils/math/damp.html\n*/\nexport function damp(\n targetValue: number,\n currentValue: number,\n factor = 0.5,\n precision = 0.01,\n) {\n return Math.abs(targetValue - currentValue) < precision\n ? targetValue\n : currentValue + (targetValue - currentValue) * factor;\n}\n"],
5
- "mappings": "AAUO,SAAS,KACd,aACA,cACA,SAAS,KACT,YAAY,MACZ;AACA,SAAO,KAAK,IAAI,cAAc,YAAY,IAAI,YAC1C,cACA,gBAAgB,cAAc,gBAAgB;AACpD;",
4
+ "sourcesContent": ["/**\n * Get the next damped value for a given factor.\n *\n * @param {number} targetValue The final value.\n * @param {number} currentValue The current value.\n * @param {number} [factor=0.5] The factor used to reach the target value, defaults to `0.5`.\n * @param {number} [precision=0.01] The precision used to calculate the latest value, defaults to `0.01`.\n * @return {number} The next value.\n * @link https://js-toolkit.studiometa.dev/utils/math/damp.html\n */\nexport function damp(targetValue: number, currentValue: number, factor = 0.5, precision = 0.01) {\n return Math.abs(targetValue - currentValue) < precision\n ? targetValue\n : currentValue + (targetValue - currentValue) * factor;\n}\n"],
5
+ "mappings": "AAUO,SAAS,KAAK,aAAqB,cAAsB,SAAS,KAAK,YAAY,MAAM;AAC9F,SAAO,KAAK,IAAI,cAAc,YAAY,IAAI,YAC1C,cACA,gBAAgB,cAAc,gBAAgB;AACpD;",
6
6
  "names": []
7
7
  }
@@ -6,5 +6,5 @@
6
6
  * @param [dampFactor=0.85] The speed to reach the target value, defaults to `0.85`.
7
7
  * @returns The next value.
8
8
  * @link https://js-toolkit.studiometa.dev/utils/math/inertiaFinalValue.html
9
- */
9
+ */
10
10
  export declare function inertiaFinalValue(initialValue: number, initialDelta: number, dampFactor?: number): number;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/js-toolkit/utils/math/inertiaFinalValue.ts"],
4
- "sourcesContent": ["import { clamp } from './clamp.js';\n\n/**\n * Get the final damped value for a given factor.\n *\n * @param initialValue The final value.\n * @param initialDelta The current value.\n * @param [dampFactor=0.85] The speed to reach the target value, defaults to `0.85`.\n * @returns The next value.\n * @link https://js-toolkit.studiometa.dev/utils/math/inertiaFinalValue.html\n*/\nexport function inertiaFinalValue(initialValue: number, initialDelta: number, dampFactor = 0.85) {\n // eslint-disable-next-line no-param-reassign\n dampFactor = clamp(dampFactor, 0.00001, 0.99999);\n let delta = initialDelta;\n let finalValue = initialValue;\n\n while (Math.abs(delta) > 0.1) {\n finalValue += delta;\n delta *= dampFactor;\n }\n\n return finalValue;\n}\n"],
4
+ "sourcesContent": ["import { clamp } from './clamp.js';\n\n/**\n * Get the final damped value for a given factor.\n *\n * @param initialValue The final value.\n * @param initialDelta The current value.\n * @param [dampFactor=0.85] The speed to reach the target value, defaults to `0.85`.\n * @returns The next value.\n * @link https://js-toolkit.studiometa.dev/utils/math/inertiaFinalValue.html\n */\nexport function inertiaFinalValue(initialValue: number, initialDelta: number, dampFactor = 0.85) {\n // eslint-disable-next-line no-param-reassign\n dampFactor = clamp(dampFactor, 0.00001, 0.99999);\n let delta = initialDelta;\n let finalValue = initialValue;\n\n while (Math.abs(delta) > 0.1) {\n finalValue += delta;\n delta *= dampFactor;\n }\n\n return finalValue;\n}\n"],
5
5
  "mappings": "AAAA,SAAS,aAAa;AAWf,SAAS,kBAAkB,cAAsB,cAAsB,aAAa,MAAM;AAE/F,eAAa,MAAM,YAAY,MAAS,OAAO;AAC/C,MAAI,QAAQ;AACZ,MAAI,aAAa;AAEjB,SAAO,KAAK,IAAI,KAAK,IAAI,KAAK;AAC5B,kBAAc;AACd,aAAS;AAAA,EACX;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -6,5 +6,5 @@
6
6
  * @param ratio The ratio to get.
7
7
  * @return The value between min and max corresponding to ratio.
8
8
  * @link https://js-toolkit.studiometa.dev/utils/math/lerp.html
9
- */
9
+ */
10
10
  export declare function lerp(min: number, max: number, ratio: number): number;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/js-toolkit/utils/math/lerp.ts"],
4
- "sourcesContent": ["/**\n * Interpolate the ratio between a given interval.\n *\n * @param min The interval minimum value.\n * @param max The inverval maximum value.\n * @param ratio The ratio to get.\n * @return The value between min and max corresponding to ratio.\n * @link https://js-toolkit.studiometa.dev/utils/math/lerp.html\n*/\nexport function lerp(min: number, max: number, ratio: number) {\n return (1 - ratio) * min + ratio * max;\n}\n"],
4
+ "sourcesContent": ["/**\n * Interpolate the ratio between a given interval.\n *\n * @param min The interval minimum value.\n * @param max The inverval maximum value.\n * @param ratio The ratio to get.\n * @return The value between min and max corresponding to ratio.\n * @link https://js-toolkit.studiometa.dev/utils/math/lerp.html\n */\nexport function lerp(min: number, max: number, ratio: number) {\n return (1 - ratio) * min + ratio * max;\n}\n"],
5
5
  "mappings": "AASO,SAAS,KAAK,KAAa,KAAa,OAAe;AAC5D,UAAQ,IAAI,SAAS,MAAM,QAAQ;AACrC;",
6
6
  "names": []
7
7
  }
@@ -8,5 +8,5 @@
8
8
  * @param {number} outputMax The output's maximum value.
9
9
  * @return {number} The input value mapped to the output range.
10
10
  * @link https://js-toolkit.studiometa.dev/utils/math/map.html
11
- */
11
+ */
12
12
  export declare function map(value: number, inputMin: number, inputMax: number, outputMin: number, outputMax: number): number;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/js-toolkit/utils/math/map.ts"],
4
- "sourcesContent": ["/**\n * Maps the value from one range of [inputMin..inputMax] to another range of [outputMin..outputMax].\n *\n * @param {number} value The value to map.\n * @param {number} inputMin The input's minimum value.\n * @param {number} inputMax The input's maximum value.\n * @param {number} outputMin The output's minimum value.\n * @param {number} outputMax The output's maximum value.\n * @return {number} The input value mapped to the output range.\n * @link https://js-toolkit.studiometa.dev/utils/math/map.html\n*/\nexport function map(\n value: number,\n inputMin: number,\n inputMax: number,\n outputMin: number,\n outputMax: number,\n) {\n return ((value - inputMin) * (outputMax - outputMin)) / (inputMax - inputMin) + outputMin;\n}\n"],
4
+ "sourcesContent": ["/**\n * Maps the value from one range of [inputMin..inputMax] to another range of [outputMin..outputMax].\n *\n * @param {number} value The value to map.\n * @param {number} inputMin The input's minimum value.\n * @param {number} inputMax The input's maximum value.\n * @param {number} outputMin The output's minimum value.\n * @param {number} outputMax The output's maximum value.\n * @return {number} The input value mapped to the output range.\n * @link https://js-toolkit.studiometa.dev/utils/math/map.html\n */\nexport function map(\n value: number,\n inputMin: number,\n inputMax: number,\n outputMin: number,\n outputMax: number,\n) {\n return ((value - inputMin) * (outputMax - outputMin)) / (inputMax - inputMin) + outputMin;\n}\n"],
5
5
  "mappings": "AAWO,SAAS,IACd,OACA,UACA,UACA,WACA,WACA;AACA,UAAS,QAAQ,aAAa,YAAY,cAAe,WAAW,YAAY;AAClF;",
6
6
  "names": []
7
7
  }
@@ -5,5 +5,5 @@
5
5
  * @param {number} [decimals=0] The number of decimals to keep.
6
6
  * @return {number} A rounded number to the given decimals length.
7
7
  * @link https://js-toolkit.studiometa.dev/utils/math/round.html
8
- */
8
+ */
9
9
  export declare function round(value: number, decimals?: number): number;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/js-toolkit/utils/math/round.ts"],
4
- "sourcesContent": ["/**\n * Round a value with a given number of decimals.\n *\n * @param {number} value The number to round.\n * @param {number} [decimals=0] The number of decimals to keep.\n * @return {number} A rounded number to the given decimals length.\n * @link https://js-toolkit.studiometa.dev/utils/math/round.html\n*/\nexport function round(value: number, decimals = 0) {\n return Number(value.toFixed(decimals));\n}\n"],
4
+ "sourcesContent": ["/**\n * Round a value with a given number of decimals.\n *\n * @param {number} value The number to round.\n * @param {number} [decimals=0] The number of decimals to keep.\n * @return {number} A rounded number to the given decimals length.\n * @link https://js-toolkit.studiometa.dev/utils/math/round.html\n */\nexport function round(value: number, decimals = 0) {\n return Number(value.toFixed(decimals));\n}\n"],
5
5
  "mappings": "AAQO,SAAS,MAAM,OAAe,WAAW,GAAG;AACjD,SAAO,OAAO,MAAM,QAAQ,QAAQ,CAAC;AACvC;",
6
6
  "names": []
7
7
  }
@@ -42,10 +42,28 @@ export declare function smoothTo(start?: number, options?: SmoothToOptions): {
42
42
  * Unsubscribe a callback from the value update.
43
43
  */
44
44
  unsubscribe: (fn: (value: number) => any) => boolean;
45
- raw(): number;
46
- add(val: number): number;
47
- damping(val?: number): number;
48
- precision(val?: number): number;
49
- stiffness(val?: number): number;
50
- spring(val?: boolean): boolean;
45
+ /**
46
+ * Get the raw target value.
47
+ */
48
+ raw: () => number;
49
+ /**
50
+ * Add the given value to the current raw value.
51
+ */
52
+ add: (val: number) => number;
53
+ /**
54
+ * Get or set the damping factor.
55
+ */
56
+ damping: (val?: number) => number;
57
+ /**
58
+ * Get or set the precision.
59
+ */
60
+ precision: (val?: number) => number;
61
+ /**
62
+ * Get or set the stiffness factor.
63
+ */
64
+ stiffness: (val?: number) => number;
65
+ /**
66
+ * Get or set the spring option.
67
+ */
68
+ spring: (val?: boolean) => boolean;
51
69
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Wrap a value in the min and max range.
3
3
  * @link https://js-toolkit.studiometa.dev/utils/math/wrap.html
4
- */
4
+ */
5
5
  export declare function wrap(value: number, min: number, max: number): number;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/js-toolkit/utils/math/wrap.ts"],
4
- "sourcesContent": ["/**\n * Wrap a value in the min and max range.\n * @link https://js-toolkit.studiometa.dev/utils/math/wrap.html\n*/\nexport function wrap(value: number, min: number, max: number): number {\n const range = max - min;\n return min === max ? min : ((range + ((value - min) % range)) % range) + min;\n}\n"],
4
+ "sourcesContent": ["/**\n * Wrap a value in the min and max range.\n * @link https://js-toolkit.studiometa.dev/utils/math/wrap.html\n */\nexport function wrap(value: number, min: number, max: number): number {\n const range = max - min;\n return min === max ? min : ((range + ((value - min) % range)) % range) + min;\n}\n"],
5
5
  "mappings": "AAIO,SAAS,KAAK,OAAe,KAAa,KAAqB;AACpE,QAAM,QAAQ,MAAM;AACpB,SAAO,QAAQ,MAAM,OAAQ,SAAU,QAAQ,OAAO,SAAU,QAAS;AAC3E;",
6
6
  "names": []
7
7
  }
package/utils/memo.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Memoize the result of a function with a single argument indefinitely.
3
3
  * This is a simpler implementation of the `memoize` function.
4
4
  * @link https://js-toolkit.studiometa.dev/utils/memo.html
5
- */
5
+ */
6
6
  export declare function memo<T extends (...args: unknown[]) => unknown>(fn: T): T;
package/utils/memo.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/memo.ts"],
4
- "sourcesContent": ["/**\n * Memoize the result of a function with a single argument indefinitely.\n * This is a simpler implementation of the `memoize` function.\n * @link https://js-toolkit.studiometa.dev/utils/memo.html\n*/\nexport function memo<T extends (...args: unknown[]) => unknown>(fn: T): T {\n const cache = new Map<string, ReturnType<T>>();\n\n // @ts-ignore\n return function cached(...args) {\n const key = args.join('');\n if (!cache.has(key)) {\n cache.set(key, fn(...args) as ReturnType<T>);\n }\n return cache.get(key);\n };\n}\n"],
4
+ "sourcesContent": ["/**\n * Memoize the result of a function with a single argument indefinitely.\n * This is a simpler implementation of the `memoize` function.\n * @link https://js-toolkit.studiometa.dev/utils/memo.html\n */\nexport function memo<T extends (...args: unknown[]) => unknown>(fn: T): T {\n const cache = new Map<string, ReturnType<T>>();\n\n // @ts-ignore\n return function cached(...args) {\n const key = args.join('');\n if (!cache.has(key)) {\n cache.set(key, fn(...args) as ReturnType<T>);\n }\n return cache.get(key);\n };\n}\n"],
5
5
  "mappings": "AAKO,SAAS,KAAgD,IAAU;AACxE,QAAM,QAAQ,oBAAI,IAA2B;AAG7C,SAAO,SAAS,UAAU,MAAM;AAC9B,UAAM,MAAM,KAAK,KAAK,EAAE;AACxB,QAAI,CAAC,MAAM,IAAI,GAAG,GAAG;AACnB,YAAM,IAAI,KAAK,GAAG,GAAG,IAAI,CAAkB;AAAA,IAC7C;AACA,WAAO,MAAM,IAAI,GAAG;AAAA,EACtB;AACF;",
6
6
  "names": []
7
7
  }
@@ -17,5 +17,5 @@ export interface MemoizeOptions<T> {
17
17
  /**
18
18
  * Memoize the output of a function.
19
19
  * @link https://js-toolkit.studiometa.dev/utils/memoize.html
20
- */
21
- export declare function memoize<T extends (...args: unknown[]) => unknown>(fn: T, { maxAge, cacheKey, cache, }?: MemoizeOptions<ReturnType<T>>): (...args: Parameters<T>) => ReturnType<T>;
20
+ */
21
+ export declare function memoize<T extends (...args: unknown[]) => unknown>(fn: T, { maxAge, cacheKey, cache }?: MemoizeOptions<ReturnType<T>>): (...args: Parameters<T>) => ReturnType<T>;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/memoize.ts"],
4
- "sourcesContent": ["export interface MemoizeCache<T> {\n has: (key: unknown) => boolean;\n set: (key: unknown, value: { data: T; date: number }) => this;\n get: (key: unknown) => { data: T; date: number };\n}\n\nexport interface MemoizeOptions<T> {\n maxAge?: number;\n cacheKey?: (args: unknown[]) => string;\n cache?: MemoizeCache<T>;\n}\n\n/**\n * Memoize the output of a function.\n * @link https://js-toolkit.studiometa.dev/utils/memoize.html\n*/\nexport function memoize<T extends (...args: unknown[]) => unknown>(\n fn: T,\n {\n maxAge = Number.POSITIVE_INFINITY,\n cacheKey = JSON.stringify,\n cache = new Map(),\n }: MemoizeOptions<ReturnType<T>> = {},\n): (...args: Parameters<T>) => ReturnType<T> {\n return function memoized(...args): ReturnType<T> {\n const key = cacheKey(args);\n const date = Date.now();\n\n if (cache.has(key)) {\n const cached = cache.get(key);\n\n if (date - cached.date < maxAge) {\n return cached.data;\n }\n }\n\n // @ts-ignore\n const data: ReturnType<T> = fn(...args);\n\n cache.set(key, {\n data,\n date: Date.now(),\n });\n\n return data;\n };\n}\n"],
4
+ "sourcesContent": ["export interface MemoizeCache<T> {\n has: (key: unknown) => boolean;\n set: (key: unknown, value: { data: T; date: number }) => this;\n get: (key: unknown) => { data: T; date: number };\n}\n\nexport interface MemoizeOptions<T> {\n maxAge?: number;\n cacheKey?: (args: unknown[]) => string;\n cache?: MemoizeCache<T>;\n}\n\n/**\n * Memoize the output of a function.\n * @link https://js-toolkit.studiometa.dev/utils/memoize.html\n */\nexport function memoize<T extends (...args: unknown[]) => unknown>(\n fn: T,\n {\n maxAge = Number.POSITIVE_INFINITY,\n cacheKey = JSON.stringify,\n cache = new Map(),\n }: MemoizeOptions<ReturnType<T>> = {},\n): (...args: Parameters<T>) => ReturnType<T> {\n return function memoized(...args): ReturnType<T> {\n const key = cacheKey(args);\n const date = Date.now();\n\n if (cache.has(key)) {\n const cached = cache.get(key);\n\n if (date - cached.date < maxAge) {\n return cached.data;\n }\n }\n\n // @ts-ignore\n const data: ReturnType<T> = fn(...args);\n\n cache.set(key, {\n data,\n date: Date.now(),\n });\n\n return data;\n };\n}\n"],
5
5
  "mappings": "AAgBO,SAAS,QACd,IACA;AAAA,EACE,SAAS,OAAO;AAAA,EAChB,WAAW,KAAK;AAAA,EAChB,QAAQ,oBAAI,IAAI;AAClB,IAAmC,CAAC,GACO;AAC3C,SAAO,SAAS,YAAY,MAAqB;AAC/C,UAAM,MAAM,SAAS,IAAI;AACzB,UAAM,OAAO,KAAK,IAAI;AAEtB,QAAI,MAAM,IAAI,GAAG,GAAG;AAClB,YAAM,SAAS,MAAM,IAAI,GAAG;AAE5B,UAAI,OAAO,OAAO,OAAO,QAAQ;AAC/B,eAAO,OAAO;AAAA,MAChB;AAAA,IACF;AAGA,UAAM,OAAsB,GAAG,GAAG,IAAI;AAEtC,UAAM,IAAI,KAAK;AAAA,MACb;AAAA,MACA,MAAM,KAAK,IAAI;AAAA,IACjB,CAAC;AAED,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -2,7 +2,7 @@ type Callback = (time?: DOMHighResTimeStamp) => any;
2
2
  /**
3
3
  * Wait for the next frame to execute a function.
4
4
  * @link https://js-toolkit.studiometa.dev/utils/nextFrame.html
5
- */
5
+ */
6
6
  export declare function nextFrame(): Promise<DOMHighResTimeStamp>;
7
7
  export declare function nextFrame<T extends Callback>(callback?: T): Promise<ReturnType<T>>;
8
8
  export {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/nextFrame.ts"],
4
- "sourcesContent": ["import { isFunction } from './is.js';\nimport { hasWindow } from './has.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Callback = (time?: DOMHighResTimeStamp) => any;\n\n/**\n * Wait for the next frame to execute a function.\n * @link https://js-toolkit.studiometa.dev/utils/nextFrame.html\n*/\nexport function nextFrame(): Promise<DOMHighResTimeStamp>;\nexport function nextFrame<T extends Callback>(callback?: T): Promise<ReturnType<T>>;\nexport function nextFrame<T extends Callback>(callback?: T): Promise<ReturnType<T>> {\n const fn = hasWindow() ? (window?.requestAnimationFrame ?? setTimeout) : setTimeout;\n return new Promise((resolve) => {\n fn((time) => resolve(isFunction(callback) ? callback(time) : time));\n });\n}\n"],
4
+ "sourcesContent": ["import { isFunction } from './is.js';\nimport { hasWindow } from './has.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Callback = (time?: DOMHighResTimeStamp) => any;\n\n/**\n * Wait for the next frame to execute a function.\n * @link https://js-toolkit.studiometa.dev/utils/nextFrame.html\n */\nexport function nextFrame(): Promise<DOMHighResTimeStamp>;\nexport function nextFrame<T extends Callback>(callback?: T): Promise<ReturnType<T>>;\nexport function nextFrame<T extends Callback>(callback?: T): Promise<ReturnType<T>> {\n const fn = hasWindow() ? (window?.requestAnimationFrame ?? setTimeout) : setTimeout;\n return new Promise((resolve) => {\n fn((time) => resolve(isFunction(callback) ? callback(time) : time));\n });\n}\n"],
5
5
  "mappings": "AAAA,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAWnB,SAAS,UAA8B,UAAsC;AAClF,QAAM,KAAK,UAAU,IAAK,QAAQ,yBAAyB,aAAc;AACzE,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,OAAG,CAAC,SAAS,QAAQ,WAAW,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC;AAAA,EACpE,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -2,7 +2,7 @@ type Callback = (...args: any[]) => any;
2
2
  /**
3
3
  * Wait for the next microtask.
4
4
  * @link https://js-toolkit.studiometa.dev/utils/nextMicrotask.html
5
- */
5
+ */
6
6
  export declare function nextMicrotask(): Promise<void>;
7
7
  export declare function nextMicrotask<T extends Callback>(callback?: T): Promise<ReturnType<T>>;
8
8
  export {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/nextMicrotask.ts"],
4
- "sourcesContent": ["import { isFunction } from './is.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Callback = (...args: any[]) => any;\n\n/**\n * Wait for the next microtask.\n * @link https://js-toolkit.studiometa.dev/utils/nextMicrotask.html\n*/\nexport async function nextMicrotask(): Promise<void>;\nexport async function nextMicrotask<T extends Callback>(callback?: T): Promise<ReturnType<T>>;\nexport async function nextMicrotask<T extends Callback>(callback?: T): Promise<ReturnType<T>> {\n return Promise.resolve().then(() => isFunction(callback) && callback());\n}\n"],
4
+ "sourcesContent": ["import { isFunction } from './is.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Callback = (...args: any[]) => any;\n\n/**\n * Wait for the next microtask.\n * @link https://js-toolkit.studiometa.dev/utils/nextMicrotask.html\n */\nexport async function nextMicrotask(): Promise<void>;\nexport async function nextMicrotask<T extends Callback>(callback?: T): Promise<ReturnType<T>>;\nexport async function nextMicrotask<T extends Callback>(callback?: T): Promise<ReturnType<T>> {\n return Promise.resolve().then(() => isFunction(callback) && callback());\n}\n"],
5
5
  "mappings": "AAAA,SAAS,kBAAkB;AAW3B,eAAsB,cAAkC,UAAsC;AAC5F,SAAO,QAAQ,QAAQ,EAAE,KAAK,MAAM,WAAW,QAAQ,KAAK,SAAS,CAAC;AACxE;",
6
6
  "names": []
7
7
  }
@@ -2,7 +2,7 @@ type Callback = (...args: any[]) => any;
2
2
  /**
3
3
  * Wait for the next tick.
4
4
  * @link https://js-toolkit.studiometa.dev/utils/nextTick.html
5
- */
5
+ */
6
6
  export declare function nextTick(): Promise<void>;
7
7
  export declare function nextTick<T extends Callback>(callback?: T): Promise<ReturnType<T>>;
8
8
  export {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/nextTick.ts"],
4
- "sourcesContent": ["import { isFunction } from './is.js';\nimport { wait } from './wait.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Callback = (...args: any[]) => any;\n\n/**\n * Wait for the next tick.\n * @link https://js-toolkit.studiometa.dev/utils/nextTick.html\n*/\nexport async function nextTick(): Promise<void>;\nexport async function nextTick<T extends Callback>(callback?: T): Promise<ReturnType<T>>;\nexport async function nextTick<T extends Callback>(callback?: T): Promise<ReturnType<T>> {\n return wait().then(isFunction(callback) && (callback as ReturnType<T>));\n}\n"],
4
+ "sourcesContent": ["import { isFunction } from './is.js';\nimport { wait } from './wait.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Callback = (...args: any[]) => any;\n\n/**\n * Wait for the next tick.\n * @link https://js-toolkit.studiometa.dev/utils/nextTick.html\n */\nexport async function nextTick(): Promise<void>;\nexport async function nextTick<T extends Callback>(callback?: T): Promise<ReturnType<T>>;\nexport async function nextTick<T extends Callback>(callback?: T): Promise<ReturnType<T>> {\n return wait().then(isFunction(callback) && (callback as ReturnType<T>));\n}\n"],
5
5
  "mappings": "AAAA,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AAWrB,eAAsB,SAA6B,UAAsC;AACvF,SAAO,KAAK,EAAE,KAAK,WAAW,QAAQ,KAAM,QAA0B;AACxE;",
6
6
  "names": []
7
7
  }
@@ -8,8 +8,10 @@ function getAllProperties(object, props = [], testFn = null) {
8
8
  if (isFunction(testFn)) {
9
9
  foundProps = foundProps.filter((name) => testFn(name, proto));
10
10
  }
11
- const formatedProps = foundProps.map((name) => [name, proto]).reduce((acc, val) => [...acc, val], props);
12
- return getAllProperties(proto, formatedProps, testFn);
11
+ for (const name of foundProps) {
12
+ props.push([name, proto]);
13
+ }
14
+ return getAllProperties(proto, props, testFn);
13
15
  }
14
16
  export {
15
17
  getAllProperties
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/js-toolkit/utils/object/getAllProperties.ts"],
4
- "sourcesContent": ["import { isFunction } from '../is.js';\n\n/**\n * Gets all non-builtin properties up the prototype chain.\n *\n * @param {Object} object\n * The object to get the propeties from.\n * @param {Array} [props=[]]\n * The already existing properties.\n * @param {(name:string, proto:any) => boolean} testFn\n * @return {Array<[string, Object]>} An array of properties and the prototype they belong to.\n */\nexport function getAllProperties(\n object: unknown,\n props: Array<[string, unknown]> = [],\n testFn: (name: string, proto: unknown) => boolean = null,\n): Array<[string, unknown]> {\n const proto = Object.getPrototypeOf(object);\n\n if (proto === Object.prototype || proto === null) {\n return props;\n }\n\n let foundProps = Object.getOwnPropertyNames(proto);\n\n if (isFunction(testFn)) {\n foundProps = foundProps.filter((name) => testFn(name, proto));\n }\n\n const formatedProps = foundProps\n .map<[string, unknown]>((name) => [name, proto])\n .reduce<Array<[string, unknown]>>((acc, val) => [...acc, val], props);\n\n return getAllProperties(proto, formatedProps, testFn);\n}\n"],
5
- "mappings": "AAAA,SAAS,kBAAkB;AAYpB,SAAS,iBACd,QACA,QAAkC,CAAC,GACnC,SAAoD,MAC1B;AAC1B,QAAM,QAAQ,OAAO,eAAe,MAAM;AAE1C,MAAI,UAAU,OAAO,aAAa,UAAU,MAAM;AAChD,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,OAAO,oBAAoB,KAAK;AAEjD,MAAI,WAAW,MAAM,GAAG;AACtB,iBAAa,WAAW,OAAO,CAAC,SAAS,OAAO,MAAM,KAAK,CAAC;AAAA,EAC9D;AAEA,QAAM,gBAAgB,WACnB,IAAuB,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAC9C,OAAiC,CAAC,KAAK,QAAQ,CAAC,GAAG,KAAK,GAAG,GAAG,KAAK;AAEtE,SAAO,iBAAiB,OAAO,eAAe,MAAM;AACtD;",
4
+ "sourcesContent": ["import { isFunction } from '../is.js';\n\n/**\n * Gets all non-builtin properties up the prototype chain.\n *\n * @param {Object} object\n * The object to get the propeties from.\n * @param {Array} [props=[]]\n * The already existing properties.\n * @param {(name:string, proto:any) => boolean} testFn\n * @return {Array<[string, Object]>} An array of properties and the prototype they belong to.\n */\nexport function getAllProperties(\n object: unknown,\n props: Array<[string, unknown]> = [],\n testFn: (name: string, proto: unknown) => boolean = null,\n): Array<[string, unknown]> {\n const proto = Object.getPrototypeOf(object);\n\n if (proto === Object.prototype || proto === null) {\n return props;\n }\n\n let foundProps = Object.getOwnPropertyNames(proto);\n\n if (isFunction(testFn)) {\n foundProps = foundProps.filter((name) => testFn(name, proto));\n }\n\n for (const name of foundProps) {\n props.push([name, proto]);\n }\n\n return getAllProperties(proto, props, testFn);\n}\n"],
5
+ "mappings": "AAAA,SAAS,kBAAkB;AAYpB,SAAS,iBACd,QACA,QAAkC,CAAC,GACnC,SAAoD,MAC1B;AAC1B,QAAM,QAAQ,OAAO,eAAe,MAAM;AAE1C,MAAI,UAAU,OAAO,aAAa,UAAU,MAAM;AAChD,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,OAAO,oBAAoB,KAAK;AAEjD,MAAI,WAAW,MAAM,GAAG;AACtB,iBAAa,WAAW,OAAO,CAAC,SAAS,OAAO,MAAM,KAAK,CAAC;AAAA,EAC9D;AAEA,aAAW,QAAQ,YAAY;AAC7B,UAAM,KAAK,CAAC,MAAM,KAAK,CAAC;AAAA,EAC1B;AAEA,SAAO,iBAAiB,OAAO,OAAO,MAAM;AAC9C;",
6
6
  "names": []
7
7
  }
package/utils/random.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * @param {number} [b] Second bound, defaults to 0.
5
5
  * @return {number} A number between `a` and `b`.
6
6
  * @link https://js-toolkit.studiometa.dev/utils/random.html
7
- */
7
+ */
8
8
  export declare function random(a: number, b?: number): number;
9
9
  /**
10
10
  * Get a random integer between bounds
@@ -13,7 +13,7 @@ export declare function random(a: number, b?: number): number;
13
13
  * @param {number} b Second bound.
14
14
  * @return {number} An integer between `a` and `b`;
15
15
  * @link https://js-toolkit.studiometa.dev/utils/randomInt.html
16
- */
16
+ */
17
17
  export declare function randomInt(a: number, b?: number): number;
18
18
  /**
19
19
  * Get a random item of an array or a random character of a string
@@ -22,5 +22,5 @@ export declare function randomInt(a: number, b?: number): number;
22
22
  * @return {T | undefined}
23
23
  * @throws {Error} Throws an error if `items` is not an array or a string.
24
24
  * @link https://js-toolkit.studiometa.dev/utils/randomItem.html
25
- */
25
+ */
26
26
  export declare function randomItem<T>(items: T[] | string): T | string | undefined;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/random.ts"],
4
- "sourcesContent": ["import { isArray, isString } from './is.js';\n\n/**\n * Get a random number between given bounds.\n * @param {number} a First bound.\n * @param {number} [b] Second bound, defaults to 0.\n * @return {number} A number between `a` and `b`.\n * @link https://js-toolkit.studiometa.dev/utils/random.html\n*/\nexport function random(a: number, b = 0): number {\n return Math.random() * (b - a) + a;\n}\n\n/**\n * Get a random integer between bounds\n *\n * @param {number} a First bound.\n * @param {number} b Second bound.\n * @return {number} An integer between `a` and `b`;\n * @link https://js-toolkit.studiometa.dev/utils/randomInt.html\n*/\nexport function randomInt(a: number, b = 0): number {\n return Math.round(random(a, b));\n}\n\n/**\n * Get a random item of an array or a random character of a string\n *\n * @param {T[] | string} items Array or string\n * @return {T | undefined}\n * @throws {Error} Throws an error if `items` is not an array or a string.\n * @link https://js-toolkit.studiometa.dev/utils/randomItem.html\n*/\nexport function randomItem<T>(items: T[] | string): T | string | undefined {\n if (!isArray(items) && !isString(items)) {\n throw new Error('randomItem() expects an array or a string as argument.');\n }\n return items.length > 0 ? items[randomInt(items.length - 1)] : undefined;\n}\n"],
4
+ "sourcesContent": ["import { isArray, isString } from './is.js';\n\n/**\n * Get a random number between given bounds.\n * @param {number} a First bound.\n * @param {number} [b] Second bound, defaults to 0.\n * @return {number} A number between `a` and `b`.\n * @link https://js-toolkit.studiometa.dev/utils/random.html\n */\nexport function random(a: number, b = 0): number {\n return Math.random() * (b - a) + a;\n}\n\n/**\n * Get a random integer between bounds\n *\n * @param {number} a First bound.\n * @param {number} b Second bound.\n * @return {number} An integer between `a` and `b`;\n * @link https://js-toolkit.studiometa.dev/utils/randomInt.html\n */\nexport function randomInt(a: number, b = 0): number {\n return Math.round(random(a, b));\n}\n\n/**\n * Get a random item of an array or a random character of a string\n *\n * @param {T[] | string} items Array or string\n * @return {T | undefined}\n * @throws {Error} Throws an error if `items` is not an array or a string.\n * @link https://js-toolkit.studiometa.dev/utils/randomItem.html\n */\nexport function randomItem<T>(items: T[] | string): T | string | undefined {\n if (!isArray(items) && !isString(items)) {\n throw new Error('randomItem() expects an array or a string as argument.');\n }\n return items.length > 0 ? items[randomInt(items.length - 1)] : undefined;\n}\n"],
5
5
  "mappings": "AAAA,SAAS,SAAS,gBAAgB;AAS3B,SAAS,OAAO,GAAW,IAAI,GAAW;AAC/C,SAAO,KAAK,OAAO,KAAK,IAAI,KAAK;AACnC;AAUO,SAAS,UAAU,GAAW,IAAI,GAAW;AAClD,SAAO,KAAK,MAAM,OAAO,GAAG,CAAC,CAAC;AAChC;AAUO,SAAS,WAAc,OAA6C;AACzE,MAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,SAAS,KAAK,GAAG;AACvC,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AACA,SAAO,MAAM,SAAS,IAAI,MAAM,UAAU,MAAM,SAAS,CAAC,CAAC,IAAI;AACjE;",
6
6
  "names": []
7
7
  }
@@ -5,11 +5,11 @@ declare function getScheduler<T extends string>(steps: T[]): Record<T, (fn: () =
5
5
  /**
6
6
  * Use a scheduler based on the given steps.
7
7
  * @link https://js-toolkit.studiometa.dev/utils/useScheduler.html
8
- */
8
+ */
9
9
  export declare function useScheduler<T extends string>(steps?: T[]): ReturnType<typeof getScheduler<T>>;
10
10
  /**
11
11
  * DOM-oriented scheduler using read/write/afterWrite steps.
12
12
  * @link https://js-toolkit.studiometa.dev/utils/domScheduler.html
13
- */
14
- export declare const domScheduler: Record<"read" | "write" | "afterWrite", (fn: () => unknown) => void>;
13
+ */
14
+ export declare const domScheduler: Record<"afterWrite" | "read" | "write", (fn: () => unknown) => void>;
15
15
  export {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/scheduler.ts"],
4
- "sourcesContent": ["/**\n * Generate a scheduler.\n */\nfunction getScheduler<T extends string>(steps: T[]): Record<T, (fn: () => unknown) => void> {\n const stepsFns = {} as Record<T, Array<() => void>>;\n const api = {} as Record<T, (fn: () => void) => void>;\n\n let isScheduled = false;\n\n const resolvedPromise = Promise.resolve();\n\n /**\n * Execute the given list of tasks.\n */\n function run(tasks: Array<() => void>) {\n let task;\n // eslint-disable-next-line no-cond-assign\n while ((task = tasks.shift())) {\n task();\n }\n }\n\n /**\n * Flush registered tasks and schedule the next run if needed.\n */\n function flush() {\n for (const step of steps) {\n run(stepsFns[step]);\n }\n isScheduled = false;\n\n if (steps.reduce((length, step) => length + stepsFns[step].length, 0) > 0) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define, no-use-before-define\n scheduleFlush();\n }\n }\n\n /**\n * Schedule the next flush of tasks.\n */\n function scheduleFlush() {\n if (isScheduled) {\n return;\n }\n\n isScheduled = true;\n resolvedPromise.then(flush);\n }\n\n for (const step of steps) {\n stepsFns[step] = [];\n api[step] = function add(fn) {\n stepsFns[step].push(fn);\n scheduleFlush();\n };\n }\n\n return api;\n}\n\nconst instances = new Map();\n\nconst domSchedulerSteps = ['read', 'write', 'afterWrite'];\n\n/**\n * Use a scheduler based on the given steps.\n * @link https://js-toolkit.studiometa.dev/utils/useScheduler.html\n*/\nexport function useScheduler<T extends string>(\n steps: T[] = domSchedulerSteps as T[],\n): ReturnType<typeof getScheduler<T>> {\n const key = steps.join('-');\n\n if (instances.has(key)) {\n return instances.get(key);\n }\n\n const scheduler = getScheduler(steps);\n instances.set(key, scheduler);\n\n return scheduler;\n}\n\n/**\n * DOM-oriented scheduler using read/write/afterWrite steps.\n * @link https://js-toolkit.studiometa.dev/utils/domScheduler.html\n*/\nexport const domScheduler = useScheduler(domSchedulerSteps as ['read', 'write', 'afterWrite']);\n"],
4
+ "sourcesContent": ["/**\n * Generate a scheduler.\n */\nfunction getScheduler<T extends string>(steps: T[]): Record<T, (fn: () => unknown) => void> {\n const stepsFns = {} as Record<T, Array<() => void>>;\n const api = {} as Record<T, (fn: () => void) => void>;\n\n let isScheduled = false;\n\n const resolvedPromise = Promise.resolve();\n\n /**\n * Execute the given list of tasks.\n */\n function run(tasks: Array<() => void>) {\n let task;\n // eslint-disable-next-line no-cond-assign\n while ((task = tasks.shift())) {\n task();\n }\n }\n\n /**\n * Flush registered tasks and schedule the next run if needed.\n */\n function flush() {\n for (const step of steps) {\n run(stepsFns[step]);\n }\n isScheduled = false;\n\n if (steps.reduce((length, step) => length + stepsFns[step].length, 0) > 0) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define, no-use-before-define\n scheduleFlush();\n }\n }\n\n /**\n * Schedule the next flush of tasks.\n */\n function scheduleFlush() {\n if (isScheduled) {\n return;\n }\n\n isScheduled = true;\n resolvedPromise.then(flush);\n }\n\n for (const step of steps) {\n stepsFns[step] = [];\n api[step] = function add(fn) {\n stepsFns[step].push(fn);\n scheduleFlush();\n };\n }\n\n return api;\n}\n\nconst instances = new Map();\n\nconst domSchedulerSteps = ['read', 'write', 'afterWrite'];\n\n/**\n * Use a scheduler based on the given steps.\n * @link https://js-toolkit.studiometa.dev/utils/useScheduler.html\n */\nexport function useScheduler<T extends string>(\n steps: T[] = domSchedulerSteps as T[],\n): ReturnType<typeof getScheduler<T>> {\n const key = steps.join('-');\n\n if (instances.has(key)) {\n return instances.get(key);\n }\n\n const scheduler = getScheduler(steps);\n instances.set(key, scheduler);\n\n return scheduler;\n}\n\n/**\n * DOM-oriented scheduler using read/write/afterWrite steps.\n * @link https://js-toolkit.studiometa.dev/utils/domScheduler.html\n */\nexport const domScheduler = useScheduler(domSchedulerSteps as ['read', 'write', 'afterWrite']);\n"],
5
5
  "mappings": "AAGA,SAAS,aAA+B,OAAoD;AAC1F,QAAM,WAAW,CAAC;AAClB,QAAM,MAAM,CAAC;AAEb,MAAI,cAAc;AAElB,QAAM,kBAAkB,QAAQ,QAAQ;AAKxC,WAAS,IAAI,OAA0B;AACrC,QAAI;AAEJ,WAAQ,OAAO,MAAM,MAAM,GAAI;AAC7B,WAAK;AAAA,IACP;AAAA,EACF;AAKA,WAAS,QAAQ;AACf,eAAW,QAAQ,OAAO;AACxB,UAAI,SAAS,IAAI,CAAC;AAAA,IACpB;AACA,kBAAc;AAEd,QAAI,MAAM,OAAO,CAAC,QAAQ,SAAS,SAAS,SAAS,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG;AAEzE,oBAAc;AAAA,IAChB;AAAA,EACF;AAKA,WAAS,gBAAgB;AACvB,QAAI,aAAa;AACf;AAAA,IACF;AAEA,kBAAc;AACd,oBAAgB,KAAK,KAAK;AAAA,EAC5B;AAEA,aAAW,QAAQ,OAAO;AACxB,aAAS,IAAI,IAAI,CAAC;AAClB,QAAI,IAAI,IAAI,SAAS,IAAI,IAAI;AAC3B,eAAS,IAAI,EAAE,KAAK,EAAE;AACtB,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,MAAM,YAAY,oBAAI,IAAI;AAE1B,MAAM,oBAAoB,CAAC,QAAQ,SAAS,YAAY;AAMjD,SAAS,aACd,QAAa,mBACuB;AACpC,QAAM,MAAM,MAAM,KAAK,GAAG;AAE1B,MAAI,UAAU,IAAI,GAAG,GAAG;AACtB,WAAO,UAAU,IAAI,GAAG;AAAA,EAC1B;AAEA,QAAM,YAAY,aAAa,KAAK;AACpC,YAAU,IAAI,KAAK,SAAS;AAE5B,SAAO;AACT;AAMO,MAAM,eAAe,aAAa,iBAAoD;",
6
6
  "names": []
7
7
  }
@@ -23,7 +23,7 @@ export interface ScrollToOptions extends TweenOptions {
23
23
  *
24
24
  * @return {Promise<ScrollPosition>} A promising resolving with the scroll position.
25
25
  * @link https://js-toolkit.studiometa.dev/utils/scrollTo.html
26
- */
26
+ */
27
27
  export declare function scrollTo(target: string | HTMLElement | number | Partial<ScrollPosition>, { rootElement, axis, offset, ...tweenOptions }?: ScrollToOptions): Promise<ScrollPosition>;
28
28
  export declare namespace scrollTo {
29
29
  var axis: {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/js-toolkit/utils/scrollTo.ts"],
4
- "sourcesContent": ["import { tween } from './tween.js';\nimport type { TweenOptions } from './tween.js';\nimport { isString, isNumber, isFunction, isDefined } from './is.js';\nimport { lerp } from './math/index.js';\n\nexport interface ScrollPosition {\n left: number;\n top: number;\n}\n\nexport type ScrollTarget = string | HTMLElement | number | Partial<ScrollPosition>;\n\nexport interface ScrollToOptions extends TweenOptions {\n /**\n * Root element that will be scrolled.\n */\n rootElement?: HTMLElement | typeof window;\n /**\n * Scroll direction.\n */\n axis?: (typeof scrollTo.axis)[keyof typeof scrollTo.axis];\n /**\n * Distance from the target.\n */\n offset?: number;\n}\n\nconst xAxis = Symbol(0);\nconst yAxis = Symbol(1);\nconst bothAxis = Symbol(2);\n\nfunction isHtmlElement(rootElement: ScrollToOptions['rootElement']): rootElement is HTMLElement {\n return rootElement instanceof HTMLElement;\n}\n\n/**\n * Get the current root element or window scroll position.\n */\nfunction getCurrentScrollPosition(rootElement: ScrollToOptions['rootElement']): ScrollPosition {\n return {\n left: isHtmlElement(rootElement) ? rootElement.scrollTop : rootElement.scrollX,\n top: isHtmlElement(rootElement) ? rootElement.scrollLeft : rootElement.scrollY,\n };\n}\n\n/**\n * Get the maximum scroll position values.\n */\nfunction getMaxScrollPosition(rootElement?: ScrollToOptions['rootElement']): ScrollPosition {\n return {\n left: isHtmlElement(rootElement)\n ? rootElement.scrollWidth - rootElement.offsetWidth\n : document.documentElement.scrollWidth - window.innerWidth,\n top: isHtmlElement(rootElement)\n ? rootElement.scrollHeight - rootElement.offsetHeight\n : document.documentElement.scrollHeight - window.innerHeight,\n };\n}\n\n/**\n * Get the target scroll position.\n */\nfunction getTargetScrollPosition(\n initialScrollPosition: ScrollPosition,\n maxScrollPosition: ScrollPosition,\n target: ScrollTarget,\n axis: ScrollToOptions['axis'],\n offset: number,\n): ScrollPosition {\n let { top, left } = initialScrollPosition;\n\n if (target instanceof HTMLElement || isString(target)) {\n const targetElement = target instanceof HTMLElement ? target : document.querySelector(target);\n\n if (!targetElement) {\n return { top, left };\n }\n\n const sizes = targetElement.getBoundingClientRect();\n const styles = getComputedStyle(targetElement);\n const scrollMargin = {\n left: Number.parseInt(styles.scrollMarginLeft || '0', 10),\n top: Number.parseInt(styles.scrollMarginTop || '0', 10),\n };\n\n // Set the scroll position of the target element.\n left = sizes.left + initialScrollPosition.left - scrollMargin.left;\n top = sizes.top + initialScrollPosition.top - scrollMargin.top;\n } else if (isNumber(target)) {\n left = target;\n top = target;\n } else {\n left = target.left ?? left;\n top = target.top ?? top;\n }\n\n left -= offset;\n top -= offset;\n\n if (axis !== bothAxis) {\n if (axis !== xAxis && !isDefined((target as Partial<ScrollPosition>).left)) {\n left = initialScrollPosition.left;\n }\n\n if (axis !== yAxis) {\n top = initialScrollPosition.top;\n }\n }\n\n return {\n left: Math.min(left, maxScrollPosition.left),\n top: Math.min(top, maxScrollPosition.top),\n };\n}\n\n/**\n * Scroll to an element.\n *\n * @return {Promise<ScrollPosition>} A promising resolving with the scroll position.\n * @link https://js-toolkit.studiometa.dev/utils/scrollTo.html\n*/\nexport function scrollTo(\n target: string | HTMLElement | number | Partial<ScrollPosition>,\n { rootElement = window, axis = yAxis, offset = 0, ...tweenOptions }: ScrollToOptions = {},\n): Promise<ScrollPosition> {\n const initialScrollPosition = getCurrentScrollPosition(rootElement);\n const maxScrollPosition = getMaxScrollPosition(rootElement);\n const targetScrollPosition = getTargetScrollPosition(\n initialScrollPosition,\n maxScrollPosition,\n target,\n axis,\n offset,\n );\n\n return new Promise((resolve) => {\n function eventHandler() {\n /* eslint-disable @typescript-eslint/no-use-before-define */\n tw.pause();\n stop();\n /* eslint-enable @typescript-eslint/no-use-before-define */\n }\n\n function stop() {\n rootElement.removeEventListener('wheel', eventHandler);\n rootElement.removeEventListener('touchmove', eventHandler);\n\n // Resolve the promise on animation finish.\n resolve(getCurrentScrollPosition(rootElement));\n }\n\n // Setup tween.\n const tw = tween(\n (progress) => {\n rootElement.scrollTo({\n left: lerp(initialScrollPosition.left, targetScrollPosition.left, progress),\n top: lerp(initialScrollPosition.top, targetScrollPosition.top, progress),\n behavior: 'instant',\n });\n },\n {\n smooth: 0.2,\n ...tweenOptions,\n onFinish(progress) {\n if (isFunction(tweenOptions.onFinish)) {\n tweenOptions.onFinish(progress);\n }\n\n stop();\n },\n },\n );\n\n rootElement.addEventListener('wheel', eventHandler, { passive: true });\n rootElement.addEventListener('touchmove', eventHandler, { passive: true });\n tw.start();\n });\n}\n\nscrollTo.axis = {\n x: xAxis,\n y: yAxis,\n both: bothAxis,\n};\n"],
4
+ "sourcesContent": ["import { tween } from './tween.js';\nimport type { TweenOptions } from './tween.js';\nimport { isString, isNumber, isFunction, isDefined } from './is.js';\nimport { lerp } from './math/index.js';\n\nexport interface ScrollPosition {\n left: number;\n top: number;\n}\n\nexport type ScrollTarget = string | HTMLElement | number | Partial<ScrollPosition>;\n\nexport interface ScrollToOptions extends TweenOptions {\n /**\n * Root element that will be scrolled.\n */\n rootElement?: HTMLElement | typeof window;\n /**\n * Scroll direction.\n */\n axis?: (typeof scrollTo.axis)[keyof typeof scrollTo.axis];\n /**\n * Distance from the target.\n */\n offset?: number;\n}\n\nconst xAxis = Symbol(0);\nconst yAxis = Symbol(1);\nconst bothAxis = Symbol(2);\n\nfunction isHtmlElement(rootElement: ScrollToOptions['rootElement']): rootElement is HTMLElement {\n return rootElement instanceof HTMLElement;\n}\n\n/**\n * Get the current root element or window scroll position.\n */\nfunction getCurrentScrollPosition(rootElement: ScrollToOptions['rootElement']): ScrollPosition {\n return {\n left: isHtmlElement(rootElement) ? rootElement.scrollTop : rootElement.scrollX,\n top: isHtmlElement(rootElement) ? rootElement.scrollLeft : rootElement.scrollY,\n };\n}\n\n/**\n * Get the maximum scroll position values.\n */\nfunction getMaxScrollPosition(rootElement?: ScrollToOptions['rootElement']): ScrollPosition {\n return {\n left: isHtmlElement(rootElement)\n ? rootElement.scrollWidth - rootElement.offsetWidth\n : document.documentElement.scrollWidth - window.innerWidth,\n top: isHtmlElement(rootElement)\n ? rootElement.scrollHeight - rootElement.offsetHeight\n : document.documentElement.scrollHeight - window.innerHeight,\n };\n}\n\n/**\n * Get the target scroll position.\n */\nfunction getTargetScrollPosition(\n initialScrollPosition: ScrollPosition,\n maxScrollPosition: ScrollPosition,\n target: ScrollTarget,\n axis: ScrollToOptions['axis'],\n offset: number,\n): ScrollPosition {\n let { top, left } = initialScrollPosition;\n\n if (target instanceof HTMLElement || isString(target)) {\n const targetElement = target instanceof HTMLElement ? target : document.querySelector(target);\n\n if (!targetElement) {\n return { top, left };\n }\n\n const sizes = targetElement.getBoundingClientRect();\n const styles = getComputedStyle(targetElement);\n const scrollMargin = {\n left: Number.parseInt(styles.scrollMarginLeft || '0', 10),\n top: Number.parseInt(styles.scrollMarginTop || '0', 10),\n };\n\n // Set the scroll position of the target element.\n left = sizes.left + initialScrollPosition.left - scrollMargin.left;\n top = sizes.top + initialScrollPosition.top - scrollMargin.top;\n } else if (isNumber(target)) {\n left = target;\n top = target;\n } else {\n left = target.left ?? left;\n top = target.top ?? top;\n }\n\n left -= offset;\n top -= offset;\n\n if (axis !== bothAxis) {\n if (axis !== xAxis && !isDefined((target as Partial<ScrollPosition>).left)) {\n left = initialScrollPosition.left;\n }\n\n if (axis !== yAxis) {\n top = initialScrollPosition.top;\n }\n }\n\n return {\n left: Math.min(left, maxScrollPosition.left),\n top: Math.min(top, maxScrollPosition.top),\n };\n}\n\n/**\n * Scroll to an element.\n *\n * @return {Promise<ScrollPosition>} A promising resolving with the scroll position.\n * @link https://js-toolkit.studiometa.dev/utils/scrollTo.html\n */\nexport function scrollTo(\n target: string | HTMLElement | number | Partial<ScrollPosition>,\n { rootElement = window, axis = yAxis, offset = 0, ...tweenOptions }: ScrollToOptions = {},\n): Promise<ScrollPosition> {\n const initialScrollPosition = getCurrentScrollPosition(rootElement);\n const maxScrollPosition = getMaxScrollPosition(rootElement);\n const targetScrollPosition = getTargetScrollPosition(\n initialScrollPosition,\n maxScrollPosition,\n target,\n axis,\n offset,\n );\n\n return new Promise((resolve) => {\n function eventHandler() {\n /* eslint-disable @typescript-eslint/no-use-before-define */\n tw.pause();\n stop();\n /* eslint-enable @typescript-eslint/no-use-before-define */\n }\n\n function stop() {\n rootElement.removeEventListener('wheel', eventHandler);\n rootElement.removeEventListener('touchmove', eventHandler);\n\n // Resolve the promise on animation finish.\n resolve(getCurrentScrollPosition(rootElement));\n }\n\n // Setup tween.\n const tw = tween(\n (progress) => {\n rootElement.scrollTo({\n left: lerp(initialScrollPosition.left, targetScrollPosition.left, progress),\n top: lerp(initialScrollPosition.top, targetScrollPosition.top, progress),\n behavior: 'instant',\n });\n },\n {\n smooth: 0.2,\n ...tweenOptions,\n onFinish(progress) {\n if (isFunction(tweenOptions.onFinish)) {\n tweenOptions.onFinish(progress);\n }\n\n stop();\n },\n },\n );\n\n rootElement.addEventListener('wheel', eventHandler, { passive: true });\n rootElement.addEventListener('touchmove', eventHandler, { passive: true });\n tw.start();\n });\n}\n\nscrollTo.axis = {\n x: xAxis,\n y: yAxis,\n both: bothAxis,\n};\n"],
5
5
  "mappings": "AAAA,SAAS,aAAa;AAEtB,SAAS,UAAU,UAAU,YAAY,iBAAiB;AAC1D,SAAS,YAAY;AAwBrB,MAAM,QAAQ,OAAO,CAAC;AACtB,MAAM,QAAQ,OAAO,CAAC;AACtB,MAAM,WAAW,OAAO,CAAC;AAEzB,SAAS,cAAc,aAAyE;AAC9F,SAAO,uBAAuB;AAChC;AAKA,SAAS,yBAAyB,aAA6D;AAC7F,SAAO;AAAA,IACL,MAAM,cAAc,WAAW,IAAI,YAAY,YAAY,YAAY;AAAA,IACvE,KAAK,cAAc,WAAW,IAAI,YAAY,aAAa,YAAY;AAAA,EACzE;AACF;AAKA,SAAS,qBAAqB,aAA8D;AAC1F,SAAO;AAAA,IACL,MAAM,cAAc,WAAW,IAC3B,YAAY,cAAc,YAAY,cACtC,SAAS,gBAAgB,cAAc,OAAO;AAAA,IAClD,KAAK,cAAc,WAAW,IAC1B,YAAY,eAAe,YAAY,eACvC,SAAS,gBAAgB,eAAe,OAAO;AAAA,EACrD;AACF;AAKA,SAAS,wBACP,uBACA,mBACA,QACA,MACA,QACgB;AAChB,MAAI,EAAE,KAAK,KAAK,IAAI;AAEpB,MAAI,kBAAkB,eAAe,SAAS,MAAM,GAAG;AACrD,UAAM,gBAAgB,kBAAkB,cAAc,SAAS,SAAS,cAAc,MAAM;AAE5F,QAAI,CAAC,eAAe;AAClB,aAAO,EAAE,KAAK,KAAK;AAAA,IACrB;AAEA,UAAM,QAAQ,cAAc,sBAAsB;AAClD,UAAM,SAAS,iBAAiB,aAAa;AAC7C,UAAM,eAAe;AAAA,MACnB,MAAM,OAAO,SAAS,OAAO,oBAAoB,KAAK,EAAE;AAAA,MACxD,KAAK,OAAO,SAAS,OAAO,mBAAmB,KAAK,EAAE;AAAA,IACxD;AAGA,WAAO,MAAM,OAAO,sBAAsB,OAAO,aAAa;AAC9D,UAAM,MAAM,MAAM,sBAAsB,MAAM,aAAa;AAAA,EAC7D,WAAW,SAAS,MAAM,GAAG;AAC3B,WAAO;AACP,UAAM;AAAA,EACR,OAAO;AACL,WAAO,OAAO,QAAQ;AACtB,UAAM,OAAO,OAAO;AAAA,EACtB;AAEA,UAAQ;AACR,SAAO;AAEP,MAAI,SAAS,UAAU;AACrB,QAAI,SAAS,SAAS,CAAC,UAAW,OAAmC,IAAI,GAAG;AAC1E,aAAO,sBAAsB;AAAA,IAC/B;AAEA,QAAI,SAAS,OAAO;AAClB,YAAM,sBAAsB;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,KAAK,IAAI,MAAM,kBAAkB,IAAI;AAAA,IAC3C,KAAK,KAAK,IAAI,KAAK,kBAAkB,GAAG;AAAA,EAC1C;AACF;AAQO,SAAS,SACd,QACA,EAAE,cAAc,QAAQ,OAAO,OAAO,SAAS,GAAG,GAAG,aAAa,IAAqB,CAAC,GAC/D;AACzB,QAAM,wBAAwB,yBAAyB,WAAW;AAClE,QAAM,oBAAoB,qBAAqB,WAAW;AAC1D,QAAM,uBAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,aAAS,eAAe;AAEtB,SAAG,MAAM;AACT,WAAK;AAAA,IAEP;AAEA,aAAS,OAAO;AACd,kBAAY,oBAAoB,SAAS,YAAY;AACrD,kBAAY,oBAAoB,aAAa,YAAY;AAGzD,cAAQ,yBAAyB,WAAW,CAAC;AAAA,IAC/C;AAGA,UAAM,KAAK;AAAA,MACT,CAAC,aAAa;AACZ,oBAAY,SAAS;AAAA,UACnB,MAAM,KAAK,sBAAsB,MAAM,qBAAqB,MAAM,QAAQ;AAAA,UAC1E,KAAK,KAAK,sBAAsB,KAAK,qBAAqB,KAAK,QAAQ;AAAA,UACvE,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,GAAG;AAAA,QACH,SAAS,UAAU;AACjB,cAAI,WAAW,aAAa,QAAQ,GAAG;AACrC,yBAAa,SAAS,QAAQ;AAAA,UAChC;AAEA,eAAK;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,gBAAY,iBAAiB,SAAS,cAAc,EAAE,SAAS,KAAK,CAAC;AACrE,gBAAY,iBAAiB,aAAa,cAAc,EAAE,SAAS,KAAK,CAAC;AACzE,OAAG,MAAM;AAAA,EACX,CAAC;AACH;AAEA,SAAS,OAAO;AAAA,EACd,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM;AACR;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider } from './types.js';
2
+ export declare function createLocalStorageProvider(): StorageProvider;
@@ -0,0 +1,32 @@
1
+ import { getGlobalStorage } from "./getGlobalStorage.js";
2
+ import { getStorageKeys } from "./getStorageKeys.js";
3
+ function createLocalStorageProvider() {
4
+ return {
5
+ syncEvent: "storage",
6
+ get storageArea() {
7
+ return getGlobalStorage("localStorage");
8
+ },
9
+ get(key) {
10
+ return getGlobalStorage("localStorage")?.getItem(key) ?? null;
11
+ },
12
+ set(key, value) {
13
+ getGlobalStorage("localStorage")?.setItem(key, value);
14
+ },
15
+ remove(key) {
16
+ getGlobalStorage("localStorage")?.removeItem(key);
17
+ },
18
+ has(key) {
19
+ return getGlobalStorage("localStorage")?.getItem(key) !== null;
20
+ },
21
+ keys() {
22
+ return getStorageKeys(getGlobalStorage("localStorage"));
23
+ },
24
+ clear() {
25
+ getGlobalStorage("localStorage")?.clear();
26
+ }
27
+ };
28
+ }
29
+ export {
30
+ createLocalStorageProvider
31
+ };
32
+ //# sourceMappingURL=createLocalStorageProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createLocalStorageProvider.ts"],
4
+ "sourcesContent": ["import type { StorageProvider } from './types.js';\nimport { getGlobalStorage } from './getGlobalStorage.js';\nimport { getStorageKeys } from './getStorageKeys.js';\n\nexport function createLocalStorageProvider(): StorageProvider {\n return {\n syncEvent: 'storage',\n get storageArea() {\n return getGlobalStorage('localStorage');\n },\n get(key) {\n return getGlobalStorage('localStorage')?.getItem(key) ?? null;\n },\n set(key, value) {\n getGlobalStorage('localStorage')?.setItem(key, value);\n },\n remove(key) {\n getGlobalStorage('localStorage')?.removeItem(key);\n },\n has(key) {\n return getGlobalStorage('localStorage')?.getItem(key) !== null;\n },\n keys() {\n return getStorageKeys(getGlobalStorage('localStorage'));\n },\n clear() {\n getGlobalStorage('localStorage')?.clear();\n },\n };\n}\n"],
5
+ "mappings": "AACA,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAExB,SAAS,6BAA8C;AAC5D,SAAO;AAAA,IACL,WAAW;AAAA,IACX,IAAI,cAAc;AAChB,aAAO,iBAAiB,cAAc;AAAA,IACxC;AAAA,IACA,IAAI,KAAK;AACP,aAAO,iBAAiB,cAAc,GAAG,QAAQ,GAAG,KAAK;AAAA,IAC3D;AAAA,IACA,IAAI,KAAK,OAAO;AACd,uBAAiB,cAAc,GAAG,QAAQ,KAAK,KAAK;AAAA,IACtD;AAAA,IACA,OAAO,KAAK;AACV,uBAAiB,cAAc,GAAG,WAAW,GAAG;AAAA,IAClD;AAAA,IACA,IAAI,KAAK;AACP,aAAO,iBAAiB,cAAc,GAAG,QAAQ,GAAG,MAAM;AAAA,IAC5D;AAAA,IACA,OAAO;AACL,aAAO,eAAe,iBAAiB,cAAc,CAAC;AAAA,IACxD;AAAA,IACA,QAAQ;AACN,uBAAiB,cAAc,GAAG,MAAM;AAAA,IAC1C;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider } from './types.js';
2
+ export declare function createMemoryStorageProvider(): StorageProvider;
@@ -0,0 +1,27 @@
1
+ function createMemoryStorageProvider() {
2
+ const map = /* @__PURE__ */ new Map();
3
+ return {
4
+ get(key) {
5
+ return map.get(key) ?? null;
6
+ },
7
+ set(key, value) {
8
+ map.set(key, value);
9
+ },
10
+ remove(key) {
11
+ map.delete(key);
12
+ },
13
+ has(key) {
14
+ return map.has(key);
15
+ },
16
+ keys() {
17
+ return [...map.keys()];
18
+ },
19
+ clear() {
20
+ map.clear();
21
+ }
22
+ };
23
+ }
24
+ export {
25
+ createMemoryStorageProvider
26
+ };
27
+ //# sourceMappingURL=createMemoryStorageProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createMemoryStorageProvider.ts"],
4
+ "sourcesContent": ["import type { StorageProvider } from './types.js';\n\nexport function createMemoryStorageProvider(): StorageProvider {\n const map = new Map<string, string>();\n\n return {\n get(key) {\n return map.get(key) ?? null;\n },\n set(key, value) {\n map.set(key, value);\n },\n remove(key) {\n map.delete(key);\n },\n has(key) {\n return map.has(key);\n },\n keys() {\n return [...map.keys()];\n },\n clear() {\n map.clear();\n },\n };\n}\n"],
5
+ "mappings": "AAEO,SAAS,8BAA+C;AAC7D,QAAM,MAAM,oBAAI,IAAoB;AAEpC,SAAO;AAAA,IACL,IAAI,KAAK;AACP,aAAO,IAAI,IAAI,GAAG,KAAK;AAAA,IACzB;AAAA,IACA,IAAI,KAAK,OAAO;AACd,UAAI,IAAI,KAAK,KAAK;AAAA,IACpB;AAAA,IACA,OAAO,KAAK;AACV,UAAI,OAAO,GAAG;AAAA,IAChB;AAAA,IACA,IAAI,KAAK;AACP,aAAO,IAAI,IAAI,GAAG;AAAA,IACpB;AAAA,IACA,OAAO;AACL,aAAO,CAAC,GAAG,IAAI,KAAK,CAAC;AAAA,IACvB;AAAA,IACA,QAAQ;AACN,UAAI,MAAM;AAAA,IACZ;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider } from './types.js';
2
+ export declare function createNoopProvider(): StorageProvider;
@@ -0,0 +1,23 @@
1
+ function createNoopProvider() {
2
+ return {
3
+ get() {
4
+ return null;
5
+ },
6
+ set() {
7
+ },
8
+ remove() {
9
+ },
10
+ has() {
11
+ return false;
12
+ },
13
+ keys() {
14
+ return [];
15
+ },
16
+ clear() {
17
+ }
18
+ };
19
+ }
20
+ export {
21
+ createNoopProvider
22
+ };
23
+ //# sourceMappingURL=createNoopProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createNoopProvider.ts"],
4
+ "sourcesContent": ["import type { StorageProvider } from './types.js';\n\nexport function createNoopProvider(): StorageProvider {\n return {\n get() {\n return null;\n },\n set() {},\n remove() {},\n has() {\n return false;\n },\n keys() {\n return [];\n },\n clear() {},\n };\n}\n"],
5
+ "mappings": "AAEO,SAAS,qBAAsC;AACpD,SAAO;AAAA,IACL,MAAM;AACJ,aAAO;AAAA,IACT;AAAA,IACA,MAAM;AAAA,IAAC;AAAA,IACP,SAAS;AAAA,IAAC;AAAA,IACV,MAAM;AACJ,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,aAAO,CAAC;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageProvider } from './types.js';
2
+ export declare function createSessionStorageProvider(): StorageProvider;
@@ -0,0 +1,31 @@
1
+ import { getGlobalStorage } from "./getGlobalStorage.js";
2
+ import { getStorageKeys } from "./getStorageKeys.js";
3
+ function createSessionStorageProvider() {
4
+ return {
5
+ get storageArea() {
6
+ return getGlobalStorage("sessionStorage");
7
+ },
8
+ get(key) {
9
+ return getGlobalStorage("sessionStorage")?.getItem(key) ?? null;
10
+ },
11
+ set(key, value) {
12
+ getGlobalStorage("sessionStorage")?.setItem(key, value);
13
+ },
14
+ remove(key) {
15
+ getGlobalStorage("sessionStorage")?.removeItem(key);
16
+ },
17
+ has(key) {
18
+ return getGlobalStorage("sessionStorage")?.getItem(key) !== null;
19
+ },
20
+ keys() {
21
+ return getStorageKeys(getGlobalStorage("sessionStorage"));
22
+ },
23
+ clear() {
24
+ getGlobalStorage("sessionStorage")?.clear();
25
+ }
26
+ };
27
+ }
28
+ export {
29
+ createSessionStorageProvider
30
+ };
31
+ //# sourceMappingURL=createSessionStorageProvider.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/js-toolkit/utils/storage/createSessionStorageProvider.ts"],
4
+ "sourcesContent": ["import type { StorageProvider } from './types.js';\nimport { getGlobalStorage } from './getGlobalStorage.js';\nimport { getStorageKeys } from './getStorageKeys.js';\n\nexport function createSessionStorageProvider(): StorageProvider {\n return {\n get storageArea() {\n return getGlobalStorage('sessionStorage');\n },\n get(key) {\n return getGlobalStorage('sessionStorage')?.getItem(key) ?? null;\n },\n set(key, value) {\n getGlobalStorage('sessionStorage')?.setItem(key, value);\n },\n remove(key) {\n getGlobalStorage('sessionStorage')?.removeItem(key);\n },\n has(key) {\n return getGlobalStorage('sessionStorage')?.getItem(key) !== null;\n },\n keys() {\n return getStorageKeys(getGlobalStorage('sessionStorage'));\n },\n clear() {\n getGlobalStorage('sessionStorage')?.clear();\n },\n };\n}\n"],
5
+ "mappings": "AACA,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAExB,SAAS,+BAAgD;AAC9D,SAAO;AAAA,IACL,IAAI,cAAc;AAChB,aAAO,iBAAiB,gBAAgB;AAAA,IAC1C;AAAA,IACA,IAAI,KAAK;AACP,aAAO,iBAAiB,gBAAgB,GAAG,QAAQ,GAAG,KAAK;AAAA,IAC7D;AAAA,IACA,IAAI,KAAK,OAAO;AACd,uBAAiB,gBAAgB,GAAG,QAAQ,KAAK,KAAK;AAAA,IACxD;AAAA,IACA,OAAO,KAAK;AACV,uBAAiB,gBAAgB,GAAG,WAAW,GAAG;AAAA,IACpD;AAAA,IACA,IAAI,KAAK;AACP,aAAO,iBAAiB,gBAAgB,GAAG,QAAQ,GAAG,MAAM;AAAA,IAC9D;AAAA,IACA,OAAO;AACL,aAAO,eAAe,iBAAiB,gBAAgB,CAAC;AAAA,IAC1D;AAAA,IACA,QAAQ;AACN,uBAAiB,gBAAgB,GAAG,MAAM;AAAA,IAC5C;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { StorageInstance, StorageOptions } from './types.js';
2
+ export declare function createStorage<T extends Record<string, any> = Record<string, any>>(options?: StorageOptions): StorageInstance<T>;