@splendidlabz/utils 1.6.0 → 1.8.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 (474) hide show
  1. package/CHANGELOG.md +19 -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 +208 -0
  49. package/dist/cjs/lib/date/months.cjs +102 -0
  50. package/dist/cjs/lib/date/time.cjs +117 -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 +1146 -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 +147 -0
  68. package/dist/cjs/lib/objects/flatten.cjs +48 -0
  69. package/dist/cjs/lib/objects/index.cjs +378 -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 +115 -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 +173 -0
  146. package/dist/esm/lib/date/months.js +78 -0
  147. package/dist/esm/lib/date/time.js +84 -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 +1027 -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 +121 -0
  165. package/dist/esm/lib/objects/flatten.js +22 -0
  166. package/dist/esm/lib/objects/index.js +323 -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 +89 -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/dist/{lib/checks.d.ts → types/lib/checks.d.cts} +6 -4
  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 +44 -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} +3 -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 +28 -16
  294. package/{dom → src/dom}/index.js +1 -0
  295. package/src/dom/spam-prevention.js +39 -0
  296. package/{dom → src/dom}/ui/aria-current.js +1 -1
  297. package/{lib → src/lib}/arrays/index.js +1 -0
  298. package/{lib → src/lib}/arrays/sort.js +6 -6
  299. package/src/lib/arrays/split-array.js +15 -0
  300. package/{lib → src/lib}/auth/route-manager.js +1 -0
  301. package/{lib → src/lib}/date/time.js +38 -5
  302. package/{lib → src/lib}/numbers/index.js +1 -1
  303. package/src/lib/numbers/split-unit.test.js +45 -0
  304. package/src/lib/objects/mix/mix.js +191 -0
  305. package/{lib → src/lib}/objects/mix/mix.test.js +99 -2
  306. package/src/lib/strings/pluralize.js +2 -0
  307. package/{lib → src/lib}/style/index.js +2 -0
  308. package/{node → src/node}/file-cache.js +1 -1
  309. package/tsconfig.json +6 -6
  310. package/tsup.config.js +38 -0
  311. package/tsup.config.mjs +43 -0
  312. package/dist/dom/actions/index.d.ts +0 -3
  313. package/dist/dom/actions/masonry.d.ts +0 -3
  314. package/dist/dom/actions/prefer-horizontal-scroll.d.ts +0 -3
  315. package/dist/dom/actions/sticky.d.ts +0 -3
  316. package/dist/dom/cookie.d.ts +0 -5
  317. package/dist/dom/css-vars.d.ts +0 -4
  318. package/dist/dom/events.d.ts +0 -18
  319. package/dist/dom/font-size.d.ts +0 -5
  320. package/dist/dom/hash.d.ts +0 -1
  321. package/dist/dom/index.d.ts +0 -22
  322. package/dist/dom/media.d.ts +0 -3
  323. package/dist/dom/observers/index.d.ts +0 -3
  324. package/dist/dom/observers/observer.d.ts +0 -1
  325. package/dist/dom/ui/aria-current.d.ts +0 -5
  326. package/dist/dom/ui/index.d.ts +0 -4
  327. package/dist/dom/ui/scroll-container.d.ts +0 -1
  328. package/dist/lib/arrays/index.d.ts +0 -5
  329. package/dist/lib/arrays/shuffle.d.ts +0 -1
  330. package/dist/lib/arrays/unique.d.ts +0 -1
  331. package/dist/lib/auth/index.d.ts +0 -1
  332. package/dist/lib/date/index.d.ts +0 -3
  333. package/dist/lib/date/time.d.ts +0 -8
  334. package/dist/lib/form/form-data.d.ts +0 -7
  335. package/dist/lib/form/index.d.ts +0 -2
  336. package/dist/lib/functions/debounce.d.ts +0 -1
  337. package/dist/lib/functions/env.d.ts +0 -1
  338. package/dist/lib/functions/functional.d.ts +0 -4
  339. package/dist/lib/functions/index.d.ts +0 -5
  340. package/dist/lib/functions/throttle.d.ts +0 -1
  341. package/dist/lib/functions/timeout.d.ts +0 -3
  342. package/dist/lib/hash.d.ts +0 -1
  343. package/dist/lib/index.d.ts +0 -14
  344. package/dist/lib/numbers/index.d.ts +0 -2
  345. package/dist/lib/numbers/math.d.ts +0 -2
  346. package/dist/lib/objects/camelcase-keys.d.ts +0 -1
  347. package/dist/lib/objects/empty.d.ts +0 -2
  348. package/dist/lib/objects/equal.d.ts +0 -2
  349. package/dist/lib/objects/extend.d.ts +0 -4
  350. package/dist/lib/objects/flatten.d.ts +0 -4
  351. package/dist/lib/objects/index.d.ts +0 -13
  352. package/dist/lib/objects/json.d.ts +0 -1
  353. package/dist/lib/objects/loop.d.ts +0 -2
  354. package/dist/lib/objects/mix/mix.d.ts +0 -1
  355. package/dist/lib/objects/normalize-object.d.ts +0 -1
  356. package/dist/lib/objects/omit-empty.d.ts +0 -1
  357. package/dist/lib/objects/size.d.ts +0 -1
  358. package/dist/lib/promises/index.d.ts +0 -1
  359. package/dist/lib/promises/reject.d.ts +0 -3
  360. package/dist/lib/strings/convert-case/convert-case.d.ts +0 -8
  361. package/dist/lib/strings/index.d.ts +0 -5
  362. package/dist/lib/strings/name.d.ts +0 -5
  363. package/dist/lib/strings/pluralize.d.ts +0 -1
  364. package/dist/lib/strings/query-string.d.ts +0 -8
  365. package/dist/lib/style/index.d.ts +0 -1
  366. package/dist/lib/symbols/index.d.ts +0 -1
  367. package/dist/lib/symbols/symbols.d.ts +0 -2
  368. package/dist/node/common.d.ts +0 -1
  369. package/dist/node/dirname.d.ts +0 -7
  370. package/dist/node/file.d.ts +0 -2
  371. package/dist/node/hash.d.ts +0 -1
  372. package/dist/node/index.d.ts +0 -7
  373. package/dist/node/random-string.d.ts +0 -1
  374. package/lib/objects/mix/mix.js +0 -102
  375. package/lib/strings/pluralize.js +0 -2
  376. /package/{dom → src/dom}/accessibility.js +0 -0
  377. /package/{dom → src/dom}/actions/index.js +0 -0
  378. /package/{dom → src/dom}/actions/masonry.js +0 -0
  379. /package/{dom → src/dom}/actions/prefer-horizontal-scroll.js +0 -0
  380. /package/{dom → src/dom}/actions/sticky.js +0 -0
  381. /package/{dom → src/dom}/bounding-box.js +0 -0
  382. /package/{dom → src/dom}/clipboard.js +0 -0
  383. /package/{dom → src/dom}/cookie.js +0 -0
  384. /package/{dom → src/dom}/css-vars.js +0 -0
  385. /package/{dom → src/dom}/events.js +0 -0
  386. /package/{dom → src/dom}/events.test.js +0 -0
  387. /package/{dom → src/dom}/focusable.js +0 -0
  388. /package/{dom → src/dom}/font-size.js +0 -0
  389. /package/{dom → src/dom}/get-element.js +0 -0
  390. /package/{dom → src/dom}/hash.js +0 -0
  391. /package/{dom → src/dom}/keyboard.js +0 -0
  392. /package/{dom → src/dom}/local-store.js +0 -0
  393. /package/{dom → src/dom}/media.js +0 -0
  394. /package/{dom → src/dom}/observers/index.js +0 -0
  395. /package/{dom → src/dom}/observers/intersection-observer.js +0 -0
  396. /package/{dom → src/dom}/observers/mutation-observer.js +0 -0
  397. /package/{dom → src/dom}/observers/observer.js +0 -0
  398. /package/{dom → src/dom}/observers/resize-observer.js +0 -0
  399. /package/{dom → src/dom}/pkce.js +0 -0
  400. /package/{dom → src/dom}/query-params.js +0 -0
  401. /package/{dom → src/dom}/random-string.js +0 -0
  402. /package/{dom → src/dom}/random-string.test.js +0 -0
  403. /package/{dom → src/dom}/sanitize.js +0 -0
  404. /package/{dom → src/dom}/session-store.js +0 -0
  405. /package/{dom → src/dom}/trap-focus.js +0 -0
  406. /package/{dom → src/dom}/ui/inconsistent-button-fix.js +0 -0
  407. /package/{dom → src/dom}/ui/index.js +0 -0
  408. /package/{dom → src/dom}/ui/scroll-container.js +0 -0
  409. /package/{dom → src/dom}/ui/traverse-and-scramble.js +0 -0
  410. /package/{lib → src/lib}/arrays/item-position.js +0 -0
  411. /package/{lib → src/lib}/arrays/join.js +0 -0
  412. /package/{lib → src/lib}/arrays/shuffle.js +0 -0
  413. /package/{lib → src/lib}/arrays/sort.spec.js +0 -0
  414. /package/{lib → src/lib}/arrays/unique.js +0 -0
  415. /package/{lib → src/lib}/auth/index.js +0 -0
  416. /package/{lib → src/lib}/checks.js +0 -0
  417. /package/{lib → src/lib}/date/days.js +0 -0
  418. /package/{lib → src/lib}/date/index.js +0 -0
  419. /package/{lib → src/lib}/date/months.js +0 -0
  420. /package/{lib → src/lib}/form/form-data.js +0 -0
  421. /package/{lib → src/lib}/form/index.js +0 -0
  422. /package/{lib → src/lib}/form/sanitize.js +0 -0
  423. /package/{lib → src/lib}/form/sanitize.spec.js +0 -0
  424. /package/{lib → src/lib}/functions/debounce.js +0 -0
  425. /package/{lib → src/lib}/functions/env.js +0 -0
  426. /package/{lib → src/lib}/functions/functional.js +0 -0
  427. /package/{lib → src/lib}/functions/index.js +0 -0
  428. /package/{lib → src/lib}/functions/throttle.js +0 -0
  429. /package/{lib → src/lib}/functions/timeout.js +0 -0
  430. /package/{lib → src/lib}/hash.js +0 -0
  431. /package/{lib → src/lib}/hash.spec.js +0 -0
  432. /package/{lib → src/lib}/index.js +0 -0
  433. /package/{lib → src/lib}/numbers/math.js +0 -0
  434. /package/{lib → src/lib}/objects/camelcase-keys.js +0 -0
  435. /package/{lib → src/lib}/objects/camelcase-keys.test.js +0 -0
  436. /package/{lib → src/lib}/objects/empty.js +0 -0
  437. /package/{lib → src/lib}/objects/equal.js +0 -0
  438. /package/{lib → src/lib}/objects/extend.js +0 -0
  439. /package/{lib → src/lib}/objects/extend.test.js +0 -0
  440. /package/{lib → src/lib}/objects/flatten.js +0 -0
  441. /package/{lib → src/lib}/objects/index.js +0 -0
  442. /package/{lib → src/lib}/objects/json.js +0 -0
  443. /package/{lib → src/lib}/objects/loop.js +0 -0
  444. /package/{lib → src/lib}/objects/loop.test.js +0 -0
  445. /package/{lib → src/lib}/objects/mix/mix.md +0 -0
  446. /package/{lib → src/lib}/objects/nested-property.js +0 -0
  447. /package/{lib → src/lib}/objects/normalize-object.js +0 -0
  448. /package/{lib → src/lib}/objects/omit-empty.js +0 -0
  449. /package/{lib → src/lib}/objects/omit-empty.test.js +0 -0
  450. /package/{lib → src/lib}/objects/size.js +0 -0
  451. /package/{lib → src/lib}/objects/split.js +0 -0
  452. /package/{lib → src/lib}/promises/index.js +0 -0
  453. /package/{lib → src/lib}/promises/reject.js +0 -0
  454. /package/{lib → src/lib}/sse.js +0 -0
  455. /package/{lib → src/lib}/strings/convert-case/convert-case.js +0 -0
  456. /package/{lib → src/lib}/strings/convert-case/convert-case.md +0 -0
  457. /package/{lib → src/lib}/strings/convert-case/convert-case.test.js +0 -0
  458. /package/{lib → src/lib}/strings/index.js +0 -0
  459. /package/{lib → src/lib}/strings/markdown.js +0 -0
  460. /package/{lib → src/lib}/strings/name.js +0 -0
  461. /package/{lib → src/lib}/strings/name.test.js +0 -0
  462. /package/{lib → src/lib}/strings/query-string.js +0 -0
  463. /package/{lib → src/lib}/symbols/index.js +0 -0
  464. /package/{lib → src/lib}/symbols/symbols.js +0 -0
  465. /package/{node → src/node}/common.js +0 -0
  466. /package/{node → src/node}/dirname.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}/random-string.js +0 -0
  472. /package/{node → src/node}/random-string.test.js +0 -0
  473. /package/{node → src/node}/sanitize.js +0 -0
  474. /package/{node → src/node}/sanitize.spec.js +0 -0
@@ -0,0 +1,65 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/node/sanitize.js
30
+ var sanitize_exports = {};
31
+ __export(sanitize_exports, {
32
+ sanitize: () => sanitize2
33
+ });
34
+ module.exports = __toCommonJS(sanitize_exports);
35
+ var import_sanitize_html = __toESM(require("sanitize-html"), 1);
36
+
37
+ // src/lib/form/sanitize.js
38
+ function sanitize(value, options = {}) {
39
+ const { sanitizer, ...rest } = options;
40
+ if (!sanitizer) throw new Error("sanitizer function is required");
41
+ if (typeof value === "string") return sanitizer(value, rest);
42
+ if (Array.isArray(value)) return sanitizeArray(value, { sanitizer, ...rest });
43
+ if (value && typeof value === "object") {
44
+ return Object.fromEntries(
45
+ Object.entries(value).map(([key, val]) => [
46
+ key,
47
+ sanitize(val, { sanitizer, ...rest })
48
+ ])
49
+ );
50
+ }
51
+ return value;
52
+ }
53
+ function sanitizeArray(arr, { sanitizer, ...rest }) {
54
+ if (!sanitizer) throw new Error("sanitizer function is required");
55
+ return arr.map((item) => sanitize(item, { sanitizer, ...rest }));
56
+ }
57
+
58
+ // src/node/sanitize.js
59
+ function sanitize2(value, options = {}) {
60
+ return sanitize(value, { sanitizer: import_sanitize_html.default, ...options });
61
+ }
62
+ // Annotate the CommonJS export names for ESM import in node:
63
+ 0 && (module.exports = {
64
+ sanitize
65
+ });
@@ -0,0 +1,27 @@
1
+ // src/dom/accessibility.js
2
+ function hasAccessibleName(label, labelledBy) {
3
+ if (label || labelledBy) return true;
4
+ return false;
5
+ }
6
+ function checkForAccessibleName({
7
+ name,
8
+ ariaLabel,
9
+ ariaLabelledBy,
10
+ severity = "warn"
11
+ } = {}) {
12
+ if (ariaLabel || ariaLabelledBy) return true;
13
+ const message = `${name} is missing an accessible name. Please provide an accessible name with 'aria-label' or 'aria-labelledby'.`;
14
+ if (severity === "warn") console.warn(message);
15
+ if (severity === "error") console.error(message);
16
+ return false;
17
+ }
18
+ function isInvalidAriaPopup(value) {
19
+ const allowedPopoupValues = ["dialog", "menu", "listbox", "grid", "tree"];
20
+ if (!allowedPopoupValues.includes(value)) return true;
21
+ return false;
22
+ }
23
+ export {
24
+ checkForAccessibleName,
25
+ hasAccessibleName,
26
+ isInvalidAriaPopup
27
+ };
@@ -0,0 +1,379 @@
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
+ function getElement(selector) {
8
+ if (!selector) return;
9
+ if (selector instanceof Element) return selector;
10
+ return document.querySelector(selector);
11
+ }
12
+ function getChildrenElements(node) {
13
+ let children = node.children;
14
+ if (children[0]?.nodeName === "ASTRO-SLOT") children = children[0].children;
15
+ return Array.from(children);
16
+ }
17
+
18
+ // src/dom/media.js
19
+ async function imagesLoaded(node) {
20
+ const images = Array.from(node.querySelectorAll("img"));
21
+ const promises = images.map((img) => {
22
+ return new Promise((resolve, reject) => {
23
+ if (img.complete) return resolve();
24
+ img.onload = resolve;
25
+ img.onerror = (e) => {
26
+ reject("Image failed to load");
27
+ };
28
+ });
29
+ });
30
+ return Promise.all(promises);
31
+ }
32
+ async function videosLoaded(node) {
33
+ const videos = Array.from(node.querySelectorAll("video"));
34
+ const promises = videos.map((video) => {
35
+ return new Promise((resolve, reject) => {
36
+ if (video.readyState === 4) return resolve();
37
+ video.onloadedmetadata = resolve;
38
+ video.onerror = reject;
39
+ });
40
+ });
41
+ return Promise.all(promises);
42
+ }
43
+ async function mediaLoaded(node) {
44
+ return Promise.all([imagesLoaded(node), videosLoaded(node)]);
45
+ }
46
+
47
+ // src/dom/events.js
48
+ function addListeners(listeners) {
49
+ listeners.forEach(({ node, event, handler }) => {
50
+ node.addEventListener(event, handler);
51
+ });
52
+ }
53
+ function removeListeners(listeners) {
54
+ listeners.forEach(({ node, event, handler }) => {
55
+ node.removeEventListener(event, handler);
56
+ });
57
+ }
58
+ function dispatchEvent(node, eventName, detail, options = {}) {
59
+ node.dispatchEvent(
60
+ new CustomEvent(eventName, {
61
+ ...options,
62
+ detail
63
+ })
64
+ );
65
+ }
66
+
67
+ // src/dom/observers/observer.js
68
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
69
+ const targetType = getNodeType(target);
70
+ if (targetType === "element") observer[method](target, options);
71
+ if (targetType === "nodelist") {
72
+ const elements = Array.from(target);
73
+ elements.forEach((element) => observer[method](element, options));
74
+ }
75
+ if (targetType === "array") {
76
+ target.forEach((element) => observer[method](element, options));
77
+ }
78
+ }
79
+
80
+ // src/dom/observers/resize-observer.js
81
+ function resizeObserver(target, options) {
82
+ const { callback, ...opts } = options;
83
+ const observer = new ResizeObserver(observerFn);
84
+ if (target === window) target = document.body;
85
+ useObserverMethodOnTarget(target, observer, "observe", opts);
86
+ function observerFn(entries) {
87
+ for (const entry of entries) {
88
+ if (callback) callback({ entry, entries, observer });
89
+ else dispatchEvent(target, "resize-obs", { entry, entries, observer });
90
+ }
91
+ }
92
+ return {
93
+ observe(target2) {
94
+ useObserverMethodOnTarget(target2, observer, "observe", options);
95
+ },
96
+ unobserve(target2) {
97
+ useObserverMethodOnTarget(target2, observer, "unobserve");
98
+ },
99
+ disconnect: (_) => observer.disconnect(),
100
+ destroy: (_) => observer.disconnect()
101
+ };
102
+ }
103
+
104
+ // src/dom/actions/masonry.js
105
+ async function masonry(node) {
106
+ if (nativeMasonrySupport(node)) return;
107
+ const colGap = parseFloat(getComputedStyle(node).columnGap);
108
+ const items = getChildrenElements(node);
109
+ node.style.setProperty("row-gap", "1px", "important");
110
+ node.style.gridAutoRows = "0px";
111
+ try {
112
+ await mediaLoaded(node);
113
+ } catch (e) {
114
+ }
115
+ layout({ colGap, items });
116
+ const obs = resizeObserver(node, {
117
+ async callback(opts) {
118
+ layout({ colGap, items });
119
+ }
120
+ });
121
+ async function layout({ colGap: colGap2, items: items2 }) {
122
+ items2.forEach((item) => {
123
+ const ib = item.getBoundingClientRect();
124
+ item.style.gridRowEnd = `span ${Math.round(ib.height + colGap2)}`;
125
+ });
126
+ }
127
+ return {
128
+ destroy() {
129
+ obs.disconnect();
130
+ }
131
+ };
132
+ }
133
+ function nativeMasonrySupport(node) {
134
+ return getComputedStyle(node).gridTemplateRows === "masonry";
135
+ }
136
+
137
+ // src/dom/bounding-box.js
138
+ function boundingBox(element, { containsPadding = true } = {}) {
139
+ const box = element.getBoundingClientRect();
140
+ const ret = {};
141
+ for (const prop in box) ret[prop] = box[prop];
142
+ if (!containsPadding) {
143
+ const style = getComputedStyle(element);
144
+ const paddingTop = parseFloat(style.paddingTop);
145
+ const paddingRight = parseFloat(style.paddingRight);
146
+ const paddingBottom = parseFloat(style.paddingBottom);
147
+ const paddingLeft = parseFloat(style.paddingLeft);
148
+ ret.x = ret.x + paddingLeft;
149
+ ret.y = ret.y + paddingTop;
150
+ ret.width = ret.width - paddingLeft - paddingRight;
151
+ ret.height = ret.height - paddingTop - paddingBottom;
152
+ ret.top = ret.top + paddingTop;
153
+ ret.bottom = ret.bottom - paddingBottom;
154
+ ret.right = ret.right - paddingRight;
155
+ ret.left = ret.left + paddingLeft;
156
+ }
157
+ ret.xCenter = (ret.left + ret.right) / 2;
158
+ ret.yCenter = (ret.top + ret.bottom) / 2;
159
+ return ret;
160
+ }
161
+ function boundingBoxRelativeToAncestor({ element, ancestorElement }) {
162
+ ancestorElement = ancestorElement || element.parentElement;
163
+ const box = boundingBox(element);
164
+ const ancestorBox = boundingBox(ancestorElement, {
165
+ containsPadding: false
166
+ });
167
+ return {
168
+ top: box.top - ancestorBox.top,
169
+ right: box.right - ancestorBox.right,
170
+ bottom: box.bottom - ancestorBox.bottom,
171
+ left: box.left - ancestorBox.left,
172
+ width: box.width,
173
+ height: box.height,
174
+ xCenter: (box.left + box.right) / 2 - ancestorBox.left,
175
+ yCenter: (box.top + box.bottom) / 2 - ancestorBox.top
176
+ };
177
+ }
178
+
179
+ // src/dom/css-vars.js
180
+ function getCSSVar(element, prop) {
181
+ element = getElement(element);
182
+ return getComputedStyle(element).getPropertyValue(prop);
183
+ }
184
+ function setCSSVar(element, prop, value) {
185
+ element = getElement(element);
186
+ element.style.setProperty(prop, value);
187
+ }
188
+
189
+ // src/lib/objects/omit-empty.js
190
+ function omitEmpty(obj, shallow = false) {
191
+ if (typeof obj !== "object" || obj === null) return obj;
192
+ if (obj instanceof Date) return obj;
193
+ const result = Array.isArray(obj) ? [] : {};
194
+ for (const [key, value] of Object.entries(obj)) {
195
+ if (value === null || value === void 0 || value === "" || typeof value === "object" && !(value instanceof Date) && Object.keys(value).length === 0) {
196
+ continue;
197
+ }
198
+ result[key] = shallow ? value : omitEmpty(value);
199
+ }
200
+ return result;
201
+ }
202
+
203
+ // src/dom/ui/scroll-container.js
204
+ function findScrollContainer(element, direction = "both") {
205
+ if (!element) return;
206
+ let parent = element.parentElement;
207
+ while (parent) {
208
+ const { overflow, overflowX, overflowY } = getComputedStyle(parent);
209
+ if (direction === "both") {
210
+ if (overflow.includes("auto") || overflow.includes("scroll"))
211
+ return parent;
212
+ }
213
+ if (direction === "horizontal") {
214
+ if (overflowX === "auto" || overflowX === "scroll") return parent;
215
+ }
216
+ if (direction === "vertical") {
217
+ if (overflowY === "auto" || overflowY === "scroll") return parent;
218
+ }
219
+ parent = parent.parentElement;
220
+ }
221
+ return document.documentElement;
222
+ }
223
+
224
+ // src/dom/actions/prefer-horizontal-scroll.js
225
+ var DEFAULT_OPTIONS = {
226
+ scrollSnapDelay: 1e3
227
+ };
228
+ function preferHorizontalScroll(node, props = {}) {
229
+ if (!node.classList.contains("scrollable-prefer-horizontal")) return;
230
+ const state = {
231
+ origSnapType: null,
232
+ currentSnapType: null,
233
+ snapTimeoutID: null
234
+ };
235
+ const options = {
236
+ ...DEFAULT_OPTIONS,
237
+ ...omitEmpty({
238
+ scrollSnapDelay: getCSSVar(node, "--scroll-snap-delay")
239
+ }),
240
+ ...omitEmpty(props)
241
+ };
242
+ const listeners = [
243
+ {
244
+ event: "wheel",
245
+ node,
246
+ handler: handleWheel
247
+ },
248
+ {
249
+ event: "pointerenter",
250
+ node,
251
+ handler: handlePointerEnter
252
+ },
253
+ {
254
+ event: "pointerleave",
255
+ node,
256
+ handler: handlePointerLeave
257
+ }
258
+ ];
259
+ addListeners(listeners);
260
+ function handleWheel(event) {
261
+ const direction = event.deltaY > 0 ? "down" : "up";
262
+ const updatedDelta = event.deltaY;
263
+ if (isTrackpad(event)) return false;
264
+ setCSSVar(node, "--snap-type", "none");
265
+ const scrolledAmount = node.scrollLeft;
266
+ const scrollWidth = node.scrollWidth;
267
+ const clientWidth = node.clientWidth;
268
+ const scrollableAmount = scrollWidth - clientWidth;
269
+ if (direction === "down" && scrolledAmount < scrollableAmount) {
270
+ node.scrollLeft += updatedDelta;
271
+ event.preventDefault();
272
+ }
273
+ if (direction === "up" && scrolledAmount > 0) {
274
+ node.scrollLeft += updatedDelta;
275
+ event.preventDefault();
276
+ }
277
+ const { snapTimeoutID } = state;
278
+ if (snapTimeoutID) clearTimeout(snapTimeoutID);
279
+ state.snapTimeoutID = setTimeout((_) => {
280
+ restoreHijackedState(node, state);
281
+ }, options.scrollSnapDelay);
282
+ }
283
+ function handlePointerEnter(event) {
284
+ state.origSnapType = getCSSVar(node, "--snap-type") || "proximity";
285
+ }
286
+ function handlePointerLeave(event) {
287
+ restoreHijackedState(node, state);
288
+ }
289
+ return {
290
+ destroy() {
291
+ removeListeners(listeners);
292
+ }
293
+ };
294
+ }
295
+ function restoreHijackedState(node, state) {
296
+ const scrollLeft = node.scrollLeft;
297
+ setCSSVar(node, "--snap-type", state.origSnapType);
298
+ const finalScrollLeft = node.scrollLeft;
299
+ setCSSVar(node, "--snap-type", "none");
300
+ node.scrollTo({ left: scrollLeft, behavior: "instant" });
301
+ node.scrollTo({ left: finalScrollLeft, behavior: "smooth" });
302
+ setTimeout((_) => {
303
+ setCSSVar(node, "--snap-type", state.origSnapType);
304
+ }, 250);
305
+ }
306
+ function isTrackpad(event) {
307
+ if (event.wheelDeltaY === event.deltaY * -3) return true;
308
+ }
309
+
310
+ // src/dom/actions/sticky.js
311
+ function sticky(node, props = {}) {
312
+ const scrollContainer = findScrollContainer(node);
313
+ let stickyTBLR = getComputedTBLR(node);
314
+ const obs = resizeObserver(node, {
315
+ callback: ({ entry }) => {
316
+ stickyTBLR = getComputedTBLR(node);
317
+ isSticking();
318
+ scrollContainer === document.documentElement ? window.addEventListener("scroll", scrollEventListener) : scrollContainer.addEventListener("scroll", scrollEventListener);
319
+ }
320
+ });
321
+ function scrollEventListener(event) {
322
+ isSticking();
323
+ }
324
+ function isSticking() {
325
+ const { top, bottom, left, right } = stickyTBLR;
326
+ const relativeRect = boundingBoxRelativeToAncestor({
327
+ element: node,
328
+ ancestorElement: scrollContainer
329
+ });
330
+ if (!isNaN(top)) {
331
+ if (relativeRect.top - top <= 1) {
332
+ node.classList.add("sticking");
333
+ } else {
334
+ node.classList.remove("sticking");
335
+ }
336
+ }
337
+ if (!isNaN(bottom)) {
338
+ if (relativeRect.bottom + bottom >= -1) {
339
+ node.classList.add("sticking");
340
+ } else {
341
+ node.classList.remove("sticking");
342
+ }
343
+ }
344
+ if (!isNaN(left)) {
345
+ if (relativeRect.left - left <= 1) {
346
+ node.classList.add("sticking");
347
+ } else {
348
+ node.classList.remove("sticking");
349
+ }
350
+ }
351
+ if (!isNaN(right)) {
352
+ if (relativeRect.right + right >= -1) {
353
+ node.classList.add("sticking");
354
+ } else {
355
+ node.classList.remove("sticking");
356
+ }
357
+ }
358
+ }
359
+ return {
360
+ destroy() {
361
+ obs.disconnect();
362
+ scrollContainer.removeEventListener("scroll", scrollEventListener);
363
+ }
364
+ };
365
+ }
366
+ function getComputedTBLR(element) {
367
+ const style = getComputedStyle(element);
368
+ return {
369
+ top: parseFloat(style.top),
370
+ bottom: parseFloat(style.bottom),
371
+ left: parseFloat(style.left),
372
+ right: parseFloat(style.right)
373
+ };
374
+ }
375
+ export {
376
+ masonry,
377
+ preferHorizontalScroll,
378
+ sticky
379
+ };
@@ -0,0 +1,123 @@
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
+ function getChildrenElements(node) {
8
+ let children = node.children;
9
+ if (children[0]?.nodeName === "ASTRO-SLOT") children = children[0].children;
10
+ return Array.from(children);
11
+ }
12
+
13
+ // src/dom/media.js
14
+ async function imagesLoaded(node) {
15
+ const images = Array.from(node.querySelectorAll("img"));
16
+ const promises = images.map((img) => {
17
+ return new Promise((resolve, reject) => {
18
+ if (img.complete) return resolve();
19
+ img.onload = resolve;
20
+ img.onerror = (e) => {
21
+ reject("Image failed to load");
22
+ };
23
+ });
24
+ });
25
+ return Promise.all(promises);
26
+ }
27
+ async function videosLoaded(node) {
28
+ const videos = Array.from(node.querySelectorAll("video"));
29
+ const promises = videos.map((video) => {
30
+ return new Promise((resolve, reject) => {
31
+ if (video.readyState === 4) return resolve();
32
+ video.onloadedmetadata = resolve;
33
+ video.onerror = reject;
34
+ });
35
+ });
36
+ return Promise.all(promises);
37
+ }
38
+ async function mediaLoaded(node) {
39
+ return Promise.all([imagesLoaded(node), videosLoaded(node)]);
40
+ }
41
+
42
+ // src/dom/events.js
43
+ function dispatchEvent(node, eventName, detail, options = {}) {
44
+ node.dispatchEvent(
45
+ new CustomEvent(eventName, {
46
+ ...options,
47
+ detail
48
+ })
49
+ );
50
+ }
51
+
52
+ // src/dom/observers/observer.js
53
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
54
+ const targetType = getNodeType(target);
55
+ if (targetType === "element") observer[method](target, options);
56
+ if (targetType === "nodelist") {
57
+ const elements = Array.from(target);
58
+ elements.forEach((element) => observer[method](element, options));
59
+ }
60
+ if (targetType === "array") {
61
+ target.forEach((element) => observer[method](element, options));
62
+ }
63
+ }
64
+
65
+ // src/dom/observers/resize-observer.js
66
+ function resizeObserver(target, options) {
67
+ const { callback, ...opts } = options;
68
+ const observer = new ResizeObserver(observerFn);
69
+ if (target === window) target = document.body;
70
+ useObserverMethodOnTarget(target, observer, "observe", opts);
71
+ function observerFn(entries) {
72
+ for (const entry of entries) {
73
+ if (callback) callback({ entry, entries, observer });
74
+ else dispatchEvent(target, "resize-obs", { entry, entries, observer });
75
+ }
76
+ }
77
+ return {
78
+ observe(target2) {
79
+ useObserverMethodOnTarget(target2, observer, "observe", options);
80
+ },
81
+ unobserve(target2) {
82
+ useObserverMethodOnTarget(target2, observer, "unobserve");
83
+ },
84
+ disconnect: (_) => observer.disconnect(),
85
+ destroy: (_) => observer.disconnect()
86
+ };
87
+ }
88
+
89
+ // src/dom/actions/masonry.js
90
+ async function masonry(node) {
91
+ if (nativeMasonrySupport(node)) return;
92
+ const colGap = parseFloat(getComputedStyle(node).columnGap);
93
+ const items = getChildrenElements(node);
94
+ node.style.setProperty("row-gap", "1px", "important");
95
+ node.style.gridAutoRows = "0px";
96
+ try {
97
+ await mediaLoaded(node);
98
+ } catch (e) {
99
+ }
100
+ layout({ colGap, items });
101
+ const obs = resizeObserver(node, {
102
+ async callback(opts) {
103
+ layout({ colGap, items });
104
+ }
105
+ });
106
+ async function layout({ colGap: colGap2, items: items2 }) {
107
+ items2.forEach((item) => {
108
+ const ib = item.getBoundingClientRect();
109
+ item.style.gridRowEnd = `span ${Math.round(ib.height + colGap2)}`;
110
+ });
111
+ }
112
+ return {
113
+ destroy() {
114
+ obs.disconnect();
115
+ }
116
+ };
117
+ }
118
+ function nativeMasonrySupport(node) {
119
+ return getComputedStyle(node).gridTemplateRows === "masonry";
120
+ }
121
+ export {
122
+ masonry
123
+ };