@splendidlabz/utils 1.11.2 → 1.11.4

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 (228) hide show
  1. package/dist/cjs/dom/accessibility.cjs +2 -0
  2. package/dist/cjs/dom/actions/index.cjs +392 -7
  3. package/dist/cjs/dom/actions/masonry.cjs +97 -6
  4. package/dist/cjs/dom/actions/prefer-horizontal-scroll.cjs +58 -14
  5. package/dist/cjs/dom/actions/sticky.cjs +126 -6
  6. package/dist/cjs/dom/bounding-box.cjs +2 -0
  7. package/dist/cjs/dom/clipboard.cjs +2 -0
  8. package/dist/cjs/dom/cookie.cjs +3 -1
  9. package/dist/cjs/dom/css-vars.cjs +13 -3
  10. package/dist/cjs/dom/events.cjs +2 -0
  11. package/dist/cjs/dom/focusable.cjs +2 -0
  12. package/dist/cjs/dom/font-size.cjs +15 -3
  13. package/dist/cjs/dom/get-element.cjs +3 -1
  14. package/dist/cjs/dom/hash.cjs +2 -0
  15. package/dist/cjs/dom/index.cjs +1249 -47
  16. package/dist/cjs/dom/keyboard.cjs +2 -0
  17. package/dist/cjs/dom/local-store.cjs +3 -1
  18. package/dist/cjs/dom/media.cjs +2 -0
  19. package/dist/cjs/dom/observers/index.cjs +235 -9
  20. package/dist/cjs/dom/observers/intersection-observer.cjs +38 -6
  21. package/dist/cjs/dom/observers/mutation-observer.cjs +38 -6
  22. package/dist/cjs/dom/observers/observer.cjs +12 -2
  23. package/dist/cjs/dom/observers/resize-observer.cjs +38 -6
  24. package/dist/cjs/dom/observers/scroll-observer.cjs +62 -3
  25. package/dist/cjs/dom/pkce.cjs +13 -3
  26. package/dist/cjs/dom/query-params.cjs +3 -1
  27. package/dist/cjs/dom/random-string.cjs +2 -0
  28. package/dist/cjs/dom/sanitize.cjs +27 -3
  29. package/dist/cjs/dom/session-store.cjs +3 -1
  30. package/dist/cjs/dom/spam-prevention.cjs +2 -0
  31. package/dist/cjs/dom/trap-focus.cjs +131 -9
  32. package/dist/cjs/dom/ui/aria-current.cjs +2 -0
  33. package/dist/cjs/dom/ui/inconsistent-button-fix.cjs +2 -0
  34. package/dist/cjs/dom/ui/index.cjs +87 -9
  35. package/dist/cjs/dom/ui/scroll-container.cjs +2 -0
  36. package/dist/cjs/dom/ui/traverse-and-scramble.cjs +2 -0
  37. package/dist/cjs/lib/arrays/index.cjs +121 -13
  38. package/dist/cjs/lib/arrays/item-position.cjs +2 -0
  39. package/dist/cjs/lib/arrays/join.cjs +10 -2
  40. package/dist/cjs/lib/arrays/shuffle.cjs +2 -0
  41. package/dist/cjs/lib/arrays/sort.cjs +11 -3
  42. package/dist/cjs/lib/arrays/split-array.cjs +2 -0
  43. package/dist/cjs/lib/arrays/unique.cjs +2 -0
  44. package/dist/cjs/lib/auth/index.cjs +35 -3
  45. package/dist/cjs/lib/auth/route-manager.cjs +2 -0
  46. package/dist/cjs/lib/checks.cjs +2 -0
  47. package/dist/cjs/lib/date/days.cjs +3 -1
  48. package/dist/cjs/lib/date/index.cjs +190 -7
  49. package/dist/cjs/lib/date/months.cjs +3 -1
  50. package/dist/cjs/lib/date/time.cjs +14 -2
  51. package/dist/cjs/lib/form/form-data.cjs +2 -0
  52. package/dist/cjs/lib/form/index.cjs +104 -5
  53. package/dist/cjs/lib/form/sanitize.cjs +2 -0
  54. package/dist/cjs/lib/functions/callback.cjs +2 -0
  55. package/dist/cjs/lib/functions/debounce.cjs +2 -0
  56. package/dist/cjs/lib/functions/env.cjs +2 -0
  57. package/dist/cjs/lib/functions/functional.cjs +2 -0
  58. package/dist/cjs/lib/functions/index.cjs +124 -11
  59. package/dist/cjs/lib/functions/throttle.cjs +2 -0
  60. package/dist/cjs/lib/functions/timeout.cjs +2 -0
  61. package/dist/cjs/lib/hash.cjs +2 -0
  62. package/dist/cjs/lib/index.cjs +1160 -29
  63. package/dist/cjs/lib/numbers/index.cjs +17 -4
  64. package/dist/cjs/lib/numbers/math.cjs +2 -0
  65. package/dist/cjs/lib/objects/camelcase-keys.cjs +45 -4
  66. package/dist/cjs/lib/objects/empty.cjs +2 -0
  67. package/dist/cjs/lib/objects/equal.cjs +2 -0
  68. package/dist/cjs/lib/objects/extend.cjs +117 -6
  69. package/dist/cjs/lib/objects/flatten.cjs +11 -3
  70. package/dist/cjs/lib/objects/index.cjs +360 -27
  71. package/dist/cjs/lib/objects/json.cjs +2 -0
  72. package/dist/cjs/lib/objects/loop.cjs +2 -0
  73. package/dist/cjs/lib/objects/mix/mix.cjs +5 -3
  74. package/dist/cjs/lib/objects/nested-property.cjs +2 -0
  75. package/dist/cjs/lib/objects/normalize-object.cjs +78 -4
  76. package/dist/cjs/lib/objects/omit-empty.cjs +2 -0
  77. package/dist/cjs/lib/objects/size.cjs +2 -0
  78. package/dist/cjs/lib/objects/split.cjs +2 -0
  79. package/dist/cjs/lib/promises/index.cjs +51 -3
  80. package/dist/cjs/lib/promises/reject.cjs +19 -2
  81. package/dist/cjs/lib/sse.cjs +29 -4
  82. package/dist/cjs/lib/strings/convert-case/convert-case.cjs +2 -0
  83. package/dist/cjs/lib/strings/index.cjs +179 -11
  84. package/dist/cjs/lib/strings/markdown.cjs +3 -1
  85. package/dist/cjs/lib/strings/name.cjs +2 -0
  86. package/dist/cjs/lib/strings/pluralize.cjs +3 -1
  87. package/dist/cjs/lib/strings/query-string.cjs +2 -0
  88. package/dist/cjs/lib/style/index.cjs +31 -2
  89. package/dist/cjs/lib/symbols/index.cjs +22 -3
  90. package/dist/cjs/lib/symbols/symbols.cjs +2 -0
  91. package/dist/cjs/node/context.cjs +0 -0
  92. package/dist/cjs/node/dirname.cjs +4 -2
  93. package/dist/cjs/node/file-cache.cjs +45 -3
  94. package/dist/cjs/node/file.cjs +4 -2
  95. package/dist/cjs/node/hash.cjs +3 -1
  96. package/dist/cjs/node/index.cjs +278 -15
  97. package/dist/cjs/node/pkce.cjs +20 -8
  98. package/dist/cjs/node/random-string.cjs +3 -1
  99. package/dist/cjs/node/sanitize.cjs +27 -3
  100. package/dist/cjs/node/uuid.cjs +2 -0
  101. package/dist/esm/node/context.js +0 -0
  102. package/dist/esm/node/file-cache.js +1 -1
  103. package/dist/esm/node/pkce.js +3 -2
  104. package/dist/types/node/context.d.cts +2 -0
  105. package/dist/types/node/index.d.cts +1 -1
  106. package/dist/types/node/pkce.d.cts +7 -1
  107. package/package.json +5 -2
  108. package/CHANGELOG.md +0 -231
  109. package/eslint.config.js +0 -2
  110. package/src/dom/accessibility.js +0 -58
  111. package/src/dom/actions/index.js +0 -3
  112. package/src/dom/actions/masonry.js +0 -43
  113. package/src/dom/actions/prefer-horizontal-scroll.js +0 -121
  114. package/src/dom/actions/sticky.js +0 -85
  115. package/src/dom/bounding-box.js +0 -82
  116. package/src/dom/clipboard.js +0 -14
  117. package/src/dom/cookie.js +0 -32
  118. package/src/dom/css-vars.js +0 -19
  119. package/src/dom/events.js +0 -71
  120. package/src/dom/focusable.js +0 -165
  121. package/src/dom/font-size.js +0 -40
  122. package/src/dom/get-element.js +0 -176
  123. package/src/dom/hash.js +0 -9
  124. package/src/dom/index.js +0 -23
  125. package/src/dom/keyboard.js +0 -44
  126. package/src/dom/local-store.js +0 -66
  127. package/src/dom/media.js +0 -30
  128. package/src/dom/observers/index.js +0 -4
  129. package/src/dom/observers/intersection-observer.js +0 -43
  130. package/src/dom/observers/mutation-observer.js +0 -51
  131. package/src/dom/observers/observer.js +0 -18
  132. package/src/dom/observers/resize-observer.js +0 -66
  133. package/src/dom/observers/scroll-observer.js +0 -146
  134. package/src/dom/pkce.js +0 -34
  135. package/src/dom/query-params.js +0 -14
  136. package/src/dom/random-string.js +0 -18
  137. package/src/dom/random-string.test.js +0 -13
  138. package/src/dom/sanitize.js +0 -16
  139. package/src/dom/session-store.js +0 -29
  140. package/src/dom/spam-prevention.js +0 -40
  141. package/src/dom/trap-focus.js +0 -70
  142. package/src/dom/ui/aria-current.js +0 -20
  143. package/src/dom/ui/inconsistent-button-fix.js +0 -20
  144. package/src/dom/ui/index.js +0 -4
  145. package/src/dom/ui/scroll-container.js +0 -25
  146. package/src/dom/ui/traverse-and-scramble.js +0 -61
  147. package/src/lib/arrays/index.js +0 -6
  148. package/src/lib/arrays/item-position.js +0 -23
  149. package/src/lib/arrays/join.js +0 -20
  150. package/src/lib/arrays/shuffle.js +0 -21
  151. package/src/lib/arrays/sort.js +0 -88
  152. package/src/lib/arrays/sort.spec.js +0 -123
  153. package/src/lib/arrays/split-array.js +0 -15
  154. package/src/lib/arrays/unique.js +0 -3
  155. package/src/lib/auth/index.js +0 -1
  156. package/src/lib/auth/route-manager.js +0 -45
  157. package/src/lib/checks.js +0 -57
  158. package/src/lib/date/days.js +0 -9
  159. package/src/lib/date/index.js +0 -3
  160. package/src/lib/date/months.js +0 -74
  161. package/src/lib/date/time.js +0 -83
  162. package/src/lib/form/form-data.js +0 -73
  163. package/src/lib/form/index.js +0 -2
  164. package/src/lib/form/sanitize.js +0 -80
  165. package/src/lib/form/sanitize.spec.js +0 -126
  166. package/src/lib/functions/callback.js +0 -8
  167. package/src/lib/functions/debounce.js +0 -18
  168. package/src/lib/functions/env.js +0 -5
  169. package/src/lib/functions/functional.js +0 -113
  170. package/src/lib/functions/functional.test.js +0 -196
  171. package/src/lib/functions/index.js +0 -5
  172. package/src/lib/functions/throttle.js +0 -11
  173. package/src/lib/functions/timeout.js +0 -15
  174. package/src/lib/hash.js +0 -18
  175. package/src/lib/hash.spec.js +0 -163
  176. package/src/lib/index.js +0 -14
  177. package/src/lib/numbers/index.js +0 -12
  178. package/src/lib/numbers/math.js +0 -9
  179. package/src/lib/numbers/split-unit.test.js +0 -45
  180. package/src/lib/objects/camelcase-keys.js +0 -17
  181. package/src/lib/objects/camelcase-keys.test.js +0 -72
  182. package/src/lib/objects/empty.js +0 -10
  183. package/src/lib/objects/equal.js +0 -9
  184. package/src/lib/objects/extend.js +0 -16
  185. package/src/lib/objects/extend.test.js +0 -35
  186. package/src/lib/objects/flatten.js +0 -19
  187. package/src/lib/objects/index.js +0 -13
  188. package/src/lib/objects/json.js +0 -7
  189. package/src/lib/objects/loop.js +0 -11
  190. package/src/lib/objects/loop.test.js +0 -31
  191. package/src/lib/objects/mix/mix.js +0 -191
  192. package/src/lib/objects/mix/mix.md +0 -78
  193. package/src/lib/objects/mix/mix.test.js +0 -445
  194. package/src/lib/objects/nested-property.js +0 -41
  195. package/src/lib/objects/normalize-object.js +0 -10
  196. package/src/lib/objects/omit-empty.js +0 -23
  197. package/src/lib/objects/omit-empty.test.js +0 -85
  198. package/src/lib/objects/size.js +0 -41
  199. package/src/lib/objects/split.js +0 -19
  200. package/src/lib/promises/index.js +0 -1
  201. package/src/lib/promises/reject.js +0 -17
  202. package/src/lib/sse.js +0 -61
  203. package/src/lib/strings/convert-case/convert-case.js +0 -86
  204. package/src/lib/strings/convert-case/convert-case.md +0 -44
  205. package/src/lib/strings/convert-case/convert-case.test.js +0 -50
  206. package/src/lib/strings/index.js +0 -5
  207. package/src/lib/strings/markdown.js +0 -71
  208. package/src/lib/strings/name.js +0 -24
  209. package/src/lib/strings/name.test.js +0 -67
  210. package/src/lib/strings/pluralize.js +0 -2
  211. package/src/lib/strings/query-string.js +0 -18
  212. package/src/lib/style/index.js +0 -13
  213. package/src/lib/symbols/index.js +0 -1
  214. package/src/lib/symbols/symbols.js +0 -9
  215. package/src/node/dirname.js +0 -17
  216. package/src/node/file-cache.js +0 -184
  217. package/src/node/file.js +0 -13
  218. package/src/node/hash.js +0 -5
  219. package/src/node/index.js +0 -7
  220. package/src/node/pkce.js +0 -33
  221. package/src/node/random-string.js +0 -10
  222. package/src/node/random-string.test.js +0 -15
  223. package/src/node/sanitize.js +0 -13
  224. package/src/node/sanitize.spec.js +0 -142
  225. package/src/node/uuid.js +0 -5
  226. package/tsconfig.json +0 -23
  227. package/tsup.config.js +0 -38
  228. package/tsup.config.mjs +0 -45
@@ -15,6 +15,8 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/keyboard.js
18
20
  var keyboard_exports = {};
19
21
  __export(keyboard_exports, {
20
22
  isArrowKey: () => isArrowKey,
@@ -15,12 +15,14 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/local-store.js
18
20
  var local_store_exports = {};
19
21
  __export(local_store_exports, {
20
22
  localStore: () => localStore
21
23
  });
22
24
  module.exports = __toCommonJS(local_store_exports);
23
- const localStore = {
25
+ var localStore = {
24
26
  /**
25
27
  * Retrieves a value from localStorage
26
28
  * @param {string} key - The key to retrieve from localStorage
@@ -15,6 +15,8 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/media.js
18
20
  var media_exports = {};
19
21
  __export(media_exports, {
20
22
  imagesLoaded: () => imagesLoaded,
@@ -2,6 +2,10 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
5
9
  var __copyProps = (to, from, except, desc) => {
6
10
  if (from && typeof from === "object" || typeof from === "function") {
7
11
  for (let key of __getOwnPropNames(from))
@@ -10,18 +14,240 @@ var __copyProps = (to, from, except, desc) => {
10
14
  }
11
15
  return to;
12
16
  };
13
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/observers/index.js
15
20
  var observers_exports = {};
21
+ __export(observers_exports, {
22
+ intersectionObserver: () => intersectionObserver,
23
+ mutationObserver: () => mutationObserver,
24
+ resizeObserver: () => resizeObserver,
25
+ scrollObserver: () => scrollObserver
26
+ });
16
27
  module.exports = __toCommonJS(observers_exports);
17
- __reExport(observers_exports, require("./intersection-observer.js"), module.exports);
18
- __reExport(observers_exports, require("./mutation-observer.js"), module.exports);
19
- __reExport(observers_exports, require("./resize-observer.js"), module.exports);
20
- __reExport(observers_exports, require("./scroll-observer.js"), module.exports);
28
+
29
+ // src/dom/events.js
30
+ function dispatchEvent(node, eventName, detail, options = {}) {
31
+ node.dispatchEvent(
32
+ new CustomEvent(eventName, {
33
+ ...options,
34
+ detail
35
+ })
36
+ );
37
+ }
38
+
39
+ // src/dom/get-element.js
40
+ function getNodeType(node) {
41
+ if (node instanceof Element) return "element";
42
+ if (node instanceof NodeList) return "nodelist";
43
+ if (Array.isArray(node)) return "array";
44
+ }
45
+
46
+ // src/dom/observers/observer.js
47
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
48
+ const targetType = getNodeType(target);
49
+ if (targetType === "element") observer[method](target, options);
50
+ if (targetType === "nodelist") {
51
+ const elements = Array.from(target);
52
+ elements.forEach((element) => observer[method](element, options));
53
+ }
54
+ if (targetType === "array") {
55
+ target.forEach((element) => observer[method](element, options));
56
+ }
57
+ }
58
+
59
+ // src/dom/observers/intersection-observer.js
60
+ function intersectionObserver(target, options = {}) {
61
+ const { callback, ...opts } = options;
62
+ const observer = new IntersectionObserver(observerFn, opts);
63
+ useObserverMethodOnTarget(target, observer, "observe");
64
+ function observerFn(entries) {
65
+ for (const entry of entries) {
66
+ if (callback) callback({ entry, entries, observer });
67
+ else dispatchEvent(target, "intersect", { entry, entries, observer });
68
+ }
69
+ }
70
+ return {
71
+ observer,
72
+ observe(target2) {
73
+ useObserverMethodOnTarget(target2, observer, "observe", options);
74
+ },
75
+ unobserve(target2) {
76
+ useObserverMethodOnTarget(target2, observer, "unobserve");
77
+ },
78
+ takeRecords() {
79
+ return observer.takeRecords();
80
+ },
81
+ disconnect() {
82
+ const records = observer.takeRecords();
83
+ observer.disconnect();
84
+ if (records.length > 0) observerFn(records);
85
+ },
86
+ destroy() {
87
+ observer.disconnect();
88
+ }
89
+ };
90
+ }
91
+
92
+ // src/dom/observers/mutation-observer.js
93
+ var defaultOptions = {
94
+ attributes: false,
95
+ childList: false,
96
+ subtree: false
97
+ };
98
+ function mutationObserver(target, options) {
99
+ options = { ...defaultOptions, ...options };
100
+ const { callback, ...opts } = options;
101
+ const observer = new MutationObserver(observerFn);
102
+ if (target === window) target = document.body;
103
+ useObserverMethodOnTarget(target, observer, "observe", opts);
104
+ function observerFn(entries) {
105
+ for (const entry of entries) {
106
+ if (callback) callback({ entry, entries, observer });
107
+ else dispatchEvent(target, "mutate", { entry, entries, observer });
108
+ }
109
+ }
110
+ return {
111
+ observer,
112
+ observe(target2) {
113
+ useObserverMethodOnTarget(target2, observer, "observe", options);
114
+ },
115
+ takeRecords() {
116
+ return observer.takeRecords();
117
+ },
118
+ disconnect() {
119
+ const records = observer.takeRecords();
120
+ observer.disconnect();
121
+ if (records.length > 0) observerFn(records);
122
+ },
123
+ destroy() {
124
+ observer.disconnect();
125
+ }
126
+ };
127
+ }
128
+
129
+ // src/dom/observers/resize-observer.js
130
+ function resizeObserver(target, options) {
131
+ const { callback, ...opts } = options;
132
+ const observer = new ResizeObserver(observerFn);
133
+ if (target === window || target === document)
134
+ target = document.documentElement;
135
+ useObserverMethodOnTarget(target, observer, "observe", opts);
136
+ function observerFn(entries) {
137
+ for (const entry of entries) {
138
+ if (callback) callback({ entry, entries, observer });
139
+ else
140
+ dispatchEvent(entry.target, "resize-obs", { entry, entries, observer });
141
+ }
142
+ }
143
+ return {
144
+ observe(target2) {
145
+ useObserverMethodOnTarget(target2, observer, "observe", options);
146
+ },
147
+ unobserve(target2) {
148
+ useObserverMethodOnTarget(target2, observer, "unobserve");
149
+ },
150
+ disconnect: (_) => observer.disconnect(),
151
+ destroy: (_) => observer.disconnect()
152
+ };
153
+ }
154
+
155
+ // src/dom/observers/scroll-observer.js
156
+ var defaultOptions2 = {
157
+ threshold: 0,
158
+ // Float between 0 to 1.
159
+ tolerance: 0.1,
160
+ // Float between 0 to 1. Tolerance for event firing
161
+ once: false
162
+ // Only fire threshold callback once
163
+ };
164
+ function getScrollElement(node) {
165
+ if (node === document || node === window || node === document.documentElement) {
166
+ return document.documentElement;
167
+ }
168
+ return (
169
+ /** @type {Element} */
170
+ node
171
+ );
172
+ }
173
+ function scrollObserver(node, options = {}) {
174
+ const { callback, onScrollDown, onScrollUp, onEnterThreshold, ...userOpts } = options;
175
+ const opts = { ...defaultOptions2, ...userOpts };
176
+ const { threshold, tolerance, once } = opts;
177
+ let prevScrollDirection = null;
178
+ let prevScrollTop = 0;
179
+ let prevScrollPercent = 0;
180
+ let thresholdFired = false;
181
+ let rafId = null;
182
+ const isDocumentScroll = node === document || node === window || node === document.documentElement;
183
+ const scrollElement = getScrollElement(node);
184
+ const eventTarget = isDocumentScroll ? window : node;
185
+ let cachedScrollHeight = 0;
186
+ let cachedClientHeight = 0;
187
+ updateCache();
188
+ const cacheObserver = resizeObserver(scrollElement, {
189
+ callback: updateCache
190
+ });
191
+ eventTarget.addEventListener("scroll", throttledObserve, { passive: true });
192
+ function throttledObserve() {
193
+ rafId = requestAnimationFrame(observe);
194
+ }
195
+ function updateCache() {
196
+ cachedScrollHeight = scrollElement.scrollHeight;
197
+ cachedClientHeight = scrollElement.clientHeight;
198
+ }
199
+ function observe() {
200
+ const scrollTop = scrollElement.scrollTop;
201
+ if (Math.abs(scrollTop - prevScrollTop) < 1) return;
202
+ const scrollDirection = scrollTop > prevScrollTop ? "down" : "up";
203
+ const maxScroll = Math.max(1, cachedScrollHeight - cachedClientHeight);
204
+ const scrollPercent = Math.min(1, Math.max(0, scrollTop / maxScroll));
205
+ const thresholdMin = threshold - tolerance / 2;
206
+ const thresholdMax = threshold + tolerance / 2;
207
+ const wasInThreshold = prevScrollPercent >= thresholdMin && prevScrollPercent <= thresholdMax;
208
+ const isInThreshold = scrollPercent >= thresholdMin && scrollPercent <= thresholdMax;
209
+ const hasEnteredThreshold = !wasInThreshold && isInThreshold && (!once || !thresholdFired);
210
+ if (hasEnteredThreshold && once) {
211
+ thresholdFired = true;
212
+ }
213
+ const callbackData = {
214
+ scrollTop,
215
+ scrollDirection,
216
+ scrollPercent,
217
+ directionChanged: scrollDirection !== prevScrollDirection,
218
+ hasEnteredThreshold,
219
+ isInThreshold
220
+ };
221
+ if (typeof callback === "function") {
222
+ callback(callbackData);
223
+ }
224
+ if (scrollDirection !== prevScrollDirection) {
225
+ if (scrollDirection === "down" && typeof onScrollDown === "function") {
226
+ onScrollDown(callbackData);
227
+ }
228
+ if (scrollDirection === "up" && typeof onScrollUp === "function") {
229
+ onScrollUp(callbackData);
230
+ }
231
+ }
232
+ if (hasEnteredThreshold && typeof onEnterThreshold === "function") {
233
+ onEnterThreshold(callbackData);
234
+ }
235
+ prevScrollTop = scrollTop;
236
+ prevScrollPercent = scrollPercent;
237
+ prevScrollDirection = scrollDirection;
238
+ }
239
+ return {
240
+ destroy() {
241
+ eventTarget.removeEventListener("scroll", throttledObserve);
242
+ if (rafId) cancelAnimationFrame(rafId);
243
+ cacheObserver.destroy();
244
+ }
245
+ };
246
+ }
21
247
  // Annotate the CommonJS export names for ESM import in node:
22
248
  0 && (module.exports = {
23
- ...require("./intersection-observer.js"),
24
- ...require("./mutation-observer.js"),
25
- ...require("./resize-observer.js"),
26
- ...require("./scroll-observer.js")
249
+ intersectionObserver,
250
+ mutationObserver,
251
+ resizeObserver,
252
+ scrollObserver
27
253
  });
@@ -15,30 +15,62 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/observers/intersection-observer.js
18
20
  var intersection_observer_exports = {};
19
21
  __export(intersection_observer_exports, {
20
22
  intersectionObserver: () => intersectionObserver
21
23
  });
22
24
  module.exports = __toCommonJS(intersection_observer_exports);
23
- var import_events = require("../events.js");
24
- var import_observer = require("./observer.js");
25
+
26
+ // src/dom/events.js
27
+ function dispatchEvent(node, eventName, detail, options = {}) {
28
+ node.dispatchEvent(
29
+ new CustomEvent(eventName, {
30
+ ...options,
31
+ detail
32
+ })
33
+ );
34
+ }
35
+
36
+ // src/dom/get-element.js
37
+ function getNodeType(node) {
38
+ if (node instanceof Element) return "element";
39
+ if (node instanceof NodeList) return "nodelist";
40
+ if (Array.isArray(node)) return "array";
41
+ }
42
+
43
+ // src/dom/observers/observer.js
44
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
45
+ const targetType = getNodeType(target);
46
+ if (targetType === "element") observer[method](target, options);
47
+ if (targetType === "nodelist") {
48
+ const elements = Array.from(target);
49
+ elements.forEach((element) => observer[method](element, options));
50
+ }
51
+ if (targetType === "array") {
52
+ target.forEach((element) => observer[method](element, options));
53
+ }
54
+ }
55
+
56
+ // src/dom/observers/intersection-observer.js
25
57
  function intersectionObserver(target, options = {}) {
26
58
  const { callback, ...opts } = options;
27
59
  const observer = new IntersectionObserver(observerFn, opts);
28
- (0, import_observer.useObserverMethodOnTarget)(target, observer, "observe");
60
+ useObserverMethodOnTarget(target, observer, "observe");
29
61
  function observerFn(entries) {
30
62
  for (const entry of entries) {
31
63
  if (callback) callback({ entry, entries, observer });
32
- else (0, import_events.dispatchEvent)(target, "intersect", { entry, entries, observer });
64
+ else dispatchEvent(target, "intersect", { entry, entries, observer });
33
65
  }
34
66
  }
35
67
  return {
36
68
  observer,
37
69
  observe(target2) {
38
- (0, import_observer.useObserverMethodOnTarget)(target2, observer, "observe", options);
70
+ useObserverMethodOnTarget(target2, observer, "observe", options);
39
71
  },
40
72
  unobserve(target2) {
41
- (0, import_observer.useObserverMethodOnTarget)(target2, observer, "unobserve");
73
+ useObserverMethodOnTarget(target2, observer, "unobserve");
42
74
  },
43
75
  takeRecords() {
44
76
  return observer.takeRecords();
@@ -15,14 +15,46 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/observers/mutation-observer.js
18
20
  var mutation_observer_exports = {};
19
21
  __export(mutation_observer_exports, {
20
22
  mutationObserver: () => mutationObserver
21
23
  });
22
24
  module.exports = __toCommonJS(mutation_observer_exports);
23
- var import_events = require("../events.js");
24
- var import_observer = require("./observer.js");
25
- const defaultOptions = {
25
+
26
+ // src/dom/events.js
27
+ function dispatchEvent(node, eventName, detail, options = {}) {
28
+ node.dispatchEvent(
29
+ new CustomEvent(eventName, {
30
+ ...options,
31
+ detail
32
+ })
33
+ );
34
+ }
35
+
36
+ // src/dom/get-element.js
37
+ function getNodeType(node) {
38
+ if (node instanceof Element) return "element";
39
+ if (node instanceof NodeList) return "nodelist";
40
+ if (Array.isArray(node)) return "array";
41
+ }
42
+
43
+ // src/dom/observers/observer.js
44
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
45
+ const targetType = getNodeType(target);
46
+ if (targetType === "element") observer[method](target, options);
47
+ if (targetType === "nodelist") {
48
+ const elements = Array.from(target);
49
+ elements.forEach((element) => observer[method](element, options));
50
+ }
51
+ if (targetType === "array") {
52
+ target.forEach((element) => observer[method](element, options));
53
+ }
54
+ }
55
+
56
+ // src/dom/observers/mutation-observer.js
57
+ var defaultOptions = {
26
58
  attributes: false,
27
59
  childList: false,
28
60
  subtree: false
@@ -32,17 +64,17 @@ function mutationObserver(target, options) {
32
64
  const { callback, ...opts } = options;
33
65
  const observer = new MutationObserver(observerFn);
34
66
  if (target === window) target = document.body;
35
- (0, import_observer.useObserverMethodOnTarget)(target, observer, "observe", opts);
67
+ useObserverMethodOnTarget(target, observer, "observe", opts);
36
68
  function observerFn(entries) {
37
69
  for (const entry of entries) {
38
70
  if (callback) callback({ entry, entries, observer });
39
- else (0, import_events.dispatchEvent)(target, "mutate", { entry, entries, observer });
71
+ else dispatchEvent(target, "mutate", { entry, entries, observer });
40
72
  }
41
73
  }
42
74
  return {
43
75
  observer,
44
76
  observe(target2) {
45
- (0, import_observer.useObserverMethodOnTarget)(target2, observer, "observe", options);
77
+ useObserverMethodOnTarget(target2, observer, "observe", options);
46
78
  },
47
79
  takeRecords() {
48
80
  return observer.takeRecords();
@@ -15,14 +15,24 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/observers/observer.js
18
20
  var observer_exports = {};
19
21
  __export(observer_exports, {
20
22
  useObserverMethodOnTarget: () => useObserverMethodOnTarget
21
23
  });
22
24
  module.exports = __toCommonJS(observer_exports);
23
- var import_get_element = require("../get-element.js");
25
+
26
+ // src/dom/get-element.js
27
+ function getNodeType(node) {
28
+ if (node instanceof Element) return "element";
29
+ if (node instanceof NodeList) return "nodelist";
30
+ if (Array.isArray(node)) return "array";
31
+ }
32
+
33
+ // src/dom/observers/observer.js
24
34
  function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
25
- const targetType = (0, import_get_element.getNodeType)(target);
35
+ const targetType = getNodeType(target);
26
36
  if (targetType === "element") observer[method](target, options);
27
37
  if (targetType === "nodelist") {
28
38
  const elements = Array.from(target);
@@ -15,32 +15,64 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/observers/resize-observer.js
18
20
  var resize_observer_exports = {};
19
21
  __export(resize_observer_exports, {
20
22
  resizeObserver: () => resizeObserver
21
23
  });
22
24
  module.exports = __toCommonJS(resize_observer_exports);
23
- var import_events = require("../events.js");
24
- var import_observer = require("./observer.js");
25
+
26
+ // src/dom/events.js
27
+ function dispatchEvent(node, eventName, detail, options = {}) {
28
+ node.dispatchEvent(
29
+ new CustomEvent(eventName, {
30
+ ...options,
31
+ detail
32
+ })
33
+ );
34
+ }
35
+
36
+ // src/dom/get-element.js
37
+ function getNodeType(node) {
38
+ if (node instanceof Element) return "element";
39
+ if (node instanceof NodeList) return "nodelist";
40
+ if (Array.isArray(node)) return "array";
41
+ }
42
+
43
+ // src/dom/observers/observer.js
44
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
45
+ const targetType = getNodeType(target);
46
+ if (targetType === "element") observer[method](target, options);
47
+ if (targetType === "nodelist") {
48
+ const elements = Array.from(target);
49
+ elements.forEach((element) => observer[method](element, options));
50
+ }
51
+ if (targetType === "array") {
52
+ target.forEach((element) => observer[method](element, options));
53
+ }
54
+ }
55
+
56
+ // src/dom/observers/resize-observer.js
25
57
  function resizeObserver(target, options) {
26
58
  const { callback, ...opts } = options;
27
59
  const observer = new ResizeObserver(observerFn);
28
60
  if (target === window || target === document)
29
61
  target = document.documentElement;
30
- (0, import_observer.useObserverMethodOnTarget)(target, observer, "observe", opts);
62
+ useObserverMethodOnTarget(target, observer, "observe", opts);
31
63
  function observerFn(entries) {
32
64
  for (const entry of entries) {
33
65
  if (callback) callback({ entry, entries, observer });
34
66
  else
35
- (0, import_events.dispatchEvent)(entry.target, "resize-obs", { entry, entries, observer });
67
+ dispatchEvent(entry.target, "resize-obs", { entry, entries, observer });
36
68
  }
37
69
  }
38
70
  return {
39
71
  observe(target2) {
40
- (0, import_observer.useObserverMethodOnTarget)(target2, observer, "observe", options);
72
+ useObserverMethodOnTarget(target2, observer, "observe", options);
41
73
  },
42
74
  unobserve(target2) {
43
- (0, import_observer.useObserverMethodOnTarget)(target2, observer, "unobserve");
75
+ useObserverMethodOnTarget(target2, observer, "unobserve");
44
76
  },
45
77
  disconnect: (_) => observer.disconnect(),
46
78
  destroy: (_) => observer.disconnect()
@@ -15,13 +15,72 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/observers/scroll-observer.js
18
20
  var scroll_observer_exports = {};
19
21
  __export(scroll_observer_exports, {
20
22
  scrollObserver: () => scrollObserver
21
23
  });
22
24
  module.exports = __toCommonJS(scroll_observer_exports);
23
- var import_resize_observer = require("./resize-observer.js");
24
- const defaultOptions = {
25
+
26
+ // src/dom/events.js
27
+ function dispatchEvent(node, eventName, detail, options = {}) {
28
+ node.dispatchEvent(
29
+ new CustomEvent(eventName, {
30
+ ...options,
31
+ detail
32
+ })
33
+ );
34
+ }
35
+
36
+ // src/dom/get-element.js
37
+ function getNodeType(node) {
38
+ if (node instanceof Element) return "element";
39
+ if (node instanceof NodeList) return "nodelist";
40
+ if (Array.isArray(node)) return "array";
41
+ }
42
+
43
+ // src/dom/observers/observer.js
44
+ function useObserverMethodOnTarget(target, observer, method = "observe", options = void 0) {
45
+ const targetType = getNodeType(target);
46
+ if (targetType === "element") observer[method](target, options);
47
+ if (targetType === "nodelist") {
48
+ const elements = Array.from(target);
49
+ elements.forEach((element) => observer[method](element, options));
50
+ }
51
+ if (targetType === "array") {
52
+ target.forEach((element) => observer[method](element, options));
53
+ }
54
+ }
55
+
56
+ // src/dom/observers/resize-observer.js
57
+ function resizeObserver(target, options) {
58
+ const { callback, ...opts } = options;
59
+ const observer = new ResizeObserver(observerFn);
60
+ if (target === window || target === document)
61
+ target = document.documentElement;
62
+ useObserverMethodOnTarget(target, observer, "observe", opts);
63
+ function observerFn(entries) {
64
+ for (const entry of entries) {
65
+ if (callback) callback({ entry, entries, observer });
66
+ else
67
+ dispatchEvent(entry.target, "resize-obs", { entry, entries, observer });
68
+ }
69
+ }
70
+ return {
71
+ observe(target2) {
72
+ useObserverMethodOnTarget(target2, observer, "observe", options);
73
+ },
74
+ unobserve(target2) {
75
+ useObserverMethodOnTarget(target2, observer, "unobserve");
76
+ },
77
+ disconnect: (_) => observer.disconnect(),
78
+ destroy: (_) => observer.disconnect()
79
+ };
80
+ }
81
+
82
+ // src/dom/observers/scroll-observer.js
83
+ var defaultOptions = {
25
84
  threshold: 0,
26
85
  // Float between 0 to 1.
27
86
  tolerance: 0.1,
@@ -53,7 +112,7 @@ function scrollObserver(node, options = {}) {
53
112
  let cachedScrollHeight = 0;
54
113
  let cachedClientHeight = 0;
55
114
  updateCache();
56
- const cacheObserver = (0, import_resize_observer.resizeObserver)(scrollElement, {
115
+ const cacheObserver = resizeObserver(scrollElement, {
57
116
  callback: updateCache
58
117
  });
59
118
  eventTarget.addEventListener("scroll", throttledObserve, { passive: true });
@@ -15,17 +15,27 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/pkce.js
18
20
  var pkce_exports = {};
19
21
  __export(pkce_exports, {
20
22
  PKCE: () => PKCE
21
23
  });
22
24
  module.exports = __toCommonJS(pkce_exports);
23
- var import_random_string = require("./random-string.js");
25
+
26
+ // src/dom/random-string.js
27
+ function randomString(length = 10) {
28
+ const firstLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));
29
+ const others = Math.random().toString(36).substring(2, 2 + length - 1);
30
+ return firstLetter + others;
31
+ }
32
+
33
+ // src/dom/pkce.js
24
34
  async function PKCE() {
25
- const codeVerifier = await (0, import_random_string.randomString)();
35
+ const codeVerifier = await randomString();
26
36
  const codeChallenge = await getCodeChallenge(codeVerifier);
27
37
  return {
28
- state: await (0, import_random_string.randomString)(),
38
+ state: await randomString(),
29
39
  code_verifier: codeVerifier,
30
40
  code_challenge: codeChallenge,
31
41
  code_challenge_method: "S256"
@@ -15,12 +15,14 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/query-params.js
18
20
  var query_params_exports = {};
19
21
  __export(query_params_exports, {
20
22
  queryParams: () => queryParams
21
23
  });
22
24
  module.exports = __toCommonJS(query_params_exports);
23
- const queryParams = {
25
+ var queryParams = {
24
26
  get(key) {
25
27
  const searchParams = new URLSearchParams(location.search);
26
28
  return searchParams.get(key);
@@ -15,6 +15,8 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/dom/random-string.js
18
20
  var random_string_exports = {};
19
21
  __export(random_string_exports, {
20
22
  randomString: () => randomString,