@splendidlabz/utils 1.5.1 → 1.7.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 (472) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/dom/accessibility.cjs +53 -0
  3. package/dist/cjs/dom/actions/index.cjs +407 -0
  4. package/dist/cjs/dom/actions/masonry.cjs +149 -0
  5. package/dist/cjs/dom/actions/prefer-horizontal-scroll.cjs +157 -0
  6. package/dist/cjs/dom/actions/sticky.cjs +211 -0
  7. package/dist/cjs/dom/bounding-box.cjs +70 -0
  8. package/dist/cjs/dom/clipboard.cjs +37 -0
  9. package/dist/cjs/dom/cookie.cjs +57 -0
  10. package/dist/cjs/dom/css-vars.cjs +57 -0
  11. package/dist/cjs/dom/events.cjs +95 -0
  12. package/dist/cjs/dom/focusable.cjs +143 -0
  13. package/dist/cjs/dom/font-size.cjs +74 -0
  14. package/dist/cjs/dom/get-element.cjs +98 -0
  15. package/dist/cjs/dom/hash.cjs +35 -0
  16. package/dist/cjs/dom/index.cjs +1197 -0
  17. package/dist/cjs/dom/keyboard.cjs +51 -0
  18. package/dist/cjs/dom/local-store.cjs +79 -0
  19. package/dist/cjs/dom/media.cjs +59 -0
  20. package/dist/cjs/dom/observers/index.cjs +156 -0
  21. package/dist/cjs/dom/observers/intersection-observer.cjs +91 -0
  22. package/dist/cjs/dom/observers/mutation-observer.cjs +95 -0
  23. package/dist/cjs/dom/observers/observer.cjs +48 -0
  24. package/dist/cjs/dom/observers/resize-observer.cjs +82 -0
  25. package/dist/cjs/dom/pkce.cjs +53 -0
  26. package/dist/cjs/dom/query-params.cjs +38 -0
  27. package/dist/cjs/dom/random-string.cjs +38 -0
  28. package/dist/cjs/dom/sanitize.cjs +65 -0
  29. package/dist/cjs/dom/session-store.cjs +49 -0
  30. package/dist/cjs/dom/spam-prevention.cjs +50 -0
  31. package/dist/cjs/dom/trap-focus.cjs +197 -0
  32. package/dist/cjs/dom/ui/aria-current.cjs +43 -0
  33. package/dist/cjs/dom/ui/inconsistent-button-fix.cjs +35 -0
  34. package/dist/cjs/dom/ui/index.cjs +105 -0
  35. package/dist/cjs/dom/ui/scroll-container.cjs +47 -0
  36. package/dist/cjs/dom/ui/traverse-and-scramble.cjs +50 -0
  37. package/dist/cjs/lib/arrays/index.cjs +139 -0
  38. package/dist/cjs/lib/arrays/item-position.cjs +42 -0
  39. package/dist/cjs/lib/arrays/join.cjs +43 -0
  40. package/dist/cjs/lib/arrays/shuffle.cjs +42 -0
  41. package/dist/cjs/lib/arrays/sort.cjs +67 -0
  42. package/dist/cjs/lib/arrays/split-array.cjs +41 -0
  43. package/dist/cjs/lib/arrays/unique.cjs +31 -0
  44. package/dist/cjs/lib/auth/index.cjs +53 -0
  45. package/dist/cjs/lib/auth/route-manager.cjs +51 -0
  46. package/dist/cjs/lib/checks.cjs +58 -0
  47. package/dist/cjs/lib/date/days.cjs +37 -0
  48. package/dist/cjs/lib/date/index.cjs +206 -0
  49. package/dist/cjs/lib/date/months.cjs +102 -0
  50. package/dist/cjs/lib/date/time.cjs +115 -0
  51. package/dist/cjs/lib/form/form-data.cjs +83 -0
  52. package/dist/cjs/lib/form/index.cjs +122 -0
  53. package/dist/cjs/lib/form/sanitize.cjs +61 -0
  54. package/dist/cjs/lib/functions/debounce.cjs +43 -0
  55. package/dist/cjs/lib/functions/env.cjs +32 -0
  56. package/dist/cjs/lib/functions/functional.cjs +62 -0
  57. package/dist/cjs/lib/functions/index.cjs +122 -0
  58. package/dist/cjs/lib/functions/throttle.cjs +38 -0
  59. package/dist/cjs/lib/functions/timeout.cjs +41 -0
  60. package/dist/cjs/lib/hash.cjs +43 -0
  61. package/dist/cjs/lib/index.cjs +1141 -0
  62. package/dist/cjs/lib/numbers/index.cjs +49 -0
  63. package/dist/cjs/lib/numbers/math.cjs +36 -0
  64. package/dist/cjs/lib/objects/camelcase-keys.cjs +80 -0
  65. package/dist/cjs/lib/objects/empty.cjs +39 -0
  66. package/dist/cjs/lib/objects/equal.cjs +47 -0
  67. package/dist/cjs/lib/objects/extend.cjs +146 -0
  68. package/dist/cjs/lib/objects/flatten.cjs +48 -0
  69. package/dist/cjs/lib/objects/index.cjs +375 -0
  70. package/dist/cjs/lib/objects/json.cjs +35 -0
  71. package/dist/cjs/lib/objects/loop.cjs +40 -0
  72. package/dist/cjs/lib/objects/mix/mix.cjs +112 -0
  73. package/dist/cjs/lib/objects/nested-property.cjs +45 -0
  74. package/dist/cjs/lib/objects/normalize-object.cjs +106 -0
  75. package/dist/cjs/lib/objects/omit-empty.cjs +40 -0
  76. package/dist/cjs/lib/objects/size.cjs +63 -0
  77. package/dist/cjs/lib/objects/split.cjs +39 -0
  78. package/dist/cjs/lib/promises/index.cjs +69 -0
  79. package/dist/cjs/lib/promises/reject.cjs +67 -0
  80. package/dist/cjs/lib/sse.cjs +99 -0
  81. package/dist/cjs/lib/strings/convert-case/convert-case.cjs +96 -0
  82. package/dist/cjs/lib/strings/index.cjs +190 -0
  83. package/dist/cjs/lib/strings/markdown.cjs +59 -0
  84. package/dist/cjs/lib/strings/name.cjs +46 -0
  85. package/dist/cjs/lib/strings/pluralize.cjs +40 -0
  86. package/dist/cjs/lib/strings/query-string.cjs +43 -0
  87. package/dist/cjs/lib/style/index.cjs +64 -0
  88. package/dist/cjs/lib/symbols/index.cjs +40 -0
  89. package/dist/cjs/lib/symbols/symbols.cjs +38 -0
  90. package/dist/cjs/node/common.cjs +42 -0
  91. package/dist/cjs/node/dirname.cjs +49 -0
  92. package/dist/cjs/node/file-cache.cjs +196 -0
  93. package/dist/cjs/node/file.cjs +50 -0
  94. package/dist/cjs/node/hash.cjs +42 -0
  95. package/dist/cjs/node/index.cjs +290 -0
  96. package/dist/cjs/node/pkce.cjs +62 -0
  97. package/dist/cjs/node/random-string.cjs +43 -0
  98. package/dist/cjs/node/sanitize.cjs +65 -0
  99. package/dist/esm/dom/accessibility.js +27 -0
  100. package/dist/esm/dom/actions/index.js +379 -0
  101. package/dist/esm/dom/actions/masonry.js +123 -0
  102. package/dist/esm/dom/actions/prefer-horizontal-scroll.js +131 -0
  103. package/dist/esm/dom/actions/sticky.js +185 -0
  104. package/dist/esm/dom/bounding-box.js +45 -0
  105. package/dist/esm/dom/clipboard.js +13 -0
  106. package/dist/esm/dom/cookie.js +32 -0
  107. package/dist/esm/dom/css-vars.js +28 -0
  108. package/dist/esm/dom/events.js +67 -0
  109. package/dist/esm/dom/focusable.js +118 -0
  110. package/dist/esm/dom/font-size.js +44 -0
  111. package/dist/esm/dom/get-element.js +67 -0
  112. package/dist/esm/dom/hash.js +11 -0
  113. package/dist/esm/dom/index.js +1100 -0
  114. package/dist/esm/dom/keyboard.js +23 -0
  115. package/dist/esm/dom/local-store.js +55 -0
  116. package/dist/esm/dom/media.js +33 -0
  117. package/dist/esm/dom/observers/index.js +128 -0
  118. package/dist/esm/dom/observers/intersection-observer.js +65 -0
  119. package/dist/esm/dom/observers/mutation-observer.js +69 -0
  120. package/dist/esm/dom/observers/observer.js +22 -0
  121. package/dist/esm/dom/observers/resize-observer.js +56 -0
  122. package/dist/esm/dom/pkce.js +27 -0
  123. package/dist/esm/dom/query-params.js +14 -0
  124. package/dist/esm/dom/random-string.js +13 -0
  125. package/dist/esm/dom/sanitize.js +31 -0
  126. package/dist/esm/dom/session-store.js +25 -0
  127. package/dist/esm/dom/spam-prevention.js +26 -0
  128. package/dist/esm/dom/trap-focus.js +170 -0
  129. package/dist/esm/dom/ui/aria-current.js +18 -0
  130. package/dist/esm/dom/ui/inconsistent-button-fix.js +11 -0
  131. package/dist/esm/dom/ui/index.js +75 -0
  132. package/dist/esm/dom/ui/scroll-container.js +23 -0
  133. package/dist/esm/dom/ui/traverse-and-scramble.js +26 -0
  134. package/dist/esm/lib/arrays/index.js +106 -0
  135. package/dist/esm/lib/arrays/item-position.js +16 -0
  136. package/dist/esm/lib/arrays/join.js +17 -0
  137. package/dist/esm/lib/arrays/shuffle.js +18 -0
  138. package/dist/esm/lib/arrays/sort.js +41 -0
  139. package/dist/esm/lib/arrays/split-array.js +17 -0
  140. package/dist/esm/lib/arrays/unique.js +7 -0
  141. package/dist/esm/lib/auth/index.js +26 -0
  142. package/dist/esm/lib/auth/route-manager.js +26 -0
  143. package/dist/esm/lib/checks.js +31 -0
  144. package/dist/esm/lib/date/days.js +13 -0
  145. package/dist/esm/lib/date/index.js +171 -0
  146. package/dist/esm/lib/date/months.js +78 -0
  147. package/dist/esm/lib/date/time.js +82 -0
  148. package/dist/esm/lib/form/form-data.js +58 -0
  149. package/dist/esm/lib/form/index.js +92 -0
  150. package/dist/esm/lib/form/sanitize.js +35 -0
  151. package/dist/esm/lib/functions/debounce.js +19 -0
  152. package/dist/esm/lib/functions/env.js +8 -0
  153. package/dist/esm/lib/functions/functional.js +35 -0
  154. package/dist/esm/lib/functions/index.js +87 -0
  155. package/dist/esm/lib/functions/throttle.js +14 -0
  156. package/dist/esm/lib/functions/timeout.js +15 -0
  157. package/dist/esm/lib/hash.js +19 -0
  158. package/dist/esm/lib/index.js +1023 -0
  159. package/dist/esm/lib/numbers/index.js +21 -0
  160. package/dist/esm/lib/numbers/math.js +11 -0
  161. package/dist/esm/lib/objects/camelcase-keys.js +54 -0
  162. package/dist/esm/lib/objects/empty.js +14 -0
  163. package/dist/esm/lib/objects/equal.js +12 -0
  164. package/dist/esm/lib/objects/extend.js +120 -0
  165. package/dist/esm/lib/objects/flatten.js +22 -0
  166. package/dist/esm/lib/objects/index.js +321 -0
  167. package/dist/esm/lib/objects/json.js +11 -0
  168. package/dist/esm/lib/objects/loop.js +15 -0
  169. package/dist/esm/lib/objects/mix/mix.js +87 -0
  170. package/dist/esm/lib/objects/nested-property.js +19 -0
  171. package/dist/esm/lib/objects/normalize-object.js +80 -0
  172. package/dist/esm/lib/objects/omit-empty.js +16 -0
  173. package/dist/esm/lib/objects/size.js +39 -0
  174. package/dist/esm/lib/objects/split.js +15 -0
  175. package/dist/esm/lib/promises/index.js +33 -0
  176. package/dist/esm/lib/promises/reject.js +33 -0
  177. package/dist/esm/lib/sse.js +72 -0
  178. package/dist/esm/lib/strings/convert-case/convert-case.js +65 -0
  179. package/dist/esm/lib/strings/index.js +140 -0
  180. package/dist/esm/lib/strings/markdown.js +34 -0
  181. package/dist/esm/lib/strings/name.js +22 -0
  182. package/dist/esm/lib/strings/pluralize.js +6 -0
  183. package/dist/esm/lib/strings/query-string.js +17 -0
  184. package/dist/esm/lib/style/index.js +38 -0
  185. package/dist/esm/lib/symbols/index.js +13 -0
  186. package/dist/esm/lib/symbols/symbols.js +13 -0
  187. package/dist/esm/node/common.js +8 -0
  188. package/dist/esm/node/dirname.js +14 -0
  189. package/dist/esm/node/file-cache.js +158 -0
  190. package/dist/esm/node/file.js +15 -0
  191. package/dist/esm/node/hash.js +8 -0
  192. package/dist/esm/node/index.js +243 -0
  193. package/dist/esm/node/pkce.js +28 -0
  194. package/dist/esm/node/random-string.js +9 -0
  195. package/dist/esm/node/sanitize.js +31 -0
  196. package/dist/{dom/accessibility.d.ts → types/dom/accessibility.d.cts} +5 -3
  197. package/dist/types/dom/actions/index.d.cts +3 -0
  198. package/dist/types/dom/actions/masonry.d.cts +5 -0
  199. package/dist/types/dom/actions/prefer-horizontal-scroll.d.cts +5 -0
  200. package/dist/types/dom/actions/sticky.d.cts +5 -0
  201. package/dist/{dom/bounding-box.d.ts → types/dom/bounding-box.d.cts} +4 -2
  202. package/dist/{dom/clipboard.d.ts → types/dom/clipboard.d.cts} +3 -1
  203. package/dist/types/dom/cookie.d.cts +7 -0
  204. package/dist/types/dom/css-vars.d.cts +6 -0
  205. package/dist/types/dom/events.d.cts +20 -0
  206. package/dist/{dom/focusable.d.ts → types/dom/focusable.d.cts} +5 -3
  207. package/dist/types/dom/font-size.d.cts +7 -0
  208. package/dist/{dom/get-element.d.ts → types/dom/get-element.d.cts} +10 -8
  209. package/dist/types/dom/hash.d.cts +3 -0
  210. package/dist/types/dom/index.d.cts +30 -0
  211. package/dist/{dom/keyboard.d.ts → types/dom/keyboard.d.cts} +7 -5
  212. package/dist/{dom/local-store.d.ts → types/dom/local-store.d.cts} +3 -1
  213. package/dist/types/dom/media.d.cts +5 -0
  214. package/dist/types/dom/observers/index.d.cts +3 -0
  215. package/dist/{dom/observers/intersection-observer.d.ts → types/dom/observers/intersection-observer.d.cts} +3 -1
  216. package/dist/{dom/observers/mutation-observer.d.ts → types/dom/observers/mutation-observer.d.cts} +3 -1
  217. package/dist/types/dom/observers/observer.d.cts +3 -0
  218. package/dist/{dom/observers/resize-observer.d.ts → types/dom/observers/resize-observer.d.cts} +3 -1
  219. package/dist/{node/pkce.d.ts → types/dom/pkce.d.cts} +3 -1
  220. package/dist/{dom/query-params.d.ts → types/dom/query-params.d.cts} +3 -1
  221. package/dist/{dom/random-string.d.ts → types/dom/random-string.d.cts} +4 -2
  222. package/dist/{dom/sanitize.d.ts → types/dom/sanitize.d.cts} +3 -1
  223. package/dist/{dom/session-store.d.ts → types/dom/session-store.d.cts} +3 -1
  224. package/dist/types/dom/spam-prevention.d.cts +14 -0
  225. package/dist/{dom/trap-focus.d.ts → types/dom/trap-focus.d.cts} +8 -4
  226. package/dist/types/dom/ui/aria-current.d.cts +7 -0
  227. package/dist/{dom/ui/inconsistent-button-fix.d.ts → types/dom/ui/inconsistent-button-fix.d.cts} +3 -1
  228. package/dist/types/dom/ui/index.d.cts +4 -0
  229. package/dist/types/dom/ui/scroll-container.d.cts +3 -0
  230. package/dist/{dom/ui/traverse-and-scramble.d.ts → types/dom/ui/traverse-and-scramble.d.cts} +3 -1
  231. package/dist/types/lib/arrays/index.d.cts +6 -0
  232. package/dist/{lib/arrays/item-position.d.ts → types/lib/arrays/item-position.d.cts} +5 -3
  233. package/dist/{lib/arrays/join.d.ts → types/lib/arrays/join.d.cts} +3 -1
  234. package/dist/types/lib/arrays/shuffle.d.cts +3 -0
  235. package/dist/{lib/arrays/sort.d.ts → types/lib/arrays/sort.d.cts} +3 -1
  236. package/dist/types/lib/arrays/split-array.d.cts +6 -0
  237. package/dist/types/lib/arrays/unique.d.cts +3 -0
  238. package/dist/types/lib/auth/index.d.cts +1 -0
  239. package/dist/{lib/auth/route-manager.d.ts → types/lib/auth/route-manager.d.cts} +5 -2
  240. package/{lib/checks.js → dist/types/lib/checks.d.cts} +6 -11
  241. package/dist/{lib/date/days.d.ts → types/lib/date/days.d.cts} +3 -1
  242. package/dist/types/lib/date/index.d.cts +3 -0
  243. package/dist/{lib/date/months.d.ts → types/lib/date/months.d.cts} +3 -1
  244. package/dist/types/lib/date/time.d.cts +21 -0
  245. package/dist/types/lib/form/form-data.d.cts +9 -0
  246. package/dist/types/lib/form/index.d.cts +2 -0
  247. package/dist/{lib/form/sanitize.d.ts → types/lib/form/sanitize.d.cts} +6 -4
  248. package/dist/types/lib/functions/debounce.d.cts +3 -0
  249. package/dist/types/lib/functions/env.d.cts +3 -0
  250. package/dist/types/lib/functions/functional.d.cts +6 -0
  251. package/dist/types/lib/functions/index.d.cts +5 -0
  252. package/dist/types/lib/functions/throttle.d.cts +3 -0
  253. package/dist/types/lib/functions/timeout.d.cts +5 -0
  254. package/dist/types/lib/hash.d.cts +3 -0
  255. package/dist/types/lib/index.d.cts +43 -0
  256. package/dist/types/lib/numbers/index.d.cts +5 -0
  257. package/dist/types/lib/numbers/math.d.cts +4 -0
  258. package/dist/types/lib/objects/camelcase-keys.d.cts +3 -0
  259. package/dist/types/lib/objects/empty.d.cts +4 -0
  260. package/dist/types/lib/objects/equal.d.cts +4 -0
  261. package/dist/types/lib/objects/extend.d.cts +6 -0
  262. package/dist/types/lib/objects/flatten.d.cts +6 -0
  263. package/dist/types/lib/objects/index.d.cts +13 -0
  264. package/dist/types/lib/objects/json.d.cts +3 -0
  265. package/dist/types/lib/objects/loop.d.cts +4 -0
  266. package/dist/types/lib/objects/mix/mix.d.cts +4 -0
  267. package/dist/{lib/objects/nested-property.d.ts → types/lib/objects/nested-property.d.cts} +5 -3
  268. package/dist/types/lib/objects/normalize-object.d.cts +3 -0
  269. package/dist/types/lib/objects/omit-empty.d.cts +3 -0
  270. package/dist/types/lib/objects/size.d.cts +3 -0
  271. package/dist/{lib/objects/split.d.ts → types/lib/objects/split.d.cts} +5 -1
  272. package/dist/types/lib/promises/index.d.cts +1 -0
  273. package/dist/types/lib/promises/reject.d.cts +5 -0
  274. package/dist/{lib/sse.d.ts → types/lib/sse.d.cts} +4 -2
  275. package/dist/types/lib/strings/convert-case/convert-case.d.cts +10 -0
  276. package/dist/types/lib/strings/index.d.cts +5 -0
  277. package/dist/{lib/strings/markdown.d.ts → types/lib/strings/markdown.d.cts} +4 -2
  278. package/dist/types/lib/strings/name.d.cts +7 -0
  279. package/dist/types/lib/strings/pluralize.d.cts +3 -0
  280. package/dist/types/lib/strings/query-string.d.cts +10 -0
  281. package/dist/types/lib/style/index.d.cts +3 -0
  282. package/dist/types/lib/symbols/index.d.cts +1 -0
  283. package/dist/types/lib/symbols/symbols.d.cts +4 -0
  284. package/dist/types/node/common.d.cts +3 -0
  285. package/dist/types/node/dirname.d.cts +9 -0
  286. package/dist/{node/file-cache.d.ts → types/node/file-cache.d.cts} +7 -5
  287. package/dist/types/node/file.d.cts +4 -0
  288. package/dist/types/node/hash.d.cts +3 -0
  289. package/dist/types/node/index.d.cts +7 -0
  290. package/dist/{dom/pkce.d.ts → types/node/pkce.d.cts} +3 -1
  291. package/dist/types/node/random-string.d.cts +3 -0
  292. package/dist/{node/sanitize.d.ts → types/node/sanitize.d.cts} +3 -1
  293. package/package.json +29 -16
  294. package/{dom → src/dom}/cookie.js +8 -7
  295. package/{dom → src/dom}/index.js +1 -0
  296. package/{dom → src/dom}/random-string.js +1 -1
  297. package/src/dom/random-string.test.js +13 -0
  298. package/src/dom/spam-prevention.js +39 -0
  299. package/{dom → src/dom}/ui/aria-current.js +1 -1
  300. package/{lib → src/lib}/arrays/index.js +1 -0
  301. package/{lib → src/lib}/arrays/sort.js +6 -6
  302. package/src/lib/arrays/split-array.js +15 -0
  303. package/{lib → src/lib}/auth/route-manager.js +1 -0
  304. package/src/lib/checks.js +53 -0
  305. package/{lib → src/lib}/date/time.js +36 -5
  306. package/src/lib/hash.js +18 -0
  307. package/src/lib/hash.spec.js +163 -0
  308. package/{lib → src/lib}/index.js +1 -0
  309. package/{lib → src/lib}/objects/mix/mix.js +30 -11
  310. package/{lib → src/lib}/objects/mix/mix.test.js +57 -1
  311. package/{lib → src/lib}/objects/split.js +1 -1
  312. package/{lib → src/lib}/strings/index.js +1 -0
  313. package/src/lib/strings/name.js +24 -0
  314. package/src/lib/strings/name.test.js +67 -0
  315. package/src/lib/strings/pluralize.js +2 -0
  316. package/{lib → src/lib}/style/index.js +2 -0
  317. package/src/node/random-string.js +10 -0
  318. package/src/node/random-string.test.js +15 -0
  319. package/tsconfig.json +6 -6
  320. package/tsup.config.js +38 -0
  321. package/tsup.config.mjs +43 -0
  322. package/dist/dom/actions/index.d.ts +0 -3
  323. package/dist/dom/actions/masonry.d.ts +0 -3
  324. package/dist/dom/actions/prefer-horizontal-scroll.d.ts +0 -3
  325. package/dist/dom/actions/sticky.d.ts +0 -3
  326. package/dist/dom/cookie.d.ts +0 -11
  327. package/dist/dom/css-vars.d.ts +0 -4
  328. package/dist/dom/events.d.ts +0 -18
  329. package/dist/dom/font-size.d.ts +0 -5
  330. package/dist/dom/hash.d.ts +0 -1
  331. package/dist/dom/index.d.ts +0 -22
  332. package/dist/dom/media.d.ts +0 -3
  333. package/dist/dom/observers/index.d.ts +0 -3
  334. package/dist/dom/observers/observer.d.ts +0 -1
  335. package/dist/dom/ui/aria-current.d.ts +0 -5
  336. package/dist/dom/ui/index.d.ts +0 -4
  337. package/dist/dom/ui/scroll-container.d.ts +0 -1
  338. package/dist/lib/arrays/index.d.ts +0 -5
  339. package/dist/lib/arrays/shuffle.d.ts +0 -1
  340. package/dist/lib/arrays/unique.d.ts +0 -1
  341. package/dist/lib/auth/index.d.ts +0 -1
  342. package/dist/lib/checks.d.ts +0 -29
  343. package/dist/lib/date/index.d.ts +0 -3
  344. package/dist/lib/date/time.d.ts +0 -8
  345. package/dist/lib/form/form-data.d.ts +0 -7
  346. package/dist/lib/form/index.d.ts +0 -2
  347. package/dist/lib/functions/debounce.d.ts +0 -1
  348. package/dist/lib/functions/env.d.ts +0 -1
  349. package/dist/lib/functions/functional.d.ts +0 -4
  350. package/dist/lib/functions/index.d.ts +0 -5
  351. package/dist/lib/functions/throttle.d.ts +0 -1
  352. package/dist/lib/functions/timeout.d.ts +0 -3
  353. package/dist/lib/index.d.ts +0 -13
  354. package/dist/lib/numbers/index.d.ts +0 -2
  355. package/dist/lib/numbers/math.d.ts +0 -2
  356. package/dist/lib/objects/camelcase-keys.d.ts +0 -1
  357. package/dist/lib/objects/empty.d.ts +0 -2
  358. package/dist/lib/objects/equal.d.ts +0 -2
  359. package/dist/lib/objects/extend.d.ts +0 -4
  360. package/dist/lib/objects/flatten.d.ts +0 -4
  361. package/dist/lib/objects/index.d.ts +0 -13
  362. package/dist/lib/objects/json.d.ts +0 -1
  363. package/dist/lib/objects/loop.d.ts +0 -2
  364. package/dist/lib/objects/mix/mix.d.ts +0 -1
  365. package/dist/lib/objects/normalize-object.d.ts +0 -1
  366. package/dist/lib/objects/omit-empty.d.ts +0 -1
  367. package/dist/lib/objects/size.d.ts +0 -1
  368. package/dist/lib/promises/index.d.ts +0 -1
  369. package/dist/lib/promises/reject.d.ts +0 -3
  370. package/dist/lib/strings/convert-case/convert-case.d.ts +0 -8
  371. package/dist/lib/strings/index.d.ts +0 -4
  372. package/dist/lib/strings/pluralize.d.ts +0 -1
  373. package/dist/lib/strings/query-string.d.ts +0 -8
  374. package/dist/lib/style/index.d.ts +0 -1
  375. package/dist/lib/symbols/index.d.ts +0 -1
  376. package/dist/lib/symbols/symbols.d.ts +0 -2
  377. package/dist/node/common.d.ts +0 -1
  378. package/dist/node/dirname.d.ts +0 -7
  379. package/dist/node/file.d.ts +0 -2
  380. package/dist/node/hash.d.ts +0 -1
  381. package/dist/node/index.d.ts +0 -7
  382. package/dist/node/random-string.d.ts +0 -2
  383. package/lib/strings/pluralize.js +0 -2
  384. package/node/random-string.js +0 -10
  385. /package/{dom → src/dom}/accessibility.js +0 -0
  386. /package/{dom → src/dom}/actions/index.js +0 -0
  387. /package/{dom → src/dom}/actions/masonry.js +0 -0
  388. /package/{dom → src/dom}/actions/prefer-horizontal-scroll.js +0 -0
  389. /package/{dom → src/dom}/actions/sticky.js +0 -0
  390. /package/{dom → src/dom}/bounding-box.js +0 -0
  391. /package/{dom → src/dom}/clipboard.js +0 -0
  392. /package/{dom → src/dom}/css-vars.js +0 -0
  393. /package/{dom → src/dom}/events.js +0 -0
  394. /package/{dom → src/dom}/events.test.js +0 -0
  395. /package/{dom → src/dom}/focusable.js +0 -0
  396. /package/{dom → src/dom}/font-size.js +0 -0
  397. /package/{dom → src/dom}/get-element.js +0 -0
  398. /package/{dom → src/dom}/hash.js +0 -0
  399. /package/{dom → src/dom}/keyboard.js +0 -0
  400. /package/{dom → src/dom}/local-store.js +0 -0
  401. /package/{dom → src/dom}/media.js +0 -0
  402. /package/{dom → src/dom}/observers/index.js +0 -0
  403. /package/{dom → src/dom}/observers/intersection-observer.js +0 -0
  404. /package/{dom → src/dom}/observers/mutation-observer.js +0 -0
  405. /package/{dom → src/dom}/observers/observer.js +0 -0
  406. /package/{dom → src/dom}/observers/resize-observer.js +0 -0
  407. /package/{dom → src/dom}/pkce.js +0 -0
  408. /package/{dom → src/dom}/query-params.js +0 -0
  409. /package/{dom → src/dom}/sanitize.js +0 -0
  410. /package/{dom → src/dom}/session-store.js +0 -0
  411. /package/{dom → src/dom}/trap-focus.js +0 -0
  412. /package/{dom → src/dom}/ui/inconsistent-button-fix.js +0 -0
  413. /package/{dom → src/dom}/ui/index.js +0 -0
  414. /package/{dom → src/dom}/ui/scroll-container.js +0 -0
  415. /package/{dom → src/dom}/ui/traverse-and-scramble.js +0 -0
  416. /package/{lib → src/lib}/arrays/item-position.js +0 -0
  417. /package/{lib → src/lib}/arrays/join.js +0 -0
  418. /package/{lib → src/lib}/arrays/shuffle.js +0 -0
  419. /package/{lib → src/lib}/arrays/sort.spec.js +0 -0
  420. /package/{lib → src/lib}/arrays/unique.js +0 -0
  421. /package/{lib → src/lib}/auth/index.js +0 -0
  422. /package/{lib → src/lib}/date/days.js +0 -0
  423. /package/{lib → src/lib}/date/index.js +0 -0
  424. /package/{lib → src/lib}/date/months.js +0 -0
  425. /package/{lib → src/lib}/form/form-data.js +0 -0
  426. /package/{lib → src/lib}/form/index.js +0 -0
  427. /package/{lib → src/lib}/form/sanitize.js +0 -0
  428. /package/{lib → src/lib}/form/sanitize.spec.js +0 -0
  429. /package/{lib → src/lib}/functions/debounce.js +0 -0
  430. /package/{lib → src/lib}/functions/env.js +0 -0
  431. /package/{lib → src/lib}/functions/functional.js +0 -0
  432. /package/{lib → src/lib}/functions/index.js +0 -0
  433. /package/{lib → src/lib}/functions/throttle.js +0 -0
  434. /package/{lib → src/lib}/functions/timeout.js +0 -0
  435. /package/{lib → src/lib}/numbers/index.js +0 -0
  436. /package/{lib → src/lib}/numbers/math.js +0 -0
  437. /package/{lib → src/lib}/objects/camelcase-keys.js +0 -0
  438. /package/{lib → src/lib}/objects/camelcase-keys.test.js +0 -0
  439. /package/{lib → src/lib}/objects/empty.js +0 -0
  440. /package/{lib → src/lib}/objects/equal.js +0 -0
  441. /package/{lib → src/lib}/objects/extend.js +0 -0
  442. /package/{lib → src/lib}/objects/extend.test.js +0 -0
  443. /package/{lib → src/lib}/objects/flatten.js +0 -0
  444. /package/{lib → src/lib}/objects/index.js +0 -0
  445. /package/{lib → src/lib}/objects/json.js +0 -0
  446. /package/{lib → src/lib}/objects/loop.js +0 -0
  447. /package/{lib → src/lib}/objects/loop.test.js +0 -0
  448. /package/{lib → src/lib}/objects/mix/mix.md +0 -0
  449. /package/{lib → src/lib}/objects/nested-property.js +0 -0
  450. /package/{lib → src/lib}/objects/normalize-object.js +0 -0
  451. /package/{lib → src/lib}/objects/omit-empty.js +0 -0
  452. /package/{lib → src/lib}/objects/omit-empty.test.js +0 -0
  453. /package/{lib → src/lib}/objects/size.js +0 -0
  454. /package/{lib → src/lib}/promises/index.js +0 -0
  455. /package/{lib → src/lib}/promises/reject.js +0 -0
  456. /package/{lib → src/lib}/sse.js +0 -0
  457. /package/{lib → src/lib}/strings/convert-case/convert-case.js +0 -0
  458. /package/{lib → src/lib}/strings/convert-case/convert-case.md +0 -0
  459. /package/{lib → src/lib}/strings/convert-case/convert-case.test.js +0 -0
  460. /package/{lib → src/lib}/strings/markdown.js +0 -0
  461. /package/{lib → src/lib}/strings/query-string.js +0 -0
  462. /package/{lib → src/lib}/symbols/index.js +0 -0
  463. /package/{lib → src/lib}/symbols/symbols.js +0 -0
  464. /package/{node → src/node}/common.js +0 -0
  465. /package/{node → src/node}/dirname.js +0 -0
  466. /package/{node → src/node}/file-cache.js +0 -0
  467. /package/{node → src/node}/file.js +0 -0
  468. /package/{node → src/node}/hash.js +0 -0
  469. /package/{node → src/node}/index.js +0 -0
  470. /package/{node → src/node}/pkce.js +0 -0
  471. /package/{node → src/node}/sanitize.js +0 -0
  472. /package/{node → src/node}/sanitize.spec.js +0 -0
@@ -0,0 +1,23 @@
1
+ // src/dom/keyboard.js
2
+ function isTab(event) {
3
+ return !event.shiftKey && event.key === "Tab";
4
+ }
5
+ function isShiftTab(event) {
6
+ return event.shiftKey && event.key === "Tab";
7
+ }
8
+ function isTabKey(key) {
9
+ return key === "Tab";
10
+ }
11
+ function isArrowKey(key) {
12
+ return ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(key);
13
+ }
14
+ function isEscapeKey(key) {
15
+ return key === "Escape";
16
+ }
17
+ export {
18
+ isArrowKey,
19
+ isEscapeKey,
20
+ isShiftTab,
21
+ isTab,
22
+ isTabKey
23
+ };
@@ -0,0 +1,55 @@
1
+ // src/dom/local-store.js
2
+ var localStore = {
3
+ /**
4
+ * Retrieves a value from localStorage
5
+ * @param {string} key - The key to retrieve from localStorage
6
+ * @returns {any} The stored value. Returns parsed JSON if the value was stored as JSON. Returns the original string if not JSON, or undefined if key doesn't exist
7
+ */
8
+ get(key) {
9
+ const value = localStorage.getItem(key);
10
+ if (!value) return;
11
+ try {
12
+ return JSON.parse(value);
13
+ } catch (error) {
14
+ return value;
15
+ }
16
+ },
17
+ /**
18
+ * Stores a value in localStorage
19
+ * @param {string} key - The key to store the value under
20
+ * @param {any} value - The value to store. Objects will be stringified to JSON
21
+ */
22
+ set(key, value) {
23
+ if (typeof value === "string") {
24
+ localStorage.setItem(key, value);
25
+ } else {
26
+ localStorage.setItem(key, JSON.stringify(value));
27
+ }
28
+ },
29
+ /**
30
+ * Stores multiple key-value pairs in localStorage
31
+ * @param {Object|Map} data - An object or Map containing key-value pairs to store
32
+ */
33
+ setMultiple(data) {
34
+ for (const [key, value] of Object.entries(data)) {
35
+ this.set(key, value);
36
+ }
37
+ },
38
+ /**
39
+ * Removes a value from localStorage
40
+ * @param {string} key - The key to remove from localStorage
41
+ */
42
+ remove(key) {
43
+ localStorage.removeItem(key);
44
+ },
45
+ /**
46
+ * Removes multiple keys from localStorage
47
+ * @param {string[]} keys - Array of keys to remove from localStorage
48
+ */
49
+ removeMultiple(keys) {
50
+ keys.forEach((key) => this.remove(key));
51
+ }
52
+ };
53
+ export {
54
+ localStore
55
+ };
@@ -0,0 +1,33 @@
1
+ // src/dom/media.js
2
+ async function imagesLoaded(node) {
3
+ const images = Array.from(node.querySelectorAll("img"));
4
+ const promises = images.map((img) => {
5
+ return new Promise((resolve, reject) => {
6
+ if (img.complete) return resolve();
7
+ img.onload = resolve;
8
+ img.onerror = (e) => {
9
+ reject("Image failed to load");
10
+ };
11
+ });
12
+ });
13
+ return Promise.all(promises);
14
+ }
15
+ async function videosLoaded(node) {
16
+ const videos = Array.from(node.querySelectorAll("video"));
17
+ const promises = videos.map((video) => {
18
+ return new Promise((resolve, reject) => {
19
+ if (video.readyState === 4) return resolve();
20
+ video.onloadedmetadata = resolve;
21
+ video.onerror = reject;
22
+ });
23
+ });
24
+ return Promise.all(promises);
25
+ }
26
+ async function mediaLoaded(node) {
27
+ return Promise.all([imagesLoaded(node), videosLoaded(node)]);
28
+ }
29
+ export {
30
+ imagesLoaded,
31
+ mediaLoaded,
32
+ videosLoaded
33
+ };
@@ -0,0 +1,128 @@
1
+ // src/dom/events.js
2
+ function dispatchEvent(node, eventName, detail, options = {}) {
3
+ node.dispatchEvent(
4
+ new CustomEvent(eventName, {
5
+ ...options,
6
+ detail
7
+ })
8
+ );
9
+ }
10
+
11
+ // src/dom/get-element.js
12
+ function getNodeType(node) {
13
+ if (node instanceof Element) return "element";
14
+ if (node instanceof NodeList) return "nodelist";
15
+ if (Array.isArray(node)) return "array";
16
+ }
17
+
18
+ // src/dom/observers/observer.js
19
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
20
+ const targetType = getNodeType(target);
21
+ if (targetType === "element") observer[method](target, options);
22
+ if (targetType === "nodelist") {
23
+ const elements = Array.from(target);
24
+ elements.forEach((element) => observer[method](element, options));
25
+ }
26
+ if (targetType === "array") {
27
+ target.forEach((element) => observer[method](element, options));
28
+ }
29
+ }
30
+
31
+ // src/dom/observers/intersection-observer.js
32
+ function intersectionObserver(target, options = {}) {
33
+ const { callback, ...opts } = options;
34
+ const observer = new IntersectionObserver(observerFn, opts);
35
+ useObserverMethodOnTarget(target, observer, "observe");
36
+ function observerFn(entries) {
37
+ for (const entry of entries) {
38
+ if (callback) callback({ entry, entries, observer });
39
+ else dispatchEvent(target, "intersect", { entry, entries, observer });
40
+ }
41
+ }
42
+ return {
43
+ observer,
44
+ observe(target2) {
45
+ useObserverMethodOnTarget(target2, observer, "observe", options);
46
+ },
47
+ unobserve(target2) {
48
+ useObserverMethodOnTarget(target2, observer, "unobserve");
49
+ },
50
+ takeRecords() {
51
+ return observer.takeRecords();
52
+ },
53
+ disconnect() {
54
+ const records = observer.takeRecords();
55
+ observer.disconnect();
56
+ if (records.length > 0) observerFn(records);
57
+ },
58
+ destroy() {
59
+ observer.disconnect();
60
+ }
61
+ };
62
+ }
63
+
64
+ // src/dom/observers/mutation-observer.js
65
+ var defaultOptions = {
66
+ attributes: false,
67
+ childList: false,
68
+ subtree: false
69
+ };
70
+ function mutationObserver(target, options) {
71
+ options = { ...defaultOptions, ...options };
72
+ const { callback, ...opts } = options;
73
+ const observer = new MutationObserver(observerFn);
74
+ if (target === window) target = document.body;
75
+ useObserverMethodOnTarget(target, observer, "observe", opts);
76
+ function observerFn(entries) {
77
+ for (const entry of entries) {
78
+ if (callback) callback({ entry, entries, observer });
79
+ else dispatchEvent(target, "mutate", { entry, entries, observer });
80
+ }
81
+ }
82
+ return {
83
+ observer,
84
+ observe(target2) {
85
+ useObserverMethodOnTarget(target2, observer, "observe", options);
86
+ },
87
+ takeRecords() {
88
+ return observer.takeRecords();
89
+ },
90
+ disconnect() {
91
+ const records = observer.takeRecords();
92
+ observer.disconnect();
93
+ if (records.length > 0) observerFn(records);
94
+ },
95
+ destroy() {
96
+ observer.disconnect();
97
+ }
98
+ };
99
+ }
100
+
101
+ // src/dom/observers/resize-observer.js
102
+ function resizeObserver(target, options) {
103
+ const { callback, ...opts } = options;
104
+ const observer = new ResizeObserver(observerFn);
105
+ if (target === window) target = document.body;
106
+ useObserverMethodOnTarget(target, observer, "observe", opts);
107
+ function observerFn(entries) {
108
+ for (const entry of entries) {
109
+ if (callback) callback({ entry, entries, observer });
110
+ else dispatchEvent(target, "resize-obs", { entry, entries, observer });
111
+ }
112
+ }
113
+ return {
114
+ observe(target2) {
115
+ useObserverMethodOnTarget(target2, observer, "observe", options);
116
+ },
117
+ unobserve(target2) {
118
+ useObserverMethodOnTarget(target2, observer, "unobserve");
119
+ },
120
+ disconnect: (_) => observer.disconnect(),
121
+ destroy: (_) => observer.disconnect()
122
+ };
123
+ }
124
+ export {
125
+ intersectionObserver,
126
+ mutationObserver,
127
+ resizeObserver
128
+ };
@@ -0,0 +1,65 @@
1
+ // src/dom/events.js
2
+ function dispatchEvent(node, eventName, detail, options = {}) {
3
+ node.dispatchEvent(
4
+ new CustomEvent(eventName, {
5
+ ...options,
6
+ detail
7
+ })
8
+ );
9
+ }
10
+
11
+ // src/dom/get-element.js
12
+ function getNodeType(node) {
13
+ if (node instanceof Element) return "element";
14
+ if (node instanceof NodeList) return "nodelist";
15
+ if (Array.isArray(node)) return "array";
16
+ }
17
+
18
+ // src/dom/observers/observer.js
19
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
20
+ const targetType = getNodeType(target);
21
+ if (targetType === "element") observer[method](target, options);
22
+ if (targetType === "nodelist") {
23
+ const elements = Array.from(target);
24
+ elements.forEach((element) => observer[method](element, options));
25
+ }
26
+ if (targetType === "array") {
27
+ target.forEach((element) => observer[method](element, options));
28
+ }
29
+ }
30
+
31
+ // src/dom/observers/intersection-observer.js
32
+ function intersectionObserver(target, options = {}) {
33
+ const { callback, ...opts } = options;
34
+ const observer = new IntersectionObserver(observerFn, opts);
35
+ useObserverMethodOnTarget(target, observer, "observe");
36
+ function observerFn(entries) {
37
+ for (const entry of entries) {
38
+ if (callback) callback({ entry, entries, observer });
39
+ else dispatchEvent(target, "intersect", { entry, entries, observer });
40
+ }
41
+ }
42
+ return {
43
+ observer,
44
+ observe(target2) {
45
+ useObserverMethodOnTarget(target2, observer, "observe", options);
46
+ },
47
+ unobserve(target2) {
48
+ useObserverMethodOnTarget(target2, observer, "unobserve");
49
+ },
50
+ takeRecords() {
51
+ return observer.takeRecords();
52
+ },
53
+ disconnect() {
54
+ const records = observer.takeRecords();
55
+ observer.disconnect();
56
+ if (records.length > 0) observerFn(records);
57
+ },
58
+ destroy() {
59
+ observer.disconnect();
60
+ }
61
+ };
62
+ }
63
+ export {
64
+ intersectionObserver
65
+ };
@@ -0,0 +1,69 @@
1
+ // src/dom/events.js
2
+ function dispatchEvent(node, eventName, detail, options = {}) {
3
+ node.dispatchEvent(
4
+ new CustomEvent(eventName, {
5
+ ...options,
6
+ detail
7
+ })
8
+ );
9
+ }
10
+
11
+ // src/dom/get-element.js
12
+ function getNodeType(node) {
13
+ if (node instanceof Element) return "element";
14
+ if (node instanceof NodeList) return "nodelist";
15
+ if (Array.isArray(node)) return "array";
16
+ }
17
+
18
+ // src/dom/observers/observer.js
19
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
20
+ const targetType = getNodeType(target);
21
+ if (targetType === "element") observer[method](target, options);
22
+ if (targetType === "nodelist") {
23
+ const elements = Array.from(target);
24
+ elements.forEach((element) => observer[method](element, options));
25
+ }
26
+ if (targetType === "array") {
27
+ target.forEach((element) => observer[method](element, options));
28
+ }
29
+ }
30
+
31
+ // src/dom/observers/mutation-observer.js
32
+ var defaultOptions = {
33
+ attributes: false,
34
+ childList: false,
35
+ subtree: false
36
+ };
37
+ function mutationObserver(target, options) {
38
+ options = { ...defaultOptions, ...options };
39
+ const { callback, ...opts } = options;
40
+ const observer = new MutationObserver(observerFn);
41
+ if (target === window) target = document.body;
42
+ useObserverMethodOnTarget(target, observer, "observe", opts);
43
+ function observerFn(entries) {
44
+ for (const entry of entries) {
45
+ if (callback) callback({ entry, entries, observer });
46
+ else dispatchEvent(target, "mutate", { entry, entries, observer });
47
+ }
48
+ }
49
+ return {
50
+ observer,
51
+ observe(target2) {
52
+ useObserverMethodOnTarget(target2, observer, "observe", options);
53
+ },
54
+ takeRecords() {
55
+ return observer.takeRecords();
56
+ },
57
+ disconnect() {
58
+ const records = observer.takeRecords();
59
+ observer.disconnect();
60
+ if (records.length > 0) observerFn(records);
61
+ },
62
+ destroy() {
63
+ observer.disconnect();
64
+ }
65
+ };
66
+ }
67
+ export {
68
+ mutationObserver
69
+ };
@@ -0,0 +1,22 @@
1
+ // src/dom/get-element.js
2
+ function getNodeType(node) {
3
+ if (node instanceof Element) return "element";
4
+ if (node instanceof NodeList) return "nodelist";
5
+ if (Array.isArray(node)) return "array";
6
+ }
7
+
8
+ // src/dom/observers/observer.js
9
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
10
+ const targetType = getNodeType(target);
11
+ if (targetType === "element") observer[method](target, options);
12
+ if (targetType === "nodelist") {
13
+ const elements = Array.from(target);
14
+ elements.forEach((element) => observer[method](element, options));
15
+ }
16
+ if (targetType === "array") {
17
+ target.forEach((element) => observer[method](element, options));
18
+ }
19
+ }
20
+ export {
21
+ useObserverMethodOnTarget
22
+ };
@@ -0,0 +1,56 @@
1
+ // src/dom/events.js
2
+ function dispatchEvent(node, eventName, detail, options = {}) {
3
+ node.dispatchEvent(
4
+ new CustomEvent(eventName, {
5
+ ...options,
6
+ detail
7
+ })
8
+ );
9
+ }
10
+
11
+ // src/dom/get-element.js
12
+ function getNodeType(node) {
13
+ if (node instanceof Element) return "element";
14
+ if (node instanceof NodeList) return "nodelist";
15
+ if (Array.isArray(node)) return "array";
16
+ }
17
+
18
+ // src/dom/observers/observer.js
19
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
20
+ const targetType = getNodeType(target);
21
+ if (targetType === "element") observer[method](target, options);
22
+ if (targetType === "nodelist") {
23
+ const elements = Array.from(target);
24
+ elements.forEach((element) => observer[method](element, options));
25
+ }
26
+ if (targetType === "array") {
27
+ target.forEach((element) => observer[method](element, options));
28
+ }
29
+ }
30
+
31
+ // src/dom/observers/resize-observer.js
32
+ function resizeObserver(target, options) {
33
+ const { callback, ...opts } = options;
34
+ const observer = new ResizeObserver(observerFn);
35
+ if (target === window) target = document.body;
36
+ useObserverMethodOnTarget(target, observer, "observe", opts);
37
+ function observerFn(entries) {
38
+ for (const entry of entries) {
39
+ if (callback) callback({ entry, entries, observer });
40
+ else dispatchEvent(target, "resize-obs", { entry, entries, observer });
41
+ }
42
+ }
43
+ return {
44
+ observe(target2) {
45
+ useObserverMethodOnTarget(target2, observer, "observe", options);
46
+ },
47
+ unobserve(target2) {
48
+ useObserverMethodOnTarget(target2, observer, "unobserve");
49
+ },
50
+ disconnect: (_) => observer.disconnect(),
51
+ destroy: (_) => observer.disconnect()
52
+ };
53
+ }
54
+ export {
55
+ resizeObserver
56
+ };
@@ -0,0 +1,27 @@
1
+ // src/dom/random-string.js
2
+ function randomString(length = 10) {
3
+ const firstLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));
4
+ const others = Math.random().toString(36).substring(2, 2 + length - 1);
5
+ return firstLetter + others;
6
+ }
7
+
8
+ // src/dom/pkce.js
9
+ async function PKCE() {
10
+ const codeVerifier = await randomString();
11
+ const codeChallenge = await getCodeChallenge(codeVerifier);
12
+ return {
13
+ state: await randomString(),
14
+ code_verifier: codeVerifier,
15
+ code_challenge: codeChallenge,
16
+ code_challenge_method: "S256"
17
+ };
18
+ }
19
+ async function getCodeChallenge(verifier) {
20
+ const encoder = new TextEncoder();
21
+ const data = encoder.encode(verifier);
22
+ const hashed = await window.crypto.subtle.digest("SHA-256", data);
23
+ return window.btoa(String.fromCharCode.apply(null, new Uint8Array(hashed))).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
24
+ }
25
+ export {
26
+ PKCE
27
+ };
@@ -0,0 +1,14 @@
1
+ // src/dom/query-params.js
2
+ var queryParams = {
3
+ get(key) {
4
+ const searchParams = new URLSearchParams(location.search);
5
+ return searchParams.get(key);
6
+ },
7
+ stringify(params) {
8
+ const searchParams = new URLSearchParams(location.search);
9
+ return searchParams.toString();
10
+ }
11
+ };
12
+ export {
13
+ queryParams
14
+ };
@@ -0,0 +1,13 @@
1
+ // src/dom/random-string.js
2
+ function randomString(length = 10) {
3
+ const firstLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));
4
+ const others = Math.random().toString(36).substring(2, 2 + length - 1);
5
+ return firstLetter + others;
6
+ }
7
+ function uuid() {
8
+ return crypto.randomUUID();
9
+ }
10
+ export {
11
+ randomString,
12
+ uuid
13
+ };
@@ -0,0 +1,31 @@
1
+ // src/dom/sanitize.js
2
+ import DOMPurify from "dompurify";
3
+
4
+ // src/lib/form/sanitize.js
5
+ function sanitize(value, options = {}) {
6
+ const { sanitizer, ...rest } = options;
7
+ if (!sanitizer) throw new Error("sanitizer function is required");
8
+ if (typeof value === "string") return sanitizer(value, rest);
9
+ if (Array.isArray(value)) return sanitizeArray(value, { sanitizer, ...rest });
10
+ if (value && typeof value === "object") {
11
+ return Object.fromEntries(
12
+ Object.entries(value).map(([key, val]) => [
13
+ key,
14
+ sanitize(val, { sanitizer, ...rest })
15
+ ])
16
+ );
17
+ }
18
+ return value;
19
+ }
20
+ function sanitizeArray(arr, { sanitizer, ...rest }) {
21
+ if (!sanitizer) throw new Error("sanitizer function is required");
22
+ return arr.map((item) => sanitize(item, { sanitizer, ...rest }));
23
+ }
24
+
25
+ // src/dom/sanitize.js
26
+ function sanitize2(value, options = {}) {
27
+ return sanitize(value, { sanitizer: DOMPurify.sanitize, ...options });
28
+ }
29
+ export {
30
+ sanitize2 as sanitize
31
+ };
@@ -0,0 +1,25 @@
1
+ // src/dom/session-store.js
2
+ var sessionStore = {
3
+ get(key) {
4
+ const value = sessionStorage.getItem(key);
5
+ if (!value) return;
6
+ try {
7
+ return JSON.parse(value);
8
+ } catch (error) {
9
+ return value;
10
+ }
11
+ },
12
+ set(key, value) {
13
+ if (typeof value === "string") {
14
+ sessionStorage.setItem(key, value);
15
+ } else {
16
+ sessionStorage.setItem(key, JSON.stringify(value));
17
+ }
18
+ },
19
+ remove(key) {
20
+ sessionStorage.removeItem(key);
21
+ }
22
+ };
23
+ export {
24
+ sessionStore
25
+ };
@@ -0,0 +1,26 @@
1
+ // src/dom/spam-prevention.js
2
+ function preventSpam(form, { honeypotField = "hp", honeypotDuration = 2e3 } = {}) {
3
+ const startTime = Date.now();
4
+ let hasInteraction = false;
5
+ function checkForInteraction() {
6
+ hasInteraction = true;
7
+ }
8
+ const events = ["keydown", "mousemove", "touchstart", "click"];
9
+ events.forEach((event) => {
10
+ form.addEventListener(event, checkForInteraction, { once: true });
11
+ });
12
+ form.containsSpam = function() {
13
+ const fillTime = Date.now() - startTime;
14
+ const isTooFast = fillTime < honeypotDuration;
15
+ const honeypotInput = form.querySelector(`[name="${honeypotField}"]`);
16
+ const hasHoneypotValue = honeypotInput?.value?.trim();
17
+ const noInteraction = !hasInteraction;
18
+ events.forEach(
19
+ (event) => form.removeEventListener(event, checkForInteraction)
20
+ );
21
+ return isTooFast || !!hasHoneypotValue || noInteraction;
22
+ };
23
+ }
24
+ export {
25
+ preventSpam
26
+ };