tiny-essentials 1.28.15 → 1.28.17
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.
- package/TinyFork.mjs +45 -23
- package/changelog/1/28/16.md +19 -0
- package/changelog/1/28/17.md +11 -0
- package/dist/_/numbers.d.mts.map +1 -0
- package/dist/v1/TinyAdvancedRaffle.min.js +1 -1
- package/dist/v1/TinyBasicsEs.min.js +1 -1
- package/dist/v1/TinyDebugger.min.js +1 -1
- package/dist/v1/TinyEssentials.min.js +1 -1
- package/dist/v1/TinyI18.min.js +1 -1
- package/dist/v1/TinyIframeEvents.min.js +1 -1
- package/dist/v1/TinyLocalStorage.min.js +1 -1
- package/dist/v1/TinyMediaPlayer.min.js +1 -1
- package/dist/v1/TinyNewWinEvents.min.js +1 -1
- package/dist/v1/TinyRadioFm.min.js +1 -1
- package/dist/v1/TinySmartScroller.min.js +1 -1
- package/dist/v1/TinyUploadClicker.min.js +1 -1
- package/dist/v1/basics/array.d.mts.map +1 -0
- package/dist/v1/basics/browserDetector.d.mts.map +1 -0
- package/dist/v1/basics/clock.d.mts.map +1 -0
- package/dist/v1/basics/collision.d.mts.map +1 -0
- package/dist/v1/basics/deprecated/html.d.mts.map +1 -0
- package/dist/v1/basics/extendObjType/Buffer.d.mts.map +1 -0
- package/dist/v1/basics/fullScreen.d.mts.map +1 -0
- package/dist/v1/basics/html.d.mts.map +1 -0
- package/dist/v1/basics/index.cjs +4 -0
- package/dist/v1/basics/index.d.mts +2 -1
- package/dist/v1/basics/index.d.mts.map +1 -0
- package/dist/v1/basics/index.mjs +2 -1
- package/dist/v1/basics/jsonFilter.cjs +267 -0
- package/dist/v1/basics/jsonFilter.d.mts +91 -0
- package/dist/v1/basics/jsonFilter.d.mts.map +1 -0
- package/dist/v1/basics/jsonFilter.mjs +237 -0
- package/dist/v1/basics/mediaContent.cjs +96 -104
- package/dist/v1/basics/mediaContent.d.mts.map +1 -0
- package/dist/v1/basics/mediaContent.mjs +94 -102
- package/dist/v1/basics/objChecker.d.mts.map +1 -0
- package/dist/v1/basics/objFilter.d.mts.map +1 -0
- package/dist/v1/basics/promiseUtils.d.mts.map +1 -0
- package/dist/v1/basics/simpleMath.d.mts.map +1 -0
- package/dist/v1/basics/text.d.mts.map +1 -0
- package/dist/v1/fileManager/asyncFuncs.d.mts.map +1 -0
- package/dist/v1/fileManager/index.d.mts.map +1 -0
- package/dist/v1/fileManager/normalFuncs.d.mts.map +1 -0
- package/dist/v1/index.cjs +53 -45
- package/dist/v1/index.d.mts +48 -45
- package/dist/v1/index.d.mts.map +1 -0
- package/dist/v1/index.mjs +48 -45
- package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -0
- package/dist/v1/libs/array/TinyArrayPaginator.d.mts.map +1 -0
- package/dist/v1/libs/color/ColorSafeStringify.d.mts.map +1 -0
- package/dist/v1/libs/color/TinyColorConverter.d.mts.map +1 -0
- package/dist/v1/libs/color/TinyColorValidator.d.mts.map +1 -0
- package/dist/v1/libs/{TinyDayNightCycle.cjs → game/TinyDayNightCycle.cjs} +2 -2
- package/dist/v1/libs/game/TinyDayNightCycle.d.mts.map +1 -0
- package/dist/v1/libs/{TinyDayNightCycle.mjs → game/TinyDayNightCycle.mjs} +1 -1
- package/dist/v1/libs/{TinyGamepad.cjs → game/TinyGamepad.cjs} +2 -2
- package/dist/v1/libs/game/TinyGamepad.d.mts.map +1 -0
- package/dist/v1/libs/{TinyGamepad.mjs → game/TinyGamepad.mjs} +1 -1
- package/dist/v1/libs/game/TinyInventory.d.mts.map +1 -0
- package/dist/v1/libs/game/TinyInventoryTrader.d.mts.map +1 -0
- package/dist/v1/libs/game/TinyLevelUp.d.mts.map +1 -0
- package/dist/v1/libs/game/TinyNeedBar.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyDomReadyManager.d.mts.map +1 -0
- package/dist/v1/libs/{TinyElementObserver.cjs → html/TinyElementObserver.cjs} +2 -2
- package/dist/v1/libs/html/TinyElementObserver.d.mts.map +1 -0
- package/dist/v1/libs/{TinyElementObserver.mjs → html/TinyElementObserver.mjs} +1 -1
- package/dist/v1/libs/html/TinyHtml/TinyHtmlAnchor.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlButton.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlCanvas.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlDatalist.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlEmbed.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlForm.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlIcon.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlIframe.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlImage.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlLink.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlMedia.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlScript.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlSelect.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlStyle.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlTemplate.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/TinyHtmlTextarea.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/index.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/TinyHtmlColorInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/TinyHtmlFileInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/TinyHtmlHiddenInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/TinyHtmlImageInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/button/TinyHtmlButtonInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/button/TinyHtmlResetInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/button/TinyHtmlSubmitInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/check/TinyHtmlCheckboxInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/check/TinyHtmlRadioInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/date/TinyHtmlDateInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/date/TinyHtmlDateTimeInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/date/TinyHtmlMonthInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/date/TinyHtmlTimeInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/date/TinyHtmlWeekInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/number/TinyHtmlNumberInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/number/TinyHtmlRangeInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/text/TinyHtmlEmailInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/text/TinyHtmlPasswordInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/text/TinyHtmlSearchInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/text/TinyHtmlTelInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/text/TinyHtmlTextInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/input/text/TinyHtmlUrlInput.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/media/TinyHtmlAudio.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/media/TinyHtmlObject.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/media/TinyHtmlSource.d.mts.map +1 -0
- package/dist/v1/libs/html/TinyHtml/media/TinyHtmlVideo.d.mts.map +1 -0
- package/dist/v1/libs/{TinyHtml.cjs → html/TinyHtml.cjs} +4 -4
- package/dist/v1/libs/{TinyHtml.d.mts → html/TinyHtml.d.mts} +3 -3
- package/dist/v1/libs/html/TinyHtml.d.mts.map +1 -0
- package/dist/v1/libs/{TinyHtml.mjs → html/TinyHtml.mjs} +4 -4
- package/dist/v1/libs/{TinyDragDropDetector.cjs → html/drag/TinyDragDropDetector.cjs} +2 -2
- package/dist/v1/libs/html/drag/TinyDragDropDetector.d.mts.map +1 -0
- package/dist/v1/libs/{TinyDragDropDetector.mjs → html/drag/TinyDragDropDetector.mjs} +1 -1
- package/dist/v1/libs/{TinyDragger.cjs → html/drag/TinyDragger.cjs} +5 -5
- package/dist/v1/libs/{TinyDragger.d.mts → html/drag/TinyDragger.d.mts} +2 -2
- package/dist/v1/libs/html/drag/TinyDragger.d.mts.map +1 -0
- package/dist/v1/libs/{TinyDragger.mjs → html/drag/TinyDragger.mjs} +4 -4
- package/dist/v1/libs/{TinyIframeEvents.cjs → html/events/TinyIframeEvents.cjs} +3 -3
- package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -0
- package/dist/v1/libs/{TinyIframeEvents.mjs → html/events/TinyIframeEvents.mjs} +2 -2
- package/dist/v1/libs/{TinyNewWinEvents.cjs → html/events/TinyNewWinEvents.cjs} +2 -2
- package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -0
- package/dist/v1/libs/{TinyNewWinEvents.mjs → html/events/TinyNewWinEvents.mjs} +1 -1
- package/dist/v1/libs/{TinyNotifications.cjs → html/notification/TinyNotifications.cjs} +1 -1
- package/dist/v1/libs/html/notification/TinyNotifications.d.mts.map +1 -0
- package/dist/v1/libs/{TinyNotifications.mjs → html/notification/TinyNotifications.mjs} +1 -1
- package/dist/v1/libs/{TinyNotifyCenter.cjs → html/notification/TinyNotifyCenter.cjs} +2 -2
- package/dist/v1/libs/html/notification/TinyNotifyCenter.d.mts.map +1 -0
- package/dist/v1/libs/{TinyNotifyCenter.mjs → html/notification/TinyNotifyCenter.mjs} +1 -1
- package/dist/v1/libs/{TinyToastNotify.cjs → html/notification/TinyToastNotify.cjs} +2 -2
- package/dist/v1/libs/html/notification/TinyToastNotify.d.mts.map +1 -0
- package/dist/v1/libs/{TinyToastNotify.mjs → html/notification/TinyToastNotify.mjs} +1 -1
- package/dist/v1/libs/{TinyAfterScrollWatcher.cjs → html/scroll/TinyAfterScrollWatcher.cjs} +2 -2
- package/dist/v1/libs/html/scroll/TinyAfterScrollWatcher.d.mts.map +1 -0
- package/dist/v1/libs/{TinyAfterScrollWatcher.mjs → html/scroll/TinyAfterScrollWatcher.mjs} +1 -1
- package/dist/v1/libs/{TinySmartScroller.cjs → html/scroll/TinySmartScroller.cjs} +4 -4
- package/dist/v1/libs/{TinySmartScroller.d.mts → html/scroll/TinySmartScroller.d.mts} +2 -2
- package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -0
- package/dist/v1/libs/{TinySmartScroller.mjs → html/scroll/TinySmartScroller.mjs} +3 -3
- package/dist/v1/libs/{TinyAnalogClock.cjs → html/templates/TinyAnalogClock.cjs} +2 -2
- package/dist/v1/libs/html/templates/TinyAnalogClock.d.mts.map +1 -0
- package/dist/v1/libs/{TinyAnalogClock.mjs → html/templates/TinyAnalogClock.mjs} +1 -1
- package/dist/v1/libs/html/templates/TinyCookieConsent.d.mts.map +1 -0
- package/dist/v1/libs/html/templates/TinyLoadingScreen.d.mts.map +1 -0
- package/dist/v1/libs/{TinyUploadClicker.cjs → html/upload/TinyUploadClicker.cjs} +1 -10
- package/dist/v1/libs/{TinyUploadClicker.d.mts → html/upload/TinyUploadClicker.d.mts} +24 -24
- package/dist/v1/libs/html/upload/TinyUploadClicker.d.mts.map +1 -0
- package/dist/v1/libs/{TinyUploadClicker.mjs → html/upload/TinyUploadClicker.mjs} +1 -1
- package/dist/v1/libs/{TinyAdvancedRaffle.cjs → math/TinyAdvancedRaffle.cjs} +2 -2
- package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -0
- package/dist/v1/libs/{TinyAdvancedRaffle.mjs → math/TinyAdvancedRaffle.mjs} +1 -1
- package/dist/v1/libs/math/TinyMamdaniInferenceSystem.d.mts.map +1 -0
- package/dist/v1/libs/{TinyRateLimiter.cjs → math/TinyRateLimiter.cjs} +2 -2
- package/dist/v1/libs/math/TinyRateLimiter.d.mts.map +1 -0
- package/dist/v1/libs/{TinyRateLimiter.mjs → math/TinyRateLimiter.mjs} +1 -1
- package/dist/v1/libs/{TinySimpleDice.cjs → math/TinySimpleDice.cjs} +1 -1
- package/dist/v1/libs/math/TinySimpleDice.d.mts.map +1 -0
- package/dist/v1/libs/{TinySimpleDice.mjs → math/TinySimpleDice.mjs} +1 -1
- package/dist/v1/libs/{TinyTimeout.cjs → math/TinyTimeout.cjs} +3 -3
- package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -0
- package/dist/v1/libs/{TinyTimeout.mjs → math/TinyTimeout.mjs} +2 -2
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/HtmlAudio.cjs +5 -5
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/HtmlAudio.d.mts +4 -4
- package/dist/v1/libs/media/TinyMediaPlayer/HtmlAudio.d.mts.map +1 -0
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/HtmlAudio.mjs +4 -4
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/HtmlVideo.cjs +5 -5
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/HtmlVideo.d.mts +4 -4
- package/dist/v1/libs/media/TinyMediaPlayer/HtmlVideo.d.mts.map +1 -0
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/HtmlVideo.mjs +4 -4
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/Mock.cjs +5 -5
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/Mock.d.mts +2 -2
- package/dist/v1/libs/media/TinyMediaPlayer/Mock.d.mts.map +1 -0
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/Mock.mjs +4 -4
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/SoundCloud.cjs +6 -6
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/SoundCloud.d.mts +4 -4
- package/dist/v1/libs/media/TinyMediaPlayer/SoundCloud.d.mts.map +1 -0
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/SoundCloud.mjs +5 -5
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/Youtube.cjs +6 -6
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/Youtube.d.mts +4 -4
- package/dist/v1/libs/media/TinyMediaPlayer/Youtube.d.mts.map +1 -0
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/Youtube.mjs +5 -5
- package/dist/v1/libs/media/TinyMediaPlayer/docs/SoundCloudWidget.d.mts.map +1 -0
- package/dist/v1/libs/media/TinyMediaPlayer/docs/YouTubePlayer.d.mts.map +1 -0
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/index.cjs +4 -4
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/index.d.mts +2 -2
- package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -0
- package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/index.mjs +3 -3
- package/dist/v1/libs/{TinyMediaPlayer.cjs → media/TinyMediaPlayer.cjs} +13 -13
- package/dist/v1/libs/{TinyMediaPlayer.d.mts → media/TinyMediaPlayer.d.mts} +18 -18
- package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -0
- package/dist/v1/libs/{TinyMediaPlayer.mjs → media/TinyMediaPlayer.mjs} +13 -13
- package/dist/v1/libs/{TinyRadioFm.cjs → media/TinyRadioFm.cjs} +15 -15
- package/dist/v1/libs/{TinyRadioFm.d.mts → media/TinyRadioFm.d.mts} +22 -22
- package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -0
- package/dist/v1/libs/{TinyRadioFm.mjs → media/TinyRadioFm.mjs} +14 -14
- package/dist/v1/libs/{TinyLocalStorage.cjs → storage/TinyLocalStorage.cjs} +3 -3
- package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -0
- package/dist/v1/libs/{TinyLocalStorage.mjs → storage/TinyLocalStorage.mjs} +2 -2
- package/dist/v1/libs/text/TinyClipboard.d.mts.map +1 -0
- package/dist/v1/libs/{TinyI18.cjs → text/TinyI18.cjs} +2 -2
- package/dist/v1/libs/text/TinyI18.d.mts.map +1 -0
- package/dist/v1/libs/{TinyI18.mjs → text/TinyI18.mjs} +1 -1
- package/dist/v1/libs/{TinyTextDiffer.cjs → text/TinyTextDiffer.cjs} +2 -2
- package/dist/v1/libs/text/TinyTextDiffer.d.mts.map +1 -0
- package/dist/v1/libs/{TinyTextDiffer.mjs → text/TinyTextDiffer.mjs} +1 -1
- package/dist/v1/libs/text/TinyTextRangeEditor.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyTextarea.d.mts.map +1 -0
- package/dist/v1/libs/{TinyClassManager → tools/TinyClassManager}/TinyPluginInliner.cjs +1 -1
- package/dist/v1/libs/tools/TinyClassManager/TinyPluginInliner.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyClassManager.d.mts.map +1 -0
- package/dist/v1/libs/{TinyDebugger.cjs → tools/TinyDebugger.cjs} +2 -2
- package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -0
- package/dist/v1/libs/{TinyDebugger.mjs → tools/TinyDebugger.mjs} +2 -2
- package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +462 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +104 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +407 -0
- package/dist/v1/libs/tools/examples/TinyClassManager.d.mts.map +1 -0
- package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -0
- package/dist/v1/libs/{UltraRandomMsgGen.cjs → utils/UltraRandomMsgGen.cjs} +2 -2
- package/dist/v1/libs/utils/UltraRandomMsgGen.d.mts.map +1 -0
- package/dist/v1/libs/{UltraRandomMsgGen.mjs → utils/UltraRandomMsgGen.mjs} +1 -1
- package/dist/v1/libs/{utils.d.mts → utils/tools.d.mts} +1 -1
- package/dist/v1/libs/utils/tools.d.mts.map +1 -0
- package/docs/TinyFork.md +2 -2
- package/docs/v1/Exports.md +130 -92
- package/docs/v1/README.md +102 -50
- package/docs/v1/basics/jsonFilter.md +194 -0
- package/docs/v1/libs/{TinyArrayComparator.md → array/TinyArrayComparator.md} +1 -1
- package/docs/v1/libs/{TinyArrayPaginator.md → array/TinyArrayPaginator.md} +1 -1
- package/docs/v1/libs/{ColorSafeStringify.md → color/ColorSafeStringify.md} +1 -1
- package/docs/v1/libs/{TinyLevelUp.md → game/TinyLevelUp.md} +1 -1
- package/docs/v1/libs/{TinyDomReadyManager.md → html/TinyDomReadyManager.md} +1 -1
- package/docs/v1/libs/{TinyElementObserver.md → html/TinyElementObserver.md} +1 -1
- package/docs/v1/libs/{TinyDragDropDetector.md → html/drag/TinyDragDropDetector.md} +1 -1
- package/docs/v1/libs/{TinyDragger.md → html/drag/TinyDragger.md} +1 -1
- package/docs/v1/libs/{TinyIframeEvents.md → html/events/TinyIframeEvents.md} +2 -2
- package/docs/v1/libs/{TinyNewWinEvents.md → html/events/TinyNewWinEvents.md} +2 -2
- package/docs/v1/libs/{TinyNotifications.md → html/notification/TinyNotifications.md} +1 -1
- package/docs/v1/libs/{TinyAfterScrollWatcher.md → html/scroll/TinyAfterScrollWatcher.md} +1 -1
- package/docs/v1/libs/{TinyAnalogClock.md → html/templates/TinyAnalogClock.md} +1 -1
- package/docs/v1/libs/{TinyCookieConsent.md → html/templates/TinyCookieConsent.md} +1 -1
- package/docs/v1/libs/{TinyLoadingScreen.md → html/templates/TinyLoadingScreen.md} +1 -1
- package/docs/v1/libs/{TinyMediaPlayer.md → media/TinyMediaPlayer.md} +8 -8
- package/docs/v1/libs/{TinyClipboard.md → text/TinyClipboard.md} +1 -1
- package/docs/v1/libs/{TinyTextDiffer.md → text/TinyTextDiffer.md} +1 -1
- package/docs/v1/libs/{TinyTextarea.md → text/TinyTextarea.md} +1 -1
- package/docs/v1/libs/{TinyClassManager → tools/TinyClassManager}/TinyPluginInliner.md +2 -2
- package/docs/v1/libs/{TinyClassManager.md → tools/TinyClassManager.md} +1 -1
- package/docs/v1/libs/{TinyDebugger.md → tools/TinyDebugger.md} +1 -1
- package/docs/v1/libs/tools/TinyPkgExportValidator.md +234 -0
- package/docs/v1/libs/{TinyPromiseQueue.md → utils/TinyPromiseQueue.md} +2 -2
- package/package.json +309 -303
- package/dist/v1/build/ColorSafeStringify.cjs +0 -7
- package/dist/v1/build/ColorSafeStringify.d.mts +0 -3
- package/dist/v1/build/ColorSafeStringify.mjs +0 -2
- package/dist/v1/build/TinyAdvancedRaffle.cjs +0 -7
- package/dist/v1/build/TinyAdvancedRaffle.d.mts +0 -3
- package/dist/v1/build/TinyAdvancedRaffle.mjs +0 -2
- package/dist/v1/build/TinyAfterScrollWatcher.cjs +0 -7
- package/dist/v1/build/TinyAfterScrollWatcher.d.mts +0 -3
- package/dist/v1/build/TinyAfterScrollWatcher.mjs +0 -2
- package/dist/v1/build/TinyAnalogClock.cjs +0 -7
- package/dist/v1/build/TinyAnalogClock.d.mts +0 -3
- package/dist/v1/build/TinyAnalogClock.mjs +0 -2
- package/dist/v1/build/TinyArrayComparator.cjs +0 -7
- package/dist/v1/build/TinyArrayComparator.d.mts +0 -3
- package/dist/v1/build/TinyArrayComparator.mjs +0 -2
- package/dist/v1/build/TinyArrayPaginator.cjs +0 -7
- package/dist/v1/build/TinyArrayPaginator.d.mts +0 -3
- package/dist/v1/build/TinyArrayPaginator.mjs +0 -2
- package/dist/v1/build/TinyClassManager.cjs +0 -7
- package/dist/v1/build/TinyClassManager.d.mts +0 -3
- package/dist/v1/build/TinyClassManager.mjs +0 -2
- package/dist/v1/build/TinyClipboard.cjs +0 -7
- package/dist/v1/build/TinyClipboard.d.mts +0 -3
- package/dist/v1/build/TinyClipboard.mjs +0 -2
- package/dist/v1/build/TinyColorConverter.cjs +0 -7
- package/dist/v1/build/TinyColorConverter.d.mts +0 -3
- package/dist/v1/build/TinyColorConverter.mjs +0 -2
- package/dist/v1/build/TinyColorValidator.cjs +0 -7
- package/dist/v1/build/TinyColorValidator.d.mts +0 -3
- package/dist/v1/build/TinyColorValidator.mjs +0 -2
- package/dist/v1/build/TinyCookieConsent.cjs +0 -7
- package/dist/v1/build/TinyCookieConsent.d.mts +0 -3
- package/dist/v1/build/TinyCookieConsent.mjs +0 -2
- package/dist/v1/build/TinyDayNightCycle.cjs +0 -7
- package/dist/v1/build/TinyDayNightCycle.d.mts +0 -3
- package/dist/v1/build/TinyDayNightCycle.mjs +0 -2
- package/dist/v1/build/TinyDebugger.cjs +0 -7
- package/dist/v1/build/TinyDebugger.d.mts +0 -3
- package/dist/v1/build/TinyDebugger.mjs +0 -2
- package/dist/v1/build/TinyDomReadyManager.cjs +0 -7
- package/dist/v1/build/TinyDomReadyManager.d.mts +0 -3
- package/dist/v1/build/TinyDomReadyManager.mjs +0 -2
- package/dist/v1/build/TinyDragDropDetector.cjs +0 -7
- package/dist/v1/build/TinyDragDropDetector.d.mts +0 -3
- package/dist/v1/build/TinyDragDropDetector.mjs +0 -2
- package/dist/v1/build/TinyDragger.cjs +0 -7
- package/dist/v1/build/TinyDragger.d.mts +0 -3
- package/dist/v1/build/TinyDragger.mjs +0 -2
- package/dist/v1/build/TinyElementObserver.cjs +0 -7
- package/dist/v1/build/TinyElementObserver.d.mts +0 -3
- package/dist/v1/build/TinyElementObserver.mjs +0 -2
- package/dist/v1/build/TinyGamepad.cjs +0 -7
- package/dist/v1/build/TinyGamepad.d.mts +0 -3
- package/dist/v1/build/TinyGamepad.mjs +0 -2
- package/dist/v1/build/TinyHtml.cjs +0 -7
- package/dist/v1/build/TinyHtml.d.mts +0 -3
- package/dist/v1/build/TinyHtml.mjs +0 -2
- package/dist/v1/build/TinyI18.cjs +0 -7
- package/dist/v1/build/TinyI18.d.mts +0 -3
- package/dist/v1/build/TinyI18.mjs +0 -2
- package/dist/v1/build/TinyIframeEvents.cjs +0 -7
- package/dist/v1/build/TinyIframeEvents.d.mts +0 -3
- package/dist/v1/build/TinyIframeEvents.mjs +0 -2
- package/dist/v1/build/TinyInventory.cjs +0 -7
- package/dist/v1/build/TinyInventory.d.mts +0 -3
- package/dist/v1/build/TinyInventory.mjs +0 -2
- package/dist/v1/build/TinyInventoryTrader.cjs +0 -7
- package/dist/v1/build/TinyInventoryTrader.d.mts +0 -3
- package/dist/v1/build/TinyInventoryTrader.mjs +0 -2
- package/dist/v1/build/TinyLevelUp.cjs +0 -7
- package/dist/v1/build/TinyLevelUp.d.mts +0 -3
- package/dist/v1/build/TinyLevelUp.mjs +0 -2
- package/dist/v1/build/TinyLoadingScreen.cjs +0 -7
- package/dist/v1/build/TinyLoadingScreen.d.mts +0 -3
- package/dist/v1/build/TinyLoadingScreen.mjs +0 -2
- package/dist/v1/build/TinyLocalStorage.cjs +0 -7
- package/dist/v1/build/TinyLocalStorage.d.mts +0 -3
- package/dist/v1/build/TinyLocalStorage.mjs +0 -2
- package/dist/v1/build/TinyMediaPlayer.cjs +0 -7
- package/dist/v1/build/TinyMediaPlayer.d.mts +0 -3
- package/dist/v1/build/TinyMediaPlayer.mjs +0 -2
- package/dist/v1/build/TinyNeedBar.cjs +0 -7
- package/dist/v1/build/TinyNeedBar.d.mts +0 -3
- package/dist/v1/build/TinyNeedBar.mjs +0 -2
- package/dist/v1/build/TinyNewWinEvents.cjs +0 -7
- package/dist/v1/build/TinyNewWinEvents.d.mts +0 -3
- package/dist/v1/build/TinyNewWinEvents.mjs +0 -2
- package/dist/v1/build/TinyNotifications.cjs +0 -7
- package/dist/v1/build/TinyNotifications.d.mts +0 -3
- package/dist/v1/build/TinyNotifications.mjs +0 -2
- package/dist/v1/build/TinyNotifyCenter.cjs +0 -7
- package/dist/v1/build/TinyNotifyCenter.d.mts +0 -3
- package/dist/v1/build/TinyNotifyCenter.mjs +0 -2
- package/dist/v1/build/TinyPromiseQueue.cjs +0 -7
- package/dist/v1/build/TinyPromiseQueue.d.mts +0 -3
- package/dist/v1/build/TinyPromiseQueue.mjs +0 -2
- package/dist/v1/build/TinyRadioFm.cjs +0 -7
- package/dist/v1/build/TinyRadioFm.d.mts +0 -3
- package/dist/v1/build/TinyRadioFm.mjs +0 -2
- package/dist/v1/build/TinyRateLimiter.cjs +0 -7
- package/dist/v1/build/TinyRateLimiter.d.mts +0 -3
- package/dist/v1/build/TinyRateLimiter.mjs +0 -2
- package/dist/v1/build/TinySimpleDice.cjs +0 -7
- package/dist/v1/build/TinySimpleDice.d.mts +0 -3
- package/dist/v1/build/TinySimpleDice.mjs +0 -2
- package/dist/v1/build/TinySmartScroller.cjs +0 -7
- package/dist/v1/build/TinySmartScroller.d.mts +0 -3
- package/dist/v1/build/TinySmartScroller.mjs +0 -2
- package/dist/v1/build/TinyTextDiffer.cjs +0 -7
- package/dist/v1/build/TinyTextDiffer.d.mts +0 -3
- package/dist/v1/build/TinyTextDiffer.mjs +0 -2
- package/dist/v1/build/TinyTextRangeEditor.cjs +0 -7
- package/dist/v1/build/TinyTextRangeEditor.d.mts +0 -3
- package/dist/v1/build/TinyTextRangeEditor.mjs +0 -2
- package/dist/v1/build/TinyTextarea.cjs +0 -7
- package/dist/v1/build/TinyTextarea.d.mts +0 -3
- package/dist/v1/build/TinyTextarea.mjs +0 -2
- package/dist/v1/build/TinyTimeout.cjs +0 -7
- package/dist/v1/build/TinyTimeout.d.mts +0 -3
- package/dist/v1/build/TinyTimeout.mjs +0 -2
- package/dist/v1/build/TinyToastNotify.cjs +0 -7
- package/dist/v1/build/TinyToastNotify.d.mts +0 -3
- package/dist/v1/build/TinyToastNotify.mjs +0 -2
- package/dist/v1/build/TinyUploadClicker.cjs +0 -7
- package/dist/v1/build/TinyUploadClicker.d.mts +0 -3
- package/dist/v1/build/TinyUploadClicker.mjs +0 -2
- package/dist/v1/build/UltraRandomMsgGen.cjs +0 -7
- package/dist/v1/build/UltraRandomMsgGen.d.mts +0 -3
- package/dist/v1/build/UltraRandomMsgGen.mjs +0 -2
- /package/dist/v1/libs/{TinyArrayComparator.cjs → array/TinyArrayComparator.cjs} +0 -0
- /package/dist/v1/libs/{TinyArrayComparator.d.mts → array/TinyArrayComparator.d.mts} +0 -0
- /package/dist/v1/libs/{TinyArrayComparator.mjs → array/TinyArrayComparator.mjs} +0 -0
- /package/dist/v1/libs/{TinyArrayPaginator.cjs → array/TinyArrayPaginator.cjs} +0 -0
- /package/dist/v1/libs/{TinyArrayPaginator.d.mts → array/TinyArrayPaginator.d.mts} +0 -0
- /package/dist/v1/libs/{TinyArrayPaginator.mjs → array/TinyArrayPaginator.mjs} +0 -0
- /package/dist/v1/libs/{ColorSafeStringify.cjs → color/ColorSafeStringify.cjs} +0 -0
- /package/dist/v1/libs/{ColorSafeStringify.d.mts → color/ColorSafeStringify.d.mts} +0 -0
- /package/dist/v1/libs/{ColorSafeStringify.mjs → color/ColorSafeStringify.mjs} +0 -0
- /package/dist/v1/libs/{TinyColorConverter.cjs → color/TinyColorConverter.cjs} +0 -0
- /package/dist/v1/libs/{TinyColorConverter.d.mts → color/TinyColorConverter.d.mts} +0 -0
- /package/dist/v1/libs/{TinyColorConverter.mjs → color/TinyColorConverter.mjs} +0 -0
- /package/dist/v1/libs/{TinyColorValidator.cjs → color/TinyColorValidator.cjs} +0 -0
- /package/dist/v1/libs/{TinyColorValidator.d.mts → color/TinyColorValidator.d.mts} +0 -0
- /package/dist/v1/libs/{TinyColorValidator.mjs → color/TinyColorValidator.mjs} +0 -0
- /package/dist/v1/libs/{TinyDayNightCycle.d.mts → game/TinyDayNightCycle.d.mts} +0 -0
- /package/dist/v1/libs/{TinyGamepad.d.mts → game/TinyGamepad.d.mts} +0 -0
- /package/dist/v1/libs/{TinyInventory.cjs → game/TinyInventory.cjs} +0 -0
- /package/dist/v1/libs/{TinyInventory.d.mts → game/TinyInventory.d.mts} +0 -0
- /package/dist/v1/libs/{TinyInventory.mjs → game/TinyInventory.mjs} +0 -0
- /package/dist/v1/libs/{TinyInventoryTrader.cjs → game/TinyInventoryTrader.cjs} +0 -0
- /package/dist/v1/libs/{TinyInventoryTrader.d.mts → game/TinyInventoryTrader.d.mts} +0 -0
- /package/dist/v1/libs/{TinyInventoryTrader.mjs → game/TinyInventoryTrader.mjs} +0 -0
- /package/dist/v1/libs/{TinyLevelUp.cjs → game/TinyLevelUp.cjs} +0 -0
- /package/dist/v1/libs/{TinyLevelUp.d.mts → game/TinyLevelUp.d.mts} +0 -0
- /package/dist/v1/libs/{TinyLevelUp.mjs → game/TinyLevelUp.mjs} +0 -0
- /package/dist/v1/libs/{TinyNeedBar.cjs → game/TinyNeedBar.cjs} +0 -0
- /package/dist/v1/libs/{TinyNeedBar.d.mts → game/TinyNeedBar.d.mts} +0 -0
- /package/dist/v1/libs/{TinyNeedBar.mjs → game/TinyNeedBar.mjs} +0 -0
- /package/dist/v1/libs/{TinyDomReadyManager.cjs → html/TinyDomReadyManager.cjs} +0 -0
- /package/dist/v1/libs/{TinyDomReadyManager.d.mts → html/TinyDomReadyManager.d.mts} +0 -0
- /package/dist/v1/libs/{TinyDomReadyManager.mjs → html/TinyDomReadyManager.mjs} +0 -0
- /package/dist/v1/libs/{TinyElementObserver.d.mts → html/TinyElementObserver.d.mts} +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlAnchor.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlAnchor.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlAnchor.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlButton.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlButton.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlButton.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlCanvas.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlCanvas.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlCanvas.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlDatalist.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlDatalist.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlDatalist.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlEmbed.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlEmbed.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlEmbed.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlForm.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlForm.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlForm.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlIcon.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlIcon.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlIcon.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlIframe.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlIframe.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlIframe.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlImage.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlImage.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlImage.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlLink.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlLink.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlLink.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlMedia.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlMedia.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlMedia.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlScript.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlScript.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlScript.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlSelect.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlSelect.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlSelect.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlStyle.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlStyle.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlStyle.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlTemplate.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlTemplate.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlTemplate.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlTextarea.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlTextarea.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/TinyHtmlTextarea.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/index.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/index.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/index.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlColorInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlColorInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlColorInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlFileInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlFileInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlFileInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlHiddenInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlHiddenInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlHiddenInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlImageInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlImageInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/TinyHtmlImageInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlButtonInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlButtonInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlButtonInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlResetInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlResetInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlResetInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlSubmitInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlSubmitInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/button/TinyHtmlSubmitInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/check/TinyHtmlCheckboxInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/check/TinyHtmlCheckboxInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/check/TinyHtmlCheckboxInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/check/TinyHtmlRadioInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/check/TinyHtmlRadioInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/check/TinyHtmlRadioInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlDateInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlDateInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlDateInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlDateTimeInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlDateTimeInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlDateTimeInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlMonthInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlMonthInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlMonthInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlTimeInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlTimeInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlTimeInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlWeekInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlWeekInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/date/TinyHtmlWeekInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/number/TinyHtmlNumberInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/number/TinyHtmlNumberInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/number/TinyHtmlNumberInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/number/TinyHtmlRangeInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/number/TinyHtmlRangeInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/number/TinyHtmlRangeInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlEmailInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlEmailInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlEmailInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlPasswordInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlPasswordInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlPasswordInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlSearchInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlSearchInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlSearchInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlTelInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlTelInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlTelInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlTextInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlTextInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlTextInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlUrlInput.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlUrlInput.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/input/text/TinyHtmlUrlInput.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlAudio.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlAudio.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlAudio.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlObject.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlObject.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlObject.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlSource.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlSource.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlSource.mjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlVideo.cjs +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlVideo.d.mts +0 -0
- /package/dist/v1/libs/{TinyHtml → html/TinyHtml}/media/TinyHtmlVideo.mjs +0 -0
- /package/dist/v1/libs/{TinyDragDropDetector.d.mts → html/drag/TinyDragDropDetector.d.mts} +0 -0
- /package/dist/v1/libs/{TinyIframeEvents.d.mts → html/events/TinyIframeEvents.d.mts} +0 -0
- /package/dist/v1/libs/{TinyNewWinEvents.d.mts → html/events/TinyNewWinEvents.d.mts} +0 -0
- /package/dist/v1/libs/{TinyNotifications.d.mts → html/notification/TinyNotifications.d.mts} +0 -0
- /package/dist/v1/libs/{TinyNotifyCenter.d.mts → html/notification/TinyNotifyCenter.d.mts} +0 -0
- /package/dist/v1/libs/{TinyToastNotify.d.mts → html/notification/TinyToastNotify.d.mts} +0 -0
- /package/dist/v1/libs/{TinyAfterScrollWatcher.d.mts → html/scroll/TinyAfterScrollWatcher.d.mts} +0 -0
- /package/dist/v1/libs/{TinyAnalogClock.d.mts → html/templates/TinyAnalogClock.d.mts} +0 -0
- /package/dist/v1/libs/{TinyCookieConsent.cjs → html/templates/TinyCookieConsent.cjs} +0 -0
- /package/dist/v1/libs/{TinyCookieConsent.d.mts → html/templates/TinyCookieConsent.d.mts} +0 -0
- /package/dist/v1/libs/{TinyCookieConsent.mjs → html/templates/TinyCookieConsent.mjs} +0 -0
- /package/dist/v1/libs/{TinyLoadingScreen.cjs → html/templates/TinyLoadingScreen.cjs} +0 -0
- /package/dist/v1/libs/{TinyLoadingScreen.d.mts → html/templates/TinyLoadingScreen.d.mts} +0 -0
- /package/dist/v1/libs/{TinyLoadingScreen.mjs → html/templates/TinyLoadingScreen.mjs} +0 -0
- /package/dist/v1/libs/{TinyAdvancedRaffle.d.mts → math/TinyAdvancedRaffle.d.mts} +0 -0
- /package/dist/v1/libs/{TinyMamdaniInferenceSystem.cjs → math/TinyMamdaniInferenceSystem.cjs} +0 -0
- /package/dist/v1/libs/{TinyMamdaniInferenceSystem.d.mts → math/TinyMamdaniInferenceSystem.d.mts} +0 -0
- /package/dist/v1/libs/{TinyMamdaniInferenceSystem.mjs → math/TinyMamdaniInferenceSystem.mjs} +0 -0
- /package/dist/v1/libs/{TinyRateLimiter.d.mts → math/TinyRateLimiter.d.mts} +0 -0
- /package/dist/v1/libs/{TinySimpleDice.d.mts → math/TinySimpleDice.d.mts} +0 -0
- /package/dist/v1/libs/{TinyTimeout.d.mts → math/TinyTimeout.d.mts} +0 -0
- /package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/docs/SoundCloudWidget.cjs +0 -0
- /package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/docs/SoundCloudWidget.d.mts +0 -0
- /package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/docs/SoundCloudWidget.mjs +0 -0
- /package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/docs/YouTubePlayer.cjs +0 -0
- /package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/docs/YouTubePlayer.d.mts +0 -0
- /package/dist/v1/libs/{TinyMediaPlayer → media/TinyMediaPlayer}/docs/YouTubePlayer.mjs +0 -0
- /package/dist/v1/libs/{TinyLocalStorage.d.mts → storage/TinyLocalStorage.d.mts} +0 -0
- /package/dist/v1/libs/{TinyClipboard.cjs → text/TinyClipboard.cjs} +0 -0
- /package/dist/v1/libs/{TinyClipboard.d.mts → text/TinyClipboard.d.mts} +0 -0
- /package/dist/v1/libs/{TinyClipboard.mjs → text/TinyClipboard.mjs} +0 -0
- /package/dist/v1/libs/{TinyI18.d.mts → text/TinyI18.d.mts} +0 -0
- /package/dist/v1/libs/{TinyTextDiffer.d.mts → text/TinyTextDiffer.d.mts} +0 -0
- /package/dist/v1/libs/{TinyTextRangeEditor.cjs → text/TinyTextRangeEditor.cjs} +0 -0
- /package/dist/v1/libs/{TinyTextRangeEditor.d.mts → text/TinyTextRangeEditor.d.mts} +0 -0
- /package/dist/v1/libs/{TinyTextRangeEditor.mjs → text/TinyTextRangeEditor.mjs} +0 -0
- /package/dist/v1/libs/{TinyTextarea.cjs → text/TinyTextarea.cjs} +0 -0
- /package/dist/v1/libs/{TinyTextarea.d.mts → text/TinyTextarea.d.mts} +0 -0
- /package/dist/v1/libs/{TinyTextarea.mjs → text/TinyTextarea.mjs} +0 -0
- /package/dist/v1/libs/{TinyClassManager → tools/TinyClassManager}/TinyPluginInliner.d.mts +0 -0
- /package/dist/v1/libs/{TinyClassManager → tools/TinyClassManager}/TinyPluginInliner.mjs +0 -0
- /package/dist/v1/libs/{TinyClassManager.cjs → tools/TinyClassManager.cjs} +0 -0
- /package/dist/v1/libs/{TinyClassManager.d.mts → tools/TinyClassManager.d.mts} +0 -0
- /package/dist/v1/libs/{TinyClassManager.mjs → tools/TinyClassManager.mjs} +0 -0
- /package/dist/v1/libs/{TinyDebugger.d.mts → tools/TinyDebugger.d.mts} +0 -0
- /package/dist/v1/libs/{examples → tools/examples}/TinyClassManager.cjs +0 -0
- /package/dist/v1/libs/{examples → tools/examples}/TinyClassManager.d.mts +0 -0
- /package/dist/v1/libs/{examples → tools/examples}/TinyClassManager.mjs +0 -0
- /package/dist/v1/libs/{TinyPromiseQueue.cjs → utils/TinyPromiseQueue.cjs} +0 -0
- /package/dist/v1/libs/{TinyPromiseQueue.d.mts → utils/TinyPromiseQueue.d.mts} +0 -0
- /package/dist/v1/libs/{TinyPromiseQueue.mjs → utils/TinyPromiseQueue.mjs} +0 -0
- /package/dist/v1/libs/{UltraRandomMsgGen.d.mts → utils/UltraRandomMsgGen.d.mts} +0 -0
- /package/dist/v1/libs/{utils.cjs → utils/tools.cjs} +0 -0
- /package/dist/v1/libs/{utils.mjs → utils/tools.mjs} +0 -0
- /package/docs/v1/libs/{TinyColorConverter.md → color/TinyColorConverter.md} +0 -0
- /package/docs/v1/libs/{TinyColorValidator.md → color/TinyColorValidator.md} +0 -0
- /package/docs/v1/libs/{TinyDayNightCycle.md → game/TinyDayNightCycle.md} +0 -0
- /package/docs/v1/libs/{TinyGamepad.md → game/TinyGamepad.md} +0 -0
- /package/docs/v1/libs/{TinyInventory.md → game/TinyInventory.md} +0 -0
- /package/docs/v1/libs/{TinyInventoryTrader.md → game/TinyInventoryTrader.md} +0 -0
- /package/docs/v1/libs/{TinyNeedBar.md → game/TinyNeedBar.md} +0 -0
- /package/docs/v1/libs/{TinyHtml.md → html/TinyHtml.md} +0 -0
- /package/docs/v1/libs/{TinyHtmlTips.md → html/TinyHtmlTips.md} +0 -0
- /package/docs/v1/libs/{TinyNotifyCenter.md → html/notification/TinyNotifyCenter.md} +0 -0
- /package/docs/v1/libs/{TinyToastNotify.md → html/notification/TinyToastNotify.md} +0 -0
- /package/docs/v1/libs/{TinySmartScroller.md → html/scroll/TinySmartScroller.md} +0 -0
- /package/docs/v1/libs/{TinyUploadClicker.md → html/upload/TinyUploadClicker.md} +0 -0
- /package/docs/v1/libs/{TinyAdvancedRaffle.md → math/TinyAdvancedRaffle.md} +0 -0
- /package/docs/v1/libs/{TinyMamdaniInferenceSystem.md → math/TinyMamdaniInferenceSystem.md} +0 -0
- /package/docs/v1/libs/{TinyRateLimiter.md → math/TinyRateLimiter.md} +0 -0
- /package/docs/v1/libs/{TinySimpleDice.md → math/TinySimpleDice.md} +0 -0
- /package/docs/v1/libs/{TinyTimeout.md → math/TinyTimeout.md} +0 -0
- /package/docs/v1/libs/{TinyRadioFm.md → media/TinyRadioFm.md} +0 -0
- /package/docs/v1/libs/{TinyLocalStorage.md → storage/TinyLocalStorage.md} +0 -0
- /package/docs/v1/libs/{TinyI18.md → text/TinyI18.md} +0 -0
- /package/docs/v1/libs/{TinyTextRangeEditor.md → text/TinyTextRangeEditor.md} +0 -0
- /package/docs/v1/libs/{UltraRandomMsgGen.md → utils/UltraRandomMsgGen.md} +0 -0
package/TinyFork.mjs
CHANGED
|
@@ -132,23 +132,43 @@ async function resolveSourceFile(targetVersion, basePath) {
|
|
|
132
132
|
for (let v = startVersion; v >= endVersion; v--) {
|
|
133
133
|
const versionDir = path.join(PATHS.cliRoot, 'dist', `v${v}`);
|
|
134
134
|
|
|
135
|
-
// If it's a direct file path without functions (which means basePath might be the full path)
|
|
136
135
|
for (const ext of extensions) {
|
|
137
|
-
//
|
|
138
|
-
const
|
|
139
|
-
if (existsSync(
|
|
136
|
+
// 1. Exact file match (path/to/folder/file.mjs)
|
|
137
|
+
const exactPathFile = path.join(versionDir, `${basePath}${ext}`);
|
|
138
|
+
if (existsSync(exactPathFile)) {
|
|
139
|
+
return { filePath: exactPathFile, ext, versionDir };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// 2. Exact file match for directory index (path/to/folder/index.mjs)
|
|
143
|
+
const exactPathFolder = path.join(versionDir, basePath, `index${ext}`);
|
|
144
|
+
if (existsSync(exactPathFolder)) {
|
|
145
|
+
return { filePath: exactPathFolder, ext, versionDir };
|
|
146
|
+
}
|
|
140
147
|
|
|
141
|
-
//
|
|
142
|
-
// but didn't have commas. (e.g., folder/module/func1)
|
|
148
|
+
// 3. Intercepted function match (path/to/module/function -> path/to/module.mjs or path/to/folder/index.mjs)
|
|
143
149
|
const parts = basePath.split('/');
|
|
144
150
|
if (parts.length > 1) {
|
|
145
151
|
const funcNameCandidate = parts.pop();
|
|
146
152
|
const modulePath = parts.join('/');
|
|
147
|
-
const nestedPath = path.join(versionDir, `${modulePath}${ext}`);
|
|
148
153
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return {
|
|
154
|
+
const nestedPathFile = path.join(versionDir, `${modulePath}${ext}`);
|
|
155
|
+
if (existsSync(nestedPathFile)) {
|
|
156
|
+
return {
|
|
157
|
+
filePath: nestedPathFile,
|
|
158
|
+
ext,
|
|
159
|
+
versionDir,
|
|
160
|
+
interceptedFunction: funcNameCandidate,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const nestedPathFolder = path.join(versionDir, modulePath, `index${ext}`);
|
|
165
|
+
if (existsSync(nestedPathFolder)) {
|
|
166
|
+
return {
|
|
167
|
+
filePath: nestedPathFolder,
|
|
168
|
+
ext,
|
|
169
|
+
versionDir,
|
|
170
|
+
interceptedFunction: funcNameCandidate,
|
|
171
|
+
};
|
|
152
172
|
}
|
|
153
173
|
}
|
|
154
174
|
}
|
|
@@ -238,6 +258,8 @@ class MultiFileExtractor {
|
|
|
238
258
|
if (!path.extname(resolved)) {
|
|
239
259
|
for (const ext of ['.mjs', '.js']) {
|
|
240
260
|
if (existsSync(resolved + ext)) return resolved + ext;
|
|
261
|
+
if (existsSync(path.join(resolved, `index${ext}`)))
|
|
262
|
+
return path.join(resolved, `index${ext}`);
|
|
241
263
|
}
|
|
242
264
|
}
|
|
243
265
|
return resolved;
|
|
@@ -297,26 +319,26 @@ class MultiFileExtractor {
|
|
|
297
319
|
// Tracing Static Methods on any Class
|
|
298
320
|
ClassDeclaration(classPath) {
|
|
299
321
|
if (req.full) return;
|
|
300
|
-
classPath.
|
|
322
|
+
const bodyPaths = classPath.get('body.body');
|
|
323
|
+
|
|
324
|
+
bodyPaths.forEach((itemPath) => {
|
|
325
|
+
const item = itemPath.node;
|
|
301
326
|
const keyName = t.isIdentifier(item.key) ? item.key.name : null;
|
|
327
|
+
|
|
302
328
|
if (
|
|
303
329
|
keyName &&
|
|
304
330
|
item.static &&
|
|
305
|
-
(
|
|
331
|
+
(itemPath.isClassMethod() || itemPath.isClassProperty()) &&
|
|
306
332
|
req.names.has(keyName)
|
|
307
333
|
) {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
{
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
}
|
|
315
|
-
},
|
|
334
|
+
// Fixed Babel parent context mapping by traversing the specific Path node
|
|
335
|
+
itemPath.traverse({
|
|
336
|
+
Identifier(idPath) {
|
|
337
|
+
if (idPath.isReferencedIdentifier() && bindings[idPath.node.name]) {
|
|
338
|
+
addToKeep(idPath.node.name);
|
|
339
|
+
}
|
|
316
340
|
},
|
|
317
|
-
|
|
318
|
-
astPath,
|
|
319
|
-
);
|
|
341
|
+
});
|
|
320
342
|
}
|
|
321
343
|
});
|
|
322
344
|
},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
## 🚀 Release: Major Library Reorganization
|
|
2
|
+
|
|
3
|
+
### 📂 What's New?
|
|
4
|
+
We have performed a complete overhaul of the `tiny-essentials/libs` directory structure. To improve maintainability and discoverability, the libraries are now **categorized by type** instead of being in a flat list. This makes the codebase much more organized and intuitive! 🛠️
|
|
5
|
+
|
|
6
|
+
### 📝 Key Changes
|
|
7
|
+
* **Categorized Structure:** `tiny-essentials/libs` is now organized into folders based on the specific type of library. 📁
|
|
8
|
+
* **Updated Exports:** The `package.json` `exports` field has been fully updated to match the new directory structure. 📦
|
|
9
|
+
* **Documentation Refresh:** The `docs/` folder has been updated to reflect these structural changes. 📚
|
|
10
|
+
|
|
11
|
+
### ⚠️ IMPORTANT: Action Required (Breaking Change) 🚨
|
|
12
|
+
**Please read this carefully to avoid errors!**
|
|
13
|
+
|
|
14
|
+
If your project maps sub-modules from `tiny-essentials/libs`, **you must review your import paths immediately.**
|
|
15
|
+
|
|
16
|
+
Because the folder structure has changed, the old paths are no longer valid. Failing to update your paths to the new categorized structure will result in `Module Not Found` errors. 🛠️✅
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
*Happy tiny coding!* ✨
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## 🚀 Release: Advanced Object & Collection Filtering Utilities!
|
|
2
|
+
|
|
3
|
+
We are excited to announce a new addition to the `basics/` directory: the **`jsonFilter`** module! 🔍
|
|
4
|
+
|
|
5
|
+
This update introduces a high-precision suite of utilities designed to make data manipulation easier. Whether you are working with simple JSON objects or complex, nested data structures, these tools are built to handle it all.
|
|
6
|
+
|
|
7
|
+
### ✨ What's New?
|
|
8
|
+
|
|
9
|
+
- 🔍 **`jsonFilter`** — Perform quick and efficient shallow filtering on objects.
|
|
10
|
+
- 🌳 **`jsonFilterRecursive`** — Deeply traverse structures to prune or keep data based on custom rules for primitives, arrays, and more.
|
|
11
|
+
- 🔑 **`jsonFilterByKeys`** — Highly precise selection using simple keys, `[key, validator]` tuples, or custom validation functions.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.d.mts","sourceRoot":"","sources":["../../src/_/numbers.mjs"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAHrB,MAGqB,GAFnB,MAAM,CAMlB;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,MAHnB,MAAM,KACJ,MAE0C,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,MAHnB,MAAM,KACJ,MAEsC,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,MAHzB,MAAM,KACJ,MAEoD,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,cAAc,MAHhB,MAAM,KACJ,MAEmC,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,cAAc,MAHhB,MAAM,KACJ,MAE4D,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,MAHxB,MAAM,KACJ,MAEyD,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,MAH7B,MAAM,KACJ,MAE4D,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,MAHrB,MAAM,KACJ,MAEkD,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,eAAe,MAHjB,MAAM,KACJ,MAEwC,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,eAAe,MAHjB,MAAM,KACJ,MAEoC,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,WAAW,MAHb,MAAM,KACJ,MAEoC,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,MAHV,MAAM,KACJ,MAEiC,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,eAAe,MAHjB,MAAM,KACJ,MAE6C,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,MAHxB,MAAM,KACJ,MAEmE,CAAC;AAEjF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,MAHrB,MAAM,KACJ,MAEwD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e={705(e,t,r){r.d(t,{TinyAdvancedRaffle:()=>n});var i=r.cjs(function(e,t){var r,i="object"==typeof Reflect?Reflect:null,s=i&&"function"==typeof i.apply?i.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};r=i&&"function"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function n(){n.init.call(this)}e.exports=n,e.exports.once=function(e,t){return new Promise(function(r,i){function s(r){e.removeListener(t,o),i(r)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",s),r([].slice.call(arguments))}c(e,t,o,{once:!0}),"error"!==t&&function(e,t){"function"==typeof e.on&&c(e,"error",t,{once:!0})}(e,s)})},n.EventEmitter=n,n.prototype._events=void 0,n.prototype._eventsCount=0,n.prototype._maxListeners=void 0;var a=10;function u(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function f(e){return void 0===e._maxListeners?n.defaultMaxListeners:e._maxListeners}function h(e,t,r,i){var s,o,n,a;if(u(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),n=o[t]),void 0===n)n=o[t]=r,++e._eventsCount;else if("function"==typeof n?n=o[t]=i?[r,n]:[n,r]:i?n.unshift(r):n.push(r),(s=f(e))>0&&n.length>s&&!n.warned){n.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+n.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=n.length,a=h,console&&console.warn&&console.warn(a)}return e}function p(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function y(e,t,r){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},s=p.bind(i);return s.listener=r,i.wrapFn=s,s}function m(e,t,r){var i=e._events;if(void 0===i)return[];var s=i[t];return void 0===s?[]:"function"==typeof s?r?[s.listener||s]:[s]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(s):l(s,s.length)}function d(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function l(e,t){for(var r=new Array(t),i=0;i<t;++i)r[i]=e[i];return r}function c(e,t,r,i){if("function"==typeof e.on)i.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function s(o){i.once&&e.removeEventListener(t,s),r(o)})}}Object.defineProperty(n,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),n.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},n.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},n.prototype.getMaxListeners=function(){return f(this)},n.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i="error"===e,o=this._events;if(void 0!==o)i=i&&void 0===o.error;else if(!i)return!1;if(i){var n;if(t.length>0&&(n=t[0]),n instanceof Error)throw n;var a=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw a.context=n,a}var u=o[e];if(void 0===u)return!1;if("function"==typeof u)s(u,this,t);else{var f=u.length,h=l(u,f);for(r=0;r<f;++r)s(h[r],this,t)}return!0},n.prototype.addListener=function(e,t){return h(this,e,t,!1)},n.prototype.on=n.prototype.addListener,n.prototype.prependListener=function(e,t){return h(this,e,t,!0)},n.prototype.once=function(e,t){return u(t),this.on(e,y(this,e,t)),this},n.prototype.prependOnceListener=function(e,t){return u(t),this.prependListener(e,y(this,e,t)),this},n.prototype.removeListener=function(e,t){var r,i,s,o,n;if(u(t),void 0===(i=this._events))return this;if(void 0===(r=i[e]))return this;if(r===t||r.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(s=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){n=r[o].listener,s=o;break}if(s<0)return this;0===s?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,s),1===r.length&&(i[e]=r[0]),void 0!==i.removeListener&&this.emit("removeListener",e,n||t)}return this},n.prototype.off=n.prototype.removeListener,n.prototype.removeAllListeners=function(e){var t,r,i;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var s,o=Object.keys(r);for(i=0;i<o.length;++i)"removeListener"!==(s=o[i])&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},n.prototype.listeners=function(e){return m(this,e,!0)},n.prototype.rawListeners=function(e){return m(this,e,!1)},n.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):d.call(e,t)},n.prototype.listenerCount=d,n.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}});const s=e=>{if(e)throw new Error("This TinyAdvancedRaffle instance has been destroyed and can no longer be used.")};class o extends i.EventEmitter{#e=!1;#t;#r;#i=[];#s=[];#o=[];#n=new Map;#a=new Set;#u=new Map;#f;#h=new Map;#p=new Map;get isDestroyed(){return this.#e}get freq(){return s(this.#e),Object.fromEntries(this.#p)}get size(){return s(this.#e),this.#h.size}get normalization(){return s(this.#e),this.#t}set normalization(e){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("normalization must be a non-empty string (e.g., 'relative', 'softmax').");this.#t=e}get seed(){return s(this.#e),this.#r}set seed(e){if(s(this.#e),null!==e&&("number"!=typeof e||!Number.isFinite(e)))throw new TypeError("seed must be a finite number or null.");this.#r=e,null!==e&&(this.#f=this._makeSeededRng(e))}get globalModifiers(){return s(this.#e),[...this.#i]}set globalModifiers(e){if(s(this.#e),!Array.isArray(e)||!e.every(e=>"function"==typeof e))throw new TypeError("globalModifiers must be an array of functions (WeightsCallback).");this.#i=e}get temporaryModifiers(){return s(this.#e),[...this.#s]}set temporaryModifiers(e){if(s(this.#e),!Array.isArray(e)||!e.every(e=>e&&"function"==typeof e.fn&&Number.isInteger(e.uses)&&e.uses>0))throw new TypeError("temporaryModifiers must be an array of objects { fn: function, uses: positive integer }.");this.#s=e}get conditionalRules(){return s(this.#e),[...this.#o]}set conditionalRules(e){if(s(this.#e),!Array.isArray(e)||!e.every(e=>"function"==typeof e))throw new TypeError("conditionalRules must be an array of functions (WeightsCallback).");this.#o=e}get pitySystems(){return s(this.#e),Object.fromEntries(this.#n)}set pitySystems(e){if(s(this.#e),!(e instanceof Map&&[...e.values()].every(e=>e&&"number"==typeof e.threshold&&"number"==typeof e.increment&&"number"==typeof e.cap&&"number"==typeof e.counter&&"number"==typeof e.currentAdd)))throw new TypeError("pitySystems must be a Map<string, Pity> with all numeric fields.");this.#n=e}get exclusions(){return s(this.#e),Array.from(this.#a)}set exclusions(e){if(s(this.#e),!(e instanceof Set&&[...e].every(e=>"string"==typeof e)))throw new TypeError("exclusions must be a Set<string>.");this.#a=e}get groups(){s(this.#e);const e={};return this.#u.forEach((t,r)=>e[r]=Array.from(t)),e}set groups(e){if(s(this.#e),!(e instanceof Map&&[...e.values()].every(e=>e instanceof Set&&[...e].every(e=>"string"==typeof e))))throw new TypeError("groups must be a Map<string, Set<string>>.");this.#u=e}get rng(){return s(this.#e),this.#f}set rng(e){if(s(this.#e),"function"!=typeof e||"number"!=typeof e())throw new TypeError("rng must be a function returning a number (RngGenerator).");this.#f=e}get items(){s(this.#e);const e={};return this.#h.forEach((t,r)=>{e[r]={...t,groups:Array.from(t.groups)}}),e}set items(e){if(s(this.#e),!(e instanceof Map&&[...e.values()].every(e=>e&&"string"==typeof e.id&&"string"==typeof e.label&&"number"==typeof e.baseWeight&&e.groups instanceof Set&&"boolean"==typeof e.locked&&"object"==typeof e.meta)))throw new TypeError("items must be a Map<string, ItemData> with valid item structures.");this.clearList(),this.#h=e}constructor(e={}){super();const{rng:t=null,seed:r=null,normalization:i="relative"}=e;this.#t=i,this.#r=r,"function"==typeof t?this.#f=t:null!==this.#r?this.#f=this._makeSeededRng(this.#r):this.#f=Math.random,this.#r=r??null}hasItem(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");return this.#h.has(e)}addItem(e,t={}){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("id must be a non-empty string");if("object"!=typeof t||null===t)throw new TypeError("opts must be an object");let{weight:r=1,label:i=e,meta:o={},groups:n=[]}=t;if("number"!=typeof r||!Number.isFinite(r)||r<0)throw new TypeError("weight must be a non-negative number");if("string"!=typeof i)throw new TypeError("label must be a string");if("object"!=typeof o||null===o)throw new TypeError("meta must be an object");if(!(Array.isArray(n)||n instanceof Set))throw new TypeError("groups must be an array or a Set of strings");n=Array.isArray(n)?n:[...n];for(const e of n)if("string"!=typeof e)throw new TypeError("groups must contain only strings");const a={id:e,label:i,baseWeight:Math.max(0,Number(r)||0),meta:{...o},groups:new Set(n),locked:!1};this.#h.set(e,a);for(const t of n)this._ensureGroup(t).add(e);return this.emit("itemAdded",a),a}removeItem(e){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("id must be a non-empty string");const t=this.#h.get(e);if(!t)return!1;for(const r of t.groups){const t=this.#u.get(r);t&&t.delete(e)}return this.#h.delete(e),this.emit("itemRemoved",e),this.resetFreq(e),this.resetPity(e),!0}setBaseWeight(e,t){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("id must be a non-empty string");if("number"!=typeof t||!Number.isFinite(t)||t<0)throw new TypeError("weight must be a non-negative number");const r=this.#h.get(e);if(!r)throw new Error("Item not found");r.baseWeight=Math.max(0,Number(t)||0),this.emit("weightChanged",{id:e,weight:r.baseWeight})}getItem(e){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("id must be a non-empty string");return this.#h.get(e)??null}listItems(){return s(this.#e),Array.from(this.#h.values()).map(e=>({...e}))}clearList(){s(this.#e),this.#h.clear(),this.clearFreqs(),this.clearPities()}hasGlobalModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");return this.#i.includes(e)}addGlobalModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");this.#i.push(e)}removeGlobalModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");this.#i=this.#i.filter(t=>t!==e)}hasTemporaryModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");return this.#s.some(t=>t.fn===e)}addTemporaryModifier(e,t=1){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");if("number"!=typeof t||Number.isNaN(t))throw new TypeError("uses must be a number");this.#s.push({fn:e,uses:Math.max(1,Math.floor(t))})}removeTemporaryModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");const t=this.#s.length;return this.#s=this.#s.filter(t=>t.fn!==e),this.#s.length!==t}hasConditionalRule(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("ruleFn must be a function");return this.#o.includes(e)}addConditionalRule(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("ruleFn must be a function");this.#o.push(e)}removeConditionalRule(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("ruleFn must be a function");const t=this.#o.length;return this.#o=this.#o.filter(t=>t!==e),this.#o.length!==t}hasPity(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");return this.#n.has(e)}configurePity(e,t){if(s(this.#e),!this.#h.has(e))throw new Error("Item not found");if("object"!=typeof t||null===t)throw new TypeError("cfg must be an object");const{threshold:r,increment:i,cap:o=1/0}=t;if("number"!=typeof r||r<=0)throw new TypeError("threshold must be a positive number");if("number"!=typeof i)throw new TypeError("increment must be a number");if("number"!=typeof o)throw new TypeError("cap must be a number");this.#n.set(e,{threshold:Math.max(1,r),increment:Number(i)||0,cap:Number(o)||1/0,counter:0,currentAdd:0})}resetPity(e){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("itemId must be a non-empty string");const t=this.#n.get(e);t&&(t.counter=0,t.currentAdd=0)}clearPities(){s(this.#e),this.#n.clear()}hasExclusion(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");return this.#a.has(e)}excludeItem(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");this.#a.add(e)}includeItem(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");this.#a.delete(e)}_ensureGroup(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("name must be a string");let t=this.#u.get(e);return t||(t=new Set,this.#u.set(e,t)),t}hasInGroup(e,t){if(s(this.#e),"string"!=typeof e||"string"!=typeof t)throw new TypeError("itemId and groupName must be strings");const r=this.#u.get(t);return!!r&&r.has(e)}addToGroup(e,t){if(s(this.#e),"string"!=typeof e||"string"!=typeof t)throw new TypeError("itemId and groupName must be strings");const r=this.#h.get(e);if(!r)throw new Error("Item missing");r.groups.add(t),this._ensureGroup(t).add(e)}removeFromGroup(e,t){if(s(this.#e),"string"!=typeof e||"string"!=typeof t)throw new TypeError("itemId and groupName must be strings");const r=this.#u.get(t);r&&r.delete(e);const i=this.#h.get(e);i&&i.groups.delete(t)}clearFreqs(){s(this.#e),this.#p.clear()}resetFreq(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");this.#p.delete(e)}computeEffectiveWeights(e={}){if(s(this.#e),"object"!=typeof e||null===e)throw new TypeError("computeEffectiveWeights: parameter 'context' must be a non-null object, got "+typeof e);if("previousDraws"in e&&!Array.isArray(e.previousDraws))throw new TypeError("computeEffectiveWeights: context.previousDraws must be an array if provided, got "+typeof e.previousDraws);if("metadata"in e&&void 0!==e.metadata&&("object"!=typeof e.metadata||null===e.metadata))throw new TypeError("computeEffectiveWeights: context.metadata must be a non-null object if provided, got "+typeof e.metadata);const t=new Map;for(const[e,r]of this.#h)t.set(e,r.baseWeight);for(const r of this.#i){const i=r(t,e);if(i instanceof Map)for(const[e,r]of i)t.set(e,Math.max(0,(t.get(e)||0)+r))}for(const r of this.#s){const i=r.fn(t,e);if(i instanceof Map)for(const[e,r]of i)t.set(e,Math.max(0,(t.get(e)||0)+r))}for(const r of this.#o){const i=r(t,e);if(i instanceof Map)for(const[e,r]of i)t.set(e,Math.max(0,(t.get(e)||0)+r))}for(const[e,r]of this.#n)if(t.has(e)&&r.counter>r.threshold){r.currentAdd=Math.min(r.cap,r.currentAdd+r.increment);const i=t.get(e);i&&t.set(e,i+r.currentAdd)}for(const e of this.#a)t.delete(e);for(const[e,r]of Array.from(t.entries()))r>0||t.delete(e);return t}_weightsToDistribution(e){if(!(e instanceof Map))throw new TypeError("_weightsToDistribution: parameter 'weights' must be a Map, got "+typeof e);for(const[t,r]of e){if("string"!=typeof t)throw new TypeError("_weightsToDistribution: weights Map key must be string, got "+typeof t);if("number"!=typeof r||!Number.isFinite(r)||r<0)throw new TypeError(`_weightsToDistribution: weights Map value must be finite non-negative number, got ${r} for key ${t}`)}const t=Array.from(e.entries()).map(([e,t])=>({id:e,weight:t}));if(0===t.length)return[];if("softmax"===this.#t){const e=Math.max(...t.map(e=>e.weight)),r=t.map(t=>Math.exp(t.weight-e)),i=r.reduce((e,t)=>e+t,0);let s=0;return t.map((e,t)=>{const o=r[t]/i;return s+=o,{id:e.id,weight:e.weight,p:o,cumulative:s}})}{const e=t.reduce((e,t)=>e+t.weight,0);let r=0;return t.map(t=>{const i=t.weight/e;return r+=i,{id:t.id,weight:t.weight,p:i,cumulative:r}})}}drawOne(e={}){if(s(this.#e),"object"!=typeof e||null===e)throw new TypeError("drawOne: parameter 'opts' must be a non-null object, got "+typeof e);if("previousDraws"in e&&!Array.isArray(e.previousDraws))throw new TypeError("drawOne: opts.previousDraws must be an array if provided, got "+typeof e.previousDraws);if("metadata"in e&&void 0!==e.metadata&&("object"!=typeof e.metadata||null===e.metadata))throw new TypeError("drawOne: opts.metadata must be a non-null object if provided, got "+typeof e.metadata);const t={previousDraws:e.previousDraws??[],metadata:e.metadata??{},activeModifiers:[...this.#s]},r=this.computeEffectiveWeights(t),i=this._weightsToDistribution(r);if(!i.length)return null;const o=this.#f(),n=i.find(e=>o<=e.cumulative)??i[i.length-1];for(const[e,t]of this.#n)e===n.id?(t.counter=0,t.currentAdd=0):t.counter++;this._consumeTemporaryModifiers();const a=this.#h.get(n.id);if(!a)return null;const u={id:a.id,label:a.label,meta:{...a.meta},prob:n.p};return this.emit("draw",u),u&&this.#p.set(u.id,(this.#p.get(u.id)||0)+1),u}_consumeTemporaryModifiers(){for(let e=this.#s.length-1;e>=0;--e){const t=this.#s[e];t.uses-=1,t.uses<=0&&this.#s.splice(e,1)}}drawMany(e=1,t={}){if(s(this.#e),!Number.isInteger(e)||e<=0)throw new TypeError(`drawMany: parameter 'count' must be a positive integer, got ${e}`);if("object"!=typeof t||null===t)throw new TypeError("drawMany: parameter 'opts' must be a non-null object, got "+typeof t);if("withReplacement"in t&&"boolean"!=typeof t.withReplacement)throw new TypeError("drawMany: opts.withReplacement must be boolean if provided, got "+typeof t.withReplacement);if("ensureUnique"in t&&"boolean"!=typeof t.ensureUnique)throw new TypeError("drawMany: opts.ensureUnique must be boolean if provided, got "+typeof t.ensureUnique);if("metadata"in t&&void 0!==t.metadata&&("object"!=typeof t.metadata||null===t.metadata))throw new TypeError("drawMany: opts.metadata must be a non-null object if provided, got "+typeof t.metadata);if("previousDraws"in t&&!Array.isArray(t.previousDraws))throw new TypeError("drawMany: opts.previousDraws must be an array if provided, got "+typeof t.previousDraws);const r=t.withReplacement??!0,i=t.ensureUnique??!1,o=[],n=t.previousDraws??[];if(!r&&i){const r=new Set;for(let i=0;i<e;++i){const e=new Set(this.#a);for(const e of r)this.#a.add(e);const i=this.drawOne({previousDraws:n,metadata:t.metadata});if(this.#a=e,!i)break;o.push(i),r.add(i.id),n.push(i)}return o}for(let i=0;i<e;++i){const e=this.drawOne({previousDraws:n,metadata:t.metadata});if(!e)break;o.push(e),n.push(e),r||this.excludeItem(e.id)}if(!r)for(const e of o)this.includeItem(e.id);return o}exportToJson(){return s(this.#e),{items:Array.from(this.#h.values()).map(e=>({id:e.id,label:e.label,baseWeight:e.baseWeight,meta:e.meta,groups:Array.from(e.groups),locked:!1})),pity:Array.from(this.#n.entries()),exclusions:Array.from(this.#a),normalization:this.#t,seed:this.#r}}loadFromJson(e){if(s(this.#e),"object"!=typeof e||null===e)throw new TypeError("data must be a non-null object");if(!Array.isArray(e.items)||!Array.isArray(e.pity)||!Array.isArray(e.exclusions))throw new TypeError("data must have items, pity, and exclusions arrays");if("string"!=typeof e.normalization)throw new TypeError("data.normalization must be a string");if(void 0!==e.seed&&null!==e.seed&&"number"!=typeof e.seed)throw new TypeError("data.seed must be a number, null, or undefined");this.clearList();for(const t of e.items){if("object"!=typeof t||null===t)throw new TypeError("Each item must be a non-null object");if("string"!=typeof t.id||!t.id.trim())throw new TypeError("Each item.id must be a non-empty string");if("string"!=typeof t.label)throw new TypeError(`Item with id "${t.id}" has invalid label; must be string`);if("number"!=typeof t.baseWeight||!Number.isFinite(t.baseWeight)||t.baseWeight<0)throw new TypeError(`Item with id "${t.id}" has invalid baseWeight; must be a finite non-negative number`);if(void 0!==t.groups&&!Array.isArray(t.groups))throw new TypeError(`Item with id "${t.id}" has invalid groups; must be an array of strings`);if(t.groups&&!t.groups.every(e=>"string"==typeof e))throw new TypeError(`Item with id "${t.id}" has groups containing non-string values`);if(void 0!==t.meta&&("object"!=typeof t.meta||null===t.meta))throw new TypeError(`Item with id "${t.id}" has invalid meta; must be an object`);this.#h.set(t.id,{id:t.id,label:t.label,baseWeight:t.baseWeight,meta:t.meta||{},groups:new Set(t.groups||[]),locked:!1});for(const e of t.groups||[])this._ensureGroup(e).add(t.id)}this.pitySystems=new Map(e.pity||[]),this.exclusions=new Set(e.exclusions||[]),this.normalization=e.normalization,void 0!==e.seed&&(this.seed=e.seed)}clone(){s(this.#e);const e=new o;return e.#t=this.#t,e.#r=this.#r,e.#i=[...this.#i],e.#s=this.#s.map(e=>({fn:e.fn,uses:e.uses})),e.#o=[...this.#o],e.#n=new Map([...this.#n.entries()].map(([e,t])=>[e,{...t}])),e.#a=new Set(this.#a),e.#u=new Map([...this.#u.entries()].map(([e,t])=>[e,new Set(t)])),e.#f=this.#f,e.#h=new Map([...this.#h.entries()].map(([e,t])=>[e,{...t,groups:new Set(t.groups),meta:{...t.meta}}])),e.#p=new Map(this.#p),e}_makeSeededRng(e){if("number"!=typeof e||!Number.isFinite(e))throw new TypeError("seed must be a finite number");let t=e>>>0;return function(){t+=1831565813;let e=Math.imul(t^t>>>15,1|t);return e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296}}destroy(){this.#e||(this.#n.clear(),this.#a.clear(),this.#u.clear(),this.#h.clear(),this.#p.clear(),this.#i=[],this.#s=[],this.#o=[],this.#r=null,this.#e=!0)}}const n=o}};const t={};function r(i){const s=t[i];if(void 0!==s)return s.exports;const o=t[i]={exports:{}};return e[i](o,o.exports,r),o.exports}r.d=(e,t)=>{if(Array.isArray(t))for(var i=0;i<t.length;){var s=t[i++],o=t[i++];r.o(e,s)?0===o&&i++:0===o?Object.defineProperty(e,s,{enumerable:!0,value:t[i++]}):Object.defineProperty(e,s,{enumerable:!0,get:o})}else for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.cjs=e=>{const t={exports:{}};return e.call(t.exports,t,t.exports),t.exports};let i=r(705);window.TinyAdvancedRaffle=i.TinyAdvancedRaffle})();
|
|
1
|
+
(()=>{"use strict";var e={159(e,t,r){r.d(t,{TinyAdvancedRaffle:()=>n});var i=r.cjs(function(e,t){var r,i="object"==typeof Reflect?Reflect:null,s=i&&"function"==typeof i.apply?i.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};r=i&&"function"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function n(){n.init.call(this)}e.exports=n,e.exports.once=function(e,t){return new Promise(function(r,i){function s(r){e.removeListener(t,o),i(r)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",s),r([].slice.call(arguments))}c(e,t,o,{once:!0}),"error"!==t&&function(e,t){"function"==typeof e.on&&c(e,"error",t,{once:!0})}(e,s)})},n.EventEmitter=n,n.prototype._events=void 0,n.prototype._eventsCount=0,n.prototype._maxListeners=void 0;var a=10;function u(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function f(e){return void 0===e._maxListeners?n.defaultMaxListeners:e._maxListeners}function h(e,t,r,i){var s,o,n,a;if(u(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),n=o[t]),void 0===n)n=o[t]=r,++e._eventsCount;else if("function"==typeof n?n=o[t]=i?[r,n]:[n,r]:i?n.unshift(r):n.push(r),(s=f(e))>0&&n.length>s&&!n.warned){n.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+n.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=n.length,a=h,console&&console.warn&&console.warn(a)}return e}function p(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function y(e,t,r){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},s=p.bind(i);return s.listener=r,i.wrapFn=s,s}function m(e,t,r){var i=e._events;if(void 0===i)return[];var s=i[t];return void 0===s?[]:"function"==typeof s?r?[s.listener||s]:[s]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(s):l(s,s.length)}function d(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function l(e,t){for(var r=new Array(t),i=0;i<t;++i)r[i]=e[i];return r}function c(e,t,r,i){if("function"==typeof e.on)i.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function s(o){i.once&&e.removeEventListener(t,s),r(o)})}}Object.defineProperty(n,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),n.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},n.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},n.prototype.getMaxListeners=function(){return f(this)},n.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i="error"===e,o=this._events;if(void 0!==o)i=i&&void 0===o.error;else if(!i)return!1;if(i){var n;if(t.length>0&&(n=t[0]),n instanceof Error)throw n;var a=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw a.context=n,a}var u=o[e];if(void 0===u)return!1;if("function"==typeof u)s(u,this,t);else{var f=u.length,h=l(u,f);for(r=0;r<f;++r)s(h[r],this,t)}return!0},n.prototype.addListener=function(e,t){return h(this,e,t,!1)},n.prototype.on=n.prototype.addListener,n.prototype.prependListener=function(e,t){return h(this,e,t,!0)},n.prototype.once=function(e,t){return u(t),this.on(e,y(this,e,t)),this},n.prototype.prependOnceListener=function(e,t){return u(t),this.prependListener(e,y(this,e,t)),this},n.prototype.removeListener=function(e,t){var r,i,s,o,n;if(u(t),void 0===(i=this._events))return this;if(void 0===(r=i[e]))return this;if(r===t||r.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(s=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){n=r[o].listener,s=o;break}if(s<0)return this;0===s?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,s),1===r.length&&(i[e]=r[0]),void 0!==i.removeListener&&this.emit("removeListener",e,n||t)}return this},n.prototype.off=n.prototype.removeListener,n.prototype.removeAllListeners=function(e){var t,r,i;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var s,o=Object.keys(r);for(i=0;i<o.length;++i)"removeListener"!==(s=o[i])&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},n.prototype.listeners=function(e){return m(this,e,!0)},n.prototype.rawListeners=function(e){return m(this,e,!1)},n.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):d.call(e,t)},n.prototype.listenerCount=d,n.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}});const s=e=>{if(e)throw new Error("This TinyAdvancedRaffle instance has been destroyed and can no longer be used.")};class o extends i.EventEmitter{#e=!1;#t;#r;#i=[];#s=[];#o=[];#n=new Map;#a=new Set;#u=new Map;#f;#h=new Map;#p=new Map;get isDestroyed(){return this.#e}get freq(){return s(this.#e),Object.fromEntries(this.#p)}get size(){return s(this.#e),this.#h.size}get normalization(){return s(this.#e),this.#t}set normalization(e){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("normalization must be a non-empty string (e.g., 'relative', 'softmax').");this.#t=e}get seed(){return s(this.#e),this.#r}set seed(e){if(s(this.#e),null!==e&&("number"!=typeof e||!Number.isFinite(e)))throw new TypeError("seed must be a finite number or null.");this.#r=e,null!==e&&(this.#f=this._makeSeededRng(e))}get globalModifiers(){return s(this.#e),[...this.#i]}set globalModifiers(e){if(s(this.#e),!Array.isArray(e)||!e.every(e=>"function"==typeof e))throw new TypeError("globalModifiers must be an array of functions (WeightsCallback).");this.#i=e}get temporaryModifiers(){return s(this.#e),[...this.#s]}set temporaryModifiers(e){if(s(this.#e),!Array.isArray(e)||!e.every(e=>e&&"function"==typeof e.fn&&Number.isInteger(e.uses)&&e.uses>0))throw new TypeError("temporaryModifiers must be an array of objects { fn: function, uses: positive integer }.");this.#s=e}get conditionalRules(){return s(this.#e),[...this.#o]}set conditionalRules(e){if(s(this.#e),!Array.isArray(e)||!e.every(e=>"function"==typeof e))throw new TypeError("conditionalRules must be an array of functions (WeightsCallback).");this.#o=e}get pitySystems(){return s(this.#e),Object.fromEntries(this.#n)}set pitySystems(e){if(s(this.#e),!(e instanceof Map&&[...e.values()].every(e=>e&&"number"==typeof e.threshold&&"number"==typeof e.increment&&"number"==typeof e.cap&&"number"==typeof e.counter&&"number"==typeof e.currentAdd)))throw new TypeError("pitySystems must be a Map<string, Pity> with all numeric fields.");this.#n=e}get exclusions(){return s(this.#e),Array.from(this.#a)}set exclusions(e){if(s(this.#e),!(e instanceof Set&&[...e].every(e=>"string"==typeof e)))throw new TypeError("exclusions must be a Set<string>.");this.#a=e}get groups(){s(this.#e);const e={};return this.#u.forEach((t,r)=>e[r]=Array.from(t)),e}set groups(e){if(s(this.#e),!(e instanceof Map&&[...e.values()].every(e=>e instanceof Set&&[...e].every(e=>"string"==typeof e))))throw new TypeError("groups must be a Map<string, Set<string>>.");this.#u=e}get rng(){return s(this.#e),this.#f}set rng(e){if(s(this.#e),"function"!=typeof e||"number"!=typeof e())throw new TypeError("rng must be a function returning a number (RngGenerator).");this.#f=e}get items(){s(this.#e);const e={};return this.#h.forEach((t,r)=>{e[r]={...t,groups:Array.from(t.groups)}}),e}set items(e){if(s(this.#e),!(e instanceof Map&&[...e.values()].every(e=>e&&"string"==typeof e.id&&"string"==typeof e.label&&"number"==typeof e.baseWeight&&e.groups instanceof Set&&"boolean"==typeof e.locked&&"object"==typeof e.meta)))throw new TypeError("items must be a Map<string, ItemData> with valid item structures.");this.clearList(),this.#h=e}constructor(e={}){super();const{rng:t=null,seed:r=null,normalization:i="relative"}=e;this.#t=i,this.#r=r,"function"==typeof t?this.#f=t:null!==this.#r?this.#f=this._makeSeededRng(this.#r):this.#f=Math.random,this.#r=r??null}hasItem(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");return this.#h.has(e)}addItem(e,t={}){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("id must be a non-empty string");if("object"!=typeof t||null===t)throw new TypeError("opts must be an object");let{weight:r=1,label:i=e,meta:o={},groups:n=[]}=t;if("number"!=typeof r||!Number.isFinite(r)||r<0)throw new TypeError("weight must be a non-negative number");if("string"!=typeof i)throw new TypeError("label must be a string");if("object"!=typeof o||null===o)throw new TypeError("meta must be an object");if(!(Array.isArray(n)||n instanceof Set))throw new TypeError("groups must be an array or a Set of strings");n=Array.isArray(n)?n:[...n];for(const e of n)if("string"!=typeof e)throw new TypeError("groups must contain only strings");const a={id:e,label:i,baseWeight:Math.max(0,Number(r)||0),meta:{...o},groups:new Set(n),locked:!1};this.#h.set(e,a);for(const t of n)this._ensureGroup(t).add(e);return this.emit("itemAdded",a),a}removeItem(e){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("id must be a non-empty string");const t=this.#h.get(e);if(!t)return!1;for(const r of t.groups){const t=this.#u.get(r);t&&t.delete(e)}return this.#h.delete(e),this.emit("itemRemoved",e),this.resetFreq(e),this.resetPity(e),!0}setBaseWeight(e,t){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("id must be a non-empty string");if("number"!=typeof t||!Number.isFinite(t)||t<0)throw new TypeError("weight must be a non-negative number");const r=this.#h.get(e);if(!r)throw new Error("Item not found");r.baseWeight=Math.max(0,Number(t)||0),this.emit("weightChanged",{id:e,weight:r.baseWeight})}getItem(e){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("id must be a non-empty string");return this.#h.get(e)??null}listItems(){return s(this.#e),Array.from(this.#h.values()).map(e=>({...e}))}clearList(){s(this.#e),this.#h.clear(),this.clearFreqs(),this.clearPities()}hasGlobalModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");return this.#i.includes(e)}addGlobalModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");this.#i.push(e)}removeGlobalModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");this.#i=this.#i.filter(t=>t!==e)}hasTemporaryModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");return this.#s.some(t=>t.fn===e)}addTemporaryModifier(e,t=1){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");if("number"!=typeof t||Number.isNaN(t))throw new TypeError("uses must be a number");this.#s.push({fn:e,uses:Math.max(1,Math.floor(t))})}removeTemporaryModifier(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("fn must be a function");const t=this.#s.length;return this.#s=this.#s.filter(t=>t.fn!==e),this.#s.length!==t}hasConditionalRule(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("ruleFn must be a function");return this.#o.includes(e)}addConditionalRule(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("ruleFn must be a function");this.#o.push(e)}removeConditionalRule(e){if(s(this.#e),"function"!=typeof e)throw new TypeError("ruleFn must be a function");const t=this.#o.length;return this.#o=this.#o.filter(t=>t!==e),this.#o.length!==t}hasPity(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");return this.#n.has(e)}configurePity(e,t){if(s(this.#e),!this.#h.has(e))throw new Error("Item not found");if("object"!=typeof t||null===t)throw new TypeError("cfg must be an object");const{threshold:r,increment:i,cap:o=1/0}=t;if("number"!=typeof r||r<=0)throw new TypeError("threshold must be a positive number");if("number"!=typeof i)throw new TypeError("increment must be a number");if("number"!=typeof o)throw new TypeError("cap must be a number");this.#n.set(e,{threshold:Math.max(1,r),increment:Number(i)||0,cap:Number(o)||1/0,counter:0,currentAdd:0})}resetPity(e){if(s(this.#e),"string"!=typeof e||!e.trim())throw new TypeError("itemId must be a non-empty string");const t=this.#n.get(e);t&&(t.counter=0,t.currentAdd=0)}clearPities(){s(this.#e),this.#n.clear()}hasExclusion(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");return this.#a.has(e)}excludeItem(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");this.#a.add(e)}includeItem(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");this.#a.delete(e)}_ensureGroup(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("name must be a string");let t=this.#u.get(e);return t||(t=new Set,this.#u.set(e,t)),t}hasInGroup(e,t){if(s(this.#e),"string"!=typeof e||"string"!=typeof t)throw new TypeError("itemId and groupName must be strings");const r=this.#u.get(t);return!!r&&r.has(e)}addToGroup(e,t){if(s(this.#e),"string"!=typeof e||"string"!=typeof t)throw new TypeError("itemId and groupName must be strings");const r=this.#h.get(e);if(!r)throw new Error("Item missing");r.groups.add(t),this._ensureGroup(t).add(e)}removeFromGroup(e,t){if(s(this.#e),"string"!=typeof e||"string"!=typeof t)throw new TypeError("itemId and groupName must be strings");const r=this.#u.get(t);r&&r.delete(e);const i=this.#h.get(e);i&&i.groups.delete(t)}clearFreqs(){s(this.#e),this.#p.clear()}resetFreq(e){if(s(this.#e),"string"!=typeof e)throw new TypeError("itemId must be a string");this.#p.delete(e)}computeEffectiveWeights(e={}){if(s(this.#e),"object"!=typeof e||null===e)throw new TypeError("computeEffectiveWeights: parameter 'context' must be a non-null object, got "+typeof e);if("previousDraws"in e&&!Array.isArray(e.previousDraws))throw new TypeError("computeEffectiveWeights: context.previousDraws must be an array if provided, got "+typeof e.previousDraws);if("metadata"in e&&void 0!==e.metadata&&("object"!=typeof e.metadata||null===e.metadata))throw new TypeError("computeEffectiveWeights: context.metadata must be a non-null object if provided, got "+typeof e.metadata);const t=new Map;for(const[e,r]of this.#h)t.set(e,r.baseWeight);for(const r of this.#i){const i=r(t,e);if(i instanceof Map)for(const[e,r]of i)t.set(e,Math.max(0,(t.get(e)||0)+r))}for(const r of this.#s){const i=r.fn(t,e);if(i instanceof Map)for(const[e,r]of i)t.set(e,Math.max(0,(t.get(e)||0)+r))}for(const r of this.#o){const i=r(t,e);if(i instanceof Map)for(const[e,r]of i)t.set(e,Math.max(0,(t.get(e)||0)+r))}for(const[e,r]of this.#n)if(t.has(e)&&r.counter>r.threshold){r.currentAdd=Math.min(r.cap,r.currentAdd+r.increment);const i=t.get(e);i&&t.set(e,i+r.currentAdd)}for(const e of this.#a)t.delete(e);for(const[e,r]of Array.from(t.entries()))r>0||t.delete(e);return t}_weightsToDistribution(e){if(!(e instanceof Map))throw new TypeError("_weightsToDistribution: parameter 'weights' must be a Map, got "+typeof e);for(const[t,r]of e){if("string"!=typeof t)throw new TypeError("_weightsToDistribution: weights Map key must be string, got "+typeof t);if("number"!=typeof r||!Number.isFinite(r)||r<0)throw new TypeError(`_weightsToDistribution: weights Map value must be finite non-negative number, got ${r} for key ${t}`)}const t=Array.from(e.entries()).map(([e,t])=>({id:e,weight:t}));if(0===t.length)return[];if("softmax"===this.#t){const e=Math.max(...t.map(e=>e.weight)),r=t.map(t=>Math.exp(t.weight-e)),i=r.reduce((e,t)=>e+t,0);let s=0;return t.map((e,t)=>{const o=r[t]/i;return s+=o,{id:e.id,weight:e.weight,p:o,cumulative:s}})}{const e=t.reduce((e,t)=>e+t.weight,0);let r=0;return t.map(t=>{const i=t.weight/e;return r+=i,{id:t.id,weight:t.weight,p:i,cumulative:r}})}}drawOne(e={}){if(s(this.#e),"object"!=typeof e||null===e)throw new TypeError("drawOne: parameter 'opts' must be a non-null object, got "+typeof e);if("previousDraws"in e&&!Array.isArray(e.previousDraws))throw new TypeError("drawOne: opts.previousDraws must be an array if provided, got "+typeof e.previousDraws);if("metadata"in e&&void 0!==e.metadata&&("object"!=typeof e.metadata||null===e.metadata))throw new TypeError("drawOne: opts.metadata must be a non-null object if provided, got "+typeof e.metadata);const t={previousDraws:e.previousDraws??[],metadata:e.metadata??{},activeModifiers:[...this.#s]},r=this.computeEffectiveWeights(t),i=this._weightsToDistribution(r);if(!i.length)return null;const o=this.#f(),n=i.find(e=>o<=e.cumulative)??i[i.length-1];for(const[e,t]of this.#n)e===n.id?(t.counter=0,t.currentAdd=0):t.counter++;this._consumeTemporaryModifiers();const a=this.#h.get(n.id);if(!a)return null;const u={id:a.id,label:a.label,meta:{...a.meta},prob:n.p};return this.emit("draw",u),u&&this.#p.set(u.id,(this.#p.get(u.id)||0)+1),u}_consumeTemporaryModifiers(){for(let e=this.#s.length-1;e>=0;--e){const t=this.#s[e];t.uses-=1,t.uses<=0&&this.#s.splice(e,1)}}drawMany(e=1,t={}){if(s(this.#e),!Number.isInteger(e)||e<=0)throw new TypeError(`drawMany: parameter 'count' must be a positive integer, got ${e}`);if("object"!=typeof t||null===t)throw new TypeError("drawMany: parameter 'opts' must be a non-null object, got "+typeof t);if("withReplacement"in t&&"boolean"!=typeof t.withReplacement)throw new TypeError("drawMany: opts.withReplacement must be boolean if provided, got "+typeof t.withReplacement);if("ensureUnique"in t&&"boolean"!=typeof t.ensureUnique)throw new TypeError("drawMany: opts.ensureUnique must be boolean if provided, got "+typeof t.ensureUnique);if("metadata"in t&&void 0!==t.metadata&&("object"!=typeof t.metadata||null===t.metadata))throw new TypeError("drawMany: opts.metadata must be a non-null object if provided, got "+typeof t.metadata);if("previousDraws"in t&&!Array.isArray(t.previousDraws))throw new TypeError("drawMany: opts.previousDraws must be an array if provided, got "+typeof t.previousDraws);const r=t.withReplacement??!0,i=t.ensureUnique??!1,o=[],n=t.previousDraws??[];if(!r&&i){const r=new Set;for(let i=0;i<e;++i){const e=new Set(this.#a);for(const e of r)this.#a.add(e);const i=this.drawOne({previousDraws:n,metadata:t.metadata});if(this.#a=e,!i)break;o.push(i),r.add(i.id),n.push(i)}return o}for(let i=0;i<e;++i){const e=this.drawOne({previousDraws:n,metadata:t.metadata});if(!e)break;o.push(e),n.push(e),r||this.excludeItem(e.id)}if(!r)for(const e of o)this.includeItem(e.id);return o}exportToJson(){return s(this.#e),{items:Array.from(this.#h.values()).map(e=>({id:e.id,label:e.label,baseWeight:e.baseWeight,meta:e.meta,groups:Array.from(e.groups),locked:!1})),pity:Array.from(this.#n.entries()),exclusions:Array.from(this.#a),normalization:this.#t,seed:this.#r}}loadFromJson(e){if(s(this.#e),"object"!=typeof e||null===e)throw new TypeError("data must be a non-null object");if(!Array.isArray(e.items)||!Array.isArray(e.pity)||!Array.isArray(e.exclusions))throw new TypeError("data must have items, pity, and exclusions arrays");if("string"!=typeof e.normalization)throw new TypeError("data.normalization must be a string");if(void 0!==e.seed&&null!==e.seed&&"number"!=typeof e.seed)throw new TypeError("data.seed must be a number, null, or undefined");this.clearList();for(const t of e.items){if("object"!=typeof t||null===t)throw new TypeError("Each item must be a non-null object");if("string"!=typeof t.id||!t.id.trim())throw new TypeError("Each item.id must be a non-empty string");if("string"!=typeof t.label)throw new TypeError(`Item with id "${t.id}" has invalid label; must be string`);if("number"!=typeof t.baseWeight||!Number.isFinite(t.baseWeight)||t.baseWeight<0)throw new TypeError(`Item with id "${t.id}" has invalid baseWeight; must be a finite non-negative number`);if(void 0!==t.groups&&!Array.isArray(t.groups))throw new TypeError(`Item with id "${t.id}" has invalid groups; must be an array of strings`);if(t.groups&&!t.groups.every(e=>"string"==typeof e))throw new TypeError(`Item with id "${t.id}" has groups containing non-string values`);if(void 0!==t.meta&&("object"!=typeof t.meta||null===t.meta))throw new TypeError(`Item with id "${t.id}" has invalid meta; must be an object`);this.#h.set(t.id,{id:t.id,label:t.label,baseWeight:t.baseWeight,meta:t.meta||{},groups:new Set(t.groups||[]),locked:!1});for(const e of t.groups||[])this._ensureGroup(e).add(t.id)}this.pitySystems=new Map(e.pity||[]),this.exclusions=new Set(e.exclusions||[]),this.normalization=e.normalization,void 0!==e.seed&&(this.seed=e.seed)}clone(){s(this.#e);const e=new o;return e.#t=this.#t,e.#r=this.#r,e.#i=[...this.#i],e.#s=this.#s.map(e=>({fn:e.fn,uses:e.uses})),e.#o=[...this.#o],e.#n=new Map([...this.#n.entries()].map(([e,t])=>[e,{...t}])),e.#a=new Set(this.#a),e.#u=new Map([...this.#u.entries()].map(([e,t])=>[e,new Set(t)])),e.#f=this.#f,e.#h=new Map([...this.#h.entries()].map(([e,t])=>[e,{...t,groups:new Set(t.groups),meta:{...t.meta}}])),e.#p=new Map(this.#p),e}_makeSeededRng(e){if("number"!=typeof e||!Number.isFinite(e))throw new TypeError("seed must be a finite number");let t=e>>>0;return function(){t+=1831565813;let e=Math.imul(t^t>>>15,1|t);return e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296}}destroy(){this.#e||(this.#n.clear(),this.#a.clear(),this.#u.clear(),this.#h.clear(),this.#p.clear(),this.#i=[],this.#s=[],this.#o=[],this.#r=null,this.#e=!0)}}const n=o}};const t={};function r(i){const s=t[i];if(void 0!==s)return s.exports;const o=t[i]={exports:{}};return e[i](o,o.exports,r),o.exports}r.d=(e,t)=>{if(Array.isArray(t))for(var i=0;i<t.length;){var s=t[i++],o=t[i++];r.o(e,s)?0===o&&i++:0===o?Object.defineProperty(e,s,{enumerable:!0,value:t[i++]}):Object.defineProperty(e,s,{enumerable:!0,get:o})}else for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.cjs=e=>{const t={exports:{}};return e.call(t.exports,t,t.exports),t.exports};let i=r(159);window.TinyAdvancedRaffle=i.TinyAdvancedRaffle})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";const e={d:(t,r)=>{if(Array.isArray(r))for(var n=0;n<r.length;){var o=r[n++],a=r[n++];e.o(t,o)?0===a&&n++:0===a?Object.defineProperty(t,o,{enumerable:!0,value:r[n++]}):Object.defineProperty(t,o,{enumerable:!0,get:a})}else for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}};let t={};function r(e){if(!Array.isArray(e))throw new TypeError("Argument 'items' must be an array.");let t,r=e.length;for(;0!==r;)t=Math.floor(Math.random()*r),r--,[e[r],e[t]]=[e[t],e[r]];return e}function n(e,t){if(!Array.isArray(e))throw new TypeError("Argument 'phases' must be an array.");if(!Array.isArray(t))throw new TypeError("Argument 'counts' must be an array.");if(e.length!==t.length)throw new RangeError("The 'phases' and 'counts' arrays must have the same length.");const r=[];for(let n=0;n<e.length;n++){if("number"!=typeof t[n]||Number.isNaN(t[n]))throw new TypeError(`Element at counts[${n}] must be a valid number.`);for(let o=0;o<t[n];o++)r.push(e[n])}return r}function o(e,t){if(!Array.isArray(e))throw new TypeError("Argument 'oldItems' must be an array.");if(!Array.isArray(t))throw new TypeError("Argument 'newItems' must be an array.");const r=e.filter(e=>!t.includes(e));return{added:t.filter(t=>!e.includes(t)),removed:r}}function a(e,t=!1){if(null!=e&&"string"!=typeof e)throw new TypeError("Argument 'item' must be a string or null.");if("boolean"!=typeof t)throw new TypeError("Argument 'isReverse' must be a boolean.");return t?function(t,r){return(e?t[e]:t)>(e?r[e]:r)?-1:(e?t[e]:t)<(e?r[e]:r)?1:0}:function(t,r){return(e?t[e]:t)<(e?r[e]:r)?-1:(e?t[e]:t)>(e?r[e]:r)?1:0}}function i(){const e=new Intl.DateTimeFormat(void 0,{hour:"numeric"}).resolvedOptions().hourCycle;return e?.startsWith("h12")?12:24}function s(e=new Date,t="asSeconds",r=null){if(!(e instanceof Date))throw new TypeError("The 'timeData' argument must be an instance of Date.");if("string"!=typeof t)throw new TypeError("The 'durationType' argument must be a string.");const n=["asMilliseconds","asSeconds","asMinutes","asHours","asDays"];if(!n.includes(t))throw new RangeError(`The 'durationType' must be one of: ${n.join(", ")}.`);if(null!==r&&!(r instanceof Date))throw new TypeError("The 'now' argument must be an instance of Date or null.");const o=r instanceof Date?r:new Date,a=e.getTime()-o.getTime();switch(t){case"asMilliseconds":return a;case"asSeconds":default:return a/1e3;case"asMinutes":return a/6e4;case"asHours":return a/36e5;case"asDays":return a/864e5}}function l(e,t="seconds",r="{time}"){if("number"!=typeof e||Number.isNaN(e))throw new TypeError("The 'totalSeconds' argument must be a valid number.");if("string"!=typeof t)throw new TypeError("The 'level' argument must be a string.");const n=["seconds","minutes","hours","days","months","years"];if(!n.includes(t))throw new RangeError(`The 'level' must be one of: ${n.join(", ")}.`);if("string"!=typeof r)throw new TypeError("The 'format' argument must be a string.");e=Math.max(0,Math.floor(e));const o=n.indexOf(t),a=o>=5,i=o>=4,s=o>=3,l=o>=2,u=o>=1,m=o>=0,f={years:a?0:NaN,months:i?0:NaN,days:s?0:NaN,hours:l?0:NaN,minutes:u?0:NaN,seconds:m?0:NaN,total:NaN};let c=e;if(a||i||s){const e=new Date(1980,0,1),t=new Date(e.getTime()+1e3*c),r=new Date(e);if(a)for(;new Date(r.getFullYear()+1,r.getMonth(),r.getDate()).getTime()<=t.getTime();)r.setFullYear(r.getFullYear()+1),f.years++;if(i)for(;new Date(r.getFullYear(),r.getMonth()+1,r.getDate()).getTime()<=t.getTime();)r.setMonth(r.getMonth()+1),f.months++;if(s)for(;new Date(r.getFullYear(),r.getMonth(),r.getDate()+1).getTime()<=t.getTime();)r.setDate(r.getDate()+1),f.days++;c=Math.floor((t.getTime()-r.getTime())/1e3)}l&&(f.hours=Math.floor(c/3600),c%=3600),u&&(f.minutes=Math.floor(c/60),c%=60),m&&(f.seconds=c),f.total=+e.toFixed(2).replace(/\.00$/,"");const d=e=>{const t="string"==typeof e?parseInt(e):e;return Number.isNaN(t)?"NaN":String(t).padStart(2,"0")},p=[l?d(f.hours):null,u?d(f.minutes):null,m?d(f.seconds):null].filter(e=>null!==e).join(":");return r.replace(/\{years\}/g,String(f.years)).replace(/\{months\}/g,String(f.months)).replace(/\{days\}/g,String(f.days)).replace(/\{hours\}/g,d(f.hours)).replace(/\{minutes\}/g,d(f.minutes)).replace(/\{seconds\}/g,d(f.seconds)).replace(/\{time\}/g,p).replace(/\{total\}/g,String(f.total)).trim()}function u(e){if("number"!=typeof e||Number.isNaN(e))throw new TypeError("The 'seconds' argument must be a valid number.");return l(e,"hours","{hours}:{minutes}:{seconds}")}function m(e){if("number"!=typeof e||Number.isNaN(e))throw new TypeError("The 'seconds' argument must be a valid number.");return l(e,"days","{days}d {hours}:{minutes}:{seconds}")}function f(e,t="milliseconds"){if("number"!=typeof e||Number.isNaN(e))throw new TypeError("The 'totalMs' argument must be a valid number.");if("string"!=typeof t)throw new TypeError("The 'level' argument must be a string.");const r=["milliseconds","seconds","minutes","hours","days","months","years"];if(!r.includes(t))throw new RangeError(`The 'level' must be one of: ${r.join(", ")}.`);e=Math.max(0,Math.floor(e));const n=r.indexOf(t),o=n>=6,a=n>=5,i=n>=4,s=n>=3,l=n>=2,u=n>=1,m=n>=0,f={years:o?0:NaN,months:a?0:NaN,days:i?0:NaN,hours:s?0:NaN,minutes:l?0:NaN,seconds:u?0:NaN,milliseconds:m?0:NaN,total:NaN};let c=e;if(o||a||i){const e=new Date(1980,0,1),t=new Date(e.getTime()+c),r=new Date(e);if(o)for(;new Date(r.getFullYear()+1,r.getMonth(),r.getDate()).getTime()<=t.getTime();)r.setFullYear(r.getFullYear()+1),f.years++;if(a)for(;new Date(r.getFullYear(),r.getMonth()+1,r.getDate()).getTime()<=t.getTime();)r.setMonth(r.getMonth()+1),f.months++;if(i)for(;new Date(r.getFullYear(),r.getMonth(),r.getDate()+1).getTime()<=t.getTime();)r.setDate(r.getDate()+1),f.days++;c=t.getTime()-r.getTime()}return s&&(f.hours=Math.floor(c/36e5),c%=36e5),l&&(f.minutes=Math.floor(c/6e4),c%=6e4),u&&(f.seconds=Math.floor(c/1e3),c%=1e3),m&&(f.milliseconds=c),f.total=+e,f}function c(e){if(!Array.isArray(e)&&!d(e))throw new TypeError("Argument must be either an Array or a pure JSON Object.");return Array.isArray(e)?e.length:Object.keys(e).length}function d(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)&&"[object Object]"===Object.prototype.toString.call(e)}function p(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function y(e,t){if(!(e instanceof Blob))return Promise.reject(new TypeError('The "file" argument must be an instance of Blob or File.'));const r=["readAsArrayBuffer","readAsDataURL","readAsText","readAsBinaryString"];return"string"==typeof t&&r.includes(t)?new Promise((r,n)=>{const o=new FileReader;o.onload=()=>{try{r(o.result)}catch(e){n(e)}},o.onerror=()=>{n(o.error)},o[t](e)}):Promise.reject(new TypeError(`The "method" argument must be one of: ${r.join(", ")}.`))}function w(e,t=!1){return e instanceof Blob?"string"!=typeof t&&"boolean"!=typeof t?Promise.reject(new TypeError("The isDataUrl parameter must be a boolean or a string.")):new Promise((r,n)=>{y(e,"readAsDataURL").then(e=>{if("string"!=typeof e)throw new TypeError("Expected file content to be a string.");const n=e.match(/^data:(.+);base64,(.*)$/);if(!n||!n[2])throw new Error("Invalid data URL format or missing Base64 content.");const[,o,a]=n;if(!/^[\w/+]+=*$/.test(a))throw new Error("Base64 content is malformed.");if("boolean"==typeof t)return r(t?e:a);if(!/^[\w-]+\/[\w.+-]+$/.test(t))throw new Error(`Invalid MIME type string: ${t}`);return r(`data:${t};base64,${a}`)}).catch(n)}):Promise.reject(new TypeError('The "file" argument must be an instance of Blob or File.'))}function g(e){return e instanceof Blob?new Promise((t,r)=>y(e,"readAsText").then(e=>{if("string"!=typeof e)throw new TypeError("Expected file content to be a string.");const r=e.trim();if(0===r.length)throw new Error("File is empty or contains only whitespace.");const n=JSON.parse(r);if("object"!=typeof n||null===n)throw new Error("Parsed content is not a valid JSON object or array.");t(n)}).catch(r)):Promise.reject(new TypeError('The "file" argument must be an instance of Blob or File.'))}function b(e,t,r=2){if("string"!=typeof e)throw new TypeError('The "filename" argument must be a string.');if("number"!=typeof r||!Number.isInteger(r)||r<0)throw new TypeError('The "spaces" argument must be a non-negative integer.');const n=JSON.stringify(t,null,r),o=new Blob([n],{type:"application/json"}),a=URL.createObjectURL(o),i=document.createElement("a");i.href=a,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(a)}function h(e,t,r=e=>({headers:e.headers,status:e.status,statusText:e.statusText})){if(!(e instanceof Response))throw new TypeError('The "response" argument must be an instance of Response.');if("function"!=typeof t)throw new TypeError('The "onProgress" argument must be a function.');if(!e.body)return e;const n=e.headers.get("content-length"),o=n?parseInt(n,10):0;let a=0;const i=e.body.getReader(),s=new ReadableStream({async start(e){for(;;){const{done:r,value:n}=await i.read();if(r)break;a+=n.byteLength,t(a,o),e.enqueue(n)}e.close()}});return new Response(s,r(e))}async function E(e,t,r){return"string"!=typeof e?Promise.reject(new TypeError('The "url" argument must be a string.')):void 0!==t&&"object"!=typeof t?Promise.reject(new TypeError('The "options" argument must be an object.')):void 0!==r&&"function"!=typeof r?Promise.reject(new TypeError('The "onProgress" option must be a function.')):new Promise((n,o)=>{fetch(e,t??void 0).then(async e=>{const t=r?h(e,r):e,o=t.headers.get("content-type")||"";if(!o.includes("application/json"))throw new Error(`Unexpected content-type: ${o}`);const a=await t.json();if(!Array.isArray(a)&&!d(a))throw new Error("Received invalid data instead of valid JSON.");return n(a)}).catch(o)})}async function v(e,t,r,n){return"string"!=typeof e?Promise.reject(new TypeError('The "url" argument must be a string.')):void 0===t||Array.isArray(t)?void 0!==r&&"object"!=typeof r?Promise.reject(new TypeError('The "options" argument must be an object.')):void 0!==n&&"function"!=typeof n?Promise.reject(new TypeError('The "onProgress" option must be a function.')):new Promise((o,a)=>{fetch(e,r??void 0).then(async e=>{const r=n?h(e,n):e,a=r.headers.get("content-type")||"";if(Array.isArray(t)&&t.length>0&&!t.some(e=>a.includes(e)))throw new Error(`Blocked MIME type: ${a}`);const i=await r.text();return o(i)}).catch(a)}):Promise.reject(new TypeError('The "allowedMimeTypes" argument must be an array of strings.'))}function T(e={}){if(null===e||"object"!=typeof e)throw new TypeError('The "settings" argument must be an object.');const{element:t=document.body,hiddenClass:r="windowHidden",visibleClass:n="windowVisible",onVisible:o,onHidden:a}=e;if(!(t instanceof Element))throw new TypeError('"element" must be an instance of Element.');if("string"!=typeof r)throw new TypeError('"hiddenClass" must be a string.');if("string"!=typeof n)throw new TypeError('"visibleClass" must be a string.');if(void 0!==o&&"function"!=typeof o)throw new TypeError('"onVisible" must be a function if provided.');if(void 0!==a&&"function"!=typeof a)throw new TypeError('"onHidden" must be a function if provided.');let i="",s="";const l=()=>{t.classList.remove(r),t.classList.remove(n)};let u=null;const m=["visibilitychange","mozvisibilitychange","webkitvisibilitychange","msvisibilitychange"],f=["hidden","mozHidden","webkitHidden","msHidden"];for(let e=0;e<f.length;e++)if(f[e]in document){u=f[e];break}const c=function(e){l();const m=e?.type,f=u&&document[u];["focus","focusin","pageshow"].includes(m)?(t.classList.add(n),o?.({type:m,oldClass:s,oldType:i}),s=n):["blur","focusout","pagehide"].includes(m)||f?(t.classList.add(r),a?.({type:m,oldClass:s,oldType:i}),s=r):(t.classList.add(n),o?.({type:m,oldClass:s,oldType:i}),s=n),i=m};let d=()=>{};if(u){const e=m[f.indexOf(u)];document.addEventListener(e,c),window.addEventListener("focus",c),window.addEventListener("blur",c),d=()=>{document.removeEventListener(e,c),window.removeEventListener("focus",c),window.removeEventListener("blur",c),l()}}else"onfocusin"in document?(document.onfocusin=document.onfocusout=c,d=()=>{document.onfocusin=document.onfocusout=null,l()}):(window.onpageshow=window.onpagehide=window.onfocus=window.onblur=c,d=()=>{window.onpageshow=window.onpagehide=window.onfocus=window.onblur=null,l()});const p=new Event(u&&document[u]?"blur":"focus");return c(p),d}e.r(t),e.d(t,{addAiMarkerShortcut:()=>G,areElsCollBottom:()=>te,areElsCollLeft:()=>re,areElsCollPerfBottom:()=>ae,areElsCollPerfLeft:()=>ie,areElsCollPerfRight:()=>se,areElsCollPerfTop:()=>oe,areElsCollRight:()=>ne,areElsCollTop:()=>ee,areElsColliding:()=>le,areElsPerfColliding:()=>ue,arraySortPositions:()=>a,asyncReplace:()=>J,breakdownDuration:()=>f,browserIs:()=>Ue,calculateMarketcap:()=>V,cloneObjTypeOrder:()=>k,compareMarketcap:()=>z,countObj:()=>c,createSingletonTask:()=>Ce,diffArrayList:()=>o,diffObjList:()=>Z,diffStrings:()=>Q,documentIsFullScreen:()=>S,exitFullScreen:()=>C,extendObjType:()=>N,extractMediaId3Tags:()=>Oe,fetchJson:()=>E,fetchText:()=>v,formatBytes:()=>H,formatCustomTimer:()=>l,formatDayTimer:()=>m,formatTimer:()=>u,genFibonacciSeq:()=>q,getAge:()=>Y,getBrowserCssPrefix:()=>Be,getBrowserPings:()=>_e,getDuckTyping:()=>$e,getElsCollDetails:()=>ge,getElsCollDirDepth:()=>we,getElsCollOverlap:()=>ce,getElsCollOverlapPos:()=>de,getElsColliding:()=>me,getElsPerfColliding:()=>fe,getElsRelativeCenterOffset:()=>ye,getPercentage:()=>U,getRectCenter:()=>pe,getSimplePerc:()=>_,getTimeDuration:()=>s,getUserTimeFormat:()=>i,installWindowHiddenScript:()=>T,isBrowserAgent:()=>Re,isFullScreenMode:()=>F,isJsonObject:()=>d,isObjType:()=>D,isScreenFilled:()=>O,isValidObj:()=>p,multiplyArrayBlocks:()=>n,objType:()=>M,objTypeName:()=>j,offFullScreenChange:()=>B,onFullScreenChange:()=>R,parseMediaMetadata:()=>Fe,readBase64Blob:()=>w,readFileBlob:()=>y,readJsonBlob:()=>g,reorderObjTypeOrder:()=>A,requestFullScreen:()=>L,ruleOfThree:()=>$,safeTextTrim:()=>K,saveJsonFile:()=>b,shuffleArray:()=>r,toTitleCase:()=>W,toTitleCaseLowerFirst:()=>X,valFetchMediaContent:()=>Me,valMediaContentMetadata:()=>Se,waitForTrue:()=>Le});const I="undefined"!=typeof window&&void 0!==window.document,x={items:{},order:[]};function N(e,t){if("object"!=typeof e||null===e)throw new TypeError("Argument 'newItems' must be an object or an array.");if(void 0!==t&&"number"!=typeof t)throw new TypeError("Argument 'index' must be a number.");const r=[],n=Array.isArray(e)?e:Object.entries(e);for(const e of n){if(!Array.isArray(e)||e.length<2)throw new TypeError("Each item in 'newItems' array must be a [key, function] pair.");const[n,o]=e;if("string"!=typeof n)throw new TypeError("Validator key must be a string.");if("function"!=typeof o)throw new TypeError(`Validator for key '${n}' must be a function.`);if(!x.items.hasOwnProperty(n)){x.items[n]=o;let e="number"==typeof t?t:-1;if(-1===e){const t=x.order.indexOf("object");e=t>-1?t:x.order.length}e=Math.min(Math.max(0,e),x.order.length),x.order.splice(e,0,n),r.push(n)}}return r}function A(e){if(!Array.isArray(e))throw new TypeError("Argument 'newOrder' must be an array of strings.");if(!e.every(e=>"string"==typeof e))throw new TypeError("All elements in 'newOrder' must be strings.");const t=[...x.order];return!!e.every(e=>t.includes(e))&&(x.order=e.slice(),!0)}function k(){return[...x.order]}const j=e=>{if(null===e)return"null";for(const t of x.order)if("function"!=typeof x.items[t]||x.items[t](e))return t;return"unknown"};function D(e,t){if("string"!=typeof t)throw new TypeError("Argument 'type' must be a string.");return j(e)===t.toLowerCase()}function M(e,t){if(void 0===e)return null;if(void 0!==t&&"string"!=typeof t)throw new TypeError("Argument 'type' must be a string.");const r=j(e);return"string"==typeof t?r===t.toLowerCase():r}N([["undefined",e=>void 0===e],["null",e=>null===e],["boolean",e=>"boolean"==typeof e],["number",e=>"number"==typeof e&&!Number.isNaN(e)],["bigint",e=>"bigint"==typeof e],["string",e=>"string"==typeof e],["symbol",e=>"symbol"==typeof e],["function",e=>"function"==typeof e],["array",e=>Array.isArray(e)]]),I&&N([["file",e=>"undefined"!=typeof File&&e instanceof File]]),N([["date",e=>e instanceof Date],["regexp",e=>e instanceof RegExp],["map",e=>e instanceof Map],["set",e=>e instanceof Set],["weakmap",e=>e instanceof WeakMap],["weakset",e=>e instanceof WeakSet],["promise",e=>e instanceof Promise]]),I&&N([["htmlelement",e=>"undefined"!=typeof HTMLElement&&e instanceof HTMLElement]]),N([["object",e=>d(e)]]);const S=()=>!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitIsFullScreen||document.mozFullScreen),O=()=>window.innerHeight===screen.height&&window.innerWidth===screen.width,F=()=>S()||O(),L=e=>new Promise(async(t,r)=>{const n=document.documentElement;try{n.requestFullscreen?await n.requestFullscreen(e):n.mozRequestFullScreen?n.mozRequestFullScreen(e):n.webkitRequestFullScreen?n.webkitRequestFullScreen(e):n.msRequestFullscreen&&n.msRequestFullscreen(e),t()}catch(e){r(e)}}),C=()=>new Promise((e,t)=>{if(document.exitFullscreen)document.exitFullscreen().then(e).catch(t);else try{if(document.mozCancelFullScreen)document.mozCancelFullScreen();else if(document.webkitCancelFullScreen)document.webkitCancelFullScreen();else{if(!document.msExitFullscreen)throw new Error("Fullscreen API is not supported");document.msExitFullscreen()}e()}catch(e){t(e)}}),P=["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"],R=(e,t)=>{P.forEach(r=>{document.addEventListener(r,e,t)})},B=(e,t)=>{P.forEach(r=>{document.removeEventListener(r,e,t)})};function $(e,t,r,n=!1){if("number"!=typeof e||!Number.isFinite(e))throw new TypeError("val1 must be a finite number.");if("number"!=typeof t||!Number.isFinite(t))throw new TypeError("val2 must be a finite number.");if("number"!=typeof r||!Number.isFinite(r))throw new TypeError("val3 must be a finite number.");if("boolean"!=typeof n)throw new TypeError("inverse must be a boolean.");return n?Number(e*t)/r:Number(r*t)/e}function _(e,t){if("number"!=typeof e||!Number.isFinite(e))throw new TypeError("price must be a finite number.");if("number"!=typeof t||!Number.isFinite(t))throw new TypeError("percentage must be a finite number.");return e*(t/100)}function U(e,t){if("number"!=typeof e||!Number.isFinite(e))throw new TypeError("part must be a finite number.");if("number"!=typeof t||!Number.isFinite(t))throw new TypeError("total must be a finite number.");return 0===t?0:e/t*100}function Y(e=0,t=null){if("number"!=typeof e&&"string"!=typeof e&&!(e instanceof Date))throw new TypeError("timeData must be a number, string, or Date object.");if(null!==t&&!(t instanceof Date))throw new TypeError("now must be a Date object or null.");const r=new Date(e);if(Number.isNaN(r.getTime()))return null;const n=t instanceof Date?t:new Date;let o=n.getFullYear()-r.getFullYear();const a=n.getMonth(),i=r.getMonth(),s=n.getDate(),l=r.getDate();return(a<i||a===i&&s<l)&&o--,Math.abs(o)}function H(e,t=null,r=null){if("number"!=typeof e||!Number.isFinite(e)||e<0)throw new TypeError("bytes must be a positive number.");if(0===e)return{unit:"Bytes",value:0};if(null!==t&&("number"!=typeof t||!Number.isFinite(t)))throw new TypeError("decimals must be a number or null.");const n=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];if(null!==r){if("string"!=typeof r)throw new TypeError("maxUnit must be a string or null.");if(!n.includes(r))throw new RangeError(`maxUnit must be one of: ${n.join(", ")}`)}const o=r&&n.includes(r)?n.indexOf(r):n.length-1,a=Math.min(Math.floor(Math.log(e)/Math.log(1024)),o);let i=e/Math.pow(1024,a);if(null!==t){const e=t<0?0:t;i=parseFloat(i.toFixed(e))}return{unit:n[a],value:i}}function q({baseValues:e=[0,1],length:t=10,combiner:r=(e,t)=>e+t}={}){if(!Array.isArray(e)||2!==e.length||!e.every(e=>"number"==typeof e))throw new Error("baseValues must be an array of exactly two numbers.");if("number"!=typeof t||!Number.isInteger(t))throw new RangeError("length must be an integer.");if("function"!=typeof r)throw new TypeError("combiner must be a function.");const n=[...e.slice(0,2)];for(let e=2;e<t;e++){const t=r(n[e-2],n[e-1],e);n.push(t)}return n}function V(e,t){if("number"!=typeof e||Number.isNaN(e)||!Number.isFinite(e))throw new TypeError("Original market cap must be a finite number.");if("number"!=typeof t||Number.isNaN(t)||!Number.isFinite(t))throw new TypeError("Circulating supply must be a finite number.");if(t<=0)throw new RangeError("Circulating supply must be greater than zero.");return e/t}function z(e,t,r){if("number"!=typeof r||Number.isNaN(r)||!Number.isFinite(r))throw new TypeError("New market cap must be a finite number.");const n=V(e,t),o="number"==typeof r?r/t:NaN;return{originalPrice:n,newPrice:o,priceChangePercent:"number"==typeof r?(o-n)/n*100:NaN}}async function J(e,t,r){if("string"!=typeof e)throw new TypeError("Expected a string for 'str', but received "+typeof e);if(!(t instanceof RegExp))throw new TypeError("Expected a RegExp for 'regex', but received "+typeof t);if("function"!=typeof r)throw new TypeError("Expected a function for 'asyncFn', but received "+typeof r);const n=[];e.replace(t,(e,...t)=>(n.push(r(e,...t)),e));const o=await Promise.all(n);return e.replace(t,()=>o.shift())}function W(e){if("string"!=typeof e)throw new TypeError("Expected a string for 'str', but received "+typeof e);return e.replace(/\w\S*/g,e=>e.charAt(0).toUpperCase()+e.substr(1).toLowerCase())}function X(e){if("string"!=typeof e)throw new TypeError("Expected a string for 'str', but received "+typeof e);const t=e.replace(/\w\S*/g,e=>e.charAt(0).toUpperCase()+e.substr(1).toLowerCase());return t.charAt(0).toLowerCase()+t.slice(1)}function G({key:e="a",className:t="detect-made-by-ai"}={}){if("undefined"==typeof HTMLElement)throw new Error("[AiMarkerShortcut] Environment does not support the DOM. This function must be run in a browser.");if("string"!=typeof e)throw new TypeError("Expected a string for 'config.key', but received "+typeof e);if("string"!=typeof t)throw new TypeError("Expected a string for 'config.className', but received "+typeof t);const r=function(r){if(r.ctrlKey&&r.altKey&&r.key.toLowerCase()===e){if(r.preventDefault(),!document.body)return void console.warn("[AiMarkerShortcut] <body> element not found. Cannot toggle class. Ensure the DOM is fully loaded when using the shortcut.");document.body.classList.toggle(t)}};return document.addEventListener("keydown",r),r}function K(e,t,r=.6){if("string"!=typeof e)throw new TypeError("Expected a string for 'text', but received "+typeof e);if(!Number.isInteger(t)||t<=0)throw new TypeError(`Expected 'limit' to be a positive integer, but received ${t}`);if("number"!=typeof r||r<0||r>1)throw new TypeError(`Expected 'safeCutZone' to be a number between 0 and 1, but received ${r}`);let n=e.trim();if(n.length>t){const e=n.lastIndexOf(" ",t);return e>0&&e>=t*r?`${n.substring(0,e).trim()}...`:`${n.substring(0,t).trim()}...`}return n}function Z(e,t){if("object"!=typeof e||null===e||Array.isArray(e))throw new TypeError("Expected an object for 'oldStrings', but received "+(null===e?"null":typeof e));if("object"!=typeof t||null===t||Array.isArray(t))throw new TypeError("Expected an object for 'newStrings', but received "+(null===t?"null":typeof t));const r={added:{},removed:{},modified:{}};for(const n in e)n in t?e[n]!==t[n]&&(r.modified[n]={old:e[n],new:t[n]}):r.removed[n]=e[n];for(const n in t)n in e||(r.added[n]=t[n]);return r}const Q=Z,ee=(e,t)=>e.bottom<t.top,te=(e,t)=>e.top>t.bottom,re=(e,t)=>e.right<t.left,ne=(e,t)=>e.left>t.right,oe=(e,t)=>e.bottom<=t.top,ae=(e,t)=>e.top>=t.bottom,ie=(e,t)=>e.right<=t.left,se=(e,t)=>e.left>=t.right,le=(e,t)=>!(re(e,t)||ne(e,t)||ee(e,t)||te(e,t)),ue=(e,t)=>!(ie(e,t)||se(e,t)||oe(e,t)||ae(e,t)),me=(e,t)=>re(e,t)?"left":ne(e,t)?"right":ee(e,t)?"top":te(e,t)?"bottom":null,fe=(e,t)=>ie(e,t)?"left":se(e,t)?"right":oe(e,t)?"top":ae(e,t)?"bottom":null,ce=(e,t)=>({overlapLeft:t.right-e.left,overlapRight:e.right-t.left,overlapTop:t.bottom-e.top,overlapBottom:e.bottom-t.top}),de=({overlapLeft:e=-1,overlapRight:t=-1,overlapTop:r=-1,overlapBottom:n=-1}={})=>({dirX:e<t?"right":"left",dirY:r<n?"bottom":"top"}),pe=e=>({x:e.left+e.width/2,y:e.top+e.height/2});function ye(e,t){const r=e.left+e.width/2,n=e.top+e.height/2;return{x:t.left+t.width/2-r,y:t.top+t.height/2-n}}function we(e,t){if(!ue(e,t))return{inDir:null,dirX:null,dirY:null,depthX:0,depthY:0};const{overlapLeft:r,overlapRight:n,overlapTop:o,overlapBottom:a}=ce(e,t),{dirX:i,dirY:s}=de({overlapLeft:r,overlapRight:n,overlapTop:o,overlapBottom:a}),l=Math.min(r,n),u=Math.min(o,a);let m;return m=l<u?i:s,{inDir:m,dirX:i,dirY:s,depthX:l,depthY:u}}function ge(e,t){const r=ue(e,t),n={in:null,x:null,y:null},o={y:null,x:null},a={top:0,bottom:0,left:0,right:0},{overlapLeft:i,overlapRight:s,overlapTop:l,overlapBottom:u}=ce(t,e);a.top=l,a.bottom=u,a.left=i,a.right=s;const m=Object.entries(a).filter(([,e])=>e>0).sort((e,t)=>e[1]-t[1]),{dirX:f,dirY:c}=de({overlapLeft:s,overlapRight:i,overlapTop:u,overlapBottom:l});return n.y=c,n.x=f,a.bottom<0?o.y="bottom":a.top<0&&(o.y="top"),a.left<0?o.x="left":a.right<0&&(o.x="right"),n.in=r?a.top===a.bottom&&a.bottom===a.left&&a.left===a.right?"center":m.length?m[0][0]:"top":null,{dirs:n,depth:a,isNeg:o}}const be=(e,t)=>{if("string"!=typeof t)throw new TypeError('Expected "name" to be a string.');if("string"!=typeof e)throw new TypeError(`Expected "${t}" to be a string, but received ${typeof e}.`)},he=(e,t)=>{if("string"!=typeof t)throw new TypeError('Expected "name" to be a string.');if("function"!=typeof e)throw new TypeError(`Expected "${t}" to be a function, but received ${typeof e}.`)},Ee=(e,t)=>{if("string"!=typeof t)throw new TypeError('Expected "name" to be a string.');if("object"!=typeof e||null===e||Array.isArray(e))throw new TypeError(`Expected "${t}" to be a plain object, but received ${null===e?"null":Array.isArray(e)?"array":typeof e}.`)},ve=(e,t=!1)=>!t&&void 0===e,Te=(e,t=!1)=>ve(e,t)||"string"==typeof e||!t&&null===e,Ie=(e,t=!1)=>ve(e,t)||"number"==typeof e||!t&&null===e,xe=(e,t=!1)=>ve(e,t)||"boolean"==typeof e||!t&&null===e,Ne=(e,t)=>!!ve(e)||(he(t,"valueValidator"),Array.isArray(e)&&e.every(t)),Ae=new Map;class ke extends Error{constructor(e,t,r){if(be(e,"message"),be(t,"url"),"string"!=typeof r)throw new TypeError(`Expected "stage" to be a string, but received ${typeof r}.`);super(e),this.name="MediaLoadingError",this.url=t,this.stage=r}}const je=async e=>{be(e,"str");const t=(new TextEncoder).encode(e),r=await crypto.subtle.digest("SHA-1",t);return Array.from(new Uint8Array(r)).map(e=>e.toString(16).padStart(2,"0")).join("").substring(0,8)},De=(e,t="image/jpeg")=>{if(!(e instanceof Uint8Array)&&"string"!=typeof e)throw new TypeError(`Expected "data" to be an instance of Uint8Array or a string, but received ${typeof e}.`);be(t,"format");const r=e=>{const t=URL.createObjectURL(e),r=Ae.get(t);return Ae.set(t,"number"==typeof r?r+1:1),t};if(e instanceof Uint8Array)return r(new Blob([e],{type:t}));if("string"==typeof e&&e.startsWith("data:")){const n=e.split(",")[1],o=atob(n),a=new Uint8Array(o.length);for(let e=0;e<o.length;e++)a[e]=o.charCodeAt(e);return r(new Blob([a],{type:t}))}return"string"==typeof e?e:""},Me=(e,t=!1)=>{if(d(e)){if(4!==c(e)){if(t)return!1;throw new TypeError("Invalid fetch data: Object must be an MediaContentFetchData.")}Se(e.common),Ee(e.native,"_fetchData.native"),Ee(e.format,"_fetchData.format"),Ee(e.quality,"_fetchData.quality");for(const r in e.native){const n=e.native[r];if(!Ne(n,e=>"string"==typeof e.id)){if(t)return!1;throw new TypeError(`Invalid native data: "${r}" must be an array of native fetch data.`)}}}return!0},Se=e=>{if(Ee(e,"common"),Me(e._fetchData),!Te(e.title))throw new TypeError('Invalid metadata: "title" must be a string or null.');if(!Te(e.album))throw new TypeError('Invalid metadata: "album" must be a string or null.');if(!Te(e.albumartist))throw new TypeError('Invalid metadata: "albumartist" must be a a string or null.');if(!Te(e.artist))throw new TypeError('Invalid metadata: "artist" must be a string or null.');if(!xe(e.compilation))throw new TypeError('Invalid metadata: "compilation" must be a boolean or null.');if(!xe(e.podcast))throw new TypeError('Invalid metadata: "podcast" must be a boolean or null.');if(!xe(e.gapless))throw new TypeError('Invalid metadata: "gapless" must be a boolean or null.');if(!xe(e.showMovement))throw new TypeError('Invalid metadata: "showMovement" must be a boolean or null.');if(!Ie(e.averageLevel))throw new TypeError('Invalid metadata: "averageLevel" must be a number or null.');if(!Ie(e.peakLevel))throw new TypeError('Invalid metadata: "peakLevel" must be a number or null.');if(!Ie(e.hdVideo))throw new TypeError('Invalid metadata: "hdVideo" must be a number or null.');if(!Ie(e.stik))throw new TypeError('Invalid metadata: "stik" must be a number or null.');if(!Ie(e.playCounter))throw new TypeError('Invalid metadata: "playCounter" must be a number or null.');if(!Ie(e.tvSeason))throw new TypeError('Invalid metadata: "tvSeason" must be a number or null.');if(!Ie(e.tvEpisode))throw new TypeError('Invalid metadata: "tvEpisode" must be a number or null.');if(!Ie(e.year))throw new TypeError('Invalid metadata: "year" must be a number or null.');if(!Ie(e.bpm))throw new TypeError('Invalid metadata: "bpm" must be a number or null.');if(!Ie(e.originalyear))throw new TypeError('Invalid metadata: "originalyear" must be a number or null.');if(!Ie(e.movementTotal))throw new TypeError('Invalid metadata: "movementTotal" must be a number or null.');if(!Te(e.date))throw new TypeError('Invalid metadata: "date" must be a string or null.');if(!Te(e.originaldate))throw new TypeError('Invalid metadata: "originaldate" must be a string or null.');if(!Te(e.releasedate))throw new TypeError('Invalid metadata: "releasedate" must be a string or null.');if(!Te(e.albumsort))throw new TypeError('Invalid metadata: "albumsort" must be a string or null.');if(!Te(e.titlesort))throw new TypeError('Invalid metadata: "titlesort" must be a string or null.');if(!Te(e.work))throw new TypeError('Invalid metadata: "work" must be a string or null.');if(!Te(e.artistsort))throw new TypeError('Invalid metadata: "artistsort" must be a string or null.');if(!Te(e.albumartistsort))throw new TypeError('Invalid metadata: "albumartistsort" must be a string or null.');if(!Te(e.composersort))throw new TypeError('Invalid metadata: "composersort" must be a string or null.');if(!Te(e.grouping))throw new TypeError('Invalid metadata: "grouping" must be a string or null.');if(!Te(e.longDescription))throw new TypeError('Invalid metadata: "longDescription" must be a string or null.');if(!Te(e.totaltracks))throw new TypeError('Invalid metadata: "totaltracks" must be a string or null.');if(!Te(e.totaldiscs))throw new TypeError('Invalid metadata: "totaldiscs" must be a string or null.');if(!Te(e.mood))throw new TypeError('Invalid metadata: "mood" must be a string or null.');if(!Te(e.media))throw new TypeError('Invalid metadata: "media" must be a string or null.');if(!Te(e.tvShow))throw new TypeError('Invalid metadata: "tvShow" must be a string or null.');if(!Te(e.tvShowSort))throw new TypeError('Invalid metadata: "tvShowSort" must be a string or null.');if(!Te(e.tvEpisodeId))throw new TypeError('Invalid metadata: "tvEpisodeId" must be a string or null.');if(!Te(e.tvNetwork))throw new TypeError('Invalid metadata: "tvNetwork" must be a string or null.');if(!Te(e.podcasturl))throw new TypeError('Invalid metadata: "podcasturl" must be a string or null.');if(!Te(e.releasestatus))throw new TypeError('Invalid metadata: "releasestatus" must be a string or null.');if(!Te(e.releasecountry))throw new TypeError('Invalid metadata: "releasecountry" must be a string or null.');if(!Te(e.script))throw new TypeError('Invalid metadata: "script" must be a string or null.');if(!Te(e.language))throw new TypeError('Invalid metadata: "language" must be a string or null.');if(!Te(e.copyright))throw new TypeError('Invalid metadata: "copyright" must be a string or null.');if(!Te(e.license))throw new TypeError('Invalid metadata: "license" must be a string or null.');if(!Te(e.encodedby))throw new TypeError('Invalid metadata: "encodedby" must be a string or null.');if(!Te(e.encodersettings))throw new TypeError('Invalid metadata: "encodersettings" must be a string or null.');if(!Te(e.barcode))throw new TypeError('Invalid metadata: "barcode" must be a string or null.');if(!Te(e.asin))throw new TypeError('Invalid metadata: "asin" must be a string or null.');if(!Te(e.website))throw new TypeError('Invalid metadata: "website" must be a string or null.');if(!Te(e.originalalbum))throw new TypeError('Invalid metadata: "originalalbum" must be a string or null.');if(!Te(e.originalartist))throw new TypeError('Invalid metadata: "originalartist" must be a string or null.');if(!Te(e.key))throw new TypeError('Invalid metadata: "key" must be a string or null.');if(!Te(e.movement))throw new TypeError('Invalid metadata: "movement" must be a string or null.');if(!Te(e.podcastId))throw new TypeError('Invalid metadata: "podcastId" must be a string or null.');if(!Ne(e.albumartists,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "albumartists" must be an array of strings.');if(!Ne(e.genre,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "genre" must be an array of strings.');if(!Ne(e.label,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "label" must be an array of strings.');if(!Ne(e.composer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "composer" must be an array of strings.');if(!Ne(e.artists,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "artists" must be an array of strings.');if(!Ne(e.lyricist,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "lyricist" must be an array of strings.');if(!Ne(e.writer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "writer" must be an array of strings.');if(!Ne(e.conductor,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "conductor" must be an array of strings.');if(!Ne(e.remixer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "remixer" must be an array of strings.');if(!Ne(e.arranger,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "arranger" must be an array of strings.');if(!Ne(e.engineer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "engineer" must be an array of strings.');if(!Ne(e.publisher,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "publisher" must be an array of strings.');if(!Ne(e.producer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "producer" must be an array of strings.');if(!Ne(e.djmixer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "djmixer" must be an array of strings.');if(!Ne(e.mixer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "mixer" must be an array of strings.');if(!Ne(e.technician,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "technician" must be an array of strings.');if(!Ne(e.subtitle,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "subtitle" must be an array of strings.');if(!Ne(e.description,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "description" must be an array of strings.');if(!Ne(e.discsubtitle,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "discsubtitle" must be an array of strings.');if(!Ne(e.releasetype,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "releasetype" must be an array of strings.');if(!Ne(e.isrc,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "isrc" must be an array of strings.');if(!Ne(e.performer_instrument,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "performer_instrument" must be an array of strings.');if(!Ne(e.notes,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "notes" must be an array of strings.');if(!Ne(e.category,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "category" must be an array of strings.');if(!Ne(e.keywords,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "keywords" must be an array of strings.');if(!Ne(e.catalognumber,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "catalognumber" must be an array of strings.');if(!Ne(e.picture,e=>e&&"object"==typeof e&&(void 0===e.description||"string"==typeof e.description)&&(void 0===e.name||"string"==typeof e.name)&&(void 0===e.type||"string"==typeof e.type)&&"string"==typeof e.format&&(e.data instanceof Uint8Array||"string"==typeof e.data)))throw new TypeError('Invalid metadata: "picture" must be an array of pictures.');if(!Ne(e.comment,e=>null!==e&&"object"==typeof e&&Te(e.descriptor)&&Te(e.language)&&Te(e.text)))throw new TypeError('Invalid metadata: "comment" must be an array of valid IComment objects.');if(!Ne(e.lyrics,e=>null!==e&&"object"==typeof e&&Te(e.text)&&Te(e.descriptor)&&Te(e.language)&&(!Array.isArray(e)||Ne(e.syncText,e=>null!==e&&"object"==typeof e&&Te(e.text)&&Ie(e.timestamp)))&&(e=>void 0===e||null!==e&&"object"==typeof e&&Ie(e.notSynchronized)&&Ie(e.mpegFrameNumber)&&Ie(e.milliseconds))(e.timeStampFormat)&&(e=>void 0===e||null!==e&&"object"==typeof e&&Ie(e.other)&&Ie(e.lyrics)&&Ie(e.text)&&Ie(e.movement_part)&&Ie(e.events)&&Ie(e.chord)&&Ie(e.trivia_pop))(e.contentType)))throw new TypeError('Invalid metadata: "lyrics" must be an array of valid ILyricsTag objects.');if(!Ne(e.rating,e=>null!==e&&"object"==typeof e&&Te(e.source)&&Ie(e.rating)))throw new TypeError('Invalid metadata: "rating" must be an array of valid IRating objects.');const t=(e,t)=>{if(!ve(t)&&null!==t){if("object"!=typeof t)throw new TypeError(`Invalid metadata: "${e}" must be an object or null.`);if("number"!=typeof t.no&&null!==t.no)throw new TypeError(`Invalid metadata: "${e}.no" must be a number or null.`);if("number"!=typeof t.of&&null!==t.of)throw new TypeError(`Invalid metadata: "${e}.of" must be a number or null.`)}};t("disk",e.disk),t("track",e.track),t("movementIndex",e.movementIndex)},Oe=async(e,t,r=!0)=>{be(e,"url"),he(t,"parseFile");const n=await fetch(e);if(!n.ok)throw new Error(`Failed to fetch audio file: ${n.status} ${n.statusText}`);const o=await n.blob(),a=await t(o);if(!a||"object"!=typeof a.common)throw new TypeError('Invalid metadata: "common" property is missing.');void 0!==typeof a.common["performer:instrument"]&&(a.common.performer_instrument=a.common["performer:instrument"]),Me(a);const i=a.common;Se(i);const s=([e,t])=>Array.isArray(t)?t.length>0:d(t)?c(Object.fromEntries(Object.entries(t).filter(s)))>0:null!==t,l=i?.picture?.map(e=>({...e,data:r?De(e.data,e.format):e.data}))??[];a.common={...a.common,picture:l.map(e=>({...e,data:""}))},r&&Object.keys(a.native).forEach(e=>{a.native[e]=a.native[e].map(e=>{if(e.value&&"object"==typeof e.value&&e.value.data instanceof Uint8Array){const t=i?.picture?.findIndex(t=>t.data===e.value.data&&t.format===e.value.format&&t.description===e.value.description&&t.name===e.value.name)??-1;if(l[t])return{...e,value:{...e.value,data:""}}}return e})});const u=Object.fromEntries(Object.entries({title:i?.title??null,album:i?.album??null,albumartist:i?.albumartist??null,albumartists:i?.albumartists??[],genre:i?.genre??[],label:i?.label??[],composer:i?.composer??[],year:i?.year??null,artist:i?.artist??null,artists:i?.artists??[],disk:i?.disk?{no:i.disk.no,of:i.disk.of}:null,track:i?.track?{no:i.track.no,of:i.track.of}:null,movementIndex:i?.movementIndex?{no:i.movementIndex.no,of:i.movementIndex.of}:null,picture:l,date:i?.date??null,originaldate:i?.originaldate??null,originalyear:i?.originalyear??null,releasedate:i?.releasedate??null,comment:i?.comment??[],lyrics:i?.lyrics??[],albumsort:i?.albumsort??null,titlesort:i?.titlesort??null,work:i?.work??null,artistsort:i?.artistsort??null,albumartistsort:i?.albumartistsort??null,composersort:i?.composersort??null,lyricist:i?.lyricist??[],writer:i?.writer??[],conductor:i?.conductor??[],remixer:i?.remixer??[],arranger:i?.arranger??[],engineer:i?.engineer??[],publisher:i?.publisher??[],producer:i?.producer??[],djmixer:i?.djmixer??[],mixer:i?.mixer??[],technician:i?.technician??[],grouping:i?.grouping??null,subtitle:i?.subtitle??[],description:i?.description??[],longDescription:i?.longDescription??null,discsubtitle:i?.discsubtitle??[],totaltracks:i?.totaltracks??null,totaldiscs:i?.totaldiscs??null,movementTotal:i?.movementTotal??null,compilation:i?.compilation??null,rating:i?.rating??[],bpm:i?.bpm??null,mood:i?.mood??null,media:i?.media??null,catalognumber:i?.catalognumber??[],tvShow:i?.tvShow??null,tvShowSort:i?.tvShowSort??null,tvSeason:i?.tvSeason??null,tvEpisode:i?.tvEpisode??null,tvEpisodeId:i?.tvEpisodeId??null,tvNetwork:i?.tvNetwork??null,podcast:i?.podcast??null,podcasturl:i?.podcasturl??null,releasestatus:i?.releasestatus??null,releasetype:i?.releasetype??[],releasecountry:i?.releasecountry??null,script:i?.script??null,language:i?.language??null,copyright:i?.copyright??null,license:i?.license??null,encodedby:i?.encodedby??null,encodersettings:i?.encodersettings??null,gapless:i?.gapless??null,barcode:i?.barcode??null,isrc:i?.isrc??[],asin:i?.asin??null,website:i?.website??null,performer_instrument:i?.performer_instrument??[],averageLevel:i?.averageLevel??null,peakLevel:i?.peakLevel??null,notes:i?.notes??[],originalalbum:i?.originalalbum??null,originalartist:i?.originalartist??null,key:i?.key??null,category:i?.category??[],hdVideo:i?.hdVideo??null,keywords:i?.keywords??[],movement:i?.movement??null,podcastId:i?.podcastId??null,showMovement:i?.showMovement??null,stik:i?.stik??null,playCounter:i?.playCounter??null}).filter(s));return u._fetchData=a,u},Fe=async(e,t={},r={},n=e=>{if(!(e instanceof Blob))throw new TypeError('Expected "data" to be a Blob.');return new Promise((e,t)=>t(new TypeError("parseFile library not found.")))},o={},a=!0,i="null")=>{if("string"!=typeof e&&!(e instanceof HTMLMediaElement))throw new TypeError("Source must be a string or an HTMLMediaElement.");if(Ee(t,"defaultMetadata"),Ee(r,"metadata"),he(n,"parseFile"),Ee(o,"callbacks"),o.onProgress&&"function"!=typeof o.onProgress)throw new TypeError("callbacks.onProgress must be a function.");if(o.onError&&"function"!=typeof o.onError)throw new TypeError("callbacks.onError must be a function.");if("string"!=typeof i&&"function"!=typeof i)throw new TypeError("unknownArtist must be a string or a function returning a string.");let s,l="";const u=(t,r)=>{if(be(t,"stage"),void 0!==r&&!(r instanceof Event))throw new TypeError('Expected "event" to be an Event or undefined.');o.onProgress&&o.onProgress({event:r,status:"loading",stage:t,url:l||(e instanceof HTMLMediaElement?e.src:"unknown")})},m=(t,r)=>{if(!(t instanceof Error))throw new TypeError('Expected "error" to be an Error.');be(r,"stage"),o.onError&&o.onError({error:t instanceof Error?t:new Error(String(t)),url:l||(e instanceof HTMLMediaElement?e.src:"unknown"),stage:r})};try{u("INITIALIZING"),"string"==typeof e?(l=e,s=new Audio(l)):(s=e,l=s.src);try{await new Promise((e,t)=>{const r=e=>u("DOWNLOADING",e),n=()=>{a(),e(void 0)},o=e=>{a(),t(new Error(`HTMLMediaElement failed to load: ${e.message||"Unknown error"}`))},a=()=>{s.removeEventListener("progress",r),s.removeEventListener("loadedmetadata",n),s.removeEventListener("error",o)};s.addEventListener("progress",r),s.addEventListener("loadedmetadata",n),s.addEventListener("error",o),s.readyState>=1&&(a(),e(void 0))}),u("METADATA_LOADED")}catch(e){throw new ke(e instanceof Error?e.message:"UNKNOWN ERROR",l,"METADATA")}const f={id:r.id||await je(l),duration:Math.floor(1e3*s.duration),url:l,weight:r.weight??1};let c={};u("EXTRACTING_ID3");try{c=await Oe(l,n,a)}catch(e){m(e instanceof Error?e:new Error("Unknown Error"),"ID3"),console.warn(`[TinyAudioUtils] ID3 extraction failed for ${l}. Falling back to filename.`)}const p=e=>{be(e,"url");try{return(e.split(/[?#]/)[0].split("/").pop()??"").replace(/\.[^/.]+$/,"")||"Unknown Track"}catch{return"Unknown Track"}},y=e=>{const t={...e};return d(t._fetchData)&&(d(c._fetchData)&&(t._fetchData={...c._fetchData}),d(e._fetchData)&&(void 0!==e._fetchData.common&&(t._fetchData.common=e._fetchData.common),void 0!==e._fetchData.native&&(t._fetchData.native=e._fetchData.native),void 0!==e._fetchData.format&&(t._fetchData.format=e._fetchData.format),void 0!==e._fetchData.quality&&(t._fetchData.quality=e._fetchData.quality))),t},w={...f,...y(t),...c,...y(r),title:c.title||r.title||p(l),artist:c.artist||r.artist||("string"==typeof i?i:String(i()))};return o.onProgress&&o.onProgress({status:"success",stage:"COMPLETE",url:l}),w}catch(e){if(e instanceof ke)throw e;const t=new ke(e instanceof Error?e.message:"UNKNOWN ERROR",l,"INITIALIZING");throw m(t,"INITIALIZING"),t}},Le=(e,t=100)=>{if("function"!=typeof e)throw new TypeError("Expected 'getValue' to be a function.");if(!Number.isFinite(t)||t<=0)throw new TypeError("Expected 'checkInterval' to be a positive number.");return new Promise(r=>{const n=setInterval(()=>{e()&&(clearInterval(n),r())},t)})},Ce=e=>{if("function"!=typeof e)throw new TypeError('The argument "baseFunction" must be a function.');let t=null;return{callback:async(...r)=>(null!==t||(t=(async()=>{try{const n=await e(...r);return t=null,n}catch(e){throw t=null,e}})()),t),getActivePromise:()=>t,resetActivePromise:()=>{t=null}}},Pe=["chrome","firefox","ie","edge","safari","opera","yandex","other"];function Re(){const e=navigator.userAgent;return-1!==e.indexOf("Chrome")?"chrome":-1!==e.indexOf("Firefox")?"firefox":-1!==e.indexOf("MSIE")?"ie":-1!==e.indexOf("Edge")?"edge":-1!==e.indexOf("Safari")?"safari":-1!==e.indexOf("Opera")?"opera":-1!==e.indexOf("YaBrowser")?"yandex":"other"}function Be(){const e=(Array.prototype.slice.call(window.getComputedStyle(document.documentElement,"")).join("").match(/-(moz|webkit|ms)-/)??["",""])[1];return"moz"===e?"gecko":"webkit"===e?"webkit":"ms"===e?"trident":"other"}function $e(){const e=!!window.opr&&!!opr.addons||!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0,t="undefined"!=typeof InstallTrigger,r=/constructor/i.test(window.HTMLElement)||"[object SafariRemoteNotification]"===(!window.safari||"undefined"!=typeof safari&&safari.pushNotification).toString(),n=!!document.documentMode,o=!n&&!!window.StyleMedia,a=!!window.chrome;return{isOpera:e,isFirefox:t,isSafari:r,isIE:n,isEdge:o,isChrome:a,isBlink:(a||e)&&!!window.CSS}}function _e(e=[]){if(!Array.isArray(e))throw new TypeError('The "disable" argument must be an array.');for(const t of e)if(!Pe.includes(t))throw new TypeError(`Invalid browser name provided in disable array: ${t}`);const t={chrome:0,firefox:0,ie:0,edge:0,safari:0,opera:0,yandex:0,other:0};t[Re()]++;const r=Be();"gecko"===r?e.indexOf("firefox")<0&&t.firefox++:"webkit"===r?(e.indexOf("chrome")<0&&t.chrome++,e.indexOf("safari")<0&&t.safari++,e.indexOf("opera")<0&&t.opera++,e.indexOf("edge")<0&&t.edge++):"trident"===r?e.indexOf("ie")<0&&t.ie++:e.indexOf("other")<0&&t.other++;const n=$e();return n.isOpera&&e.indexOf("opera")<0&&t.opera++,n.isFirefox&&e.indexOf("firefox")<0&&t.firefox++,n.isSafari&&e.indexOf("safari")<0&&t.safari++,n.isIE&&e.indexOf("ie")<0&&t.ie++,n.isEdge&&e.indexOf("edge")<0&&t.edge++,n.isChrome&&e.indexOf("chrome")<0&&t.chrome++,t}function Ue(e=[]){const t=_e(e);return Object.keys(t).reduce((e,r)=>t[r]>t[e]?r:e)}window.TinyBasicsEs=t})();
|
|
1
|
+
(()=>{"use strict";const e={d:(t,r)=>{if(Array.isArray(r))for(var n=0;n<r.length;){var o=r[n++],a=r[n++];e.o(t,o)?0===a&&n++:0===a?Object.defineProperty(t,o,{enumerable:!0,value:r[n++]}):Object.defineProperty(t,o,{enumerable:!0,get:a})}else for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}};let t={};function r(e){if(!Array.isArray(e))throw new TypeError("Argument 'items' must be an array.");let t,r=e.length;for(;0!==r;)t=Math.floor(Math.random()*r),r--,[e[r],e[t]]=[e[t],e[r]];return e}function n(e,t){if(!Array.isArray(e))throw new TypeError("Argument 'phases' must be an array.");if(!Array.isArray(t))throw new TypeError("Argument 'counts' must be an array.");if(e.length!==t.length)throw new RangeError("The 'phases' and 'counts' arrays must have the same length.");const r=[];for(let n=0;n<e.length;n++){if("number"!=typeof t[n]||Number.isNaN(t[n]))throw new TypeError(`Element at counts[${n}] must be a valid number.`);for(let o=0;o<t[n];o++)r.push(e[n])}return r}function o(e,t){if(!Array.isArray(e))throw new TypeError("Argument 'oldItems' must be an array.");if(!Array.isArray(t))throw new TypeError("Argument 'newItems' must be an array.");const r=e.filter(e=>!t.includes(e));return{added:t.filter(t=>!e.includes(t)),removed:r}}function a(e,t=!1){if(null!=e&&"string"!=typeof e)throw new TypeError("Argument 'item' must be a string or null.");if("boolean"!=typeof t)throw new TypeError("Argument 'isReverse' must be a boolean.");return t?function(t,r){return(e?t[e]:t)>(e?r[e]:r)?-1:(e?t[e]:t)<(e?r[e]:r)?1:0}:function(t,r){return(e?t[e]:t)<(e?r[e]:r)?-1:(e?t[e]:t)>(e?r[e]:r)?1:0}}function i(){const e=new Intl.DateTimeFormat(void 0,{hour:"numeric"}).resolvedOptions().hourCycle;return e?.startsWith("h12")?12:24}function s(e=new Date,t="asSeconds",r=null){if(!(e instanceof Date))throw new TypeError("The 'timeData' argument must be an instance of Date.");if("string"!=typeof t)throw new TypeError("The 'durationType' argument must be a string.");const n=["asMilliseconds","asSeconds","asMinutes","asHours","asDays"];if(!n.includes(t))throw new RangeError(`The 'durationType' must be one of: ${n.join(", ")}.`);if(null!==r&&!(r instanceof Date))throw new TypeError("The 'now' argument must be an instance of Date or null.");const o=r instanceof Date?r:new Date,a=e.getTime()-o.getTime();switch(t){case"asMilliseconds":return a;case"asSeconds":default:return a/1e3;case"asMinutes":return a/6e4;case"asHours":return a/36e5;case"asDays":return a/864e5}}function l(e,t="seconds",r="{time}"){if("number"!=typeof e||Number.isNaN(e))throw new TypeError("The 'totalSeconds' argument must be a valid number.");if("string"!=typeof t)throw new TypeError("The 'level' argument must be a string.");const n=["seconds","minutes","hours","days","months","years"];if(!n.includes(t))throw new RangeError(`The 'level' must be one of: ${n.join(", ")}.`);if("string"!=typeof r)throw new TypeError("The 'format' argument must be a string.");e=Math.max(0,Math.floor(e));const o=n.indexOf(t),a=o>=5,i=o>=4,s=o>=3,l=o>=2,u=o>=1,f=o>=0,c={years:a?0:NaN,months:i?0:NaN,days:s?0:NaN,hours:l?0:NaN,minutes:u?0:NaN,seconds:f?0:NaN,total:NaN};let m=e;if(a||i||s){const e=new Date(1980,0,1),t=new Date(e.getTime()+1e3*m),r=new Date(e);if(a)for(;new Date(r.getFullYear()+1,r.getMonth(),r.getDate()).getTime()<=t.getTime();)r.setFullYear(r.getFullYear()+1),c.years++;if(i)for(;new Date(r.getFullYear(),r.getMonth()+1,r.getDate()).getTime()<=t.getTime();)r.setMonth(r.getMonth()+1),c.months++;if(s)for(;new Date(r.getFullYear(),r.getMonth(),r.getDate()+1).getTime()<=t.getTime();)r.setDate(r.getDate()+1),c.days++;m=Math.floor((t.getTime()-r.getTime())/1e3)}l&&(c.hours=Math.floor(m/3600),m%=3600),u&&(c.minutes=Math.floor(m/60),m%=60),f&&(c.seconds=m),c.total=+e.toFixed(2).replace(/\.00$/,"");const d=e=>{const t="string"==typeof e?parseInt(e):e;return Number.isNaN(t)?"NaN":String(t).padStart(2,"0")},p=[l?d(c.hours):null,u?d(c.minutes):null,f?d(c.seconds):null].filter(e=>null!==e).join(":");return r.replace(/\{years\}/g,String(c.years)).replace(/\{months\}/g,String(c.months)).replace(/\{days\}/g,String(c.days)).replace(/\{hours\}/g,d(c.hours)).replace(/\{minutes\}/g,d(c.minutes)).replace(/\{seconds\}/g,d(c.seconds)).replace(/\{time\}/g,p).replace(/\{total\}/g,String(c.total)).trim()}function u(e){if("number"!=typeof e||Number.isNaN(e))throw new TypeError("The 'seconds' argument must be a valid number.");return l(e,"hours","{hours}:{minutes}:{seconds}")}function f(e){if("number"!=typeof e||Number.isNaN(e))throw new TypeError("The 'seconds' argument must be a valid number.");return l(e,"days","{days}d {hours}:{minutes}:{seconds}")}function c(e,t="milliseconds"){if("number"!=typeof e||Number.isNaN(e))throw new TypeError("The 'totalMs' argument must be a valid number.");if("string"!=typeof t)throw new TypeError("The 'level' argument must be a string.");const r=["milliseconds","seconds","minutes","hours","days","months","years"];if(!r.includes(t))throw new RangeError(`The 'level' must be one of: ${r.join(", ")}.`);e=Math.max(0,Math.floor(e));const n=r.indexOf(t),o=n>=6,a=n>=5,i=n>=4,s=n>=3,l=n>=2,u=n>=1,f=n>=0,c={years:o?0:NaN,months:a?0:NaN,days:i?0:NaN,hours:s?0:NaN,minutes:l?0:NaN,seconds:u?0:NaN,milliseconds:f?0:NaN,total:NaN};let m=e;if(o||a||i){const e=new Date(1980,0,1),t=new Date(e.getTime()+m),r=new Date(e);if(o)for(;new Date(r.getFullYear()+1,r.getMonth(),r.getDate()).getTime()<=t.getTime();)r.setFullYear(r.getFullYear()+1),c.years++;if(a)for(;new Date(r.getFullYear(),r.getMonth()+1,r.getDate()).getTime()<=t.getTime();)r.setMonth(r.getMonth()+1),c.months++;if(i)for(;new Date(r.getFullYear(),r.getMonth(),r.getDate()+1).getTime()<=t.getTime();)r.setDate(r.getDate()+1),c.days++;m=t.getTime()-r.getTime()}return s&&(c.hours=Math.floor(m/36e5),m%=36e5),l&&(c.minutes=Math.floor(m/6e4),m%=6e4),u&&(c.seconds=Math.floor(m/1e3),m%=1e3),f&&(c.milliseconds=m),c.total=+e,c}function m(e){if(!Array.isArray(e)&&!d(e))throw new TypeError("Argument must be either an Array or a pure JSON Object.");return Array.isArray(e)?e.length:Object.keys(e).length}function d(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)&&"[object Object]"===Object.prototype.toString.call(e)}function p(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function y(e,t){if(!(e instanceof Blob))return Promise.reject(new TypeError('The "file" argument must be an instance of Blob or File.'));const r=["readAsArrayBuffer","readAsDataURL","readAsText","readAsBinaryString"];return"string"==typeof t&&r.includes(t)?new Promise((r,n)=>{const o=new FileReader;o.onload=()=>{try{r(o.result)}catch(e){n(e)}},o.onerror=()=>{n(o.error)},o[t](e)}):Promise.reject(new TypeError(`The "method" argument must be one of: ${r.join(", ")}.`))}function w(e,t=!1){return e instanceof Blob?"string"!=typeof t&&"boolean"!=typeof t?Promise.reject(new TypeError("The isDataUrl parameter must be a boolean or a string.")):new Promise((r,n)=>{y(e,"readAsDataURL").then(e=>{if("string"!=typeof e)throw new TypeError("Expected file content to be a string.");const n=e.match(/^data:(.+);base64,(.*)$/);if(!n||!n[2])throw new Error("Invalid data URL format or missing Base64 content.");const[,o,a]=n;if(!/^[\w/+]+=*$/.test(a))throw new Error("Base64 content is malformed.");if("boolean"==typeof t)return r(t?e:a);if(!/^[\w-]+\/[\w.+-]+$/.test(t))throw new Error(`Invalid MIME type string: ${t}`);return r(`data:${t};base64,${a}`)}).catch(n)}):Promise.reject(new TypeError('The "file" argument must be an instance of Blob or File.'))}function g(e){return e instanceof Blob?new Promise((t,r)=>y(e,"readAsText").then(e=>{if("string"!=typeof e)throw new TypeError("Expected file content to be a string.");const r=e.trim();if(0===r.length)throw new Error("File is empty or contains only whitespace.");const n=JSON.parse(r);if("object"!=typeof n||null===n)throw new Error("Parsed content is not a valid JSON object or array.");t(n)}).catch(r)):Promise.reject(new TypeError('The "file" argument must be an instance of Blob or File.'))}function b(e,t,r=2){if("string"!=typeof e)throw new TypeError('The "filename" argument must be a string.');if("number"!=typeof r||!Number.isInteger(r)||r<0)throw new TypeError('The "spaces" argument must be a non-negative integer.');const n=JSON.stringify(t,null,r),o=new Blob([n],{type:"application/json"}),a=URL.createObjectURL(o),i=document.createElement("a");i.href=a,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(a)}function h(e,t,r=e=>({headers:e.headers,status:e.status,statusText:e.statusText})){if(!(e instanceof Response))throw new TypeError('The "response" argument must be an instance of Response.');if("function"!=typeof t)throw new TypeError('The "onProgress" argument must be a function.');if(!e.body)return e;const n=e.headers.get("content-length"),o=n?parseInt(n,10):0;let a=0;const i=e.body.getReader(),s=new ReadableStream({async start(e){for(;;){const{done:r,value:n}=await i.read();if(r)break;a+=n.byteLength,t(a,o),e.enqueue(n)}e.close()}});return new Response(s,r(e))}async function v(e,t,r){return"string"!=typeof e?Promise.reject(new TypeError('The "url" argument must be a string.')):void 0!==t&&"object"!=typeof t?Promise.reject(new TypeError('The "options" argument must be an object.')):void 0!==r&&"function"!=typeof r?Promise.reject(new TypeError('The "onProgress" option must be a function.')):new Promise((n,o)=>{fetch(e,t??void 0).then(async e=>{const t=r?h(e,r):e,o=t.headers.get("content-type")||"";if(!o.includes("application/json"))throw new Error(`Unexpected content-type: ${o}`);const a=await t.json();if(!Array.isArray(a)&&!d(a))throw new Error("Received invalid data instead of valid JSON.");return n(a)}).catch(o)})}async function E(e,t,r,n){return"string"!=typeof e?Promise.reject(new TypeError('The "url" argument must be a string.')):void 0===t||Array.isArray(t)?void 0!==r&&"object"!=typeof r?Promise.reject(new TypeError('The "options" argument must be an object.')):void 0!==n&&"function"!=typeof n?Promise.reject(new TypeError('The "onProgress" option must be a function.')):new Promise((o,a)=>{fetch(e,r??void 0).then(async e=>{const r=n?h(e,n):e,a=r.headers.get("content-type")||"";if(Array.isArray(t)&&t.length>0&&!t.some(e=>a.includes(e)))throw new Error(`Blocked MIME type: ${a}`);const i=await r.text();return o(i)}).catch(a)}):Promise.reject(new TypeError('The "allowedMimeTypes" argument must be an array of strings.'))}function T(e={}){if(null===e||"object"!=typeof e)throw new TypeError('The "settings" argument must be an object.');const{element:t=document.body,hiddenClass:r="windowHidden",visibleClass:n="windowVisible",onVisible:o,onHidden:a}=e;if(!(t instanceof Element))throw new TypeError('"element" must be an instance of Element.');if("string"!=typeof r)throw new TypeError('"hiddenClass" must be a string.');if("string"!=typeof n)throw new TypeError('"visibleClass" must be a string.');if(void 0!==o&&"function"!=typeof o)throw new TypeError('"onVisible" must be a function if provided.');if(void 0!==a&&"function"!=typeof a)throw new TypeError('"onHidden" must be a function if provided.');let i="",s="";const l=()=>{t.classList.remove(r),t.classList.remove(n)};let u=null;const f=["visibilitychange","mozvisibilitychange","webkitvisibilitychange","msvisibilitychange"],c=["hidden","mozHidden","webkitHidden","msHidden"];for(let e=0;e<c.length;e++)if(c[e]in document){u=c[e];break}const m=function(e){l();const f=e?.type,c=u&&document[u];["focus","focusin","pageshow"].includes(f)?(t.classList.add(n),o?.({type:f,oldClass:s,oldType:i}),s=n):["blur","focusout","pagehide"].includes(f)||c?(t.classList.add(r),a?.({type:f,oldClass:s,oldType:i}),s=r):(t.classList.add(n),o?.({type:f,oldClass:s,oldType:i}),s=n),i=f};let d=()=>{};if(u){const e=f[c.indexOf(u)];document.addEventListener(e,m),window.addEventListener("focus",m),window.addEventListener("blur",m),d=()=>{document.removeEventListener(e,m),window.removeEventListener("focus",m),window.removeEventListener("blur",m),l()}}else"onfocusin"in document?(document.onfocusin=document.onfocusout=m,d=()=>{document.onfocusin=document.onfocusout=null,l()}):(window.onpageshow=window.onpagehide=window.onfocus=window.onblur=m,d=()=>{window.onpageshow=window.onpagehide=window.onfocus=window.onblur=null,l()});const p=new Event(u&&document[u]?"blur":"focus");return m(p),d}e.r(t),e.d(t,{addAiMarkerShortcut:()=>G,areElsCollBottom:()=>te,areElsCollLeft:()=>re,areElsCollPerfBottom:()=>ae,areElsCollPerfLeft:()=>ie,areElsCollPerfRight:()=>se,areElsCollPerfTop:()=>oe,areElsCollRight:()=>ne,areElsCollTop:()=>ee,areElsColliding:()=>le,areElsPerfColliding:()=>ue,arraySortPositions:()=>a,asyncReplace:()=>J,breakdownDuration:()=>c,browserIs:()=>qe,calculateMarketcap:()=>V,cloneObjTypeOrder:()=>j,compareMarketcap:()=>z,countObj:()=>m,createSingletonTask:()=>Be,diffArrayList:()=>o,diffObjList:()=>Z,diffStrings:()=>Q,documentIsFullScreen:()=>D,exitFullScreen:()=>C,extendObjType:()=>A,extractMediaId3Tags:()=>Ce,fetchJson:()=>v,fetchText:()=>E,formatBytes:()=>H,formatCustomTimer:()=>l,formatDayTimer:()=>f,formatTimer:()=>u,genFibonacciSeq:()=>q,getAge:()=>Y,getBrowserCssPrefix:()=>Ue,getBrowserPings:()=>He,getDuckTyping:()=>Ye,getElsCollDetails:()=>ge,getElsCollDirDepth:()=>we,getElsCollOverlap:()=>me,getElsCollOverlapPos:()=>de,getElsColliding:()=>fe,getElsPerfColliding:()=>ce,getElsRelativeCenterOffset:()=>ye,getPercentage:()=>U,getRectCenter:()=>pe,getSimplePerc:()=>_,getTimeDuration:()=>s,getUserTimeFormat:()=>i,installWindowHiddenScript:()=>T,isBrowserAgent:()=>_e,isFullScreenMode:()=>O,isJsonObject:()=>d,isObjType:()=>M,isScreenFilled:()=>F,isValidObj:()=>p,jsonFilter:()=>be,jsonFilterByKeys:()=>ve,jsonFilterRecursive:()=>he,multiplyArrayBlocks:()=>n,objType:()=>S,objTypeName:()=>k,offFullScreenChange:()=>B,onFullScreenChange:()=>R,parseMediaMetadata:()=>Pe,readBase64Blob:()=>w,readFileBlob:()=>y,readJsonBlob:()=>g,reorderObjTypeOrder:()=>N,requestFullScreen:()=>L,ruleOfThree:()=>$,safeTextTrim:()=>K,saveJsonFile:()=>b,shuffleArray:()=>r,toTitleCase:()=>W,toTitleCaseLowerFirst:()=>X,valFetchMediaContent:()=>Oe,valMediaContentMetadata:()=>Le,waitForTrue:()=>Re});const I="undefined"!=typeof window&&void 0!==window.document,x={items:{},order:[]};function A(e,t){if("object"!=typeof e||null===e)throw new TypeError("Argument 'newItems' must be an object or an array.");if(void 0!==t&&"number"!=typeof t)throw new TypeError("Argument 'index' must be a number.");const r=[],n=Array.isArray(e)?e:Object.entries(e);for(const e of n){if(!Array.isArray(e)||e.length<2)throw new TypeError("Each item in 'newItems' array must be a [key, function] pair.");const[n,o]=e;if("string"!=typeof n)throw new TypeError("Validator key must be a string.");if("function"!=typeof o)throw new TypeError(`Validator for key '${n}' must be a function.`);if(!x.items.hasOwnProperty(n)){x.items[n]=o;let e="number"==typeof t?t:-1;if(-1===e){const t=x.order.indexOf("object");e=t>-1?t:x.order.length}e=Math.min(Math.max(0,e),x.order.length),x.order.splice(e,0,n),r.push(n)}}return r}function N(e){if(!Array.isArray(e))throw new TypeError("Argument 'newOrder' must be an array of strings.");if(!e.every(e=>"string"==typeof e))throw new TypeError("All elements in 'newOrder' must be strings.");const t=[...x.order];return!!e.every(e=>t.includes(e))&&(x.order=e.slice(),!0)}function j(){return[...x.order]}const k=e=>{if(null===e)return"null";for(const t of x.order)if("function"!=typeof x.items[t]||x.items[t](e))return t;return"unknown"};function M(e,t){if("string"!=typeof t)throw new TypeError("Argument 'type' must be a string.");return k(e)===t.toLowerCase()}function S(e,t){if(void 0===e)return null;if(void 0!==t&&"string"!=typeof t)throw new TypeError("Argument 'type' must be a string.");const r=k(e);return"string"==typeof t?r===t.toLowerCase():r}A([["undefined",e=>void 0===e],["null",e=>null===e],["boolean",e=>"boolean"==typeof e],["number",e=>"number"==typeof e&&!Number.isNaN(e)],["bigint",e=>"bigint"==typeof e],["string",e=>"string"==typeof e],["symbol",e=>"symbol"==typeof e],["function",e=>"function"==typeof e],["array",e=>Array.isArray(e)]]),I&&A([["file",e=>"undefined"!=typeof File&&e instanceof File]]),A([["date",e=>e instanceof Date],["regexp",e=>e instanceof RegExp],["map",e=>e instanceof Map],["set",e=>e instanceof Set],["weakmap",e=>e instanceof WeakMap],["weakset",e=>e instanceof WeakSet],["promise",e=>e instanceof Promise]]),I&&A([["htmlelement",e=>"undefined"!=typeof HTMLElement&&e instanceof HTMLElement]]),A([["object",e=>d(e)]]);const D=()=>!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitIsFullScreen||document.mozFullScreen),F=()=>window.innerHeight===screen.height&&window.innerWidth===screen.width,O=()=>D()||F(),L=e=>new Promise(async(t,r)=>{const n=document.documentElement;try{n.requestFullscreen?await n.requestFullscreen(e):n.mozRequestFullScreen?n.mozRequestFullScreen(e):n.webkitRequestFullScreen?n.webkitRequestFullScreen(e):n.msRequestFullscreen&&n.msRequestFullscreen(e),t()}catch(e){r(e)}}),C=()=>new Promise((e,t)=>{if(document.exitFullscreen)document.exitFullscreen().then(e).catch(t);else try{if(document.mozCancelFullScreen)document.mozCancelFullScreen();else if(document.webkitCancelFullScreen)document.webkitCancelFullScreen();else{if(!document.msExitFullscreen)throw new Error("Fullscreen API is not supported");document.msExitFullscreen()}e()}catch(e){t(e)}}),P=["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"],R=(e,t)=>{P.forEach(r=>{document.addEventListener(r,e,t)})},B=(e,t)=>{P.forEach(r=>{document.removeEventListener(r,e,t)})};function $(e,t,r,n=!1){if("number"!=typeof e||!Number.isFinite(e))throw new TypeError("val1 must be a finite number.");if("number"!=typeof t||!Number.isFinite(t))throw new TypeError("val2 must be a finite number.");if("number"!=typeof r||!Number.isFinite(r))throw new TypeError("val3 must be a finite number.");if("boolean"!=typeof n)throw new TypeError("inverse must be a boolean.");return n?Number(e*t)/r:Number(r*t)/e}function _(e,t){if("number"!=typeof e||!Number.isFinite(e))throw new TypeError("price must be a finite number.");if("number"!=typeof t||!Number.isFinite(t))throw new TypeError("percentage must be a finite number.");return e*(t/100)}function U(e,t){if("number"!=typeof e||!Number.isFinite(e))throw new TypeError("part must be a finite number.");if("number"!=typeof t||!Number.isFinite(t))throw new TypeError("total must be a finite number.");return 0===t?0:e/t*100}function Y(e=0,t=null){if("number"!=typeof e&&"string"!=typeof e&&!(e instanceof Date))throw new TypeError("timeData must be a number, string, or Date object.");if(null!==t&&!(t instanceof Date))throw new TypeError("now must be a Date object or null.");const r=new Date(e);if(Number.isNaN(r.getTime()))return null;const n=t instanceof Date?t:new Date;let o=n.getFullYear()-r.getFullYear();const a=n.getMonth(),i=r.getMonth(),s=n.getDate(),l=r.getDate();return(a<i||a===i&&s<l)&&o--,Math.abs(o)}function H(e,t=null,r=null){if("number"!=typeof e||!Number.isFinite(e)||e<0)throw new TypeError("bytes must be a positive number.");if(0===e)return{unit:"Bytes",value:0};if(null!==t&&("number"!=typeof t||!Number.isFinite(t)))throw new TypeError("decimals must be a number or null.");const n=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];if(null!==r){if("string"!=typeof r)throw new TypeError("maxUnit must be a string or null.");if(!n.includes(r))throw new RangeError(`maxUnit must be one of: ${n.join(", ")}`)}const o=r&&n.includes(r)?n.indexOf(r):n.length-1,a=Math.min(Math.floor(Math.log(e)/Math.log(1024)),o);let i=e/Math.pow(1024,a);if(null!==t){const e=t<0?0:t;i=parseFloat(i.toFixed(e))}return{unit:n[a],value:i}}function q({baseValues:e=[0,1],length:t=10,combiner:r=(e,t)=>e+t}={}){if(!Array.isArray(e)||2!==e.length||!e.every(e=>"number"==typeof e))throw new Error("baseValues must be an array of exactly two numbers.");if("number"!=typeof t||!Number.isInteger(t))throw new RangeError("length must be an integer.");if("function"!=typeof r)throw new TypeError("combiner must be a function.");const n=[...e.slice(0,2)];for(let e=2;e<t;e++){const t=r(n[e-2],n[e-1],e);n.push(t)}return n}function V(e,t){if("number"!=typeof e||Number.isNaN(e)||!Number.isFinite(e))throw new TypeError("Original market cap must be a finite number.");if("number"!=typeof t||Number.isNaN(t)||!Number.isFinite(t))throw new TypeError("Circulating supply must be a finite number.");if(t<=0)throw new RangeError("Circulating supply must be greater than zero.");return e/t}function z(e,t,r){if("number"!=typeof r||Number.isNaN(r)||!Number.isFinite(r))throw new TypeError("New market cap must be a finite number.");const n=V(e,t),o="number"==typeof r?r/t:NaN;return{originalPrice:n,newPrice:o,priceChangePercent:"number"==typeof r?(o-n)/n*100:NaN}}async function J(e,t,r){if("string"!=typeof e)throw new TypeError("Expected a string for 'str', but received "+typeof e);if(!(t instanceof RegExp))throw new TypeError("Expected a RegExp for 'regex', but received "+typeof t);if("function"!=typeof r)throw new TypeError("Expected a function for 'asyncFn', but received "+typeof r);const n=[];e.replace(t,(e,...t)=>(n.push(r(e,...t)),e));const o=await Promise.all(n);return e.replace(t,()=>o.shift())}function W(e){if("string"!=typeof e)throw new TypeError("Expected a string for 'str', but received "+typeof e);return e.replace(/\w\S*/g,e=>e.charAt(0).toUpperCase()+e.substr(1).toLowerCase())}function X(e){if("string"!=typeof e)throw new TypeError("Expected a string for 'str', but received "+typeof e);const t=e.replace(/\w\S*/g,e=>e.charAt(0).toUpperCase()+e.substr(1).toLowerCase());return t.charAt(0).toLowerCase()+t.slice(1)}function G({key:e="a",className:t="detect-made-by-ai"}={}){if("undefined"==typeof HTMLElement)throw new Error("[AiMarkerShortcut] Environment does not support the DOM. This function must be run in a browser.");if("string"!=typeof e)throw new TypeError("Expected a string for 'config.key', but received "+typeof e);if("string"!=typeof t)throw new TypeError("Expected a string for 'config.className', but received "+typeof t);const r=function(r){if(r.ctrlKey&&r.altKey&&r.key.toLowerCase()===e){if(r.preventDefault(),!document.body)return void console.warn("[AiMarkerShortcut] <body> element not found. Cannot toggle class. Ensure the DOM is fully loaded when using the shortcut.");document.body.classList.toggle(t)}};return document.addEventListener("keydown",r),r}function K(e,t,r=.6){if("string"!=typeof e)throw new TypeError("Expected a string for 'text', but received "+typeof e);if(!Number.isInteger(t)||t<=0)throw new TypeError(`Expected 'limit' to be a positive integer, but received ${t}`);if("number"!=typeof r||r<0||r>1)throw new TypeError(`Expected 'safeCutZone' to be a number between 0 and 1, but received ${r}`);let n=e.trim();if(n.length>t){const e=n.lastIndexOf(" ",t);return e>0&&e>=t*r?`${n.substring(0,e).trim()}...`:`${n.substring(0,t).trim()}...`}return n}function Z(e,t){if("object"!=typeof e||null===e||Array.isArray(e))throw new TypeError("Expected an object for 'oldStrings', but received "+(null===e?"null":typeof e));if("object"!=typeof t||null===t||Array.isArray(t))throw new TypeError("Expected an object for 'newStrings', but received "+(null===t?"null":typeof t));const r={added:{},removed:{},modified:{}};for(const n in e)n in t?e[n]!==t[n]&&(r.modified[n]={old:e[n],new:t[n]}):r.removed[n]=e[n];for(const n in t)n in e||(r.added[n]=t[n]);return r}const Q=Z,ee=(e,t)=>e.bottom<t.top,te=(e,t)=>e.top>t.bottom,re=(e,t)=>e.right<t.left,ne=(e,t)=>e.left>t.right,oe=(e,t)=>e.bottom<=t.top,ae=(e,t)=>e.top>=t.bottom,ie=(e,t)=>e.right<=t.left,se=(e,t)=>e.left>=t.right,le=(e,t)=>!(re(e,t)||ne(e,t)||ee(e,t)||te(e,t)),ue=(e,t)=>!(ie(e,t)||se(e,t)||oe(e,t)||ae(e,t)),fe=(e,t)=>re(e,t)?"left":ne(e,t)?"right":ee(e,t)?"top":te(e,t)?"bottom":null,ce=(e,t)=>ie(e,t)?"left":se(e,t)?"right":oe(e,t)?"top":ae(e,t)?"bottom":null,me=(e,t)=>({overlapLeft:t.right-e.left,overlapRight:e.right-t.left,overlapTop:t.bottom-e.top,overlapBottom:e.bottom-t.top}),de=({overlapLeft:e=-1,overlapRight:t=-1,overlapTop:r=-1,overlapBottom:n=-1}={})=>({dirX:e<t?"right":"left",dirY:r<n?"bottom":"top"}),pe=e=>({x:e.left+e.width/2,y:e.top+e.height/2});function ye(e,t){const r=e.left+e.width/2,n=e.top+e.height/2;return{x:t.left+t.width/2-r,y:t.top+t.height/2-n}}function we(e,t){if(!ue(e,t))return{inDir:null,dirX:null,dirY:null,depthX:0,depthY:0};const{overlapLeft:r,overlapRight:n,overlapTop:o,overlapBottom:a}=me(e,t),{dirX:i,dirY:s}=de({overlapLeft:r,overlapRight:n,overlapTop:o,overlapBottom:a}),l=Math.min(r,n),u=Math.min(o,a);let f;return f=l<u?i:s,{inDir:f,dirX:i,dirY:s,depthX:l,depthY:u}}function ge(e,t){const r=ue(e,t),n={in:null,x:null,y:null},o={y:null,x:null},a={top:0,bottom:0,left:0,right:0},{overlapLeft:i,overlapRight:s,overlapTop:l,overlapBottom:u}=me(t,e);a.top=l,a.bottom=u,a.left=i,a.right=s;const f=Object.entries(a).filter(([,e])=>e>0).sort((e,t)=>e[1]-t[1]),{dirX:c,dirY:m}=de({overlapLeft:s,overlapRight:i,overlapTop:u,overlapBottom:l});return n.y=m,n.x=c,a.bottom<0?o.y="bottom":a.top<0&&(o.y="top"),a.left<0?o.x="left":a.right<0&&(o.x="right"),n.in=r?a.top===a.bottom&&a.bottom===a.left&&a.left===a.right?"center":f.length?f[0][0]:"top":null,{dirs:n,depth:a,isNeg:o}}function be(e,t){if(!p(e))throw new TypeError("The first argument must be a non-null object.");if("function"!=typeof t)throw new TypeError("The second argument must be a function.");const r=Object.entries(e).filter(t);return Object.fromEntries(r)}function he(e,t){if(void 0!==t.obj&&"function"!=typeof t.obj)throw new TypeError("filter.obj must be a function if provided.");if(void 0!==t.value&&"function"!=typeof t.value)throw new TypeError("filter.value must be a function if provided.");if(void 0!==t.array&&"function"!=typeof t.array)throw new TypeError("filter.array must be a function if provided.");let r;r=e instanceof Map?new Map:e instanceof Set?new Set:{};const n=(o=e)instanceof Map?Array.from(o.entries()):o instanceof Set?Array.from(o.values()).map(e=>[void 0,e]):Object.entries(o);var o;const a=(e,r)=>{const n=[];for(let o=0;o<e.length;o++){const i=e[o];if(Array.isArray(i))n.push(a(i,r));else if(p(i)){const r=he(i,t);(void 0===t.obj||t.obj(r,o,e))&&n.push(r)}else(void 0===t.value||t.value([r,i],o,e))&&n.push(i)}return n};for(let e=0;e<n.length;e++){const[o,i]=n[e];if(Array.isArray(i)){const s=a(i,o);(void 0===t.array||t.array([o,s],e,n))&&(r instanceof Map||r instanceof Set?r instanceof Map?r.set(o,s):r.add(s):r[o]=s)}else if(p(i)){const a=he(i,t);(void 0===t.obj||t.obj(a,e,n))&&(r instanceof Map?r.set(o,a):r instanceof Set?r.add(a):r[o]=a)}else(void 0===t.value||t.value([o,i],e,n))&&(r instanceof Map?r.set(o,i):r instanceof Set?r.add(i):r[o]=i)}return r}function ve(e,t,r){if(!Array.isArray(t))throw new TypeError("The second argument must be an array.");if(void 0!==r&&!Array.isArray(r))throw new TypeError("The third argument must be an array.");return be(e,([e,n])=>t.length>0?t.some(t=>{if(Array.isArray(t)){const[r,o]=t,a=e===r,i="function"==typeof o?o(n):n===o;return a&&i}const o=e===t,a=void 0===r||r.some(e=>"function"==typeof e?e(n):e===n);return o&&a}):void 0!==r&&r.some(e=>"function"==typeof e?e(n):e===n))}const Ee=(e,t)=>{if("string"!=typeof t)throw new TypeError('Expected "name" to be a string.');if("string"!=typeof e)throw new TypeError(`Expected "${t}" to be a string, but received ${typeof e}.`)},Te=(e,t)=>{if("string"!=typeof t)throw new TypeError('Expected "name" to be a string.');if("function"!=typeof e)throw new TypeError(`Expected "${t}" to be a function, but received ${typeof e}.`)},Ie=(e,t)=>{if("string"!=typeof t)throw new TypeError('Expected "name" to be a string.');if("object"!=typeof e||null===e||Array.isArray(e))throw new TypeError(`Expected "${t}" to be a plain object, but received ${null===e?"null":Array.isArray(e)?"array":typeof e}.`)},xe=(e,t=!1)=>!t&&void 0===e,Ae=(e,t=!1)=>xe(e,t)||"string"==typeof e||!t&&null===e,Ne=(e,t=!1)=>xe(e,t)||"number"==typeof e||!t&&null===e,je=(e,t=!1)=>xe(e,t)||"boolean"==typeof e||!t&&null===e,ke=(e,t)=>!!xe(e)||(Te(t,"valueValidator"),Array.isArray(e)&&e.every(t)),Me=new Map;class Se extends Error{constructor(e,t,r){if(Ee(e,"message"),Ee(t,"url"),"string"!=typeof r)throw new TypeError(`Expected "stage" to be a string, but received ${typeof r}.`);super(e),this.name="MediaLoadingError",this.url=t,this.stage=r}}const De=async e=>{Ee(e,"str");const t=(new TextEncoder).encode(e),r=await crypto.subtle.digest("SHA-1",t);return Array.from(new Uint8Array(r)).map(e=>e.toString(16).padStart(2,"0")).join("").substring(0,8)},Fe=(e,t="image/jpeg")=>{if(!(e instanceof Uint8Array)&&"string"!=typeof e)throw new TypeError(`Expected "data" to be an instance of Uint8Array or a string, but received ${typeof e}.`);Ee(t,"format");const r=e=>{const t=URL.createObjectURL(e),r=Me.get(t);return Me.set(t,"number"==typeof r?r+1:1),t};if(e instanceof Uint8Array)return r(new Blob([e],{type:t}));if("string"==typeof e&&e.startsWith("data:")){const n=e.split(",")[1],o=atob(n),a=new Uint8Array(o.length);for(let e=0;e<o.length;e++)a[e]=o.charCodeAt(e);return r(new Blob([a],{type:t}))}return"string"==typeof e?e:""},Oe=(e,t=!1)=>{if(d(e)){if(4!==m(e)){if(t)return!1;throw new TypeError("Invalid fetch data: Object must be an MediaContentFetchData.")}Le(e.common),Ie(e.native,"_fetchData.native"),Ie(e.format,"_fetchData.format"),Ie(e.quality,"_fetchData.quality");for(const r in e.native){const n=e.native[r];if(!ke(n,e=>"string"==typeof e.id)){if(t)return!1;throw new TypeError(`Invalid native data: "${r}" must be an array of native fetch data.`)}}}return!0},Le=e=>{if(Ie(e,"common"),Oe(e._fetchData),!Ae(e.title))throw new TypeError('Invalid metadata: "title" must be a string or null.');if(!Ae(e.album))throw new TypeError('Invalid metadata: "album" must be a string or null.');if(!Ae(e.albumartist))throw new TypeError('Invalid metadata: "albumartist" must be a a string or null.');if(!Ae(e.artist))throw new TypeError('Invalid metadata: "artist" must be a string or null.');if(!je(e.compilation))throw new TypeError('Invalid metadata: "compilation" must be a boolean or null.');if(!je(e.podcast))throw new TypeError('Invalid metadata: "podcast" must be a boolean or null.');if(!je(e.gapless))throw new TypeError('Invalid metadata: "gapless" must be a boolean or null.');if(!je(e.showMovement))throw new TypeError('Invalid metadata: "showMovement" must be a boolean or null.');if(!Ne(e.averageLevel))throw new TypeError('Invalid metadata: "averageLevel" must be a number or null.');if(!Ne(e.peakLevel))throw new TypeError('Invalid metadata: "peakLevel" must be a number or null.');if(!Ne(e.hdVideo))throw new TypeError('Invalid metadata: "hdVideo" must be a number or null.');if(!Ne(e.stik))throw new TypeError('Invalid metadata: "stik" must be a number or null.');if(!Ne(e.playCounter))throw new TypeError('Invalid metadata: "playCounter" must be a number or null.');if(!Ne(e.tvSeason))throw new TypeError('Invalid metadata: "tvSeason" must be a number or null.');if(!Ne(e.tvEpisode))throw new TypeError('Invalid metadata: "tvEpisode" must be a number or null.');if(!Ne(e.year))throw new TypeError('Invalid metadata: "year" must be a number or null.');if(!Ne(e.bpm))throw new TypeError('Invalid metadata: "bpm" must be a number or null.');if(!Ne(e.originalyear))throw new TypeError('Invalid metadata: "originalyear" must be a number or null.');if(!Ne(e.movementTotal))throw new TypeError('Invalid metadata: "movementTotal" must be a number or null.');if(!Ae(e.date))throw new TypeError('Invalid metadata: "date" must be a string or null.');if(!Ae(e.originaldate))throw new TypeError('Invalid metadata: "originaldate" must be a string or null.');if(!Ae(e.releasedate))throw new TypeError('Invalid metadata: "releasedate" must be a string or null.');if(!Ae(e.albumsort))throw new TypeError('Invalid metadata: "albumsort" must be a string or null.');if(!Ae(e.titlesort))throw new TypeError('Invalid metadata: "titlesort" must be a string or null.');if(!Ae(e.work))throw new TypeError('Invalid metadata: "work" must be a string or null.');if(!Ae(e.artistsort))throw new TypeError('Invalid metadata: "artistsort" must be a string or null.');if(!Ae(e.albumartistsort))throw new TypeError('Invalid metadata: "albumartistsort" must be a string or null.');if(!Ae(e.composersort))throw new TypeError('Invalid metadata: "composersort" must be a string or null.');if(!Ae(e.grouping))throw new TypeError('Invalid metadata: "grouping" must be a string or null.');if(!Ae(e.longDescription))throw new TypeError('Invalid metadata: "longDescription" must be a string or null.');if(!Ae(e.totaltracks))throw new TypeError('Invalid metadata: "totaltracks" must be a string or null.');if(!Ae(e.totaldiscs))throw new TypeError('Invalid metadata: "totaldiscs" must be a string or null.');if(!Ae(e.mood))throw new TypeError('Invalid metadata: "mood" must be a string or null.');if(!Ae(e.media))throw new TypeError('Invalid metadata: "media" must be a string or null.');if(!Ae(e.tvShow))throw new TypeError('Invalid metadata: "tvShow" must be a string or null.');if(!Ae(e.tvShowSort))throw new TypeError('Invalid metadata: "tvShowSort" must be a string or null.');if(!Ae(e.tvEpisodeId))throw new TypeError('Invalid metadata: "tvEpisodeId" must be a string or null.');if(!Ae(e.tvNetwork))throw new TypeError('Invalid metadata: "tvNetwork" must be a string or null.');if(!Ae(e.podcasturl))throw new TypeError('Invalid metadata: "podcasturl" must be a string or null.');if(!Ae(e.releasestatus))throw new TypeError('Invalid metadata: "releasestatus" must be a string or null.');if(!Ae(e.releasecountry))throw new TypeError('Invalid metadata: "releasecountry" must be a string or null.');if(!Ae(e.script))throw new TypeError('Invalid metadata: "script" must be a string or null.');if(!Ae(e.language))throw new TypeError('Invalid metadata: "language" must be a string or null.');if(!Ae(e.copyright))throw new TypeError('Invalid metadata: "copyright" must be a string or null.');if(!Ae(e.license))throw new TypeError('Invalid metadata: "license" must be a string or null.');if(!Ae(e.encodedby))throw new TypeError('Invalid metadata: "encodedby" must be a string or null.');if(!Ae(e.encodersettings))throw new TypeError('Invalid metadata: "encodersettings" must be a string or null.');if(!Ae(e.barcode))throw new TypeError('Invalid metadata: "barcode" must be a string or null.');if(!Ae(e.asin))throw new TypeError('Invalid metadata: "asin" must be a string or null.');if(!Ae(e.website))throw new TypeError('Invalid metadata: "website" must be a string or null.');if(!Ae(e.originalalbum))throw new TypeError('Invalid metadata: "originalalbum" must be a string or null.');if(!Ae(e.originalartist))throw new TypeError('Invalid metadata: "originalartist" must be a string or null.');if(!Ae(e.key))throw new TypeError('Invalid metadata: "key" must be a string or null.');if(!Ae(e.movement))throw new TypeError('Invalid metadata: "movement" must be a string or null.');if(!Ae(e.podcastId))throw new TypeError('Invalid metadata: "podcastId" must be a string or null.');if(!ke(e.albumartists,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "albumartists" must be an array of strings.');if(!ke(e.genre,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "genre" must be an array of strings.');if(!ke(e.label,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "label" must be an array of strings.');if(!ke(e.composer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "composer" must be an array of strings.');if(!ke(e.artists,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "artists" must be an array of strings.');if(!ke(e.lyricist,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "lyricist" must be an array of strings.');if(!ke(e.writer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "writer" must be an array of strings.');if(!ke(e.conductor,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "conductor" must be an array of strings.');if(!ke(e.remixer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "remixer" must be an array of strings.');if(!ke(e.arranger,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "arranger" must be an array of strings.');if(!ke(e.engineer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "engineer" must be an array of strings.');if(!ke(e.publisher,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "publisher" must be an array of strings.');if(!ke(e.producer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "producer" must be an array of strings.');if(!ke(e.djmixer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "djmixer" must be an array of strings.');if(!ke(e.mixer,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "mixer" must be an array of strings.');if(!ke(e.technician,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "technician" must be an array of strings.');if(!ke(e.subtitle,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "subtitle" must be an array of strings.');if(!ke(e.description,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "description" must be an array of strings.');if(!ke(e.discsubtitle,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "discsubtitle" must be an array of strings.');if(!ke(e.releasetype,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "releasetype" must be an array of strings.');if(!ke(e.isrc,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "isrc" must be an array of strings.');if(!ke(e.performer_instrument,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "performer_instrument" must be an array of strings.');if(!ke(e.notes,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "notes" must be an array of strings.');if(!ke(e.category,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "category" must be an array of strings.');if(!ke(e.keywords,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "keywords" must be an array of strings.');if(!ke(e.catalognumber,e=>"string"==typeof e))throw new TypeError('Invalid metadata: "catalognumber" must be an array of strings.');if(!ke(e.picture,e=>e&&"object"==typeof e&&(void 0===e.description||"string"==typeof e.description)&&(void 0===e.name||"string"==typeof e.name)&&(void 0===e.type||"string"==typeof e.type)&&"string"==typeof e.format&&(e.data instanceof Uint8Array||"string"==typeof e.data)))throw new TypeError('Invalid metadata: "picture" must be an array of pictures.');if(!ke(e.comment,e=>null!==e&&"object"==typeof e&&Ae(e.descriptor)&&Ae(e.language)&&Ae(e.text)))throw new TypeError('Invalid metadata: "comment" must be an array of valid IComment objects.');if(!ke(e.lyrics,e=>null!==e&&"object"==typeof e&&Ae(e.text)&&Ae(e.descriptor)&&Ae(e.language)&&(!Array.isArray(e)||ke(e.syncText,e=>null!==e&&"object"==typeof e&&Ae(e.text)&&Ne(e.timestamp)))&&(e=>void 0===e||null!==e&&"object"==typeof e&&Ne(e.notSynchronized)&&Ne(e.mpegFrameNumber)&&Ne(e.milliseconds))(e.timeStampFormat)&&(e=>void 0===e||null!==e&&"object"==typeof e&&Ne(e.other)&&Ne(e.lyrics)&&Ne(e.text)&&Ne(e.movement_part)&&Ne(e.events)&&Ne(e.chord)&&Ne(e.trivia_pop))(e.contentType)))throw new TypeError('Invalid metadata: "lyrics" must be an array of valid ILyricsTag objects.');if(!ke(e.rating,e=>null!==e&&"object"==typeof e&&Ae(e.source)&&Ne(e.rating)))throw new TypeError('Invalid metadata: "rating" must be an array of valid IRating objects.');const t=(e,t)=>{if(!xe(t)&&null!==t){if("object"!=typeof t)throw new TypeError(`Invalid metadata: "${e}" must be an object or null.`);if("number"!=typeof t.no&&null!==t.no)throw new TypeError(`Invalid metadata: "${e}.no" must be a number or null.`);if("number"!=typeof t.of&&null!==t.of)throw new TypeError(`Invalid metadata: "${e}.of" must be a number or null.`)}};t("disk",e.disk),t("track",e.track),t("movementIndex",e.movementIndex)},Ce=async(e,t,r=!0)=>{Ee(e,"url"),Te(t,"parseFile");const n=await fetch(e);if(!n.ok)throw new Error(`Failed to fetch audio file: ${n.status} ${n.statusText}`);const o=await n.blob(),a=await t(o);if(!a||"object"!=typeof a.common)throw new TypeError('Invalid metadata: "common" property is missing.');void 0!==typeof a.common["performer:instrument"]&&(a.common.performer_instrument=a.common["performer:instrument"]),Oe(a);const i=a.common;Le(i);const s=i?.picture?.map(e=>({...e,data:r?Fe(e.data,e.format):e.data}))??[];a.common={...a.common,picture:s.map(e=>({...e,data:""}))},r&&Object.keys(a.native).forEach(e=>{a.native[e]=a.native[e].map(e=>{if(e.value&&"object"==typeof e.value&&e.value.data instanceof Uint8Array){const t=i?.picture?.findIndex(t=>t.data===e.value.data&&t.format===e.value.format&&t.description===e.value.description&&t.name===e.value.name)??-1;if(s[t])return{...e,value:{...e.value,data:""}}}return e})});const l=he({title:i?.title,album:i?.album,albumartist:i?.albumartist,albumartists:i?.albumartists,genre:i?.genre,label:i?.label,composer:i?.composer,year:i?.year,artist:i?.artist,artists:i?.artists,disk:i?.disk?{no:i.disk.no,of:i.disk.of}:void 0,track:i?.track?{no:i.track.no,of:i.track.of}:void 0,movementIndex:i?.movementIndex?{no:i.movementIndex.no,of:i.movementIndex.of}:void 0,picture:s,date:i?.date,originaldate:i?.originaldate,originalyear:i?.originalyear,releasedate:i?.releasedate,comment:i?.comment,lyrics:i?.lyrics,albumsort:i?.albumsort,titlesort:i?.titlesort,work:i?.work,artistsort:i?.artistsort,albumartistsort:i?.albumartistsort,composersort:i?.composersort,lyricist:i?.lyricist,writer:i?.writer,conductor:i?.conductor,remixer:i?.remixer,arranger:i?.arranger,engineer:i?.engineer,publisher:i?.publisher,producer:i?.producer,djmixer:i?.djmixer,mixer:i?.mixer,technician:i?.technician,grouping:i?.grouping,subtitle:i?.subtitle,description:i?.description,longDescription:i?.longDescription,discsubtitle:i?.discsubtitle,totaltracks:i?.totaltracks,totaldiscs:i?.totaldiscs,movementTotal:i?.movementTotal,compilation:i?.compilation,rating:i?.rating,bpm:i?.bpm,mood:i?.mood,media:i?.media,catalognumber:i?.catalognumber,tvShow:i?.tvShow,tvShowSort:i?.tvShowSort,tvSeason:i?.tvSeason,tvEpisode:i?.tvEpisode,tvEpisodeId:i?.tvEpisodeId,tvNetwork:i?.tvNetwork,podcast:i?.podcast,podcasturl:i?.podcasturl,releasestatus:i?.releasestatus,releasetype:i?.releasetype,releasecountry:i?.releasecountry,script:i?.script,language:i?.language,copyright:i?.copyright,license:i?.license,encodedby:i?.encodedby,encodersettings:i?.encodersettings,gapless:i?.gapless,barcode:i?.barcode,isrc:i?.isrc,asin:i?.asin,website:i?.website,performer_instrument:i?.performer_instrument,averageLevel:i?.averageLevel,peakLevel:i?.peakLevel,notes:i?.notes,originalalbum:i?.originalalbum,originalartist:i?.originalartist,key:i?.key,category:i?.category,hdVideo:i?.hdVideo,keywords:i?.keywords,movement:i?.movement,podcastId:i?.podcastId,showMovement:i?.showMovement,stik:i?.stik,playCounter:i?.playCounter},{value:([e,t])=>null!=t,obj:e=>m(e)>0,array:([e,t])=>t.length>0});return l._fetchData=a,l},Pe=async(e,t={},r={},n=e=>{if(!(e instanceof Blob))throw new TypeError('Expected "data" to be a Blob.');return new Promise((e,t)=>t(new TypeError("parseFile library not found.")))},o={},a=!0,i="null")=>{if("string"!=typeof e&&!(e instanceof HTMLMediaElement))throw new TypeError("Source must be a string or an HTMLMediaElement.");if(Ie(t,"defaultMetadata"),Ie(r,"metadata"),Te(n,"parseFile"),Ie(o,"callbacks"),o.onProgress&&"function"!=typeof o.onProgress)throw new TypeError("callbacks.onProgress must be a function.");if(o.onError&&"function"!=typeof o.onError)throw new TypeError("callbacks.onError must be a function.");if("string"!=typeof i&&"function"!=typeof i)throw new TypeError("unknownArtist must be a string or a function returning a string.");let s,l="";const u=(t,r)=>{if(Ee(t,"stage"),void 0!==r&&!(r instanceof Event))throw new TypeError('Expected "event" to be an Event or undefined.');o.onProgress&&o.onProgress({event:r,status:"loading",stage:t,url:l||(e instanceof HTMLMediaElement?e.src:"unknown")})},f=(t,r)=>{if(!(t instanceof Error))throw new TypeError('Expected "error" to be an Error.');Ee(r,"stage"),o.onError&&o.onError({error:t instanceof Error?t:new Error(String(t)),url:l||(e instanceof HTMLMediaElement?e.src:"unknown"),stage:r})};try{u("INITIALIZING"),"string"==typeof e?(l=e,s=new Audio(l)):(s=e,l=s.src);try{await new Promise((e,t)=>{const r=e=>u("DOWNLOADING",e),n=()=>{a(),e(void 0)},o=e=>{a(),t(new Error(`HTMLMediaElement failed to load: ${e.message||"Unknown error"}`))},a=()=>{s.removeEventListener("progress",r),s.removeEventListener("loadedmetadata",n),s.removeEventListener("error",o)};s.addEventListener("progress",r),s.addEventListener("loadedmetadata",n),s.addEventListener("error",o),s.readyState>=1&&(a(),e(void 0))}),u("METADATA_LOADED")}catch(e){throw new Se(e instanceof Error?e.message:"UNKNOWN ERROR",l,"METADATA")}const c={id:r.id||await De(l),duration:Math.floor(1e3*s.duration),url:l,weight:r.weight??1};let m={};u("EXTRACTING_ID3");try{m=await Ce(l,n,a)}catch(e){f(e instanceof Error?e:new Error("Unknown Error"),"ID3"),console.warn(`[TinyAudioUtils] ID3 extraction failed for ${l}. Falling back to filename.`)}const p=e=>{Ee(e,"url");try{return(e.split(/[?#]/)[0].split("/").pop()??"").replace(/\.[^/.]+$/,"")||"Unknown Track"}catch{return"Unknown Track"}},y=e=>{const t={...e};return d(t._fetchData)&&(d(m._fetchData)&&(t._fetchData={...m._fetchData}),d(e._fetchData)&&(void 0!==e._fetchData.common&&(t._fetchData.common=e._fetchData.common),void 0!==e._fetchData.native&&(t._fetchData.native=e._fetchData.native),void 0!==e._fetchData.format&&(t._fetchData.format=e._fetchData.format),void 0!==e._fetchData.quality&&(t._fetchData.quality=e._fetchData.quality))),t},w={...c,...y(t),...m,...y(r),title:m.title||r.title||p(l),artist:m.artist||r.artist||("string"==typeof i?i:String(i()))};return o.onProgress&&o.onProgress({status:"success",stage:"COMPLETE",url:l}),w}catch(e){if(e instanceof Se)throw e;const t=new Se(e instanceof Error?e.message:"UNKNOWN ERROR",l,"INITIALIZING");throw f(t,"INITIALIZING"),t}},Re=(e,t=100)=>{if("function"!=typeof e)throw new TypeError("Expected 'getValue' to be a function.");if(!Number.isFinite(t)||t<=0)throw new TypeError("Expected 'checkInterval' to be a positive number.");return new Promise(r=>{const n=setInterval(()=>{e()&&(clearInterval(n),r())},t)})},Be=e=>{if("function"!=typeof e)throw new TypeError('The argument "baseFunction" must be a function.');let t=null;return{callback:async(...r)=>(null!==t||(t=(async()=>{try{const n=await e(...r);return t=null,n}catch(e){throw t=null,e}})()),t),getActivePromise:()=>t,resetActivePromise:()=>{t=null}}},$e=["chrome","firefox","ie","edge","safari","opera","yandex","other"];function _e(){const e=navigator.userAgent;return-1!==e.indexOf("Chrome")?"chrome":-1!==e.indexOf("Firefox")?"firefox":-1!==e.indexOf("MSIE")?"ie":-1!==e.indexOf("Edge")?"edge":-1!==e.indexOf("Safari")?"safari":-1!==e.indexOf("Opera")?"opera":-1!==e.indexOf("YaBrowser")?"yandex":"other"}function Ue(){const e=(Array.prototype.slice.call(window.getComputedStyle(document.documentElement,"")).join("").match(/-(moz|webkit|ms)-/)??["",""])[1];return"moz"===e?"gecko":"webkit"===e?"webkit":"ms"===e?"trident":"other"}function Ye(){const e=!!window.opr&&!!opr.addons||!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0,t="undefined"!=typeof InstallTrigger,r=/constructor/i.test(window.HTMLElement)||"[object SafariRemoteNotification]"===(!window.safari||"undefined"!=typeof safari&&safari.pushNotification).toString(),n=!!document.documentMode,o=!n&&!!window.StyleMedia,a=!!window.chrome;return{isOpera:e,isFirefox:t,isSafari:r,isIE:n,isEdge:o,isChrome:a,isBlink:(a||e)&&!!window.CSS}}function He(e=[]){if(!Array.isArray(e))throw new TypeError('The "disable" argument must be an array.');for(const t of e)if(!$e.includes(t))throw new TypeError(`Invalid browser name provided in disable array: ${t}`);const t={chrome:0,firefox:0,ie:0,edge:0,safari:0,opera:0,yandex:0,other:0};t[_e()]++;const r=Ue();"gecko"===r?e.indexOf("firefox")<0&&t.firefox++:"webkit"===r?(e.indexOf("chrome")<0&&t.chrome++,e.indexOf("safari")<0&&t.safari++,e.indexOf("opera")<0&&t.opera++,e.indexOf("edge")<0&&t.edge++):"trident"===r?e.indexOf("ie")<0&&t.ie++:e.indexOf("other")<0&&t.other++;const n=Ye();return n.isOpera&&e.indexOf("opera")<0&&t.opera++,n.isFirefox&&e.indexOf("firefox")<0&&t.firefox++,n.isSafari&&e.indexOf("safari")<0&&t.safari++,n.isIE&&e.indexOf("ie")<0&&t.ie++,n.isEdge&&e.indexOf("edge")<0&&t.edge++,n.isChrome&&e.indexOf("chrome")<0&&t.chrome++,t}function qe(e=[]){const t=He(e);return Object.keys(t).reduce((e,r)=>t[r]>t[e]?r:e)}window.TinyBasicsEs=t})();
|