tiny-essentials 1.28.18 → 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 (567) 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/css/TinyCookieConsent.min.css +1 -0
  109. package/dist/v1/css/TinyCookieConsent.min.css.map +1 -0
  110. package/dist/v1/css/TinyDraggerExample.min.css +1 -0
  111. package/dist/v1/css/TinyDraggerExample.min.css.map +1 -0
  112. package/dist/v1/css/TinyLoadingScreen.min.css +1 -0
  113. package/dist/v1/css/TinyLoadingScreen.min.css.map +1 -0
  114. package/dist/v1/css/TinyNotify.min.css +1 -0
  115. package/dist/v1/css/TinyNotify.min.css.map +1 -0
  116. package/dist/v1/css/aiMarker.min.css +1 -0
  117. package/dist/v1/css/aiMarker.min.css.map +1 -0
  118. package/dist/v1/index.cjs +88 -3
  119. package/dist/v1/index.d.mts +31 -6
  120. package/dist/v1/index.d.mts.map +1 -1
  121. package/dist/v1/index.mjs +32 -7
  122. package/dist/v1/jsdoc/EventEmitter.cjs +4 -0
  123. package/dist/v1/jsdoc/EventEmitter.d.mts +33 -0
  124. package/dist/v1/jsdoc/EventEmitter.d.mts.map +1 -0
  125. package/dist/v1/jsdoc/EventEmitter.mjs +18 -0
  126. package/dist/v1/libs/array/TinyArrayComparator.cjs +240 -25
  127. package/dist/v1/libs/array/TinyArrayComparator.d.mts +130 -22
  128. package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -1
  129. package/dist/v1/libs/array/TinyArrayComparator.mjs +210 -24
  130. package/dist/v1/libs/fs/constants.cjs +74 -0
  131. package/dist/v1/libs/fs/constants.d.mts +22 -0
  132. package/dist/v1/libs/fs/constants.d.mts.map +1 -0
  133. package/dist/v1/libs/fs/constants.mjs +53 -0
  134. package/dist/v1/libs/fs/encoding.cjs +118 -0
  135. package/dist/v1/libs/fs/encoding.d.mts +50 -0
  136. package/dist/v1/libs/fs/encoding.d.mts.map +1 -0
  137. package/dist/v1/libs/fs/encoding.mjs +102 -0
  138. package/dist/v1/libs/fs/error.cjs +188 -0
  139. package/dist/v1/libs/fs/error.d.mts +105 -0
  140. package/dist/v1/libs/fs/error.d.mts.map +1 -0
  141. package/dist/v1/libs/fs/error.mjs +158 -0
  142. package/dist/v1/libs/fs/handle.cjs +121 -0
  143. package/dist/v1/libs/fs/handle.d.mts +56 -0
  144. package/dist/v1/libs/fs/handle.d.mts.map +1 -0
  145. package/dist/v1/libs/fs/handle.mjs +100 -0
  146. package/dist/v1/libs/fs/index.cjs +700 -0
  147. package/dist/v1/libs/fs/index.d.mts +377 -0
  148. package/dist/v1/libs/fs/index.d.mts.map +1 -0
  149. package/dist/v1/libs/fs/index.mjs +630 -0
  150. package/dist/v1/libs/fs/path.cjs +234 -0
  151. package/dist/v1/libs/fs/path.d.mts +176 -0
  152. package/dist/v1/libs/fs/path.d.mts.map +1 -0
  153. package/dist/v1/libs/fs/path.mjs +197 -0
  154. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +202 -0
  155. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +121 -0
  156. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -0
  157. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +172 -0
  158. package/dist/v1/libs/fs/plugins/OPFS/index.cjs +334 -0
  159. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +98 -0
  160. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -0
  161. package/dist/v1/libs/fs/plugins/OPFS/index.mjs +300 -0
  162. package/dist/v1/libs/fs/stats.cjs +245 -0
  163. package/dist/v1/libs/fs/stats.d.mts +226 -0
  164. package/dist/v1/libs/fs/stats.d.mts.map +1 -0
  165. package/dist/v1/libs/fs/stats.mjs +197 -0
  166. package/dist/v1/libs/html/events/TinyIframeEvents.cjs +10 -1
  167. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts +9 -2
  168. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -1
  169. package/dist/v1/libs/html/events/TinyIframeEvents.mjs +8 -1
  170. package/dist/v1/libs/html/events/TinyNewWinEvents.cjs +14 -3
  171. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts +21 -5
  172. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -1
  173. package/dist/v1/libs/html/events/TinyNewWinEvents.mjs +12 -3
  174. package/dist/v1/libs/html/scroll/TinySmartScroller.cjs +13 -1
  175. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts +29 -2
  176. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -1
  177. package/dist/v1/libs/html/scroll/TinySmartScroller.mjs +11 -1
  178. package/dist/v1/libs/math/TinyAdvancedRaffle.cjs +13 -1
  179. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts +32 -2
  180. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -1
  181. package/dist/v1/libs/math/TinyAdvancedRaffle.mjs +11 -1
  182. package/dist/v1/libs/math/TinyTimeout.cjs +0 -14
  183. package/dist/v1/libs/math/TinyTimeout.d.mts +0 -11
  184. package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -1
  185. package/dist/v1/libs/math/TinyTimeout.mjs +0 -13
  186. package/dist/v1/libs/media/TinyMediaPlayer/index.cjs +25 -1
  187. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts +35 -2
  188. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -1
  189. package/dist/v1/libs/media/TinyMediaPlayer/index.mjs +23 -1
  190. package/dist/v1/libs/media/TinyMediaPlayer.cjs +2 -2
  191. package/dist/v1/libs/media/TinyMediaPlayer.d.mts +2 -2
  192. package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -1
  193. package/dist/v1/libs/media/TinyMediaPlayer.mjs +2 -2
  194. package/dist/v1/libs/media/TinyRadioFm.cjs +19 -1
  195. package/dist/v1/libs/media/TinyRadioFm.d.mts +78 -2
  196. package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -1
  197. package/dist/v1/libs/media/TinyRadioFm.mjs +17 -1
  198. package/dist/v1/libs/plugin/TinyPlugin.cjs +1630 -0
  199. package/dist/v1/libs/plugin/TinyPlugin.d.mts +753 -0
  200. package/dist/v1/libs/plugin/TinyPlugin.d.mts.map +1 -0
  201. package/dist/v1/libs/plugin/TinyPlugin.mjs +1376 -0
  202. package/dist/v1/libs/plugin/TinyVersion.cjs +204 -0
  203. package/dist/v1/libs/plugin/TinyVersion.d.mts +70 -0
  204. package/dist/v1/libs/plugin/TinyVersion.d.mts.map +1 -0
  205. package/dist/v1/libs/plugin/TinyVersion.mjs +179 -0
  206. package/dist/v1/libs/router/TinyRouter.cjs +661 -0
  207. package/dist/v1/libs/router/TinyRouter.d.mts +320 -0
  208. package/dist/v1/libs/router/TinyRouter.d.mts.map +1 -0
  209. package/dist/v1/libs/router/TinyRouter.mjs +572 -0
  210. package/dist/v1/libs/storage/TinyLocalStorage.cjs +20 -1
  211. package/dist/v1/libs/storage/TinyLocalStorage.d.mts +64 -2
  212. package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -1
  213. package/dist/v1/libs/storage/TinyLocalStorage.mjs +18 -1
  214. package/dist/v1/libs/storage/TinyMapCache.cjs +373 -0
  215. package/dist/v1/libs/storage/TinyMapCache.d.mts +274 -0
  216. package/dist/v1/libs/storage/TinyMapCache.d.mts.map +1 -0
  217. package/dist/v1/libs/storage/TinyMapCache.mjs +333 -0
  218. package/dist/v1/libs/storage/TinySetMapDatabase.cjs +1167 -0
  219. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts +603 -0
  220. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts.map +1 -0
  221. package/dist/v1/libs/storage/TinySetMapDatabase.mjs +1059 -0
  222. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.cjs +126 -0
  223. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts +132 -0
  224. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts.map +1 -0
  225. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.mjs +109 -0
  226. package/dist/v1/libs/sw/browser/TinyPushManager.cjs +310 -0
  227. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts +168 -0
  228. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts.map +1 -0
  229. package/dist/v1/libs/sw/browser/TinyPushManager.mjs +264 -0
  230. package/dist/v1/libs/sw/browser/TinyServiceWorker.cjs +1060 -0
  231. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts +348 -0
  232. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts.map +1 -0
  233. package/dist/v1/libs/sw/browser/TinyServiceWorker.mjs +933 -0
  234. package/dist/v1/libs/sw/browser/plugins/TabManager.cjs +315 -0
  235. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts +178 -0
  236. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts.map +1 -0
  237. package/dist/v1/libs/sw/browser/plugins/TabManager.mjs +274 -0
  238. package/dist/v1/libs/sw/browser/utils.cjs +28 -0
  239. package/dist/v1/libs/sw/browser/utils.d.mts +8 -0
  240. package/dist/v1/libs/sw/browser/utils.d.mts.map +1 -0
  241. package/dist/v1/libs/sw/browser/utils.mjs +21 -0
  242. package/dist/v1/libs/sw/service/TinyPushRouter.cjs +222 -0
  243. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts +138 -0
  244. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts.map +1 -0
  245. package/dist/v1/libs/sw/service/TinyPushRouter.mjs +201 -0
  246. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.cjs +3016 -0
  247. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts +993 -0
  248. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts.map +1 -0
  249. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.mjs +2558 -0
  250. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.cjs +88 -0
  251. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts +32 -0
  252. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts.map +1 -0
  253. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.mjs +69 -0
  254. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.cjs +112 -0
  255. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts +31 -0
  256. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts.map +1 -0
  257. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.mjs +91 -0
  258. package/dist/v1/libs/sw/service/plugins/Ping.cjs +32 -0
  259. package/dist/v1/libs/sw/service/plugins/Ping.d.mts +9 -0
  260. package/dist/v1/libs/sw/service/plugins/Ping.d.mts.map +1 -0
  261. package/dist/v1/libs/sw/service/plugins/Ping.mjs +25 -0
  262. package/dist/v1/libs/sw/service/plugins/TabManager.cjs +457 -0
  263. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts +91 -0
  264. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts.map +1 -0
  265. package/dist/v1/libs/sw/service/plugins/TabManager.mjs +372 -0
  266. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.cjs +180 -0
  267. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts +28 -0
  268. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts.map +1 -0
  269. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.mjs +148 -0
  270. package/dist/v1/libs/sw/service/shared/TinyPushPayload.cjs +199 -0
  271. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts +80 -0
  272. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts.map +1 -0
  273. package/dist/v1/libs/sw/service/shared/TinyPushPayload.mjs +174 -0
  274. package/dist/v1/libs/sw/utils.cjs +57 -0
  275. package/dist/v1/libs/sw/utils.d.mts +173 -0
  276. package/dist/v1/libs/sw/utils.d.mts.map +1 -0
  277. package/dist/v1/libs/sw/utils.mjs +50 -0
  278. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.cjs +57 -0
  279. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts +39 -0
  280. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts.map +1 -0
  281. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.mjs +48 -0
  282. package/dist/v1/libs/text/TinyI18/Browser.cjs +64 -0
  283. package/dist/v1/libs/text/TinyI18/Browser.d.mts +47 -0
  284. package/dist/v1/libs/text/TinyI18/Browser.d.mts.map +1 -0
  285. package/dist/v1/libs/text/TinyI18/Browser.mjs +57 -0
  286. package/dist/v1/libs/text/TinyI18/Node.cjs +49 -0
  287. package/dist/v1/libs/text/TinyI18/Node.d.mts +38 -0
  288. package/dist/v1/libs/text/TinyI18/Node.d.mts.map +1 -0
  289. package/dist/v1/libs/text/TinyI18/Node.mjs +43 -0
  290. package/dist/v1/libs/text/TinyI18/browser-utils.cjs +17 -0
  291. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts +8 -0
  292. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts.map +1 -0
  293. package/dist/v1/libs/text/TinyI18/browser-utils.mjs +13 -0
  294. package/dist/v1/libs/text/{TinyI18.cjs → TinyI18/index.cjs} +205 -104
  295. package/dist/v1/libs/text/{TinyI18.d.mts → TinyI18/index.d.mts} +141 -92
  296. package/dist/v1/libs/text/TinyI18/index.d.mts.map +1 -0
  297. package/dist/v1/libs/text/{TinyI18.mjs → TinyI18/index.mjs} +195 -101
  298. package/dist/v1/libs/tools/TinyBrowserMonitor.cjs +1088 -0
  299. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts +621 -0
  300. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts.map +1 -0
  301. package/dist/v1/libs/tools/TinyBrowserMonitor.mjs +940 -0
  302. package/dist/v1/libs/tools/TinyDebugger.cjs +180 -19
  303. package/dist/v1/libs/tools/TinyDebugger.d.mts +220 -24
  304. package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -1
  305. package/dist/v1/libs/tools/TinyDebugger.mjs +161 -19
  306. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.cjs +256 -0
  307. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts +125 -0
  308. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts.map +1 -0
  309. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.mjs +223 -0
  310. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.cjs +23 -0
  311. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts +17 -0
  312. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts.map +1 -0
  313. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.mjs +19 -0
  314. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.cjs +23 -0
  315. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts +17 -0
  316. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts.map +1 -0
  317. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.mjs +19 -0
  318. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.cjs +390 -0
  319. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts +9 -0
  320. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts.map +1 -0
  321. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.mjs +387 -0
  322. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.cjs +2 -0
  323. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts +27 -0
  324. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts.map +1 -0
  325. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.mjs +12 -0
  326. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/LICENSE +53 -0
  327. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.cjs +405 -0
  328. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts +34 -0
  329. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts.map +1 -0
  330. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.mjs +342 -0
  331. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.cjs +23 -0
  332. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts +17 -0
  333. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts.map +1 -0
  334. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.mjs +19 -0
  335. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.cjs +327 -0
  336. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts +9 -0
  337. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts.map +1 -0
  338. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.mjs +324 -0
  339. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.cjs +268 -0
  340. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts +107 -0
  341. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts.map +1 -0
  342. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.mjs +238 -0
  343. package/dist/v1/libs/tools/TinyPasswordValidator.cjs +491 -0
  344. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts +246 -0
  345. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts.map +1 -0
  346. package/dist/v1/libs/tools/TinyPasswordValidator.mjs +434 -0
  347. package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +48 -0
  348. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +14 -0
  349. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
  350. package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +44 -0
  351. package/dist/v1/libs/tools/TinySiteMap.cjs +1029 -0
  352. package/dist/v1/libs/tools/TinySiteMap.d.mts +429 -0
  353. package/dist/v1/libs/tools/TinySiteMap.d.mts.map +1 -0
  354. package/dist/v1/libs/tools/TinySiteMap.mjs +910 -0
  355. package/dist/v1/libs/tools/TinySiteMapStream.cjs +121 -0
  356. package/dist/v1/libs/tools/TinySiteMapStream.d.mts +51 -0
  357. package/dist/v1/libs/tools/TinySiteMapStream.d.mts.map +1 -0
  358. package/dist/v1/libs/tools/TinySiteMapStream.mjs +85 -0
  359. package/dist/v1/libs/tools/TinyURLSecurityVerifier.cjs +444 -0
  360. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts +217 -0
  361. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts.map +1 -0
  362. package/dist/v1/libs/tools/TinyURLSecurityVerifier.mjs +394 -0
  363. package/dist/v1/libs/tools/TinyUriParser/BlueSky.cjs +613 -0
  364. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts +152 -0
  365. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts.map +1 -0
  366. package/dist/v1/libs/tools/TinyUriParser/BlueSky.mjs +527 -0
  367. package/dist/v1/libs/tools/TinyUriParser/Discord.cjs +1119 -0
  368. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts +306 -0
  369. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts.map +1 -0
  370. package/dist/v1/libs/tools/TinyUriParser/Discord.mjs +968 -0
  371. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.cjs +469 -0
  372. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts +80 -0
  373. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts.map +1 -0
  374. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.mjs +379 -0
  375. package/dist/v1/libs/tools/TinyUriParser.cjs +217 -0
  376. package/dist/v1/libs/tools/TinyUriParser.d.mts +109 -0
  377. package/dist/v1/libs/tools/TinyUriParser.d.mts.map +1 -0
  378. package/dist/v1/libs/tools/TinyUriParser.mjs +183 -0
  379. package/dist/v1/libs/utils/TinyCloner.cjs +466 -0
  380. package/dist/v1/libs/utils/TinyCloner.d.mts +221 -0
  381. package/dist/v1/libs/utils/TinyCloner.d.mts.map +1 -0
  382. package/dist/v1/libs/utils/TinyCloner.mjs +416 -0
  383. package/dist/v1/libs/utils/TinyPromiseQueue.cjs +1 -1
  384. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts +2 -2
  385. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -1
  386. package/dist/v1/libs/utils/TinyPromiseQueue.mjs +1 -1
  387. package/dist/v1/libs/utils/TinyThrottledApi.cjs +333 -0
  388. package/dist/v1/libs/utils/TinyThrottledApi.d.mts +163 -0
  389. package/dist/v1/libs/utils/TinyThrottledApi.d.mts.map +1 -0
  390. package/dist/v1/libs/utils/TinyThrottledApi.mjs +294 -0
  391. package/dist/v1/libs/worker/browser/TinyWebWorker.cjs +342 -0
  392. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts +97 -0
  393. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts.map +1 -0
  394. package/dist/v1/libs/worker/browser/TinyWebWorker.mjs +305 -0
  395. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +346 -0
  396. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +127 -0
  397. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -0
  398. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +304 -0
  399. package/dist/v1/regexp/Email.cjs +185 -0
  400. package/dist/v1/regexp/Email.d.mts +73 -0
  401. package/dist/v1/regexp/Email.d.mts.map +1 -0
  402. package/dist/v1/regexp/Email.mjs +153 -0
  403. package/dist/v1/regexp/Glob.cjs +293 -0
  404. package/dist/v1/regexp/Glob.d.mts +45 -0
  405. package/dist/v1/regexp/Glob.d.mts.map +1 -0
  406. package/dist/v1/regexp/Glob.mjs +260 -0
  407. package/dist/v1/regexp/Ipv4.cjs +57 -0
  408. package/dist/v1/regexp/Ipv4.d.mts +29 -0
  409. package/dist/v1/regexp/Ipv4.d.mts.map +1 -0
  410. package/dist/v1/regexp/Ipv4.mjs +45 -0
  411. package/dist/v1/regexp/Ipv6.cjs +67 -0
  412. package/dist/v1/regexp/Ipv6.d.mts +29 -0
  413. package/dist/v1/regexp/Ipv6.d.mts.map +1 -0
  414. package/dist/v1/regexp/Ipv6.mjs +54 -0
  415. package/dist/v1/regexp/SegmentExtractor.cjs +145 -0
  416. package/dist/v1/regexp/SegmentExtractor.d.mts +91 -0
  417. package/dist/v1/regexp/SegmentExtractor.d.mts.map +1 -0
  418. package/dist/v1/regexp/SegmentExtractor.mjs +116 -0
  419. package/dist/v1/regexp/UrlDetector.cjs +125 -0
  420. package/dist/v1/regexp/UrlDetector.d.mts +67 -0
  421. package/dist/v1/regexp/UrlDetector.d.mts.map +1 -0
  422. package/dist/v1/regexp/UrlDetector.mjs +102 -0
  423. package/dist/v1/regexp/Username/index.cjs +233 -0
  424. package/dist/v1/regexp/Username/index.d.mts +77 -0
  425. package/dist/v1/regexp/Username/index.d.mts.map +1 -0
  426. package/dist/v1/regexp/Username/index.mjs +199 -0
  427. package/dist/v1/regexp/Username/jsDoc.cjs +2 -0
  428. package/dist/v1/regexp/Username/jsDoc.d.mts +57 -0
  429. package/dist/v1/regexp/Username/jsDoc.d.mts.map +1 -0
  430. package/dist/v1/regexp/Username/jsDoc.mjs +18 -0
  431. package/dist/v1/regexp/Username/templates/BlueSky.cjs +56 -0
  432. package/dist/v1/regexp/Username/templates/BlueSky.d.mts +35 -0
  433. package/dist/v1/regexp/Username/templates/BlueSky.d.mts.map +1 -0
  434. package/dist/v1/regexp/Username/templates/BlueSky.mjs +52 -0
  435. package/dist/v1/regexp/Username/templates/Discord.cjs +505 -0
  436. package/dist/v1/regexp/Username/templates/Discord.d.mts +209 -0
  437. package/dist/v1/regexp/Username/templates/Discord.d.mts.map +1 -0
  438. package/dist/v1/regexp/Username/templates/Discord.mjs +458 -0
  439. package/dist/v1/regexp/Username/templates/MatrixProtocol.cjs +143 -0
  440. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts +70 -0
  441. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts.map +1 -0
  442. package/dist/v1/regexp/Username/templates/MatrixProtocol.mjs +128 -0
  443. package/dist/v1/regexp/Username/templates/deprecated/Discord.cjs +24 -0
  444. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts +17 -0
  445. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts.map +1 -0
  446. package/dist/v1/regexp/Username/templates/deprecated/Discord.mjs +20 -0
  447. package/dist/v1/regexp/Username/templates/index.cjs +11 -0
  448. package/dist/v1/regexp/Username/templates/index.d.mts +5 -0
  449. package/dist/v1/regexp/Username/templates/index.d.mts.map +1 -0
  450. package/dist/v1/regexp/Username/templates/index.mjs +4 -0
  451. package/dist/v1/regexp/index.cjs +41 -0
  452. package/dist/v1/regexp/index.d.mts +9 -0
  453. package/dist/v1/regexp/index.d.mts.map +1 -0
  454. package/dist/v1/regexp/index.mjs +8 -0
  455. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.cjs +64 -0
  456. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts +11 -0
  457. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts.map +1 -0
  458. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.mjs +51 -0
  459. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.cjs +66 -0
  460. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts +11 -0
  461. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts.map +1 -0
  462. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.mjs +51 -0
  463. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.cjs +39 -0
  464. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts +11 -0
  465. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts.map +1 -0
  466. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.mjs +28 -0
  467. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.cjs +494 -0
  468. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts +142 -0
  469. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts.map +1 -0
  470. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.mjs +445 -0
  471. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.cjs +725 -0
  472. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +293 -0
  473. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -0
  474. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +614 -0
  475. package/dist/v1/webTemplates/bootstrap/5.3/scss/input/Placeholder-Colors-Fix.scss +64 -0
  476. package/dist/v1/webTemplates/bootstrap/5.3/scss/spacing/Spacing-Plus.scss +31 -0
  477. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.cjs +135 -0
  478. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts +83 -0
  479. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts.map +1 -0
  480. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.mjs +120 -0
  481. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.cjs +127 -0
  482. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts +95 -0
  483. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts.map +1 -0
  484. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.mjs +109 -0
  485. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +83 -0
  486. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts +46 -0
  487. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts.map +1 -0
  488. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.mjs +71 -0
  489. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.cjs +493 -0
  490. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts +67 -0
  491. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts.map +1 -0
  492. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs +399 -0
  493. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.cjs +35 -0
  494. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts +6 -0
  495. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts.map +1 -0
  496. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs +29 -0
  497. package/docs/info/RegExp.md +74 -0
  498. package/docs/v1/Exports.md +111 -0
  499. package/docs/v1/README.md +117 -13
  500. package/docs/v1/basics/asyncReplace.md +2 -0
  501. package/docs/v1/basics/browserDetector.md +28 -11
  502. package/docs/v1/basics/crypto.md +85 -0
  503. package/docs/v1/basics/deprecated/html.md +2 -0
  504. package/docs/v1/basics/deprecated/objFilter.md +2 -0
  505. package/docs/v1/basics/html.md +2 -0
  506. package/docs/v1/basics/objChecker.md +55 -0
  507. package/docs/v1/basics/objFilter.md +57 -86
  508. package/docs/v1/basics/promiseUtils.md +12 -3
  509. package/docs/v1/basics/text.md +0 -1
  510. package/docs/v1/libs/array/TinyArrayComparator.md +50 -39
  511. package/docs/v1/libs/fs/TinyFS.md +752 -0
  512. package/docs/v1/libs/fs/TinyOPFSFileSystem.md +495 -0
  513. package/docs/v1/libs/fs/TinyStorageBucketFileSystem.md +407 -0
  514. package/docs/v1/libs/plugin/TinyPlugin.md +441 -0
  515. package/docs/v1/libs/plugin/TinyVersion.md +145 -0
  516. package/docs/v1/libs/router/TinyRouter.md +216 -0
  517. package/docs/v1/libs/storage/TinyMapCache.md +219 -0
  518. package/docs/v1/libs/storage/TinySetMapDatabase.md +478 -0
  519. package/docs/v1/libs/sw/browser/TinyNotificationAdapter.md +280 -0
  520. package/docs/v1/libs/sw/browser/TinyPushManager.md +782 -0
  521. package/docs/v1/libs/sw/browser/TinyServiceWorker.md +365 -0
  522. package/docs/v1/libs/sw/browser/plugins/TabManager.md +133 -0
  523. package/docs/v1/libs/sw/service/TinyPushRouter.md +314 -0
  524. package/docs/v1/libs/sw/service/TinyServiceWorkerEngine.md +748 -0
  525. package/docs/v1/libs/sw/service/plugins/GlobBypassPlugin.md +229 -0
  526. package/docs/v1/libs/sw/service/plugins/GlobCachePlugin.md +91 -0
  527. package/docs/v1/libs/sw/service/plugins/Ping.md +36 -0
  528. package/docs/v1/libs/sw/service/plugins/TabManager.md +64 -0
  529. package/docs/v1/libs/sw/service/plugins/ViteFileDetector.md +92 -0
  530. package/docs/v1/libs/sw/service/shared/TinyPushPayload.md +316 -0
  531. package/docs/v1/libs/text/TinyI18.md +80 -56
  532. package/docs/v1/libs/tools/TinyBrowserMonitor.md +170 -0
  533. package/docs/v1/libs/tools/TinyDebugger.md +117 -1
  534. package/docs/v1/libs/tools/TinyHtmlTagRegexBuilder.md +141 -0
  535. package/docs/v1/libs/tools/TinyHttpResponseRegistry.md +129 -0
  536. package/docs/v1/libs/tools/TinyPasswordValidator.md +153 -0
  537. package/docs/v1/libs/tools/TinyPkgExportValidator.md +45 -1
  538. package/docs/v1/libs/tools/TinySiteMap.md +134 -0
  539. package/docs/v1/libs/tools/TinySiteMapStream.md +97 -0
  540. package/docs/v1/libs/tools/TinyURLSecurityVerifier.md +146 -0
  541. package/docs/v1/libs/tools/TinyUriParser/Discord.md +374 -0
  542. package/docs/v1/libs/tools/TinyUriParser/MatrixProtocol.md +54 -0
  543. package/docs/v1/libs/tools/TinyUriParser.md +128 -0
  544. package/docs/v1/libs/utils/TinyCloner.md +126 -0
  545. package/docs/v1/libs/utils/TinyPromiseQueue.md +1 -1
  546. package/docs/v1/libs/utils/TinyThrottledApi.md +219 -0
  547. package/docs/v1/libs/worker/browser/TinyWebWorker.md +331 -0
  548. package/docs/v1/libs/worker/engine/TinyWebWorkerEngine.md +137 -0
  549. package/docs/v1/regexp/Email.md +127 -0
  550. package/docs/v1/regexp/Glob.md +155 -0
  551. package/docs/v1/regexp/IPv4.md +103 -0
  552. package/docs/v1/regexp/IPv6.md +122 -0
  553. package/docs/v1/regexp/SegmentExtractor.md +120 -0
  554. package/docs/v1/regexp/UrlDetector.md +117 -0
  555. package/docs/v1/regexp/Username/Base.md +131 -0
  556. package/docs/v1/regexp/Username/Discord.md +267 -0
  557. package/docs/v1/regexp/Username/MatrixProtocol.md +131 -0
  558. package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +569 -0
  559. package/docs/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.md +174 -0
  560. package/docs/v1/webTemplates/media/MediaValidator/v1/Browser.md +123 -0
  561. package/docs/v1/webTemplates/media/MediaValidator/v1/Node.md +136 -0
  562. package/docs/v1/webTemplates/multiformats/14.0/IPFSHasher.md +310 -0
  563. package/docs/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.md +131 -0
  564. package/docs/v1/webTemplates/vite/7.3/plugins/githubUtils.md +50 -0
  565. package/package.json +313 -18
  566. package/types/EventEmitter.d.ts +48 -0
  567. package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
@@ -0,0 +1,614 @@
1
+ /**
2
+ * @typedef {import('bootstrap').Modal} Modal
3
+ */
4
+ /**
5
+ * @typedef {typeof import('bootstrap').Modal} ModalClass
6
+ */
7
+ /**
8
+ * @typedef {Object} CustomElementConfig
9
+ * @property {string | string[]} [className] - CSS classes to be added to the element (as a string or an array of strings).
10
+ * @property {Object<string, string|null>} [styles] - CSS properties and values (e.g., { 'background-color': '#000' }).
11
+ */
12
+ /**
13
+ * @typedef {Object} ModalOptions - Configuration options for the dialog content and buttons.
14
+ * @property {string} [title] - The text to be displayed in the modal header.
15
+ * @property {string} [confirmText] - The text to be displayed on the primary confirmation button.
16
+ * @property {string} [cancelText] - The text to be displayed on the secondary cancel button.
17
+ * @property {string} [defaultValue] - The initial value for the input field (used in prompts).
18
+ * @property {CustomElementConfig} [modalConfig] - Customization for the main modal container.
19
+ * @property {CustomElementConfig} [headerConfig] - Customization for the modal header.
20
+ * @property {CustomElementConfig} [titleConfig] - Customization for the modal title.
21
+ * @property {CustomElementConfig} [closeBtnConfig] - Customization for the close button.
22
+ * @property {CustomElementConfig} [bodyConfig] - Customization for the modal body.
23
+ * @property {CustomElementConfig} [footerConfig] - Customization for the modal footer.
24
+ * @property {CustomElementConfig} [confirmBtnConfig] - Customization for the confirm button.
25
+ * @property {CustomElementConfig} [cancelBtnConfig] - Customization for the cancel button.
26
+ * @property {CustomElementConfig} [contentConfig] - Customization for the modal content container.
27
+ * @property {CustomElementConfig} [dialogConfig] - Customization for the modal dialog wrapper.
28
+ */
29
+ /**
30
+ * Utility to replace native alert/confirm/prompt with Bootstrap 5 modals.
31
+ * Built with strict DOM manipulation to prevent XSS.
32
+ */
33
+ class BootstrapDialogs {
34
+ /** @type {Modal|null} */
35
+ static _activeInstance = null;
36
+ /** @type {Modal|null} */
37
+ static _loadingInstance = null;
38
+ /** @type {HTMLElement|null} */
39
+ static _modalElement = null;
40
+ /** @type {HTMLElement|null} */
41
+ static _loadingElement = null;
42
+ /** @type {Function|null} */
43
+ static _activeResolve = null;
44
+ /** @type {'alert'|'confirm'|'prompt'|null} */
45
+ static _activeType = null;
46
+ /** @type {ModalClass|null} */
47
+ static #Modal = null;
48
+ /**
49
+ * Default configurations for all modal elements to ensure consistent look.
50
+ * @type {Object<string, CustomElementConfig>}
51
+ */
52
+ static #defaultConfig = {
53
+ modalConfig: { className: ['modal', 'fade'], styles: { 'z-index': '1065' } },
54
+ dialogConfig: { className: ['modal-dialog', 'modal-dialog-centered'], styles: {} },
55
+ contentConfig: { className: ['modal-content', 'shadow-lg', 'border-0'], styles: {} },
56
+ headerConfig: { className: ['modal-header', 'bg-body-tertiary'], styles: {} },
57
+ titleConfig: { className: ['modal-title', 'fw-bold'], styles: {} },
58
+ closeBtnConfig: { className: ['btn-close'], styles: {} },
59
+ bodyConfig: {
60
+ className: ['modal-body'],
61
+ styles: { 'white-space': 'pre-wrap', 'overflow-wrap': 'anywhere' },
62
+ },
63
+ footerConfig: { className: ['modal-footer', 'border-top-0', 'pt-0'], styles: {} },
64
+ confirmBtnConfig: { className: ['btn', 'btn-primary', 'fw-bold', 'px-4'], styles: {} },
65
+ cancelBtnConfig: { className: ['btn', 'btn-secondary'], styles: {} },
66
+ };
67
+ /**
68
+ * Gets a deep copy of the default configuration.
69
+ * @returns {Object<string, CustomElementConfig>}
70
+ */
71
+ static get defaultConfig() {
72
+ return structuredClone(this.#defaultConfig);
73
+ }
74
+ /**
75
+ * Sets the entire default configuration.
76
+ * @param {Object<string, CustomElementConfig>} config - The new default configuration.
77
+ * @throws {TypeError} If the configuration is invalid.
78
+ */
79
+ static set defaultConfig(config) {
80
+ this._validateOptions(config);
81
+ this.#defaultConfig = structuredClone(config);
82
+ }
83
+ /**
84
+ * Sets the Modal class constructor (e.g., Bootstrap's Modal).
85
+ * @param {ModalClass} Modal - The Bootstrap Modal class constructor.
86
+ * @throws {Error} If a Modal class has already been set.
87
+ */
88
+ static set Modal(Modal) {
89
+ if (BootstrapDialogs.#Modal !== null)
90
+ throw new Error('Modal class has already been initialized.');
91
+ BootstrapDialogs.#Modal = Modal;
92
+ }
93
+ /**
94
+ * Gets the currently set Modal class constructor.
95
+ * @returns {ModalClass} The currently configured Modal class.
96
+ * @throws {Error} If no Modal class has been set.
97
+ */
98
+ static get Modal() {
99
+ if (BootstrapDialogs.#Modal === null)
100
+ throw new Error('Modal class has not been initialized.');
101
+ return BootstrapDialogs.#Modal;
102
+ }
103
+ /**
104
+ * Updates a specific configuration key by merging it with existing defaults.
105
+ * @param {string} key - The key within #defaultConfig to update.
106
+ * @param {CustomElementConfig} config - The partial or full configuration to merge.
107
+ * @private
108
+ */
109
+ static _updateConfigKey(key, config) {
110
+ if (!(key in this.#defaultConfig)) {
111
+ throw new Error(`Invalid configuration key: ${key}`);
112
+ }
113
+ // Merge existing defaults with the new partial configuration
114
+ const updatedConfig = {
115
+ ...this.#defaultConfig[key],
116
+ ...config,
117
+ // Deep merge for styles object
118
+ styles: {
119
+ ...(this.#defaultConfig[key].styles || {}),
120
+ ...(config.styles || {}),
121
+ },
122
+ };
123
+ // Validate the merged object
124
+ const validationWrapper = { [key]: updatedConfig };
125
+ this._validateOptions(validationWrapper);
126
+ this.#defaultConfig[key] = updatedConfig;
127
+ }
128
+ // --- Individual Configuration Setters ---
129
+ /** @param {CustomElementConfig} cfg */
130
+ static set modalConfig(cfg) {
131
+ this._updateConfigKey('modalConfig', cfg);
132
+ }
133
+ static get modalConfig() {
134
+ return structuredClone(this.#defaultConfig.modalConfig);
135
+ }
136
+ /** @param {CustomElementConfig} cfg */
137
+ static set headerConfig(cfg) {
138
+ this._updateConfigKey('headerConfig', cfg);
139
+ }
140
+ static get headerConfig() {
141
+ return structuredClone(this.#defaultConfig.headerConfig);
142
+ }
143
+ /** @param {CustomElementConfig} cfg */
144
+ static set titleConfig(cfg) {
145
+ this._updateConfigKey('titleConfig', cfg);
146
+ }
147
+ static get titleConfig() {
148
+ return structuredClone(this.#defaultConfig.titleConfig);
149
+ }
150
+ /** @param {CustomElementConfig} cfg */
151
+ static set closeBtnConfig(cfg) {
152
+ this._updateConfigKey('closeBtnConfig', cfg);
153
+ }
154
+ static get closeBtnConfig() {
155
+ return structuredClone(this.#defaultConfig.closeBtnConfig);
156
+ }
157
+ /** @param {CustomElementConfig} cfg */
158
+ static set bodyConfig(cfg) {
159
+ this._updateConfigKey('bodyConfig', cfg);
160
+ }
161
+ static get bodyConfig() {
162
+ return structuredClone(this.#defaultConfig.bodyConfig);
163
+ }
164
+ /** @param {CustomElementConfig} cfg */
165
+ static set footerConfig(cfg) {
166
+ this._updateConfigKey('footerConfig', cfg);
167
+ }
168
+ static get footerConfig() {
169
+ return structuredClone(this.#defaultConfig.footerConfig);
170
+ }
171
+ /** @param {CustomElementConfig} cfg */
172
+ static set confirmBtnConfig(cfg) {
173
+ this._updateConfigKey('confirmBtnConfig', cfg);
174
+ }
175
+ static get confirmBtnConfig() {
176
+ return structuredClone(this.#defaultConfig.confirmBtnConfig);
177
+ }
178
+ /** @param {CustomElementConfig} cfg */
179
+ static set cancelBtnConfig(cfg) {
180
+ this._updateConfigKey('cancelBtnConfig', cfg);
181
+ }
182
+ static get cancelBtnConfig() {
183
+ return structuredClone(this.#defaultConfig.cancelBtnConfig);
184
+ }
185
+ /** @param {CustomElementConfig} cfg */
186
+ static set contentConfig(cfg) {
187
+ this._updateConfigKey('contentConfig', cfg);
188
+ }
189
+ static get contentConfig() {
190
+ return structuredClone(this.#defaultConfig.contentConfig);
191
+ }
192
+ /** @param {CustomElementConfig} cfg */
193
+ static set dialogConfig(cfg) {
194
+ this._updateConfigKey('dialogConfig', cfg);
195
+ }
196
+ static get dialogConfig() {
197
+ return structuredClone(this.#defaultConfig.dialogConfig);
198
+ }
199
+ /**
200
+ * Helper to forcefully clean up body styles injected by Bootstrap JS.
201
+ * @returns {void}
202
+ */
203
+ static _restoreBody() {
204
+ const hasDialog = this._modalElement;
205
+ const hasLoading = this._loadingElement;
206
+ // If no modal managed by this class is open, force body cleaning
207
+ if (!hasDialog && !hasLoading) {
208
+ document.body.classList.remove('modal-open');
209
+ document.body.style.overflow = '';
210
+ document.body.style.paddingRight = '';
211
+ document.querySelectorAll('.modal-backdrop').forEach((backdrop) => backdrop.remove());
212
+ }
213
+ }
214
+ /**
215
+ * Applies custom classes and styles to a given element.
216
+ * Combines default configurations with user-provided overrides.
217
+ * @param {HTMLElement} element - The target element.
218
+ * @param {CustomElementConfig} [defaultConfig] - The default configuration.
219
+ * @param {CustomElementConfig} [userConfig] - The user customization.
220
+ * @private
221
+ */
222
+ static _applyCustomizations(element, defaultConfig, userConfig) {
223
+ // Helper to normalize className into a flat array of strings
224
+ const normalizeClasses = (/** @type {string | string[] | undefined} */ val) => {
225
+ if (!val)
226
+ return [];
227
+ if (Array.isArray(val))
228
+ return val.filter(Boolean);
229
+ return val.split(' ').filter(Boolean);
230
+ };
231
+ // 1. Apply Classes (Additive)
232
+ const defaultClasses = normalizeClasses(defaultConfig?.className);
233
+ const userClasses = normalizeClasses(userConfig?.className);
234
+ element.classList.add(...defaultClasses, ...userClasses);
235
+ // 2. Apply Styles (User overrides defaults)
236
+ const combinedStyles = {
237
+ ...(defaultConfig?.styles || {}),
238
+ ...(userConfig?.styles || {}),
239
+ };
240
+ for (const [property, value] of Object.entries(combinedStyles)) {
241
+ element.style.setProperty(property, value);
242
+ }
243
+ }
244
+ /**
245
+ * Validates the ModalOptions object deeply.
246
+ * @param {ModalOptions} options - The options to validate.
247
+ * @throws {TypeError} If validation fails.
248
+ * @private
249
+ */
250
+ static _validateOptions(options) {
251
+ if (typeof options !== 'object' || options === null) {
252
+ throw new TypeError('Options must be a non-null object.');
253
+ }
254
+ const configKeys = [
255
+ 'modalConfig',
256
+ 'headerConfig',
257
+ 'titleConfig',
258
+ 'bodyConfig',
259
+ 'footerConfig',
260
+ 'confirmBtnConfig',
261
+ 'cancelBtnConfig',
262
+ 'closeBtnConfig',
263
+ 'contentConfig',
264
+ 'dialogConfig',
265
+ ];
266
+ for (const key of configKeys) {
267
+ // @ts-ignore
268
+ if (options[key] !== undefined) {
269
+ // @ts-ignore
270
+ const config = options[key];
271
+ if (typeof config !== 'object' || config === null) {
272
+ throw new TypeError(`The property "${key}" must be an object.`);
273
+ }
274
+ if (config.className !== undefined &&
275
+ typeof config.className !== 'string' &&
276
+ !Array.isArray(config.className)) {
277
+ throw new TypeError(`The "className" property in "${key}" must be a string or an array of strings.`);
278
+ }
279
+ if (config.styles !== undefined) {
280
+ if (typeof config.styles !== 'object' || config.styles === null) {
281
+ throw new TypeError(`The "styles" property in "${key}" must be an object.`);
282
+ }
283
+ for (const styleKey of Object.keys(config.styles)) {
284
+ if (typeof config.styles[styleKey] !== 'string') {
285
+ throw new TypeError(`The style property "${styleKey}" in "${key}" must have a string value.`);
286
+ }
287
+ }
288
+ }
289
+ }
290
+ }
291
+ }
292
+ /**
293
+ * Displays a simple alert modal.
294
+ * @param {string} message - The text message to be displayed to the user.
295
+ * @param {ModalOptions} [options={}] - Configuration options for the alert modal.
296
+ * @returns {Promise<void>} A promise that resolves when the alert is closed.
297
+ */
298
+ static async alert(message, options = {}) {
299
+ const title = options.title ?? 'Alert';
300
+ const confirmText = options.confirmText ?? 'OK';
301
+ await this._show(title, message, false, confirmText, null, 'alert', options);
302
+ }
303
+ /**
304
+ * Displays a confirmation modal.
305
+ * @param {string} message - The question or message to be displayed to the user.
306
+ * @param {ModalOptions} [options={}] - Configuration options for the confirmation modal.
307
+ * @returns {Promise<boolean>} A promise that resolves with true if confirmed, or false if cancelled.
308
+ */
309
+ static async confirm(message, options = {}) {
310
+ const title = options.title ?? 'Confirm';
311
+ const confirmText = options.confirmText ?? 'Yes';
312
+ const cancelText = options.cancelText ?? 'No';
313
+ return await this._show(title, message, true, confirmText, cancelText, 'confirm', options);
314
+ }
315
+ /**
316
+ * Displays a prompt modal with an input field.
317
+ * @param {string} message - The instruction or question for the user.
318
+ * @param {string} [defaultValue=''] - The initial value for the input field.
319
+ * @param {ModalOptions} [options={}] - Configuration options for the prompt modal.
320
+ * @returns {Promise<string|null>} A promise that resolves with the input value, or null if cancelled.
321
+ */
322
+ static async prompt(message, defaultValue = '', options = {}) {
323
+ const title = options.title ?? 'Prompt';
324
+ const confirmText = options.confirmText ?? 'Submit';
325
+ const cancelText = options.cancelText ?? 'Cancel';
326
+ // Build prompt body with an input element
327
+ const bodyContainer = document.createElement('div');
328
+ const textNode = document.createElement('div');
329
+ textNode.textContent = message;
330
+ const input = document.createElement('input');
331
+ input.type = 'text';
332
+ input.className = 'form-control mt-2';
333
+ input.id = 'bs-prompt-input';
334
+ input.value = defaultValue;
335
+ bodyContainer.append(textNode, input);
336
+ return await this._show(title, bodyContainer, true, confirmText, cancelText, 'prompt', options);
337
+ }
338
+ /**
339
+ * Displays a global, non-dismissible loading overlay for background/DB tasks.
340
+ * If a loading overlay is already active, it updates the existing message and styles.
341
+ * @param {string} [message='Processing...'] - The text to display while the loading state is active.
342
+ * @param {CustomElementConfig} [config] - Customization for the loading message element.
343
+ * @returns {void}
344
+ */
345
+ static showLoading(message = 'Processing...', config = {}) {
346
+ // Base configuration for the loading text
347
+ const defaultTitleConfig = {
348
+ className: [
349
+ 'fw-bold',
350
+ 'text-white',
351
+ 'shadow-sm',
352
+ 'px-4',
353
+ 'py-2',
354
+ 'rounded',
355
+ 'bg-dark',
356
+ 'bg-opacity-75',
357
+ ],
358
+ };
359
+ // If a loading modal is already active, update the text and apply new styles/classes
360
+ if (this._loadingInstance) {
361
+ const titleElement = this._loadingElement?.querySelector('h5');
362
+ if (titleElement) {
363
+ titleElement.textContent = message;
364
+ // Apply extra classes/styles to the existing element
365
+ this._applyCustomizations(titleElement, defaultTitleConfig, config);
366
+ }
367
+ return;
368
+ }
369
+ const modal = document.createElement('div');
370
+ modal.className = 'modal fade';
371
+ modal.id = 'bs-loading-modal';
372
+ modal.setAttribute('data-bs-backdrop', 'static');
373
+ modal.setAttribute('data-bs-keyboard', 'false');
374
+ modal.style.zIndex = '1070';
375
+ const dialog = document.createElement('div');
376
+ dialog.className = 'modal-dialog modal-dialog-centered modal-sm';
377
+ const content = document.createElement('div');
378
+ content.className = 'modal-content bg-transparent border-0 shadow-none';
379
+ const body = document.createElement('div');
380
+ body.className =
381
+ 'modal-body text-center d-flex flex-column align-items-center justify-content-center';
382
+ const spinner = document.createElement('div');
383
+ spinner.className = 'spinner-border text-primary shadow-sm mb-3';
384
+ spinner.setAttribute('role', 'status');
385
+ spinner.style.width = '4rem';
386
+ spinner.style.height = '4rem';
387
+ const title = document.createElement('h5');
388
+ this._applyCustomizations(title, defaultTitleConfig, config);
389
+ title.textContent = message;
390
+ body.append(spinner, title);
391
+ content.appendChild(body);
392
+ dialog.appendChild(content);
393
+ modal.appendChild(dialog);
394
+ document.body.appendChild(modal);
395
+ this._loadingElement = modal;
396
+ this._loadingInstance = new BootstrapDialogs.Modal(modal, {
397
+ backdrop: 'static',
398
+ keyboard: false,
399
+ });
400
+ this._loadingInstance.show();
401
+ }
402
+ /**
403
+ * Hides and destroys the active loading overlay.
404
+ * @returns {void}
405
+ */
406
+ static hideLoading() {
407
+ if (this._loadingInstance) {
408
+ this._loadingInstance.hide();
409
+ this._loadingInstance.dispose();
410
+ this._loadingInstance = null;
411
+ }
412
+ if (this._loadingElement) {
413
+ this._loadingElement.remove();
414
+ this._loadingElement = null;
415
+ }
416
+ this._restoreBody();
417
+ }
418
+ /**
419
+ * Core method to build the modal DOM structure safely.
420
+ * @param {string} titleText - The text to be placed in the modal header.
421
+ * @param {HTMLElement|string} bodyContent - The content to be placed in the modal body.
422
+ * @param {boolean} showCancel - Whether to display the cancel button.
423
+ * @param {string} confirmText - The text for the confirmation button.
424
+ * @param {string|null} [cancelText='Cancel'] - The text for the cancel button.
425
+ * @param {ModalOptions} [options={}] - Configuration options for customization.
426
+ * @returns {HTMLElement} The constructed modal element.
427
+ */
428
+ static _buildModalElement(titleText, bodyContent, showCancel, confirmText, cancelText = 'Cancel', options = {}) {
429
+ const modal = document.createElement('div');
430
+ modal.setAttribute('tabindex', '-1');
431
+ modal.setAttribute('aria-hidden', 'true');
432
+ this._applyCustomizations(modal, this.#defaultConfig.modalConfig, options.modalConfig);
433
+ const dialog = document.createElement('div');
434
+ this._applyCustomizations(dialog, this.#defaultConfig.dialogConfig, options.dialogConfig);
435
+ const content = document.createElement('div');
436
+ this._applyCustomizations(content, this.#defaultConfig.contentConfig, options.contentConfig);
437
+ // Header
438
+ const header = document.createElement('div');
439
+ this._applyCustomizations(header, this.#defaultConfig.headerConfig, options.headerConfig);
440
+ const title = document.createElement('h5');
441
+ title.textContent = titleText;
442
+ this._applyCustomizations(title, this.#defaultConfig.titleConfig, options.titleConfig);
443
+ const closeBtn = document.createElement('button');
444
+ closeBtn.type = 'button';
445
+ closeBtn.setAttribute('data-bs-dismiss', 'modal');
446
+ closeBtn.setAttribute('aria-label', 'Close');
447
+ this._applyCustomizations(closeBtn, this.#defaultConfig.closeBtnConfig, options.closeBtnConfig);
448
+ header.append(title, closeBtn);
449
+ // Body
450
+ const body = document.createElement('div');
451
+ this._applyCustomizations(body, this.#defaultConfig.bodyConfig, options.bodyConfig);
452
+ if (bodyContent instanceof Node) {
453
+ body.appendChild(bodyContent);
454
+ }
455
+ else {
456
+ body.textContent = bodyContent;
457
+ }
458
+ // Footer
459
+ const footer = document.createElement('div');
460
+ this._applyCustomizations(footer, this.#defaultConfig.footerConfig, options.footerConfig);
461
+ if (showCancel) {
462
+ const cancelBtn = document.createElement('button');
463
+ cancelBtn.type = 'button';
464
+ cancelBtn.setAttribute('data-bs-dismiss', 'modal');
465
+ cancelBtn.textContent = cancelText;
466
+ this._applyCustomizations(cancelBtn, this.#defaultConfig.cancelBtnConfig, options.cancelBtnConfig);
467
+ footer.appendChild(cancelBtn);
468
+ }
469
+ const confirmBtn = document.createElement('button');
470
+ confirmBtn.type = 'button';
471
+ confirmBtn.id = 'bs-modal-confirm';
472
+ confirmBtn.textContent = confirmText;
473
+ this._applyCustomizations(confirmBtn, this.#defaultConfig.confirmBtnConfig, options.confirmBtnConfig);
474
+ footer.appendChild(confirmBtn);
475
+ content.append(header, body, footer);
476
+ dialog.appendChild(content);
477
+ modal.appendChild(dialog);
478
+ return modal;
479
+ }
480
+ /**
481
+ * Clean up any existing modal and resolve its promise.
482
+ * @returns {void}
483
+ */
484
+ static _cleanup() {
485
+ if (this._activeResolve) {
486
+ /** @type {any} */
487
+ let cancelValue;
488
+ if (this._activeType === 'prompt')
489
+ cancelValue = null;
490
+ else if (this._activeType === 'confirm')
491
+ cancelValue = false;
492
+ else
493
+ cancelValue = undefined;
494
+ this._activeResolve(cancelValue);
495
+ this._activeResolve = null;
496
+ }
497
+ if (this._activeInstance) {
498
+ this._activeInstance.dispose();
499
+ this._activeInstance = null;
500
+ }
501
+ if (this._modalElement) {
502
+ this._modalElement.remove();
503
+ this._modalElement = null;
504
+ }
505
+ this._restoreBody();
506
+ }
507
+ /**
508
+ * Internal method to initialize the modal instance and handle lifecycle.
509
+ * @param {string} title - The title text for the modal.
510
+ * @param {HTMLElement|string} bodyContent - The content to be placed in the modal body.
511
+ * @param {boolean} showCancel - Whether to include a cancel button.
512
+ * @param {string} confirmText - The text for the confirmation button.
513
+ * @param {string|null} [cancelText='Cancel'] - The text for the cancel button.
514
+ * @param {'alert'|'confirm'|'prompt'} [type='alert'] - The type of dialog being shown.
515
+ * @param {ModalOptions} [options={}] - Configuration options for customization.
516
+ * @returns {Promise<any>} A promise that resolves with the user's action.
517
+ */
518
+ static _show(title, bodyContent, showCancel, confirmText, cancelText, type = 'alert', options = {}) {
519
+ this._validateOptions(options);
520
+ this._cleanup();
521
+ return new Promise((resolve) => {
522
+ this._activeResolve = resolve;
523
+ this._activeType = type;
524
+ const modalElement = this._buildModalElement(title, bodyContent, showCancel, confirmText, cancelText, options);
525
+ this._modalElement = modalElement;
526
+ document.body.appendChild(modalElement);
527
+ const confirmBtn = modalElement.querySelector('#bs-modal-confirm');
528
+ const inputField = modalElement.querySelector('#bs-prompt-input');
529
+ if (!confirmBtn) {
530
+ throw new Error('Critical Error: Confirm button not found in modal template.');
531
+ }
532
+ this._activeInstance = new BootstrapDialogs.Modal(modalElement);
533
+ /** @type {boolean} */
534
+ let isConfirmed = false;
535
+ /**
536
+ * Handles the confirmation action.
537
+ */
538
+ const handleConfirm = () => {
539
+ isConfirmed = true;
540
+ /** @type {any} */
541
+ let value;
542
+ if (type === 'prompt')
543
+ value = inputField instanceof HTMLInputElement ? inputField.value : null;
544
+ else if (type === 'confirm')
545
+ value = true;
546
+ else
547
+ value = true;
548
+ this._activeInstance?.hide();
549
+ resolve(value);
550
+ };
551
+ confirmBtn.addEventListener('click', handleConfirm);
552
+ // Handle cancel/close
553
+ modalElement.addEventListener('hidden.bs.modal', () => {
554
+ if (this._activeResolve === resolve) {
555
+ if (!isConfirmed) {
556
+ /** @type {any} */
557
+ let value;
558
+ if (type === 'prompt')
559
+ value = null;
560
+ else if (type === 'confirm')
561
+ value = false;
562
+ else
563
+ value = undefined;
564
+ resolve(value);
565
+ }
566
+ this._activeResolve = null;
567
+ this._activeInstance = null;
568
+ }
569
+ modalElement.remove();
570
+ this._restoreBody();
571
+ });
572
+ this._activeInstance.show();
573
+ if (type === 'prompt' && inputField) {
574
+ modalElement.addEventListener('shown.bs.modal', () => {
575
+ if (!(inputField instanceof HTMLInputElement))
576
+ return;
577
+ inputField.focus();
578
+ inputField.select();
579
+ });
580
+ }
581
+ });
582
+ }
583
+ }
584
+ export { BootstrapDialogs };
585
+ /**
586
+ * @param {string} msg - The message to display.
587
+ * @param {ModalOptions} [options] - Configuration options for the alert.
588
+ * @returns {Promise<void>}
589
+ */
590
+ export const alert = (msg, options) => BootstrapDialogs.alert(msg, options);
591
+ /**
592
+ * @param {string} msg - The message to display.
593
+ * @param {string} [def] - The default value for the input field.
594
+ * @param {ModalOptions} [options] - Configuration options for the prompt.
595
+ * @returns {Promise<string|null>}
596
+ */
597
+ export const prompt = (msg, def, options) => BootstrapDialogs.prompt(msg, def, options);
598
+ /**
599
+ * @param {string} msg - The message to display.
600
+ * @param {ModalOptions} [options] - Configuration options for the confirmation.
601
+ * @returns {Promise<boolean>}
602
+ */
603
+ export const confirm = (msg, options) => BootstrapDialogs.confirm(msg, options);
604
+ /**
605
+ * @param {string} msg - The message to display.
606
+ * @param {CustomElementConfig} [config] - Customization for the loading message.
607
+ * @returns {void}
608
+ */
609
+ export const showLoading = (msg, config) => BootstrapDialogs.showLoading(msg, config);
610
+ /**
611
+ * Hides and destroys the active loading overlay.
612
+ * @returns {void}
613
+ */
614
+ export const hideLoading = () => BootstrapDialogs.hideLoading();
@@ -0,0 +1,64 @@
1
+ @import 'bootstrap/scss/functions';
2
+ @import 'bootstrap/scss/variables';
3
+
4
+ /**
5
+ * Fixes placeholder visibility conflicts
6
+ * when using dark background utility classes.
7
+ */
8
+
9
+ // 1. Variables
10
+ // We define a light color with enough opacity to be visible on dark backgrounds.
11
+ $placeholder-light-color: rgba($white, 0.6);
12
+
13
+ /**
14
+ * @mixin fix-placeholder-contrast($color)
15
+ * A mixin to force placeholder visibility.
16
+ * @param {Color} $color - The color to apply to the placeholder.
17
+ */
18
+ @mixin fix-placeholder-contrast($color) {
19
+ // Standard modern browsers
20
+ &::placeholder {
21
+ color: $color !important;
22
+ opacity: 1; // Crucial: Bootstrap sets a default opacity that makes it too dark.
23
+ }
24
+
25
+ // Webkit browsers (Chrome, Safari, Edge)
26
+ &::-webkit-input-placeholder {
27
+ color: $color !important;
28
+ opacity: 1;
29
+ }
30
+
31
+ // Firefox
32
+ &::-moz-placeholder {
33
+ color: $color !important;
34
+ opacity: 1;
35
+ }
36
+
37
+ // Internet Explorer / Legacy Edge
38
+ &:-ms-input-placeholder {
39
+ color: $color !important;
40
+ opacity: 1;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * 2. Specific Fix for Bootstrap Utility Conflicts
46
+ * This targets inputs that have both the Bootstrap form class
47
+ * and the dark background utility class.
48
+ */
49
+ .form-control.bg-dark {
50
+ // We use the mixin to ensure the placeholder is visible against the dark background.
51
+ @include fix-placeholder-contrast($placeholder-light-color);
52
+ }
53
+
54
+ // Fix for when using .text-white on inputs to ensure
55
+ // the placeholder doesn't look "muddy"
56
+ .form-control.text-white {
57
+ @include fix-placeholder-contrast(rgba($white, 0.5));
58
+ }
59
+
60
+ /**
61
+ * 3. Proactive usage (Generic Mixin Example)
62
+ * If you create a custom dark component later, you can simply use:
63
+ * .my-custom-input { @include fix-placeholder-contrast(white); }
64
+ */