tool-shack 1.0.0 → 1.1.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 (265) hide show
  1. package/README.md +97 -93
  2. package/dist/cjs/browser/getCookie.d.ts.map +1 -1
  3. package/dist/cjs/browser/getCookie.js +12 -2
  4. package/dist/cjs/browser/getCookie.js.map +1 -1
  5. package/dist/cjs/browser/getQueryParams.d.ts +1 -1
  6. package/dist/cjs/browser/getQueryParams.d.ts.map +1 -1
  7. package/dist/cjs/browser/getQueryParams.js +10 -15
  8. package/dist/cjs/browser/getQueryParams.js.map +1 -1
  9. package/dist/cjs/browser/index.d.ts +2 -0
  10. package/dist/cjs/browser/index.d.ts.map +1 -1
  11. package/dist/cjs/browser/index.js +33 -18
  12. package/dist/cjs/browser/index.js.map +1 -1
  13. package/dist/cjs/browser/interfaces/index.js +17 -4
  14. package/dist/cjs/browser/interfaces/index.js.map +1 -1
  15. package/dist/cjs/browser/isPageVisible.d.ts +10 -0
  16. package/dist/cjs/browser/isPageVisible.d.ts.map +1 -0
  17. package/dist/cjs/browser/isPageVisible.js +14 -0
  18. package/dist/cjs/browser/isPageVisible.js.map +1 -0
  19. package/dist/cjs/browser/isPushNotificationSupported.d.ts +5 -2
  20. package/dist/cjs/browser/isPushNotificationSupported.d.ts.map +1 -1
  21. package/dist/cjs/browser/isPushNotificationSupported.js +6 -3
  22. package/dist/cjs/browser/isPushNotificationSupported.js.map +1 -1
  23. package/dist/cjs/browser/isTabFocused.d.ts +2 -3
  24. package/dist/cjs/browser/isTabFocused.d.ts.map +1 -1
  25. package/dist/cjs/browser/isTabFocused.js +4 -5
  26. package/dist/cjs/browser/isTabFocused.js.map +1 -1
  27. package/dist/cjs/browser/pageVisibilityListener.d.ts +12 -0
  28. package/dist/cjs/browser/pageVisibilityListener.d.ts.map +1 -0
  29. package/dist/cjs/browser/pageVisibilityListener.js +30 -0
  30. package/dist/cjs/browser/pageVisibilityListener.js.map +1 -0
  31. package/dist/cjs/browser/preferColorScheme.d.ts +4 -2
  32. package/dist/cjs/browser/preferColorScheme.d.ts.map +1 -1
  33. package/dist/cjs/browser/preferColorScheme.js +4 -2
  34. package/dist/cjs/browser/preferColorScheme.js.map +1 -1
  35. package/dist/cjs/browser/tabFocusListener.d.ts +3 -6
  36. package/dist/cjs/browser/tabFocusListener.d.ts.map +1 -1
  37. package/dist/cjs/browser/tabFocusListener.js +4 -17
  38. package/dist/cjs/browser/tabFocusListener.js.map +1 -1
  39. package/dist/cjs/dateTime/dateAsIso.d.ts +5 -3
  40. package/dist/cjs/dateTime/dateAsIso.d.ts.map +1 -1
  41. package/dist/cjs/dateTime/dateAsIso.js +5 -3
  42. package/dist/cjs/dateTime/dateAsIso.js.map +1 -1
  43. package/dist/cjs/dateTime/index.js +19 -6
  44. package/dist/cjs/dateTime/index.js.map +1 -1
  45. package/dist/cjs/dateTime/interfaces/index.js +15 -2
  46. package/dist/cjs/dateTime/interfaces/index.js.map +1 -1
  47. package/dist/cjs/dom/addAsyncEventListener.d.ts +2 -2
  48. package/dist/cjs/dom/addAsyncEventListener.d.ts.map +1 -1
  49. package/dist/cjs/dom/addAsyncEventListener.js +25 -13
  50. package/dist/cjs/dom/addAsyncEventListener.js.map +1 -1
  51. package/dist/cjs/dom/addClickOutsideListener.d.ts +2 -2
  52. package/dist/cjs/dom/addClickOutsideListener.d.ts.map +1 -1
  53. package/dist/cjs/dom/addClickOutsideListener.js +8 -4
  54. package/dist/cjs/dom/addClickOutsideListener.js.map +1 -1
  55. package/dist/cjs/dom/addEventListener.d.ts +5 -3
  56. package/dist/cjs/dom/addEventListener.d.ts.map +1 -1
  57. package/dist/cjs/dom/addEventListener.js +5 -3
  58. package/dist/cjs/dom/addEventListener.js.map +1 -1
  59. package/dist/cjs/dom/copyToClipboard.d.ts.map +1 -1
  60. package/dist/cjs/dom/copyToClipboard.js +8 -5
  61. package/dist/cjs/dom/copyToClipboard.js.map +1 -1
  62. package/dist/cjs/dom/createElement.d.ts +6 -3
  63. package/dist/cjs/dom/createElement.d.ts.map +1 -1
  64. package/dist/cjs/dom/createElement.js +1 -1
  65. package/dist/cjs/dom/createElement.js.map +1 -1
  66. package/dist/cjs/dom/fireEvent.d.ts +4 -4
  67. package/dist/cjs/dom/fireEvent.js +4 -4
  68. package/dist/cjs/dom/index.d.ts +1 -0
  69. package/dist/cjs/dom/index.d.ts.map +1 -1
  70. package/dist/cjs/dom/index.js +29 -15
  71. package/dist/cjs/dom/index.js.map +1 -1
  72. package/dist/cjs/dom/interfaces/createElement.d.ts +1 -1
  73. package/dist/cjs/dom/interfaces/index.js +16 -3
  74. package/dist/cjs/dom/interfaces/index.js.map +1 -1
  75. package/dist/cjs/dom/toggleFullscreenWithFallback.d.ts.map +1 -1
  76. package/dist/cjs/dom/toggleFullscreenWithFallback.js +45 -34
  77. package/dist/cjs/dom/toggleFullscreenWithFallback.js.map +1 -1
  78. package/dist/cjs/dom/types/createElement.d.ts +3 -0
  79. package/dist/cjs/dom/types/createElement.d.ts.map +1 -0
  80. package/dist/cjs/dom/types/createElement.js +3 -0
  81. package/dist/cjs/dom/types/createElement.js.map +1 -0
  82. package/dist/cjs/dom/types/index.d.ts +3 -0
  83. package/dist/cjs/dom/types/index.d.ts.map +1 -0
  84. package/dist/cjs/dom/types/index.js +19 -0
  85. package/dist/cjs/dom/types/index.js.map +1 -0
  86. package/dist/cjs/dom/types/toggleFullscreenWithFallback.d.ts +15 -0
  87. package/dist/cjs/dom/types/toggleFullscreenWithFallback.d.ts.map +1 -0
  88. package/dist/cjs/dom/types/toggleFullscreenWithFallback.js +3 -0
  89. package/dist/cjs/dom/types/toggleFullscreenWithFallback.js.map +1 -0
  90. package/dist/cjs/general/chunk.d.ts +1 -1
  91. package/dist/cjs/general/chunk.js +1 -1
  92. package/dist/cjs/general/groupBy.js +1 -1
  93. package/dist/cjs/general/groupBy.js.map +1 -1
  94. package/dist/cjs/general/index.js +23 -10
  95. package/dist/cjs/general/index.js.map +1 -1
  96. package/dist/cjs/general/isEmpty.d.ts.map +1 -1
  97. package/dist/cjs/general/isEmpty.js +3 -0
  98. package/dist/cjs/general/isEmpty.js.map +1 -1
  99. package/dist/cjs/general/isEqual.d.ts +4 -2
  100. package/dist/cjs/general/isEqual.d.ts.map +1 -1
  101. package/dist/cjs/general/isEqual.js +4 -2
  102. package/dist/cjs/general/isEqual.js.map +1 -1
  103. package/dist/cjs/index.js +21 -8
  104. package/dist/cjs/index.js.map +1 -1
  105. package/dist/cjs/package.json +3 -0
  106. package/dist/cjs/schedule/debounce.d.ts +2 -2
  107. package/dist/cjs/schedule/debounce.d.ts.map +1 -1
  108. package/dist/cjs/schedule/debounce.js +1 -1
  109. package/dist/cjs/schedule/index.js +21 -8
  110. package/dist/cjs/schedule/index.js.map +1 -1
  111. package/dist/cjs/schedule/interfaces/debounce.d.ts +1 -1
  112. package/dist/cjs/schedule/interfaces/debounce.d.ts.map +1 -1
  113. package/dist/cjs/schedule/interfaces/index.js +18 -5
  114. package/dist/cjs/schedule/interfaces/index.js.map +1 -1
  115. package/dist/cjs/schedule/interfaces/throttle.d.ts +1 -1
  116. package/dist/cjs/schedule/interfaces/throttle.d.ts.map +1 -1
  117. package/dist/cjs/schedule/runAsync.d.ts +5 -3
  118. package/dist/cjs/schedule/runAsync.d.ts.map +1 -1
  119. package/dist/cjs/schedule/runAsync.js +5 -3
  120. package/dist/cjs/schedule/runAsync.js.map +1 -1
  121. package/dist/cjs/schedule/throttle.d.ts +2 -2
  122. package/dist/cjs/schedule/throttle.d.ts.map +1 -1
  123. package/dist/cjs/schedule/throttle.js +1 -1
  124. package/dist/cjs/storage/index.js +23 -10
  125. package/dist/cjs/storage/index.js.map +1 -1
  126. package/dist/cjs/storage/interfaces/index.js +15 -2
  127. package/dist/cjs/storage/interfaces/index.js.map +1 -1
  128. package/dist/cjs/storage/setLocalStorage.d.ts +1 -1
  129. package/dist/cjs/storage/setLocalStorage.d.ts.map +1 -1
  130. package/dist/cjs/storage/setLocalStorage.js +4 -1
  131. package/dist/cjs/storage/setLocalStorage.js.map +1 -1
  132. package/dist/cjs/storage/setSessionStorage.d.ts +1 -1
  133. package/dist/cjs/storage/setSessionStorage.d.ts.map +1 -1
  134. package/dist/cjs/storage/setSessionStorage.js +4 -1
  135. package/dist/cjs/storage/setSessionStorage.js.map +1 -1
  136. package/dist/cjs/string/escapeHTML.d.ts +5 -3
  137. package/dist/cjs/string/escapeHTML.d.ts.map +1 -1
  138. package/dist/cjs/string/escapeHTML.js +11 -8
  139. package/dist/cjs/string/escapeHTML.js.map +1 -1
  140. package/dist/cjs/string/index.js +32 -19
  141. package/dist/cjs/string/index.js.map +1 -1
  142. package/dist/cjs/string/interfaces/index.js +15 -2
  143. package/dist/cjs/string/interfaces/index.js.map +1 -1
  144. package/dist/cjs/string/slugify.js +2 -2
  145. package/dist/cjs/string/slugify.js.map +1 -1
  146. package/dist/esm/browser/getCookie.d.ts.map +1 -1
  147. package/dist/esm/browser/getCookie.js +12 -2
  148. package/dist/esm/browser/getCookie.js.map +1 -1
  149. package/dist/esm/browser/getQueryParams.d.ts +1 -1
  150. package/dist/esm/browser/getQueryParams.d.ts.map +1 -1
  151. package/dist/esm/browser/getQueryParams.js +10 -15
  152. package/dist/esm/browser/getQueryParams.js.map +1 -1
  153. package/dist/esm/browser/index.d.ts +2 -0
  154. package/dist/esm/browser/index.d.ts.map +1 -1
  155. package/dist/esm/browser/index.js +2 -0
  156. package/dist/esm/browser/index.js.map +1 -1
  157. package/dist/esm/browser/isPageVisible.d.ts +10 -0
  158. package/dist/esm/browser/isPageVisible.d.ts.map +1 -0
  159. package/dist/esm/browser/isPageVisible.js +10 -0
  160. package/dist/esm/browser/isPageVisible.js.map +1 -0
  161. package/dist/esm/browser/isPushNotificationSupported.d.ts +5 -2
  162. package/dist/esm/browser/isPushNotificationSupported.d.ts.map +1 -1
  163. package/dist/esm/browser/isPushNotificationSupported.js +6 -3
  164. package/dist/esm/browser/isPushNotificationSupported.js.map +1 -1
  165. package/dist/esm/browser/isTabFocused.d.ts +2 -3
  166. package/dist/esm/browser/isTabFocused.d.ts.map +1 -1
  167. package/dist/esm/browser/isTabFocused.js +4 -4
  168. package/dist/esm/browser/isTabFocused.js.map +1 -1
  169. package/dist/esm/browser/pageVisibilityListener.d.ts +12 -0
  170. package/dist/esm/browser/pageVisibilityListener.d.ts.map +1 -0
  171. package/dist/esm/browser/pageVisibilityListener.js +26 -0
  172. package/dist/esm/browser/pageVisibilityListener.js.map +1 -0
  173. package/dist/esm/browser/preferColorScheme.d.ts +4 -2
  174. package/dist/esm/browser/preferColorScheme.d.ts.map +1 -1
  175. package/dist/esm/browser/preferColorScheme.js +4 -2
  176. package/dist/esm/browser/preferColorScheme.js.map +1 -1
  177. package/dist/esm/browser/tabFocusListener.d.ts +3 -6
  178. package/dist/esm/browser/tabFocusListener.d.ts.map +1 -1
  179. package/dist/esm/browser/tabFocusListener.js +4 -16
  180. package/dist/esm/browser/tabFocusListener.js.map +1 -1
  181. package/dist/esm/dateTime/dateAsIso.d.ts +5 -3
  182. package/dist/esm/dateTime/dateAsIso.d.ts.map +1 -1
  183. package/dist/esm/dateTime/dateAsIso.js +5 -3
  184. package/dist/esm/dateTime/dateAsIso.js.map +1 -1
  185. package/dist/esm/dom/addAsyncEventListener.d.ts +2 -2
  186. package/dist/esm/dom/addAsyncEventListener.d.ts.map +1 -1
  187. package/dist/esm/dom/addAsyncEventListener.js +25 -13
  188. package/dist/esm/dom/addAsyncEventListener.js.map +1 -1
  189. package/dist/esm/dom/addClickOutsideListener.d.ts +2 -2
  190. package/dist/esm/dom/addClickOutsideListener.d.ts.map +1 -1
  191. package/dist/esm/dom/addClickOutsideListener.js +8 -4
  192. package/dist/esm/dom/addClickOutsideListener.js.map +1 -1
  193. package/dist/esm/dom/addEventListener.d.ts +5 -3
  194. package/dist/esm/dom/addEventListener.d.ts.map +1 -1
  195. package/dist/esm/dom/addEventListener.js +5 -3
  196. package/dist/esm/dom/addEventListener.js.map +1 -1
  197. package/dist/esm/dom/copyToClipboard.d.ts.map +1 -1
  198. package/dist/esm/dom/copyToClipboard.js +8 -5
  199. package/dist/esm/dom/copyToClipboard.js.map +1 -1
  200. package/dist/esm/dom/createElement.d.ts +6 -3
  201. package/dist/esm/dom/createElement.d.ts.map +1 -1
  202. package/dist/esm/dom/createElement.js +1 -1
  203. package/dist/esm/dom/createElement.js.map +1 -1
  204. package/dist/esm/dom/fireEvent.d.ts +4 -4
  205. package/dist/esm/dom/fireEvent.js +4 -4
  206. package/dist/esm/dom/index.d.ts +1 -0
  207. package/dist/esm/dom/index.d.ts.map +1 -1
  208. package/dist/esm/dom/index.js +1 -0
  209. package/dist/esm/dom/index.js.map +1 -1
  210. package/dist/esm/dom/interfaces/createElement.d.ts +1 -1
  211. package/dist/esm/dom/toggleFullscreenWithFallback.d.ts.map +1 -1
  212. package/dist/esm/dom/toggleFullscreenWithFallback.js +45 -34
  213. package/dist/esm/dom/toggleFullscreenWithFallback.js.map +1 -1
  214. package/dist/esm/dom/types/createElement.d.ts +3 -0
  215. package/dist/esm/dom/types/createElement.d.ts.map +1 -0
  216. package/dist/esm/dom/types/createElement.js +2 -0
  217. package/dist/esm/dom/types/createElement.js.map +1 -0
  218. package/dist/esm/dom/types/index.d.ts +3 -0
  219. package/dist/esm/dom/types/index.d.ts.map +1 -0
  220. package/dist/esm/dom/types/index.js +3 -0
  221. package/dist/esm/dom/types/index.js.map +1 -0
  222. package/dist/esm/dom/types/toggleFullscreenWithFallback.d.ts +15 -0
  223. package/dist/esm/dom/types/toggleFullscreenWithFallback.d.ts.map +1 -0
  224. package/dist/esm/dom/types/toggleFullscreenWithFallback.js +2 -0
  225. package/dist/esm/dom/types/toggleFullscreenWithFallback.js.map +1 -0
  226. package/dist/esm/general/chunk.d.ts +1 -1
  227. package/dist/esm/general/chunk.js +1 -1
  228. package/dist/esm/general/groupBy.js +1 -1
  229. package/dist/esm/general/groupBy.js.map +1 -1
  230. package/dist/esm/general/isEmpty.d.ts.map +1 -1
  231. package/dist/esm/general/isEmpty.js +3 -0
  232. package/dist/esm/general/isEmpty.js.map +1 -1
  233. package/dist/esm/general/isEqual.d.ts +4 -2
  234. package/dist/esm/general/isEqual.d.ts.map +1 -1
  235. package/dist/esm/general/isEqual.js +4 -2
  236. package/dist/esm/general/isEqual.js.map +1 -1
  237. package/dist/esm/schedule/debounce.d.ts +2 -2
  238. package/dist/esm/schedule/debounce.d.ts.map +1 -1
  239. package/dist/esm/schedule/debounce.js +1 -1
  240. package/dist/esm/schedule/interfaces/debounce.d.ts +1 -1
  241. package/dist/esm/schedule/interfaces/debounce.d.ts.map +1 -1
  242. package/dist/esm/schedule/interfaces/throttle.d.ts +1 -1
  243. package/dist/esm/schedule/interfaces/throttle.d.ts.map +1 -1
  244. package/dist/esm/schedule/runAsync.d.ts +5 -3
  245. package/dist/esm/schedule/runAsync.d.ts.map +1 -1
  246. package/dist/esm/schedule/runAsync.js +5 -3
  247. package/dist/esm/schedule/runAsync.js.map +1 -1
  248. package/dist/esm/schedule/throttle.d.ts +2 -2
  249. package/dist/esm/schedule/throttle.d.ts.map +1 -1
  250. package/dist/esm/schedule/throttle.js +1 -1
  251. package/dist/esm/storage/setLocalStorage.d.ts +1 -1
  252. package/dist/esm/storage/setLocalStorage.d.ts.map +1 -1
  253. package/dist/esm/storage/setLocalStorage.js +4 -1
  254. package/dist/esm/storage/setLocalStorage.js.map +1 -1
  255. package/dist/esm/storage/setSessionStorage.d.ts +1 -1
  256. package/dist/esm/storage/setSessionStorage.d.ts.map +1 -1
  257. package/dist/esm/storage/setSessionStorage.js +4 -1
  258. package/dist/esm/storage/setSessionStorage.js.map +1 -1
  259. package/dist/esm/string/escapeHTML.d.ts +5 -3
  260. package/dist/esm/string/escapeHTML.d.ts.map +1 -1
  261. package/dist/esm/string/escapeHTML.js +11 -8
  262. package/dist/esm/string/escapeHTML.js.map +1 -1
  263. package/dist/esm/string/slugify.js +2 -2
  264. package/dist/esm/string/slugify.js.map +1 -1
  265. package/package.json +10 -9
package/README.md CHANGED
@@ -71,65 +71,69 @@ console.log(isValidJson('{"valid": true}')); // true
71
71
 
72
72
  ### 🌐 Browser (`browser`)
73
73
 
74
- Utilities for feature detection, device capabilities, cookies, downloads, URL parameters, and tab focus.
75
-
76
- | Function | Description |
77
- | -------------------------------------------- | --------------------------------------------------------------------- |
78
- | `detectOS()` | Detects user operating system (`'ios'`, `'android'`, `'macos'`, etc.) |
79
- | `isTouchSupported()` | Checks if the current device/browser supports touch events |
80
- | `isPushNotificationSupported()` | Checks if Push Notifications and Service Workers are supported |
81
- | `isScrollBehaviorSupported()` | Checks if native smooth scroll behavior is supported |
82
- | `isShareSupported()` | Checks if the Web Share API (`navigator.share`) is supported |
83
- | `isTabFocused()` | Checks whether the browser tab currently has focus |
84
- | `tabFocusListener(onFocus, onBlur)` | Subscribes callbacks for window/tab focus and blur events |
85
- | `preferColorScheme()` | Detects user color scheme preference (`'dark'`, `'light'`, or `null`) |
86
- | `scrollToElement(element, options)` | Smoothly scrolls the window or container to a target element |
87
- | `scrollToPosition(options)` | Smoothly scrolls to specific x/y coordinates |
88
- | `downloadFile(data, filename, mimeType?)` | Programmatically triggers file download in the browser |
89
- | `getQueryParams(url?)` | Extracts URL search query parameters into a key-value object |
90
- | `networkStatusListener(onOnline, onOffline)` | Subscribes to browser online/offline events with cleanup handle |
91
- | `getCookie(name)` | Retrieves and decodes a cookie value by name |
92
- | `setCookie(name, value, options?)` | Sets a browser cookie with days, path, domain, secure, and sameSite |
93
- | `deleteCookie(name, options?)` | Deletes a browser cookie by name |
74
+ Utilities for feature detection, device capabilities, cookies, downloads, URL parameters, and page visibility.
75
+
76
+ | Function | Description |
77
+ | -------------------------------------------------- | ----------------------------------------------------------------------------------- |
78
+ | `detectOS()` | Detects user operating system (`'ios'`, `'android'`, `'macos'`, etc.) |
79
+ | `isTouchSupported()` | Checks if the current device/browser supports touch events |
80
+ | `isPushNotificationSupported()` | Checks Web Push support (Notification, Service Worker, and PushManager) |
81
+ | `isScrollBehaviorSupported()` | Checks if native smooth scroll behavior is supported |
82
+ | `isShareSupported()` | Checks if the Web Share API (`navigator.share`) is supported |
83
+ | `isPageVisible()` | Checks whether the page is currently visible (`!document.hidden`) |
84
+ | `pageVisibilityListener(onVisible, onHidden)` | Subscribes to Page Visibility changes with a cleanup handle |
85
+ | `isTabFocused()` | Deprecated alias of `isPageVisible` |
86
+ | `tabFocusListener(onVisible, onHidden)` | Deprecated alias of `pageVisibilityListener` |
87
+ | `preferColorScheme()` | Returns `'light'` if that media query matches, otherwise `'dark'` |
88
+ | `preferLightColorScheme()` | Whether `(prefers-color-scheme: light)` matches |
89
+ | `preferDarkColorScheme()` | Whether `(prefers-color-scheme: dark)` matches |
90
+ | `scrollToElement(element, offset?, smoothScroll?)` | Scrolls the window to the element (offset default `0`, smoothScroll default `true`) |
91
+ | `scrollToPosition(x, y, smoothScroll?, target?)` | Scrolls window or a given element to `x`/`y` (smoothScroll default `true`) |
92
+ | `downloadFile(data, filename, mimeType?)` | Programmatically triggers file download in the browser |
93
+ | `getQueryParams(url?)` | Extracts URL search query parameters into a key-value object |
94
+ | `networkStatusListener(onOnline, onOffline)` | Subscribes to browser online/offline events with cleanup handle |
95
+ | `getCookie(name)` | Retrieves and decodes a cookie value by name |
96
+ | `setCookie(name, value, options?)` | Sets a browser cookie with days, path, domain, secure, and sameSite |
97
+ | `deleteCookie(name, options?)` | Deletes a browser cookie by name |
94
98
 
95
99
  ---
96
100
 
97
101
  ### 💾 Storage (`storage`)
98
102
 
99
- Type-safe `localStorage` and `sessionStorage` helpers with automatic JSON serialization and exception safety.
103
+ Type-safe `localStorage` and `sessionStorage` helpers with JSON serialization, optional Base64 encoding, and exception safety.
100
104
 
101
- | Function | Description |
102
- | ----------------------------------- | --------------------------------------------------------------- |
103
- | `getLocalStorage(key, fallback?)` | Retrieves item from localStorage with automatic JSON parsing |
104
- | `setLocalStorage(key, value)` | Stores item in localStorage with automatic JSON serialization |
105
- | `removeLocalStorage(key)` | Removes item from localStorage |
106
- | `clearLocalStorage()` | Clears all items from localStorage |
107
- | `getSessionStorage(key, fallback?)` | Retrieves item from sessionStorage with automatic JSON parsing |
108
- | `setSessionStorage(key, value)` | Stores item in sessionStorage with automatic JSON serialization |
109
- | `removeSessionStorage(key)` | Removes item from sessionStorage |
110
- | `clearSessionStorage()` | Clears all items from sessionStorage |
105
+ | Function | Description |
106
+ | --------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
107
+ | `getLocalStorage(key, fallback?, options?)` | JSON-parses localStorage; optional `{ encode: true }` Base64 decode; fallback default `null` |
108
+ | `setLocalStorage(key, value, options?)` | JSON-serializes to localStorage; optional Base64; returns `false` if the value is not serializable |
109
+ | `removeLocalStorage(key)` | Removes item from localStorage |
110
+ | `clearLocalStorage()` | Clears all items from localStorage |
111
+ | `getSessionStorage(key, fallback?, options?)` | JSON-parses sessionStorage; optional `{ encode: true }` Base64 decode; fallback default `null` |
112
+ | `setSessionStorage(key, value, options?)` | JSON-serializes to sessionStorage; optional Base64; returns `false` if the value is not serializable |
113
+ | `removeSessionStorage(key)` | Removes item from sessionStorage |
114
+ | `clearSessionStorage()` | Clears all items from sessionStorage |
111
115
 
112
116
  ---
113
117
 
114
118
  ### 🧱 DOM (`dom`)
115
119
 
116
- Simplified element creation, async/outside event handling, clipboard operations, viewport detection, layout-shift-free scroll lock, and fullscreen.
117
-
118
- | Function | Description |
119
- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
120
- | `createElement(tagName, props)` | Creates a DOM element with attributes, styles, dataset, ARIA, listeners, and children in a single call |
121
- | `addEventListener(target, type, listener, options)` | Attaches event listener(s) with support for multiple event types and array of targets |
122
- | `addAsyncEventListener(target, type, listener, options)` | Attaches an asynchronous delegated event listener |
123
- | `addClickOutsideListener(element, callback)` | Triggers a callback when clicking outside a specified element |
124
- | `appendBefore(target, element)` | Inserts an element immediately before the target node |
125
- | `appendAfter(target, element)` | Inserts an element immediately after the target node |
126
- | `copyToClipboard(text)` | Copies text to clipboard via Clipboard API with legacy fallback |
127
- | `fireEvent(element, eventName, detail)` | Dispatches a custom or native DOM event |
128
- | `getElementOffset(element)` | Computes top, left, width, and height offsets relative to viewport/document |
129
- | `isInViewport(element, offset?)` | Checks if an element is currently within the visible viewport |
130
- | `toggleFullscreen(element?)` | Toggles native fullscreen mode for an element or document root |
131
- | `toggleFullscreenWithFallback(element?, options?)` | Toggles fullscreen with CSS pseudo-fullscreen fallback for iOS Safari and unsupported browsers |
132
- | `waitForElement(selector, timeout?, parent?)` | Waits for an element to appear in the DOM using `MutationObserver` |
120
+ Simplified element creation, async/outside event handling, clipboard operations, viewport detection, and fullscreen.
121
+
122
+ | Function | Description |
123
+ | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
124
+ | `createElement(tagName, props?)` | Creates a DOM element with attributes, styles, dataset, ARIA, listeners, and children; known tags infer their element type |
125
+ | `addEventListener(element, listeners)` | Attaches a map of event-name handlers to one element or a list of elements (no cleanup) |
126
+ | `addAsyncEventListener(selector, listeners, acceptBubbling?)` | Attaches delegated document listeners for matching elements, with cleanup |
127
+ | `addClickOutsideListener(element, callback)` | Triggers a callback when clicking outside a specified element, with cleanup |
128
+ | `appendBefore(newNode, referenceNode)` | Inserts `newNode` immediately before `referenceNode` |
129
+ | `appendAfter(newNode, referenceNode)` | Inserts `newNode` immediately after `referenceNode` |
130
+ | `copyToClipboard(text)` | Copies text via Clipboard API with textarea fallback; returns `Promise<boolean>` |
131
+ | `fireEvent(element, eventType)` | Dispatches a native `Event` (no `detail` payload) |
132
+ | `getElementOffset(element)` | Returns document-relative `{ top, left }` |
133
+ | `isInViewport(element, offset?)` | Checks if an element is currently within the visible viewport |
134
+ | `toggleFullscreen(element?)` | Toggles native fullscreen mode for an element or document root |
135
+ | `toggleFullscreenWithFallback(element?, options?)` | Toggles fullscreen with CSS pseudo-fullscreen fallback for iOS Safari and unsupported browsers |
136
+ | `waitForElement(selector, timeout?, parent?)` | Waits for an element to appear in the DOM using `MutationObserver` |
133
137
 
134
138
  ---
135
139
 
@@ -137,25 +141,25 @@ Simplified element creation, async/outside event handling, clipboard operations,
137
141
 
138
142
  Case conversions, string transformations, formatting, escaping, masking, and random string generators.
139
143
 
140
- | Function | Description |
141
- | --------------------------------------- | ------------------------------------------------------------------------- |
142
- | `camelCase(value)` | Converts string to `camelCase` |
143
- | `capitalize(value)` | Capitalizes the first character of a string |
144
- | `decodeBase64(value)` | Safely decodes a Base64 string to a Unicode string |
145
- | `encodeBase64(value)` | Safely encodes a Unicode string to a Base64 string |
146
- | `kebabCase(value)` | Converts string to `kebab-case` |
147
- | `pascalCase(value)` | Converts string to `PascalCase` |
148
- | `snakeCase(value)` | Converts string to `snake_case` |
149
- | `slugify(value, separator?)` | Converts text into URL-safe slug with diacritics removal (default `-`) |
150
- | `removeDiacritics(value)` | Strips accent marks and diacritics from text |
151
- | `truncate(value, length, suffix?)` | Truncates a string to a given length and appends a suffix (default `...`) |
152
- | `mask(value, options?)` | Masks sensitive string characters (e.g. for card numbers or tokens) |
153
- | `formatBytes(bytes, decimals?)` | Formats byte number into readable string (`'1.5 MB'`, `'2 KB'`) |
154
- | `escapeHTML(value)` | Escapes HTML entities (`&`, `<`, `>`, `"`, `'`) |
155
- | `unescapeHTML(value)` | Unescapes HTML entities back to plain text |
156
- | `byteSize(value)` | Calculates the byte length of a string in UTF-8 |
157
- | `randomString(length?, charset?)` | Generates random string using `Math.random` |
158
- | `randomCryptoString(length?, charset?)` | Generates cryptographically secure random string using Web Crypto API |
144
+ | Function | Description |
145
+ | --------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
146
+ | `camelCase(value)` | Converts string to `camelCase` |
147
+ | `capitalize(value)` | Capitalizes the first character of a string |
148
+ | `decodeBase64(value)` | Safely decodes a Base64 string to a Unicode string |
149
+ | `encodeBase64(value)` | Safely encodes a Unicode string to a Base64 string |
150
+ | `kebabCase(value)` | Converts string to `kebab-case` |
151
+ | `pascalCase(value)` | Converts string to `PascalCase` |
152
+ | `snakeCase(value)` | Converts string to `snake_case` |
153
+ | `slugify(value, separator?)` | Converts text into URL-safe slug with diacritics removal (default `-`) |
154
+ | `removeDiacritics(value)` | Strips accent marks and diacritics from text |
155
+ | `truncate(value, maxLength, suffix?)` | Truncates a string to a given length and appends a suffix (default `...`) |
156
+ | `mask(value, options?)` | Masks sensitive string characters (e.g. for card numbers or tokens) |
157
+ | `formatBytes(bytes, decimals?)` | Formats byte number into readable string (`'1.5 MB'`, `'2 KB'`) |
158
+ | `escapeHTML(value)` | Encodes `&`, `<`, `>`, `"`, and `'` as HTML entities for ordinary text or quoted attributes; not a sanitizer |
159
+ | `unescapeHTML(value)` | Unescapes HTML entities back to plain text |
160
+ | `byteSize(value)` | Calculates the byte length of a string in UTF-8 |
161
+ | `randomString(length?, charset?)` | Generates random string using `Math.random` |
162
+ | `randomCryptoString(length?, charset?)` | Generates cryptographically secure random string using Web Crypto API |
159
163
 
160
164
  ---
161
165
 
@@ -163,30 +167,30 @@ Case conversions, string transformations, formatting, escaping, masking, and ran
163
167
 
164
168
  Date formatting, duration parsing, relative time, and calendar day comparison.
165
169
 
166
- | Function | Description |
167
- | ----------------------------- | ------------------------------------------------------------------------------- |
168
- | `parseDuration(durationInMs)` | Breaks down milliseconds into `{ days, hours, minutes, seconds, milliseconds }` |
169
- | `dateAsIso(date?)` | Formats a Date object as an ISO string (`YYYY-MM-DDTHH:mm:ss.sssZ`) |
170
- | `timeAgo(date, locale?)` | Formats a date into a human-readable relative string (`'5 minutes ago'`) |
171
- | `isSameDay(date1, date2)` | Checks if two dates fall on the same calendar day |
170
+ | Function | Description |
171
+ | ----------------------------- | ------------------------------------------------------------------------------------ |
172
+ | `parseDuration(durationInMs)` | Breaks down milliseconds into `{ days, hours, minutes, seconds, milliseconds }` |
173
+ | `dateAsIso(date)` | Formats a Date as local `YYYY-MM-DDTHH:mm:ss±HH:mm` (required Date; no milliseconds) |
174
+ | `timeAgo(date, locale?)` | Formats a date into a human-readable relative string (`'5 minutes ago'`) |
175
+ | `isSameDay(date1, date2)` | Checks if two Date, timestamp, or date-string values fall on the same calendar day |
172
176
 
173
177
  ---
174
178
 
175
179
  ### ⚙️ General (`general`)
176
180
 
177
- Array deduplication, picking, grouping & chunking, deep equality, number clamping, value safety checks, and JSON validation.
181
+ Array deduplication, picking, grouping & chunking, value comparison, number clamping, value safety checks, and JSON validation.
178
182
 
179
- | Function | Description |
180
- | ------------------------ | ------------------------------------------------------- |
181
- | `pick(object, keys)` | Creates object composed of picked object properties |
182
- | `unique(array, keyFn?)` | Deduplicates array items by reference or key callback |
183
- | `isEqual(a, b)` | Performs deep structural comparison between two values |
184
- | `clamp(value, min, max)` | Constrains a number between min and max boundaries |
185
- | `groupBy(array, keyFn)` | Groups array elements into an object by key |
186
- | `chunk(array, size?)` | Splits array into chunks of specified size |
187
- | `isEmpty(value)` | Checks if a string, array, map, set, or object is empty |
188
- | `isNil(value)` | Checks if a value is `null` or `undefined` |
189
- | `isValidJson(value)` | Validates whether a given string is valid JSON |
183
+ | Function | Description |
184
+ | ------------------------ | --------------------------------------------------------------------------- |
185
+ | `pick(object, keys)` | Creates object composed of picked object properties |
186
+ | `unique(array, keyFn?)` | Deduplicates array items by reference or key callback |
187
+ | `isEqual(a, b)` | Compares primitives, arrays, Dates, RegExps, and own enumerable string keys |
188
+ | `clamp(value, min, max)` | Constrains a number between min and max boundaries |
189
+ | `groupBy(array, keyFn)` | Groups array elements into an object by key |
190
+ | `chunk(array, size?)` | Splits array into chunks of specified size (default `1`) |
191
+ | `isEmpty(value)` | Checks if a string, array, map, set, or object is empty |
192
+ | `isNil(value)` | Checks if a value is `null` or `undefined` |
193
+ | `isValidJson(value)` | Validates whether a given string is valid JSON |
190
194
 
191
195
  ---
192
196
 
@@ -194,14 +198,14 @@ Array deduplication, picking, grouping & chunking, deep equality, number clampin
194
198
 
195
199
  Debouncing, throttling, async retry, sleep, and animation frames.
196
200
 
197
- | Function | Description |
198
- | ------------------------------------ | ------------------------------------------------------------------------------ |
199
- | `debounce(fn, delay?)` | Creates debounced function with `.cancel()` handle |
200
- | `throttle(fn, limit?)` | Creates throttled function with `.cancel()` handle |
201
- | `sleep(ms)` | Promise-based delay helper (`await sleep(500)`) |
202
- | `retry(fn, options?)` | Retries async function with exponential backoff before failing |
203
- | `runAnimation(callback, autoStart?)` | Executes a callback with `requestAnimationFrame` and returns a cancel function |
204
- | `runAsync(callback)` | Runs a callback asynchronously in a Web Worker |
201
+ | Function | Description |
202
+ | ------------------------------------ | -------------------------------------------------------------------------- |
203
+ | `debounce(fn, delay?)` | Creates debounced function with `.cancel()` (delay default `300`) |
204
+ | `throttle(fn, limit?)` | Creates throttled function with `.cancel()` (limit default `300`) |
205
+ | `sleep(ms)` | Promise-based delay helper (`await sleep(500)`) |
206
+ | `retry(fn, options?)` | Retries async function with exponential backoff before failing |
207
+ | `runAnimation(callback, autoStart?)` | `requestAnimationFrame` loop; returns `{ startAnimation, stopAnimation }` |
208
+ | `runAsync(callback)` | Runs function source in a Blob Web Worker (no closures; async not awaited) |
205
209
 
206
210
  ---
207
211
 
@@ -1 +1 @@
1
- {"version":3,"file":"getCookie.d.ts","sourceRoot":"","sources":["../../../src/browser/getCookie.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAIjD,CAAC"}
1
+ {"version":3,"file":"getCookie.d.ts","sourceRoot":"","sources":["../../../src/browser/getCookie.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAiBjD,CAAC"}
@@ -8,8 +8,18 @@ exports.getCookie = void 0;
8
8
  * @returns Decoded cookie value or null if not found
9
9
  */
10
10
  const getCookie = (name) => {
11
- const match = document.cookie.match(new RegExp(`(?:^|;\\s*)${encodeURIComponent(name)}=([^;]*)`));
12
- return match ? decodeURIComponent(match[1]) : null;
11
+ const encodedName = encodeURIComponent(name);
12
+ for (const part of document.cookie.split(';')) {
13
+ const entry = part.trim();
14
+ const separatorIndex = entry.indexOf('=');
15
+ if (separatorIndex === -1) {
16
+ continue;
17
+ }
18
+ if (entry.slice(0, separatorIndex) === encodedName) {
19
+ return decodeURIComponent(entry.slice(separatorIndex + 1));
20
+ }
21
+ }
22
+ return null;
13
23
  };
14
24
  exports.getCookie = getCookie;
15
25
  //# sourceMappingURL=getCookie.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getCookie.js","sourceRoot":"","sources":["../../../src/browser/getCookie.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,SAAS,GAAG,CAAC,IAAY,EAAiB,EAAE;IACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAElG,OAAO,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC,CAAC;AAJW,QAAA,SAAS,aAIpB"}
1
+ {"version":3,"file":"getCookie.js","sourceRoot":"","sources":["../../../src/browser/getCookie.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,SAAS,GAAG,CAAC,IAAY,EAAiB,EAAE;IACvD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE1C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,WAAW,EAAE,CAAC;YACnD,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAjBW,QAAA,SAAS,aAiBpB"}
@@ -2,7 +2,7 @@
2
2
  * Extract query parameters from URL into a key-value record
3
3
  *
4
4
  * @param url Optional URL string (defaults to window.location.href)
5
- * @returns Record of query parameters
5
+ * @returns Record of query parameters; empty if the URL is invalid or has no search
6
6
  */
7
7
  export declare const getQueryParams: (url?: string) => Record<string, string>;
8
8
  //# sourceMappingURL=getQueryParams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getQueryParams.d.ts","sourceRoot":"","sources":["../../../src/browser/getQueryParams.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAqBlE,CAAC"}
1
+ {"version":3,"file":"getQueryParams.d.ts","sourceRoot":"","sources":["../../../src/browser/getQueryParams.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAalE,CAAC"}
@@ -5,24 +5,19 @@ exports.getQueryParams = void 0;
5
5
  * Extract query parameters from URL into a key-value record
6
6
  *
7
7
  * @param url Optional URL string (defaults to window.location.href)
8
- * @returns Record of query parameters
8
+ * @returns Record of query parameters; empty if the URL is invalid or has no search
9
9
  */
10
10
  const getQueryParams = (url) => {
11
- let search = url
12
- ? url.includes('?')
13
- ? url.substring(url.indexOf('?'))
14
- : ''
15
- : typeof window !== 'undefined'
16
- ? window.location.search
17
- : '';
18
- if (search.includes('#')) {
19
- search = search.substring(0, search.indexOf('#'));
20
- }
21
- const params = new URLSearchParams(search);
22
11
  const result = {};
23
- params.forEach((value, key) => {
24
- result[key] = value;
25
- });
12
+ const base = typeof window !== 'undefined' ? window.location.href : 'http://localhost/';
13
+ try {
14
+ new URL(url ?? base, base).searchParams.forEach((value, key) => {
15
+ result[key] = value;
16
+ });
17
+ }
18
+ catch {
19
+ return result;
20
+ }
26
21
  return result;
27
22
  };
28
23
  exports.getQueryParams = getQueryParams;
@@ -1 +1 @@
1
- {"version":3,"file":"getQueryParams.js","sourceRoot":"","sources":["../../../src/browser/getQueryParams.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,cAAc,GAAG,CAAC,GAAY,EAA0B,EAAE;IACrE,IAAI,MAAM,GAAG,GAAG;QACd,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YACjB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC,CAAC,EAAE;QACN,CAAC,CAAC,OAAO,MAAM,KAAK,WAAW;YAC7B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;YACxB,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AArBW,QAAA,cAAc,kBAqBzB"}
1
+ {"version":3,"file":"getQueryParams.js","sourceRoot":"","sources":["../../../src/browser/getQueryParams.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,cAAc,GAAG,CAAC,GAAY,EAA0B,EAAE;IACrE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAExF,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC7D,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAbW,QAAA,cAAc,kBAazB"}
@@ -4,12 +4,14 @@ export * from './detectOS.js';
4
4
  export * from './downloadFile.js';
5
5
  export * from './getCookie.js';
6
6
  export * from './getQueryParams.js';
7
+ export * from './isPageVisible.js';
7
8
  export * from './isPushNotificationSupported.js';
8
9
  export * from './isScrollBehaviorSupported.js';
9
10
  export * from './isShareSupported.js';
10
11
  export * from './isTabFocused.js';
11
12
  export * from './isTouchSupported.js';
12
13
  export * from './networkStatusListener.js';
14
+ export * from './pageVisibilityListener.js';
13
15
  export * from './preferColorScheme.js';
14
16
  export * from './scrollToElement.js';
15
17
  export * from './scrollToPosition.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AAEtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AAEtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
@@ -1,21 +1,36 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./interfaces/index.js"), exports);
5
- tslib_1.__exportStar(require("./deleteCookie.js"), exports);
6
- tslib_1.__exportStar(require("./detectOS.js"), exports);
7
- tslib_1.__exportStar(require("./downloadFile.js"), exports);
8
- tslib_1.__exportStar(require("./getCookie.js"), exports);
9
- tslib_1.__exportStar(require("./getQueryParams.js"), exports);
10
- tslib_1.__exportStar(require("./isPushNotificationSupported.js"), exports);
11
- tslib_1.__exportStar(require("./isScrollBehaviorSupported.js"), exports);
12
- tslib_1.__exportStar(require("./isShareSupported.js"), exports);
13
- tslib_1.__exportStar(require("./isTabFocused.js"), exports);
14
- tslib_1.__exportStar(require("./isTouchSupported.js"), exports);
15
- tslib_1.__exportStar(require("./networkStatusListener.js"), exports);
16
- tslib_1.__exportStar(require("./preferColorScheme.js"), exports);
17
- tslib_1.__exportStar(require("./scrollToElement.js"), exports);
18
- tslib_1.__exportStar(require("./scrollToPosition.js"), exports);
19
- tslib_1.__exportStar(require("./setCookie.js"), exports);
20
- tslib_1.__exportStar(require("./tabFocusListener.js"), exports);
17
+ __exportStar(require("./interfaces/index.js"), exports);
18
+ __exportStar(require("./deleteCookie.js"), exports);
19
+ __exportStar(require("./detectOS.js"), exports);
20
+ __exportStar(require("./downloadFile.js"), exports);
21
+ __exportStar(require("./getCookie.js"), exports);
22
+ __exportStar(require("./getQueryParams.js"), exports);
23
+ __exportStar(require("./isPageVisible.js"), exports);
24
+ __exportStar(require("./isPushNotificationSupported.js"), exports);
25
+ __exportStar(require("./isScrollBehaviorSupported.js"), exports);
26
+ __exportStar(require("./isShareSupported.js"), exports);
27
+ __exportStar(require("./isTabFocused.js"), exports);
28
+ __exportStar(require("./isTouchSupported.js"), exports);
29
+ __exportStar(require("./networkStatusListener.js"), exports);
30
+ __exportStar(require("./pageVisibilityListener.js"), exports);
31
+ __exportStar(require("./preferColorScheme.js"), exports);
32
+ __exportStar(require("./scrollToElement.js"), exports);
33
+ __exportStar(require("./scrollToPosition.js"), exports);
34
+ __exportStar(require("./setCookie.js"), exports);
35
+ __exportStar(require("./tabFocusListener.js"), exports);
21
36
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC;AAEtC,4DAAkC;AAClC,wDAA8B;AAC9B,4DAAkC;AAClC,yDAA+B;AAC/B,8DAAoC;AACpC,2EAAiD;AACjD,yEAA+C;AAC/C,gEAAsC;AACtC,4DAAkC;AAClC,gEAAsC;AACtC,qEAA2C;AAC3C,iEAAuC;AACvC,+DAAqC;AACrC,gEAAsC;AACtC,yDAA+B;AAC/B,gEAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AAEtC,oDAAkC;AAClC,gDAA8B;AAC9B,oDAAkC;AAClC,iDAA+B;AAC/B,sDAAoC;AACpC,qDAAmC;AACnC,mEAAiD;AACjD,iEAA+C;AAC/C,wDAAsC;AACtC,oDAAkC;AAClC,wDAAsC;AACtC,6DAA2C;AAC3C,8DAA4C;AAC5C,yDAAuC;AACvC,uDAAqC;AACrC,wDAAsC;AACtC,iDAA+B;AAC/B,wDAAsC"}
@@ -1,7 +1,20 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./detectOS.js"), exports);
5
- tslib_1.__exportStar(require("./isTouchSupported.js"), exports);
6
- tslib_1.__exportStar(require("./setCookie.js"), exports);
17
+ __exportStar(require("./detectOS.js"), exports);
18
+ __exportStar(require("./isTouchSupported.js"), exports);
19
+ __exportStar(require("./setCookie.js"), exports);
7
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/interfaces/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,gEAAsC;AACtC,yDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,wDAAsC;AACtC,iDAA+B"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Check whether the page is currently visible
3
+ *
4
+ * Uses the Page Visibility API (`document.hidden`). This is not window or tab
5
+ * input focus.
6
+ *
7
+ * @returns Whether the document is currently visible
8
+ */
9
+ export declare const isPageVisible: () => boolean;
10
+ //# sourceMappingURL=isPageVisible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPageVisible.d.ts","sourceRoot":"","sources":["../../../src/browser/isPageVisible.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,QAAO,OAA2B,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPageVisible = void 0;
4
+ /**
5
+ * Check whether the page is currently visible
6
+ *
7
+ * Uses the Page Visibility API (`document.hidden`). This is not window or tab
8
+ * input focus.
9
+ *
10
+ * @returns Whether the document is currently visible
11
+ */
12
+ const isPageVisible = () => !document.hidden;
13
+ exports.isPageVisible = isPageVisible;
14
+ //# sourceMappingURL=isPageVisible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPageVisible.js","sourceRoot":"","sources":["../../../src/browser/isPageVisible.ts"],"names":[],"mappings":";;;AAAA;;;;;;;GAOG;AACI,MAAM,aAAa,GAAG,GAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAhD,QAAA,aAAa,iBAAmC"}
@@ -1,7 +1,10 @@
1
1
  /**
2
- * Check if user's browser supports push notifications
2
+ * Check whether the environment supports the Web Push API
3
3
  *
4
- * @returns Boolean indicating if user's browser supports push notifications
4
+ * Requires Notification, Service Worker, and PushManager. Does not check
5
+ * permission and does not register a service worker.
6
+ *
7
+ * @returns Whether Web Push is supported
5
8
  */
6
9
  export declare const isPushNotificationSupported: () => boolean;
7
10
  //# sourceMappingURL=isPushNotificationSupported.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isPushNotificationSupported.d.ts","sourceRoot":"","sources":["../../../src/browser/isPushNotificationSupported.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAAO,OACa,CAAC"}
1
+ {"version":3,"file":"isPushNotificationSupported.d.ts","sourceRoot":"","sources":["../../../src/browser/isPushNotificationSupported.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,QAAO,OACsC,CAAC"}
@@ -2,10 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isPushNotificationSupported = void 0;
4
4
  /**
5
- * Check if user's browser supports push notifications
5
+ * Check whether the environment supports the Web Push API
6
6
  *
7
- * @returns Boolean indicating if user's browser supports push notifications
7
+ * Requires Notification, Service Worker, and PushManager. Does not check
8
+ * permission and does not register a service worker.
9
+ *
10
+ * @returns Whether Web Push is supported
8
11
  */
9
- const isPushNotificationSupported = () => !!(window.Notification || 'webkitNotifications' in window);
12
+ const isPushNotificationSupported = () => 'Notification' in window && 'serviceWorker' in navigator && 'PushManager' in window;
10
13
  exports.isPushNotificationSupported = isPushNotificationSupported;
11
14
  //# sourceMappingURL=isPushNotificationSupported.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isPushNotificationSupported.js","sourceRoot":"","sources":["../../../src/browser/isPushNotificationSupported.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACI,MAAM,2BAA2B,GAAG,GAAY,EAAE,CACvD,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,qBAAqB,IAAI,MAAM,CAAC,CAAC;AADhD,QAAA,2BAA2B,+BACqB"}
1
+ {"version":3,"file":"isPushNotificationSupported.js","sourceRoot":"","sources":["../../../src/browser/isPushNotificationSupported.ts"],"names":[],"mappings":";;;AAAA;;;;;;;GAOG;AACI,MAAM,2BAA2B,GAAG,GAAY,EAAE,CACvD,cAAc,IAAI,MAAM,IAAI,eAAe,IAAI,SAAS,IAAI,aAAa,IAAI,MAAM,CAAC;AADzE,QAAA,2BAA2B,+BAC8C"}
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Check if current browser tab is in focus
3
- *
4
- * @returns Boolean indicating if current browser tab is in focus
2
+ * @deprecated Use {@link isPageVisible}. Same as `!document.hidden`; not window
3
+ * or tab input focus.
5
4
  */
6
5
  export declare const isTabFocused: () => boolean;
7
6
  //# sourceMappingURL=isTabFocused.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isTabFocused.d.ts","sourceRoot":"","sources":["../../../src/browser/isTabFocused.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAO,OAA2B,CAAC"}
1
+ {"version":3,"file":"isTabFocused.d.ts","sourceRoot":"","sources":["../../../src/browser/isTabFocused.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,YAAY,eAAgB,CAAC"}
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isTabFocused = void 0;
4
+ const isPageVisible_js_1 = require("./isPageVisible.js");
4
5
  /**
5
- * Check if current browser tab is in focus
6
- *
7
- * @returns Boolean indicating if current browser tab is in focus
6
+ * @deprecated Use {@link isPageVisible}. Same as `!document.hidden`; not window
7
+ * or tab input focus.
8
8
  */
9
- const isTabFocused = () => !document.hidden;
10
- exports.isTabFocused = isTabFocused;
9
+ exports.isTabFocused = isPageVisible_js_1.isPageVisible;
11
10
  //# sourceMappingURL=isTabFocused.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isTabFocused.js","sourceRoot":"","sources":["../../../src/browser/isTabFocused.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACI,MAAM,YAAY,GAAG,GAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAA/C,QAAA,YAAY,gBAAmC"}
1
+ {"version":3,"file":"isTabFocused.js","sourceRoot":"","sources":["../../../src/browser/isTabFocused.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AAEnD;;;GAGG;AACU,QAAA,YAAY,GAAG,gCAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Subscribe to Page Visibility changes
3
+ *
4
+ * Uses `visibilitychange` and `document.hidden`. This is not window focus or
5
+ * blur.
6
+ *
7
+ * @param onVisible Called when the page becomes visible
8
+ * @param onHidden Called when the page becomes hidden
9
+ * @returns Cleanup function to remove the listener
10
+ */
11
+ export declare const pageVisibilityListener: (onVisible?: () => void, onHidden?: () => void) => (() => void);
12
+ //# sourceMappingURL=pageVisibilityListener.d.ts.map