tiny-essentials 1.28.19 → 1.29.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 (555) hide show
  1. package/README.md +1 -1
  2. package/changelog/1/28/19.md +24 -0
  3. package/changelog/1/29/0.md +58 -0
  4. package/dist/v1/ColorSafeStringify.min.js +1 -1
  5. package/dist/v1/TinyAdvancedRaffle.min.js +1 -1
  6. package/dist/v1/TinyAfterScrollWatcher.min.js +1 -1
  7. package/dist/v1/TinyAnalogClock.min.js +1 -1
  8. package/dist/v1/TinyArrayComparator.min.js +1 -1
  9. package/dist/v1/TinyArrayPaginator.min.js +1 -1
  10. package/dist/v1/TinyBasicsEs.min.js +1 -1
  11. package/dist/v1/TinyBrowserMonitor.min.js +1 -0
  12. package/dist/v1/TinyClassManager.min.js +1 -1
  13. package/dist/v1/TinyClipboard.min.js +1 -1
  14. package/dist/v1/TinyCloner.min.js +1 -0
  15. package/dist/v1/TinyColorConverter.min.js +1 -1
  16. package/dist/v1/TinyColorValidator.min.js +1 -1
  17. package/dist/v1/TinyCookieConsent.min.js +1 -1
  18. package/dist/v1/TinyDayNightCycle.min.js +1 -1
  19. package/dist/v1/TinyDebugger.min.js +1 -1
  20. package/dist/v1/TinyDomReadyManager.min.js +1 -1
  21. package/dist/v1/TinyDragDropDetector.min.js +1 -1
  22. package/dist/v1/TinyDragger.min.js +1 -1
  23. package/dist/v1/TinyElementObserver.min.js +1 -1
  24. package/dist/v1/TinyEssentials.min.js +1 -1
  25. package/dist/v1/TinyGamepad.min.js +1 -1
  26. package/dist/v1/TinyHtml.min.js +1 -1
  27. package/dist/v1/TinyHtmlTagRegexBuilder.min.js +1 -0
  28. package/dist/v1/TinyHttpResponseRegistry.min.js +1 -0
  29. package/dist/v1/TinyI18.min.js +1 -1
  30. package/dist/v1/TinyIframeEvents.min.js +1 -1
  31. package/dist/v1/TinyInventory.min.js +1 -1
  32. package/dist/v1/TinyInventoryTrader.min.js +1 -1
  33. package/dist/v1/TinyLevelUp.min.js +1 -1
  34. package/dist/v1/TinyLoadingScreen.min.js +1 -1
  35. package/dist/v1/TinyLocalStorage.min.js +1 -1
  36. package/dist/v1/TinyMaInSys.min.js +1 -1
  37. package/dist/v1/TinyMapCache.min.js +1 -0
  38. package/dist/v1/TinyMediaPlayer.min.js +1 -1
  39. package/dist/v1/TinyNeedBar.min.js +1 -1
  40. package/dist/v1/TinyNewWinEvents.min.js +1 -1
  41. package/dist/v1/TinyNotificationAdapter.min.js +1 -0
  42. package/dist/v1/TinyNotifications.min.js +1 -1
  43. package/dist/v1/TinyNotifyCenter.min.js +1 -1
  44. package/dist/v1/TinyOPFSFileSystem.min.js +1 -0
  45. package/dist/v1/TinyPasswordValidator.min.js +1 -0
  46. package/dist/v1/TinyPluginPackage.min.js +1 -0
  47. package/dist/v1/TinyPromiseQueue.min.js +1 -1
  48. package/dist/v1/TinyPushManager.min.js +1 -0
  49. package/dist/v1/TinyPushPayload.min.js +1 -0
  50. package/dist/v1/TinyPushRouter.min.js +1 -0
  51. package/dist/v1/TinyRadioFm.min.js +1 -1
  52. package/dist/v1/TinyRateLimiter.min.js +1 -1
  53. package/dist/v1/TinyRegexEs.min.js +1 -0
  54. package/dist/v1/TinyRouter.min.js +1 -0
  55. package/dist/v1/TinyServiceWorker.min.js +1 -0
  56. package/dist/v1/TinyServiceWorkerEngine.min.js +1 -0
  57. package/dist/v1/TinySetMapPackage.min.js +1 -0
  58. package/dist/v1/TinySimpleDice.min.js +1 -1
  59. package/dist/v1/TinySmartScroller.min.js +1 -1
  60. package/dist/v1/TinyStorageBucketFileSystem.min.js +1 -0
  61. package/dist/v1/TinyTextDiffer.min.js +1 -1
  62. package/dist/v1/TinyTextRangeEditor.min.js +1 -1
  63. package/dist/v1/TinyTextarea.min.js +1 -1
  64. package/dist/v1/TinyThrottledApi.min.js +1 -0
  65. package/dist/v1/TinyTimeout.min.js +1 -1
  66. package/dist/v1/TinyToastNotify.min.js +1 -1
  67. package/dist/v1/TinyUploadClicker.min.js +1 -1
  68. package/dist/v1/TinyUriParser.min.js +1 -0
  69. package/dist/v1/TinyVersion.min.js +1 -0
  70. package/dist/v1/TinyWebWorker.min.js +1 -0
  71. package/dist/v1/TinyWebWorkerEngine.min.js +1 -0
  72. package/dist/v1/UltraRandomMsgGen.min.js +1 -1
  73. package/dist/v1/basics/array.cjs +2 -2
  74. package/dist/v1/basics/array.d.mts +2 -0
  75. package/dist/v1/basics/array.d.mts.map +1 -1
  76. package/dist/v1/basics/array.mjs +2 -1
  77. package/dist/v1/basics/browserDetector.cjs +37 -12
  78. package/dist/v1/basics/browserDetector.d.mts +8 -0
  79. package/dist/v1/basics/browserDetector.d.mts.map +1 -1
  80. package/dist/v1/basics/browserDetector.mjs +32 -13
  81. package/dist/v1/basics/crypto.cjs +23 -0
  82. package/dist/v1/basics/crypto.d.mts +10 -0
  83. package/dist/v1/basics/crypto.d.mts.map +1 -0
  84. package/dist/v1/basics/crypto.mjs +18 -0
  85. package/dist/v1/basics/html.cjs +0 -3
  86. package/dist/v1/basics/html.d.mts.map +1 -1
  87. package/dist/v1/basics/html.mjs +0 -2
  88. package/dist/v1/basics/index.cjs +8 -1
  89. package/dist/v1/basics/index.d.mts +6 -5
  90. package/dist/v1/basics/index.d.mts.map +1 -1
  91. package/dist/v1/basics/index.mjs +6 -5
  92. package/dist/v1/basics/objChecker.cjs +88 -0
  93. package/dist/v1/basics/objChecker.d.mts +26 -0
  94. package/dist/v1/basics/objChecker.d.mts.map +1 -1
  95. package/dist/v1/basics/objChecker.mjs +74 -0
  96. package/dist/v1/basics/objFilter.cjs +234 -93
  97. package/dist/v1/basics/objFilter.d.mts +96 -22
  98. package/dist/v1/basics/objFilter.d.mts.map +1 -1
  99. package/dist/v1/basics/objFilter.mjs +216 -92
  100. package/dist/v1/basics/promiseUtils.cjs +48 -12
  101. package/dist/v1/basics/promiseUtils.d.mts +45 -12
  102. package/dist/v1/basics/promiseUtils.d.mts.map +1 -1
  103. package/dist/v1/basics/promiseUtils.mjs +47 -12
  104. package/dist/v1/basics/text.cjs +0 -12
  105. package/dist/v1/basics/text.d.mts +0 -10
  106. package/dist/v1/basics/text.d.mts.map +1 -1
  107. package/dist/v1/basics/text.mjs +0 -10
  108. package/dist/v1/index.cjs +88 -3
  109. package/dist/v1/index.d.mts +31 -6
  110. package/dist/v1/index.d.mts.map +1 -1
  111. package/dist/v1/index.mjs +32 -7
  112. package/dist/v1/jsdoc/EventEmitter.cjs +4 -0
  113. package/dist/v1/jsdoc/EventEmitter.d.mts +33 -0
  114. package/dist/v1/jsdoc/EventEmitter.d.mts.map +1 -0
  115. package/dist/v1/jsdoc/EventEmitter.mjs +18 -0
  116. package/dist/v1/libs/array/TinyArrayComparator.cjs +240 -25
  117. package/dist/v1/libs/array/TinyArrayComparator.d.mts +130 -22
  118. package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -1
  119. package/dist/v1/libs/array/TinyArrayComparator.mjs +210 -24
  120. package/dist/v1/libs/fs/constants.cjs +74 -0
  121. package/dist/v1/libs/fs/constants.d.mts +22 -0
  122. package/dist/v1/libs/fs/constants.d.mts.map +1 -0
  123. package/dist/v1/libs/fs/constants.mjs +53 -0
  124. package/dist/v1/libs/fs/encoding.cjs +118 -0
  125. package/dist/v1/libs/fs/encoding.d.mts +50 -0
  126. package/dist/v1/libs/fs/encoding.d.mts.map +1 -0
  127. package/dist/v1/libs/fs/encoding.mjs +102 -0
  128. package/dist/v1/libs/fs/error.cjs +188 -0
  129. package/dist/v1/libs/fs/error.d.mts +105 -0
  130. package/dist/v1/libs/fs/error.d.mts.map +1 -0
  131. package/dist/v1/libs/fs/error.mjs +158 -0
  132. package/dist/v1/libs/fs/handle.cjs +121 -0
  133. package/dist/v1/libs/fs/handle.d.mts +56 -0
  134. package/dist/v1/libs/fs/handle.d.mts.map +1 -0
  135. package/dist/v1/libs/fs/handle.mjs +100 -0
  136. package/dist/v1/libs/fs/index.cjs +700 -0
  137. package/dist/v1/libs/fs/index.d.mts +377 -0
  138. package/dist/v1/libs/fs/index.d.mts.map +1 -0
  139. package/dist/v1/libs/fs/index.mjs +630 -0
  140. package/dist/v1/libs/fs/path.cjs +234 -0
  141. package/dist/v1/libs/fs/path.d.mts +176 -0
  142. package/dist/v1/libs/fs/path.d.mts.map +1 -0
  143. package/dist/v1/libs/fs/path.mjs +197 -0
  144. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +202 -0
  145. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +121 -0
  146. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -0
  147. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +172 -0
  148. package/dist/v1/libs/fs/plugins/OPFS/index.cjs +334 -0
  149. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +98 -0
  150. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -0
  151. package/dist/v1/libs/fs/plugins/OPFS/index.mjs +300 -0
  152. package/dist/v1/libs/fs/stats.cjs +245 -0
  153. package/dist/v1/libs/fs/stats.d.mts +226 -0
  154. package/dist/v1/libs/fs/stats.d.mts.map +1 -0
  155. package/dist/v1/libs/fs/stats.mjs +197 -0
  156. package/dist/v1/libs/html/events/TinyIframeEvents.cjs +10 -1
  157. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts +9 -2
  158. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -1
  159. package/dist/v1/libs/html/events/TinyIframeEvents.mjs +8 -1
  160. package/dist/v1/libs/html/events/TinyNewWinEvents.cjs +14 -3
  161. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts +21 -5
  162. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -1
  163. package/dist/v1/libs/html/events/TinyNewWinEvents.mjs +12 -3
  164. package/dist/v1/libs/html/scroll/TinySmartScroller.cjs +13 -1
  165. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts +29 -2
  166. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -1
  167. package/dist/v1/libs/html/scroll/TinySmartScroller.mjs +11 -1
  168. package/dist/v1/libs/math/TinyAdvancedRaffle.cjs +13 -1
  169. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts +32 -2
  170. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -1
  171. package/dist/v1/libs/math/TinyAdvancedRaffle.mjs +11 -1
  172. package/dist/v1/libs/math/TinyTimeout.cjs +0 -14
  173. package/dist/v1/libs/math/TinyTimeout.d.mts +0 -11
  174. package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -1
  175. package/dist/v1/libs/math/TinyTimeout.mjs +0 -13
  176. package/dist/v1/libs/media/TinyMediaPlayer/index.cjs +25 -1
  177. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts +35 -2
  178. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -1
  179. package/dist/v1/libs/media/TinyMediaPlayer/index.mjs +23 -1
  180. package/dist/v1/libs/media/TinyMediaPlayer.cjs +2 -2
  181. package/dist/v1/libs/media/TinyMediaPlayer.d.mts +2 -2
  182. package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -1
  183. package/dist/v1/libs/media/TinyMediaPlayer.mjs +2 -2
  184. package/dist/v1/libs/media/TinyRadioFm.cjs +19 -1
  185. package/dist/v1/libs/media/TinyRadioFm.d.mts +78 -2
  186. package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -1
  187. package/dist/v1/libs/media/TinyRadioFm.mjs +17 -1
  188. package/dist/v1/libs/plugin/TinyPlugin.cjs +1630 -0
  189. package/dist/v1/libs/plugin/TinyPlugin.d.mts +753 -0
  190. package/dist/v1/libs/plugin/TinyPlugin.d.mts.map +1 -0
  191. package/dist/v1/libs/plugin/TinyPlugin.mjs +1376 -0
  192. package/dist/v1/libs/plugin/TinyVersion.cjs +204 -0
  193. package/dist/v1/libs/plugin/TinyVersion.d.mts +70 -0
  194. package/dist/v1/libs/plugin/TinyVersion.d.mts.map +1 -0
  195. package/dist/v1/libs/plugin/TinyVersion.mjs +179 -0
  196. package/dist/v1/libs/router/TinyRouter.cjs +661 -0
  197. package/dist/v1/libs/router/TinyRouter.d.mts +320 -0
  198. package/dist/v1/libs/router/TinyRouter.d.mts.map +1 -0
  199. package/dist/v1/libs/router/TinyRouter.mjs +572 -0
  200. package/dist/v1/libs/storage/TinyLocalStorage.cjs +20 -1
  201. package/dist/v1/libs/storage/TinyLocalStorage.d.mts +64 -2
  202. package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -1
  203. package/dist/v1/libs/storage/TinyLocalStorage.mjs +18 -1
  204. package/dist/v1/libs/storage/TinyMapCache.cjs +373 -0
  205. package/dist/v1/libs/storage/TinyMapCache.d.mts +274 -0
  206. package/dist/v1/libs/storage/TinyMapCache.d.mts.map +1 -0
  207. package/dist/v1/libs/storage/TinyMapCache.mjs +333 -0
  208. package/dist/v1/libs/storage/TinySetMapDatabase.cjs +1167 -0
  209. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts +603 -0
  210. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts.map +1 -0
  211. package/dist/v1/libs/storage/TinySetMapDatabase.mjs +1059 -0
  212. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.cjs +126 -0
  213. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts +132 -0
  214. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts.map +1 -0
  215. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.mjs +109 -0
  216. package/dist/v1/libs/sw/browser/TinyPushManager.cjs +310 -0
  217. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts +168 -0
  218. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts.map +1 -0
  219. package/dist/v1/libs/sw/browser/TinyPushManager.mjs +264 -0
  220. package/dist/v1/libs/sw/browser/TinyServiceWorker.cjs +1060 -0
  221. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts +348 -0
  222. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts.map +1 -0
  223. package/dist/v1/libs/sw/browser/TinyServiceWorker.mjs +933 -0
  224. package/dist/v1/libs/sw/browser/plugins/TabManager.cjs +315 -0
  225. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts +178 -0
  226. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts.map +1 -0
  227. package/dist/v1/libs/sw/browser/plugins/TabManager.mjs +274 -0
  228. package/dist/v1/libs/sw/browser/utils.cjs +28 -0
  229. package/dist/v1/libs/sw/browser/utils.d.mts +8 -0
  230. package/dist/v1/libs/sw/browser/utils.d.mts.map +1 -0
  231. package/dist/v1/libs/sw/browser/utils.mjs +21 -0
  232. package/dist/v1/libs/sw/service/TinyPushRouter.cjs +222 -0
  233. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts +138 -0
  234. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts.map +1 -0
  235. package/dist/v1/libs/sw/service/TinyPushRouter.mjs +201 -0
  236. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.cjs +3016 -0
  237. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts +993 -0
  238. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts.map +1 -0
  239. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.mjs +2558 -0
  240. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.cjs +88 -0
  241. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts +32 -0
  242. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts.map +1 -0
  243. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.mjs +69 -0
  244. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.cjs +112 -0
  245. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts +31 -0
  246. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts.map +1 -0
  247. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.mjs +91 -0
  248. package/dist/v1/libs/sw/service/plugins/Ping.cjs +32 -0
  249. package/dist/v1/libs/sw/service/plugins/Ping.d.mts +9 -0
  250. package/dist/v1/libs/sw/service/plugins/Ping.d.mts.map +1 -0
  251. package/dist/v1/libs/sw/service/plugins/Ping.mjs +25 -0
  252. package/dist/v1/libs/sw/service/plugins/TabManager.cjs +457 -0
  253. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts +91 -0
  254. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts.map +1 -0
  255. package/dist/v1/libs/sw/service/plugins/TabManager.mjs +372 -0
  256. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.cjs +180 -0
  257. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts +28 -0
  258. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts.map +1 -0
  259. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.mjs +148 -0
  260. package/dist/v1/libs/sw/service/shared/TinyPushPayload.cjs +199 -0
  261. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts +80 -0
  262. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts.map +1 -0
  263. package/dist/v1/libs/sw/service/shared/TinyPushPayload.mjs +174 -0
  264. package/dist/v1/libs/sw/utils.cjs +57 -0
  265. package/dist/v1/libs/sw/utils.d.mts +173 -0
  266. package/dist/v1/libs/sw/utils.d.mts.map +1 -0
  267. package/dist/v1/libs/sw/utils.mjs +50 -0
  268. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.cjs +57 -0
  269. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts +39 -0
  270. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts.map +1 -0
  271. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.mjs +48 -0
  272. package/dist/v1/libs/text/TinyI18/Browser.cjs +64 -0
  273. package/dist/v1/libs/text/TinyI18/Browser.d.mts +47 -0
  274. package/dist/v1/libs/text/TinyI18/Browser.d.mts.map +1 -0
  275. package/dist/v1/libs/text/TinyI18/Browser.mjs +57 -0
  276. package/dist/v1/libs/text/TinyI18/Node.cjs +49 -0
  277. package/dist/v1/libs/text/TinyI18/Node.d.mts +38 -0
  278. package/dist/v1/libs/text/TinyI18/Node.d.mts.map +1 -0
  279. package/dist/v1/libs/text/TinyI18/Node.mjs +43 -0
  280. package/dist/v1/libs/text/TinyI18/browser-utils.cjs +17 -0
  281. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts +8 -0
  282. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts.map +1 -0
  283. package/dist/v1/libs/text/TinyI18/browser-utils.mjs +13 -0
  284. package/dist/v1/libs/text/{TinyI18.cjs → TinyI18/index.cjs} +205 -104
  285. package/dist/v1/libs/text/{TinyI18.d.mts → TinyI18/index.d.mts} +141 -92
  286. package/dist/v1/libs/text/TinyI18/index.d.mts.map +1 -0
  287. package/dist/v1/libs/text/{TinyI18.mjs → TinyI18/index.mjs} +195 -101
  288. package/dist/v1/libs/tools/TinyBrowserMonitor.cjs +1088 -0
  289. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts +621 -0
  290. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts.map +1 -0
  291. package/dist/v1/libs/tools/TinyBrowserMonitor.mjs +940 -0
  292. package/dist/v1/libs/tools/TinyDebugger.cjs +180 -19
  293. package/dist/v1/libs/tools/TinyDebugger.d.mts +220 -24
  294. package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -1
  295. package/dist/v1/libs/tools/TinyDebugger.mjs +161 -19
  296. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.cjs +256 -0
  297. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts +125 -0
  298. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts.map +1 -0
  299. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.mjs +223 -0
  300. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.cjs +23 -0
  301. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts +17 -0
  302. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts.map +1 -0
  303. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.mjs +19 -0
  304. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.cjs +23 -0
  305. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts +17 -0
  306. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts.map +1 -0
  307. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.mjs +19 -0
  308. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.cjs +390 -0
  309. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts +9 -0
  310. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts.map +1 -0
  311. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.mjs +387 -0
  312. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.cjs +2 -0
  313. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts +27 -0
  314. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts.map +1 -0
  315. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.mjs +12 -0
  316. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/LICENSE +53 -0
  317. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.cjs +405 -0
  318. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts +34 -0
  319. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts.map +1 -0
  320. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.mjs +342 -0
  321. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.cjs +23 -0
  322. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts +17 -0
  323. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts.map +1 -0
  324. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.mjs +19 -0
  325. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.cjs +327 -0
  326. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts +9 -0
  327. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts.map +1 -0
  328. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.mjs +324 -0
  329. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.cjs +268 -0
  330. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts +107 -0
  331. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts.map +1 -0
  332. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.mjs +238 -0
  333. package/dist/v1/libs/tools/TinyPasswordValidator.cjs +491 -0
  334. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts +246 -0
  335. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts.map +1 -0
  336. package/dist/v1/libs/tools/TinyPasswordValidator.mjs +434 -0
  337. package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +48 -0
  338. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +14 -0
  339. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
  340. package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +44 -0
  341. package/dist/v1/libs/tools/TinySiteMap.cjs +1029 -0
  342. package/dist/v1/libs/tools/TinySiteMap.d.mts +429 -0
  343. package/dist/v1/libs/tools/TinySiteMap.d.mts.map +1 -0
  344. package/dist/v1/libs/tools/TinySiteMap.mjs +910 -0
  345. package/dist/v1/libs/tools/TinySiteMapStream.cjs +121 -0
  346. package/dist/v1/libs/tools/TinySiteMapStream.d.mts +51 -0
  347. package/dist/v1/libs/tools/TinySiteMapStream.d.mts.map +1 -0
  348. package/dist/v1/libs/tools/TinySiteMapStream.mjs +85 -0
  349. package/dist/v1/libs/tools/TinyURLSecurityVerifier.cjs +444 -0
  350. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts +217 -0
  351. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts.map +1 -0
  352. package/dist/v1/libs/tools/TinyURLSecurityVerifier.mjs +394 -0
  353. package/dist/v1/libs/tools/TinyUriParser/BlueSky.cjs +613 -0
  354. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts +152 -0
  355. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts.map +1 -0
  356. package/dist/v1/libs/tools/TinyUriParser/BlueSky.mjs +527 -0
  357. package/dist/v1/libs/tools/TinyUriParser/Discord.cjs +1119 -0
  358. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts +306 -0
  359. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts.map +1 -0
  360. package/dist/v1/libs/tools/TinyUriParser/Discord.mjs +968 -0
  361. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.cjs +469 -0
  362. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts +80 -0
  363. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts.map +1 -0
  364. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.mjs +379 -0
  365. package/dist/v1/libs/tools/TinyUriParser.cjs +217 -0
  366. package/dist/v1/libs/tools/TinyUriParser.d.mts +109 -0
  367. package/dist/v1/libs/tools/TinyUriParser.d.mts.map +1 -0
  368. package/dist/v1/libs/tools/TinyUriParser.mjs +183 -0
  369. package/dist/v1/libs/utils/TinyCloner.cjs +466 -0
  370. package/dist/v1/libs/utils/TinyCloner.d.mts +221 -0
  371. package/dist/v1/libs/utils/TinyCloner.d.mts.map +1 -0
  372. package/dist/v1/libs/utils/TinyCloner.mjs +416 -0
  373. package/dist/v1/libs/utils/TinyPromiseQueue.cjs +1 -1
  374. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts +2 -2
  375. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -1
  376. package/dist/v1/libs/utils/TinyPromiseQueue.mjs +1 -1
  377. package/dist/v1/libs/utils/TinyThrottledApi.cjs +333 -0
  378. package/dist/v1/libs/utils/TinyThrottledApi.d.mts +163 -0
  379. package/dist/v1/libs/utils/TinyThrottledApi.d.mts.map +1 -0
  380. package/dist/v1/libs/utils/TinyThrottledApi.mjs +294 -0
  381. package/dist/v1/libs/worker/browser/TinyWebWorker.cjs +342 -0
  382. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts +97 -0
  383. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts.map +1 -0
  384. package/dist/v1/libs/worker/browser/TinyWebWorker.mjs +305 -0
  385. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +346 -0
  386. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +127 -0
  387. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -0
  388. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +304 -0
  389. package/dist/v1/regexp/Email.cjs +185 -0
  390. package/dist/v1/regexp/Email.d.mts +73 -0
  391. package/dist/v1/regexp/Email.d.mts.map +1 -0
  392. package/dist/v1/regexp/Email.mjs +153 -0
  393. package/dist/v1/regexp/Glob.cjs +293 -0
  394. package/dist/v1/regexp/Glob.d.mts +45 -0
  395. package/dist/v1/regexp/Glob.d.mts.map +1 -0
  396. package/dist/v1/regexp/Glob.mjs +260 -0
  397. package/dist/v1/regexp/Ipv4.cjs +57 -0
  398. package/dist/v1/regexp/Ipv4.d.mts +29 -0
  399. package/dist/v1/regexp/Ipv4.d.mts.map +1 -0
  400. package/dist/v1/regexp/Ipv4.mjs +45 -0
  401. package/dist/v1/regexp/Ipv6.cjs +67 -0
  402. package/dist/v1/regexp/Ipv6.d.mts +29 -0
  403. package/dist/v1/regexp/Ipv6.d.mts.map +1 -0
  404. package/dist/v1/regexp/Ipv6.mjs +54 -0
  405. package/dist/v1/regexp/SegmentExtractor.cjs +145 -0
  406. package/dist/v1/regexp/SegmentExtractor.d.mts +91 -0
  407. package/dist/v1/regexp/SegmentExtractor.d.mts.map +1 -0
  408. package/dist/v1/regexp/SegmentExtractor.mjs +116 -0
  409. package/dist/v1/regexp/UrlDetector.cjs +125 -0
  410. package/dist/v1/regexp/UrlDetector.d.mts +67 -0
  411. package/dist/v1/regexp/UrlDetector.d.mts.map +1 -0
  412. package/dist/v1/regexp/UrlDetector.mjs +102 -0
  413. package/dist/v1/regexp/Username/index.cjs +233 -0
  414. package/dist/v1/regexp/Username/index.d.mts +77 -0
  415. package/dist/v1/regexp/Username/index.d.mts.map +1 -0
  416. package/dist/v1/regexp/Username/index.mjs +199 -0
  417. package/dist/v1/regexp/Username/jsDoc.cjs +2 -0
  418. package/dist/v1/regexp/Username/jsDoc.d.mts +57 -0
  419. package/dist/v1/regexp/Username/jsDoc.d.mts.map +1 -0
  420. package/dist/v1/regexp/Username/jsDoc.mjs +18 -0
  421. package/dist/v1/regexp/Username/templates/BlueSky.cjs +56 -0
  422. package/dist/v1/regexp/Username/templates/BlueSky.d.mts +35 -0
  423. package/dist/v1/regexp/Username/templates/BlueSky.d.mts.map +1 -0
  424. package/dist/v1/regexp/Username/templates/BlueSky.mjs +52 -0
  425. package/dist/v1/regexp/Username/templates/Discord.cjs +505 -0
  426. package/dist/v1/regexp/Username/templates/Discord.d.mts +209 -0
  427. package/dist/v1/regexp/Username/templates/Discord.d.mts.map +1 -0
  428. package/dist/v1/regexp/Username/templates/Discord.mjs +458 -0
  429. package/dist/v1/regexp/Username/templates/MatrixProtocol.cjs +143 -0
  430. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts +70 -0
  431. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts.map +1 -0
  432. package/dist/v1/regexp/Username/templates/MatrixProtocol.mjs +128 -0
  433. package/dist/v1/regexp/Username/templates/deprecated/Discord.cjs +24 -0
  434. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts +17 -0
  435. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts.map +1 -0
  436. package/dist/v1/regexp/Username/templates/deprecated/Discord.mjs +20 -0
  437. package/dist/v1/regexp/Username/templates/index.cjs +11 -0
  438. package/dist/v1/regexp/Username/templates/index.d.mts +5 -0
  439. package/dist/v1/regexp/Username/templates/index.d.mts.map +1 -0
  440. package/dist/v1/regexp/Username/templates/index.mjs +4 -0
  441. package/dist/v1/regexp/index.cjs +41 -0
  442. package/dist/v1/regexp/index.d.mts +9 -0
  443. package/dist/v1/regexp/index.d.mts.map +1 -0
  444. package/dist/v1/regexp/index.mjs +8 -0
  445. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.cjs +64 -0
  446. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts +11 -0
  447. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts.map +1 -0
  448. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.mjs +51 -0
  449. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.cjs +66 -0
  450. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts +11 -0
  451. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts.map +1 -0
  452. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.mjs +51 -0
  453. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.cjs +39 -0
  454. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts +11 -0
  455. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts.map +1 -0
  456. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.mjs +28 -0
  457. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.cjs +494 -0
  458. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts +142 -0
  459. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts.map +1 -0
  460. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.mjs +445 -0
  461. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.cjs +30 -4
  462. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +5 -2
  463. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -1
  464. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +29 -5
  465. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.cjs +135 -0
  466. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts +83 -0
  467. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts.map +1 -0
  468. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.mjs +120 -0
  469. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.cjs +127 -0
  470. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts +95 -0
  471. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts.map +1 -0
  472. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.mjs +109 -0
  473. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +83 -0
  474. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts +46 -0
  475. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts.map +1 -0
  476. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.mjs +71 -0
  477. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.cjs +493 -0
  478. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts +67 -0
  479. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts.map +1 -0
  480. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs +399 -0
  481. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.cjs +35 -0
  482. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts +6 -0
  483. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts.map +1 -0
  484. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs +29 -0
  485. package/docs/info/RegExp.md +74 -0
  486. package/docs/v1/Exports.md +101 -0
  487. package/docs/v1/README.md +113 -15
  488. package/docs/v1/basics/asyncReplace.md +2 -0
  489. package/docs/v1/basics/browserDetector.md +28 -11
  490. package/docs/v1/basics/crypto.md +85 -0
  491. package/docs/v1/basics/deprecated/html.md +2 -0
  492. package/docs/v1/basics/deprecated/objFilter.md +2 -0
  493. package/docs/v1/basics/html.md +2 -0
  494. package/docs/v1/basics/objChecker.md +55 -0
  495. package/docs/v1/basics/objFilter.md +57 -86
  496. package/docs/v1/basics/promiseUtils.md +12 -3
  497. package/docs/v1/basics/text.md +0 -1
  498. package/docs/v1/libs/array/TinyArrayComparator.md +50 -39
  499. package/docs/v1/libs/fs/TinyFS.md +752 -0
  500. package/docs/v1/libs/fs/TinyOPFSFileSystem.md +495 -0
  501. package/docs/v1/libs/fs/TinyStorageBucketFileSystem.md +407 -0
  502. package/docs/v1/libs/plugin/TinyPlugin.md +441 -0
  503. package/docs/v1/libs/plugin/TinyVersion.md +145 -0
  504. package/docs/v1/libs/router/TinyRouter.md +216 -0
  505. package/docs/v1/libs/storage/TinyMapCache.md +219 -0
  506. package/docs/v1/libs/storage/TinySetMapDatabase.md +478 -0
  507. package/docs/v1/libs/sw/browser/TinyNotificationAdapter.md +280 -0
  508. package/docs/v1/libs/sw/browser/TinyPushManager.md +782 -0
  509. package/docs/v1/libs/sw/browser/TinyServiceWorker.md +365 -0
  510. package/docs/v1/libs/sw/browser/plugins/TabManager.md +133 -0
  511. package/docs/v1/libs/sw/service/TinyPushRouter.md +314 -0
  512. package/docs/v1/libs/sw/service/TinyServiceWorkerEngine.md +748 -0
  513. package/docs/v1/libs/sw/service/plugins/GlobBypassPlugin.md +229 -0
  514. package/docs/v1/libs/sw/service/plugins/GlobCachePlugin.md +91 -0
  515. package/docs/v1/libs/sw/service/plugins/Ping.md +36 -0
  516. package/docs/v1/libs/sw/service/plugins/TabManager.md +64 -0
  517. package/docs/v1/libs/sw/service/plugins/ViteFileDetector.md +92 -0
  518. package/docs/v1/libs/sw/service/shared/TinyPushPayload.md +316 -0
  519. package/docs/v1/libs/text/TinyI18.md +80 -56
  520. package/docs/v1/libs/tools/TinyBrowserMonitor.md +170 -0
  521. package/docs/v1/libs/tools/TinyDebugger.md +117 -1
  522. package/docs/v1/libs/tools/TinyHtmlTagRegexBuilder.md +141 -0
  523. package/docs/v1/libs/tools/TinyHttpResponseRegistry.md +129 -0
  524. package/docs/v1/libs/tools/TinyPasswordValidator.md +153 -0
  525. package/docs/v1/libs/tools/TinyPkgExportValidator.md +45 -1
  526. package/docs/v1/libs/tools/TinySiteMap.md +134 -0
  527. package/docs/v1/libs/tools/TinySiteMapStream.md +97 -0
  528. package/docs/v1/libs/tools/TinyURLSecurityVerifier.md +146 -0
  529. package/docs/v1/libs/tools/TinyUriParser/Discord.md +374 -0
  530. package/docs/v1/libs/tools/TinyUriParser/MatrixProtocol.md +54 -0
  531. package/docs/v1/libs/tools/TinyUriParser.md +128 -0
  532. package/docs/v1/libs/utils/TinyCloner.md +126 -0
  533. package/docs/v1/libs/utils/TinyPromiseQueue.md +1 -1
  534. package/docs/v1/libs/utils/TinyThrottledApi.md +219 -0
  535. package/docs/v1/libs/worker/browser/TinyWebWorker.md +331 -0
  536. package/docs/v1/libs/worker/engine/TinyWebWorkerEngine.md +137 -0
  537. package/docs/v1/regexp/Email.md +127 -0
  538. package/docs/v1/regexp/Glob.md +155 -0
  539. package/docs/v1/regexp/IPv4.md +103 -0
  540. package/docs/v1/regexp/IPv6.md +122 -0
  541. package/docs/v1/regexp/SegmentExtractor.md +120 -0
  542. package/docs/v1/regexp/UrlDetector.md +117 -0
  543. package/docs/v1/regexp/Username/Base.md +131 -0
  544. package/docs/v1/regexp/Username/Discord.md +267 -0
  545. package/docs/v1/regexp/Username/MatrixProtocol.md +131 -0
  546. package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +569 -0
  547. package/docs/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.md +19 -7
  548. package/docs/v1/webTemplates/media/MediaValidator/v1/Browser.md +123 -0
  549. package/docs/v1/webTemplates/media/MediaValidator/v1/Node.md +136 -0
  550. package/docs/v1/webTemplates/multiformats/14.0/IPFSHasher.md +310 -0
  551. package/docs/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.md +131 -0
  552. package/docs/v1/webTemplates/vite/7.3/plugins/githubUtils.md +50 -0
  553. package/package.json +303 -13
  554. package/types/EventEmitter.d.ts +48 -0
  555. package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
@@ -0,0 +1,315 @@
1
+ 'use strict';
2
+
3
+ var TinyServiceWorker = require('../TinyServiceWorker.cjs');
4
+
5
+ /** @typedef {import('../../../tools/TinyDebugger.mjs').DebuggerConstructor} DebuggerConstructor - The constructor function for a debugger instance. */
6
+
7
+ /**
8
+ * @typedef {(() => any)} ExtraDataFn - A function that returns custom data.
9
+ */
10
+
11
+ /**
12
+ * Options of the new instance.
13
+ * @typedef {Object} ConstructorOptions - Configuration options.
14
+ * @property {boolean} [trackFocus=true] - Whether to track tab focus status.
15
+ * @property {boolean} [allowTabClosing=true] - Whether the tab allows the SW to request tab closure.
16
+ * @property {ExtraDataFn} [getExtraData] - Optional function that returns custom data to be cached in the SW.
17
+ * @property {Partial<DebuggerConstructor>} [lgConfig] - Debugger configuration.
18
+ */
19
+
20
+ /**
21
+ * @typedef {Object} TabFocusPayload
22
+ * @property {boolean} isFocused - Whether the tab is currently active and focused.
23
+ */
24
+
25
+ /**
26
+ * @typedef {Object} TabInfo
27
+ * @property {string} id - The unique Client ID.
28
+ * @property {string} url - The current URL.
29
+ * @property {string} title - The document title.
30
+ * @property {boolean} isFocused - Whether the tab currently has window focus.
31
+ * @property {any} [data] - Custom data provided by the client.
32
+ */
33
+
34
+ /**
35
+ * @typedef {Object} TabList
36
+ * @property {number} count - Total number of open tabs.
37
+ * @property {TabInfo[]} tabs - Array of tab information.
38
+ */
39
+
40
+ /**
41
+ * Controller to be used in the main thread to communicate with the TabManagerPlugin.
42
+ */
43
+ class TinySwTabsLayer extends TinyServiceWorker.TinyPluginLayer {
44
+ /** @type {TinyServiceWorker<any, any>} - The TinyServiceWorker instance used for communication. */
45
+ #sw;
46
+ /** @type {boolean} - Indicates whether tab focus tracking is enabled. */
47
+ #trackFocus;
48
+ /** @type {boolean} - Indicates whether the tab allows closure requests from the SW. */
49
+ #allowTabClosing;
50
+ /** @type {ExtraDataFn|null} - The function used to retrieve custom data for the tab. */
51
+ #extraDataFn;
52
+
53
+ /**
54
+ * Gets the current status of the focus tracking configuration.
55
+ * @returns {boolean} - Whether the tab focus tracking is enabled.
56
+ */
57
+ get trackFocus() {
58
+ return this.#trackFocus;
59
+ }
60
+
61
+ /**
62
+ * Gets whether the tab allows closure requests from the Service Worker.
63
+ * @returns {boolean} - Whether the tab allows closure requests.
64
+ */
65
+ get allowTabClosing() {
66
+ return this.#allowTabClosing;
67
+ }
68
+
69
+ /**
70
+ * Determines if the tab is truly active (visible and focused).
71
+ * @returns {boolean} - True if the tab is visible and has focus.
72
+ */
73
+ #getIsTabActive() {
74
+ const isHidden =
75
+ 'hidden' in document
76
+ ? document.hidden
77
+ : 'mozHidden' in document
78
+ ? // @ts-ignore
79
+ document.mozHidden
80
+ : 'webkitHidden' in document
81
+ ? // @ts-ignore
82
+ document.webkitHidden
83
+ : false;
84
+
85
+ return !isHidden && document.hasFocus();
86
+ }
87
+
88
+ /**
89
+ * Initializes event listeners to detect navigation, visibility, and focus changes.
90
+ */
91
+ #initListeners() {
92
+ // Detect URL/Title changes (Navigation)
93
+ window.addEventListener('popstate', () => this.#reportStatus());
94
+
95
+ // Detect Tab Closing (Most reliable event for closing/navigating away)
96
+ window.addEventListener('pagehide', () => this.#reportStatus(true));
97
+
98
+ // Focus and Visibility Tracking
99
+ if (this.#trackFocus) {
100
+ const visibilityEvents = ['visibilitychange', 'focus', 'blur', 'pageshow', 'pagehide'];
101
+ visibilityEvents.forEach((event) => {
102
+ window.addEventListener(event, () => this.#reportStatus(false));
103
+ });
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Reports the current status and permissions of this tab to the Service Worker.
109
+ * @param {boolean} isUnregistering - If true, tells the SW this tab is closing.
110
+ * @returns {Promise<void>} - A promise that resolves when the status report is complete.
111
+ */
112
+ async #reportStatus(isUnregistering = false) {
113
+ await this.#sw.waitForReady();
114
+ if (isUnregistering) {
115
+ return this.#sw.emitApi('tab:unregister');
116
+ }
117
+
118
+ return this.#sw.emitApi('tab:register', {
119
+ url: window.location.href,
120
+ title: document.title,
121
+ isFocused: this.#trackFocus ? this.#getIsTabActive() : false,
122
+ data: typeof this.#extraDataFn === 'function' ? await this.#extraDataFn() : undefined,
123
+ permissions: {
124
+ allowFocusTracking: this.#trackFocus,
125
+ allowTabClosing: this.#allowTabClosing,
126
+ },
127
+ });
128
+ }
129
+
130
+ /**
131
+ * Updates the tab's permissions and synchronizes with the Service Worker.
132
+ * @param {Object} options - The new permission configuration.
133
+ * @param {boolean} [options.trackFocus] - New focus tracking permission.
134
+ * @param {boolean} [options.allowTabClosing] - New tab closing permission.
135
+ * @returns {Promise<void>} - A promise that resolves when the status report is complete.
136
+ * @throws {TypeError} If options is not an object or properties are not booleans.
137
+ */
138
+ async setPermissions(options = {}) {
139
+ if (typeof options !== 'object' || options === null || Array.isArray(options)) {
140
+ throw new TypeError('[TinySwTabsLayer] setPermissions: options must be an object.');
141
+ }
142
+
143
+ if (options.trackFocus !== undefined && typeof options.trackFocus !== 'boolean') {
144
+ throw new TypeError('[TinySwTabsLayer] setPermissions: trackFocus must be a boolean.');
145
+ }
146
+
147
+ if (options.allowTabClosing !== undefined && typeof options.allowTabClosing !== 'boolean') {
148
+ throw new TypeError('[TinySwTabsLayer] setPermissions: allowTabClosing must be a boolean.');
149
+ }
150
+
151
+ if (options.trackFocus !== undefined) this.#trackFocus = options.trackFocus;
152
+ if (options.allowTabClosing !== undefined) this.#allowTabClosing = options.allowTabClosing;
153
+
154
+ return this.#reportStatus();
155
+ }
156
+
157
+ /**
158
+ * Initializes a new instance of the TinySwTabsLayer.
159
+ * @param {TinyServiceWorker<any, any>} sw - The TinyServiceWorker instance used for communication.
160
+ * @param {ConstructorOptions} [options] - Configuration options.
161
+ * @throws {TypeError} If sw is not an instance of TinyServiceWorker or options are invalid.
162
+ */
163
+ constructor(sw, options = {}) {
164
+ super({
165
+ logCfg: {
166
+ id: '[_main_class_TinySW-Tabs_reset_]',
167
+ logger: options.lgConfig?.logger ?? console,
168
+ debugMode: options.lgConfig?.debugMode ?? false,
169
+ useLogColors: options.lgConfig?.useLogColors ?? false,
170
+ },
171
+ });
172
+
173
+ if (!(sw instanceof TinyServiceWorker)) {
174
+ throw new TypeError(
175
+ '[TinySwTabsLayer] Constructor: sw must be an instance of TinyServiceWorker.',
176
+ );
177
+ }
178
+
179
+ // Deep validation of ConstructorOptions
180
+ if (typeof options !== 'object' || options === null || Array.isArray(options)) {
181
+ throw new TypeError('[TinySwTabsLayer] Constructor: options must be an object.');
182
+ }
183
+ if (options.trackFocus !== undefined && typeof options.trackFocus !== 'boolean') {
184
+ throw new TypeError('[TinySwTabsLayer] Constructor: trackFocus must be a boolean.');
185
+ }
186
+ if (options.allowTabClosing !== undefined && typeof options.allowTabClosing !== 'boolean') {
187
+ throw new TypeError('[TinySwTabsLayer] Constructor: allowTabClosing must be a boolean.');
188
+ }
189
+ if (options.getExtraData !== undefined && typeof options.getExtraData !== 'function') {
190
+ throw new TypeError('[TinySwTabsLayer] Constructor: getExtraData must be a function.');
191
+ }
192
+
193
+ this.#sw = sw;
194
+ this.#trackFocus = options.trackFocus ?? true;
195
+ this.#allowTabClosing = options.allowTabClosing ?? true;
196
+ this.#extraDataFn = options.getExtraData ?? null;
197
+
198
+ sw.onApi('tab:close', async () => {
199
+ if (!this.#allowTabClosing) {
200
+ return { authorized: false };
201
+ }
202
+ window.close();
203
+ return { authorized: true };
204
+ });
205
+
206
+ this.#initListeners();
207
+ this.#sw.waitForReady().then(() => this.register());
208
+ }
209
+
210
+ /**
211
+ * Registers this tab in the manager.
212
+ * @returns {Promise<void>} - A promise that resolves when the registration is complete.
213
+ */
214
+ async register() {
215
+ this.#reportStatus();
216
+ }
217
+
218
+ /**
219
+ * Explicitly requests the current list of all open tabs.
220
+ * @returns {Promise<TabList>} - A promise that resolves with the current list of tabs.
221
+ */
222
+ async getTabList() {
223
+ return this.#sw.emitApi('tab:get_list');
224
+ }
225
+
226
+ /**
227
+ * Retrieves the information for a specific tab by its unique ID.
228
+ * @param {string} id - The unique identifier of the tab.
229
+ * @returns {Promise<TabInfo|null>} - The tab information if found, or null if the tab does not exist.
230
+ * @throws {TypeError} If the provided id is not a string.
231
+ */
232
+ async getTab(id) {
233
+ if (typeof id !== 'string')
234
+ throw new TypeError('[TinySwTabsLayer] getTab: id must be a string.');
235
+ return (await this.#sw.emitApi('tab:get_tab', { id })) ?? null;
236
+ }
237
+
238
+ /**
239
+ * Closes a specific tab by its ID.
240
+ * @param {string} id - The ID of the tab to close.
241
+ * @returns {Promise<{ closed: boolean }>} - A promise that resolves with the result of the close request.
242
+ */
243
+ closeTab(id) {
244
+ if (typeof id !== 'string')
245
+ throw new TypeError('[TinySwTabsLayer] closeTab: id must be a string.');
246
+ return this.#sw.emitApi('tab:close_single', { id });
247
+ }
248
+
249
+ /**
250
+ * Closes multiple tabs by their IDs.
251
+ * @param {string[]} ids - Array of tab IDs.
252
+ * @returns {Promise<{ closed: (-1|0|1)[] }>} (-1: no permission | 0: no closed | 1: closed)
253
+ */
254
+ closeTabs(ids) {
255
+ if (!Array.isArray(ids))
256
+ throw new TypeError('[TinySwTabsLayer] closeTabs: ids must be an array.');
257
+ return this.#sw.emitApi('tab:close_multiple', { ids });
258
+ }
259
+
260
+ /**
261
+ * Closes all registered tabs.
262
+ * @returns {Promise<void>} - A promise that resolves when all tabs have been requested to close.
263
+ */
264
+ closeAllTabs() {
265
+ return this.#sw.emitApi('tab:close_all');
266
+ }
267
+
268
+ /**
269
+ * Sets a callback to be executed whenever the tab list changes.
270
+ * @param {(list: TabList) => void} callback - The function to execute when the tab list changes.
271
+ */
272
+ onUpdate(callback) {
273
+ this.#sw.on('tab:list_updated', callback);
274
+ }
275
+
276
+ /**
277
+ * Removes a callback from tab list change events.
278
+ * @param {(list: TabList) => void} callback - The callback function to remove.
279
+ */
280
+ offUpdate(callback) {
281
+ this.#sw.off('tab:list_updated', callback);
282
+ }
283
+ }
284
+
285
+ /**
286
+ * A plugin for TinyServiceWorker that manages a centralized registry of all open website tabs.
287
+ * @type {import('../TinyServiceWorker.mjs').SwPluginInstaller<TinySwTabsLayer, 'TabManager', '1.0.0', [ConstructorOptions]|[]>}
288
+ */
289
+ const TinyTabManagerPlugin = (instance, lgConfig = {}) => {
290
+ const engine = instance.engine;
291
+ instance.id = 'TabManager';
292
+ instance.version = '1.0.0';
293
+ instance.description = 'Advanced tab manager.';
294
+ instance.authors = ['JasminDreasond'];
295
+ instance.contributors = ['JasminDreasond'];
296
+ instance.categories = ['tab-manager'];
297
+ instance.tags = ['management'];
298
+ instance.allowedGets = [
299
+ 'onUpdate',
300
+ 'offUpdate',
301
+ 'getTabList',
302
+ 'getTab',
303
+ 'register',
304
+ 'closeTab',
305
+ 'closeTabs',
306
+ 'closeAllTabs',
307
+ 'trackFocus',
308
+ ];
309
+
310
+ if (!(engine instanceof TinyServiceWorker))
311
+ throw new TypeError('Plugin requires a TinyServiceWorker instance to function.');
312
+ return new TinySwTabsLayer(engine, lgConfig);
313
+ };
314
+
315
+ module.exports = TinyTabManagerPlugin;
@@ -0,0 +1,178 @@
1
+ import TinyServiceWorker from '../TinyServiceWorker.mjs';
2
+ export type DebuggerConstructor = import('../../../tools/TinyDebugger.mjs').DebuggerConstructor;
3
+ export type ExtraDataFn = (() => any);
4
+ export type ConstructorOptions = {
5
+ /**
6
+ * - Whether to track tab focus status.
7
+ */
8
+ trackFocus?: boolean;
9
+ /**
10
+ * - Whether the tab allows the SW to request tab closure.
11
+ */
12
+ allowTabClosing?: boolean;
13
+ /**
14
+ * - Optional function that returns custom data to be cached in the SW.
15
+ */
16
+ getExtraData?: ExtraDataFn;
17
+ /**
18
+ * - Debugger configuration.
19
+ */
20
+ lgConfig?: Partial<DebuggerConstructor>;
21
+ };
22
+ export type TabFocusPayload = {
23
+ /**
24
+ * - Whether the tab is currently active and focused.
25
+ */
26
+ isFocused: boolean;
27
+ };
28
+ export type TabInfo = {
29
+ /**
30
+ * - The unique Client ID.
31
+ */
32
+ id: string;
33
+ /**
34
+ * - The current URL.
35
+ */
36
+ url: string;
37
+ /**
38
+ * - The document title.
39
+ */
40
+ title: string;
41
+ /**
42
+ * - Whether the tab currently has window focus.
43
+ */
44
+ isFocused: boolean;
45
+ /**
46
+ * - Custom data provided by the client.
47
+ */
48
+ data?: any;
49
+ };
50
+ export type TabList = {
51
+ /**
52
+ * - Total number of open tabs.
53
+ */
54
+ count: number;
55
+ /**
56
+ * - Array of tab information.
57
+ */
58
+ tabs: TabInfo[];
59
+ };
60
+ /** @typedef {import('../../../tools/TinyDebugger.mjs').DebuggerConstructor} DebuggerConstructor - The constructor function for a debugger instance. */
61
+ /**
62
+ * @typedef {(() => any)} ExtraDataFn - A function that returns custom data.
63
+ */
64
+ /**
65
+ * Options of the new instance.
66
+ * @typedef {Object} ConstructorOptions - Configuration options.
67
+ * @property {boolean} [trackFocus=true] - Whether to track tab focus status.
68
+ * @property {boolean} [allowTabClosing=true] - Whether the tab allows the SW to request tab closure.
69
+ * @property {ExtraDataFn} [getExtraData] - Optional function that returns custom data to be cached in the SW.
70
+ * @property {Partial<DebuggerConstructor>} [lgConfig] - Debugger configuration.
71
+ */
72
+ /**
73
+ * @typedef {Object} TabFocusPayload
74
+ * @property {boolean} isFocused - Whether the tab is currently active and focused.
75
+ */
76
+ /**
77
+ * @typedef {Object} TabInfo
78
+ * @property {string} id - The unique Client ID.
79
+ * @property {string} url - The current URL.
80
+ * @property {string} title - The document title.
81
+ * @property {boolean} isFocused - Whether the tab currently has window focus.
82
+ * @property {any} [data] - Custom data provided by the client.
83
+ */
84
+ /**
85
+ * @typedef {Object} TabList
86
+ * @property {number} count - Total number of open tabs.
87
+ * @property {TabInfo[]} tabs - Array of tab information.
88
+ */
89
+ /**
90
+ * Controller to be used in the main thread to communicate with the TabManagerPlugin.
91
+ */
92
+ declare class TinySwTabsLayer extends TinyServiceWorker.TinyPluginLayer {
93
+ #private;
94
+ /**
95
+ * Gets the current status of the focus tracking configuration.
96
+ * @returns {boolean} - Whether the tab focus tracking is enabled.
97
+ */
98
+ get trackFocus(): boolean;
99
+ /**
100
+ * Gets whether the tab allows closure requests from the Service Worker.
101
+ * @returns {boolean} - Whether the tab allows closure requests.
102
+ */
103
+ get allowTabClosing(): boolean;
104
+ /**
105
+ * Updates the tab's permissions and synchronizes with the Service Worker.
106
+ * @param {Object} options - The new permission configuration.
107
+ * @param {boolean} [options.trackFocus] - New focus tracking permission.
108
+ * @param {boolean} [options.allowTabClosing] - New tab closing permission.
109
+ * @returns {Promise<void>} - A promise that resolves when the status report is complete.
110
+ * @throws {TypeError} If options is not an object or properties are not booleans.
111
+ */
112
+ setPermissions(options?: {
113
+ trackFocus?: boolean;
114
+ allowTabClosing?: boolean;
115
+ }): Promise<void>;
116
+ /**
117
+ * Initializes a new instance of the TinySwTabsLayer.
118
+ * @param {TinyServiceWorker<any, any>} sw - The TinyServiceWorker instance used for communication.
119
+ * @param {ConstructorOptions} [options] - Configuration options.
120
+ * @throws {TypeError} If sw is not an instance of TinyServiceWorker or options are invalid.
121
+ */
122
+ constructor(sw: TinyServiceWorker<any, any>, options?: ConstructorOptions);
123
+ /**
124
+ * Registers this tab in the manager.
125
+ * @returns {Promise<void>} - A promise that resolves when the registration is complete.
126
+ */
127
+ register(): Promise<void>;
128
+ /**
129
+ * Explicitly requests the current list of all open tabs.
130
+ * @returns {Promise<TabList>} - A promise that resolves with the current list of tabs.
131
+ */
132
+ getTabList(): Promise<TabList>;
133
+ /**
134
+ * Retrieves the information for a specific tab by its unique ID.
135
+ * @param {string} id - The unique identifier of the tab.
136
+ * @returns {Promise<TabInfo|null>} - The tab information if found, or null if the tab does not exist.
137
+ * @throws {TypeError} If the provided id is not a string.
138
+ */
139
+ getTab(id: string): Promise<TabInfo | null>;
140
+ /**
141
+ * Closes a specific tab by its ID.
142
+ * @param {string} id - The ID of the tab to close.
143
+ * @returns {Promise<{ closed: boolean }>} - A promise that resolves with the result of the close request.
144
+ */
145
+ closeTab(id: string): Promise<{
146
+ closed: boolean;
147
+ }>;
148
+ /**
149
+ * Closes multiple tabs by their IDs.
150
+ * @param {string[]} ids - Array of tab IDs.
151
+ * @returns {Promise<{ closed: (-1|0|1)[] }>} (-1: no permission | 0: no closed | 1: closed)
152
+ */
153
+ closeTabs(ids: string[]): Promise<{
154
+ closed: (-1 | 0 | 1)[];
155
+ }>;
156
+ /**
157
+ * Closes all registered tabs.
158
+ * @returns {Promise<void>} - A promise that resolves when all tabs have been requested to close.
159
+ */
160
+ closeAllTabs(): Promise<void>;
161
+ /**
162
+ * Sets a callback to be executed whenever the tab list changes.
163
+ * @param {(list: TabList) => void} callback - The function to execute when the tab list changes.
164
+ */
165
+ onUpdate(callback: (list: TabList) => void): void;
166
+ /**
167
+ * Removes a callback from tab list change events.
168
+ * @param {(list: TabList) => void} callback - The callback function to remove.
169
+ */
170
+ offUpdate(callback: (list: TabList) => void): void;
171
+ }
172
+ /**
173
+ * A plugin for TinyServiceWorker that manages a centralized registry of all open website tabs.
174
+ * @type {import('../TinyServiceWorker.mjs').SwPluginInstaller<TinySwTabsLayer, 'TabManager', '1.0.0', [ConstructorOptions]|[]>}
175
+ */
176
+ declare const TinyTabManagerPlugin: import('../TinyServiceWorker.mjs').SwPluginInstaller<TinySwTabsLayer, 'TabManager', '1.0.0', [ConstructorOptions] | []>;
177
+ export default TinyTabManagerPlugin;
178
+ //# sourceMappingURL=TabManager.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabManager.d.mts","sourceRoot":"","sources":["../../../../../../src/v1/libs/sw/browser/plugins/TabManager.mjs"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AAErD,YAAyE,mBAAmB,GAAlF,OAAO,iCAAiC,EAAE,mBAAmB,CAA0E;AAGlJ,YAAuB,WAAW,GAAxB,CAAC,MAAM,GAAG,CAAC,CACvB;AAIE,YAAkB,kBAAkB,GACpC;;;;IAAqB,UAAU,AAA/B,CACA,EADW,OAAO,CAClB;;;;IAAqB,eAAe,AAApC,CACA,EADW,OAAO,CAClB;;;;IAAyB,YAAY,AAArC,CACA,EADW,WAAW,CACtB;;;;IAA0C,QAAQ,AAAlD,CACF,EADa,OAAO,CAAC,mBAAmB,CAAC,CACzC;CAAA,CAAA;AAGE,YAAkB,eAAe,GACjC;;;;IAAoB,SAAS,EAAlB,OAAO,CACpB;CAAA,CAAA;AAGE,YAAkB,OAAO,GACzB;;;;IAAmB,EAAE,EAAV,MAAM,CACjB;;;;IAAmB,GAAG,EAAX,MAAM,CACjB;;;;IAAmB,KAAK,EAAb,MAAM,CACjB;;;;IAAoB,SAAS,EAAlB,OAAO,CAClB;;;;IAAiB,IAAI,AAArB,CACF,EADa,GAAG,CAChB;CAAA,CAAA;AAGE,YAAkB,OAAO,GACzB;;;;IAAmB,KAAK,EAAb,MAAM,CACjB;;;;IAAsB,IAAI,EAAf,OAAO,EAAE,CACtB;CAAA,CAAA;AAjCD,uJAAuJ;AAEvJ;;GAEG;AAEH;;;;;;;GAOG;AAEH;;;GAGG;AAEH;;;;;;;GAOG;AAEH;;;;GAIG;AAEH;;GAEG;AACH,cAAM,eAAgB,SAAQ,iBAAiB,CAAC,eAAe;;IAU7D;;;OAGG;IACH,IAAI,UAAU,IAFD,OAAO,CAInB;IAED;;;OAGG;IACH,IAAI,eAAe,IAFN,OAAO,CAInB;IA+DD;;;;;;;OAOG;IACG,cAAc,CAAC,OAAO,GALzB;QAA0B,UAAU,AAApC,CACA,EADQ,OAAO,CACf;QAA0B,eAAe,AAAzC,CACA,EADQ,OAAO,CACf;KAG8B,GAHpB,OAAO,CAAC,IAAI,CAAC,CAoBzB;IAED;;;;;OAKG;IACH,YAAY,EAAE,EAJH,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAIvB,EAAE,OAAO,AAHpB,CACA,EADQ,kBAGiB,EA6C3B;IAED;;;OAGG;IACG,QAAQ,IAFD,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACG,UAAU,IAFH,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;;OAKG;IACG,MAAM,CAAC,EAAE,EAJJ,MAII,GAHF,OAAO,CAAC,OAAO,GAAC,IAAI,CAAC,CAOjC;IAED;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAHA,MAGA,GAFE,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAMxC;IAED;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAHF,MAAM,EAGJ,GAFA,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAE,CAAA;KAAE,CAAC,CAM3C;IAED;;;OAGG;IACH,YAAY,IAFC,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAFN,CAAC,IAAI,EAAE,OAAO,KAAK,IAEb,QAEhB;IAED;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAFP,CAAC,IAAI,EAAE,OAAO,KAAK,IAEZ,QAEjB;CACF;AAED;;;GAGG;AACH,QAAA,MAAM,oBAAoB,EAFhB,OAAO,0BAA0B,EAAE,iBAAiB,CAAC,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,GAAC,EAAE,CA0B7H,CAAC;eAEa,oBAAoB"}