{"version":3,"file":"autoanimations.js","sources":["../src/database/jb2a-patreon-database.js","../src/database/jb2a-free-database.js","../src/database/database-merge/patreonDB/047.js","../src/database/database-merge/patreonDB/048.js","../src/database/database-merge/patreonDB/049.js","../src/database/database-merge/patreonDB/050.js","../src/database/database-merge/patreonDB/051.js","../src/database/database-merge/patreonDB/052.js","../src/database/database-merge/patreonDB/053.js","../src/database/database-merge/patreonDB/054.js","../src/database/database-merge/dbMerge.js","../src/constants/constants.js","../src/database/databaseSort.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/index.js","../src/mergeScripts/items/merges/version01.js","../src/mergeScripts/items/merges/version02.js","../src/mergeScripts/items/merges/version03.js","../src/mergeScripts/items/merges/version04.js","../src/mergeScripts/items/merges/version05.js","../src/mergeScripts/items/itemFlagMerge.js","../node_modules/svelte/src/runtime/internal/utils.js","../node_modules/svelte/src/runtime/internal/environment.js","../node_modules/svelte/src/runtime/internal/loop.js","../node_modules/svelte/src/runtime/internal/dom.js","../node_modules/svelte/src/runtime/internal/style_manager.js","../node_modules/svelte/src/runtime/internal/lifecycle.js","../node_modules/svelte/src/runtime/internal/scheduler.js","../node_modules/svelte/src/runtime/internal/transitions.js","../node_modules/svelte/src/runtime/internal/each.js","../node_modules/svelte/src/runtime/internal/spread.js","../node_modules/svelte/src/runtime/internal/ssr.js","../node_modules/svelte/src/runtime/internal/Component.js","../node_modules/svelte/src/shared/version.js","../src/aa-classes/aaAutorecFunctions.js","../src/system-handlers/findAnimation.js","../src/system-handlers/commonSequences.js","../src/AnimationState.js","../src/system-handlers/workflow-data.js","../src/animation-functions/file-builder/build-filepath.js","../src/animation-functions/levels-particles/particleDefaults.js","../src/aa-classes/DataSanitizer.js","../src/database/jb2a-menu-options.js","../src/animation-functions/standard-sequences/meleeAnimation.js","../src/animation-functions/standard-sequences/rangedAnimation.js","../src/animation-functions/standard-sequences/staticAnimation.js","../src/socketset.js","../src/animation-functions/standard-sequences/templateAnimation.js","../src/animation-functions/standard-sequences/aura-attach.js","../src/animation-functions/custom-sequences/dual-attach.js","../src/animation-functions/custom-sequences/proToTemp.js","../src/animation-functions/custom-sequences/teleportation.js","../src/animation-functions/custom-sequences/thunderwave.js","../src/animation-functions/levels-particles/particleSystem.js","../src/router/traffic-cop.js","../src/system-support/external.js","../src/mergeScripts/autorec/merges/version01.js","../src/mergeScripts/autorec/merges/version02.js","../src/mergeScripts/autorec/merges/version03.js","../src/mergeScripts/autorec/merges/version04.js","../src/mergeScripts/autorec/merges/version05.js","../src/aa-classes/autorecSanityCheck.js","../src/mergeScripts/autorec/autoRecMerge.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/object/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/i18n/index.js","../src/formApps/_AutorecMenu/store/default-data/common/sound.js","../src/formApps/_AutorecMenu/store/default-data/common/secondary.js","../src/formApps/_AutorecMenu/store/default-data/common/levels3d.js","../src/formApps/_AutorecMenu/store/default-data/common/macro.js","../src/formApps/_AutorecMenu/store/default-data/common/main.js","../src/formApps/_AutorecMenu/store/default-data/common/video.js","../src/formApps/_AutorecMenu/store/default-data/common/primary.js","../src/formApps/_AutorecMenu/store/default-data/common/source.js","../src/formApps/_AutorecMenu/store/default-data/common/target.js","../src/formApps/_AutorecMenu/store/default-data/common/meleeSwitch.js","../src/formApps/_AutorecMenu/store/default-data/aefx.js","../src/formApps/_AutorecMenu/store/default-data/aura.js","../src/formApps/_AutorecMenu/store/default-data/melee.js","../src/formApps/_AutorecMenu/store/default-data/ontoken.js","../src/formApps/_AutorecMenu/store/default-data/preset.js","../src/formApps/_AutorecMenu/store/default-data/range.js","../src/formApps/_AutorecMenu/store/default-data/templatefx.js","../src/formApps/_AutorecMenu/store/default-data/index.js","../src/formApps/_AutorecMenu/components/category/menuManager/defaultIndex.js","../src/formApps/_AutorecMenu/components/category/menuManager/AAAutorecManager.js","../src/active-effects/handleActiveEffects.js","../src/active-effects/pf2e/handlePF2eRuleElements.js","../src/active-effects/wfrp4e/handleWfrp4eActiveEffects.js","../src/active-effects/ptu/handlePtuRuleElements.js","../src/active-effects/handleActiveEffectHooks.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/browser/index.js","../node_modules/svelte/src/runtime/store/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/dom/theme/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/util/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/reactivity/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/web-storage/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/writable-derived/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/util/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/semver/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/dom/style/index.js","../node_modules/svelte/src/runtime/easing/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/easing/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/a11y/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/math/util/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/math/interpolate/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/math/gl-matrix/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/animate/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/position/index.js","../node_modules/svelte/src/runtime/internal/disclose-version/index.js","../node_modules/svelte/src/runtime/transition/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/path/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/data/cursorCSSVariables.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/data/FVTTAppTheme.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/FVTTConfigure.js","../node_modules/@typhonjs-fvtt/runtime/_dist/util/dom/observer/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/action/dom/observer/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/action/dom/style/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/action/util/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/transition/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/AppShellContextInternal.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/action/dom/inline-svg/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/action/dom/tooltip/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/TJSHeaderButton.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/TJSApplicationHeader.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/ResizeHandleTransform.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/ResizableHandle.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/internal/dom/TJSFocusWrap.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/ApplicationShell.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/TJSGlassPane.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/application/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/internal/dialog/DialogContent.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/component/internal/dialog/DialogShell.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/util/async/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/application/index.js","../src/formApps/_AutorecMenu/store/default-data/options/melee.js","../src/formApps/_AutorecMenu/store/default-data/options/range.js","../src/formApps/_AutorecMenu/store/default-data/options/ontoken.js","../src/formApps/_AutorecMenu/store/default-data/options/templatefx.js","../src/formApps/_AutorecMenu/store/default-data/options/aura.js","../src/formApps/_AutorecMenu/store/default-data/options/aefx.js","../src/formApps/_AutorecMenu/store/default-data/newSection/melee.js","../src/formApps/_AutorecMenu/store/default-data/newSection/range.js","../src/formApps/_AutorecMenu/store/default-data/newSection/ontoken.js","../src/formApps/_AutorecMenu/store/default-data/newSection/templatefx.js","../src/formApps/_AutorecMenu/store/default-data/newSection/aura.js","../src/formApps/_AutorecMenu/store/default-data/newSection/preset.js","../src/formApps/_AutorecMenu/store/default-data/newSection/aefx.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/reducer/index.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/fvtt/document/index.js","../node_modules/@typhonjs-fvtt/standard/_dist/action/animate/composable/index.js","../node_modules/@typhonjs-fvtt/standard/_dist/component/internal/FVTTConfigure.js","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/button/TJSIconButton.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/button/TJSToggleIconButton.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/util/dom/layout/index.js","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/dom/focus/TJSFocusIndicator.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/dom/focus/TJSFocusWrap.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/menu/TJSMenu.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/menu/context/TJSContextMenuImpl.svelte","../src/formApps/Menus/Components/CustomPicker.svelte","../src/formApps/Menus/Components/SectionHeader.svelte","../src/formApps/Menus/Components/VideoSelect.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/action/dom/properties/index.js","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/folder/TJSSvgFolder.svelte","../src/formApps/Menus/Components/options/inputComponents/NumberInput.svelte","../src/formApps/Menus/Components/options/inputComponents/Elevation.svelte","../src/formApps/Menus/Components/options/inputComponents/Opacity.svelte","../src/formApps/Menus/Components/options/optionsInfo/sections/melee.svelte","../src/formApps/Menus/Components/options/optionsInfo/sections/range.svelte","../src/formApps/Menus/Components/options/optionsInfo/sections/ontoken.svelte","../src/formApps/Menus/Components/options/optionsInfo/sections/templatefx.svelte","../src/formApps/Menus/Components/options/optionsInfo/sections/aura.svelte","../src/formApps/Menus/Components/options/optionsInfo/sections/preset.svelte","../src/formApps/Menus/Components/options/optionsInfo/sections/canvas3d.svelte","../src/formApps/Menus/Components/options/optionsInfo/optionsInfo.svelte","../src/constants.js","../src/sessionStorage.js","../src/formApps/Menus/Components/options/optionsInfoDialog.js","../src/formApps/Menus/Components/options/inputComponents/WaitDelay.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/container/TJSScrollContainer.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/application/control/filepicker/index.js","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/form/button/TJSButton.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/label/TJSSlotLabelUtil.js","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/label/TJSSlotLabel.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/form/input/TJSInputCheckbox.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/form/input/TJSInputNumber.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/form/input/TJSInputRange.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/form/input/TJSInputRangeNumber.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/form/input/TJSInputText.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/form/select/TJSSelect.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/standard/form/input/TJSInput.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/fvtt/settings/SettingEntry.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/fvtt/settings/TJSSettingsEdit.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/component/fvtt/settings/TJSSettingsSwap.svelte","../src/formApps/_AutorecMenu/components/category/ButtonOpenCloseAll.svelte","../src/formApps/_AutorecMenu/components/category/createOverflowItems.js","../src/formApps/_AutorecMenu/components/category/CategoryControl.svelte","../node_modules/@typhonjs-fvtt/standard/_dist/application/menu/index.js","../src/formApps/_AutorecMenu/components/animation/OverflowSlot.svelte","../src/formApps/_AutorecMenu/components/animation/advancedSearch/AdvancedAutorec.svelte","../src/formApps/_AutorecMenu/components/animation/createOverflowItems.js","../src/formApps/Menus/Components/SoundOnly.svelte","../src/formApps/Menus/Components/SoundSettings.svelte","../src/formApps/Menus/Components/options/inputComponents/ScaleRadius.svelte","../src/formApps/Menus/Components/options/SourceFXOptions.svelte","../src/formApps/Menus/Components/options/EffectColor.svelte","../src/formApps/Menus/Components/ExtraSource.svelte","../src/formApps/Menus/Components/options/TargetFXOptions.svelte","../src/formApps/Menus/Components/ExtraTarget.svelte","../src/formApps/Menus/Components/videoPreview/previewStore.js","../src/formApps/Menus/Components/SectionButtons.svelte","../src/formApps/Menus/Components/SectionButtons02.svelte","../src/formApps/Menus/Components/AutoCompleteMacro.svelte","../src/formApps/Menus/Components/Macro.svelte","../src/formApps/Menus/Components/MeleeSwitch.svelte","../src/formApps/Menus/Components/SoundSettingsNested.svelte","../src/formApps/Menus/Components/options/SecondaryOptions.svelte","../src/formApps/Menus/Components/Secondary.svelte","../src/formApps/Menus/Components/options/Canvas3dOptions.svelte","../src/formApps/Menus/Components/options/Canvas3DSecondary.svelte","../src/formApps/Menus/Components/options/Canvas3DAnimation.svelte","../src/formApps/Menus/Components/Canvas3D.svelte","../src/formApps/Menus/Components/options/MeleeOptions.svelte","../src/formApps/Menus/Components/options/RangeOptions.svelte","../src/formApps/Menus/Components/options/OnTokenOptions.svelte","../src/formApps/Menus/Components/options/TemplateOptions.svelte","../src/formApps/Menus/Components/options/AuraOptions.svelte","../src/formApps/Menus/Components/options/AuraEffects.svelte","../src/formApps/Menus/BuildMenu/BuildMelee.svelte","../src/formApps/Menus/BuildMenu/BuildRange.svelte","../src/formApps/Menus/BuildMenu/BuildOnToken.svelte","../src/formApps/Menus/BuildMenu/BuildTemplateFX.svelte","../src/formApps/Menus/BuildMenu/BuildAura.svelte","../src/formApps/Menus/Presets/inputComponents/Opacity02.svelte","../src/formApps/Menus/Presets/DualAttach.svelte","../src/formApps/Menus/Presets/inputComponents/Opacity.svelte","../src/formApps/Menus/Presets/inputComponents/Elevation.svelte","../src/formApps/Menus/Presets/ProjectileToTemplate.svelte","../src/formApps/Menus/Presets/inputComponents/ScaleRadius.svelte","../src/formApps/Menus/Presets/Teleportation.svelte","../src/formApps/Menus/Presets/Thunderwave.svelte","../src/formApps/Menus/BuildMenu/BuildPreset.svelte","../src/formApps/Menus/ActiveEffects/options/OnTokenOptions.svelte","../src/formApps/Menus/ActiveEffects/BuildAEOnToken.svelte","../src/formApps/Menus/BuildMenu/BuildActiveEffects.svelte","../src/formApps/Menus/BuildMenu/selectBuildMenu.js","../src/formApps/_AutorecMenu/components/animation/Animation.svelte","../src/formApps/_AutorecMenu/components/category/CategoryList.svelte","../src/formApps/_AutorecMenu/components/category/menuManager/ImportMenus.svelte","../src/formApps/_AutorecMenu/components/category/menuManager/MenuManager.svelte","../src/formApps/_AutorecMenu/components/category/menuManager/MenuManagerApp.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/fvtt/settings/world/index.js","../src/formApps/Menus/Components/copyOnClick.svelte","../src/formApps/Menus/Components/videoPreview/getPreviewFile.js","../src/formApps/Menus/Components/videoPreview/autorecPreviews.svelte","../src/formApps/Menus/Components/videoPreview/videoPreview.js","../src/formApps/_AutorecMenu/store/category/CategoryStore.js","../src/formApps/_AutorecMenu/store/animation/AnimationStore.js","../src/formApps/_AutorecMenu/store/AutoRecStores.js","../src/formApps/_AutorecMenu/components/category/CategorySelect.svelte","../src/formApps/_AutorecMenu/components/SettingsFooter.svelte","../src/formApps/_AutorecMenu/components/AutorecAppShell.svelte","../src/troubleshooting/Diagnostics.svelte","../src/troubleshooting/diagnosticsMenu.js","../src/formApps/_AutorecMenu/AutorecMenuApp.js","../src/formApps/_AutorecMenu/showUI.js","../src/formApps/_AutorecMenu/appShim.js","../src/mergeScripts/autorec/aaAutoRecList.js","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/fvtt/settings/index.js","../node_modules/@typhonjs-fvtt/standard/_dist/store/fvtt/settings/index.js","../src/gameSettings.js","../src/formApps/Menus/ActiveEffects/options/AuraOptions.svelte","../src/formApps/Menus/ActiveEffects/BuildAEAura.svelte","../src/formApps/_ActiveEffects/components/category/CategoryList.svelte","../src/formApps/Menus/Components/options/inputComponents/Slider.svelte","../src/formApps/Menus/Components/copyitem/CopyToAutorec.svelte","../src/formApps/Menus/Components/copyitem/itemToAutorec.js","../src/formApps/Menus/Components/copyitem/copyToFrom.js","../src/formApps/_ActiveEffects/components/category/menus/NoneChosen.svelte","../src/formApps/_ActiveEffects/components/category/CategoryControl.svelte","../node_modules/@typhonjs-fvtt/runtime/_dist/svelte/store/reducer/array-object/index.js","../src/formApps/_ActiveEffects/store/AnimationStore.js","../src/formApps/_ActiveEffects/components/AEAppShell.svelte","../src/formApps/_ActiveEffects/components/animation/itemInfo/ItemInformation.svelte","../src/formApps/_ActiveEffects/components/animation/itemInfo/ItemInfo.svelte","../src/formApps/_ActiveEffects/components/animation/itemInfoDialog.js","../src/formApps/_ActiveEffects/AEMenuApp.js","../src/formApps/_ItemMenu/store/AnimationStore.js","../src/formApps/_ItemMenu/components/category/CategoryList.svelte","../src/formApps/_ItemMenu/components/category/menus/NoneChosen.svelte","../src/formApps/_ItemMenu/components/category/CategoryControl.svelte","../src/formApps/_ItemMenu/components/ItemAppShell.svelte","../src/formApps/_ItemMenu/components/animation/itemInfo/ItemInformation.svelte","../src/formApps/_ItemMenu/components/animation/itemInfo/ItemInfo.svelte","../src/formApps/_ItemMenu/components/animation/itemInfoDialog.js","../src/formApps/_ItemMenu/ItemMenuApp.js","../src/deletedItems.js","../src/system-support/getRequiredData.js","../src/system-support/aa-dnd5e.js","../src/system-support/aa-sw5e.js","../src/system-support/aa-demonlord.js","../src/system-support/aa-pf2e.js","../src/system-support/aa-sf2e.js","../src/system-support/aa-sfrpg.js","../src/system-support/aa-swade.js","../src/system-support/aa-wfrpg.js","../src/system-support/aa-dcc.js","../src/system-support/aa-pf1.js","../src/system-support/aa-a5e.js","../src/system-support/aa-forbidden-lands.js","../src/system-support/aa-starwarsffg.js","../src/system-support/aa-ose.js","../src/system-support/aa-D35E.js","../src/system-support/aa-cyphersystem.js","../src/system-support/aa-alienrpg.js","../src/system-support/aa-cyberpunkred.js","../src/system-support/aa-TheWitcherTRPG.js","../src/system-support/aa-twodsix.js","../src/system-support/aa-od6s.js","../src/system-support/aa-chatmessage.js","../src/system-support/aa-darkheresy.js","../src/system-support/aa-shadowrun5e.js","../src/system-support/aa-ds4.js","../src/system-support/aa-dnd4e.js","../src/system-support/aa-ars.js","../src/system-support/aa-ed4e.js","../src/system-support/aa-ptu.js","../src/system-support/aa-lancer.js","../src/system-support/aa-shadowrun-anarchy.js","../src/system-support/aa-wrath-and-glory.js","../src/system-support/aa-dragonbane.js","../src/system-support/aa-ImpMal.js","../src/system-support/aa-salvage-union.js","../src/system-support/aa-deathinspace.js","../src/system-support/aa-daggerheart.js","../src/system-support/aa-fade.js","../src/system-support/aa-gurps.js","../src/index.js"],"sourcesContent":["const JB2APATREONDB = {};\nexport async function initializeJB2APatreonDB(path) {\n\n    JB2APATREONDB._templates = {\n        ranged: [200, 200, 200]\n    }\n    const BASE = `${path}/Library/`;\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l0 = prefix('Cantrip')\n    const l1 = prefix('1st_Level')\n    const l2 = prefix('2nd_Level')\n    const l3 = prefix('3rd_Level')\n    const l4 = prefix('4th_Level')\n    const l5 = prefix('5th_Level')\n    const l6 = prefix('6th_Level')\n    const l7 = prefix('7th_Level')\n    const lg = prefix('Generic')\n\n    /**\n     * Range Types:\n     * \n     * Weapon\n     * Spell\n     * Generic\n     * \n     */\n\n    JB2APATREONDB.range = {\n        _template: 'ranged',\n        weapon: {\n            arrow: {\n                'regular': {\n                    regular: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Glowing_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Glowing_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Glowing_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Glowing_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Glowing_Green_90ft_4000x400.webm`]\n                    }\n                },\n                'physical': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Physical_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Physical_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Physical_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Physical_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Physical_90ft_4000x400.webm`]\n                    },\n                    white: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_White_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_White_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_White_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_White_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_White_Physical_90ft_4000x400.webm`]\n                    }\n                },\n                'poison': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Poison_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Poison_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Poison_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Poison_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Poison_90ft_4000x400.webm`]\n                    },\n                },\n                'fire': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Fire_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Fire_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Fire_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Fire_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Fire_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Fire_90ft_4000x400.webm`]\n                    },\n                },\n                'cold': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Cold_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Cold_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Cold_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Cold_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Cold_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Cold_90ft_4000x400.webm`]\n                    },\n                },\n                'lightning': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Lightning_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Green_Lightning_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Orange_Lightning_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Pink_Lightning_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Purple_Lightning_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Red_Lightning_90ft_4000x400.webm`]\n                    },\n                }\n            },\n            bolt: {\n                'physical': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Physical_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Physical_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Physical_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Physical_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Physical_90ft_4000x400.webm`]\n                    },\n                    white: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_White_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_White_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_White_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_White_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_White_Physical_90ft_4000x400.webm`]\n                    },\n                },\n                'poison': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Poison_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Poison_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Poison_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Poison_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Poison_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Poison_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Poison_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Poison_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Poison_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Poison_90ft_4000x400.webm`]\n                    },\n                },\n                'fire': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Fire_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Fire_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Fire_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Fire_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Fire_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Fire_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Fire_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Fire_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Fire_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Fire_90ft_4000x400.webm`]\n                    },\n                },\n                'cold': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Cold_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Cold_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Cold_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Cold_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Cold_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Cold_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Cold_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Cold_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Cold_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Cold_90ft_4000x400.webm`]\n                    },\n                },\n                'lightning': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Blue_Lightning_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Green_Lightning_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Lightning_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Pink_Lightning_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Purple_Lightning_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Lightning_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Lightning_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Lightning_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Lightning_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Red_Lightning_90ft_4000x400.webm`]\n                    },\n                }\n            },\n            bomb: {\n                '01': {\n                    black: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    grey: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Grey_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Grey_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Grey_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Grey_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Grey_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Red_90ft_4000x400.webm`]\n                    },\n                }\n            },\n            boulder: {\n                '01': {\n                    white: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_01_Regular_White_05ft_600x500.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_01_Regular_White_15ft_1000x500.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_01_Regular_White_30ft_1600x500.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_01_Regular_White_60ft_2800x500.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_01_Regular_White_90ft_4000x500.webm`]\n                    }\n                }\n            },\n            bone: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bone01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bone01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bone01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bone01_01_Regular_White_90ft_4000x400.webm`]\n                    },\n                },\n            },\n            bullet: {\n                '1': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Red_90ft_4000x400.webm`]\n                    }\n                },\n                '2': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Red_90ft_4000x400.webm`]\n                    }\n                },\n                '3': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Red_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            cannonball: {\n                '01': {\n                    black: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            chakram: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Chakram01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Chakram01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Chakram01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Chakram01_01_Regular_White_90ft_4000x400.webm`],\n                    }\n                },\n                '02': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Chakram01_02_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Chakram01_02_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Chakram01_02_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Chakram01_02_Regular_White_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            dagger: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    darkpurple: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Dark_Purple_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Dark_Purple_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Dark_Purple_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Dark_Purple_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Red_90ft_4000x400.webm`]\n                    },\n                },\n                '02': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_White_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Blue_90ft_4000x400.webm`],\n                    },\n                    darkpurple: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Dark_Purple_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Dark_Purple_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Dark_Purple_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Dark_Purple_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_90ft_4000x400.webm`]\n                    },\n                },\n                'kunai': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Kunai01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Kunai01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Kunai01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Kunai01_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            dart: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dart01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dart01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dart01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dart01_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            flask: {\n                '01': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_90ft_4000x400.webm`]\n                    }\n                },\n                '02': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Blue_90ft_4000x400.webm`]\n                    }\n                },\n                '03': {\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Green_90ft_4000x400.webm`]\n                    }\n                },\n\n            },\n            greataxe: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_White_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_White_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_White_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_White_90ft_4000x600.webm`]\n                    },\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Blue_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Blue_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Blue_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Blue_90ft_4000x600.webm`]\n                    },\n                    yellow: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Yellow_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Yellow_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Yellow_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Yellow_90ft_4000x600.webm`]\n                    },\n                    red: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Red_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Red_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Red_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/GreatAxe01_01_Regular_Red_90ft_4000x600.webm`]\n                    },\n                }\n            },\n            greatsword: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/GreatSword01_01_Regular_White_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/GreatSword01_01_Regular_White_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/GreatSword01_01_Regular_White_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/GreatSword01_01_Regular_White_90ft_4000x600.webm`]\n                    }\n                }\n            },\n            grenade: {\n                '01': {\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade01_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade01_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade01_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade01_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade01_01_Regular_Green_90ft_4000x400.webm`]\n                    }\n                },\n                '02': {\n                    blackyellow: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade02_01_Regular_BlackYellow_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade02_01_Regular_BlackYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade02_01_Regular_BlackYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade02_01_Regular_BlackYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade02_01_Regular_BlackYellow_90ft_4000x400.webm`]\n                    }\n                },\n                '03': {\n                    blackblue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_BlackBlue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_BlackBlue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_BlackBlue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_BlackBlue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_BlackBlue_90ft_4000x400.webm`]\n                    }\n                },\n                stick: {\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowStickGrenade01_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowStickGrenade01_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowStickGrenade01_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowStickGrenade01_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowStickGrenade01_01_Regular_Green_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            grenadelaunch: {\n                '01': {\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade01_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade01_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade01_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade01_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade01_01_Regular_Green_90ft_4000x400.webm`]\n                    }\n                },\n                '02': {\n                    blackyellow: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade02_01_Regular_BlackYellow_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade02_01_Regular_BlackYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade02_01_Regular_BlackYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade02_01_Regular_BlackYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade02_01_Regular_BlackYellow_90ft_4000x400.webm`]\n                    }\n                },\n                '03': {\n                    blackblue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_BlackBlue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_BlackBlue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_BlackBlue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_BlackBlue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_BlackBlue_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            hammer: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Hammer01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Hammer01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Hammer01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Hammer01_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            handaxe: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/HandAxe01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/HandAxe01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/HandAxe01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/HandAxe01_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                },\n                '02': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/HandAxe02_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/HandAxe02_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/HandAxe02_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/HandAxe02_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            javelin: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Javelin01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Javelin01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Javelin01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Javelin01_01_Regular_White_90ft_4000x400.webm`],\n                    }\n                }\n            },\n            lasershot: {\n                '01': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Pink_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Purple_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Purple_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Purple_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Purple_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Purple_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            lasersword: {\n                '01': {\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue_90ft_4000x600.webm`]\n                    },\n                    blue03: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue03_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue03_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue03_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue03_90ft_4000x600.webm`]\n                    },\n                    darkred: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Dark_Red_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Dark_Red_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Dark_Red_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Dark_Red_90ft_4000x600.webm`]\n                    },\n                    darkwhite: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Dark_White_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Dark_White_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Dark_White_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Dark_White_90ft_4000x600.webm`]\n                    },\n                    darkblue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue02_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue02_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue02_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue02_90ft_4000x600.webm`]\n                    },\n                    green: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Green_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Green_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Green_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Green_90ft_4000x600.webm`]\n                    },\n                    palegreen: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Green02_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Green02_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Green02_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Green02_90ft_4000x600.webm`]\n                    },\n                    orange: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Orange_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Orange_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Orange_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Orange_90ft_4000x600.webm`]\n                    },\n                    purple: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Purple_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Purple_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Purple_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Purple_90ft_4000x600.webm`]\n                    },\n                    red: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Red_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Red_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Red_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Red_90ft_4000x600.webm`]\n                    },\n                    yellow: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Yellow_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Yellow_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Yellow_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Yellow_90ft_4000x600.webm`]\n                    },\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_White_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_White_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_White_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_White_90ft_4000x600.webm`]\n                    },\n                },\n                '02': {\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue_90ft_4000x600.webm`]\n                    },\n                    blue02: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue03_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue03_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue03_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue03_90ft_4000x600.webm`]\n                    },\n                    darkred: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Dark_Red_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Dark_Red_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Dark_Red_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Dark_Red_90ft_4000x600.webm`]\n                    },\n                    darkwhite: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Dark_White_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Dark_White_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Dark_White_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Dark_White_90ft_4000x600.webm`]\n                    },\n                    darkblue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue02_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue02_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue02_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Blue02_90ft_4000x600.webm`]\n                    },\n                    green: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Green_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Green_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Green_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Green_90ft_4000x600.webm`]\n                    },\n                    palegreen: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Green02_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Green02_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Green02_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Green02_90ft_4000x600.webm`]\n                    },\n                    orange: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Orange_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Orange_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Orange_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Orange_90ft_4000x600.webm`]\n                    },\n                    purple: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Purple_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Purple_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Purple_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Purple_90ft_4000x600.webm`]\n                    },\n                    red: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Red_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Red_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Red_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Red_90ft_4000x600.webm`]\n                    },\n                    yellow: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Yellow_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Yellow_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Yellow_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Yellow_90ft_4000x600.webm`]\n                    },\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_White_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_White_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_White_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_White_90ft_4000x600.webm`]\n                    }\n                }\n            },\n            mace: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Mace01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Mace01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Mace01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Mace01_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            pumpkin: {\n                '01': {\n                    regular: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/PumpkinToss01_01_Regular_Orange_05ft_600x500.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/PumpkinToss01_01_Regular_Orange_15ft_1000x500.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/PumpkinToss01_01_Regular_Orange_30ft_1600x500.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/PumpkinToss01_01_Regular_Orange_60ft_2800x500.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/PumpkinToss01_01_Regular_Orange_90ft_4000x500.webm`]\n                    },\n                },\n            },\n            siegeboulder: {\n                '01': {\n                    white: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/SiegeBoulder01_01_Regular_White_05ft_600x500.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/SiegeBoulder01_01_Regular_White_15ft_1000x500.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/SiegeBoulder01_01_Regular_White_30ft_1600x500.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/SiegeBoulder01_01_Regular_White_60ft_2800x500.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/SiegeBoulder01_01_Regular_White_90ft_4000x500.webm`]\n                    }\n                }\n            },\n            sling: {\n                '01': {\n                    white: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/SlingShot_01_Regular_White_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/SlingShot_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/SlingShot_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/SlingShot_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/SlingShot_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            snipe: {\n                '01': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Red_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            snowball: {\n                '01': {\n                    white: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_05ft_600x500.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_15ft_1000x500.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_30ft_1600x500.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_60ft_2800x500.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_90ft_4000x500.webm`],\n                    },\n                },\n            },\n            spear: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Spear01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Spear01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Spear01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Spear01_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            sword: {\n                '01': {\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Sword01_02_Regular_Blue_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Sword01_02_Regular_Blue_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Sword01_02_Regular_Blue_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Sword01_02_Regular_Blue_90ft_4000x600.webm`]\n                    },\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Sword01_01_Regular_White_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Sword01_01_Regular_White_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Sword01_01_Regular_White_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Sword01_01_Regular_White_90ft_4000x600.webm`]\n                    }\n                }\n            },\n\n        },\n        spell: {\n            chainlightning: {\n                primary: {\n                    blue: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_90ft_Primary_4000x400.webm`]\n                    },\n                    darkgreen: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_90ft_Primary_4000x400.webm`]\n                    },\n                    darkpurple: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_90ft_Primary_4000x400.webm`]\n                    },\n                    darkred: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_90ft_Primary_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_90ft_Primary_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_90ft_Primary_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_90ft_Primary_4000x400.webm`]\n                    },\n                    purpleblue: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_90ft_Primary_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_90ft_Primary_4000x400.webm`]\n                    },\n                    yellow: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_90ft_Primary_4000x400.webm`]\n                    },\n                },\n                secondary: {\n                    blue: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_90ft_Secondary_4000x400.webm`]\n                    },\n                    darkgreen: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green02_90ft_Secondary_4000x400.webm`]\n                    },\n                    darkpurple: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Purple_90ft_Secondary_4000x400.webm`]\n                    },\n                    darkred: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Dark_Red_90ft_Secondary_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Green_90ft_Secondary_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Orange_90ft_Secondary_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Purple_90ft_Secondary_4000x400.webm`]\n                    },\n                    purpleblue: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue02_90ft_Secondary_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Red_90ft_Secondary_4000x400.webm`]\n                    },\n                    yellow: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Yellow_90ft_Secondary_4000x400.webm`]\n                    },\n                }\n            },\n            disintegrate: {\n                '01': {\n                    green: {\n                        '05ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_05ft_600x400.webm`],\n                        '15ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_15ft_1000x400.webm`],\n                        '30ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_30ft_1600x400.webm`],\n                        '60ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_60ft_2800x400.webm`],\n                        '90ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_90ft_4000x400.webm`]\n                    },\n                    darkred: {\n                        '05ft': [l6`Disintegrate/Disintegrate_01_Dark_Red_05ft_600x400.webm`],\n                        '15ft': [l6`Disintegrate/Disintegrate_01_Dark_Red_15ft_1000x400.webm`],\n                        '30ft': [l6`Disintegrate/Disintegrate_01_Dark_Red_30ft_1600x400.webm`],\n                        '60ft': [l6`Disintegrate/Disintegrate_01_Dark_Red_60ft_2800x400.webm`],\n                        '90ft': [l6`Disintegrate/Disintegrate_01_Dark_Red_90ft_4000x400.webm`]\n                    },\n                    orangepink: {\n                        '05ft': [l6`Disintegrate/Disintegrate_01_Regular_OrangePink_05ft_600x400.webm`],\n                        '15ft': [l6`Disintegrate/Disintegrate_01_Regular_OrangePink_15ft_1000x400.webm`],\n                        '30ft': [l6`Disintegrate/Disintegrate_01_Regular_OrangePink_30ft_1600x400.webm`],\n                        '60ft': [l6`Disintegrate/Disintegrate_01_Regular_OrangePink_60ft_2800x400.webm`],\n                        '90ft': [l6`Disintegrate/Disintegrate_01_Regular_OrangePink_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [l6`Disintegrate/Disintegrate_01_Regular_Pink_05ft_600x400.webm`],\n                        '15ft': [l6`Disintegrate/Disintegrate_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [l6`Disintegrate/Disintegrate_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [l6`Disintegrate/Disintegrate_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [l6`Disintegrate/Disintegrate_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                    purpleblue: {\n                        '05ft': [l6`Disintegrate/Disintegrate_01_Regular_PurpleBlue_05ft_600x400.webm`],\n                        '15ft': [l6`Disintegrate/Disintegrate_01_Regular_PurpleBlue_15ft_1000x400.webm`],\n                        '30ft': [l6`Disintegrate/Disintegrate_01_Regular_PurpleBlue_30ft_1600x400.webm`],\n                        '60ft': [l6`Disintegrate/Disintegrate_01_Regular_PurpleBlue_60ft_2800x400.webm`],\n                        '90ft': [l6`Disintegrate/Disintegrate_01_Regular_PurpleBlue_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            eldritchblast: {\n                '01': {\n                    purple: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_90ft_4000x400.webm`]\n                    },\n                    darkpurple: {\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Purple_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Purple_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Purple_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    yellow: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Yellow_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Yellow_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Yellow_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Yellow_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Yellow_90ft_4000x400.webm`]\n                    },\n                    darkred: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Red_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Red_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Red_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Red_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Red_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Pink_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                    lightgreen: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightGreen_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightGreen_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightGreen_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightGreen_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightGreen_90ft_4000x400.webm`]\n                    },\n                    darkgreen: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Green_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Green_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Green_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Green_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Dark_Green_90ft_4000x400.webm`]\n                    },\n                    rainbow: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Rainbow_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Rainbow_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Rainbow_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Rainbow_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Rainbow_90ft_4000x400.webm`]\n                    },\n                    lightblue: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightBlue_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightBlue_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightBlue_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightBlue_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_LightBlue_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            fireballbeam: {\n                '01': {\n                    blue: {\n                        '05ft': [l3`Fireball/FireballBeam_01_Blue_05ft_600x400.webm`],\n                        '15ft': [l3`Fireball/FireballBeam_01_Blue_15ft_1000x400.webm`],\n                        '30ft': [l3`Fireball/FireballBeam_01_Blue_30ft_1600x400.webm`],\n                        '60ft': [l3`Fireball/FireballBeam_01_Blue_60ft_2800x400.webm`],\n                        '90ft': [l3`Fireball/FireballBeam_01_Blue_90ft_4000x400.webm`]\n                    },\n                    darkpurple: {\n                        '05ft': [l3`Fireball/FireballBeam_01_Dark_Purple_05ft_600x400.webm`],\n                        '15ft': [l3`Fireball/FireballBeam_01_Dark_Purple_15ft_1000x400.webm`],\n                        '30ft': [l3`Fireball/FireballBeam_01_Dark_Purple_30ft_1600x400.webm`],\n                        '60ft': [l3`Fireball/FireballBeam_01_Dark_Purple_60ft_2800x400.webm`],\n                        '90ft': [l3`Fireball/FireballBeam_01_Dark_Purple_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [l3`Fireball/FireballBeam_01_Orange_05ft_600x400.webm`],\n                        '15ft': [l3`Fireball/FireballBeam_01_Orange_15ft_1000x400.webm`],\n                        '30ft': [l3`Fireball/FireballBeam_01_Orange_30ft_1600x400.webm`],\n                        '60ft': [l3`Fireball/FireballBeam_01_Orange_60ft_2800x400.webm`],\n                        '90ft': [l3`Fireball/FireballBeam_01_Orange_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [l3`Fireball/FireballBeam_01_Purple_05ft_600x400.webm`],\n                        '15ft': [l3`Fireball/FireballBeam_01_Purple_15ft_1000x400.webm`],\n                        '30ft': [l3`Fireball/FireballBeam_01_Purple_30ft_1600x400.webm`],\n                        '60ft': [l3`Fireball/FireballBeam_01_Purple_60ft_2800x400.webm`],\n                        '90ft': [l3`Fireball/FireballBeam_01_Purple_90ft_4000x400.webm`]\n                    },\n                },\n            },\n            firebolt: {\n                '01': {\n                    orange: {\n                        '05ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [l0`Fire_Bolt/FireBolt_01_Dark_Red_05ft_600x400.webm`],\n                        '15ft': [l0`Fire_Bolt/FireBolt_01_Dark_Red_15ft_1000x400.webm`],\n                        '30ft': [l0`Fire_Bolt/FireBolt_01_Dark_Red_30ft_1600x400.webm`],\n                        '60ft': [l0`Fire_Bolt/FireBolt_01_Dark_Red_60ft_2800x400.webm`],\n                        '90ft': [l0`Fire_Bolt/FireBolt_01_Dark_Red_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [l0`Fire_Bolt/FireBolt_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [l0`Fire_Bolt/FireBolt_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [l0`Fire_Bolt/FireBolt_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [l0`Fire_Bolt/FireBolt_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [l0`Fire_Bolt/FireBolt_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [l0`Fire_Bolt/FireBolt_01_Regular_Purple_05ft_600x400.webm`],\n                        '15ft': [l0`Fire_Bolt/FireBolt_01_Regular_Purple_15ft_1000x400.webm`],\n                        '30ft': [l0`Fire_Bolt/FireBolt_01_Regular_Purple_30ft_1600x400.webm`],\n                        '60ft': [l0`Fire_Bolt/FireBolt_01_Regular_Purple_60ft_2800x400.webm`],\n                        '90ft': [l0`Fire_Bolt/FireBolt_01_Regular_Purple_90ft_4000x400.webm`]\n                    },\n                    darkgreen: {\n                        '05ft': [l0`Fire_Bolt/FireBolt_01_Dark_Green02_05ft_600x400.webm`],\n                        '15ft': [l0`Fire_Bolt/FireBolt_01_Dark_Green02_15ft_1000x400.webm`],\n                        '30ft': [l0`Fire_Bolt/FireBolt_01_Dark_Green02_30ft_1600x400.webm`],\n                        '60ft': [l0`Fire_Bolt/FireBolt_01_Dark_Green02_60ft_2800x400.webm`],\n                        '90ft': [l0`Fire_Bolt/FireBolt_01_Dark_Green02_90ft_4000x400.webm`]\n                    },\n                    palegreen: {\n                        '05ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green02_05ft_600x400.webm`],\n                        '15ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green02_15ft_1000x400.webm`],\n                        '30ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green02_30ft_1600x400.webm`],\n                        '60ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green02_60ft_2800x400.webm`],\n                        '90ft': [l0`Fire_Bolt/FireBolt_01_Regular_Green02_90ft_4000x400.webm`]\n                    },\n                }\n            },\n            guidingbolt: {\n                '01': {\n                    yellowblue: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_90ft_4000x400.webm`]\n                    },\n                    greenorange: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_GreenOrange_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_GreenOrange_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_GreenOrange_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_GreenOrange_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_GreenOrange_90ft_4000x400.webm`]\n                    },\n                    purplepink: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_PurplePink_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_PurplePink_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_PurplePink_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_PurplePink_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_PurplePink_90ft_4000x400.webm`]\n                    },\n                    whiteblue: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_01_Dark_BlueWhite_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_01_Dark_BlueWhite_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_01_Dark_BlueWhite_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_01_Dark_BlueWhite_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_01_Dark_BlueWhite_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Pink_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Red_90ft_4000x400.webm`]\n                    },\n                },\n                '02': {\n                    yellowblue: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_BlueYellow_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_BlueYellow_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_BlueYellow_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_BlueYellow_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_BlueYellow_90ft_4000x400.webm`]\n                    },\n                    greenorange: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_GreenOrange_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_GreenOrange_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_GreenOrange_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_GreenOrange_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_GreenOrange_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Pink_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Red_90ft_4000x400.webm`]\n                    },\n                    purplepink: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_PurplePink_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_PurplePink_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_PurplePink_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_PurplePink_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_PurplePink_90ft_4000x400.webm`]\n                    },\n                    whiteblue: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_02_Dark_BlueWhite_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_02_Dark_BlueWhite_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_02_Dark_BlueWhite_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_02_Dark_BlueWhite_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_02_Dark_BlueWhite_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            magicmissile: {\n                '01': {\n                    blue: {\n                        '05ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_05ft_01_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_05ft_02_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_05ft_03_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_05ft_04_600x400.webm`\n                        ],\n                        '15ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_15ft_01_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_15ft_02_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_15ft_03_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_15ft_04_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_30ft_01_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_30ft_02_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_30ft_03_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_30ft_04_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_60ft_01_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_60ft_02_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_60ft_03_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_60ft_04_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_90ft_01_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_90ft_02_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_90ft_03_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Blue_90ft_04_4000x400.webm`\n                        ]\n                    },\n                    darkred: {\n                        '05ft': [\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_05ft_01_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_05ft_02_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_05ft_03_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_05ft_04_600x400.webm`\n                        ],\n                        '15ft': [\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_15ft_01_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_15ft_02_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_15ft_03_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_15ft_04_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_30ft_01_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_30ft_02_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_30ft_03_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_30ft_04_1600x400.webm`\n                        ],\n                        '60ft': [\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_60ft_01_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_60ft_02_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_60ft_03_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_60ft_04_2800x400.webm`\n                        ],\n                        '90ft': [\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_90ft_01_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_90ft_02_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_90ft_03_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Dark_Red_90ft_04_4000x400.webm`\n                        ]\n                    },\n                    green: {\n                        '05ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_05ft_01_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_05ft_02_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_05ft_03_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_05ft_04_600x400.webm`\n                        ],\n                        '15ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_15ft_01_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_15ft_02_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_15ft_03_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_15ft_04_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_30ft_01_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_30ft_02_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_30ft_03_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_30ft_04_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_60ft_01_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_60ft_02_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_60ft_03_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_60ft_04_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_90ft_01_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_90ft_02_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_90ft_03_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Green_90ft_04_4000x400.webm`\n                        ]\n                    },\n                    purple: {\n                        '05ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_05ft_01_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_05ft_02_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_05ft_03_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_05ft_04_600x400.webm`\n                        ],\n                        '15ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_15ft_01_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_15ft_02_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_15ft_03_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_15ft_04_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_30ft_01_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_30ft_02_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_30ft_03_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_30ft_04_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_60ft_01_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_60ft_02_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_60ft_03_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_60ft_04_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_90ft_01_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_90ft_02_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_90ft_03_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_90ft_04_4000x400.webm`\n                        ]\n                    },\n                    yellow: {\n                        '05ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_05ft_01_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_05ft_02_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_05ft_03_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_05ft_04_600x400.webm`\n                        ],\n                        '15ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_15ft_01_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_15ft_02_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_15ft_03_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_15ft_04_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_30ft_01_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_30ft_02_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_30ft_03_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_30ft_04_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_60ft_01_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_60ft_02_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_60ft_03_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_60ft_04_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_90ft_01_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_90ft_02_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_90ft_03_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Yellow_90ft_04_4000x400.webm`\n                        ]\n                    },\n                    orange: {\n                        '05ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_05ft_01_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_05ft_02_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_05ft_03_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_05ft_04_600x400.webm`\n                        ],\n                        '15ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_15ft_01_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_15ft_02_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_15ft_03_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_15ft_04_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_30ft_01_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_30ft_02_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_30ft_03_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_30ft_04_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_60ft_01_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_60ft_02_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_60ft_03_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_60ft_04_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_90ft_01_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_90ft_02_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_90ft_03_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Orange_90ft_04_4000x400.webm`\n                        ]\n                    }\n                }\n            },\n            rayoffrost: {\n                '01': {\n                    blue: {\n                        '05ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    purpleteal: {\n                        '05ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_PurpleTeal_05ft_600x400.webm`],\n                        '15ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_PurpleTeal_15ft_1000x400.webm`],\n                        '30ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_PurpleTeal_30ft_1600x400.webm`],\n                        '60ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_PurpleTeal_60ft_2800x400.webm`],\n                        '90ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_PurpleTeal_90ft_4000x400.webm`]\n                    },\n                    yellowblue: {\n                        '05ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_BlueYellow_05ft_600x400.webm`],\n                        '15ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_BlueYellow_15ft_1000x400.webm`],\n                        '30ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_BlueYellow_30ft_1600x400.webm`],\n                        '60ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_BlueYellow_60ft_2800x400.webm`],\n                        '90ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_BlueYellow_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            scorchingray: {\n                '01': {\n                    orange: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Pink_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Purple_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Purple_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Purple_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Purple_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Purple_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Red_90ft_4000x400.webm`]\n                    },\n                    yellow: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Yellow_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Yellow_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Yellow_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Yellow_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Yellow_90ft_4000x400.webm`]\n                    },\n                    rainbow01: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow01_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow01_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow01_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow01_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow01_90ft_4000x400.webm`]\n                    },\n                    rainbow02: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow02_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow02_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow02_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow02_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Rainbow02_90ft_4000x400.webm`]\n                    },\n                },\n                '02': {\n                    blue: {\n                        '05ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_05ft_01_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_05ft_02_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_05ft_03_600x400.webm`\n                        ],\n                        '15ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_15ft_01_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_15ft_02_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_15ft_03_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_30ft_01_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_30ft_02_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_30ft_03_1600x400.webm`\n                        ],\n                        '60ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_60ft_01_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_60ft_02_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_60ft_03_2800x400.webm`\n                        ],\n                        '90ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_90ft_01_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_90ft_02_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Blue_90ft_03_4000x400.webm`\n                        ]\n                    },\n                    green: {\n                        '05ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_05ft_01_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_05ft_02_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_05ft_03_600x400.webm`\n                        ],\n                        '15ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_15ft_01_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_15ft_02_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_15ft_03_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_30ft_01_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_30ft_02_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_30ft_03_1600x400.webm`\n                        ],\n                        '60ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_60ft_01_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_60ft_02_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_60ft_03_2800x400.webm`\n                        ],\n                        '90ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_90ft_01_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_90ft_02_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Green_90ft_03_4000x400.webm`\n                        ]\n                    },\n                    orange: {\n                        '05ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_05ft_01_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_05ft_02_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_05ft_03_600x400.webm`\n                        ],\n                        '15ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_15ft_01_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_15ft_02_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_15ft_03_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_30ft_01_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_30ft_02_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_30ft_03_1600x400.webm`\n                        ],\n                        '60ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_60ft_01_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_60ft_02_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_60ft_03_2800x400.webm`\n                        ],\n                        '90ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_90ft_01_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_90ft_02_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Orange_90ft_03_4000x400.webm`\n                        ]\n                    },\n                    pink: {\n                        '05ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_05ft_01_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_05ft_02_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_05ft_03_600x400.webm`\n                        ],\n                        '15ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_15ft_01_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_15ft_02_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_15ft_03_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_30ft_01_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_30ft_02_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_30ft_03_1600x400.webm`\n                        ],\n                        '60ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_60ft_01_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_60ft_02_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_60ft_03_2800x400.webm`\n                        ],\n                        '90ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_90ft_01_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_90ft_02_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Pink_90ft_03_4000x400.webm`\n                        ]\n                    },\n                    purple: {\n                        '05ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_05ft_01_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_05ft_02_600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_05ft_03_600x400.webm`\n                        ],\n                        '15ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_15ft_01_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_15ft_02_1000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_15ft_03_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_30ft_01_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_30ft_02_1600x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_30ft_03_1600x400.webm`\n                        ],\n                        '60ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_60ft_01_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_60ft_02_2800x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_60ft_03_2800x400.webm`\n                        ],\n                        '90ft': [\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_90ft_01_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_90ft_02_4000x400.webm`,\n                            l2`Scorching_Ray/ScorchingRay_02_Regular_Purple_90ft_03_4000x400.webm`\n                        ]\n                    },\n                },\n                loop: {\n                    orange: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Pink_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRayLoop_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n                },\n            },\n            witchbolt: {\n                '01': {\n                    blue: {\n                        '05ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_90ft_4000x400.webm`],\n                    },\n                    green: {\n                        '05ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Green_90ft_4000x400.webm`],\n                    },\n                    red: {\n                        '05ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Red_90ft_4000x400.webm`],\n                    },\n                    yellow: {\n                        '05ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Yellow_05ft_600x400.webm`],\n                        '15ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Yellow_15ft_1000x400.webm`],\n                        '30ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Yellow_30ft_1600x400.webm`],\n                        '60ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Yellow_60ft_2800x400.webm`],\n                        '90ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Yellow_90ft_4000x400.webm`],\n                    },\n                    darkred: {\n                        '05ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Red_05ft_600x400.webm`],\n                        '15ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Red_15ft_1000x400.webm`],\n                        '30ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Red_30ft_1600x400.webm`],\n                        '60ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Red_60ft_2800x400.webm`],\n                        '90ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Red_90ft_4000x400.webm`],\n                    },\n                    darkgreen: {\n                        '05ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Green_05ft_600x400.webm`],\n                        '15ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Green_15ft_1000x400.webm`],\n                        '30ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Green_30ft_1600x400.webm`],\n                        '60ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Green_60ft_2800x400.webm`],\n                        '90ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Green_90ft_4000x400.webm`],\n                    },\n                    darkpurple: {\n                        '05ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Purple_05ft_600x400.webm`],\n                        '15ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Purple_15ft_1000x400.webm`],\n                        '30ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Purple_30ft_1600x400.webm`],\n                        '60ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Purple_60ft_2800x400.webm`],\n                        '90ft': [l1`Witch_Bolt/WitchBolt_01_Dark_Purple_90ft_4000x400.webm`],\n                    }\n                }\n            },\n        },\n        generic: {\n            conduit: {\n                square: {\n                    purpleblue: {\n                        '05ft': [lg`Energy/EnergyConduitSquare_01_Regular_BluePurple_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyConduitSquare_01_Regular_BluePurple_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyConduitSquare_01_Regular_BluePurple_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyConduitSquare_01_Regular_BluePurple_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyConduitSquare_01_Regular_BluePurple_90ft_4000x400.webm`],\n                    },\n                    greenyellow: {\n                        '05ft': [lg`Energy/EnergyConduitSquare_01_Regular_GreenYellow_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyConduitSquare_01_Regular_GreenYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyConduitSquare_01_Regular_GreenYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyConduitSquare_01_Regular_GreenYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyConduitSquare_01_Regular_GreenYellow_90ft_4000x400.webm`],\n                    },\n                },\n                circle: {\n                    purpleblue: {\n                        '05ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_90ft_4000x400.webm`],\n                    },\n                    greenyellow: {\n                        '05ft': [lg`Energy/EnergyConduitCircle_01_Regular_GreenYellow_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyConduitCircle_01_Regular_GreenYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyConduitCircle_01_Regular_GreenYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyConduitCircle_01_Regular_GreenYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyConduitCircle_01_Regular_GreenYellow_90ft_4000x400.webm`],\n                    },\n                },\n            },\n            energybeam: {\n                '01': {\n                    blue: {\n                        '15ft': [lg`Energy/EnergyBeam_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_01_Regular_Blue_90ft_4000x400.webm`],\n                    },\n                    bluegreen: {\n                        '15ft': [lg`Energy/EnergyBeam_01_Regular_BlueGreen_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_01_Regular_BlueGreen_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_01_Regular_BlueGreen_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_01_Regular_BlueGreen_90ft_4000x400.webm`],\n                    },\n                    darkgreen: {\n                        '15ft': [lg`Energy/EnergyBeam_01_Dark_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_01_Dark_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_01_Dark_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_01_Dark_Green_90ft_4000x400.webm`],\n                    },\n                    darkred: {\n                        '15ft': [lg`Energy/EnergyBeam_01_Dark_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_01_Dark_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_01_Dark_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_01_Dark_Red_90ft_4000x400.webm`],\n                    },\n                    red: {\n                        '15ft': [lg`Energy/EnergyBeam_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_01_Regular_Red_90ft_4000x400.webm`],\n                    },\n                },\n                '02': {\n                    darkgreenpurple: {\n                        '05ft': [lg`Energy/EnergyBeam_02_Dark_GreenPurple_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_02_Dark_GreenPurple_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_02_Dark_GreenPurple_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_02_Dark_GreenPurple_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_02_Dark_GreenPurple_90ft_4000x400.webm`],\n                    },\n                    darkpurplered: {\n                        '05ft': [lg`Energy/EnergyBeam_02_Dark_PurpleRed_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_02_Dark_PurpleRed_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_02_Dark_PurpleRed_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_02_Dark_PurpleRed_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_02_Dark_PurpleRed_90ft_4000x400.webm`],\n                    },\n                    bluepink: {\n                        '05ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_90ft_4000x400.webm`],\n                    },\n                    greenyellow: {\n                        '05ft': [lg`Energy/EnergyBeam_02_Regular_GreenYellow_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_02_Regular_GreenYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_02_Regular_GreenYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_02_Regular_GreenYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_02_Regular_GreenYellow_90ft_4000x400.webm`],\n                    },\n                    red: {\n                        '05ft': [lg`Energy/EnergyBeam_02_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_02_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_02_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_02_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_02_Regular_Red_90ft_4000x400.webm`],\n                    },\n                },\n                '03': {\n                    darkgreenpurple: {\n                        '05ft': [lg`Energy/EnergyBeam_03_Dark_GreenPurple_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_03_Dark_GreenPurple_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_03_Dark_GreenPurple_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_03_Dark_GreenPurple_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_03_Dark_GreenPurple_90ft_4000x400.webm`],\n                    },\n                    darkpurplered: {\n                        '05ft': [lg`Energy/EnergyBeam_03_Dark_PurpleRed_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_03_Dark_PurpleRed_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_03_Dark_PurpleRed_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_03_Dark_PurpleRed_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_03_Dark_PurpleRed_90ft_4000x400.webm`],\n                    },\n                    bluepink: {\n                        '05ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_90ft_4000x400.webm`],\n                    },\n                    greenyellow: {\n                        '05ft': [lg`Energy/EnergyBeam_03_Regular_GreenYellow_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_03_Regular_GreenYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_03_Regular_GreenYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_03_Regular_GreenYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_03_Regular_GreenYellow_90ft_4000x400.webm`],\n                    },\n                    red: {\n                        '05ft': [lg`Energy/EnergyBeam_03_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyBeam_03_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_03_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_03_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_03_Regular_Red_90ft_4000x400.webm`],\n                    },\n                },\n                reverse: {\n                    blue: {\n                        '15ft': [lg`Energy/EnergyBeamReverse_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeamReverse_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeamReverse_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeamReverse_01_Regular_Blue_90ft_4000x400.webm`],\n                    },\n                    bluegreen: {\n                        '15ft': [lg`Energy/EnergyBeamReverse_01_Regular_BlueGreen_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeamReverse_01_Regular_BlueGreen_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeamReverse_01_Regular_BlueGreen_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeamReverse_01_Regular_BlueGreen_90ft_4000x400.webm`],\n                    },\n                    darkgreen: {\n                        '15ft': [lg`Energy/EnergyBeamReverse_01_Dark_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeamReverse_01_Dark_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeamReverse_01_Dark_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeamReverse_01_Dark_Green_90ft_4000x400.webm`],\n                    },\n                    darkred: {\n                        '15ft': [lg`Energy/EnergyBeamReverse_01_Dark_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeamReverse_01_Dark_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeamReverse_01_Dark_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeamReverse_01_Dark_Red_90ft_4000x400.webm`],\n                    },\n                    red: {\n                        '15ft': [lg`Energy/EnergyBeamReverse_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeamReverse_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeamReverse_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeamReverse_01_Regular_Red_90ft_4000x400.webm`],\n                    },\n                }\n            },\n            energystrand: {\n                '01': {\n                    darkgreen: {\n                        '05ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Green_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Green_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Green_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Green_05ft_600x400.webm`,\n                        ],\n                        '15ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Green_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Green_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Green_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Green_15ft_1000x400.webm`,\n                        ],\n                        '30ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Green_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Green_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Green_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Green_30ft_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Green_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Green_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Green_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Green_60ft_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Green_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Green_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Green_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Green_90ft_4000x400.webm`,\n                        ],\n                    },\n                    darkpurple: {\n                        '05ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Purple_05ft_600x400.webm`,\n                        ],\n                        '15ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Purple_15ft_1000x400.webm`,\n                        ],\n                        '30ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Purple_30ft_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Purple_60ft_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Purple_90ft_4000x400.webm`,\n                        ],\n                    },\n                    darkred: {\n                        '05ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Red_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Red_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Red_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Red_05ft_600x400.webm`,\n                        ],\n                        '15ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Red_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Red_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Red_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Red_15ft_1000x400.webm`,\n                        ],\n                        '30ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Red_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Red_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Red_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Red_30ft_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Red_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Red_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Red_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Red_60ft_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            lg`Energy/EnergyStrand_01_Dark_Red_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Dark_Red_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Dark_Red_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Dark_Red_90ft_4000x400.webm`,\n                        ],\n                    },\n                    blue: {\n                        '05ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Blue_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Blue_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Blue_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Blue_05ft_600x400.webm`,\n                        ],\n                        '15ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Blue_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Blue_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Blue_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Blue_15ft_1000x400.webm`,\n                        ],\n                        '30ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Blue_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Blue_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Blue_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Blue_30ft_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Blue_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Blue_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Blue_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Blue_60ft_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Blue_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Blue_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Blue_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Blue_90ft_4000x400.webm`,\n                        ],\n                    },\n                    orange: {\n                        '05ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Orange_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Orange_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Orange_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Orange_05ft_600x400.webm`,\n                        ],\n                        '15ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Orange_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Orange_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Orange_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Orange_15ft_1000x400.webm`,\n                        ],\n                        '30ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Orange_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Orange_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Orange_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Orange_30ft_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Orange_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Orange_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Orange_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Orange_60ft_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Orange_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Orange_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Orange_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Orange_90ft_4000x400.webm`,\n                        ],\n                    },\n                    purple: {\n                        '05ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_05ft_600x400.webm`,\n                        ],\n                        '15ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_15ft_1000x400.webm`,\n                        ],\n                        '30ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_30ft_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_60ft_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_90ft_4000x400.webm`,\n                        ],\n                    },\n                    red: {\n                        '05ft': [lg`Energy/EnergyStrand_05_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_05_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_05_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_05_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_05_Regular_Red_90ft_4000x400.webm`],\n                    },\n                },\n                '02': {\n                    darkgreen: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Green_90ft_4000x400.webm`]\n                    },\n                    darkpurple: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Purple_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Purple_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Purple_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Purple_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Purple_90ft_4000x400.webm`]\n                    },\n                    darkred: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple01_Dark_Red_90ft_4000x400.webm`]\n                    },\n                    blue: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    purple: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Purple_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Purple_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Purple_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Purple_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple01_Regular_Purple_90ft_4000x400.webm`]\n                    },\n                },\n                '03': {\n                    bluepink: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple02_Regular_BluePink_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple02_Regular_BluePink_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple02_Regular_BluePink_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple02_Regular_BluePink_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple02_Regular_BluePink_90ft_4000x400.webm`]\n                    },\n                    greenyellow: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple02_Regular_GreenYellow_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple02_Regular_GreenYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple02_Regular_GreenYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple02_Regular_GreenYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple02_Regular_GreenYellow_90ft_4000x400.webm`]\n                    },\n                    darkpurplered: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple02_Dark_PurpleRed_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple02_Dark_PurpleRed_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple02_Dark_PurpleRed_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple02_Dark_PurpleRed_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple02_Dark_PurpleRed_90ft_4000x400.webm`]\n                    },\n                    darkgreenpurple: {\n                        '05ft': [lg`Energy/EnergyStrand_Multiple02_Dark_GreenPurple_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyStrand_Multiple02_Dark_GreenPurple_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyStrand_Multiple02_Dark_GreenPurple_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyStrand_Multiple02_Dark_GreenPurple_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyStrand_Multiple02_Dark_GreenPurple_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            heart: {\n                '01': {\n                    pinkyellow: {\n                        '05ft': [lg`RangedSpell/ProjectileHeart01_01_Regular_PinkYellow_05ft_600x400.webm`],\n                        '15ft': [lg`RangedSpell/ProjectileHeart01_01_Regular_PinkYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`RangedSpell/ProjectileHeart01_01_Regular_PinkYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`RangedSpell/ProjectileHeart01_01_Regular_PinkYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`RangedSpell/ProjectileHeart01_01_Regular_PinkYellow_90ft_4000x400.webm`]\n                    },\n                },\n            },\n            iceshard: {\n                '01': {\n                    blue: {\n                        '05ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                },\n            },\n            leaves: {\n                '01': {\n                    blue: {\n                        '05ft': [lg`Nature/SwirlingLeaves01_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Nature/SwirlingLeaves01_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Nature/SwirlingLeaves01_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Nature/SwirlingLeaves01_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Nature/SwirlingLeaves01_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    greenorange: {\n                        '05ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_05ft_600x400.webm`],\n                        '15ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_15ft_1000x400.webm`],\n                        '30ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_30ft_1600x400.webm`],\n                        '60ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_60ft_2800x400.webm`],\n                        '90ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_90ft_4000x400.webm`]\n                    },\n                    orangepink: {\n                        '05ft': [lg`Nature/SwirlingLeaves01_01_Regular_OrangePink_05ft_600x400.webm`],\n                        '15ft': [lg`Nature/SwirlingLeaves01_01_Regular_OrangePink_15ft_1000x400.webm`],\n                        '30ft': [lg`Nature/SwirlingLeaves01_01_Regular_OrangePink_30ft_1600x400.webm`],\n                        '60ft': [lg`Nature/SwirlingLeaves01_01_Regular_OrangePink_60ft_2800x400.webm`],\n                        '90ft': [lg`Nature/SwirlingLeaves01_01_Regular_OrangePink_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '05ft': [lg`Nature/SwirlingLeaves01_01_Regular_Pink_05ft_600x400.webm`],\n                        '15ft': [lg`Nature/SwirlingLeaves01_01_Regular_Pink_15ft_1000x400.webm`],\n                        '30ft': [lg`Nature/SwirlingLeaves01_01_Regular_Pink_30ft_1600x400.webm`],\n                        '60ft': [lg`Nature/SwirlingLeaves01_01_Regular_Pink_60ft_2800x400.webm`],\n                        '90ft': [lg`Nature/SwirlingLeaves01_01_Regular_Pink_90ft_4000x400.webm`]\n                    },\n\n                },\n            },\n            musicnote: {\n                '01': {\n                    greenyellow: {\n                        '05ft': [lg`RangedSpell/ProjectileMusicNote01_01_Regular_GreenYellow_05ft_600x400.webm`],\n                        '15ft': [lg`RangedSpell/ProjectileMusicNote01_01_Regular_GreenYellow_15ft_1000x400.webm`],\n                        '30ft': [lg`RangedSpell/ProjectileMusicNote01_01_Regular_GreenYellow_30ft_1600x400.webm`],\n                        '60ft': [lg`RangedSpell/ProjectileMusicNote01_01_Regular_GreenYellow_60ft_2800x400.webm`],\n                        '90ft': [lg`RangedSpell/ProjectileMusicNote01_01_Regular_GreenYellow_90ft_4000x400.webm`]\n                    },\n                },\n            },\n            skull: {\n                '01': {\n                    purplepink: {\n                        '05ft': [lg`RangedSpell/ProjectileSkull01_01_Regular_PinkPurple_05ft_600x400.webm`],\n                        '15ft': [lg`RangedSpell/ProjectileSkull01_01_Regular_PinkPurple_15ft_1000x400.webm`],\n                        '30ft': [lg`RangedSpell/ProjectileSkull01_01_Regular_PinkPurple_30ft_1600x400.webm`],\n                        '60ft': [lg`RangedSpell/ProjectileSkull01_01_Regular_PinkPurple_60ft_2800x400.webm`],\n                        '90ft': [lg`RangedSpell/ProjectileSkull01_01_Regular_PinkPurple_90ft_4000x400.webm`]\n                    },\n                },\n            },\n        },\n    }\n\n    /**\n     * Melee Types:\n     *\n     * Weapon \n     * Generic\n     * Creature\n     * \n     */\n\n    JB2APATREONDB.melee = {\n        creature: {\n            bite: {\n                '01': {\n                    red: [lg`Creature/Bite_01_Regular_Red_400x400.webm`],\n                    blue: [lg`Creature/Bite_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Creature/Bite_01_Regular_Green_400x400.webm`],\n                    grey: [lg`Creature/Bite_01_Regular_Grey_400x400.webm`],\n                    orange: [lg`Creature/Bite_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Creature/Bite_01_Regular_Purple_400x400.webm`],\n                    yellow: [lg`Creature/Bite_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            claw: {\n                '01': {\n                    blue: [lg`Creature/Claws_01_Bright_Blue_400x400.webm`],\n                    brown: [lg`Creature/Claws_01_Regular_Brown_400x400.webm`],\n                    darkred: [lg`Creature/Claws_01_Dark_Red_400x400.webm`],\n                    green: [lg`Creature/Claws_01_Bright_Green_400x400.webm`],\n                    orange: [lg`Creature/Claws_01_Bright_Orange_400x400.webm`],\n                    purple: [lg`Creature/Claws_01_Bright_Purple_400x400.webm`],\n                    red: [lg`Creature/Claws_01_Regular_Red_400x400.webm`],\n                    yellow: [lg`Creature/Claws_01_Bright_Yellow_400x400.webm`],\n                }\n            },\n        },\n        generic: {\n            '1hs': {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/DmgSlashing_01_Regular_Yellow_1Handed_800x600.webm`],\n                }\n            },\n            '2hs': {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/DmgSlashing_01_Regular_Yellow_2Handed_800x600.webm`],\n                }\n            },\n            '1hb': {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/DmgBludgeoning_01_Regular_Yellow_1Handed_800x600.webm`],\n                }\n            },\n            '2hb': {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/DmgBludgeoning_01_Regular_Yellow_2Handed_800x600.webm`],\n                }\n            },\n            '1hp': {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/DmgPiercing_01_Regular_Yellow_1Handed_800x600.webm`],\n                }\n            },\n            '2hp': {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/DmgPiercing_01_Regular_Yellow_2Handed_800x600.webm`]\n                }\n            },\n        },\n        weapon: {\n            club: {\n                '01': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Club01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_06_Regular_White_800x600.webm`]\n                    ],\n                    blue: [\n                        [lg`Weapon_Attacks/Melee/Club01_01_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_02_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_03_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_04_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_05_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_06_Regular_Blue_800x600.webm`]\n                    ],\n                    orange: [\n                        [lg`Weapon_Attacks/Melee/Club01_01_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_02_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_03_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_04_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_05_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_06_Regular_Orange_800x600.webm`]\n                    ],\n                    purple: [\n                        [lg`Weapon_Attacks/Melee/Club01_01_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_02_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_03_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_04_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_05_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_06_Regular_Purple_800x600.webm`]\n                    ],\n                    darkorangepurple: [\n                        [lg`Weapon_Attacks/Melee/Club01_01_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_02_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_03_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_04_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_05_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_06_Dark_OrangePurple_800x600.webm`]\n                    ],\n                }\n            },\n            dagger: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/Dagger02_01_Regular_White_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/Dagger02_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/Dagger02_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/Dagger02_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/Dagger02_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/Dagger02_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/Dagger02_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/Dagger02_Fire_Regular_Green_800x600.webm`],\n                    darkpurple: [lg`Weapon_Attacks/Melee/Dagger02_Fire_Dark_Purple_800x600.webm`],\n                }\n            },\n            falchion: {\n                '01': {\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Falchion01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                    black: [\n                        lg`Weapon_Attacks/Melee/Falchion01_01_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_02_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_03_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_04_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_05_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_06_Regular_Black_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Falchion01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Falchion01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Falchion01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_06_Regular_Purple_800x600.webm`\n                    ],\n                    white: [\n                        lg`Weapon_Attacks/Melee/Falchion01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_06_Regular_White_800x600.webm`\n                    ]\n                },\n            },\n            flurryofblows: {\n                'magical': {\n                    darkred: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Dark_Red_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Dark_Red_Magical02_800x600.webm`\n                    ],\n                    darkpurple: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Dark_Purple_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Dark_Purple_Magical02_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Blue_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Blue_Magical02_800x600.webm`\n                    ],\n                    green: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Green_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Green_Magical02_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Orange_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Orange_Magical02_800x600.webm`\n                    ],\n                    purplepink: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_PinkPurple_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_PinkPurple_Magical02_800x600.webm`\n                    ],\n                    yellow: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Yellow_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Yellow_Magical02_800x600.webm`\n                    ]\n                },\n                'physical': {\n                    darkred: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Dark_Red_Physical01_800x600.webm`,\n                    ],\n                    darkpurple: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Dark_Purple_Physical01_800x600.webm`,\n                    ],\n                    blue: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Blue_Physical01_800x600.webm`,\n                    ],\n                    green: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Green_Physical01_800x600.webm`,\n                    ],\n                    orange: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Orange_Physical01_800x600.webm`,\n                    ],\n                    purplepink: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_PinkPurple_Physical01_800x600.webm`,\n                    ],\n                    yellow: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Yellow_Physical01_800x600.webm`\n                    ]\n                },\n                'nohit': {\n                    blue: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlowsNoHit_01_Regular_Blue_800x600.webm`,\n                    ],\n                    yellow: [\n                        lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlowsNoHit_01_Regular_Yellow_800x600.webm`\n                    ],\n                },\n            },\n            glaive: {\n                '01': {\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Glaive01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                    black: [\n                        lg`Weapon_Attacks/Melee/Glaive01_01_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_02_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_03_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_04_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_05_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_06_Regular_Black_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Glaive01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Glaive01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Glaive01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_06_Regular_Purple_800x600.webm`\n                    ],\n                    white: [\n                        lg`Weapon_Attacks/Melee/Glaive01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_06_Regular_White_800x600.webm`\n                    ]\n                },\n                '02': {\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Glaive02_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                    black: [\n                        lg`Weapon_Attacks/Melee/Glaive02_01_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_02_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_03_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_04_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_05_Regular_Black_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_06_Regular_Black_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Glaive02_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Glaive02_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Glaive02_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_06_Regular_Purple_800x600.webm`\n                    ],\n                    white: [\n                        lg`Weapon_Attacks/Melee/Glaive02_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive02_06_Regular_White_800x600.webm`\n                    ]\n                },\n            },\n            greataxe: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/GreatAxe01_01_Regular_White_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/GreatAxe01_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/GreatAxe01_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/GreatAxe01_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/GreatAxe01_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/GreatAxe01_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/GreatAxe01_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/GreatAxe01_Fire_Regular_Green_800x600.webm`]\n                }\n            },\n            greatclub: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/GreatClub01_01_Regular_White_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/GreatClub01_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/GreatClub01_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/GreatClub01_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/GreatClub01_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/GreatClub01_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/GreatClub01_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/GreatClub01_Fire_Regular_Green_800x600.webm`]\n                }\n            },\n            greatsword: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/GreatSword01_01_Regular_White_800x600.webm`],\n                    black: [lg`Weapon_Attacks/Melee/GreatSword01_Fire_Regular_Black_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/GreatSword01_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/GreatSword01_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/GreatSword01_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/GreatSword01_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/GreatSword01_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/GreatSword01_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/GreatSword01_Fire_Regular_Green_800x600.webm`]\n                }\n            },\n            halberd: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Halberd01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_06_Regular_White_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Halberd01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Halberd01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Halberd01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_06_Regular_Purple_800x600.webm`\n                    ],\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Halberd01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                }\n            },\n            hammer: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Hammer01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_06_Regular_White_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Hammer01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Hammer01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Hammer01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_06_Regular_Purple_800x600.webm`\n                    ],\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Hammer01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                    yellow: [\n                        lg`Weapon_Attacks/Melee/Hammer01_01_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_02_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_03_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_04_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_05_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Hammer01_06_Regular_Yellow_800x600.webm`\n                    ],\n                },\n            },\n            handaxe: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/HandAxe02_01_Regular_White_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/HandAxe02_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/HandAxe02_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/HandAxe02_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/HandAxe02_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/HandAxe02_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/HandAxe02_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/HandAxe02_Fire_Regular_Green_800x600.webm`]\n                }\n            },\n            lasersword: {\n                '01': {\n                    blue: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Blue_800x600.webm`],\n                    blue02: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Blue02_800x600.webm`],\n                    blue03: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Blue03_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Orange_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Yellow_800x600.webm`],\n                    darkred: [lg`Weapon_Attacks/Melee/LaserSword01_01_Dark_Red_800x600.webm`],\n                    darkwhite: [lg`Weapon_Attacks/Melee/LaserSword01_01_Dark_White_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Purple_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Green_800x600.webm`],\n                    green02: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Green02_800x600.webm`],\n                    white: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_White_800x600.webm`]\n                }\n            },\n            mace: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/Legacy/Mace01_01_Regular_White_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/Mace01_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/Mace01_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/Mace01_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/Mace01_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/Mace01_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/Mace01_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/Mace01_Fire_Regular_Green_800x600.webm`]\n                },\n                '02': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Mace01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_06_Regular_White_800x600.webm`]\n                    ],\n                    blue: [\n                        [lg`Weapon_Attacks/Melee/Mace01_01_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_02_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_03_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_04_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_05_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_06_Regular_Blue_800x600.webm`]\n                    ],\n                    orange: [\n                        [lg`Weapon_Attacks/Melee/Mace01_01_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_02_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_03_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_04_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_05_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_06_Regular_Orange_800x600.webm`]\n                    ],\n                    purple: [\n                        [lg`Weapon_Attacks/Melee/Mace01_01_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_02_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_03_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_04_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_05_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_06_Regular_Purple_800x600.webm`]\n                    ],\n                    darkorangepurple: [\n                        [lg`Weapon_Attacks/Melee/Mace01_01_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_02_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_03_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_04_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_05_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_06_Dark_OrangePurple_800x600.webm`]\n                    ],\n                }\n            },\n            maul: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/Maul01_01_Regular_White_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/Maul01_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/Maul01_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/Maul01_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/Maul01_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/Maul01_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/Maul01_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/Maul01_Fire_Regular_Green_800x600.webm`]\n                }\n            },\n            quarterstaff: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_06_Regular_White_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_06_Regular_Purple_800x600.webm`\n                    ],\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                },\n                '02': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_06_Regular_White_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_06_Regular_Purple_800x600.webm`\n                    ],\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff02_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                },\n                '03': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_06_Regular_White_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_06_Regular_Purple_800x600.webm`\n                    ],\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff03_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                },\n                '04': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_06_Regular_White_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_06_Regular_Purple_800x600.webm`\n                    ],\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Quarterstaff04_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                }\n            },\n            rapier: {\n                fire: {\n                    white: [lg`Weapon_Attacks/Melee/Legacy/Rapier01_01_Regular_White_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/Rapier01_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/Rapier01_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/Rapier01_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/Rapier01_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/Rapier01_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/Rapier01_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/Rapier01_Fire_Regular_Green_800x600.webm`]\n                },\n                '01': {\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Rapier01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Rapier01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Rapier01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Rapier01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_06_Regular_Purple_800x600.webm`\n                    ],\n                    white: [\n                        lg`Weapon_Attacks/Melee/Rapier01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_06_Regular_White_800x600.webm`\n                    ]\n                },\n            },\n            scimitar: {\n                '01': {\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Scimitar01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Scimitar01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Scimitar01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Scimitar01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_06_Regular_Purple_800x600.webm`\n                    ],\n                    white: [\n                        lg`Weapon_Attacks/Melee/Scimitar01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_06_Regular_White_800x600.webm`\n                    ]\n                }\n            },\n            shortsword: {\n                '01': {\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Shortsword01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Shortsword01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Shortsword01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Shortsword01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_06_Regular_Purple_800x600.webm`\n                    ],\n                    white: [\n                        lg`Weapon_Attacks/Melee/Shortsword01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_06_Regular_White_800x600.webm`\n                    ],\n                    yellow: [\n                        lg`Weapon_Attacks/Melee/Shortsword01_01_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_02_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_03_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_04_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_05_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_06_Regular_Yellow_800x600.webm`\n                    ],\n                }\n            },\n            spear: {\n                'fire': {\n                    white: [lg`Weapon_Attacks/Melee/Legacy/Spear01_01_Regular_White_800x600.webm`],\n\n                    orange: [lg`Weapon_Attacks/Melee/Spear01_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/Spear01_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/Spear01_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/Spear01_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/Spear01_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/Spear01_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/Spear01_Fire_Regular_Green_800x600.webm`]\n                },\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Spear01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_06_Regular_White_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Spear01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Spear01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Spear01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_06_Regular_Purple_800x600.webm`\n                    ],\n                    yellow: [\n                        lg`Weapon_Attacks/Melee/Spear01_01_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_02_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_03_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_04_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_05_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_06_Regular_Yellow_800x600.webm`\n                    ],\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Spear01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                },\n            },\n            sword: {\n                fire: {\n                    white: [lg`Weapon_Attacks/Melee/Legacy/Sword01_01_Regular_White_800x600.webm`],\n                    black: [lg`Weapon_Attacks/Melee/Sword01_Fire_Regular_Black_800x600.webm`],\n                    orange: [lg`Weapon_Attacks/Melee/Sword01_Fire_Regular_Orange_800x600.webm`],\n                    pink: [lg`Weapon_Attacks/Melee/Sword01_Fire_Regular_Pink_800x600.webm`],\n                    red: [lg`Weapon_Attacks/Melee/Sword01_Fire_Regular_Red_800x600.webm`],\n                    yellow: [lg`Weapon_Attacks/Melee/Sword01_Fire_Regular_Yellow_800x600.webm`],\n                    purple: [lg`Weapon_Attacks/Melee/Sword01_Fire_Dark_Purple_800x600.webm`],\n                    blue: [lg`Weapon_Attacks/Melee/Sword01_Fire_Regular_Blue_800x600.webm`],\n                    green: [lg`Weapon_Attacks/Melee/Sword01_Fire_Regular_Green_800x600.webm`]\n                },\n                '01': {\n                    darkorangepurple: [\n                        lg`Weapon_Attacks/Melee/Sword01_01_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_02_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_03_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_04_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_05_Dark_OrangePurple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_06_Dark_OrangePurple_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Weapon_Attacks/Melee/Sword01_01_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_02_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_03_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_04_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_05_Regular_Blue_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_06_Regular_Blue_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Weapon_Attacks/Melee/Sword01_01_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_02_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_03_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_04_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_05_Regular_Orange_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_06_Regular_Orange_800x600.webm`\n                    ],\n                    purple: [\n                        lg`Weapon_Attacks/Melee/Sword01_01_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_02_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_03_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_04_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_05_Regular_Purple_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_06_Regular_Purple_800x600.webm`\n                    ],\n                    white: [\n                        lg`Weapon_Attacks/Melee/Sword01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_06_Regular_White_800x600.webm`\n                    ],\n                    yellow: [\n                        lg`Weapon_Attacks/Melee/Sword01_01_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_02_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_03_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_04_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_05_Regular_Yellow_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_06_Regular_Yellow_800x600.webm`\n                    ]\n                },\n            },\n            unarmedstrike: {\n                'magical': {\n                    darkred: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Dark_Red_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Dark_Red_Magical02_800x600.webm`\n                    ],\n                    darkpurple: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Dark_Purple_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Dark_Purple_Magical02_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Blue_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Blue_Magical02_800x600.webm`\n                    ],\n                    green: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Green_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Green_Magical02_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Orange_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Orange_Magical02_800x600.webm`\n                    ],\n                    purplepink: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_PinkPurple_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_PinkPurple_Magical02_800x600.webm`\n                    ],\n                    yellow: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Yellow_Magical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Yellow_Magical02_800x600.webm`\n                    ]\n                },\n                'physical': {\n                    darkred: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Dark_Red_Physical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Dark_Red_Physical02_800x600.webm`\n                    ],\n                    darkpurple: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Dark_Purple_Physical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Dark_Purple_Physical02_800x600.webm`\n                    ],\n                    blue: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Blue_Physical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Blue_Physical02_800x600.webm`\n                    ],\n                    green: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Green_Physical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Green_Physical02_800x600.webm`\n                    ],\n                    orange: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Orange_Physical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Orange_Physical02_800x600.webm`\n                    ],\n                    purplepink: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_PinkPurple_Physical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_PinkPurple_Physical02_800x600.webm`\n                    ],\n                    yellow: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Yellow_Physical01_800x600.webm`,\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Yellow_Physical02_800x600.webm`\n                    ]\n                },\n                'nohit': {\n                    blue: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrikeNoHit_01_Regular_Blue_800x600.webm`,\n                    ],\n                    yellow: [\n                        lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrikeNoHit_01_Regular_Yellow_800x600.webm`\n                    ],\n                },\n            },\n            warhammer: {\n                '01': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Warhammer01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_06_Regular_White_800x600.webm`]\n                    ],\n                    blue: [\n                        [lg`Weapon_Attacks/Melee/Warhammer01_01_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_02_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_03_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_04_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_05_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_06_Regular_Blue_800x600.webm`]\n                    ],\n                    orange: [\n                        [lg`Weapon_Attacks/Melee/Warhammer01_01_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_02_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_03_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_04_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_05_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_06_Regular_Orange_800x600.webm`]\n                    ],\n                    purple: [\n                        [lg`Weapon_Attacks/Melee/Warhammer01_01_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_02_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_03_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_04_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_05_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_06_Regular_Purple_800x600.webm`]\n                    ],\n                    darkorangepurple: [\n                        [lg`Weapon_Attacks/Melee/Warhammer01_01_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_02_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_03_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_04_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_05_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_06_Dark_OrangePurple_800x600.webm`]\n                    ],\n                }\n            },\n            wrench: {\n                '01': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Wrench01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_06_Regular_White_800x600.webm`]\n                    ],\n                    blue: [\n                        [lg`Weapon_Attacks/Melee/Wrench01_01_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_02_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_03_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_04_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_05_Regular_Blue_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_06_Regular_Blue_800x600.webm`]\n                    ],\n                    orange: [\n                        [lg`Weapon_Attacks/Melee/Wrench01_01_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_02_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_03_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_04_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_05_Regular_Orange_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_06_Regular_Orange_800x600.webm`]\n                    ],\n                    purple: [\n                        [lg`Weapon_Attacks/Melee/Wrench01_01_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_02_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_03_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_04_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_05_Regular_Purple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_06_Regular_Purple_800x600.webm`]\n                    ],\n                    darkorangepurple: [\n                        [lg`Weapon_Attacks/Melee/Wrench01_01_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_02_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_03_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_04_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_05_Dark_OrangePurple_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_06_Dark_OrangePurple_800x600.webm`]\n                    ],\n                }\n            },\n        },\n    }\n\n    /**\n     * Template Types:\n     * \n     * Cone\n     * Square\n     * Circle\n     * Ray\n     * \n     */\n    JB2APATREONDB.templatefx = {\n        circle: {\n            armsofhadar: {\n                '01': {\n                    darkgreen: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Green_500x500.webm`],\n                    darkpurple: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Purple_500x500.webm`],\n                    darkred: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Red_500x500.webm`],\n                }\n            },\n            blacktentacles: {\n                '01': {\n                    darkgreen: [l4`Black_Tentacles/BlackTentacles_01_Dark_Green_600x600.webm`],\n                    darkpurple: [l4`Black_Tentacles/BlackTentacles_01_Dark_Purple_600x600.webm`],\n                    darkred: [l4`Black_Tentacles/BlackTentacles_01_Dark_Red_600x600.webm`],\n                },\n            },\n            calllightning: {\n                '01': {\n                    blue: [l3`Call_Lightning/CallLightning_01_Blue_1000x1000.webm`],\n                    blueorange: [l3`Call_Lightning/CallLightning_01_BlueOrange_1000x1000.webm`],\n                    green: [l3`Call_Lightning/CallLightning_01_Green_1000x1000.webm`],\n                    pinkyellow: [l3`Call_Lightning/CallLightning_01_PinkYellow_1000x1000.webm`],\n                    purple: [l3`Call_Lightning/CallLightning_01_Purple_1000x1000.webm`],\n                    red: [l3`Call_Lightning/CallLightning_01_Red_1000x1000.webm`],\n                    yellow: [l3`Call_Lightning/CallLightning_01_Yellow_1000x1000.webm`]\n                }\n            },\n            cloudofdaggers: {\n                '01': {\n                    darkpurple: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Dark_Purple_400x400.webm`],\n                    darkred: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Dark_Red_400x400.webm`],\n                    blue: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Blue_400x400.webm`],\n                    green: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Green_400x400.webm`],\n                    orange: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Orange_400x400.webm`],\n                    purple: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Purple_400x400.webm`],\n                    red: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Red_400x400.webm`],\n                    yellow: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Yellow_400x400.webm`]\n                },\n                kunai: {\n                    darkpurple: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Dark_Purple_400x400.webm`],\n                    darkred: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Dark_Red_400x400.webm`],\n                    blue: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Blue_400x400.webm`],\n                    green: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Green_400x400.webm`],\n                    orange: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Orange_400x400.webm`],\n                    purple: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Purple_400x400.webm`],\n                    red: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Red_400x400.webm`],\n                    yellow: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Yellow_400x400.webm`]\n                },\n            },\n            crackedshield: {\n                '01': {\n                    darkred: [lg`Template/Circle/TemplateShieldCrackedCircle_01_Dark_Red_800x800.webm`],\n                    darkpurple: [lg`Template/Circle/TemplateShieldCrackedCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            darkness: {\n                '01': {\n                    black: [l2`Darkness/Darkness_01_Black_600x600.webm`],\n                    green: [l2`Darkness/Darkness_01_Green_600x600.webm`]\n                }\n            },\n            detectmagic: {\n                '01': {\n                    blue: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Blue_1200x1200.webm`],\n                    green: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Green_1200x1200.webm`],\n                    greenorange: [l1`Detect_Magic/DetectMagicCircle_01_Regular_GreenOrange_1200x1200.webm`],\n                    grey: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Grey_1200x1200.webm`],\n                    purple: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Purple_1200x1200.webm`],\n                }\n            },\n            drop: {\n                '01': {\n                    darkgreen: [lg`Template/Circle/TemplateDropCircle_01_Dark_Green_800x800.webm`],\n                    red: [lg`Template/Circle/TemplateDropCircle_01_Regular_Red_800x800.webm`]\n                }\n            },\n            explosion: {\n                '01': {\n                    darkpurple: [\n                        lg`Explosion/Explosion_04_Dark_Purple_400x400.webm`,\n                    ],\n                    darkred: [\n                        lg`Explosion/Explosion_04_Dark_Red_400x400.webm`,\n                    ],\n                    blue: [\n                        lg`Explosion/Explosion_01_Blue_400x400.webm`,\n                        lg`Explosion/Explosion_02_Blue_400x400.webm`,\n                        lg`Explosion/Explosion_04_Regular_Blue_400x400.webm`,\n                    ],\n                    green: [\n                        lg`Explosion/Explosion_01_Green_400x400.webm`,\n                        lg`Explosion/Explosion_02_Green_400x400.webm`,\n                        lg`Explosion/Explosion_04_Regular_Green_400x400.webm`,\n                    ],\n                    greenorange: [\n                        lg`Explosion/Explosion_03_Regular_GreenOrange_400x400.webm`,\n                    ],\n                    orange: [\n                        lg`Explosion/Explosion_01_Orange_400x400.webm`,\n                        lg`Explosion/Explosion_02_Orange_400x400.webm`,\n                        lg`Explosion/Explosion_04_Regular_Orange_400x400.webm`,\n                    ],\n                    pink: [\n                        lg`Explosion/Explosion_03_Regular_Pink_400x400.webm`,\n                    ],\n                    purplepink: [\n                        lg`Explosion/Explosion_03_Regular_PurplePink_400x400.webm`,\n                    ],\n                    purple: [\n                        lg`Explosion/Explosion_01_Purple_400x400.webm`,\n                        lg`Explosion/Explosion_02_Purple_400x400.webm`,\n                    ],\n                    red: [\n                        lg`Explosion/Explosion_03_Regular_Red_400x400.webm`,\n                    ],\n                    yellow: [\n                        lg`Explosion/Explosion_01_Yellow_400x400.webm`,\n                        lg`Explosion/Explosion_02_Yellow_400x400.webm`,\n                    ],\n                    yellowblue: [\n                        lg`Explosion/Explosion_03_Regular_BlueYellow_400x400.webm`,\n                    ],\n                    whiteblue: [\n                        lg`Explosion/Explosion_03_Dark_BlueWhite_400x400.webm`,\n                    ],\n                }\n            },\n            fear: {\n                '01': {\n                    darkorange: [lg`Template/Circle/TemplateFearCircle_01_Dark_Orange_800x800.webm`],\n                    darkpurple: [lg`Template/Circle/TemplateFearCircle_01_Dark_Purple_800x800.webm`],\n                    orange: [lg`Template/Circle/TemplateFearCircle_01_Regular_Orange_800x800.webm`],\n                },\n            },\n            fireball: {\n                loop: {\n                    blue: [l3`Fireball/FireballLoop_01_Blue_800x800.webm`],\n                    orange: [l3`Fireball/FireballLoop_01_Orange_800x800.webm`],\n                    purple: [l3`Fireball/FireballLoop_01_Purple_800x800.webm`],\n                },\n                explode: {\n                    blue: [l3`Fireball/FireballExplosion_01_Blue_800x800.webm`],\n                    orange: [l3`Fireball/FireballExplosion_01_Orange_800x800.webm`],\n                    purple: [l3`Fireball/FireballExplosion_01_Purple_800x800.webm`],\n                },\n                nodebris: {\n                    blue: [l3`Fireball/FireballLoopNoDebris_01_Blue_800x800.webm`],\n                    orange: [l3`Fireball/FireballLoopNoDebris_01_Orange_800x800.webm`],\n                    purple: [l3`Fireball/FireballLoopNoDebris_01_Purple_800x800.webm`],\n                },\n            },\n            fogcloud: {\n                '01': {\n                    white: [l1`Fog_Cloud/FogCloud_01_White_800x800.webm`]\n                },\n                '02': {\n                    white: [l1`Fog_Cloud/FogCloud_02_Regular_White_800x800.webm`],\n                    green: [l1`Fog_Cloud/FogCloud_02_Regular_Green_800x800.webm`]\n                },\n            },\n            heart: {\n                '01': {\n                    darkred: [lg`Template/Circle/TemplateHeartCircle_01_Dark_Red_800x800.webm`],\n                    pink: [lg`Template/Circle/TemplateHeartCircle_01_Regular_Pink_800x800.webm`],\n                    teal: [lg`Template/Circle/TemplateHeartCircle_01_Regular_Teal_800x800.webm`],\n                },\n            },\n            horror: {\n                '01': {\n                    darkteal: [lg`Template/Circle/TemplateHorrorCircle_01_Dark_Teal_800x800.webm`],\n                    purple: [lg`Template/Circle/TemplateHorrorCircle_01_Regular_Purple_800x800.webm`],\n                    teal: [lg`Template/Circle/TemplateHorrorCircle_01_Regular_Teal_800x800.webm`],\n                },\n            },\n            magicsign: {\n                abjuration: {\n                    blue: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                conjuration: {\n                    blue: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                divination: {\n                    blue: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                enchantment: {\n                    blue: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                evocation: {\n                    blue: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                illusion: {\n                    blue: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                necromancy: {\n                    blue: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                transmutation: {\n                    blue: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n            },\n            moonbeam: {\n                loop: {\n                    blue: [l2`Moonbeam/Moonbeam_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Moonbeam/Moonbeam_01_Regular_Green_400x400.webm`],\n                    rainbow: [l2`Moonbeam/Moonbeam_01_Regular_Rainbow_400x400.webm`],\n                },\n                nopulse: {\n                    blue: [l2`Moonbeam/MoonbeamNoPulse_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Moonbeam/MoonbeamNoPulse_01_Regular_Green_400x400.webm`],\n                    rainbow: [l2`Moonbeam/MoonbeamNoPulse_01_Regular_Rainbow_400x400.webm`],\n                },\n                intro: {\n                    blue: [l2`Moonbeam/MoonbeamIntro_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Moonbeam/MoonbeamIntro_01_Regular_Green_400x400.webm`],\n                    rainbow: [l2`Moonbeam/MoonbeamIntro_01_Regular_Rainbow_400x400.webm`],\n                },\n                outro: {\n                    blue: [l2`Moonbeam/MoonbeamOutro_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Moonbeam/MoonbeamOutro_01_Regular_Green_400x400.webm`],\n                    rainbow: [l2`Moonbeam/MoonbeamOutro_01_Regular_Rainbow_400x400.webm`],\n                },\n            },\n            musicnote: {\n                '01': {\n                    blue: [lg`Template/Circle/TemplateMusicNoteCircle_01_Regular_Blue_800x800.webm`],\n                    darkred: [lg`Template/Circle/TemplateMusicNoteCircle_01_Dark_Red_800x800.webm`],\n                    purple: [lg`Template/Circle/TemplateMusicNoteCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            outpulse: {\n                '01': {\n                    whiteblue: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_BlueWhite_Burst_600x600.webm`],\n                    greenorange: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_GreenOrange_Burst_600x600.webm`],\n                    purplepink: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_PurplePink_Burst_600x600.webm`],\n                    tealyellow: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_TealYellow_Burst_600x600.webm`],\n                },\n                '02': {\n                    whiteblue: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_BlueWhite_Burst_600x600.webm`],\n                    greenorange: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_GreenOrange_Burst_600x600.webm`],\n                    purplepink: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_PurplePink_Burst_600x600.webm`],\n                    tealyellow: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_TealYellow_Burst_600x600.webm`],\n                }\n            },\n            poison: {\n                '01': {\n                    darkgreen: [lg`Template/Circle/TemplatePoisonCircle_01_Dark_Green_800x800.webm`],\n                    purple: [lg`Template/Circle/TemplatePoisonCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            runes: {\n                '01': {\n                    darkorange: [lg`Template/Circle/TemplateRunesCircle_01_Dark_Orange_800x800.webm`],\n                    darkred: [lg`Template/Circle/TemplateRunesCircle_01_Dark_Red_800x800.webm`],\n                    blue: [lg`Template/Circle/TemplateRunesCircle_01_Regular_Blue_800x800.webm`],\n                    green: [lg`Template/Circle/TemplateRunesCircle_01_Regular_Green02_800x800.webm`],\n                    orange: [lg`Template/Circle/TemplateRunesCircle_01_Regular_Orange_800x800.webm`],\n                },\n            },\n            shatter: {\n                '01': {\n                    purple: [l2`Shatter/Shatter_01_Purple_400x400.webm`],\n                    red: [l2`Shatter/Shatter_01_Red_400x400.webm`],\n                    blue: [l2`Shatter/Shatter_01_Blue_400x400.webm`],\n                    green: [l2`Shatter/Shatter_01_Green_400x400.webm`],\n                    orange: [l2`Shatter/Shatter_01_Orange_400x400.webm`]\n                }\n            },\n            shields: {\n                '01': {\n                    darkred: [lg`Template/Circle/TemplateShieldCircle_01_Dark_Red_800x800.webm`],\n                    green: [lg`Template/Circle/TemplateShieldCircle_01_Regular_Green_800x800.webm`],\n                },\n            },\n            skull: {\n                '01': {\n                    darkgreen: [lg`Template/Circle/TemplateSkullCircle_01_Dark_Green_800x800.webm`],\n                    darkorange: [lg`Template/Circle/TemplateSkullCircle_01_Dark_Orange_800x800.webm`],\n                    purple: [lg`Template/Circle/TemplateSkullCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            sleetstorm: {\n                '01': {\n                    blue: [l3`Sleet_Storm/SleetStorm_01_Blue_800x800.webm`],\n                    green: [l3`Sleet_Storm/SleetStorm_01_Green_800x800.webm`],\n                    purple: [l3`Sleet_Storm/SleetStorm_01_Purple_800x800.webm`],\n                    tealyellow: [l3`Sleet_Storm/SleetStorm_01_TealYellow_800x800.webm`]\n                }\n            },\n            snowflakes: {\n                '01': {\n                    darkblue: [lg`Template/Circle/TemplateSnowflakeCircle_01_Dark_Blue_800x800.webm`],\n                    blue: [lg`Template/Circle/TemplateSnowflakeCircle_01_Regular_Blue_800x800.webm`],\n                },\n            },\n            stun: {\n                '01': {\n                    darkteal: [lg`Template/Circle/TemplateStunCircle_01_Dark_Teal_800x800.webm`],\n                    purple: [lg`Template/Circle/TemplateStunCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            snowflake: {\n                '01': {\n                    whiteblue: [lg`Ice/SnowflakeBurst_01_Regular_BlueWhite_Burst_600x600.webm`],\n                    greenorange: [lg`Ice/SnowflakeBurst_01_Regular_GreenOrange_Burst_600x600.webm`],\n                    purplepink: [lg`Ice/SnowflakeBurst_01_Regular_PurplePink_Burst_600x600.webm`],\n                    tealyellow: [lg`Ice/SnowflakeBurst_01_Regular_TealYellow_Burst_600x600.webm`],\n                }\n            },\n            vortex: {\n                loop: {\n                    black: [lg`Template/Circle/Vortex_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/Vortex_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/Vortex_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/Vortex_01_Regular_Purple_600x600.webm`]\n                },\n                intro: {\n                    black: [lg`Template/Circle/VortexIntro_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/VortexIntro_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/VortexIntro_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/VortexIntro_01_Regular_Purple_600x600.webm`]\n                },\n                outro: {\n                    black: [lg`Template/Circle/VortexOutro_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/VortexOutro_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/VortexOutro_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/VortexOutro_01_Regular_Purple_600x600.webm`]\n                },\n            },\n            whirl: {\n                loop: {\n                    black: [lg`Template/Circle/Whirl_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/Whirl_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/Whirl_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/Whirl_01_Regular_Purple_600x600.webm`]\n                },\n                intro: {\n                    black: [lg`Template/Circle/WhirlIntro_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/WhirlIntro_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/WhirlIntro_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/WhirlIntro_01_Regular_Purple_600x600.webm`]\n                },\n                outro: {\n                    black: [lg`Template/Circle/WhirlOutro_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/WhirlOutro_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/WhirlOutro_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/WhirlOutro_01_Regular_Purple_600x600.webm`]\n                }\n            },\n        },\n        cone: {\n            breathweapon: {\n                'cold': {\n                    blue: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Cold01_Regular_Blue_30ft_Cone_Burst_600x600.webm`],\n                    green: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Cold01_Regular_Green_30ft_Cone_Burst_600x600.webm`],\n                    orange: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Cold01_Regular_Orange_30ft_Cone_Burst_600x600.webm`],\n                    purple: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Cold01_Regular_Purple_30ft_Cone_Burst_600x600.webm`],\n                },\n                'fire01': {\n                    blue: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_Blue_30ft_Cone_Burst_600x600.webm`],\n                    green: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_Green_30ft_Cone_Burst_600x600.webm`],\n                    multi: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_MultiColor01_30ft_Cone_Burst_600x600.webm`],\n                    multi02: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_MultiColor02_30ft_Cone_Burst_600x600.webm`],\n                    multi03: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_MultiColor03_30ft_Cone_Burst_600x600.webm`],\n                    orange: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_Orange_30ft_Cone_Burst_600x600.webm`],\n                    purple: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_Purple_30ft_Cone_Burst_600x600.webm`],\n                    yellow: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_Yellow_30ft_Cone_Burst_600x600.webm`],\n                },\n                'fire02': {\n                    blue: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire02_Regular_Blue_30ft_Cone_Burst_600x600.webm`],\n                    green: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire02_Regular_Green_30ft_Cone_Burst_600x600.webm`],\n                    multi: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire02_Regular_MultiColor01_30ft_Cone_Burst_600x600.webm`],\n                    multi02: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire02_Regular_MultiColor02_30ft_Cone_Burst_600x600.webm`],\n                    multi03: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire02_Regular_MultiColor03_30ft_Cone_Burst_600x600.webm`],\n                    orange: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire02_Regular_Orange_30ft_Cone_Burst_600x600.webm`],\n                    purple: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire02_Regular_Purple_30ft_Cone_Burst_600x600.webm`],\n                    yellow: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire02_Regular_Yellow_30ft_Cone_Burst_600x600.webm`],\n                },\n                'poison': {\n                    black: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Poison01_Dark_Black_30ft_Cone_Burst_600x600.webm`],\n                    blue: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Poison01_Regular_Blue_30ft_Cone_Burst_600x600.webm`],\n                    darkred: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Poison01_Dark_Red_30ft_Cone_Burst_600x600.webm`],\n                    green: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Poison01_Regular_Green_30ft_Cone_Burst_600x600.webm`],\n                    orange: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Poison01_Regular_Orange_30ft_Cone_Burst_600x600.webm`],\n                    purple: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Poison01_Regular_Purple_30ft_Cone_Burst_600x600.webm`],\n                },\n            },\n            breathweaponspray01: {\n                burst: {\n                    green: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire01_Regular_Green_Cone_Burst_800x800.webm`],\n                    orange: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire01_Regular_Orange_Cone_Burst_800x800.webm`],\n                    yellow: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Holy01_Regular_Yellow_Cone_Burst_800x800.webm`],\n                    purple: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Arcana01_Regular_Purple_Cone_Burst_800x800.webm`],\n                },\n                loop: {\n                    green: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire01_Regular_Green_Cone_Loop_800x800.webm`],\n                    orange: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire01_Regular_Orange_Cone_Loop_800x800.webm`],\n                    yellow: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Holy01_Regular_Yellow_Cone_Loop_800x800.webm`],\n                    purple: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Arcana01_Regular_Purple_Cone_Loop_800x800.webm`],\n                }\n            },\n            breathweaponspray02: {\n                burst: {\n                    green: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire02_Regular_Green_Cone_Burst_800x800.webm`],\n                    orange: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire02_Regular_Orange_Cone_Burst_800x800.webm`],\n                    yellow: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Holy02_Regular_Yellow_Cone_Burst_800x800.webm`],\n                    purple: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Arcana02_Regular_Purple_Cone_Burst_800x800.webm`],\n                },\n                loop: {\n                    green: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire02_Regular_Green_Cone_Loop_800x800.webm`],\n                    orange: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire02_Regular_Orange_Cone_Loop_800x800.webm`],\n                    yellow: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Holy02_Regular_Yellow_Cone_Loop_800x800.webm`],\n                    purple: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Arcana02_Regular_Purple_Cone_Loop_800x800.webm`],\n                }\n            },\n            coneofcold: {\n                '01': {\n                    blue: [l5`Cone_Of_Cold/ConeOfCold_01_Regular_Blue_600x600.webm`],\n                    green: [l5`Cone_Of_Cold/ConeOfCold_01_Regular_Green_600x600.webm`],\n                    orange: [l5`Cone_Of_Cold/ConeOfCold_01_Regular_Orange_600x600.webm`],\n                    purple: [l5`Cone_Of_Cold/ConeOfCold_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            burninghands: {\n                '01': {\n                    blue: [l1`Burning_Hands/BurningHands_01_Regular_Blue_600x600.webm`],\n                    green: [l1`Burning_Hands/BurningHands_01_Regular_Green_600x600.webm`],\n                    orange: [l1`Burning_Hands/BurningHands_01_Regular_Orange_600x600.webm`],\n                    purple: [l1`Burning_Hands/BurningHands_01_Regular_Purple_600x600.webm`],\n                },\n                '02': {\n                    blue: [l1`Burning_Hands/BurningHands_02_Regular_Blue_600x600.webm`],\n                    green: [l1`Burning_Hands/BurningHands_02_Regular_Green_600x600.webm`],\n                    orange: [l1`Burning_Hands/BurningHands_02_Regular_Orange_600x600.webm`],\n                    purple: [l1`Burning_Hands/BurningHands_02_Regular_Purple_600x600.webm`],\n                },\n            },\n        },\n        square: {\n            armsofhadar: {\n                '01': {\n                    darkgreen: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Green_500x500.webm`],\n                    darkpurple: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Purple_500x500.webm`],\n                    darkred: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Red_500x500.webm`],\n                }\n            },\n            blacktentacles: {\n                '01': {\n                    darkgreen: [l4`Black_Tentacles/BlackTentacles_01_Dark_Green_600x600.webm`],\n                    darkpurple: [l4`Black_Tentacles/BlackTentacles_01_Dark_Purple_600x600.webm`],\n                    darkred: [l4`Black_Tentacles/BlackTentacles_01_Dark_Red_600x600.webm`],\n                },\n            },\n            crackedshield: {\n                '01': {\n                    darkred: [lg`Template/Square/TemplateShieldCrackedSquare_01_Dark_Red_600x600.webm`],\n                    darkpurple: [lg`Template/Square/TemplateShieldCrackedSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            drop: {\n                '01': {\n                    darkgreen: [lg`Template/Square/TemplateDropSquare_01_Dark_Green_600x600.webm`],\n                    red: [lg`Template/Square/TemplateDropSquare_01_Regular_Red_600x600.webm`]\n                }\n            },\n            entangle: {\n                '01': {\n                    brown: [l1`Entangle/Entangle_01_Brown_400x400.webm`],\n                    green: [l1`Entangle/Entangle_01_Green_400x400.webm`],\n                    yellow: [l1`Entangle/Entangle_01_Yellow_400x400.webm`],\n                    darkpurple: [l1`Entangle/Entangle_01_Dark_Purple_400x400.webm`],\n                    palegreen: [l1`Entangle/Entangle_01_Regular_Green02_400x400.webm`]\n                }\n            },\n            fear: {\n                '01': {\n                    darkorange: [lg`Template/Square/TemplateFearSquare_01_Dark_Orange_600x600.webm`],\n                    darkpurple: [lg`Template/Square/TemplateFearSquare_01_Dark_Purple_600x600.webm`],\n                    orange: [lg`Template/Square/TemplateFearSquare_01_Regular_Orange_600x600.webm`],\n                },\n            },\n            grease: {\n                \"01\": {\n                    brown: [l1`Grease/Grease_Dark_Brown_600x600.webm`],\n                    green: [l1`Grease/Grease_Dark_Green_600x600.webm`],\n                    grey: [l1`Grease/Grease_Dark_Grey_600x600.webm`],\n                    purple: [l1`Grease/Grease_Dark_Purple_600x600.webm`],\n                }\n            },\n            heart: {\n                '01': {\n                    darkred: [lg`Template/Square/TemplateHeartSquare_01_Dark_Red_600x600.webm`],\n                    pink: [lg`Template/Square/TemplateHeartSquare_01_Regular_Pink_600x600.webm`],\n                    teal: [lg`Template/Square/TemplateHeartSquare_01_Regular_Teal_600x600.webm`],\n                },\n            },\n            horror: {\n                '01': {\n                    darkteal: [lg`Template/Square/TemplateHorrorSquare_01_Dark_Teal_600x600.webm`],\n                    purple: [lg`Template/Square/TemplateHorrorSquare_01_Regular_Purple_600x600.webm`],\n                    teal: [lg`Template/Square/TemplateHorrorSquare_01_Regular_Teal_600x600.webm`],\n                },\n            },\n            musicnote: {\n                '01': {\n                    blue: [lg`Template/Square/TemplateMusicNoteSquare_01_Regular_Blue_600x600.webm`],\n                    darkred: [lg`Template/Square/TemplateMusicNoteSquare_01_Dark_Red_600x600.webm`],\n                    purple: [lg`Template/Square/TemplateMusicNoteSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            poison: {\n                '01': {\n                    darkgreen: [lg`Template/Square/TemplatePoisonSquare_01_Dark_Green_600x600.webm`],\n                    purple: [lg`Template/Square/TemplatePoisonSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            runes: {\n                '01': {\n                    darkorange: [lg`Template/Square/TemplateRunesSquare_01_Dark_Orange_600x600.webm`],\n                    darkred: [lg`Template/Square/TemplateRunesSquare_01_Dark_Red_600x600.webm`],\n                    blue: [lg`Template/Square/TemplateRunesSquare_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Square/TemplateRunesSquare_01_Regular_Green02_600x600.webm`],\n                    orange: [lg`Template/Square/TemplateRunesSquare_01_Regular_Orange_600x600.webm`],\n                },\n            },\n            shields: {\n                '01': {\n                    darkred: [lg`Template/Square/TemplateShieldSquare_01_Dark_Red_600x600.webm`],\n                    green: [lg`Template/Square/TemplateShieldSquare_01_Regular_Green_600x600.webm`],\n                },\n            },\n            snowflakes: {\n                '01': {\n                    darkblue: [lg`Template/Square/TemplateSnowflakeSquare_01_Dark_Blue_600x600.webm`],\n                    blue: [lg`Template/Square/TemplateSnowflakeSquare_01_Regular_Blue_600x600.webm`],\n                },\n            },\n            skull: {\n                '01': {\n                    darkgreen: [lg`Template/Square/TemplateSkullSquare_01_Dark_Green_600x600.webm`],\n                    darkorange: [lg`Template/Square/TemplateSkullSquare_01_Dark_Orange_600x600.webm`],\n                    purple: [lg`Template/Square/TemplateSkullSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            stun: {\n                '01': {\n                    darkteal: [lg`Template/Square/TemplateStunSquare_01_Dark_Teal_600x600.webm`],\n                    purple: [lg`Template/Square/TemplateStunSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            thunderwave: {\n                left: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_BLeft_600x600.webm`],\n                    green: [l1`Thunderwave/Thunderwave_01_Bright_Green_BLeft_600x600.webm`],\n                    orange: [l1`Thunderwave/Thunderwave_01_Bright_Orange_BLeft_600x600.webm`],\n                    purple: [l1`Thunderwave/Thunderwave_01_Dark_Purple_BLeft_600x600.webm`],\n                    red: [l1`Thunderwave/Thunderwave_01_Dark_Red_BLeft_600x600.webm`],\n                },\n                mid: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_BMid_600x600.webm`],\n                    green: [l1`Thunderwave/Thunderwave_01_Bright_Green_BMid_600x600.webm`],\n                    orange: [l1`Thunderwave/Thunderwave_01_Bright_Orange_BMid_600x600.webm`],\n                    purple: [l1`Thunderwave/Thunderwave_01_Dark_Purple_BMid_600x600.webm`],\n                    red: [l1`Thunderwave/Thunderwave_01_Dark_Red_BMid_600x600.webm`],\n                },\n                center: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_Center_600x600.webm`],\n                    green: [l1`Thunderwave/Thunderwave_01_Bright_Green_Center_600x600.webm`],\n                    orange: [l1`Thunderwave/Thunderwave_01_Bright_Orange_Center_600x600.webm`],\n                    purple: [l1`Thunderwave/Thunderwave_01_Dark_Purple_Center_600x600.webm`],\n                    red: [l1`Thunderwave/Thunderwave_01_Dark_Red_Center_600x600.webm`],\n                },\n            },\n            web: {\n                '01': {\n                    white: [l2`Web/Web_01_White_01_400x400.webm`]\n                },\n                '02': {\n                    white: [l2`Web/Web_01_White_02_400x400.webm`]\n                }\n            },\n        },\n        ray: {\n            breathweapon: {\n                acid: {\n                    blue: [lg`Template/Line/Breath_Weapon/BreathWeapon_Acid01_Regular_Blue_30ft_Line_Burst_1200x200.webm`],\n                    green: [lg`Template/Line/Breath_Weapon/BreathWeapon_Acid01_Regular_Green_30ft_Line_Burst_1200x200.webm`],\n                    orange: [lg`Template/Line/Breath_Weapon/BreathWeapon_Acid01_Regular_Orange_30ft_Line_Burst_1200x200.webm`],\n                    purple: [lg`Template/Line/Breath_Weapon/BreathWeapon_Acid01_Regular_Purple_30ft_Line_Burst_1200x200.webm`],\n                },\n                fire: {\n                    blue: [lg`Template/Line/Breath_Weapon/BreathWeapon_Fire01_Regular_Blue_30ft_Line_Burst_1200x200.webm`],\n                    green: [lg`Template/Line/Breath_Weapon/BreathWeapon_Fire01_Regular_Green_30ft_Line_Burst_1200x200.webm`],\n                    orange: [lg`Template/Line/Breath_Weapon/BreathWeapon_Fire01_Regular_Orange_30ft_Line_Burst_1200x200.webm`],\n                    purple: [lg`Template/Line/Breath_Weapon/BreathWeapon_Fire01_Regular_Purple_30ft_Line_Burst_1200x200.webm`],\n                },\n                lightning: {\n                    blue: [lg`Template/Line/Breath_Weapon/BreathWeapon_Lightning01_Regular_Blue_30ft_Line_Burst_1200x200.webm`],\n                    green: [lg`Template/Line/Breath_Weapon/BreathWeapon_Lightning01_Regular_Green_30ft_Line_Burst_1200x200.webm`],\n                    orange: [lg`Template/Line/Breath_Weapon/BreathWeapon_Lightning01_Regular_Orange_30ft_Line_Burst_1200x200.webm`],\n                    purple: [lg`Template/Line/Breath_Weapon/BreathWeapon_Lightning01_Regular_Purple_30ft_Line_Burst_1200x200.webm`],\n                },\n\n            },\n            breathweaponspray01: {\n                burst: {\n                    green: [lg`Template/Line/Breath_Weapon/Breathweapon02_Fire01_Regular_Green_Line_Burst_1200x400.webm`],\n                    orange: [lg`Template/Line/Breath_Weapon/Breathweapon02_Fire01_Regular_Orange_Line_Burst_1200x400.webm`],\n                    yellow: [lg`Template/Line/Breath_Weapon/Breathweapon02_Holy01_Regular_Yellow_Line_Burst_1200x400.webm`],\n                    purple: [lg`Template/Line/Breath_Weapon/Breathweapon02_Arcana01_Regular_Purple_Line_Burst_1200x400.webm`],\n                },\n                loop: {\n                    green: [lg`Template/Line/Breath_Weapon/Breathweapon02_Fire01_Regular_Green_Line_Loop_1200x400.webm`],\n                    orange: [lg`Template/Line/Breath_Weapon/Breathweapon02_Fire01_Regular_Orange_Line_Loop_1200x400.webm`],\n                    yellow: [lg`Template/Line/Breath_Weapon/Breathweapon02_Holy01_Regular_Yellow_Line_Loop_1200x400.webm`],\n                    purple: [lg`Template/Line/Breath_Weapon/Breathweapon02_Arcana01_Regular_Purple_Line_Loop_1200x400.webm`],\n                }\n            },\n            lightningbolt: {\n                '01': {\n                    darkblue: [l3`Lightning_Bolt/LightningBolt_01_Dark_Blue_4000x200.webm`],\n                    blue: [l3`Lightning_Bolt/LightningBolt_01_Regular_Blue_4000x200.webm`],\n                    green: [l3`Lightning_Bolt/LightningBolt_01_Regular_Green_4000x200.webm`],\n                    orange: [l3`Lightning_Bolt/LightningBolt_01_Regular_Orange_4000x200.webm`],\n                    purple: [l3`Lightning_Bolt/LightningBolt_01_Regular_Purple_4000x200.webm`],\n                    red: [l3`Lightning_Bolt/LightningBolt_01_Regular_Red_4000x200.webm`],\n                },\n                '02': {\n                    darkblue: [l3`Lightning_Bolt/LightningBolt_01_Dark_Blue_4000x400.webm`],\n                    blue: [l3`Lightning_Bolt/LightningBolt_01_Regular_Blue_4000x400.webm`],\n                    green: [l3`Lightning_Bolt/LightningBolt_01_Regular_Green_4000x400.webm`],\n                    orange: [l3`Lightning_Bolt/LightningBolt_01_Regular_Orange_4000x400.webm`],\n                    purple: [l3`Lightning_Bolt/LightningBolt_01_Regular_Purple_4000x400.webm`],\n                    red: [l3`Lightning_Bolt/LightningBolt_01_Regular_Red_4000x400.webm`],\n                }\n            },\n            gustofwind: {\n                slow: {\n                    white: [l2`Gust_Of_Wind/GustOfWind_01_White_1200x200.webm`]\n                },\n                fast: {\n                    white: [l2`Gust_Of_Wind/GustOfWind_01_White_VeryFast_1200x200.webm`]\n                },\n            },\n\n        },\n    }\n\n    /**\n     * Static Types:\n     * \n     * Conditions\n     * Creature\n     * Energy\n     * Fire\n     * Generic\n     * Ice\n     * Lightning\n     * Liquid\n     * Magic Signs\n     * Marker\n     * Music\n     * Particles\n     * Shield Effects\n     * Spell\n     * Token Border\n     * \n     */\n    JB2APATREONDB.static = {\n        chains: {\n            diamond: {\n                '01': {\n                    blue: [lg`Marker/MarkerChainDiamond01_01_Regular_Blue_Loop_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainDiamond01_01_Regular_Purple_Loop_400x400.webm`],\n                    red: [lg`Marker/MarkerChainDiamond01_01_Regular_Red_Loop_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainDiamond01_01_Regular_Yellow_Loop_400x400.webm`],\n                },\n                complete: {\n                    _markers: {\n                        loop: { start: 2033, end: 7000 },\n                        forcedEnd: 7933\n                    },\n                    blue: [lg`Marker/MarkerChainDiamond01_02_Regular_Blue_Complete_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainDiamond01_02_Regular_Purple_Complete_400x400.webm`],\n                    red: [lg`Marker/MarkerChainDiamond01_02_Regular_Red_Complete_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainDiamond01_02_Regular_Yellow_Complete_400x400.webm`],\n                },\n                loop: {\n                    blue: [lg`Marker/MarkerChainDiamond01_02_Regular_Blue_Loop_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainDiamond01_02_Regular_Purple_Loop_400x400.webm`],\n                    red: [lg`Marker/MarkerChainDiamond01_02_Regular_Red_Loop_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainDiamond01_02_Regular_Yellow_Loop_400x400.webm`],\n                },\n            },\n            spike: {\n                '01': {\n                    blue: [lg`Marker/MarkerChainSpike01_01_Regular_Blue_Loop_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainSpike01_01_Regular_Purple_Loop_400x400.webm`],\n                    red: [lg`Marker/MarkerChainSpike01_01_Regular_Red_Loop_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainSpike01_01_Regular_Yellow_Loop_400x400.webm`],\n                },\n                complete: {\n                    _markers: {\n                        loop: { start: 2033, end: 7000 },\n                        forcedEnd: 7933\n                    },\n                    blue: [lg`Marker/MarkerChainSpike01_02_Regular_Blue_Complete_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainSpike01_02_Regular_Purple_Complete_400x400.webm`],\n                    red: [lg`Marker/MarkerChainSpike01_02_Regular_Red_Complete_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainSpike01_02_Regular_Yellow_Complete_400x400.webm`],\n                },\n                loop: {\n                    blue: [lg`Marker/MarkerChainSpike01_02_Regular_Blue_Loop_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainSpike01_02_Regular_Purple_Loop_400x400.webm`],\n                    red: [lg`Marker/MarkerChainSpike01_02_Regular_Red_Loop_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainSpike01_02_Regular_Yellow_Loop_400x400.webm`],\n                },\n            },\n            square: {\n                '01': {\n                    blue: [lg`Marker/MarkerChainSquare01_01_Regular_Blue_Loop_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainSquare01_01_Regular_Purple_Loop_400x400.webm`],\n                    red: [lg`Marker/MarkerChainSquare01_01_Regular_Red_Loop_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainSquare01_01_Regular_Yellow_Loop_400x400.webm`],\n                },\n                complete: {\n                    _markers: {\n                        loop: { start: 2033, end: 7000 },\n                        forcedEnd: 7933\n                    },\n                    blue: [lg`Marker/MarkerChainSquare01_02_Regular_Blue_Complete_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainSquare01_02_Regular_Purple_Complete_400x400.webm`],\n                    red: [lg`Marker/MarkerChainSquare01_02_Regular_Red_Complete_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainSquare01_02_Regular_Yellow_Complete_400x400.webm`],\n                },\n                loop: {\n                    blue: [lg`Marker/MarkerChainSquare01_02_Regular_Blue_Loop_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainSquare01_02_Regular_Purple_Loop_400x400.webm`],\n                    red: [lg`Marker/MarkerChainSquare01_02_Regular_Red_Loop_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainSquare01_02_Regular_Yellow_Loop_400x400.webm`],\n                },\n            },\n            standard: {\n                '01': {\n                    blue: [lg`Marker/MarkerChainStandard01_01_Regular_Blue_Loop_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainStandard01_01_Regular_Purple_Loop_400x400.webm`],\n                    red: [lg`Marker/MarkerChainStandard01_01_Regular_Red_Loop_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainStandard01_01_Regular_Yellow_Loop_400x400.webm`],\n                },\n                complete: {\n                    _markers: {\n                        loop: { start: 2033, end: 7000 },\n                        forcedEnd: 7933\n                    },\n                    blue: [lg`Marker/MarkerChainStandard01_02_Regular_Blue_Complete_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainStandard01_02_Regular_Purple_Complete_400x400.webm`],\n                    red: [lg`Marker/MarkerChainStandard01_02_Regular_Red_Complete_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainStandard01_02_Regular_Yellow_Complete_400x400.webm`],\n                },\n                loop: {\n                    blue: [lg`Marker/MarkerChainStandard01_02_Regular_Blue_Loop_400x400.webm`],\n                    purple: [lg`Marker/MarkerChainStandard01_02_Regular_Purple_Loop_400x400.webm`],\n                    red: [lg`Marker/MarkerChainStandard01_02_Regular_Red_Loop_400x400.webm`],\n                    yellow: [lg`Marker/MarkerChainStandard01_02_Regular_Yellow_Loop_400x400.webm`],\n                },\n            }\n        },\n        conditions: {\n            drop: {\n                '01': {\n                    green: [lg`Marker/MarkerDrop_01_Dark_Green_400x400.webm`],\n                    red: [lg`Marker/MarkerDrop_01_Regular_Red_400x400.webm`],\n                },\n                '02': {\n                    green: [lg`Marker/MarkerDrop_02_Dark_Green_400x400.webm`],\n                    red: [lg`Marker/MarkerDrop_02_Regular_Red_400x400.webm`],\n                },\n                '03': {\n                    green: [lg`Marker/MarkerDrop_03_Dark_Green_400x400.webm`],\n                    red: [lg`Marker/MarkerDrop_03_Regular_Red_400x400.webm`],\n                },\n            },\n            fear: {\n                '01': {\n                    orange: [lg`Marker/MarkerFear_01_Regular_Orange_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerFear_01_Dark_Orange_400x400.webm`],\n                    darkpurple: [lg`Marker/MarkerFear_01_Dark_Purple_400x400.webm`],\n                },\n                '02': {\n                    orange: [lg`Marker/MarkerFear_02_Regular_Orange_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerFear_02_Dark_Orange_400x400.webm`],\n                    darkpurple: [lg`Marker/MarkerFear_02_Dark_Purple_400x400.webm`],\n                },\n                '03': {\n                    orange: [lg`Marker/MarkerFear_03_Regular_Orange_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerFear_03_Dark_Orange_400x400.webm`],\n                    darkpurple: [lg`Marker/MarkerFear_03_Dark_Purple_400x400.webm`],\n                },\n            },\n            heart: {\n                '01': {\n                    darkred: [lg`Marker/MarkerHeart_01_Dark_Red_400x400.webm`],\n                    pink: [lg`Marker/MarkerHeart_01_Regular_Pink_400x400.webm`],\n                    teal: [lg`Marker/MarkerHeart_01_Regular_Teal_400x400.webm`],\n                },\n                '02': {\n                    darkred: [lg`Marker/MarkerHeart_02_Dark_Red_400x400.webm`],\n                    pink: [lg`Marker/MarkerHeart_02_Regular_Pink_400x400.webm`],\n                    teal: [lg`Marker/MarkerHeart_02_Regular_Teal_400x400.webm`],\n                },\n                '03': {\n                    darkred: [lg`Marker/MarkerHeart_03_Dark_Red_400x400.webm`],\n                    pink: [lg`Marker/MarkerHeart_03_Regular_Pink_400x400.webm`],\n                    teal: [lg`Marker/MarkerHeart_03_Regular_Teal_400x400.webm`],\n                },\n            },\n            horror: {\n                '01': {\n                    purple: [lg`Marker/MarkerHorror_01_Regular_Purple_400x400.webm`],\n                    teal: [lg`Marker/MarkerHorror_01_Regular_Teal_400x400.webm`],\n                    darkteal: [lg`Marker/MarkerHorror_01_Dark_Teal_400x400.webm`],\n                },\n                '02': {\n                    purple: [lg`Marker/MarkerHorror_02_Regular_Purple_400x400.webm`],\n                    teal: [lg`Marker/MarkerHorror_02_Dark_Teal_400x400.webm`],\n                    darkteal: [lg`Marker/MarkerHorror_02_Dark_Teal_400x400.webm`],\n                },\n                '03': {\n                    purple: [lg`Marker/MarkerHorror_03_Regular_Purple_400x400.webm`],\n                    teal: [lg`Marker/MarkerHorror_02_Regular_Teal_400x400.webm`],\n                    darkteal: [lg`Marker/MarkerHorror_03_Dark_Teal_400x400.webm`],\n                },\n            },\n            light: {\n                pulse: {\n                    blue: [lg`Marker/MarkerLight_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Marker/MarkerLight_01_Regular_Green_400x400.webm`],\n                    yellow: [lg`Marker/MarkerLight_01_Regular_Yellow_400x400.webm`],\n                },\n                nopulse: {\n                    blue: [lg`Marker/MarkerLightNoPulse_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Marker/MarkerLightNoPulse_01_Regular_Green_400x400.webm`],\n                    yellow: [lg`Marker/MarkerLightNoPulse_01_Regular_Yellow_400x400.webm`],\n                },\n            },\n            poison: {\n                '01': {\n                    darkgreen: [lg`Marker/MarkerPoison_01_Dark_Green_400x400.webm`],\n                    purple: [lg`Marker/MarkerPoison_01_Regular_Purple_400x400.webm`],\n                },\n                '02': {\n                    darkgreen: [lg`Marker/MarkerPoison_02_Dark_Green_400x400.webm`],\n                    purple: [lg`Marker/MarkerPoison_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    darkgreen: [lg`Marker/MarkerPoison_03_Dark_Green_400x400.webm`],\n                    purple: [lg`Marker/MarkerPoison_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            runes: {\n                '01': {\n                    black: [lg`Marker/MarkerRunes_01_Dark_Black_400x400.webm`],\n                    blue: [lg`Marker/MarkerRunes_01_Regular_Blue_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerRunes_01_Dark_Orange_400x400.webm`],\n                    green: [lg`Marker/MarkerRunes_01_Regular_Green02_400x400.webm`],\n                    orange: [lg`Marker/MarkerRunes_01_Regular_Orange_400x400.webm`],\n                    darkred: [lg`Marker/MarkerRunes_01_Dark_Red_400x400.webm`],\n                    red: [lg`Marker/MarkerRunes_01_Regular_Red_400x400.webm`],\n                    yellow: [lg`Marker/MarkerRunes_01_Regular_Yellow_400x400.webm`],\n                    white: [lg`Marker/MarkerRunes_01_Regular_White_400x400.webm`],\n                },\n                '02': {\n                    black: [lg`Marker/MarkerRunes_02_Dark_Black_400x400.webm`],\n                    blue: [lg`Marker/MarkerRunes_02_Regular_Blue_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerRunes_02_Dark_Orange_400x400.webm`],\n                    green: [lg`Marker/MarkerRunes_02_Regular_Green02_400x400.webm`],\n                    orange: [lg`Marker/MarkerRunes_02_Regular_Orange_400x400.webm`],\n                    darkred: [lg`Marker/MarkerRunes_02_Dark_Red_400x400.webm`],\n                    red: [lg`Marker/MarkerRunes_02_Regular_Red_400x400.webm`],\n                    yellow: [lg`Marker/MarkerRunes_02_Regular_Yellow_400x400.webm`],\n                    white: [lg`Marker/MarkerRunes_02_Regular_White_400x400.webm`],\n                },\n                '03': {\n                    black: [lg`Marker/MarkerRunes_03_Dark_Black_400x400.webm`],\n                    blue: [lg`Marker/MarkerRunes_03_Regular_Blue_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerRunes_03_Dark_Orange_400x400.webm`],\n                    green: [lg`Marker/MarkerRunes_03_Regular_Green02_400x400.webm`],\n                    orange: [lg`Marker/MarkerRunes_03_Regular_Orange_400x400.webm`],\n                    darkred: [lg`Marker/MarkerRunes_03_Dark_Red_400x400.webm`],\n                    red: [lg`Marker/MarkerRunes_02_Regular_Red_400x400.webm`],\n                    yellow: [lg`Marker/MarkerRunes_03_Regular_Yellow_400x400.webm`],\n                    white: [lg`Marker/MarkerRunes_03_Regular_White_400x400.webm`],\n                },\n            },\n            shields: {\n                '01': {\n                    blue: [lg`Marker/MarkerShield_01_Regular_Blue_400x400.webm`],\n                    darkred: [lg`Marker/MarkerShield_01_Dark_Red_400x400.webm`],\n                    green: [lg`Marker/MarkerShield_01_Regular_Green_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Marker/MarkerShield_02_Regular_Blue_400x400.webm`],\n                    darkred: [lg`Marker/MarkerShield_02_Dark_Red_400x400.webm`],\n                    green: [lg`Marker/MarkerShield_02_Regular_Green_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Marker/MarkerShield_03_Regular_Blue_400x400.webm`],\n                    darkred: [lg`Marker/MarkerShield_03_Dark_Red_400x400.webm`],\n                    green: [lg`Marker/MarkerShield_03_Regular_Green_400x400.webm`],\n                },\n            },\n            crackedshield: {\n                '01': {\n                    darkred: [lg`Marker/MarkerShieldCracked_01_Dark_Red_400x400.webm`],\n                    purple: [lg`Marker/MarkerShieldCracked_01_Regular_Purple_400x400.webm`],\n                },\n                '02': {\n                    darkred: [lg`Marker/MarkerShieldCracked_02_Dark_Red_400x400.webm`],\n                    purple: [lg`Marker/MarkerShieldCracked_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    darkred: [lg`Marker/MarkerShieldCracked_03_Dark_Red_400x400.webm`],\n                    purple: [lg`Marker/MarkerShieldCracked_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            skull: {\n                '01': {\n                    darkgreen: [lg`Marker/MarkerSkull_01_Dark_Green_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerSkull_01_Dark_Orange_400x400.webm`],\n                    purple: [lg`Marker/MarkerSkull_01_Regular_Purple_400x400.webm`],\n                },\n                '02': {\n                    darkgreen: [lg`Marker/MarkerSkull_02_Dark_Green_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerSkull_02_Dark_Orange_400x400.webm`],\n                    purple: [lg`Marker/MarkerSkull_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    darkgreen: [lg`Marker/MarkerSkull_03_Dark_Green_400x400.webm`],\n                    darkorange: [lg`Marker/MarkerSkull_03_Dark_Orange_400x400.webm`],\n                    purple: [lg`Marker/MarkerSkull_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            snowflakes: {\n                '01': {\n                    darkblue: [lg`Marker/MarkerSnowflake_01_Dark_Blue_400x400.webm`],\n                    blue: [lg`Marker/MarkerSnowflake_01_Regular_Blue_400x400.webm`],\n                },\n                '02': {\n                    darkblue: [lg`Marker/MarkerSnowflake_02_Dark_Blue_400x400.webm`],\n                    blue: [lg`Marker/MarkerSnowflake_02_Regular_Blue_400x400.webm`],\n                },\n                '03': {\n                    darkblue: [lg`Marker/MarkerSnowflake_03_Dark_Blue_400x400.webm`],\n                    blue: [lg`Marker/MarkerSnowflake_03_Regular_Blue_400x400.webm`],\n                },\n            },\n            stun: {\n                '01': {\n                    darkteal: [lg`Marker/MarkerStun_01_Dark_Teal_400x400.webm`],\n                    purple: [lg`Marker/MarkerStun_01_Regular_Purple_400x400.webm`],\n                },\n                '02': {\n                    darkteal: [lg`Marker/MarkerStun_02_Dark_Teal_400x400.webm`],\n                    purple: [lg`Marker/MarkerStun_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    darkteal: [lg`Marker/MarkerStun_03_Dark_Teal_400x400.webm`],\n                    purple: [lg`Marker/MarkerStun_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            dizzystars: {\n                '01': {\n                    black: [lg`Conditions/Dizzy_Stars/DizzyStars_01_Black_400x400.webm`],\n                    blueorange: [lg`Conditions/Dizzy_Stars/DizzyStars_01_BlueOrange_400x400.webm`],\n                    green: [lg`Conditions/Dizzy_Stars/DizzyStars_01_Green_400x400.webm`],\n                    orange: [lg`Conditions/Dizzy_Stars/DizzyStars_01_Orange_400x400.webm`],\n                    pink: [lg`Conditions/Dizzy_Stars/DizzyStars_01_Pink_400x400.webm`],\n                    purple: [lg`Conditions/Dizzy_Stars/DizzyStars_01_Purple_400x400.webm`],\n                    red: [lg`Conditions/Dizzy_Stars/DizzyStars_01_Red_400x400.webm`],\n                    white: [lg`Conditions/Dizzy_Stars/DizzyStars_01_White_400x400.webm`],\n                    yellow: [lg`Conditions/Dizzy_Stars/DizzyStars_01_Yellow_400x400.webm`]\n                }\n            },\n        },\n        creature: {\n            bite: {\n                '01': {\n                    red: [lg`Creature/Bite_01_Regular_Red_400x400.webm`],\n                    blue: [lg`Creature/Bite_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Creature/Bite_01_Regular_Green_400x400.webm`],\n                    grey: [lg`Creature/Bite_01_Regular_Grey_400x400.webm`],\n                    orange: [lg`Creature/Bite_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Creature/Bite_01_Regular_Purple_400x400.webm`],\n                    yellow: [lg`Creature/Bite_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            claw: {\n                '01': {\n                    blue: [lg`Creature/Claws_01_Bright_Blue_400x400.webm`],\n                    brown: [lg`Creature/Claws_01_Regular_Brown_400x400.webm`],\n                    darkred: [lg`Creature/Claws_01_Dark_Red_400x400.webm`],\n                    green: [lg`Creature/Claws_01_Bright_Green_400x400.webm`],\n                    orange: [lg`Creature/Claws_01_Bright_Orange_400x400.webm`],\n                    purple: [lg`Creature/Claws_01_Bright_Purple_400x400.webm`],\n                    red: [lg`Creature/Claws_01_Regular_Red_400x400.webm`],\n                    yellow: [lg`Creature/Claws_01_Bright_Yellow_400x400.webm`],\n                }\n            },\n        },\n        energy: {\n            energyfield: {\n                '01': {\n                    blue: [lg`Energy/EnergyField_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Energy/EnergyField_01_Regular_Green_600x600.webm`],\n                    rainbow: [lg`Energy/EnergyField_01_Regular_Rainbow_600x600.webm`],\n                }\n            },\n            dodecahedron: {\n                simple: {\n                    blue: [lg`Energy/Dodecahedron_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Energy/Dodecahedron_01_Regular_Green_600x600.webm`],\n                },\n                rolled: {\n                    blue: [lg`Energy/DodecahedronRoll_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Energy/DodecahedronRoll_01_Regular_Green_600x600.webm`],\n                },\n                runeabove: {\n                    yellowblue: [lg`Energy/DodecahedronRuneAbove_01_Regular_BlueYellow_600x600.webm`],\n                    darkgreenpurple: [lg`Energy/DodecahedronRuneAbove_01_Dark_GreenPurple_600x600.webm`],\n                },\n                runebelow: {\n                    yellowblue: [lg`Energy/DodecahedronRuneBelow_01_Regular_BlueYellow_600x600.webm`],\n                    darkgreenpurple: [lg`Energy/DodecahedronRuneBelow_01_Dark_GreenPurple_600x600.webm`],\n                },\n                skullabove: {\n                    darkgreenpurple: [lg`Energy/DodecahedronSkullAbove_01_Dark_GreenPurple_600x600.webm`],\n                },\n                skullbelow: {\n                    darkgreenpurple: [lg`Energy/DodecahedronSkullBelow_01_Dark_GreenPurple_600x600.webm`],\n                },\n                starabove: {\n                    yellowblue: [lg`Energy/DodecahedronStarAbove_01_Regular_BlueYellow_600x600.webm`],\n                },\n                starbelow: {\n                    yellowblue: [lg`Energy/DodecahedronStarBelow_01_Regular_BlueYellow_600x600.webm`],\n                },\n            },\n            shimmer: {\n                '01': {\n                    blue: [lg`Energy/Shimmer01_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Energy/Shimmer01_01_Regular_Green_400x400.webm`],\n                    orange: [lg`Energy/Shimmer01_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Energy/Shimmer01_01_Regular_Purple_400x400.webm`]\n                },\n            },\n            sparkles: {\n                '01': {\n                    blue: [lg`Energy/SwirlingSparkles_01_Regular_Blue_400x400.webm`],\n                    bluepink: [lg`Energy/SwirlingSparkles_01_Regular_BluePink_400x400.webm`],\n                    greenorange: [lg`Energy/SwirlingSparkles_01_Regular_GreenOrange_400x400.webm`],\n                    orangepurple: [lg`Energy/SwirlingSparkles_01_Regular_OrangePurple_400x400.webm`],\n                },\n            },\n            strands: {\n                '01': {\n                    blue: [lg`Energy/EnergyStrandIN01_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Energy/EnergyStrandIN01_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Energy/EnergyStrandIN01_01_Regular_Purple_600x600.webm`],\n                    red: [lg`Energy/EnergyStrandIN01_01_Regular_Red_600x600.webm`],\n                    yellow: [lg`Energy/EnergyStrandIN01_01_Regular_Yellow_600x600.webm`],\n                },\n                '02': {\n                    blue: [lg`Energy/EnergyStrandIN01_02_Regular_Blue_600x600.webm`],\n                    green: [lg`Energy/EnergyStrandIN01_02_Regular_Green_600x600.webm`],\n                    purple: [lg`Energy/EnergyStrandIN01_02_Regular_Purple_600x600.webm`],\n                    red: [lg`Energy/EnergyStrandIN01_02_Regular_Red_600x600.webm`],\n                    yellow: [lg`Energy/EnergyStrandIN01_02_Regular_Yellow_600x600.webm`],\n                },\n                '03': {\n                    blue: [lg`Energy/EnergyStrandIN01_03_Regular_Blue_600x600.webm`],\n                    green: [lg`Energy/EnergyStrandIN01_03_Regular_Green_600x600.webm`],\n                    purple: [lg`Energy/EnergyStrandIN01_03_Regular_Purple_600x600.webm`],\n                    red: [lg`Energy/EnergyStrandIN01_03_Regular_Red_600x600.webm`],\n                    yellow: [lg`Energy/EnergyStrandIN01_03_Regular_Yellow_600x600.webm`],\n                },\n            },\n        },\n        fire: {\n            eruption: {\n                '01': {\n                    blue: [lg`Fire/Eruption_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Fire/Eruption_01_Regular_Green_600x600.webm`],\n                    orange: [lg`Fire/Eruption_01_Regular_Orange_600x600.webm`]\n                },\n            },\n            groundcrack: {\n                '01': {\n                    blue: [lg`Fire/GroundCrackLoop_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Fire/GroundCrackLoop_01_Regular_Green_600x600.webm`],\n                    orange: [lg`Fire/GroundCrackLoop_01_Regular_Orange_600x600.webm`],\n                    purple: [lg`Fire/GroundCrackLoop_01_Regular_Purple_600x600.webm`],\n                },\n                '02': {\n                    blue: [lg`Fire/GroundCrackLoop_02_Regular_Blue_600x600.webm`],\n                    green: [lg`Fire/GroundCrackLoop_02_Regular_Green_600x600.webm`],\n                    orange: [lg`Fire/GroundCrackLoop_02_Regular_Orange_600x600.webm`],\n                    purple: [lg`Fire/GroundCrackLoop_02_Regular_Purple_600x600.webm`],\n                },\n                '03': {\n                    blue: [lg`Fire/GroundCrackLoop_03_Regular_Blue_600x600.webm`],\n                    green: [lg`Fire/GroundCrackLoop_03_Regular_Green_600x600.webm`],\n                    orange: [lg`Fire/GroundCrackLoop_03_Regular_Orange_600x600.webm`],\n                    purple: [lg`Fire/GroundCrackLoop_03_Regular_Purple_600x600.webm`],\n                },\n            },\n            fireworks: {\n                '01': {\n                    green: [\n                        lg`Fireworks/Firework02_01_Regular_Green_600x600.webm`,\n                    ],\n                    greenorange: [\n                        lg`Fireworks/Firework01_01_Regular_GreenOrange_600x600.webm`,\n                    ],\n                    greenred: [\n                        lg`Fireworks/Firework01_01_Regular_GreenRed_600x600.webm`,\n                        lg`Fireworks/Firework03_01_Regular_GreenRed_600x600.webm`,\n                    ],\n                    orange: [\n                        lg`Fireworks/Firework02_01_Regular_Orange_600x600.webm`,\n                    ],\n                    orangeyellow: [\n                        lg`Fireworks/Firework01_01_Regular_OrangeYellow_600x600.webm`,\n                        lg`Fireworks/Firework03_01_Regular_OrangeYellow_600x600.webm`,\n                    ],\n                    yellow: [\n                        lg`Fireworks/Firework02_01_Regular_Yellow_600x600.webm`,\n                    ],\n                    bluepink: [\n                        lg`Fireworks/Firework03_01_Regular_BluePink_600x600.webm`,\n                    ],\n                },\n                '02': {\n                    green: [\n                        lg`Fireworks/Firework02_02_Regular_Green_600x600.webm`,\n                    ],\n                    greenorange: [\n                        lg`Fireworks/Firework01_02_Regular_GreenOrange_600x600.webm`,\n                    ],\n                    greenred: [\n                        lg`Fireworks/Firework03_02_Regular_GreenRed_600x600.webm`,\n                    ],\n                    orange: [\n                        lg`Fireworks/Firework02_02_Regular_Orange_600x600.webm`,\n                    ],\n                    orangeyellow: [\n                        lg`Fireworks/Firework01_02_Regular_OrangeYellow_600x600.webm`,\n                        lg`Fireworks/Firework03_02_Regular_OrangeYellow_600x600.webm`,\n                    ],\n                    yellow: [\n                        lg`Fireworks/Firework02_02_Regular_Yellow_600x600.webm`,\n                        lg`Fireworks/Firework03_02_Regular_OrangeYellow_600x600.webm`,\n                    ],\n                    bluepink: [\n                        lg`Fireworks/Firework03_02_Regular_BluePink_600x600.webm`,\n                    ],\n                },\n            },\n        },\n        generic: {\n            boulderimpact: {\n                '01': {\n                    white: [lg`Impact/BoulderImpact_01_Regular_White_500x500.webm`]\n                }\n            },\n            explosion: {\n                '01': {\n                    darkblue: [\n                        lg`Explosion/Explosion_05_Dark_Blue_400x400.webm`,\n                    ],\n                    darkgreen: [\n                        lg`Explosion/Explosion_05_Dark_Green_400x400.webm`,\n                    ],\n                    darkorange: [\n                        lg`Explosion/Explosion_05_Dark_Orange_400x400.webm`,\n                    ],\n                    darkpurple: [\n                        lg`Explosion/Explosion_04_Dark_Purple_400x400.webm`,\n                    ],\n                    darkred: [\n                        lg`Explosion/Explosion_04_Dark_Red_400x400.webm`,\n                    ],\n                    blue: [\n                        lg`Explosion/Explosion_01_Blue_400x400.webm`,\n                        lg`Explosion/Explosion_02_Blue_400x400.webm`,\n                        lg`Explosion/Explosion_04_Regular_Blue_400x400.webm`,\n                        lg`Explosion/Explosion_05_Regular_Blue_400x400.webm`,\n                    ],\n                    green: [\n                        lg`Explosion/Explosion_01_Green_400x400.webm`,\n                        lg`Explosion/Explosion_02_Green_400x400.webm`,\n                        lg`Explosion/Explosion_04_Regular_Green_400x400.webm`,\n                        lg`Explosion/Explosion_05_Regular_Green_400x400.webm`,\n                    ],\n                    greenorange: [\n                        lg`Explosion/Explosion_03_Regular_GreenOrange_400x400.webm`,\n                    ],\n                    orange: [\n                        lg`Explosion/Explosion_01_Orange_400x400.webm`,\n                        lg`Explosion/Explosion_02_Orange_400x400.webm`,\n                        lg`Explosion/Explosion_04_Regular_Orange_400x400.webm`,\n                        lg`Explosion/Explosion_05_Regular_Orange_400x400.webm`,\n                    ],\n                    pink: [\n                        lg`Explosion/Explosion_03_Regular_Pink_400x400.webm`,\n                    ],\n                    purplepink: [\n                        lg`Explosion/Explosion_03_Regular_PurplePink_400x400.webm`,\n                    ],\n                    purple: [\n                        lg`Explosion/Explosion_01_Purple_400x400.webm`,\n                        lg`Explosion/Explosion_02_Purple_400x400.webm`,\n                    ],\n                    red: [\n                        lg`Explosion/Explosion_03_Regular_Red_400x400.webm`,\n                    ],\n                    yellow: [\n                        lg`Explosion/Explosion_01_Yellow_400x400.webm`,\n                        lg`Explosion/Explosion_02_Yellow_400x400.webm`,\n                    ],\n                    yellowblue: [\n                        lg`Explosion/Explosion_03_Regular_BlueYellow_400x400.webm`,\n                    ],\n                    whiteblue: [\n                        lg`Explosion/Explosion_03_Dark_BlueWhite_400x400.webm`,\n                    ],\n                }\n            },\n            fire: {\n                ring: {\n                    blue: [lg`Fire/FireRing_01_Circle_Blue_900.webm`],\n                    green: [lg`Fire/FireRing_01_Circle_Green_900.webm`],\n                    red: [lg`Fire/FireRing_01_Circle_Red_900.webm`],\n                }\n            },\n            impact: {\n                '01': {\n                    blue: [\n                        lg`Impact/Impact_01_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_02_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_03_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_04_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_05_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_08_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_09_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_10_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_11_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_12_Regular_Blue_400x400.webm`\n                    ],\n                    darkpurple: [\n                        lg`Impact/Impact_01_Dark_Purple_400x400.webm`,\n                        lg`Impact/Impact_02_Dark_Purple_400x400.webm`,\n                        lg`Impact/Impact_03_Dark_Purple_400x400.webm`,\n                        lg`Impact/Impact_04_Dark_Purple_400x400.webm`,\n                        lg`Impact/Impact_11_Dark_Purple_400x400.webm`,\n                        lg`Impact/Impact_12_Dark_Purple_400x400.webm`\n                    ],\n                    darkred: [\n                        lg`Impact/Impact_01_Dark_Red_400x400.webm`,\n                        lg`Impact/Impact_02_Dark_Red_400x400.webm`,\n                        lg`Impact/Impact_03_Dark_Red_400x400.webm`,\n                        lg`Impact/Impact_04_Dark_Red_400x400.webm`,\n                        lg`Impact/Impact_11_Dark_Red_400x400.webm`,\n                        lg`Impact/Impact_12_Dark_Red_400x400.webm`,\n                    ],\n                    green: [\n                        lg`Impact/Impact_01_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_02_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_03_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_04_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_05_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_08_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_09_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_10_Regular_Green_400x400.webm`,\n                        lg`Impact/Impact_11_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_12_Regular_Blue_400x400.webm`\n                    ],\n                    orange: [\n                        lg`Impact/Impact_01_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_02_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_03_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_04_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_05_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_08_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_09_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_10_Regular_Orange_400x400.webm`,\n                    ],\n                    pink: [\n                        lg`Impact/Impact_07_Regular_Pink_400x400.webm`,\n                        lg`Impact/Impact_09_Regular_Pink_400x400.webm`,\n                    ],\n                    purplepink: [\n                        lg`Impact/Impact_01_Regular_PinkPurple_400x400.webm`,\n                        lg`Impact/Impact_02_Regular_PinkPurple_400x400.webm`,\n                        lg`Impact/Impact_03_Regular_PinkPurple_400x400.webm`,\n                        lg`Impact/Impact_04_Regular_PinkPurple_400x400.webm`,\n                    ],\n                    purple: [\n                        lg`Impact/Impact_05_Regular_Purple_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Purple_400x400.webm`,\n                        lg`Impact/Impact_09_Regular_Purple_400x400.webm`,\n                        lg`Impact/Impact_11_Regular_Purple_400x400.webm`,\n                        lg`Impact/Impact_12_Regular_Purple_400x400.webm`\n                    ],\n                    red: [\n                        lg`Impact/Impact_05_Regular_Red_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Red_400x400.webm`,\n                        lg`Impact/Impact_08_Regular_Red_400x400.webm`,\n                        lg`Impact/Impact_10_Regular_Red_400x400.webm`,\n                        lg`Impact/Impact_11_Regular_Red_400x400.webm`,\n                        lg`Impact/Impact_12_Regular_Red_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Red02_400x400.webm`,\n                    ],\n                    white: [\n                        lg`Impact/Impact_07_Regular_White_400x400.webm`,\n                        lg`Impact/Impact_09_Regular_White_400x400.webm`,\n                    ],\n                    yellow: [\n                        lg`Impact/Impact_01_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_02_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_03_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_04_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_05_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_06_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_11_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_12_Regular_Yellow_400x400.webm`,\n                    ],\n                }\n            },\n            indicator: {\n                chevron: {\n                    green: [lg`UI/3Chevrons_01_Regular_Green_200x200.webm`],\n                    purple: [lg`UI/3Chevrons_01_Regular_Purple_200x200.webm`],\n                    red: [lg`UI/3Chevrons_01_Regular_Red_200x200.webm`],\n                    yellow: [lg`UI/3Chevrons_01_Regular_Yellow_200x200.webm`],\n                },\n                '01': {\n                    green: [lg`UI/Indicator_01_Regular_Green_200x200.webm`],\n                    purple: [lg`UI/Indicator_01_Regular_Purple_200x200.webm`],\n                    red: [lg`UI/Indicator_01_Regular_Red_200x200.webm`],\n                    yellow: [lg`UI/Indicator_01_Regular_Yellow_200x200.webm`],\n                },\n                '02': {\n                    green: [lg`UI/Indicator01_02_Regular_BlueGreen_400x400.webm`],\n                    red: [lg`UI/Indicator01_02_Regular_RedYellow_400x400.webm`],\n                },\n                '03': {\n                    green: [lg`UI/Indicator01_03_Regular_BlueGreen_200x200.webm`],\n                    red: [lg`UI/Indicator01_03_Regular_RedYellow_200x200.webm`],\n                },\n                '04': {\n                    green: [lg`UI/Indicator02_02_Regular_BlueGreen_400x400.webm`],\n                    red: [lg`UI/Indicator02_02_Regular_RedYellow_400x400.webm`],\n                },\n                '05': {\n                    green: [lg`UI/Indicator02_03_Regular_BlueGreen_200x200.webm`],\n                    red: [lg`UI/Indicator02_03_Regular_RedYellow_200x200.webm`],\n                },\n                '06': {\n                    green: [lg`UI/Indicator03_02_Regular_BlueGreen_400x400.webm`],\n                    red: [lg`UI/Indicator03_02_Regular_RedYellow_400x400.webm`],\n                },\n                '07': {\n                    green: [lg`UI/Indicator03_03_Regular_BlueGreen_200x200.webm`],\n                    red: [lg`UI/Indicator03_03_Regular_RedYellow_200x200.webm`],\n                },\n            },\n            outpulse: {\n                '01': {\n                    whiteblue: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_BlueWhite_Burst_600x600.webm`],\n                    greenorange: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_GreenOrange_Burst_600x600.webm`],\n                    purplepink: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_PurplePink_Burst_600x600.webm`],\n                    tealyellow: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_TealYellow_Burst_600x600.webm`],\n                },\n                '02': {\n                    whiteblue: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_BlueWhite_Burst_600x600.webm`],\n                    greenorange: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_GreenOrange_Burst_600x600.webm`],\n                    purplepink: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_PurplePink_Burst_600x600.webm`],\n                    tealyellow: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_TealYellow_Burst_600x600.webm`],\n                }\n            },\n            smoke: {\n                '01': {\n                    black: [lg`Smoke/SmokePuff01_01_Dark_Black_400x400.webm`],\n                    blue: [lg`Smoke/SmokePuff01_01_Regular_Blue_400x400.webm`],\n                    darkgreen: [lg`Smoke/SmokePuff01_01_Dark_Green_400x400.webm`],\n                    darkpurple: [lg`Smoke/SmokePuff01_01_Dark_Purple_400x400.webm`],\n                    grey: [lg`Smoke/SmokePuff01_01_Regular_Grey_400x400.webm`],\n                },\n                '02': {\n                    black: [lg`Smoke/SmokePuff01_02_Dark_Black_400x400.webm`],\n                    blue: [lg`Smoke/SmokePuff01_02_Regular_Blue_400x400.webm`],\n                    darkgreen: [lg`Smoke/SmokePuff01_02_Dark_Green_400x400.webm`],\n                    darkpurple: [lg`Smoke/SmokePuff01_02_Dark_Purple_400x400.webm`],\n                    grey: [lg`Smoke/SmokePuff01_02_Regular_Grey_400x400.webm`],\n                },\n                '03': {\n                    black: [lg`Smoke/SmokePuff01_03_Dark_Black_400x400.webm`],\n                    blue: [lg`Smoke/SmokePuff01_03_Regular_Blue_400x400.webm`],\n                    darkgreen: [lg`Smoke/SmokePuff01_03_Dark_Green_400x400.webm`],\n                    darkpurple: [lg`Smoke/SmokePuff01_03_Dark_Purple_400x400.webm`],\n                    grey: [lg`Smoke/SmokePuff01_03_Regular_Grey_400x400.webm`],\n                },\n                ring: {\n                    black: [lg`Smoke/SmokeRing_01_Dark_Black_800x800.webm`],\n                    white: [lg`Smoke/SmokeRing_01_Regular_White_800x800.webm`]\n                },\n                'ring02': {\n                    black: [\n                        lg`Smoke/SmokePuffRing01_01_Dark_Black_400x400.webm`,\n                        lg`Smoke/SmokePuffRing01_02_Dark_Black_400x400.webm`,\n                        lg`Smoke/SmokePuffRing01_03_Dark_Black_400x400.webm`\n                    ],\n                    white: [\n                        lg`Smoke/SmokePuffRing01_01_Regular_White_400x400.webm`,\n                        lg`Smoke/SmokePuffRing01_02_Regular_White_400x400.webm`,\n                        lg`Smoke/SmokePuffRing01_03_Regular_White_400x400.webm`\n                    ],\n                },\n                'ring03': {\n                    black: [lg`Smoke/SmokePuffRing02_01_Dark_Black_400x400.webm`],\n                    white: [lg`Smoke/SmokePuffRing02_01_Regular_White_400x400.webm`],\n                },\n            },\n            ui: {\n                drop: {\n                    green: [lg`UI/IconDrop_01_Dark_Green_200x200.webm`],\n                    red: [lg`UI/IconDrop_01_Regular_Red_200x200.webm`]\n                },\n                fear: {\n                    darkorange: [lg`UI/IconFear_01_Dark_Orange_200x200.webm`],\n                    orange: [lg`UI/IconFear_01_Regular_Orange_200x200.webm`],\n                    darkpurple: [lg`UI/IconFear_01_Dark_Purple_200x200.webm`]\n                },\n                heart: {\n                    darkred: [lg`UI/IconHeart_01_Dark_Red_200x200.webm`],\n                    pink: [lg`UI/IconHeart_01_Regular_Pink_200x200.webm`],\n                    teal: [lg`UI/IconHeart_01_Regular_Teal_200x200.webm`]\n                },\n                horror: {\n                    darkteal: [lg`UI/IconHorror_01_Dark_Teal_200x200.webm`],\n                    purple: [lg`UI/IconHorror_01_Regular_Purple_200x200.webm`],\n                    teal: [lg`UI/IconHorror_01_Regular_Teal_200x200.webm`]\n                },\n                music: {\n                    blue: [lg`UI/IconMusicNote_01_Regular_Blue_200x200.webm`],\n                    darkred: [lg`UI/IconMusicNote_01_Dark_Red_200x200.webm`],\n                    purple: [lg`UI/IconMusicNote_01_Regular_Purple_200x200.webm`],\n                },\n                poison: {\n                    darkgreen: [lg`UI/IconPoison_01_Dark_Green_200x200.webm`],\n                    purple: [lg`UI/IconPoison_01_Regular_Purple_200x200.webm`],\n                },\n                rune01: {\n                    black: [lg`UI/IconRunes_01_Dark_Black_200x200.webm`],\n                    blue: [lg`UI/IconRunes_01_Regular_Blue_200x200.webm`],\n                    darkorange: [lg`UI/IconRunes_01_Dark_Orange_200x200.webm`],\n                    darkred: [lg`UI/IconRunes_01_Dark_Red_200x200.webm`],\n                    green: [lg`UI/IconRunes_01_Regular_Green02_200x200.webm`],\n                    orange: [lg`UI/IconRunes_01_Regular_Orange_200x200.webm`],\n                    red: [lg`UI/IconRunes_01_Regular_Red_200x200.webm`],\n                    white: [lg`UI/IconRunes_01_Regular_White_200x200.webm`],\n                    yellow: [lg`UI/IconRunes_01_Regular_Yellow_200x200.webm`],\n                },\n                rune02: {\n                    black: [lg`UI/IconRunes02_01_Dark_Black_200x200.webm`],\n                    blue: [lg`UI/IconRunes02_01_Regular_Blue_200x200.webm`],\n                    darkorange: [lg`UI/IconRunes02_01_Dark_Orange_200x200.webm`],\n                    darkred: [lg`UI/IconRunes02_01_Dark_Red_200x200.webm`],\n                    green: [lg`UI/IconRunes02_01_Regular_Green02_200x200.webm`],\n                    orange: [lg`UI/IconRunes02_01_Regular_Orange_200x200.webm`],\n                    red: [lg`UI/IconRunes02_01_Regular_Red_200x200.webm`],\n                    white: [lg`UI/IconRunes02_01_Regular_White_200x200.webm`],\n                    yellow: [lg`UI/IconRunes02_01_Regular_Yellow_200x200.webm`],\n                },\n                rune03: {\n                    black: [lg`UI/IconRunes03_01_Dark_Black_200x200.webm`],\n                    blue: [lg`UI/IconRunes03_01_Regular_Blue_200x200.webm`],\n                    darkorange: [lg`UI/IconRunes03_01_Dark_Orange_200x200.webm`],\n                    darkred: [lg`UI/IconRunes03_01_Dark_Red_200x200.webm`],\n                    green: [lg`UI/IconRunes03_01_Regular_Green02_200x200.webm`],\n                    orange: [lg`UI/IconRunes03_01_Regular_Orange_200x200.webm`],\n                    red: [lg`UI/IconRunes03_01_Regular_Red_200x200.webm`],\n                    white: [lg`UI/IconRunes03_01_Regular_White_200x200.webm`],\n                    yellow: [lg`UI/IconRunes03_01_Regular_Yellow_200x200.webm`],\n                },\n                shields: {\n                    blue: [lg`UI/IconShield_01_Regular_Blue_200x200.webm`],\n                    darkred: [lg`UI/IconShield_01_Dark_Red_200x200.webm`],\n                    green: [lg`UI/IconShield_01_Regular_Green_200x200.webm`]\n                },\n                crackedshield: {\n                    darkred: [lg`UI/IconShieldCracked_01_Dark_Red_200x200.webm`],\n                    purple: [lg`UI/IconShieldCracked_01_Regular_Purple_200x200.webm`],\n                },\n                skull: {\n                    darkgreen: [lg`UI/IconSkull_01_Dark_Green_200x200.webm`],\n                    darkorange: [lg`UI/IconSkull_01_Dark_Orange_200x200.webm`],\n                    purple: [lg`UI/IconSkull_01_Regular_Purple_200x200.webm`],\n                },\n                snowflake: {\n                    darkblue: [lg`UI/IconSnowflake_01_Dark_Blue_200x200.webm`],\n                    blue: [lg`UI/IconSnowflake_01_Regular_Blue_200x200.webm`]\n                },\n                stun: {\n                    darkteal: [lg`UI/IconStun_01_Dark_Teal_200x200.webm`],\n                    purple: [lg`UI/IconStun_01_Regular_Purple_200x200.webm`],\n                }\n            },\n            vortex: {\n                loop: {\n                    black: [lg`Template/Circle/Vortex_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/Vortex_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/Vortex_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/Vortex_01_Regular_Purple_600x600.webm`]\n                },\n                intro: {\n                    black: [lg`Template/Circle/VortexIntro_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/VortexIntro_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/VortexIntro_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/VortexIntro_01_Regular_Purple_600x600.webm`]\n                },\n                outro: {\n                    black: [lg`Template/Circle/VortexOutro_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/VortexOutro_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/VortexOutro_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/VortexOutro_01_Regular_Purple_600x600.webm`]\n                },\n            },\n            whirl: {\n                loop: {\n                    black: [lg`Template/Circle/Whirl_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/Whirl_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/Whirl_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/Whirl_01_Regular_Purple_600x600.webm`]\n                },\n                intro: {\n                    black: [lg`Template/Circle/WhirlIntro_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/WhirlIntro_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/WhirlIntro_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/WhirlIntro_01_Regular_Purple_600x600.webm`]\n                },\n                outro: {\n                    black: [lg`Template/Circle/WhirlOutro_01_Dark_Black_600x600.webm`],\n                    blue: [lg`Template/Circle/WhirlOutro_01_Regular_Blue_600x600.webm`],\n                    green: [lg`Template/Circle/WhirlOutro_01_Regular_Green_600x600.webm`],\n                    purple: [lg`Template/Circle/WhirlOutro_01_Regular_Purple_600x600.webm`]\n                }\n            },\n        },\n        ice: {\n            icespikes: {\n                '01': {\n                    blue: [lg`Ice/IceSpikesRadialBurst_01_Regular_Blue_1000x1000.webm`],\n                    red: [lg`Ice/IceSpikesRadialBurst_01_Regular_Red_1000x1000.webm`],\n                    white: [lg`Ice/IceSpikesRadialBurst_01_Regular_White_1000x1000.webm`]\n                }\n            },\n            snowflake: {\n                '01': {\n                    whiteblue: [lg`Ice/SnowflakeBurst_01_Regular_BlueWhite_Burst_600x600.webm`],\n                    greenorange: [lg`Ice/SnowflakeBurst_01_Regular_GreenOrange_Burst_600x600.webm`],\n                    purplepink: [lg`Ice/SnowflakeBurst_01_Regular_PurplePink_Burst_600x600.webm`],\n                    tealyellow: [lg`Ice/SnowflakeBurst_01_Regular_TealYellow_Burst_600x600.webm`],\n                }\n            },\n        },\n        leaves: {\n            complete: {\n                '01': {\n                    green: [lg`Nature/SwirlingLeavesComplete01_01_Regular_Green_400x400.webm`],\n                    greenorange: [lg`Nature/SwirlingLeavesComplete01_01_Regular_GreenOrange_400x400.webm`],\n                },\n                '02': {\n                    green: [lg`Nature/SwirlingLeavesComplete01_02_Regular_Green_400x400.webm`],\n                    greenorange: [lg`Nature/SwirlingLeavesComplete01_02_Regular_GreenOrange_400x400.webm`],\n                },\n                '03': {\n                    green: [lg`Nature/SwirlingLeavesComplete02_01_Regular_Green_400x400.webm`],\n                    greenorange: [lg`Nature/SwirlingLeavesComplete02_01_Regular_GreenOrange_400x400.webm`],\n                },\n            },\n            loop: {\n                '01': {\n                    green: [lg`Nature/SwirlingLeavesLoop01_01_Regular_GreenOrange_400x400.webm`],\n                    greenorange: [lg`Nature/SwirlingLeavesLoop01_01_Regular_GreenOrange_400x400.webm`],\n                },\n                '02': {\n                    green: [lg`Nature/SwirlingLeavesLoop01_02_Regular_Green_400x400.webm`],\n                    greenorange: [lg`Nature/SwirlingLeavesLoop01_02_Regular_GreenOrange_400x400.webm`],\n                },\n                '03': {\n                    green: [lg`Nature/SwirlingLeavesLoop02_01_Regular_Green_400x400.webm`],\n                    greenorange: [lg`Nature/SwirlingLeavesLoop02_01_Regular_GreenOrange_400x400.webm`],\n                },\n            }\n        },\n        lightning: {\n            ball: {\n                '01': {\n                    blue: [lg`Lightning/LightningBall_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Lightning/LightningBall_01_Regular_Green_400x400.webm`],\n                    darkgreen: [lg`Lightning/LightningBall_01_Regular_Green02_400x400.webm`],\n                    darkpurple: [lg`Lightning/LightningBall_01_Dark_Purple_400x400.webm`],\n                    darkred: [lg`Lightning/LightningBall_01_Dark_Red_400x400.webm`],\n                    orange: [lg`Lightning/LightningBall_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Lightning/LightningBall_01_Regular_Purple_400x400.webm`],\n                    purpleblue: [lg`Lightning/LightningBall_01_Regular_Blue02_400x400.webm`],\n                    red: [lg`Lightning/LightningBall_01_Regular_Red_400x400.webm`],\n                    yellow: [lg`Lightning/LightningBall_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            strike: {\n                '01': {\n                    blue: [\n                        lg`Lightning/LightningStrike01_01_Regular_Blue_800x800.webm`,\n                        lg`Lightning/LightningStrike01_02_Regular_Blue_800x800.webm`,\n                        lg`Lightning/LightningStrike01_03_Regular_Blue_800x800.webm`,\n                        lg`Lightning/LightningStrike01_04_Regular_Blue_800x800.webm`,\n                        lg`Lightning/LightningStrike01_05_Regular_Blue_800x800.webm`,\n                        lg`Lightning/LightningStrike01_06_Regular_Blue_800x800.webm`,\n                    ],\n                    purple: [\n                        lg`Lightning/LightningStrike01_01_Regular_Purple_800x800.webm`,\n                        lg`Lightning/LightningStrike01_02_Regular_Purple_800x800.webm`,\n                        lg`Lightning/LightningStrike01_03_Regular_Purple_800x800.webm`,\n                        lg`Lightning/LightningStrike01_04_Regular_Purple_800x800.webm`,\n                        lg`Lightning/LightningStrike01_05_Regular_Purple_800x800.webm`,\n                        lg`Lightning/LightningStrike01_06_Regular_Purple_800x800.webm`,\n                    ],\n                    yellow: [\n                        lg`Lightning/LightningStrike01_01_Regular_Yellow_800x800.webm`,\n                        lg`Lightning/LightningStrike01_02_Regular_Yellow_800x800.webm`,\n                        lg`Lightning/LightningStrike01_03_Regular_Yellow_800x800.webm`,\n                        lg`Lightning/LightningStrike01_04_Regular_Yellow_800x800.webm`,\n                        lg`Lightning/LightningStrike01_05_Regular_Yellow_800x800.webm`,\n                        lg`Lightning/LightningStrike01_06_Regular_Yellow_800x800.webm`,\n                    ],\n                }\n            },\n            staticelectricity: {\n                '01': {\n                    blue: [lg`Lightning/StaticElectricity_01_Regular_Blue_400x400.webm`],\n                    darkgreen: [lg`Lightning/StaticElectricity_01_Regular_Green02_400x400.webm`],\n                    darkpurple: [lg`Lightning/StaticElectricity_01_Dark_Purple_400x400.webm`],\n                    darkred: [lg`Lightning/StaticElectricity_01_Dark_Red_400x400.webm`],\n                    green: [lg`Lightning/StaticElectricity_01_Regular_Green_400x400.webm`],\n                    orange: [lg`Lightning/StaticElectricity_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Lightning/StaticElectricity_01_Regular_Purple_400x400.webm`],\n                    purpleblue: [lg`Lightning/StaticElectricity_01_Regular_Blue02_400x400.webm`],\n                    red: [lg`Lightning/StaticElectricity_01_Regular_Red_400x400.webm`],\n                    yellow: [lg`Lightning/StaticElectricity_01_Regular_Yellow_400x400.webm`]\n                },\n                '02': {\n                    blue: [lg`Lightning/StaticElectricity_02_Regular_Blue_400x400.webm`],\n                    darkgreen: [lg`Lightning/StaticElectricity_02_Regular_Green02_400x400.webm`],\n                    darkpurple: [lg`Lightning/StaticElectricity_02_Dark_Purple_400x400.webm`],\n                    darkred: [lg`Lightning/StaticElectricity_02_Dark_Red_400x400.webm`],\n                    green: [lg`Lightning/StaticElectricity_02_Regular_Green_400x400.webm`],\n                    orange: [lg`Lightning/StaticElectricity_02_Regular_Orange_400x400.webm`],\n                    purple: [lg`Lightning/StaticElectricity_02_Regular_Purple_400x400.webm`],\n                    purpleblue: [lg`Lightning/StaticElectricity_02_Regular_Blue02_400x400.webm`],\n                    red: [lg`Lightning/StaticElectricity_02_Regular_Red_400x400.webm`],\n                    yellow: [lg`Lightning/StaticElectricity_02_Regular_Yellow_400x400.webm`]\n                },\n                '03': {\n                    blue: [lg`Lightning/StaticElectricity_03_Regular_Blue_400x400.webm`],\n                    darkgreen: [lg`Lightning/StaticElectricity_03_Regular_Green02_400x400.webm`],\n                    darkpurple: [lg`Lightning/StaticElectricity_03_Dark_Purple_400x400.webm`],\n                    darkred: [lg`Lightning/StaticElectricity_03_Dark_Red_400x400.webm`],\n                    green: [lg`Lightning/StaticElectricity_03_Regular_Green_400x400.webm`],\n                    orange: [lg`Lightning/StaticElectricity_03_Regular_Orange_400x400.webm`],\n                    purple: [lg`Lightning/StaticElectricity_03_Regular_Purple_400x400.webm`],\n                    purpleblue: [lg`Lightning/StaticElectricity_03_Regular_Blue02_400x400.webm`],\n                    red: [lg`Lightning/StaticElectricity_03_Regular_Red_400x400.webm`],\n                    yellow: [lg`Lightning/StaticElectricity_03_Regular_Yellow_400x400.webm`]\n                }\n            },\n        },\n        liquid: {\n            splash: {\n                '01': {\n                    black: [lg`Liquid/LiquidSplash01_Dark_Black_400x400.webm`],\n                    blue: [lg`Liquid/LiquidSplash01_Regular_Blue_400x400.webm`],\n                    brightgreen: [lg`Liquid/LiquidSplash01_Bright_Green_400x400.webm`],\n                    brightblue: [lg`Liquid/LiquidSplash01_Bright_Blue_400x400.webm`],\n                    green: [lg`Liquid/LiquidSplash01_Regular_Green_400x400.webm`],\n                    grey: [lg`Liquid/LiquidSplash01_Regular_Grey_400x400.webm`],\n                    purple: [lg`Liquid/LiquidSplash01_Bright_Purple_400x400.webm`],\n                    red: [lg`Liquid/LiquidSplash01_Regular_Red_400x400.webm`],\n                },\n            },\n            blob: {\n                '01': {\n                    blue: [lg`Liquid/LiquidBlob01_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Liquid/LiquidBlob01_01_Regular_Green_400x400.webm`],\n                    purple: [lg`Liquid/LiquidBlob01_01_Regular_Purple_400x400.webm`],\n                }\n            },\n        },\n        magicsign: {\n            abjuration: {\n                '01': {\n                    blue: [lg`Magic_Signs/Abjuration_01_Blue_Circle_800x800.webm`],\n                    green: [lg`Magic_Signs/Abjuration_01_Green_Circle_800x800.webm`],\n                    red: [lg`Magic_Signs/Abjuration_01_Red_Circle_800x800.webm`],\n                },\n                '02': {\n                    blue: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/AbjurationRuneIntro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/AbjurationRuneIntro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/AbjurationRuneIntro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/AbjurationRuneIntro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/AbjurationRuneIntro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/AbjurationRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/AbjurationRuneLoop_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/AbjurationRuneLoop_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/AbjurationRuneLoop_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/AbjurationRuneLoop_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/AbjurationRuneLoop_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/AbjurationRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/AbjurationRuneOutro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/AbjurationRuneOutro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/AbjurationRuneOutro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/AbjurationRuneOutro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/AbjurationRuneOutro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/AbjurationRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            conjuration: {\n                '01': {\n                    yellow: [lg`Magic_Signs/Conjuration_01_Yellow_Circle_800x800.webm`]\n                },\n                '02': {\n                    blue: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/ConjurationRuneIntro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/ConjurationRuneIntro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/ConjurationRuneIntro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/ConjurationRuneIntro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/ConjurationRuneIntro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/ConjurationRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/ConjurationRuneLoop_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/ConjurationRuneLoop_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/ConjurationRuneLoop_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/ConjurationRuneLoop_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/ConjurationRuneLoop_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/ConjurationRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/ConjurationRuneOutro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/ConjurationRuneOutro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/ConjurationRuneOutro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/ConjurationRuneOutro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/ConjurationRuneOutro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/ConjurationRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            divination: {\n                '01': {\n                    lightblue: [lg`Magic_Signs/Divination_01_Light_Blue_Circle_800x800.webm`]\n                },\n                '02': {\n                    blue: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/DivinationRuneIntro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/DivinationRuneIntro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/DivinationRuneIntro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/DivinationRuneIntro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/DivinationRuneIntro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/DivinationRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/DivinationRuneLoop_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/DivinationRuneLoop_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/DivinationRuneLoop_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/DivinationRuneLoop_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/DivinationRuneLoop_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/DivinationRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/DivinationRuneOutro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/DivinationRuneOutro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/DivinationRuneOutro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/DivinationRuneOutro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/DivinationRuneOutro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/DivinationRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            enchantment: {\n                '02': {\n                    blue: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/EnchantmentRuneIntro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/EnchantmentRuneIntro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/EnchantmentRuneIntro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/EnchantmentRuneIntro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/EnchantmentRuneIntro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/EnchantmentRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/EnchantmentRuneLoop_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/EnchantmentRuneLoop_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/EnchantmentRuneLoop_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/EnchantmentRuneLoop_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/EnchantmentRuneLoop_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/EnchantmentRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/EnchantmentRuneOutro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/EnchantmentRuneOutro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/EnchantmentRuneOutro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/EnchantmentRuneOutro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/EnchantmentRuneOutro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/EnchantmentRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            evocation: {\n                '02': {\n                    blue: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/EvocationRuneIntro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/EvocationRuneIntro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/EvocationRuneIntro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/EvocationRuneIntro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/EvocationRuneIntro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/EvocationRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/EvocationRuneLoop_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/EvocationRuneLoop_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/EvocationRuneLoop_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/EvocationRuneLoop_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/EvocationRuneLoop_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/EvocationRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/EvocationRuneOutro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/EvocationRuneOutro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/EvocationRuneOutro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/EvocationRuneOutro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/EvocationRuneOutro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/EvocationRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            illusion: {\n                '02': {\n                    blue: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/IllusionRuneIntro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/IllusionRuneIntro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/IllusionRuneIntro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/IllusionRuneIntro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/IllusionRuneIntro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/IllusionRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/IllusionRuneLoop_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/IllusionRuneLoop_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/IllusionRuneLoop_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/IllusionRuneLoop_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/IllusionRuneLoop_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/IllusionRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/IllusionRuneOutro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/IllusionRuneOutro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/IllusionRuneOutro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/IllusionRuneOutro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/IllusionRuneOutro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/IllusionRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            necromancy: {\n                '02': {\n                    blue: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/NecromancyRuneIntro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/NecromancyRuneIntro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/NecromancyRuneIntro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/NecromancyRuneIntro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/NecromancyRuneIntro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/NecromancyRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/NecromancyRuneLoop_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/NecromancyRuneLoop_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/NecromancyRuneLoop_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/NecromancyRuneLoop_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/NecromancyRuneLoop_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/NecromancyRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/NecromancyRuneOutro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/NecromancyRuneOutro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/NecromancyRuneOutro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/NecromancyRuneOutro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/NecromancyRuneOutro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/NecromancyRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            transmutation: {\n                '02': {\n                    blue: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Blue_800x800.webm`],\n                    green: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Green_800x800.webm`],\n                    pink: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Pink_800x800.webm`],\n                    purple: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Purple_800x800.webm`],\n                    red: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Red_800x800.webm`],\n                    yellow: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/TransmutationRuneIntro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/TransmutationRuneIntro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/TransmutationRuneIntro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/TransmutationRuneIntro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/TransmutationRuneIntro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/TransmutationRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/TransmutationRuneLoop_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/TransmutationRuneLoop_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/TransmutationRuneLoop_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/TransmutationRuneLoop_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/TransmutationRuneLoop_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/TransmutationRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/TransmutationRuneOutro_01_Regular_Blue_400x400.webm`],\n                  green: [lg`Magic_Signs/Runes/TransmutationRuneOutro_01_Regular_Green_400x400.webm`],\n                  pink: [lg`Magic_Signs/Runes/TransmutationRuneOutro_01_Regular_Pink_400x400.webm`],\n                  purple: [lg`Magic_Signs/Runes/TransmutationRuneOutro_01_Regular_Purple_400x400.webm`],\n                  red: [lg`Magic_Signs/Runes/TransmutationRuneOutro_01_Regular_Red_400x400.webm`],\n                  yellow: [lg`Magic_Signs/Runes/TransmutationRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n        },\n        marker: {\n            bubble: {\n                '01': {\n                    blue: [lg`Marker/MarkerBubble_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Marker/MarkerBubble_01_Regular_Green_400x400.webm`],\n                    rainbow: [lg`Marker/MarkerBubble_01_Regular_Rainbow_400x400.webm`],\n                }\n            },\n            circleofstars: {\n                '01': {\n                    blue: [lg`Marker/MarkerCircleOfStars_Regular_Blue_400x400.webm`],\n                    green: [lg`Marker/MarkerCircleOfStars_Regular_Green_400x400.webm`],\n                    greenorange: [lg`Marker/MarkerCircleOfStars_Regular_GreenOrange_400x400.webm`],\n                    orangepurple: [lg`Marker/MarkerCircleOfStars_Regular_OrangePurple_400x400.webm`],\n                    purplegreen: [lg`Marker/MarkerCircleOfStars_Regular_PurpleGreen_400x400.webm`],\n                    yellowblue: [lg`Marker/MarkerCircleOfStars_Regular_YellowBlue_400x400.webm`]\n                },\n            },\n            energystrand: {\n                '01': {\n                    blue: [lg`Marker/EnergyStrands_01_Regular_Blue_600x600.webm`],\n                    blueorange: [lg`Marker/EnergyStrands_01_Regular_BlueOrange_600x600.webm`],\n                    darkred: [lg`Marker/EnergyStrands_01_Dark_Red_600x600.webm`],\n                    orange: [lg`Marker/EnergyStrands_01_Regular_Orange_600x600.webm`],\n                    pinkyellow: [lg`Marker/EnergyStrands_01_Regular_PinkYellow_600x600.webm`],\n                    purple: [lg`Marker/EnergyStrands_01_Regular_Purple_600x600.webm`],\n                }\n            },\n            music: {\n                '01': {\n                    darkred: [lg`Marker/MusicMarker_01_Dark_Red_400x400.webm`],\n                    yellowblue: [lg`Marker/MusicMarker_01_Regular_BlueYellow_400x400.webm`],\n                    greenorange: [lg`Marker/MusicMarker_01_Regular_GreenOrange_400x400.webm`],\n                    pink: [lg`Marker/MusicMarker_01_Regular_Pink_400x400.webm`],\n                    purplepink: [lg`Marker/MusicMarker_01_Regular_PurplePink_400x400.webm`],\n                },\n            },\n            standard: {\n                '01': {\n                    whiteblue: [lg`Marker/Marker_01_Dark_BlueWhite_400x400.webm`],\n                    yellowblue: [lg`Marker/Marker_01_Regular_BlueYellow_400x400.webm`],\n                    greenorange: [lg`Marker/Marker_01_Regular_GreenOrange_400x400.webm`],\n                    pink: [lg`Marker/Marker_01_Regular_Pink_400x400.webm`],\n                    purplepink: [lg`Marker/Marker_01_Regular_PurplePink_400x400.webm`],\n                    red: [lg`Marker/Marker_01_Regular_Red_400x400.webm`],\n                },\n                '02': {\n                    whiteblue: [lg`Marker/Marker_02_Dark_BlueWhite_400x400.webm`],\n                    yellowblue: [lg`Marker/Marker_02_Regular_BlueYellow_400x400.webm`],\n                    greenorange: [lg`Marker/Marker_02_Regular_GreenOrange_400x400.webm`],\n                    pink: [lg`Marker/Marker_02_Regular_Pink_400x400.webm`],\n                    purplepink: [lg`Marker/Marker_02_Regular_PurplePink_400x400.webm`],\n                    pink: [lg`Marker/Marker_02_Regular_Red_400x400.webm`],\n                },\n            },\n        },\n        music: {\n            notes: {\n                '01': {\n                    blue: [\n                        lg`Music_Notation/BassClef_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/BeamedQuavers_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/Crotchet_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/Flat_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/Quaver_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/Sharp_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/TrebleClef_01_Regular_Blue_200x200.webm`\n                    ],\n                    green: [\n                        lg`Music_Notation/BassClef_01_Regular_Green_200x200.webm`,\n                        lg`Music_Notation/BeamedQuavers_01_Regular_Green_200x200.webm`,\n                        lg`Music_Notation/Crotchet_01_Regular_Green_200x200.webm`,\n                        lg`Music_Notation/Flat_01_Regular_Green_200x200.webm`,\n                        lg`Music_Notation/Quaver_01_Regular_Green_200x200.webm`,\n                        lg`Music_Notation/Sharp_01_Regular_Green_200x200.webm`,\n                        lg`Music_Notation/TrebleClef_01_Regular_Green_200x200.webm`\n                    ],\n                    orange: [\n                        lg`Music_Notation/BassClef_01_Regular_Orange_200x200.webm`,\n                        lg`Music_Notation/BeamedQuavers_01_Regular_Orange_200x200.webm`,\n                        lg`Music_Notation/Crotchet_01_Regular_Orange_200x200.webm`,\n                        lg`Music_Notation/Flat_01_Regular_Orange_200x200.webm`,\n                        lg`Music_Notation/Quaver_01_Regular_Orange_200x200.webm`,\n                        lg`Music_Notation/Sharp_01_Regular_Orange_200x200.webm`,\n                        lg`Music_Notation/TrebleClef_01_Regular_Orange_200x200.webm`\n                    ],\n                    purple: [\n                        lg`Music_Notation/BassClef_01_Regular_Purple_200x200.webm`,\n                        lg`Music_Notation/BeamedQuavers_01_Regular_Purple_200x200.webm`,\n                        lg`Music_Notation/Crotchet_01_Regular_Purple_200x200.webm`,\n                        lg`Music_Notation/Flat_01_Regular_Purple_200x200.webm`,\n                        lg`Music_Notation/Quaver_01_Regular_Purple_200x200.webm`,\n                        lg`Music_Notation/Sharp_01_Regular_Purple_200x200.webm`,\n                        lg`Music_Notation/TrebleClef_01_Regular_Purple_200x200.webm`\n                    ]\n                }\n            }\n        },\n        particles: {\n            dots: {\n                '01': {\n                    blue: [lg`Particles/ParticlesOutward01_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward01_01_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward01_01_Regular_Orange_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Particles/ParticlesOutward01_02_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward01_02_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward01_02_Regular_Orange_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Particles/ParticlesOutward01_03_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward01_03_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward01_03_Regular_Orange_400x400.webm`],\n                },\n                '04': {\n                    blue: [lg`Particles/ParticlesOutward01_04_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward01_04_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward01_04_Regular_Orange_400x400.webm`],\n                },\n                '05': {\n                    blue: [lg`Particles/ParticlesOutward01_05_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward01_05_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward01_05_Regular_Orange_400x400.webm`],\n                },\n            },\n            inwarddots: {\n                '01': {\n                    blue: [lg`Particles/ParticlesInward01_01_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward01_01_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward01_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward01_01_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward01_01_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward01_01_Regular_White_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Particles/ParticlesInward01_02_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward01_02_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward01_02_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward01_02_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward01_02_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward01_02_Regular_White_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Particles/ParticlesInward01_03_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward01_03_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward01_03_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward01_03_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward01_03_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward01_03_Regular_White_400x400.webm`],\n                },\n                '04': {\n                    blue: [lg`Particles/ParticlesInward01_04_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward01_04_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward01_04_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward01_04_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward01_04_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward01_04_Regular_White_400x400.webm`],\n                },\n                '05': {\n                    blue: [lg`Particles/ParticlesInward01_05_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward01_05_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward01_05_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward01_05_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward01_05_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward01_05_Regular_White_400x400.webm`],\n                },\n            },\n            stars: {\n                '01': {\n                    blue: [lg`Particles/ParticlesOutward02_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward02_01_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward02_01_Regular_Orange_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Particles/ParticlesOutward02_02_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward02_02_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward02_02_Regular_Orange_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Particles/ParticlesOutward02_03_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward02_03_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward02_03_Regular_Orange_400x400.webm`],\n                },\n                '04': {\n                    blue: [lg`Particles/ParticlesOutward02_04_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward02_04_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward02_04_Regular_Orange_400x400.webm`],\n                },\n                '05': {\n                    blue: [lg`Particles/ParticlesOutward02_05_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesOutward02_05_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesOutward02_05_Regular_Orange_400x400.webm`],\n                },\n            },\n            inwardstars: {\n                '01': {\n                    blue: [lg`Particles/ParticlesInward02_01_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward02_01_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward02_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward02_01_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward02_01_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward02_01_Regular_White_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Particles/ParticlesInward02_02_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward02_02_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward02_02_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward02_02_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward02_02_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward02_02_Regular_White_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Particles/ParticlesInward02_03_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward02_03_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward02_03_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward02_03_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward02_03_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward02_03_Regular_White_400x400.webm`],\n                },\n                '04': {\n                    blue: [lg`Particles/ParticlesInward02_04_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward02_04_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward02_04_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward02_04_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward02_04_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward02_04_Regular_White_400x400.webm`],\n                },\n                '05': {\n                    blue: [lg`Particles/ParticlesInward02_05_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesInward02_05_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesInward02_05_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesInward02_05_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesInward02_05_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesInward02_05_Regular_White_400x400.webm`],\n                },\n            },\n            swirl: {\n                '01': {\n                    blue: [lg`Particles/ParticlesSwirl01_01_Regular_Blue_400x400.webm`],\n                    greenyellow: [lg`Particles/ParticlesSwirl01_01_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesSwirl01_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesSwirl01_01_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesSwirl01_01_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesSwirl01_01_Regular_White_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Particles/ParticlesSwirl02_01_Regular_Blue_400x400.webm`],\n                    green: [lg`Particles/ParticlesSwirl02_01_Regular_GreenYellow_400x400.webm`],\n                    orange: [lg`Particles/ParticlesSwirl02_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Particles/ParticlesSwirl02_01_Regular_Purple_400x400.webm`],\n                    red: [lg`Particles/ParticlesSwirl02_01_Regular_Red_400x400.webm`],\n                    white: [lg`Particles/ParticlesSwirl02_01_Regular_White_400x400.webm`],\n                },\n            },\n        },\n        shieldfx: {\n            eldritchweb: {\n                '01': {\n                    darkgreen: [lg`Energy/ShieldEldritchWebAbove01_01_Dark_Green_400x400.webm`],\n                    darkpurple: [lg`Energy/ShieldEldritchWebAbove01_01_Dark_Purple_400x400.webm`],\n                },\n                '03': {\n                    darkgreen: [lg`Energy/ShieldEldritchWebAbove01_03_Dark_Green_400x400.webm`],\n                    darkpurple: [lg`Energy/ShieldEldritchWebAbove01_03_Dark_Purple_400x400.webm`],\n                }\n            },\n            /*\n            shieldeldritchwebbottom: {\n                '01': {\n                    darkgreen: [lg`Energy/ShieldEldritchWebBelow01_02_Dark_Green_400x400.webm`],\n                    darkpurple: [lg`Energy/ShieldEldritchWebBelow01_02_Dark_Purple_400x400.webm`],\n                },\n                '03': {\n                    darkgreen: [lg`Energy/ShieldEldritchWebBelow01_03_Dark_Green_400x400.webm`],\n                    darkpurple: [lg`Energy/ShieldEldritchWebBelow01_03_Dark_Purple_400x400.webm`],\n                }\n            },\n            */\n            fire: {\n                '01': {\n                    darkgreen: [lg`Fire/ShieldFireAbove01_01_Dark_Green_400x400.webm`],\n                    orange: [lg`Fire/ShieldFireAbove01_01_Regular_Orange_400x400.webm`],\n                },\n                '03': {\n                    darkgreen: [lg`Fire/ShieldFireAbove01_03_Dark_Green_400x400.webm`],\n                    orange: [lg`Fire/ShieldFireAbove01_03_Regular_Orange_400x400.webm`],\n                },\n            },\n            /*\n            shieldfirebottom: {\n                '01': {\n                    darkgreen: [lg`Fire/ShieldFireBelow01_02_Dark_Green_400x400.webm`],\n                    orange: [lg`Fire/ShieldFireBelow01_02_Regular_Orange_400x400.webm`],\n                },\n                '03': {\n                    darkgreen: [lg`Fire/ShieldFireBelow01_03_Dark_Green_400x400.webm`],\n                    orange: [lg`Fire/ShieldFireBelow01_03_Regular_Orange_400x400.webm`],\n                },\n            },\n            */\n            earth: {\n                '01': {\n                    darkorange: [lg`Fire/ShieldMoltenEarthAbove01_01_Dark_Orange_400x400.webm`],\n                    orange: [lg`Fire/ShieldMoltenEarthAbove01_01_Regular_Orange_400x400.webm`],\n                },\n                '03': {\n                    darkorange: [lg`Fire/ShieldMoltenEarthAbove01_03_Dark_Orange_400x400.webm`],\n                    orange: [lg`Fire/ShieldMoltenEarthAbove01_03_Regular_Orange_400x400.webm`],\n                },\n            },\n            /*\n            shieldearthbottom: {\n                '01': {\n                    darkorange: [lg`Fire/ShieldMoltenEarthBelow01_02_Dark_Orange_400x400.webm`],\n                    orange: [lg`Fire/ShieldMoltenEarthBelow01_02_Regular_Orange_400x400.webm`],\n                },\n                '03': {\n                    darkorange: [lg`Fire/ShieldMoltenEarthBelow01_03_Dark_Orange_400x400.webm`],\n                    orange: [lg`Fire/ShieldMoltenEarthBelow01_03_Regular_Orange_400x400.webm`],\n                },\n            },\n            */\n            ice: {\n                '01': {\n                    blue: [lg`Ice/ShieldIceAbove01_01_Regular_Blue_400x400.webm`],\n                    purple: [lg`Ice/ShieldIceAbove01_01_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Ice/ShieldIceAbove01_03_Regular_Blue_400x400.webm`],\n                    purple: [lg`Ice/ShieldIceAbove01_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            /*\n            shieldicebottom: {\n                '01': {\n                    blue: [lg`Ice/ShieldIceBelow01_02_Regular_Blue_400x400.webm`],\n                    purple: [lg`Ice/ShieldIceBelow01_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Ice/ShieldIceBelow01_03_Regular_Blue_400x400.webm`],\n                    purple: [lg`Ice/ShieldIceBelow01_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            energyfieldbottom: {\n                '01': {\n                    blue: [lg`Energy/EnergyFieldBot_02_Regular_Blue_400x400.webm`],\n                    green: [lg`Energy/EnergyFieldBot_02_Regular_Green_400x400.webm`],\n                    purple: [lg`Energy/EnergyFieldBot_02_Regular_Purple_400x400.webm`],\n                }\n            },\n            */\n            energyfield: {\n                '01': {\n                    blue: [lg`Energy/EnergyFieldTop_02_Regular_Blue_400x400.webm`],\n                    green: [lg`Energy/EnergyFieldTop_02_Regular_Green_400x400.webm`],\n                    purple: [lg`Energy/EnergyFieldTop_02_Regular_Purple_400x400.webm`],\n                }\n            },\n        },\n        shieldspell: {\n            intro: {\n                '01': {\n                    blue: [l1`Shield/Shield_01_Regular_Blue_Intro_400x400.webm`],\n                    green: [l1`Shield/Shield_01_Regular_Green_Intro_400x400.webm`],\n                    purple: [l1`Shield/Shield_01_Regular_Purple_Intro_400x400.webm`],\n                    red: [l1`Shield/Shield_01_Regular_Red_Intro_400x400.webm`],\n                    yellow: [l1`Shield/Shield_01_Regular_Yellow_Intro_400x400.webm`],\n                },\n                '02': {\n                    blue: [l1`Shield/Shield_02_Regular_Blue_Intro_400x400.webm`],\n                    green: [l1`Shield/Shield_02_Regular_Green_Intro_400x400.webm`],\n                    purple: [l1`Shield/Shield_02_Regular_Purple_Intro_400x400.webm`],\n                    red: [l1`Shield/Shield_02_Regular_Red_Intro_400x400.webm`],\n                    yellow: [l1`Shield/Shield_02_Regular_Yellow_Intro_400x400.webm`],\n                },\n                '03': {\n                    blue: [l1`Shield/Shield_03_Regular_Blue_Intro_400x400.webm`],\n                    green: [l1`Shield/Shield_03_Regular_Green_Intro_400x400.webm`],\n                    purple: [l1`Shield/Shield_03_Regular_Purple_Intro_400x400.webm`],\n                    red: [l1`Shield/Shield_03_Regular_Red_Intro_400x400.webm`],\n                    yellow: [l1`Shield/Shield_03_Regular_Yellow_Intro_400x400.webm`],\n                },\n            },\n            loop: {\n                '01': {\n                    blue: [l1`Shield/Shield_01_Regular_Blue_Loop_400x400.webm`],\n                    green: [l1`Shield/Shield_01_Regular_Green_Loop_400x400.webm`],\n                    purple: [l1`Shield/Shield_01_Regular_Purple_Loop_400x400.webm`],\n                    red: [l1`Shield/Shield_01_Regular_Red_Loop_400x400.webm`],\n                    yellow: [l1`Shield/Shield_01_Regular_Yellow_Loop_400x400.webm`],\n                },\n                '02': {\n                    blue: [l1`Shield/Shield_02_Regular_Blue_Loop_400x400.webm`],\n                    green: [l1`Shield/Shield_02_Regular_Green_Loop_400x400.webm`],\n                    purple: [l1`Shield/Shield_02_Regular_Purple_Loop_400x400.webm`],\n                    red: [l1`Shield/Shield_02_Regular_Red_Loop_400x400.webm`],\n                    yellow: [l1`Shield/Shield_02_Regular_Yellow_Loop_400x400.webm`],\n                },\n                '03': {\n                    blue: [l1`Shield/Shield_03_Regular_Blue_Loop_400x400.webm`],\n                    green: [l1`Shield/Shield_03_Regular_Green_Loop_400x400.webm`],\n                    purple: [l1`Shield/Shield_03_Regular_Purple_Loop_400x400.webm`],\n                    red: [l1`Shield/Shield_03_Regular_Red_Loop_400x400.webm`],\n                    yellow: [l1`Shield/Shield_03_Regular_Yellow_Loop_400x400.webm`],\n                },\n            },\n            outro_explode: {\n                '01': {\n                    blue: [l1`Shield/Shield_01_Regular_Blue_OutroExplode_400x400.webm`],\n                    green: [l1`Shield/Shield_01_Regular_Green_OutroExplode_400x400.webm`],\n                    purple: [l1`Shield/Shield_01_Regular_Purple_OutroExplode_400x400.webm`],\n                    red: [l1`Shield/Shield_01_Regular_Red_OutroExplode_400x400.webm`],\n                    yellow: [l1`Shield/Shield_01_Regular_Yellow_OutroExplode_400x400.webm`],\n                },\n                '02': {\n                    blue: [l1`Shield/Shield_02_Regular_Blue_OutroExplode_400x400.webm`],\n                    green: [l1`Shield/Shield_02_Regular_Green_OutroExplode_400x400.webm`],\n                    purple: [l1`Shield/Shield_02_Regular_Purple_OutroExplode_400x400.webm`],\n                    red: [l1`Shield/Shield_02_Regular_Red_OutroExplode_400x400.webm`],\n                    yellow: [l1`Shield/Shield_02_Regular_Yellow_OutroExplode_400x400.webm`],\n                },\n                '03': {\n                    blue: [l1`Shield/Shield_03_Regular_Blue_OutroExplode_400x400.webm`],\n                    green: [l1`Shield/Shield_03_Regular_Green_OutroExplode_400x400.webm`],\n                    purple: [l1`Shield/Shield_03_Regular_Purple_OutroExplode_400x400.webm`],\n                    red: [l1`Shield/Shield_03_Regular_Red_OutroExplode_400x400.webm`],\n                    yellow: [l1`Shield/Shield_03_Regular_Yellow_OutroExplode_400x400.webm`],\n                },\n            },\n            outro_fade: {\n                '01': {\n                    blue: [l1`Shield/Shield_01_Regular_Blue_OutroFade_400x400.webm`],\n                    green: [l1`Shield/Shield_01_Regular_Green_OutroFade_400x400.webm`],\n                    purple: [l1`Shield/Shield_01_Regular_Green_OutroFade_400x400.webm`],\n                    red: [l1`Shield/Shield_01_Regular_Red_OutroFade_400x400.webm`],\n                    yellow: [l1`Shield/Shield_01_Regular_Yellow_OutroFade_400x400.webm`],\n                },\n                '02': {\n                    blue: [l1`Shield/Shield_02_Regular_Blue_OutroFade_400x400.webm`],\n                    green: [l1`Shield/Shield_02_Regular_Green_OutroFade_400x400.webm`],\n                    purple: [l1`Shield/Shield_02_Regular_Purple_OutroFade_400x400.webm`],\n                    red: [l1`Shield/Shield_02_Regular_Red_OutroFade_400x400.webm`],\n                    yellow: [l1`Shield/Shield_02_Regular_Yellow_OutroFade_400x400.webm`],\n                },\n                '03': {\n                    blue: [l1`Shield/Shield_03_Regular_Blue_OutroFade_400x400.webm`],\n                    green: [l1`Shield/Shield_03_Regular_Green_OutroFade_400x400.webm`],\n                    purple: [l1`Shield/Shield_03_Regular_Purple_OutroFade_400x400.webm`],\n                    red: [l1`Shield/Shield_03_Regular_Red_OutroFade_400x400.webm`],\n                    yellow: [l1`Shield/Shield_03_Regular_Yellow_OutroFade_400x400.webm`],\n                },\n            },\n            complete: {\n                '01': {\n                    _markers: {\n                        loop: { start: 1533, end: 5533 },\n                        forcedEnd: 5533\n                    },\n                    blue: [l1`Shield/Shield_01_Regular_Blue_Complete_400x400.webm`],\n                    green: [l1`Shield/Shield_01_Regular_Green_Complete_400x400.webm`],\n                    purple: [l1`Shield/Shield_01_Regular_Purple_Complete_400x400.webm`],\n                    red: [l1`Shield/Shield_01_Regular_Red_Complete_400x400.webm`],\n                    yellow: [l1`Shield/Shield_01_Regular_Yellow_Complete_400x400.webm`],\n                },\n                '02': {\n                    _markers: {\n                        loop: { start: 1533, end: 5533 },\n                        forcedEnd: 5533\n                    },\n                    blue: [l1`Shield/Shield_02_Regular_Blue_Complete_400x400.webm`],\n                    green: [l1`Shield/Shield_02_Regular_Green_Complete_400x400.webm`],\n                    purple: [l1`Shield/Shield_02_Regular_Purple_Complete_400x400.webm`],\n                    red: [l1`Shield/Shield_02_Regular_Red_Complete_400x400.webm`],\n                    yellow: [l1`Shield/Shield_02_Regular_Yellow_Complete_400x400.webm`],\n                },\n                '03': {\n                    _markers: {\n                        loop: { start: 1533, end: 5533 },\n                        forcedEnd: 5533\n                    },\n                    blue: [l1`Shield/Shield_03_Regular_Blue_Complete_400x400.webm`],\n                    green: [l1`Shield/Shield_03_Regular_Green_Complete_400x400.webm`],\n                    purple: [l1`Shield/Shield_03_Regular_Purple_Complete_400x400.webm`],\n                    red: [l1`Shield/Shield_03_Regular_Red_Complete_400x400.webm`],\n                    yellow: [l1`Shield/Shield_03_Regular_Yellow_Complete_400x400.webm`],\n                }\n            },\n        },\n        shrapnel: {\n            bomb: {\n                '01': {\n                    black: [lg`Explosion/ShrapnelBomb01_01_Regular_Black_800x800.webm`],\n                    blue: [lg`Explosion/ShrapnelBomb01_01_Regular_Blue_800x800.webm`],\n                    green: [lg`Explosion/ShrapnelBomb01_01_Regular_Green_800x800.webm`],\n                    grey: [lg`Explosion/ShrapnelBomb01_01_Regular_Grey_800x800.webm`],\n                    red: [lg`Explosion/ShrapnelBomb01_01_Regular_Red_800x800.webm`],\n                }\n            },\n            grenade: {\n                '01': {\n                    green: [lg`Explosion/ShrapnelGrenade01_01_Regular_Green_800x800.webm`]\n                },\n                '02': {\n                    black: [lg`Explosion/ShrapnelGrenade02_01_Regular_Black_800x800.webm`]\n                },\n                '03': {\n                    black: [lg`Explosion/ShrapnelGrenade03_01_Regular_Black_800x800.webm`]\n                }\n            }\n        },\n        spell: {\n            antilifeshell: {\n                '01': {\n                    blue: [l5`Antilife_Shell/AntilifeShell_01_Blue_NoCircle_400x400.webm`]\n                }\n            },\n            armsofhadar: {\n                '01': {\n                    darkgreen: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Green_500x500.webm`],\n                    darkpurple: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Purple_500x500.webm`],\n                    darkred: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Red_500x500.webm`],\n                }\n            },\n            bardicinspiration: {\n                inspire: {\n                    yellowblue: [l1`Bardic_Inspiration/BardicInspiration_01_Regular_BlueYellow_400x400.webm`],\n                    greenorange: [l1`Bardic_Inspiration/BardicInspiration_01_Regular_GreenOrange_400x400.webm`],\n                    purplepink: [l1`Bardic_Inspiration/BardicInspiration_01_Regular_PurplePink_400x400.webm`],\n                    darkred: [l1`Bardic_Inspiration/BardicInspiration_01_Dark_Red_400x400.webm`],\n                    pink: [l1`Bardic_Inspiration/BardicInspiration_01_Regular_Pink_400x400.webm`]\n                },\n                marker: {\n                    yellowblue: [lg`Marker/MusicMarker_01_Regular_BlueYellow_400x400.webm`],\n                    greenorange: [lg`Marker/MusicMarker_01_Regular_GreenOrange_400x400.webm`],\n                    pink: [lg`Marker/MusicMarker_01_Regular_Pink_400x400.webm`],\n                    purplepink: [lg`Marker/MusicMarker_01_Regular_PurplePink_400x400.webm`],\n                    darkred: [lg`Marker/MusicMarker_01_Dark_Red_400x400.webm`],\n                }\n            },\n            blacktentacles: {\n                '01': {\n                    darkgreen: [l4`Black_Tentacles/BlackTentacles_01_Dark_Green_600x600.webm`],\n                    darkpurple: [l4`Black_Tentacles/BlackTentacles_01_Dark_Purple_600x600.webm`],\n                    darkred: [l4`Black_Tentacles/BlackTentacles_01_Dark_Red_600x600.webm`],\n                },\n            },\n            bless: {\n                \"intro\": {\n                    blue: [l1`Bless/Bless_01_Regular_Blue_Intro_400x400.webm`],\n                    green: [l1`Bless/Bless_01_Regular_Green_Intro_400x400.webm`],\n                    purple: [l1`Bless/Bless_01_Regular_Purple_Intro_400x400.webm`],\n                    yellow: [l1`Bless/Bless_01_Regular_Yellow_Intro_400x400.webm`],\n                },\n                \"loop\": {\n                    blue: [l1`Bless/Bless_01_Regular_Blue_Loop_400x400.webm`],\n                    green: [l1`Bless/Bless_01_Regular_Green_Loop_400x400.webm`],\n                    purple: [l1`Bless/Bless_01_Regular_Purple_Loop_400x400.webm`],\n                    yellow: [l1`Bless/Bless_01_Regular_Yellow_Loop_400x400.webm`],\n                },\n            },\n            calllightning: {\n                '01': {\n                    blue: [l3`Call_Lightning/CallLightning_01_Blue_1000x1000.webm`],\n                    blueorange: [l3`Call_Lightning/CallLightning_01_BlueOrange_1000x1000.webm`],\n                    green: [l3`Call_Lightning/CallLightning_01_Green_1000x1000.webm`],\n                    pinkyellow: [l3`Call_Lightning/CallLightning_01_PinkYellow_1000x1000.webm`],\n                    purple: [l3`Call_Lightning/CallLightning_01_Purple_1000x1000.webm`],\n                    red: [l3`Call_Lightning/CallLightning_01_Red_1000x1000.webm`],\n                    yellow: [l3`Call_Lightning/CallLightning_01_Yellow_1000x1000.webm`]\n                }\n            },\n            cloudofdaggers: {\n                '01': {\n                    darkpurple: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Dark_Purple_400x400.webm`],\n                    darkred: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Dark_Red_400x400.webm`],\n                    blue: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Blue_400x400.webm`],\n                    green: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Green_400x400.webm`],\n                    orange: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Orange_400x400.webm`],\n                    purple: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Purple_400x400.webm`],\n                    red: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Red_400x400.webm`],\n                    yellow: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Yellow_400x400.webm`]\n                },\n                kunai: {\n                    darkpurple: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Dark_Purple_400x400.webm`],\n                    darkred: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Dark_Red_400x400.webm`],\n                    blue: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Blue_400x400.webm`],\n                    green: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Green_400x400.webm`],\n                    orange: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Orange_400x400.webm`],\n                    purple: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Purple_400x400.webm`],\n                    red: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Red_400x400.webm`],\n                    yellow: [l2`Cloud_Of_Daggers/CloudOfDaggers_Kunai_01_Light_Yellow_400x400.webm`]\n                },\n            },\n            curewounds: {\n                '01': {\n                    blue: [l1`Cure_Wounds/CureWounds_01_Blue_400x400.webm`],\n                    green: [l1`Cure_Wounds/CureWounds_01_Green_400x400.webm`],\n                    pink: [l1`Cure_Wounds/CureWounds_01_Pink_400x400.webm`],\n                    purple: [l1`Cure_Wounds/CureWounds_01_Purple_400x400.webm`],\n                    red: [l1`Cure_Wounds/CureWounds_01_Red_400x400.webm`]\n                }\n            },\n            darkness: {\n                '01': {\n                    black: [l2`Darkness/Darkness_01_Black_600x600.webm`],\n                    green: [l2`Darkness/Darkness_01_Green_600x600.webm`]\n                }\n            },\n            detectmagic: {\n                '01': {\n                    blue: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Blue_1200x1200.webm`],\n                    green: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Green_1200x1200.webm`],\n                    greenorange: [l1`Detect_Magic/DetectMagicCircle_01_Regular_GreenOrange_1200x1200.webm`],\n                    grey: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Grey_1200x1200.webm`],\n                    purple: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Purple_1200x1200.webm`],\n                }\n            },\n            divinesmite: {\n                'source': {\n                    yellowblue: [l2`Divine_Smite/DivineSmite_01_Regular_BlueYellow_Caster_400x400.webm`],\n                    greenyellow: [l2`Divine_Smite/DivineSmite_01_Regular_GreenYellow_Caster_400x400.webm`],\n                    orange: [l2`Divine_Smite/DivineSmite_01_Regular_Orange_Caster_400x400.webm`],\n                    purplepink: [l2`Divine_Smite/DivineSmite_01_Regular_PurplePink_Caster_400x400.webm`],\n                    darkpurple: [l2`Divine_Smite/DivineSmite_01_Dark_Purple_Caster_400x400.webm`],\n                    yellowwhite: [l2`Divine_Smite/DivineSmite_01_Regular_YellowWhite_Caster_400x400.webm`],\n                    darkred: [l2`Divine_Smite/DivineSmite_01_Dark_Red_Caster_400x400.webm`],\n                },\n                'target': {\n                    yellowblue: [l2`Divine_Smite/DivineSmite_01_Regular_BlueYellow_Target_400x400.webm`],\n                    greenyellow: [l2`Divine_Smite/DivineSmite_01_Regular_GreenYellow_Target_400x400.webm`],\n                    orange: [l2`Divine_Smite/DivineSmite_01_Regular_Orange_Target_400x400.webm`],\n                    purplepink: [l2`Divine_Smite/DivineSmite_01_Regular_PurplePink_Target_400x400.webm`],\n                    darkpurple: [l2`Divine_Smite/DivineSmite_01_Dark_Purple_Target_400x400.webm`],\n                    yellowwhite: [l2`Divine_Smite/DivineSmite_01_Regular_YellowWhite_Target_400x400.webm`],\n                    darkred: [l2`Divine_Smite/DivineSmite_01_Dark_Red_Target_400x400.webm`],\n                }\n            },\n            entangle: {\n                '01': {\n                    brown: [l1`Entangle/Entangle_01_Brown_400x400.webm`],\n                    green: [l1`Entangle/Entangle_01_Green_400x400.webm`],\n                    yellow: [l1`Entangle/Entangle_01_Yellow_400x400.webm`],\n                    darkpurple: [l1`Entangle/Entangle_01_Dark_Purple_400x400.webm`],\n                    palegreen: [l1`Entangle/Entangle_01_Regular_Green02_400x400.webm`]\n                }\n            },\n            fireball: {\n                loop: {\n                    blue: [l3`Fireball/FireballLoop_01_Blue_800x800.webm`],\n                    orange: [l3`Fireball/FireballLoop_01_Orange_800x800.webm`],\n                    purple: [l3`Fireball/FireballLoop_01_Purple_800x800.webm`],\n                },\n                explode: {\n                    blue: [l3`Fireball/FireballExplosion_01_Blue_800x800.webm`],\n                    orange: [l3`Fireball/FireballExplosion_01_Orange_800x800.webm`],\n                    purple: [l3`Fireball/FireballExplosion_01_Purple_800x800.webm`],\n                },\n                nodebris: {\n                    blue: [l3`Fireball/FireballLoopNoDebris_01_Blue_800x800.webm`],\n                    orange: [l3`Fireball/FireballLoopNoDebris_01_Orange_800x800.webm`],\n                    purple: [l3`Fireball/FireballLoopNoDebris_01_Purple_800x800.webm`],\n                },\n            },\n            fogcloud: {\n                '01': {\n                    white: [l1`Fog_Cloud/FogCloud_01_White_800x800.webm`]\n                },\n                '02': {\n                    white: [l1`Fog_Cloud/FogCloud_02_Regular_White_800x800.webm`],\n                    green: [l1`Fog_Cloud/FogCloud_02_Regular_Green_800x800.webm`]\n                },\n            },\n            generichealing: {\n                '01': {\n                    blue: [lg`Healing/HealingAbility_01_Blue_400x400.webm`],\n                    green: [lg`Healing/HealingAbility_01_Green_400x400.webm`],\n                    purple: [lg`Healing/HealingAbility_01_Purple_400x400.webm`],\n                    red: [lg`Healing/HealingAbility_01_Red_400x400.webm`],\n                    yellow: [lg`Healing/HealingAbility_01_Yellow_400x400.webm`],\n                },\n                '02': {\n                    whiteblue: [lg`Healing/HealingAbility_02_Regular_BlueWhite_Burst_600x600.webm`],\n                    greenorange: [lg`Healing/HealingAbility_02_Regular_GreenOrange_Burst_600x600.webm`],\n                    purplepink: [lg`Healing/HealingAbility_02_Regular_PurplePink_Burst_600x600.webm`],\n                    tealyellow: [lg`Healing/HealingAbility_02_Regular_TealYellow_Burst_600x600.webm`],\n                }\n            },\n            grease: {\n                \"01\": {\n                    brown: [l1`Grease/Grease_Dark_Brown_600x600.webm`],\n                    green: [l1`Grease/Grease_Dark_Green_600x600.webm`],\n                    grey: [l1`Grease/Grease_Dark_Grey_600x600.webm`],\n                    purple: [l1`Grease/Grease_Dark_Purple_600x600.webm`],\n                }\n            },\n            huntersmark: {\n                'eye': {\n                    blue: [l1`Hunters_Mark/HuntersMark_01_Regular_Blue_Pulse_200x200.webm`],\n                    green: [l1`Hunters_Mark/HuntersMark_01_Regular_Green_Pulse_200x200.webm`],\n                    purple: [l1`Hunters_Mark/HuntersMark_01_Regular_Purple_Pulse_200x200.webm`],\n                    red: [l1`Hunters_Mark/HuntersMark_01_Regular_Red_Pulse_200x200.webm`],\n                },\n                'eyeloop': {\n                    blue: [l1`Hunters_Mark/HuntersMark_01_Regular_Blue_Loop_200x200.webm`],\n                    green: [l1`Hunters_Mark/HuntersMark_01_Regular_Green_Loop_200x200.webm`],\n                    purple: [l1`Hunters_Mark/HuntersMark_01_Regular_Purple_Loop_200x200.webm`],\n                    red: [l1`Hunters_Mark/HuntersMark_01_Regular_Red_Loop_200x200.webm`],\n                },\n                'paw': {\n                    blue: [l1`Hunters_Mark/HuntersMark_02_Regular_Blue_Pulse_200x200.webm`],\n                    green: [l1`Hunters_Mark/HuntersMark_02_Regular_Green_Pulse_200x200.webm`],\n                    purple: [l1`Hunters_Mark/HuntersMark_02_Regular_Purple_Pulse_200x200.webm`],\n                    red: [l1`Hunters_Mark/HuntersMark_02_Regular_Red_Pulse_200x200.webm`],\n                },\n                'pawloop': {\n                    blue: [l1`Hunters_Mark/HuntersMark_02_Regular_Blue_Loop_200x200.webm`],\n                    green: [l1`Hunters_Mark/HuntersMark_02_Regular_Green_Loop_200x200.webm`],\n                    purple: [l1`Hunters_Mark/HuntersMark_02_Regular_Purple_Loop_200x200.webm`],\n                    red: [l1`Hunters_Mark/HuntersMark_02_Regular_Red_Loop_200x200.webm`],\n                },\n            },\n            mistystep: {\n                '01': {\n                    black: [l2`Misty_Step/MistyStep_01_Dark_Black_400x400.webm`],\n                    blue: [l2`Misty_Step/MistyStep_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Misty_Step/MistyStep_01_Regular_Green_400x400.webm`],\n                    orange: [l2`Misty_Step/MistyStep_01_Regular_Orange_400x400.webm`],\n                    purple: [l2`Misty_Step/MistyStep_01_Regular_Purple_400x400.webm`],\n                    darkgreen: [l2`Misty_Step/MistyStep_01_Dark_Green_400x400.webm`],\n                    darkred: [l2`Misty_Step/MistyStep_01_Dark_Red_400x400.webm`],\n                    grey: [l2`Misty_Step/MistyStep_01_Regular_Grey_400x400.webm`],\n                    red: [l2`Misty_Step/MistyStep_01_Regular_Red_400x400.webm`],\n                    yellow: [l2`Misty_Step/MistyStep_01_Regular_Yellow_400x400.webm`],\n                },\n                '02': {\n                    black: [l2`Misty_Step/MistyStep_02_Dark_Black_400x400.webm`],\n                    blue: [l2`Misty_Step/MistyStep_02_Regular_Blue_400x400.webm`],\n                    green: [l2`Misty_Step/MistyStep_02_Regular_Green_400x400.webm`],\n                    orange: [l2`Misty_Step/MistyStep_02_Regular_Orange_400x400.webm`],\n                    purple: [l2`Misty_Step/MistyStep_02_Regular_Purple_400x400.webm`],\n                    darkgreen: [l2`Misty_Step/MistyStep_02_Dark_Green_400x400.webm`],\n                    darkred: [l2`Misty_Step/MistyStep_02_Dark_Red_400x400.webm`],\n                    grey: [l2`Misty_Step/MistyStep_02_Regular_Grey_400x400.webm`],\n                    red: [l2`Misty_Step/MistyStep_02_Regular_Red_400x400.webm`],\n                    yellow: [l2`Misty_Step/MistyStep_02_Regular_Yellow_400x400.webm`],\n                }\n            },\n            moonbeam: {\n                loop: {\n                    blue: [l2`Moonbeam/Moonbeam_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Moonbeam/Moonbeam_01_Regular_Green_400x400.webm`],\n                    rainbow: [l2`Moonbeam/Moonbeam_01_Regular_Rainbow_400x400.webm`],\n                },\n                nopulse: {\n                    blue: [l2`Moonbeam/MoonbeamNoPulse_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Moonbeam/MoonbeamNoPulse_01_Regular_Green_400x400.webm`],\n                    rainbow: [l2`Moonbeam/MoonbeamNoPulse_01_Regular_Rainbow_400x400.webm`],\n                },\n                intro: {\n                    blue: [l2`Moonbeam/MoonbeamIntro_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Moonbeam/MoonbeamIntro_01_Regular_Green_400x400.webm`],\n                    rainbow: [l2`Moonbeam/MoonbeamIntro_01_Regular_Rainbow_400x400.webm`],\n                },\n                outro: {\n                    blue: [l2`Moonbeam/MoonbeamOutro_01_Regular_Blue_400x400.webm`],\n                    green: [l2`Moonbeam/MoonbeamOutro_01_Regular_Green_400x400.webm`],\n                    rainbow: [l2`Moonbeam/MoonbeamOutro_01_Regular_Rainbow_400x400.webm`],\n                },\n            },\n            sacredflame: {\n                source: {\n                    blue: [l0`Sacred_Flame/SacredFlameSource_01_Regular_Blue_400x400.webm`],\n                    green: [l0`Sacred_Flame/SacredFlameSource_01_Regular_Green_400x400.webm`],\n                    purple: [l0`Sacred_Flame/SacredFlameSource_01_Regular_Purple_400x400.webm`],\n                    yellow: [l0`Sacred_Flame/SacredFlameSource_01_Regular_Yellow_400x400.webm`],\n                    white: [l0`Sacred_Flame/SacredFlameSource_01_Regular_White_400x400.webm`],\n                },\n                target: {\n                    blue: [l0`Sacred_Flame/SacredFlameTarget_01_Regular_Blue_400x400.webm`],\n                    green: [l0`Sacred_Flame/SacredFlameTarget_01_Regular_Green_400x400.webm`],\n                    purple: [l0`Sacred_Flame/SacredFlameTarget_01_Regular_Purple_400x400.webm`],\n                    yellow: [l0`Sacred_Flame/SacredFlameTarget_01_Regular_Yellow_400x400.webm`],\n                    white: [l0`Sacred_Flame/SacredFlameTarget_01_Regular_White_400x400.webm`],\n                },\n            },\n            sneakattack: {\n                '01': {\n                    darkgreen: [l1`Sneak_Attack/Sneak_Attack_Dark_Green_300x300.webm`],\n                    darkpurple: [l1`Sneak_Attack/Sneak_Attack_Dark_Purple_300x300.webm`],\n                    darkred: [l1`Sneak_Attack/Sneak_Attack_Dark_Red_300x300.webm`],\n                    blue: [l1`Sneak_Attack/Sneak_Attack_Regular_Blue_300x300.webm`],\n                    orange: [l1`Sneak_Attack/Sneak_Attack_Regular_Orange_300x300.webm`],\n                    pink: [l1`Sneak_Attack/Sneak_Attack_Regular_Pink_300x300.webm`],\n                    yellow: [l1`Sneak_Attack/Sneak_Attack_Regular_Yellow_300x300.webm`]\n                }\n            },\n            thunderwave: {\n                left: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_BLeft_600x600.webm`],\n                    green: [l1`Thunderwave/Thunderwave_01_Bright_Green_BLeft_600x600.webm`],\n                    orange: [l1`Thunderwave/Thunderwave_01_Bright_Orange_BLeft_600x600.webm`],\n                    purple: [l1`Thunderwave/Thunderwave_01_Dark_Purple_BLeft_600x600.webm`],\n                    red: [l1`Thunderwave/Thunderwave_01_Dark_Red_BLeft_600x600.webm`],\n                },\n                mid: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_BMid_600x600.webm`],\n                    green: [l1`Thunderwave/Thunderwave_01_Bright_Green_BMid_600x600.webm`],\n                    orange: [l1`Thunderwave/Thunderwave_01_Bright_Orange_BMid_600x600.webm`],\n                    purple: [l1`Thunderwave/Thunderwave_01_Dark_Purple_BMid_600x600.webm`],\n                    red: [l1`Thunderwave/Thunderwave_01_Dark_Red_BMid_600x600.webm`],\n                },\n                center: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_Center_600x600.webm`],\n                    green: [l1`Thunderwave/Thunderwave_01_Bright_Green_Center_600x600.webm`],\n                    orange: [l1`Thunderwave/Thunderwave_01_Bright_Orange_Center_600x600.webm`],\n                    purple: [l1`Thunderwave/Thunderwave_01_Dark_Purple_Center_600x600.webm`],\n                    red: [l1`Thunderwave/Thunderwave_01_Dark_Red_Center_600x600.webm`],\n                },\n            },\n            shatter: {\n                '01': {\n                    purple: [l2`Shatter/Shatter_01_Purple_400x400.webm`],\n                    red: [l2`Shatter/Shatter_01_Red_400x400.webm`],\n                    blue: [l2`Shatter/Shatter_01_Blue_400x400.webm`],\n                    green: [l2`Shatter/Shatter_01_Green_400x400.webm`],\n                    orange: [l2`Shatter/Shatter_01_Orange_400x400.webm`]\n                }\n            },\n            sleep: {\n                '01': {\n                    darkpurple: [l1`Sleep/Cloud01_01_Dark_Purple_400x400.webm`],\n                    blue: [l1`Sleep/Cloud01_01_Regular_Blue_400x400.webm`],\n                    green: [l1`Sleep/Cloud01_01_Regular_Green_400x400.webm`],\n                    orangepurple: [l1`Sleep/Cloud01_01_Dark_OrangePurple_400x400.webm`],\n                    pink: [l1`Sleep/Cloud01_01_Regular_Pink_400x400.webm`],\n                    yellow: [l1`Sleep/Cloud01_01_Regular_Yellow_400x400.webm`],\n                },\n                '02': {\n                    darkpurple: [l1`Sleep/Cloud01_02_Dark_Purple_400x400.webm`],\n                    blue: [l1`Sleep/Cloud01_02_Regular_Blue_400x400.webm`],\n                    green: [l1`Sleep/Cloud01_02_Regular_Green_400x400.webm`],\n                    orangepurple: [l1`Sleep/Cloud01_02_Dark_OrangePurple_400x400.webm`],\n                    pink: [l1`Sleep/Cloud01_02_Regular_Pink_400x400.webm`],\n                    yellow: [l1`Sleep/Cloud01_02_Regular_Yellow_400x400.webm`],\n                },\n                marker: {\n                    darkpurple: [l1`Sleep/SleepMarker01_01_Dark_Purple_400x400.webm`],\n                    blue: [l1`Sleep/SleepMarker01_01_Regular_Blue_400x400.webm`],\n                    green: [l1`Sleep/SleepMarker01_01_Regular_Green_400x400.webm`],\n                    orangepurple: [l1`Sleep/SleepMarker01_01_Dark_OrangePurple_400x400.webm`],\n                    pink: [l1`Sleep/SleepMarker01_01_Regular_Pink_400x400.webm`],\n                    yellow: [l1`Sleep/SleepMarker01_01_Regular_Yellow_400x400.webm`],\n                },\n                symbol: {\n                    darkpurple: [l1`Sleep/SleepSymbol01_01_Dark_Purple_400x400.webm`],\n                    blue: [l1`Sleep/SleepSymbol01_01_Regular_Blue_400x400.webm`],\n                    green: [l1`Sleep/SleepSymbol01_01_Regular_Green_400x400.webm`],\n                    orangepurple: [l1`Sleep/SleepSymbol01_01_Dark_OrangePurple_400x400.webm`],\n                    pink: [l1`Sleep/SleepSymbol01_01_Regular_Pink_400x400.webm`],\n                    yellow: [l1`Sleep/SleepSymbol01_01_Regular_Yellow_400x400.webm`],\n                },\n            },\n            sleetstorm: {\n                '01': {\n                    blue: [l3`Sleet_Storm/SleetStorm_01_Blue_800x800.webm`],\n                    green: [l3`Sleet_Storm/SleetStorm_01_Green_800x800.webm`],\n                    purple: [l3`Sleet_Storm/SleetStorm_01_Purple_800x800.webm`],\n                    tealyellow: [l3`Sleet_Storm/SleetStorm_01_TealYellow_800x800.webm`]\n                }\n            },\n            spiritguardians: {\n                '01': {\n                    black: [l3`Spirit_Guardians/SpiritGuardians_01_Dark_Black_600x600.webm`],\n                    darkblue: [l3`Spirit_Guardians/SpiritGuardians_01_Dark_Blue_600x600.webm`],\n                    darkpurple: [l3`Spirit_Guardians/SpiritGuardians_01_Dark_Purple_600x600.webm`],\n                    darkred: [l3`Spirit_Guardians/SpiritGuardians_01_Dark_Red_600x600.webm`],\n                    darkwhiteblue: [l3`Spirit_Guardians/SpiritGuardians_01_Dark_WhiteBlue_600x600.webm`],\n                    greenorange: [l3`Spirit_Guardians/SpiritGuardians_01_Light_GreenOrange_600x600.webm`],\n                    lightblue: [l3`Spirit_Guardians/SpiritGuardians_01_Light_Blue_600x600.webm`],\n                    lightgreen: [l3`Spirit_Guardians/SpiritGuardians_01_Light_Green_600x600.webm`],\n                    lightorange: [l3`Spirit_Guardians/SpiritGuardians_01_Light_Orange_600x600.webm`],\n                    yellowblue: [l3`Spirit_Guardians/SpiritGuardians_01_Light_BlueYellow_600x600.webm`],\n                    purplepink: [l3`Spirit_Guardians/SpiritGuardians_01_Light_PinkPurple_600x600.webm`],\n                },\n                '02': {\n                    black: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Dark_Black_600x600.webm`],\n                    darkblue: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Dark_Blue_600x600.webm`],\n                    darkpurple: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Dark_Purple_600x600.webm`],\n                    darkred: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Dark_Red_600x600.webm`],\n                    darkwhiteblue: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Dark_WhiteBlue_600x600.webm`],\n                    greenorange: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Light_GreenOrange_600x600.webm`],\n                    lightblue: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Light_Blue_600x600.webm`],\n                    lightgreen: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Light_Green_600x600.webm`],\n                    lightorange: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Light_Orange_600x600.webm`],\n                    yellowblue: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Light_BlueYellow_600x600.webm`],\n                    purplepink: [l3`Spirit_Guardians/SpiritGuardiansParticles_01_Light_PinkPurple_600x600.webm`],\n                },\n                '03': {\n                    black: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Dark_Black_600x600.webm`],\n                    darkblue: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Dark_Blue_600x600.webm`],\n                    darkpurple: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Dark_Purple_600x600.webm`],\n                    darkred: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Dark_Red_600x600.webm`],\n                    darkwhiteblue: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Dark_WhiteBlue_600x600.webm`],\n                    greenorange: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Light_GreenOrange_600x600.webm`],\n                    lightblue: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Light_Blue_600x600.webm`],\n                    lightgreen: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Light_Green_600x600.webm`],\n                    lightorange: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Light_Orange_600x600.webm`],\n                    yellowblue: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Light_BlueYellow_600x600.webm`],\n                    purplepink: [l3`Spirit_Guardians/SpiritGuardiansSpirits_01_Light_PinkPurple_600x600.webm`],\n                },\n                noring: {\n                    black: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Dark_Black_600x600.webm`],\n                    darkblue: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Dark_Blue_600x600.webm`],\n                    darkpurple: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Dark_Purple_600x600.webm`],\n                    darkred: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Dark_Red_600x600.webm`],\n                    darkwhiteblue: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Dark_WhiteBlue_600x600.webm`],\n                    greenorange: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Light_GreenOrange_600x600.webm`],\n                    lightblue: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Light_Blue_600x600.webm`],\n                    lightgreen: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Light_Green_600x600.webm`],\n                    lightorange: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Light_Orange_600x600.webm`],\n                    yellowblue: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Light_BlueYellow_600x600.webm`],\n                    purplepink: [l3`Spirit_Guardians/SpiritGuardiansNoRing_01_Light_PinkPurple_600x600.webm`],\n                },\n            },\n            tollthedead: {\n                bell: {\n                    blue: [l0`Toll_The_Dead/TollTheDeadBell_01_Regular_Blue_400x400.webm`],\n                    green: [l0`Toll_The_Dead/TollTheDeadBell_01_Regular_Green_400x400.webm`],\n                    purple: [l0`Toll_The_Dead/TollTheDeadBell_01_Regular_Purple_400x400.webm`],\n                    red: [l0`Toll_The_Dead/TollTheDeadBell_01_Regular_Red_400x400.webm`],\n                    grey: [l0`Toll_The_Dead/TollTheDeadBell_01_Regular_Grey_400x400.webm`],\n                },\n                complete: {\n                    blue: [l0`Toll_The_Dead/TollTheDead_01_Regular_Blue_400x400.webm`],\n                    green: [l0`Toll_The_Dead/TollTheDead_01_Regular_Green_400x400.webm`],\n                    purple: [l0`Toll_The_Dead/TollTheDead_01_Regular_Purple_400x400.webm`],\n                    red: [l0`Toll_The_Dead/TollTheDead_01_Regular_Red_400x400.webm`],\n                    grey: [l0`Toll_The_Dead/TollTheDead_01_Regular_Grey_400x400.webm`],\n                },\n                shockwave: {\n                    blue: [l0`Toll_The_Dead/TollTheDeadShockwave_01_Regular_Blue_400x400.webm`],\n                    green: [l0`Toll_The_Dead/TollTheDeadShockwave_01_Regular_Green_400x400.webm`],\n                    purple: [l0`Toll_The_Dead/TollTheDeadShockwave_01_Regular_Purple_400x400.webm`],\n                    red: [l0`Toll_The_Dead/TollTheDeadShockwave_01_Regular_Red_400x400.webm`],\n                    grey: [l0`Toll_The_Dead/TollTheDeadShockwave_01_Regular_Grey_400x400.webm`],\n                },\n                skull: {\n                    blue: [l0`Toll_The_Dead/TollTheDeadSkullSmoke_01_Regular_Blue_400x400.webm`],\n                    green: [l0`Toll_The_Dead/TollTheDeadSkullSmoke_01_Regular_Green_400x400.webm`],\n                    purple: [l0`Toll_The_Dead/TollTheDeadSkullSmoke_01_Regular_Purple_400x400.webm`],\n                    red: [l0`Toll_The_Dead/TollTheDeadSkullSmoke_01_Regular_Red_400x400.webm`],\n                    grey: [l0`Toll_The_Dead/TollTheDeadSkullSmoke_01_Regular_Grey_400x400.webm`],\n                },\n            },\n            wallofforce: {\n                '01': {\n                    blue: [l5`Wall_Of_Force/WallOfForce_01_Blue_Sphere_400x400.webm`],\n                    green: [l5`Wall_Of_Force/WallOfForce_01_Green_Sphere_400x400.webm`],\n                    grey: [l5`Wall_Of_Force/WallOfForce_01_Grey_Sphere_400x400.webm`],\n                    orange: [l5`Wall_Of_Force/WallOfForce_01_Orange_Sphere_400x400.webm`],\n                    purple: [l5`Wall_Of_Force/WallOfForce_01_Purple_Sphere_400x400.webm`],\n                    red: [l5`Wall_Of_Force/WallOfForce_01_Red_Sphere_400x400.webm`],\n                    yellow: [l5`Wall_Of_Force/WallOfForce_01_Yellow_Sphere_400x400.webm`]\n                }\n            },\n            web: {\n                '01': {\n                    white: [l2`Web/Web_01_White_01_400x400.webm`]\n                },\n                '02': {\n                    white: [l2`Web/Web_01_White_02_400x400.webm`]\n                }\n            },\n            whirlwind: {\n                '01': {\n                    blue: [l7`Whirlwind/Whirlwind_01_Blue_400x400.webm`],\n                    bluegrey: [l7`Whirlwind/Whirlwind_01_BlueGrey_01_400x400.webm`],\n                    green: [l7`Whirlwind/Whirlwind_01_Green_400x400.webm`],\n                    purple: [l7`Whirlwind/Whirlwind_01_Purple_400x400.webm`],\n                    red: [l7`Whirlwind/Whirlwind_01_Red_400x400.webm`],\n                }\n            },\n        },\n        tokenborder: {\n            static: {\n                '01': {\n                    blue: [lg`Token_Border/TokenBorderCircle_01_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_01_Regular_Purple_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Token_Border/TokenBorderCircle_02_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_02_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Token_Border/TokenBorderCircle_03_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_03_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_03_Regular_Purple_400x400.webm`],\n                },\n                '04': {\n                    blue: [lg`Token_Border/TokenBorderCircle_04_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_04_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_04_Regular_Purple_400x400.webm`],\n                },\n                '05': {\n                    blue: [lg`Token_Border/TokenBorderCircle_05_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_05_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_05_Regular_Purple_400x400.webm`],\n                },\n                '06': {\n                    blue: [lg`Token_Border/TokenBorderCircle_06_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_06_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_06_Regular_Purple_400x400.webm`],\n                },\n                '07': {\n                    blue: [lg`Token_Border/TokenBorderCircle_07_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_07_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_07_Regular_Purple_400x400.webm`],\n                },\n                '08': {\n                    blue: [lg`Token_Border/TokenBorderCircle_08_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_08_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_08_Regular_Purple_400x400.webm`],\n                },\n                '09': {\n                    blue: [lg`Token_Border/TokenBorderCircle_09_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_09_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_09_Regular_Purple_400x400.webm`],\n                },\n                '10': {\n                    blue: [lg`Token_Border/TokenBorderCircle_10_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_10_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_10_Regular_Purple_400x400.webm`],\n                },\n                '11': {\n                    blue: [lg`Token_Border/TokenBorderCircle_11_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_11_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_11_Regular_Purple_400x400.webm`],\n                },\n                '12': {\n                    blue: [lg`Token_Border/TokenBorderCircle_12_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_12_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_12_Regular_Purple_400x400.webm`],\n                },\n                '13': {\n                    blue: [lg`Token_Border/TokenBorderCircle_13_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircle_13_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircle_13_Regular_Purple_400x400.webm`],\n                },\n            },\n            spinning: {\n                '01': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_01_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_01_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_01_Regular_Purple_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_02_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_02_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_03_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_03_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_03_Regular_Purple_400x400.webm`],\n                },\n                '04': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_04_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_04_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_04_Regular_Purple_400x400.webm`],\n                },\n                '05': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_05_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_05_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_05_Regular_Purple_400x400.webm`],\n                },\n                '06': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_06_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_06_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_06_Regular_Purple_400x400.webm`],\n                },\n                '07': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_07_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_07_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_07_Regular_Purple_400x400.webm`],\n                },\n                '08': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_08_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_08_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_08_Regular_Purple_400x400.webm`],\n                },\n                '09': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_09_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_09_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_09_Regular_Purple_400x400.webm`],\n                },\n                '10': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_10_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_10_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_10_Regular_Purple_400x400.webm`],\n                },\n                '11': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_11_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_11_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_11_Regular_Purple_400x400.webm`],\n                },\n                '12': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_12_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_12_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_12_Regular_Purple_400x400.webm`],\n                },\n                '13': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_13_Regular_Blue_400x400.webm`],\n                    orange: [lg`Token_Border/TokenBorderCircleSpin_13_Regular_Orange_400x400.webm`],\n                    purple: [lg`Token_Border/TokenBorderCircleSpin_13_Regular_Purple_400x400.webm`],\n                },\n            },\n        },\n        trap: {\n            fire: {\n                single: {\n                    orange: [lg`Traps/FireTrap02_01_Regular_Orange_1400x1400.webm`],\n                    green: [lg`Traps/FireTrap02_01_Regular_Green_1400x1400.webm`]\n                },\n                double: {\n                    orange: [lg`Traps/FireTrapDual02_01_Regular_Orange_1400x1400.webm`],\n                    green: [lg`Traps/FireTrapDual02_01_Regular_Green_1400x1400.webm`]\n                }\n            }\n        },\n    }\n\n    /**\n     * Return Types:\n     * \n     * Weapon\n     * \n     */\n\n    JB2APATREONDB.return = {\n        _template: 'ranged',\n        weapon: {\n            bone: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bone01_01_Regular_White_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bone01_01_Regular_White_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bone01_01_Regular_White_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bone01_01_Regular_White_Return_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            chakram: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Chakram01_01_Regular_White_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Chakram01_01_Regular_White_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Chakram01_01_Regular_White_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Chakram01_01_Regular_White_Return_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            dagger: {\n                '01': {\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Blue_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Blue_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Blue_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_Blue_Return_90ft_4000x400.webm`]\n                    },\n                    darkpurple: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Dark_Purple_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Dark_Purple_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Dark_Purple_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Dark_Purple_Return_90ft_4000x400.webm`]\n                    },\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_Return_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_Return_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_Return_90ft_4000x400.webm`]\n                    },\n                },\n                '02': {\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Blue_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Blue_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Blue_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Blue_Return_90ft_4000x400.webm`]\n                    },\n                    darkpurple: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Dark_Purple_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Dark_Purple_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Dark_Purple_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Dark_Purple_Return_90ft_4000x400.webm`]\n                    },\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_White_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_White_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_White_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_White_Return_90ft_4000x400.webm`]\n                    },\n                    pink: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Pink_Return_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger02_01_Regular_Red_90ft_4000x400.webm`]\n                    },\n                }\n            },\n            dart: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dart01_01_Regular_White_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dart01_01_Regular_White_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dart01_01_Regular_White_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dart01_01_Regular_White_Return_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            greatsword: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/GreatSword01_01_Regular_White_Return_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/GreatSword01_01_Regular_White_Return_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/GreatSword01_01_Regular_White_Return_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/GreatSword01_01_Regular_White_Return_90ft_4000x600.webm`]\n                    }\n                }\n            },\n            hammer: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Hammer01_01_Regular_White_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Hammer01_01_Regular_White_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Hammer01_01_Regular_White_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Hammer01_01_Regular_White_Return_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            javelin: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Javelin01_01_Regular_White_Return_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Javelin01_01_Regular_White_Return_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Javelin01_01_Regular_White_Return_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Javelin01_01_Regular_White_Return_90ft_4000x600.webm`],\n                    }\n                }\n            },\n            spear: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Spear01_01_Regular_White_Return_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Spear01_01_Regular_White_Return_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Spear01_01_Regular_White_Return_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Spear01_01_Regular_White_Return_90ft_4000x600.webm`],\n                    }\n                }\n            },\n        },\n    }\n}\nexport { JB2APATREONDB }","const JB2AFREEDB = {};\nexport async function initializeJB2AFreeDB(path) {\n\n    JB2AFREEDB._templates = {\n        ranged: [200, 200, 200]\n    };\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l0 = prefix('Cantrip')\n    const l1 = prefix('1st_Level')\n    const l2 = prefix('2nd_Level')\n    const l3 = prefix('3rd_Level')\n    const l4 = prefix('4th_Level')\n    const l5 = prefix('5th_Level')\n    const l6 = prefix('6th_Level')\n    const l7 = prefix('7th_Level')\n    const lg = prefix('Generic')\n\n    /**\n     * Range Types:\n     * \n     * Weapon\n     * Spell\n     * Generic\n     * \n     */\n\n    JB2AFREEDB.range = {\n        _template: 'ranged',\n        weapon: {\n            arrow: {\n                \"regular\": {\n                    regular: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_White_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow01_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                },\n                'physical': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Arrow02_01_Regular_Blue_Physical_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            bolt: {\n                'physical': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bolt01_01_Regular_Orange_Physical_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            bomb: {\n                '01': {\n                    black: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowBomb01_01_Regular_Black_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            bullet: {\n                '1': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                },\n                '2': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                },\n                '3': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                }\n            },\n            cannonball: {\n                '01': {\n                    black: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaunchCannonBall01_01_Regular_Black_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            dagger: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_90ft_4000x400.webm`]\n                    }\n                },\n            },\n            flask: {\n                '01': {\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Orange_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            lasershot: {\n                '01': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                    green: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Green_90ft_4000x400.webm`]\n                    },\n                    orange: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                    red: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserShot_01_Regular_Red_90ft_4000x400.webm`]\n                    },\n                }\n            },\n            lasersword: {\n                '01': {\n                    blue: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSword01_01_Regular_Blue_90ft_4000x600.webm`]\n                    }\n                },\n                '02': {\n                    red: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Red_15ft_1000x600.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Red_30ft_1600x600.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Red_60ft_2800x600.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/LaserSwordDB01_01_Regular_Red_90ft_4000x600.webm`]\n                    }\n                }\n            },\n            snipe: {\n                '01': {\n                    blue: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Blue_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            snowball: {\n                '01': {\n                    white: {\n                        '05ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_05ft_600x500.webm`],\n                        '15ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_15ft_1000x500.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_30ft_1600x500.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_60ft_2800x500.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/SnowballToss_01_Regular_White_90ft_4000x500.webm`],\n                    },\n                },\n            },\n        },\n        spell: {\n            chainlightning: {\n                primary: {\n                    blue: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_05ft_Primary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_15ft_Primary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_30ft_Primary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_60ft_Primary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_90ft_Primary_4000x400.webm`]\n                    },\n                },\n                secondary: {\n                    blue: {\n                        '05ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_05ft_Secondary_600x400.webm`],\n                        '15ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_15ft_Secondary_1000x400.webm`],\n                        '30ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_30ft_Secondary_1600x400.webm`],\n                        '60ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_60ft_Secondary_2800x400.webm`],\n                        '90ft': [l6`Chain_Lightning/ChainLightning_01_Regular_Blue_90ft_Secondary_4000x400.webm`]\n                    },\n                }\n            },\n            disintegrate: {\n                '01': {\n                    green: {\n                        '05ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_05ft_600x400.webm`],\n                        '15ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_15ft_1000x400.webm`],\n                        '30ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_30ft_1600x400.webm`],\n                        '60ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_60ft_2800x400.webm`],\n                        '90ft': [l6`Disintegrate/Disintegrate_01_Regular_Green01_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            eldritchblast: {\n                '01': {\n                    purple: {\n                        '05ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_05ft_600x400.webm`],\n                        '15ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_15ft_1000x400.webm`],\n                        '30ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_30ft_1600x400.webm`],\n                        '60ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_60ft_2800x400.webm`],\n                        '90ft': [l0`Eldritch_Blast/EldritchBlast_01_Regular_Purple_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            fireballbeam: {\n                '01': {\n                    orange: {\n                        '05ft': [l3`Fireball/FireballBeam_01_Orange_05ft_600x400.webm`],\n                        '15ft': [l3`Fireball/FireballBeam_01_Orange_15ft_1000x400.webm`],\n                        '30ft': [l3`Fireball/FireballBeam_01_Orange_30ft_1600x400.webm`],\n                        '60ft': [l3`Fireball/FireballBeam_01_Orange_60ft_2800x400.webm`],\n                        '90ft': [l3`Fireball/FireballBeam_01_Orange_90ft_4000x400.webm`]\n                    },\n                },\n            },\n            firebolt: {\n                '01': {\n                    orange: {\n                        '05ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [l0`Fire_Bolt/FireBolt_01_Regular_Orange_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            guidingbolt: {\n                '01': {\n                    yellowblue: {\n                        '05ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_05ft_600x400.webm`],\n                        '15ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_15ft_1000x400.webm`],\n                        '30ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_30ft_1600x400.webm`],\n                        '60ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_60ft_2800x400.webm`],\n                        '90ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_BlueYellow_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            magicmissile: {\n                '01': {\n                    purple: {\n                        '05ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_05ft_01_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_05ft_02_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_05ft_03_600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_05ft_04_600x400.webm`\n                        ],\n                        '15ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_15ft_01_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_15ft_02_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_15ft_03_1000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_15ft_04_1000x400.webm`\n                        ],\n                        '30ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_30ft_01_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_30ft_02_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_30ft_03_1600x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_30ft_04_1600x400.webm`\n                        ],\n                        '60ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_60ft_01_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_60ft_02_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_60ft_03_2800x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_60ft_04_2800x400.webm`\n                        ],\n                        '90ft': [\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_90ft_01_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_90ft_02_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_90ft_03_4000x400.webm`,\n                            l1`Magic_Missile/MagicMissile_01_Regular_Purple_90ft_04_4000x400.webm`\n                        ]\n                    }\n                }\n            },\n            rayoffrost: {\n                '01': {\n                    blue: {\n                        '05ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [l0`Ray_Of_Frost/RayOfFrost_01_Regular_Blue_90ft_4000x400.webm`]\n                    }\n                }\n            },\n            scorchingray: {\n                '01': {\n                    orange: {\n                        '05ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_05ft_600x400.webm`],\n                        '15ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_15ft_1000x400.webm`],\n                        '30ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_30ft_1600x400.webm`],\n                        '60ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_60ft_2800x400.webm`],\n                        '90ft': [l2`Scorching_Ray/ScorchingRay_01_Regular_Orange_90ft_4000x400.webm`]\n                    },\n                }\n            },\n            witchbolt: {\n                '01': {\n                    blue: {\n                        '05ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [l1`Witch_Bolt/WitchBolt_01_Regular_Blue_90ft_4000x400.webm`],\n                    }\n                }\n            },\n\n        },\n        generic: {\n            conduit: {\n                circle: {\n                    purpleblue: {\n                        '05ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_05ft_600x400.webm`],\n                        '15ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyConduitCircle_01_Regular_BluePurple_90ft_4000x400.webm`],\n                    },\n                },\n            },\n            energybeam: {\n                '01': {\n                    blue: {\n                        '15ft': [lg`Energy/EnergyBeam_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_01_Regular_Blue_90ft_4000x400.webm`],\n                    },\n                },\n                '02': {\n                    blue: {\n                        '15ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_02_Regular_BluePink_90ft_4000x400.webm`],\n                    },\n                },\n                '03': {\n                    blue: {\n                        '15ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_15ft_1000x400.webm`],\n                        '30ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_30ft_1600x400.webm`],\n                        '60ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_60ft_2800x400.webm`],\n                        '90ft': [lg`Energy/EnergyBeam_03_Regular_BluePink_90ft_4000x400.webm`],\n                    },\n                }\n            },\n            energystrand: {\n                '01': {\n                    purple: {\n                        '05ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_05ft_600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_05ft_600x400.webm`,\n                        ],\n                        '15ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_15ft_1000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_15ft_1000x400.webm`,\n                        ],\n                        '30ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_30ft_1600x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_30ft_1600x400.webm`,\n                        ],\n                        '60ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_60ft_2800x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_60ft_2800x400.webm`,\n                        ],\n                        '90ft': [\n                            lg`Energy/EnergyStrand_01_Regular_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_02_Regular_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_03_Regular_Purple_90ft_4000x400.webm`,\n                            lg`Energy/EnergyStrand_04_Regular_Purple_90ft_4000x400.webm`,\n                        ],\n                    },\n                },\n            },\n            iceshard: {\n                '01': {\n                    blue: {\n                        '05ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_05ft_600x400.webm`],\n                        '15ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_15ft_1000x400.webm`],\n                        '30ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_30ft_1600x400.webm`],\n                        '60ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_60ft_2800x400.webm`],\n                        '90ft': [lg`RangedSpell/ProjectileIceShard01_01_Regular_Blue_90ft_4000x400.webm`]\n                    },\n                },\n            },\n            leaves: {\n                '01': {\n                    greenorange: {\n                        '05ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_05ft_600x400.webm`],\n                        '15ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_15ft_1000x400.webm`],\n                        '30ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_30ft_1600x400.webm`],\n                        '60ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_60ft_2800x400.webm`],\n                        '90ft': [lg`Nature/SwirlingLeaves01_01_Regular_GreenOrange_90ft_4000x400.webm`]\n                    },\n                },\n            },\n        },\n    }\n\n    /**\n     * Melee Types:\n     *\n     * Weapon\n     * Creature\n     * \n     */\n\n    JB2AFREEDB.melee = {\n        creature: {\n            bite: {\n                '01': {\n                    red: [lg`Creature/Bite_01_Regular_Red_400x400.webm`],\n                }\n            },\n            claw: {\n                '01': {\n                    red: [lg`Creature/Claws_01_Regular_Red_400x400.webm`],\n                }\n            },\n        },\n        weapon: {\n            club: {\n                '01': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Club01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Club01_06_Regular_White_800x600.webm`]\n                    ],\n                }\n            },\n            dagger: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/Dagger02_01_Regular_White_800x600.webm`]\n                }\n            },\n            falchion: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Falchion01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Falchion01_06_Regular_White_800x600.webm`\n                    ]\n                }\n            },\n            flurryofblows: {\n                'magical': {\n                    blue: {\n                        '1': [lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Blue_Magical01_800x600.webm`],\n                        '2': [lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Blue_Magical02_800x600.webm`]\n                    }\n                },\n                'physical': {\n                    blue: {\n                        '1': [lg`Unarmed_Attacks/Flurry_Of_Blows/FlurryOfBlows_01_Regular_Blue_Physical01_800x600.webm`]\n                    }\n                }\n            },\n            glaive: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Glaive01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Glaive01_06_Regular_White_800x600.webm`\n                    ]\n                }\n            },\n            greataxe: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/GreatAxe01_01_Regular_White_800x600.webm`]\n                }\n            },\n            greatclub: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/GreatClub01_01_Regular_White_800x600.webm`]\n                }\n            },\n            greatsword: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/GreatSword01_01_Regular_White_800x600.webm`]\n                }\n            },\n            halberd: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Halberd01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Halberd01_06_Regular_White_800x600.webm`\n                    ],\n                }\n            },\n            hammer: {\n                '01': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Hammer01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Hammer01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Hammer01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Hammer01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Hammer01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Hammer01_06_Regular_White_800x600.webm`]\n                    ],\n                },\n            },\n            handaxe: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/HandAxe02_01_Regular_White_800x600.webm`]\n                }\n            },\n            lasersword: {\n                '01': {\n                    blue: [lg`Weapon_Attacks/Melee/LaserSword01_01_Regular_Blue_800x600.webm`]\n                }\n            },\n            mace: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/Mace01_01_Regular_White_800x600.webm`]\n                },\n                '02': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Mace01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Mace01_06_Regular_White_800x600.webm`]\n                    ],\n                }\n            },\n            maul: {\n                '01': {\n                    white: [lg`Weapon_Attacks/Melee/Maul01_01_Regular_White_800x600.webm`]\n                }\n            },\n            quarterstaff: {\n                white: [\n                    lg`Weapon_Attacks/Melee/Quarterstaff01_01_Regular_White_800x600.webm`,\n                    lg`Weapon_Attacks/Melee/Quarterstaff01_02_Regular_White_800x600.webm`,\n                    lg`Weapon_Attacks/Melee/Quarterstaff01_03_Regular_White_800x600.webm`,\n                    lg`Weapon_Attacks/Melee/Quarterstaff01_04_Regular_White_800x600.webm`,\n                    lg`Weapon_Attacks/Melee/Quarterstaff01_05_Regular_White_800x600.webm`,\n                    lg`Weapon_Attacks/Melee/Quarterstaff01_06_Regular_White_800x600.webm`\n                ],\n            },\n            rapier: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Rapier01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Rapier01_06_Regular_White_800x600.webm`\n                    ]\n                }\n            },\n            scimitar: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Scimitar01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Scimitar01_06_Regular_White_800x600.webm`\n                    ]\n                }\n            },\n            shortsword: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Shortsword01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Shortsword01_06_Regular_White_800x600.webm`\n                    ]\n                }\n            },\n            spear: {\n                'fire': {\n                    white: [lg`Weapon_Attacks/Melee/Spear01_01_Regular_White_800x600.webm`],\n                },\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Spear01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Spear01_06_Regular_White_800x600.webm`\n                    ],\n                }\n            },\n            sword: {\n                '01': {\n                    white: [\n                        lg`Weapon_Attacks/Melee/Sword01_01_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_02_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_03_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_04_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_05_Regular_White_800x600.webm`,\n                        lg`Weapon_Attacks/Melee/Sword01_06_Regular_White_800x600.webm`\n                    ]\n                }\n            },\n            unarmedstrike: {\n                'magical': {\n                    blue: {\n                        '1': [lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Blue_Magical01_800x600.webm`],\n                        '2': [lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Blue_Magical02_800x600.webm`]\n                    }\n                },\n                'physical': {\n                    blue: {\n                        '1': [lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Blue_Physical01_800x600.webm`],\n                        '2': [lg`Unarmed_Attacks/Unarmed_Strike/UnarmedStrike_01_Regular_Blue_Physical02_800x600.webm`]\n                    }\n                }\n            },\n            warhammer: {\n                '01': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Warhammer01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Warhammer01_06_Regular_White_800x600.webm`]\n                    ],\n                }\n            },\n            wrench: {\n                '01': {\n                    white: [\n                        [lg`Weapon_Attacks/Melee/Wrench01_01_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_02_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_03_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_04_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_05_Regular_White_800x600.webm`],\n                        [lg`Weapon_Attacks/Melee/Wrench01_06_Regular_White_800x600.webm`]\n                    ],\n                }\n            },\n        },\n    }\n\n    /**\n     * Template Types:\n     * \n     * Cone\n     * Square\n     * Circle\n     * Ray\n     * \n     */\n\n    JB2AFREEDB.templatefx = {\n        circle: {\n            armsofhadar: {\n                '01': {\n                    darkpurple: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Purple_500x500.webm`],\n                }\n            },\n            blacktentacles: {\n                '01': {\n                    darkpurple: [l4`Black_Tentacles/BlackTentacles_01_Dark_Purple_600x600.webm`],\n                },\n            },\n            calllightning: {\n                '01': {\n                    blue: [l3`Call_Lightning/CallLightning_01_Blue_1000x1000.webm`],\n                    blueorange: [l3`Call_Lightning/CallLightning_01_BlueOrange_1000x1000.webm`],\n                    green: [l3`Call_Lightning/CallLightning_01_Green_1000x1000.webm`],\n                    pinkyellow: [l3`Call_Lightning/CallLightning_01_PinkYellow_1000x1000.webm`],\n                    purple: [l3`Call_Lightning/CallLightning_01_Purple_1000x1000.webm`],\n                    red: [l3`Call_Lightning/CallLightning_01_Red_1000x1000.webm`],\n                    yellow: [l3`Call_Lightning/CallLightning_01_Yellow_1000x1000.webm`],\n                }\n            },\n            cloudofdaggers: {\n                '01': {\n                    blue: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Blue_400x400.webm`],\n                    green: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Green_400x400.webm`],\n                    orange: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Orange_400x400.webm`],\n                    purple: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Purple_400x400.webm`],\n                    red: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Red_400x400.webm`],\n                    yellow: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Yellow_400x400.webm`]\n                }\n            },\n            crackedshield: {\n                '01': {\n                    darkpurple: [lg`Template/Circle/TemplateShieldCrackedCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            darkness: {\n                '01': {\n                    black: [l2`Darkness/Darkness_01_Black_600x600.webm`],\n                    green: [l2`Darkness/Darkness_01_Green_600x600.webm`],\n                }\n            },\n            detectmagic: {\n                '01': {\n                    blue: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Blue_1200x1200.webm`],\n                }\n            },\n            drop: {\n                '01': {\n                    red: [lg`Template/Circle/TemplateDropCircle_01_Regular_Red_800x800.webm`]\n                }\n            },\n            explosion: {\n                '01': {\n                    blue: [\n                        lg`Explosion/Explosion_02_Blue_400x400.webm`,\n                        lg`Explosion/Explosion_04_Regular_Blue_400x400.webm`,\n                    ],\n                    orange: [\n                        lg`Explosion/Explosion_01_Orange_400x400.webm`,\n                        lg`Explosion/Explosion_05_Regular_Orange_400x400.webm`,\n                    ],\n                    yellowblue: [\n                        lg`Explosion/Explosion_03_Regular_BlueYellow_400x400.webm`\n                    ],\n                }\n            },\n            fear: {\n                '01': {\n                    darkpurple: [lg`Template/Circle/TemplateFearCircle_01_Dark_Purple_800x800.webm`],\n                },\n            },\n            fireball: {\n                explode: {\n                    orange: [l3`Fireball/FireballExplosion_01_Orange_800x800.webm`],\n                },\n                loop: {\n                    orange: [l3`Fireball/FireballLoop_01_Orange_800x800.webm`],\n                },\n                nodebris: {\n                    orange: [l3`Fireball/FireballLoopNoDebris_01_Orange_800x800.webm`],\n                },\n            },\n            fogcloud: {\n                '01': {\n                    white: [l1`Fog_Cloud/FogCloud_01_White_800x800.webm`]\n                }\n            },\n            heart: {\n                '01': {\n                    pink: [lg`Template/Circle/TemplateHeartCircle_01_Regular_Pink_800x800.webm`],\n                },\n            },\n            horror: {\n                '01': {\n                    purple: [lg`Template/Circle/TemplateHorrorCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            magicsign: {\n                abjuration: {\n                    blue: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Blue_800x800.webm`],\n                },\n                conjuration: {\n                    yellow: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                divination: {\n                    blue: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Blue_800x800.webm`],\n                },\n                enchantment: {\n                    pink: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Pink_800x800.webm`],\n                },\n                evocation: {\n                    red: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Red_800x800.webm`],\n                },\n                illusion: {\n                    purple: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Purple_800x800.webm`],\n                },\n                necromancy: {\n                    green: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Green_800x800.webm`],\n                },\n                transmutation: {\n                    yellow: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n            },\n            moonbeam: {\n                loop: {\n                    blue: [l2`Moonbeam/Moonbeam_01_Regular_Blue_400x400.webm`],\n                },\n                nopulse: {\n                    blue: [l2`Moonbeam/MoonbeamNoPulse_01_Regular_Blue_400x400.webm`],\n                },\n                intro: {\n                    blue: [l2`Moonbeam/MoonbeamIntro_01_Regular_Blue_400x400.webm`],\n                },\n                outro: {\n                    blue: [l2`Moonbeam/MoonbeamOutro_01_Regular_Blue_400x400.webm`],\n                },\n            },\n            musicnote: {\n                '01': {\n                    blue: [lg`Template/Circle/TemplateMusicNoteCircle_01_Regular_Blue_800x800.webm`],\n                },\n            },\n            outpulse: {\n                \"01\": {\n                    whiteblue: [\n                        lg`Template/Circle/OutPulse/OutPulse_01_Regular_BlueWhite_Burst_600x600.webm`,\n                    ]\n                },\n                \"02\": {\n                    whiteblue: [\n                        lg`Template/Circle/OutPulse/OutPulse_02_Regular_BlueWhite_Burst_600x600.webm`,\n                    ]\n                },\n            },\n            poison: {\n                '01': {\n                    darkgreen: [lg`Template/Circle/TemplatePoisonCircle_01_Dark_Green_800x800.webm`],\n                },\n            },\n            runes: {\n                '01': {\n                    orange: [lg`Template/Circle/TemplateRunesCircle_01_Regular_Orange_800x800.webm`],\n                },\n            },\n            shatter: {\n                '01': {\n                    blue: [l2`Shatter/Shatter_01_Blue_400x400.webm`]\n                }\n            },\n            shields: {\n                '01': {\n                    green: [lg`Template/Circle/TemplateShieldCircle_01_Regular_Green_800x800.webm`],\n                },\n            },\n            skull: {\n                '01': {\n                    purple: [lg`Template/Circle/TemplateSkullCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            sleetstorm: {\n                '01': {\n                    blue: [l3`Sleet_Storm/SleetStorm_01_Blue_800x800.webm`],\n                }\n            },\n            snowflakes: {\n                '01': {\n                    blue: [lg`Template/Circle/TemplateSnowflakeCircle_01_Regular_Blue_800x800.webm`],\n                },\n            },\n            stun: {\n                '01': {\n                    purple: [lg`Template/Circle/TemplateStunCircle_01_Regular_Purple_800x800.webm`],\n                },\n            },\n            snowflake: {\n                \"01\": {\n                    whiteblue: [\n                        lg`Ice/SnowflakeBurst_01_Regular_BlueWhite_Burst_600x600.webm`,\n                    ]\n                }\n            },\n            vortex: {\n                loop: {\n                    blue: [lg`Template/Circle/Vortex_01_Regular_Blue_600x600.webm`],\n                },\n                intro: {\n                    blue: [lg`Template/Circle/VortexIntro_01_Regular_Blue_600x600.webm`],\n                },\n                outro: {\n                    blue: [lg`Template/Circle/VortexOutro_01_Regular_Blue_600x600.webm`],\n                },\n            },\n            whirl: {\n                loop: {\n                    blue: [lg`Template/Circle/Whirl_01_Regular_Blue_600x600.webm`],\n                },\n                intro: {\n                    blue: [lg`Template/Circle/WhirlIntro_01_Regular_Blue_600x600.webm`],\n                },\n                outro: {\n                    blue: [lg`Template/Circle/WhirlOutro_01_Regular_Blue_600x600.webm`],\n                }\n            },\n        },\n        cone: {\n            breathweapon: {\n                'cold': {\n                    blue: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Cold01_Regular_Blue_30ft_Cone_Burst_600x600.webm`],\n                },\n                'fire01': {\n                    orange: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Fire01_Regular_Orange_30ft_Cone_Burst_600x600.webm`],\n                },\n                'poison': {\n                    green: [lg`Template/Cone/Breath_Weapon/BreathWeapon_Poison01_Regular_Green_30ft_Cone_Burst_600x600.webm`],\n                },\n            },\n            breathweaponspray01: {\n                burst: {\n                    orange: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire01_Regular_Orange_Cone_Burst_800x800.webm`],\n                },\n                loop: {\n                    orange: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire01_Regular_Orange_Cone_Loop_800x800.webm`],\n                }\n            },\n            breathweaponspray02: {\n                burst: {\n                    orange: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire02_Regular_Orange_Cone_Burst_800x800.webm`],\n                },\n                loop: {\n                    orange: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Fire02_Regular_Orange_Cone_Loop_800x800.webm`],\n                }\n            },\n            coneofcold: {\n                '01': {\n                    blue: [l5`Cone_Of_Cold/ConeOfCold_01_Regular_Blue_600x600.webm`],\n                },\n            },\n            burninghands: {\n                '01': {\n                    orange: [l1`Burning_Hands/BurningHands_01_Regular_Orange_600x600.webm`],\n                },\n            },\n        },\n        ray: {\n            breathweapon: {\n                acid: {\n                    green: [lg`Template/Line/Breath_Weapon/BreathWeapon_Acid01_Regular_Green_30ft_Line_Burst_1200x200.webm`],\n                },\n                fire: {\n                    orange: [lg`Template/Line/Breath_Weapon/BreathWeapon_Fire01_Regular_Orange_30ft_Line_Burst_1200x200.webm`],\n                },\n                lightning: {\n                    blue: [lg`Template/Line/Breath_Weapon/BreathWeapon_Lightning01_Regular_Blue_30ft_Line_Burst_1200x200.webm`],\n                },\n\n            },\n            lightningbolt: {\n                '01': {\n                    blue: [l3`Lightning_Bolt/LightningBolt_01_Regular_Blue_4000x200.webm`],\n                },\n                '02': {\n                    blue: [l3`Lightning_Bolt/LightningBolt_01_Regular_Blue_4000x400.webm`],\n                }\n            },\n            gustofwind: {\n                slow: {\n                    white: [l2`Gust_Of_Wind/GustOfWind_01_White_1200x200.webm`]\n                },\n                fast: {\n                    white: [l2`Gust_Of_Wind/GustOfWind_01_White_VeryFast_1200x200.webm`]\n                },\n            },\n        },\n        square: {\n            armsofhadar: {\n                '01': {\n                    darkpurple: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Purple_500x500.webm`],\n                }\n            },\n            blacktentacles: {\n                '01': {\n                    darkpurple: [l4`Black_Tentacles/BlackTentacles_01_Dark_Purple_600x600.webm`],\n                },\n            },\n            crackedshield: {\n                '01': {\n                    darkpurple: [lg`Template/Square/TemplateShieldCrackedSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            drop: {\n                '01': {\n                    red: [lg`Template/Square/TemplateDropSquare_01_Regular_Red_600x600.webm`]\n                }\n            },\n            entangle: {\n                '01': {\n                    brown: [l1`Entangle/Entangle_01_Brown_400x400.webm`],\n                    green: [l1`Entangle/Entangle_01_Green_400x400.webm`],\n                    yellow: [l1`Entangle/Entangle_01_Yellow_400x400.webm`],\n                }\n            },\n            fear: {\n                '01': {\n                    darkpurple: [lg`Template/Square/TemplateFearSquare_01_Dark_Purple_600x600.webm`],\n                },\n            },\n            grease: {\n                \"01\": {\n                    brown: [l1`Grease/Grease_Dark_Brown_600x600.webm`],\n                }\n            },\n            heart: {\n                '01': {\n                    pink: [lg`Template/Square/TemplateHeartSquare_01_Regular_Pink_600x600.webm`],\n                },\n            },\n            horror: {\n                '01': {\n                    purple: [lg`Template/Square/TemplateHorrorSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            musicnote: {\n                '01': {\n                    blue: [lg`Template/Circle/TemplateMusicNoteCircle_01_Regular_Blue_800x800.webm`],\n                },\n            },\n            poison: {\n                '01': {\n                    darkgreen: [lg`Template/Square/TemplatePoisonSquare_01_Dark_Green_600x600.webm`],\n                },\n            },\n            runes: {\n                '01': {\n                    orange: [lg`Template/Square/TemplateRunesSquare_01_Regular_Orange_600x600.webm`],\n                },\n            },\n            shields: {\n                '01': {\n                    green: [lg`Template/Square/TemplateShieldSquare_01_Regular_Green_600x600.webm`],\n                },\n            },\n            snowflakes: {\n                '01': {\n                    blue: [lg`Template/Square/TemplateSnowflakeSquare_01_Regular_Blue_600x600.webm`],\n                },\n            },\n            skull: {\n                '01': {\n                    purple: [lg`Template/Square/TemplateSkullSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            stun: {\n                '01': {\n                    purple: [lg`Template/Square/TemplateStunSquare_01_Regular_Purple_600x600.webm`],\n                },\n            },\n            thunderwave: {\n                left: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_BLeft_600x600.webm`],\n                },\n                mid: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_BMid_600x600.webm`],\n                },\n                center: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_Center_600x600.webm`],\n                },\n            },\n            web: {\n                '01': {\n                    white: [l2`Web/Web_01_White_01_400x400.webm`]\n                },\n            },\n        },\n    }\n\n    /**\n     * Static Types:\n     * \n     * Conditions\n     * Creature\n     * Energy\n     * Fire\n     * Generic\n     * Ice\n     * Lightning\n     * Liquid\n     * Magic Signs\n     * Marker\n     * Music\n     * Particles\n     * Shield Effects\n     * Spell\n     * Token Border\n     * \n     */\n\n    JB2AFREEDB.static = {\n        chains: {\n            standard: {\n                '01': {\n                    red: [lg`Marker/MarkerChainStandard01_01_Regular_Red_Loop_400x400.webm`],\n                },\n                complete: {\n                    _markers: {\n                        loop: { start: 2033, end: 7000 },\n                        forcedEnd: 7933\n                    },\n                    red: [lg`Marker/MarkerChainStandard01_02_Regular_Red_Complete_400x400.webm`],\n                },\n                loop: {\n                    red: [lg`Marker/MarkerChainStandard01_02_Regular_Red_Loop_400x400.webm`],\n                },\n            }\n        },\n        conditions: {\n            drop: {\n                '02': {\n                    red: [lg`Marker/MarkerDrop_02_Regular_Red_400x400.webm`],\n                },\n                '03': {\n                    red: [lg`Marker/MarkerDrop_03_Regular_Red_400x400.webm`],\n                },\n            },\n            fear: {\n                '01': {\n                    darkpurple: [lg`Marker/MarkerFear_01_Dark_Purple_400x400.webm`],\n                },\n                '02': {\n                    darkpurple: [lg`Marker/MarkerFear_02_Dark_Purple_400x400.webm`],\n                },\n                '03': {\n                    darkpurple: [lg`Marker/MarkerFear_03_Dark_Purple_400x400.webm`],\n                },\n            },\n            heart: {\n                '01': {\n                    pink: [lg`Marker/MarkerHeart_01_Regular_Pink_400x400.webm`],\n                },\n                '02': {\n                    pink: [lg`Marker/MarkerHeart_02_Regular_Pink_400x400.webm`],\n                },\n                '03': {\n                    pink: [lg`Marker/MarkerHeart_03_Regular_Pink_400x400.webm`],\n                },\n            },\n            horror: {\n                '01': {\n                    purple: [lg`Marker/MarkerHorror_01_Regular_Purple_400x400.webm`],\n                },\n                '02': {\n                    purple: [lg`Marker/MarkerHorror_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    purple: [lg`Marker/MarkerHorror_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            light: {\n                pulse: {\n                    blue: [lg`Marker/MarkerLight_01_Regular_Blue_400x400.webm`],\n                },\n                nopulse: {\n                    blue: [lg`Marker/MarkerLightNoPulse_01_Regular_Blue_400x400.webm`],\n                },\n            },\n            poison: {\n                '02': {\n                    darkgreen: [lg`Marker/MarkerPoison_02_Dark_Green_400x400.webm`],\n                },\n                '03': {\n                    darkgreen: [lg`Marker/MarkerPoison_03_Dark_Green_400x400.webm`],\n                },\n            },\n            runes: {\n                '01': {\n                    darkorange: [lg`Marker/MarkerRunes_01_Dark_Orange_400x400.webm`],\n                },\n                '02': {\n                    orange: [lg`Marker/MarkerRunes_02_Regular_Orange_400x400.webm`],\n                },\n                '03': {\n                    orange: [lg`Marker/MarkerRunes_03_Regular_Orange_400x400.webm`],\n                },\n            },\n            shields: {\n                '02': {\n                    green: [lg`Marker/MarkerShield_02_Regular_Green_400x400.webm`],\n                },\n                '03': {\n                    green: [lg`Marker/MarkerShield_03_Regular_Green_400x400.webm`],\n                },\n            },\n            crackedshield: {\n                '02': {\n                    purple: [lg`Marker/MarkerShieldCracked_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    purple: [lg`Marker/MarkerShieldCracked_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            skull: {\n                '01': {\n                    darkorange: [lg`Marker/MarkerSkull_01_Dark_Orange_400x400.webm`],\n                },\n                '02': {\n                    purple: [lg`Marker/MarkerSkull_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    purple: [lg`Marker/MarkerSkull_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            snowflakes: {\n                '02': {\n                    blue: [lg`Marker/MarkerSnowflake_02_Regular_Blue_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Marker/MarkerSnowflake_03_Regular_Blue_400x400.webm`],\n                },\n            },\n            stun: {\n                '02': {\n                    purple: [lg`Marker/MarkerStun_02_Regular_Purple_400x400.webm`],\n                },\n                '03': {\n                    purple: [lg`Marker/MarkerStun_03_Regular_Purple_400x400.webm`],\n                },\n            },\n            dizzystars: {\n                '01': {\n                    blueorange: [lg`Conditions/Dizzy_Stars/DizzyStars_01_BlueOrange_400x400.webm`],\n                }\n            },\n        },\n        creature: {\n            bite: {\n                '01': {\n                    red: [lg`Creature/Bite_01_Regular_Red_400x400.webm`],\n                }\n            },\n            claw: {\n                '01': {\n                    red: [lg`Creature/Claws_01_Regular_Red_400x400.webm`],\n                }\n            },\n        },\n        energy: {\n            energyfield: {\n                '01': {\n                    blue: [lg`Energy/EnergyField_01_Regular_Blue_600x600.webm`],\n                }\n            },\n            shimmer: {\n                '01': {\n                    blue: [lg`Energy/Shimmer01_01_Regular_Blue_400x400.webm`],\n                }\n            },\n            sparkles: {\n                '01': {\n                    blue: [lg`Energy/SwirlingSparkles_01_Regular_Blue_400x400.webm`],\n                }\n            },\n            strands: {\n                '01': {\n                    green: [lg`Energy/EnergyStrandIN01_01_Regular_Green_600x600.webm`],\n                },\n                '02': {\n                    green: [lg`Energy/EnergyStrandIN01_02_Regular_Green_600x600.webm`],\n                },\n                '03': {\n                    green: [lg`Energy/EnergyStrandIN01_03_Regular_Green_600x600.webm`],\n                },\n            },\n        },\n        fire: {\n            eruption: {\n                '01': {\n                    orange: [lg`Fire/Eruption_01_Regular_Orange_600x600.webm`]\n                },\n            },\n\n            groundcrack: {\n                '01': {\n                    orange: [lg`Fire/GroundCrackLoop_01_Regular_Orange_600x600.webm`],\n                },\n                '02': {\n                    orange: [lg`Fire/GroundCrackLoop_02_Regular_Orange_600x600.webm`],\n                },\n                '03': {\n                    orange: [lg`Fire/GroundCrackLoop_03_Regular_Orange_600x600.webm`],\n                },\n            },\n            fireworks: {\n                '01': {\n                    orangeyellow: [\n                        lg`Fireworks/Firework01_01_Regular_OrangeYellow_600x600.webm`,\n                        lg`Fireworks/Firework03_01_Regular_OrangeYellow_600x600.webm`,\n                    ],\n                    yellow: [\n                        lg`Fireworks/Firework02_01_Regular_Yellow_600x600.webm`,\n                    ],\n                },\n                '02': {\n                    orangeyellow: [\n                        lg`Fireworks/Firework01_02_Regular_OrangeYellow_600x600.webm`,\n                        lg`Fireworks/Firework03_02_Regular_OrangeYellow_600x600.webm`,\n                    ],\n                    yellow: [\n                        lg`Fireworks/Firework02_02_Regular_Yellow_600x600.webm`,\n                    ],\n                },\n            },\n        },\n        generic: {\n            explosion: {\n                '01': {\n                    blue: [\n                        lg`Explosion/Explosion_02_Blue_400x400.webm`,\n                        lg`Explosion/Explosion_04_Regular_Blue_400x400.webm`,\n                    ],\n                    orange: [\n                        lg`Explosion/Explosion_01_Orange_400x400.webm`,\n                    ],\n                    yellowblue: [\n                        lg`Explosion/Explosion_03_Regular_BlueYellow_400x400.webm`\n                    ],\n                }\n            },\n            impact: {\n                \"01\": {\n                    blue: [\n                        lg`Impact/Impact_01_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_02_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_03_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_04_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_11_Regular_Blue_400x400.webm`,\n                        lg`Impact/Impact_12_Regular_Blue_400x400.webm`\n                    ],\n                    orange: [\n                        lg`Impact/Impact_05_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_08_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_09_Regular_Orange_400x400.webm`,\n                        lg`Impact/Impact_10_Regular_Orange_400x400.webm`,\n                    ],\n                    yellow: [\n                        lg`Impact/Impact_06_Regular_Yellow_400x400.webm`,\n                        lg`Impact/Impact_07_Regular_Yellow_400x400.webm`,\n                    ],\n                }\n            },\n            indicator: {\n                chevron: {\n                    yellow: [lg`UI/3Chevrons_01_Regular_Yellow_200x200.webm`],\n                },\n                '01': {\n                    yellow: [lg`UI/Indicator_01_Regular_Yellow_200x200.webm`],\n                },\n                '02': {\n                    green: [lg`UI/Indicator01_02_Regular_BlueGreen_400x400.webm`],\n                },\n                '03': {\n                    green: [lg`UI/Indicator01_03_Regular_BlueGreen_200x200.webm`],\n                },\n                '04': {\n                    green: [lg`UI/Indicator02_02_Regular_BlueGreen_400x400.webm`],\n                },\n                '05': {\n                    green: [lg`UI/Indicator02_03_Regular_BlueGreen_200x200.webm`],\n                },\n            },\n            outpulse: {\n                \"01\": {\n                    whiteblue: [\n                        lg`Template/Circle/OutPulse/OutPulse_01_Regular_BlueWhite_Burst_600x600.webm`,\n                    ]\n                },\n                \"02\": {\n                    whiteblue: [\n                        lg`Template/Circle/OutPulse/OutPulse_02_Regular_BlueWhite_Burst_600x600.webm`,\n                    ]\n                },\n            },\n            smoke: {\n                '01': {\n                    grey: [lg`Smoke/SmokePuff01_01_Regular_Grey_400x400.webm`],\n                },\n                '02': {\n                    grey: [lg`Smoke/SmokePuff01_02_Regular_Grey_400x400.webm`],\n                },\n                '03': {\n                    grey: [lg`Smoke/SmokePuff01_03_Regular_Grey_400x400.webm`],\n                },\n                'ring02': {\n                    white: [\n                        lg`Smoke/SmokePuffRing01_01_Regular_White_400x400.webm`,\n                        lg`Smoke/SmokePuffRing01_02_Regular_White_400x400.webm`,\n                        lg`Smoke/SmokePuffRing01_03_Regular_White_400x400.webm`\n                    ],\n                }\n            },\n            ui: {\n                drop: {\n                    red: [lg`UI/IconDrop_01_Regular_Red_200x200.webm`]\n                },\n                fear: {\n                    darkpurple: [lg`UI/IconFear_01_Dark_Purple_200x200.webm`]\n                },\n                heart: {\n                    pink: [lg`UI/IconHeart_01_Regular_Pink_200x200.webm`],\n                },\n                horror: {\n                    purple: [lg`UI/IconHorror_01_Regular_Purple_200x200.webm`],\n                },\n                music: {\n                    blue: [lg`UI/IconMusicNote_01_Regular_Blue_200x200.webm`],\n                },\n                poison: {\n                    darkgreen: [lg`UI/IconPoison_01_Dark_Green_200x200.webm`],\n                },\n                rune01: {\n                    orange: [lg`UI/IconRunes_01_Regular_Orange_200x200.webm`],\n                },\n                rune02: {\n                    orange: [lg`UI/IconRunes02_01_Regular_Orange_200x200.webm`],\n                },\n                rune03: {\n                    orange: [lg`UI/IconRunes03_01_Regular_Orange_200x200.webm`],\n                },\n                shields: {\n                    green: [lg`UI/IconShield_01_Regular_Green_200x200.webm`]\n                },\n                crackedshield: {\n                    purple: [lg`UI/IconShieldCracked_01_Regular_Purple_200x200.webm`],\n                },\n                skull: {\n                    purple: [lg`UI/IconSkull_01_Regular_Purple_200x200.webm`],\n                },\n                snowflake: {\n                    blue: [lg`UI/IconSnowflake_01_Regular_Blue_200x200.webm`]\n                },\n                stun: {\n                    purple: [lg`UI/IconStun_01_Regular_Purple_200x200.webm`],\n                }\n            },\n            vortex: {\n                loop: {\n                    blue: [lg`Template/Circle/Vortex_01_Regular_Blue_600x600.webm`],\n                },\n                intro: {\n                    blue: [lg`Template/Circle/VortexIntro_01_Regular_Blue_600x600.webm`],\n                },\n                outro: {\n                    blue: [lg`Template/Circle/VortexOutro_01_Regular_Blue_600x600.webm`],\n                },\n            },\n            whirl: {\n                loop: {\n                    blue: [lg`Template/Circle/Whirl_01_Regular_Blue_600x600.webm`],\n                },\n                intro: {\n                    blue: [lg`Template/Circle/WhirlIntro_01_Regular_Blue_600x600.webm`],\n                },\n                outro: {\n                    blue: [lg`Template/Circle/WhirlOutro_01_Regular_Blue_600x600.webm`],\n                }\n            },\n        },\n        ice: {\n            icespikes: {\n                '01': {\n                    white: [lg`Ice/IceSpikesRadialBurst_01_Regular_White_1000x1000.webm`]\n                }\n            },\n            snowflake: {\n                \"01\": {\n                    whiteblue: [\n                        lg`Ice/SnowflakeBurst_01_Regular_BlueWhite_Burst_600x600.webm`,\n                    ]\n                }\n            },\n        },\n        lightning: {\n            ball: {\n                '01': {\n                    blue: [lg`Lightning/LightningBall_01_Regular_Blue_400x400.webm`],\n                }\n            },\n            staticelectricity: {\n                '01': {\n                    blue: [lg`Lightning/StaticElectricity_01_Regular_Blue_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Lightning/StaticElectricity_02_Regular_Blue_400x400.webm`],\n                }\n            },\n        },\n        liquid: {\n            splash: {\n                '01': {\n                    blue: [lg`Liquid/LiquidSplash01_Regular_Blue_400x400.webm`],\n                },\n            },\n            blob: {\n                '01': {\n                    blue: [lg`Liquid/LiquidBlob01_01_Regular_Blue_400x400.webm`],\n                }\n            },\n        },\n        magicsign: {\n            abjuration: {\n                '01': {\n                    blue: [lg`Magic_Signs/Abjuration_01_Blue_Circle_800x800.webm`],\n                },\n                '02': {\n                    blue: [lg`Magic_Signs/AbjurationCircleLoop_02_Regular_Blue_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/AbjurationRuneIntro_01_Regular_Blue_400x400.webm`],\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/AbjurationRuneLoop_01_Regular_Blue_400x400.webm`],\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/AbjurationRuneOutro_01_Regular_Blue_400x400.webm`],\n                }\n            },\n            conjuration: {\n                '01': {\n                    yellow: [lg`Magic_Signs/Conjuration_01_Yellow_Circle_800x800.webm`]\n                },\n                '02': {\n                    yellow: [lg`Magic_Signs/ConjurationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  yellow: [lg`Magic_Signs/Runes/,ConjurationRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  yellow: [lg`Magic_Signs/Runes/ConjurationRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  yellow: [lg`Magic_Signs/Runes/ConjurationRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n            divination: {\n                '01': {\n                    lightblue: [lg`Magic_Signs/Divination_01_Light_Blue_Circle_800x800.webm`]\n                },\n                '02': {\n                    blue: [lg`Magic_Signs/DivinationCircleLoop_02_Regular_Blue_800x800.webm`],\n                },\n                \"runeintro\": {\n                  blue: [lg`Magic_Signs/Runes/DivinationRuneIntro_01_Regular_Blue_400x400.webm`],\n                },\n                \"runeloop\": {\n                  blue: [lg`Magic_Signs/Runes/DivinationRuneLoop_01_Regular_Blue_400x400.webm`],\n                },\n                \"runeoutro\": {\n                  blue: [lg`Magic_Signs/Runes/DivinationRuneOutro_01_Regular_Blue_400x400.webm`],\n                }\n            },\n            enchantment: {\n                '02': {\n                    pink: [lg`Magic_Signs/EnchantmentCircleLoop_02_Regular_Pink_800x800.webm`],\n                },\n                \"runeintro\": {\n                  pink: [lg`Magic_Signs/Runes/EnchantmentRuneIntro_01_Regular_Pink_400x400.webm`],\n                },\n                \"runeloop\": {\n                  pink: [lg`Magic_Signs/Runes/EnchantmentRuneLoop_01_Regular_Pink_400x400.webm`],\n                },\n                \"runeoutro\": {\n                  pink: [lg`Magic_Signs/Runes/EnchantmentRuneOutro_01_Regular_Pink_400x400.webm`],\n                }\n            },\n            evocation: {\n                '02': {\n                    red: [lg`Magic_Signs/EvocationCircleLoop_02_Regular_Red_800x800.webm`],\n                },\n                \"runeintro\": {\n                  red: [lg`Magic_Signs/Runes/EvocationRuneIntro_01_Regular_Red_400x400.webm`],\n                },\n                \"runeloop\": {\n                  red: [lg`Magic_Signs/Runes/EvocationRuneLoop_01_Regular_Red_400x400.webm`],\n                },\n                \"runeoutro\": {\n                  red: [lg`Magic_Signs/Runes/EvocationRuneOutro_01_Regular_Red_400x400.webm`],\n                }\n            },\n            illusion: {\n                '02': {\n                    purple: [lg`Magic_Signs/IllusionCircleLoop_02_Regular_Purple_800x800.webm`],\n                },\n                \"runeintro\": {\n                  purple: [lg`Magic_Signs/Runes/IllusionRuneIntro_01_Regular_Purple_400x400.webm`],\n                },\n                \"runeloop\": {\n                  purple: [lg`Magic_Signs/Runes/IllusionRuneLoop_01_Regular_Purple_400x400.webm`],\n                },\n                \"runeoutro\": {\n                  purple: [lg`Magic_Signs/Runes/IllusionRuneOutro_01_Regular_Purple_400x400.webm`],\n                }\n            },\n            necromancy: {\n                '02': {\n                    green: [lg`Magic_Signs/NecromancyCircleLoop_02_Regular_Green_800x800.webm`],\n                },\n                \"runeintro\": {\n                  green: [lg`Magic_Signs/Runes/NecromancyRuneIntro_01_Regular_Green_400x400.webm`],\n                },\n                \"runeloop\": {\n                  green: [lg`Magic_Signs/Runes/NecromancyRuneLoop_01_Regular_Green_400x400.webm`],\n                },\n                \"runeoutro\": {\n                  green: [lg`Magic_Signs/Runes/NecromancyRuneOutro_01_Regular_Green_400x400.webm`],\n                }\n            },\n            transmutation: {\n                '02': {\n                    yellow: [lg`Magic_Signs/TransmutationCircleLoop_02_Regular_Yellow_800x800.webm`],\n                },\n                \"runeintro\": {\n                  yellow: [lg`Magic_Signs/Runes/TransmutationRuneIntro_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeloop\": {\n                  yellow: [lg`Magic_Signs/Runes/TransmutationRuneLoop_01_Regular_Yellow_400x400.webm`]\n                },\n                \"runeoutro\": {\n                  yellow: [lg`Magic_Signs/Runes/TransmutationRuneOutro_01_Regular_Yellow_400x400.webm`]\n                }\n            },\n        },\n        marker: {\n            bubble: {\n                '01': {\n                    blue: [lg`Marker/MarkerBubble_01_Regular_Blue_400x400.webm`],\n                }\n            },\n            circleofstars: {\n                '01': {\n                    blue: [lg`Marker/MarkerCircleOfStars_Regular_Blue_400x400.webm`],\n                },\n            },\n            energystrands: {\n                '01': {\n                    blue: [lg`Marker/EnergyStrands_01_Regular_Blue_600x600.webm`]\n                },\n            },\n            music: {\n                '01': {\n                    greenorange: [lg`Marker/MusicMarker_01_Regular_GreenOrange_400x400.webm`],\n                },\n            },\n            standard: {\n                '01': {\n                    marker01: {\n                        \"yellowblue\": [lg`Marker/Marker_01_Regular_BlueYellow_400x400.webm`],\n                    },\n                    musicMarker: {\n                        \"greenorange\": [lg`Marker/MusicMarker_01_Regular_GreenOrange_400x400.webm`],\n                    }\n                },\n            },\n        },\n        music: {\n            notes: {\n                '01': {\n                    blue: [\n                        lg`Music_Notation/BassClef_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/BeamedQuavers_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/Crotchet_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/Flat_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/Quaver_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/Sharp_01_Regular_Blue_200x200.webm`,\n                        lg`Music_Notation/TrebleClef_01_Regular_Blue_200x200.webm`\n                    ],\n                }\n            },\n        },\n        particles: {\n            dots: {\n                '01': {\n                    green: [lg`Particles/ParticlesOutward01_01_Regular_GreenYellow_400x400.webm`],\n                },\n                '02': {\n                    green: [lg`Particles/ParticlesOutward01_02_Regular_GreenYellow_400x400.webm`],\n                },\n                '03': {\n                    green: [lg`Particles/ParticlesOutward01_03_Regular_GreenYellow_400x400.webm`],\n                },\n                '04': {\n                    green: [lg`Particles/ParticlesOutward01_04_Regular_GreenYellow_400x400.webm`],\n                },\n                '05': {\n                    green: [lg`Particles/ParticlesOutward01_05_Regular_GreenYellow_400x400.webm`],\n                },\n            },\n            inwarddots: {\n                '01': {\n                    greenyellow: [lg`Particles/ParticlesInward01_01_Regular_GreenYellow_400x400.webm`],\n                },\n                '02': {\n                    greenyellow: [lg`Particles/ParticlesInward01_02_Regular_GreenYellow_400x400.webm`],\n                },\n                '03': {\n                    greenyellow: [lg`Particles/ParticlesInward01_03_Regular_GreenYellow_400x400.webm`],\n                },\n                '04': {\n                    greenyellow: [lg`Particles/ParticlesInward01_04_Regular_GreenYellow_400x400.webm`],\n                },\n                '05': {\n                    greenyellow: [lg`Particles/ParticlesInward01_05_Regular_GreenYellow_400x400.webm`],\n                },\n            },\n            stars: {\n                '01': {\n                    green: [lg`Particles/ParticlesOutward02_01_Regular_GreenYellow_400x400.webm`],\n                },\n                '02': {\n                    green: [lg`Particles/ParticlesOutward02_02_Regular_GreenYellow_400x400.webm`],\n                },\n                '03': {\n                    green: [lg`Particles/ParticlesOutward02_03_Regular_GreenYellow_400x400.webm`],\n                },\n                '04': {\n                    green: [lg`Particles/ParticlesOutward02_04_Regular_GreenYellow_400x400.webm`],\n                },\n                '05': {\n                    green: [lg`Particles/ParticlesOutward02_05_Regular_GreenYellow_400x400.webm`],\n                },\n            },\n            inwardstars: {\n                '01': {\n                    greenyellow: [lg`Particles/ParticlesInward02_01_Regular_GreenYellow_400x400.webm`],\n                },\n                '02': {\n                    greenyellow: [lg`Particles/ParticlesInward02_02_Regular_GreenYellow_400x400.webm`],\n                },\n                '03': {\n                    greenyellow: [lg`Particles/ParticlesInward02_03_Regular_GreenYellow_400x400.webm`],\n                },\n                '04': {\n                    greenyellow: [lg`Particles/ParticlesInward02_04_Regular_GreenYellow_400x400.webm`],\n                },\n                '05': {\n                    greenyellow: [lg`Particles/ParticlesInward02_05_Regular_GreenYellow_400x400.webm`],\n                },\n            },\n            swirl: {\n                '01': {\n                    greenyellow: [lg`Particles/ParticlesSwirl01_01_Regular_GreenYellow_400x400.webm`],\n                },\n                '02': {\n                    greenyellow: [lg`Particles/ParticlesSwirl02_01_Regular_GreenYellow_400x400.webm`],\n                },\n            },\n        },\n        shieldfx: {\n            eldritchweb: {\n                '01': {\n                    darkpurple: [lg`Energy/ShieldEldritchWebAbove01_01_Dark_Purple_400x400.webm`],\n                },\n            },\n            /*\n            shieldeldritchwebbottom: {\n                '01': {\n                    darkpurple: [lg`Energy/ShieldEldritchWebBelow01_01_Dark_Purple_400x400.webm`],\n                },\n            },\n            */\n            fire: {\n                '01': {\n                    orange: [lg`Fire/ShieldFireAbove01_01_Regular_Orange_400x400.webm`],\n                },\n            },\n            /*\n            shieldfirebottom: {\n                '01': {\n                    orange: [lg`Fire/ShieldFireBelow01_01_Regular_Orange_400x400.webm`],\n                },\n            },\n            */\n            earth: {\n                '01': {\n                    orange: [lg`Fire/ShieldMoltenEarthAbove01_01_Regular_Orange_400x400.webm`],\n                },\n            },\n            /*\n            shieldearthbottom: {\n                '01': {\n                    orange: [lg`Fire/ShieldMoltenEarthBelow01_01_Regular_Orange_400x400.webm`],\n                },\n            },\n            */\n            energyfield: {\n                '01': {\n                    blue: [lg`Energy/EnergyFieldTop_02_Regular_Blue_400x400.webm`],\n                }\n            },\n            /*\n            energyfieldbottom: {\n                '01': {\n                    blue: [lg`Energy/EnergyFieldBot_02_Regular_Blue_400x400.webm`],\n                }\n            },\n            */\n            ice: {\n                '01': {\n                    blue: [lg`Ice/ShieldIceAbove01_01_Regular_Blue_400x400.webm`],\n                }\n            },\n            /*\n            shieldicebottom: {\n                '01': {\n                    blue: [lg`Ice/ShieldIceBelow01_01_Regular_Blue_400x400.webm`],\n                }\n            },\n            */\n\n        },\n        shieldspell: {\n            intro: {\n                '01': {\n                    blue: [l1`Shield/Shield_01_Regular_Blue_Intro_400x400.webm`],\n                },\n            },\n            loop: {\n                '01': {\n                    blue: [l1`Shield/Shield_01_Regular_Blue_Loop_400x400.webm`],\n                },\n            },\n            outro_explode: {\n                '01': {\n                    blue: [l1`Shield/Shield_01_Regular_Blue_OutroExplode_400x400.webm`],\n                },\n            },\n            outro_fade: {\n                '01': {\n                    blue: [l1`Shield/Shield_01_Regular_Blue_OutroFade_400x400.webm`],\n                },\n            },\n            complete: {\n                '01': {\n                    _markers: {\n                        loop: { start: 1533, end: 5533 },\n                        forcedEnd: 5533\n                    },\n                    blue: [l1`Shield/Shield_01_Regular_Blue_Complete_400x400.webm`],\n                }\n            },\n        },\n        shrapnel: {\n            bomb: {\n                '01': {\n                    black: [lg`Explosion/ShrapnelBomb01_01_Regular_Black_800x800.webm`],\n                }\n            }\n        },\n        spell: {\n            antilifeshell: {\n                '01': {\n                    blue: [l5`Antilife_Shell/AntilifeShell_01_Blue_NoCircle_400x400.webm`]\n                }\n            },\n            armsofhadar: {\n                '01': {\n                    darkpurple: [l1`Arms_Of_Hadar/ArmsOfHadar_01_Dark_Purple_500x500.webm`],\n                }\n            },\n            bardicinspiration: {\n                'inspire': {\n                    greenorange: [l1`Bardic_Inspiration/BardicInspiration_01_Regular_GreenOrange_400x400.webm`],\n                },\n                'marker': {\n                    greenorange: [lg`Marker/MusicMarker_01_Regular_GreenOrange_400x400.webm`],\n                },\n            },\n            blacktentacles: {\n                '01': {\n                    darkpurple: [l4`Black_Tentacles/BlackTentacles_01_Dark_Purple_600x600.webm`],\n                },\n            },\n            bless: {\n                \"intro\": {\n                    yellow: [l1`Bless/Bless_01_Regular_Yellow_Intro_400x400.webm`],\n                },\n                \"loop\": {\n                    yellow: [l1`Bless/Bless_01_Regular_Yellow_Loop_400x400.webm`],\n                },\n            },\n            calllightning: {\n                '01': {\n                    blue: [l3`Call_Lightning/CallLightning_01_Blue_1000x1000.webm`],\n                    blueorange: [l3`Call_Lightning/CallLightning_01_BlueOrange_1000x1000.webm`],\n                    green: [l3`Call_Lightning/CallLightning_01_Green_1000x1000.webm`],\n                    pinkyellow: [l3`Call_Lightning/CallLightning_01_PinkYellow_1000x1000.webm`],\n                    purple: [l3`Call_Lightning/CallLightning_01_Purple_1000x1000.webm`],\n                    red: [l3`Call_Lightning/CallLightning_01_Red_1000x1000.webm`],\n                    yellow: [l3`Call_Lightning/CallLightning_01_Yellow_1000x1000.webm`],\n                }\n            },\n            cloudofdaggers: {\n                '01': {\n                    blue: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Blue_400x400.webm`],\n                    green: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Green_400x400.webm`],\n                    orange: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Orange_400x400.webm`],\n                    purple: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Purple_400x400.webm`],\n                    red: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Red_400x400.webm`],\n                    yellow: [l2`Cloud_Of_Daggers/CloudOfDaggers_01_Light_Yellow_400x400.webm`]\n                }\n            },\n            curewounds: {\n                '01': {\n                    blue: [l1`Cure_Wounds/CureWounds_01_Blue_400x400.webm`]\n                }\n            },\n            darkness: {\n                '01': {\n                    black: [l2`Darkness/Darkness_01_Black_600x600.webm`],\n                    green: [l2`Darkness/Darkness_01_Green_600x600.webm`],\n                }\n            },\n            detectmagic: {\n                '01': {\n                    blue: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Blue_1200x1200.webm`],\n                }\n            },\n            divinesmite: {\n                'source': {\n                    yellowblue: [l2`Divine_Smite/DivineSmite_01_Regular_BlueYellow_Caster_400x400.webm`],\n                },\n                'target': {\n                    yellowblue: [l2`Divine_Smite/DivineSmite_01_Regular_BlueYellow_Target_400x400.webm`],\n                }\n            },\n            entangle: {\n                '01': {\n                    brown: [l1`Entangle/Entangle_01_Brown_400x400.webm`],\n                    green: [l1`Entangle/Entangle_01_Green_400x400.webm`],\n                    yellow: [l1`Entangle/Entangle_01_Yellow_400x400.webm`],\n                }\n            },\n            fireball: {\n                loop: {\n                    orange: [l3`Fireball/FireballLoop_01_Orange_800x800.webm`],\n                },\n                explode: {\n                    orange: [l3`Fireball/FireballExplosion_01_Orange_800x800.webm`],\n                },\n                nodebris: {\n                    orange: [l3`Fireball/FireballLoopNoDebris_01_Orange_800x800.webm`],\n                },\n            },\n            fogcloud: {\n                '01': {\n                    white: [l1`Fog_Cloud/FogCloud_01_White_800x800.webm`]\n                }\n            },\n            generichealing: {\n                '01': {\n                    blue: [lg`Healing/HealingAbility_01_Blue_400x400.webm`],\n                    green: [lg`Healing/HealingAbility_01_Green_400x400.webm`],\n                    purple: [lg`Healing/HealingAbility_01_Purple_400x400.webm`],\n                    yellow: [lg`Healing/HealingAbility_01_Yellow_400x400.webm`],\n                },\n                '02': {\n                    greenorange: [lg`Healing/HealingAbility_02_Regular_GreenOrange_Burst_600x600.webm`],\n                }\n            },\n            grease: {\n                \"01\": {\n                    brown: [l1`Grease/Grease_Dark_Brown_600x600.webm`],\n                }\n            },\n            huntersmark: {\n                'eye': {\n                    green: [l1`Hunters_Mark/HuntersMark_01_Regular_Green_Pulse_200x200.webm`],\n                },\n                'eyeloop': {\n                    green: [l1`Hunters_Mark/HuntersMark_01_Regular_Green_Loop_200x200.webm`],\n                },\n            },\n            mistystep: {\n                \"01\": {\n                    blue: [l2`Misty_Step/MistyStep_01_Regular_Blue_400x400.webm`]\n                },\n                \"02\": {\n                    blue: [l2`Misty_Step/MistyStep_02_Regular_Blue_400x400.webm`]\n                }\n            },\n            moonbeam: {\n                loop: {\n                    blue: [l2`Moonbeam/Moonbeam_01_Regular_Blue_400x400.webm`],\n                },\n                nopulse: {\n                    blue: [l2`Moonbeam/MoonbeamNoPulse_01_Regular_Blue_400x400.webm`],\n                },\n                intro: {\n                    blue: [l2`Moonbeam/MoonbeamIntro_01_Regular_Blue_400x400.webm`],\n                },\n                outro: {\n                    blue: [l2`Moonbeam/MoonbeamOutro_01_Regular_Blue_400x400.webm`],\n                },\n            },\n            sacredflame: {\n                source: {\n                    yellow: [l0`Sacred_Flame/SacredFlameSource_01_Regular_Yellow_400x400.webm`],\n                },\n                target: {\n                    yellow: [l0`Sacred_Flame/SacredFlameTarget_01_Regular_Yellow_400x400.webm`],\n                },\n            },\n            shatter: {\n                '01': {\n                    blue: [l2`Shatter/Shatter_01_Blue_400x400.webm`]\n                }\n            },\n            sleep: {\n                '01': {\n                    pink: [l1`Sleep/Cloud01_01_Regular_Pink_400x400.webm`],\n                },\n                '02': {\n                    pink: [l1`Sleep/Cloud01_02_Regular_Pink_400x400.webm`],\n                },\n                marker: {\n                    pink: [l1`Sleep/SleepMarker01_01_Regular_Pink_400x400.webm`],\n                },\n                symbol: {\n                    pink: [l1`Sleep/SleepSymbol01_01_Regular_Pink_400x400.webm`],\n                },\n            },\n            sleetstorm: {\n                '01': {\n                    blue: [l3`Sleet_Storm/SleetStorm_01_Blue_800x800.webm`],\n                }\n            },\n            spiritguardians: {\n                '01': {\n                    yellowblue: [l3`Spirit_Guardians/SpiritGuardians_01_Light_BlueYellow_600x600.webm`],\n                }\n            },\n            sneakattack: {\n                '01': {\n                    'darkgreen': [l1`Sneak_Attack/Sneak_Attack_Dark_Green_300x300.webm`],\n                }\n            },\n            thunderwave: {\n                left: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_BLeft_600x600.webm`],\n                },\n                mid: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_BMid_600x600.webm`],\n                },\n                center: {\n                    blue: [l1`Thunderwave/Thunderwave_01_Bright_Blue_Center_600x600.webm`],\n                },\n            },\n            tollthedead: {\n                bell: {\n                    green: [l0`Toll_The_Dead/TollTheDeadBell_01_Regular_Green_400x400.webm`],\n                },\n                complete: {\n                    green: [l0`Toll_The_Dead/TollTheDead_01_Regular_Green_400x400.webm`],\n                },\n                shockwave: {\n                    green: [l0`Toll_The_Dead/TollTheDeadShockwave_01_Regular_Green_400x400.webm`],\n                },\n                skull: {\n                    green: [l0`Toll_The_Dead/TollTheDeadSkullSmoke_01_Regular_Green_400x400.webm`],\n                },\n            },\n            wallofforce: {\n                '01': {\n                    grey: [l5`Wall_Of_Force/WallOfForce_01_Grey_Sphere_400x400.webm`],\n                }\n            },\n            web: {\n                '01': {\n                    white: [l2`Web/Web_01_White_01_400x400.webm`]\n                },\n            },\n            whirlwind: {\n                '01': {\n                    bluegrey: [l7`Whirlwind/Whirlwind_01_BlueGrey_01_400x400.webm`],\n                }\n            },\n        },\n        tokenborder: {\n            static: {\n                '01': {\n                    blue: [lg`Token_Border/TokenBorderCircle_01_Regular_Blue_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Token_Border/TokenBorderCircle_02_Regular_Blue_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Token_Border/TokenBorderCircle_03_Regular_Blue_400x400.webm`],\n                },\n                '04': {\n                    blue: [lg`Token_Border/TokenBorderCircle_04_Regular_Blue_400x400.webm`],\n                },\n                '05': {\n                    blue: [lg`Token_Border/TokenBorderCircle_05_Regular_Blue_400x400.webm`],\n                },\n                '06': {\n                    blue: [lg`Token_Border/TokenBorderCircle_06_Regular_Blue_400x400.webm`],\n                },\n                '07': {\n                    blue: [lg`Token_Border/TokenBorderCircle_07_Regular_Blue_400x400.webm`],\n                },\n            },\n            spinning: {\n                '01': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_01_Regular_Blue_400x400.webm`],\n                },\n                '02': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_02_Regular_Blue_400x400.webm`],\n                },\n                '03': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_03_Regular_Blue_400x400.webm`],\n                },\n                '04': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_04_Regular_Blue_400x400.webm`],\n                },\n                '05': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_05_Regular_Blue_400x400.webm`],\n                },\n                '06': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_06_Regular_Blue_400x400.webm`],\n                },\n                '07': {\n                    blue: [lg`Token_Border/TokenBorderCircleSpin_07_Regular_Blue_400x400.webm`],\n                },\n            },\n        },\n        trap: {\n            fire: {\n                single: {\n                    orange: [lg`Traps/FireTrap02_01_Regular_Orange_1400x1400.webm`],\n                },\n                double: {\n                    orange: [lg`Traps/FireTrapDual02_01_Regular_Orange_1400x1400.webm`],\n                }\n            }\n        },\n    }\n\n    JB2AFREEDB.return = {\n        _template: 'ranged',\n        weapon: {\n            dagger: {\n                '01': {\n                    white: {\n                        '15ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_Return_15ft_1000x400.webm`],\n                        '30ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_Return_30ft_1600x400.webm`],\n                        '60ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_Return_60ft_2800x400.webm`],\n                        '90ft': [lg`Weapon_Attacks/Ranged/Dagger01_01_Regular_White_Return_90ft_4000x400.webm`]\n                    }\n                }\n            },\n        }\n    }\n}\nexport { JB2AFREEDB }","export async function db047(path) {\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l2 = prefix('2nd_Level')\n    const lg = prefix('Generic')\n\n    const patreonDB047 = {\n        range: {\n            _free:['weapon'],\n            weapon: {\n                _free:['missile'],\n                missile: {\n                    _free:['01', '02', '03', '04'],\n                    '01': {\n                        _free:['blue'],\n                        blue: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Missile01_01_Regular_Blue_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Missile01_01_Regular_Blue_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Missile01_01_Regular_Blue_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Missile01_01_Regular_Blue_90ft_4000x400.webm`],\n                        }\n                    },\n                    '02': {\n                        _free:['white'],\n                        white: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Missile02_01_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Missile02_01_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Missile02_01_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Missile02_01_Regular_White_90ft_4000x400.webm`],\n                        }\n                    },\n                    '03': {\n                        _free:['white'],\n                        white: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Missile03_01_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Missile03_01_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Missile03_01_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Missile03_01_Regular_White_90ft_4000x400.webm`],\n                        }\n                    },\n                    '04': {\n                        _free:['purplepink'],\n                        purplepink: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Missile04_01_Regular_PinkPurple_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Missile04_01_Regular_PinkPurple_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Missile04_01_Regular_PinkPurple_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Missile04_01_Regular_PinkPurple_90ft_4000x400.webm`],\n                        }\n                    },\n                }\n            },\n        },\n        static: {\n            _free:['eyes', 'shrapnel', 'sideImpact'],\n            eyes: {\n                _free:['single', 'few', 'many'],\n                single: {\n                    _free:['01', '02', '03'],\n                    '01': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Single01_01_Dark_Green_300x300.webm`],\n                        darkred: [lg`Eyes/Eyes_Single01_01_Dark_Red_300x300.webm`],\n                        yellow: [lg`Eyes/Eyes_Single01_01_Dark_Yellow_300x300.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Single01_01_Regular_BlueGreen_300x300.webm`],\n                        orange: [lg`Eyes/Eyes_Single01_01_Regular_OrangeRed_300x300.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Single01_01_Regular_OrangeYellow_300x300.webm`],\n                    },\n                    '02': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Single01_02_Dark_Green_300x300.webm`],\n                        darkred: [lg`Eyes/Eyes_Single01_02_Dark_Red_300x300.webm`],\n                        yellow: [lg`Eyes/Eyes_Single01_02_Dark_Yellow_300x300.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Single01_02_Regular_BlueGreen_300x300.webm`],\n                        orange: [lg`Eyes/Eyes_Single01_02_Regular_OrangeRed_300x300.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Single01_02_Regular_OrangeYellow_300x300.webm`],\n                    },\n                    '03': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Single01_03_Dark_Green_300x300.webm`],\n                        darkred: [lg`Eyes/Eyes_Single01_03_Dark_Red_300x300.webm`],\n                        yellow: [lg`Eyes/Eyes_Single01_03_Dark_Yellow_300x300.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Single01_03_Regular_BlueGreen_300x300.webm`],\n                        orange: [lg`Eyes/Eyes_Single01_03_Regular_OrangeRed_300x300.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Single01_03_Regular_OrangeYellow_300x300.webm`],\n                    },\n                },\n                few: {\n                    _free:['01', '02', '03'],\n                    '01': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Few01_01_Dark_Green_600x600.webm`],\n                        darkred: [lg`Eyes/Eyes_Few01_01_Dark_Red_600x600.webm`],\n                        yellow: [lg`Eyes/Eyes_Few01_01_Dark_Yellow_600x600.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Few01_01_Regular_BlueGreen_600x600.webm`],\n                        orange: [lg`Eyes/Eyes_Few01_01_Regular_OrangeRed_600x600.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Few01_01_Regular_OrangeYellow_600x600.webm`],\n                    },\n                    '02': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Few01_02_Dark_Green_600x600.webm`],\n                        darkred: [lg`Eyes/Eyes_Few01_02_Dark_Red_600x600.webm`],\n                        yellow: [lg`Eyes/Eyes_Few01_02_Dark_Yellow_600x600.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Few01_02_Regular_BlueGreen_600x600.webm`],\n                        orange: [lg`Eyes/Eyes_Few01_02_Regular_OrangeRed_600x600.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Few01_02_Regular_OrangeYellow_600x600.webm`],\n                    },\n                    '03': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Few01_03_Dark_Green_600x600.webm`],\n                        darkred: [lg`Eyes/Eyes_Few01_03_Dark_Red_600x600.webm`],\n                        yellow: [lg`Eyes/Eyes_Few01_03_Dark_Yellow_600x600.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Few01_03_Regular_BlueGreen_600x600.webm`],\n                        orange: [lg`Eyes/Eyes_Few01_03_Regular_OrangeRed_600x600.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Few01_03_Regular_OrangeYellow_600x600.webm`],\n                    },\n                },\n                many: {\n                    _free:['01', '02', '03'],\n                    '01': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Many01_01_Dark_Green_600x600.webm`],\n                        darkred: [lg`Eyes/Eyes_Many01_01_Dark_Red_600x600.webm`],\n                        yellow: [lg`Eyes/Eyes_Many01_01_Dark_Yellow_600x600.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Many01_01_Regular_BlueGreen_600x600.webm`],\n                        orange: [lg`Eyes/Eyes_Many01_01_Regular_OrangeRed_600x600.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Many01_01_Regular_OrangeYellow_600x600.webm`],\n                    },\n                    '02': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Many01_02_Dark_Green_600x600.webm`],\n                        darkred: [lg`Eyes/Eyes_Many01_02_Dark_Red_600x600.webm`],\n                        yellow: [lg`Eyes/Eyes_Many01_02_Dark_Yellow_600x600.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Many01_02_Regular_BlueGreen_600x600.webm`],\n                        orange: [lg`Eyes/Eyes_Many01_02_Regular_OrangeRed_600x600.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Many01_02_Regular_OrangeYellow_600x600.webm`],\n                    },\n                    '03': {\n                        _free:['darkgreen'],\n                        darkgreen: [lg`Eyes/Eyes_Many01_03_Dark_Green_600x600.webm`],\n                        darkred: [lg`Eyes/Eyes_Many01_03_Dark_Red_600x600.webm`],\n                        yellow: [lg`Eyes/Eyes_Many01_03_Dark_Yellow_600x600.webm`],\n                        bluegreen: [lg`Eyes/Eyes_Many01_03_Regular_BlueGreen_600x600.webm`],\n                        orange: [lg`Eyes/Eyes_Many01_03_Regular_OrangeRed_600x600.webm`],\n                        orangeyellow: [lg`Eyes/Eyes_Many01_03_Regular_OrangeYellow_600x600.webm`],\n                    },\n                }\n            },\n            shrapnel: {\n                flask: {\n                    '01': {\n                        white: [\n                            lg`Explosion/TopFractureFlask01_01_400x400.webm`,\n                            lg`Explosion/TopFractureFlask02_01_400x400.webm`,\n                            lg`Explosion/TopFractureFlask03_01_400x400.webm`\n                        ]\n                    }\n                }\n            },\n            sideImpact: {\n                flask: {\n                    \"01\": {\n                        white: [\n                            lg`Explosion/SideFractureFlask01_01_800x400.webm`,\n                            lg`Explosion/SideFractureFlask01_02_400x400.webm`,\n                            lg`Explosion/SideFractureFlask02_01_800x400.webm`,\n                            lg`Explosion/SideFractureFlask02_02_400x400.webm`,\n                            lg`Explosion/SideFractureFlask03_01_800x400.webm`,\n                            lg`Explosion/SideFractureFlask03_02_400x400.webm`\n                        ]\n                    },\n                }\n            },\n            spell: {\n                divinesmite: {\n                    'source': {\n                        greenorange: [l2`Divine_Smite/DivineSmite_01_Regular_GreenOrange_Caster_400x400.webm`],\n                        pink: [l2`Divine_Smite/DivineSmite_01_Regular_Pink_Caster_400x400.webm`]\n                    },\n                    'target': {\n                        greenorange: [l2`Divine_Smite/DivineSmite_01_Regular_GreenOrange_Target_400x400.webm`],\n                        pink: [l2`Divine_Smite/DivineSmite_01_Regular_Pink_Target_400x400.webm`]\n                    }\n                }\n            },\n        },\n    }\n    return patreonDB047;\n}","export async function db048(path) {\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l1 = prefix('1st_Level')\n    const lg = prefix('Generic')\n\n    const patreonDB048 = {\n        templatefx: {\n            _free:['circle', 'cone', 'square', 'vines'],\n            circle: {\n                _free:['water'],\n                water: {\n                    _free:['01'],\n                    '01': {\n                        _free:['blue'],\n                        black: [lg`Liquid/WaterSplashLoop_01_01_Regular_Black_600x600.webm`],\n                        blue: [lg`Liquid/WaterSplashLoop_01_01_Regular_Blue_600x600.webm`],\n                        green: [lg`Liquid/WaterSplashLoop_01_01_Regular_Green_600x600.webm`],\n                        purple: [lg`Liquid/WaterSplashLoop_01_01_Regular_Purple_600x600.webm`],\n                        red: [lg`Liquid/WaterSplashLoop_01_01_Regular_Red_600x600.webm`],\n                    }\n                },\n            },\n            cone: {\n                _free:['water'],\n                water: {\n                    _free:['01'],\n                    '01': {\n                        _free:['blue'],\n                        black: [lg`Liquid/WaterSplashConeLoop_01_01_Regular_Black_600x600.webm`],\n                        blue: [lg`Liquid/WaterSplashConeLoop_01_01_Regular_Blue_600x600.webm`],\n                        green: [lg`Liquid/WaterSplashConeLoop_01_01_Regular_Green_600x600.webm`],\n                        purple: [lg`Liquid/WaterSplashConeLoop_01_01_Regular_Purple_600x600.webm`],\n                        red: [lg`Liquid/WaterSplashConeLoop_01_01_Regular_Red_600x600.webm`],\n                    }\n                }\n            },\n            square: {\n                _free:['entangle'],\n                entangle: {\n                    _free:['02', 'complete'],\n                    '02': {\n                        _free:['green'],\n                        purplepink: [l1`Entangle/EntangleLoop02_01_Dark_PinkPurple_500x500.webm`],\n                        green: [l1`Entangle/EntangleLoop02_02_Regular_Green_500x500.webm`],\n                        darkblue: [l1`Entangle/EntangleLoop02_03_Dark_Blue_500x500.webm`],\n                    },\n                    complete: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                        },\n                        _free:['green'],\n                        purplepink: [l1`Entangle/Entangle02_01_Dark_PinkPurple_500x500.webm`],\n                        green: [l1`Entangle/Entangle02_02_Regular_Green_500x500.webm`],\n                        darkblue: [l1`Entangle/Entangle02_03_Dark_Blue_500x500.webm`],\n                    }\n                }\n            },\n            vines: {\n                _free:['complete', 'loop'],\n                complete: {\n                    _free:['nature'],\n                    nature: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                            },\n                        _free:['greem'],        \n                        green: [\n                            lg`Nature/GroupVineNature01_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature01_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature01_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature01_03_Regular_Green_300x300.webm`,\n                            lg`Nature/GroupVineNature02_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature02_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature02_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature02_03_Regular_Green_300x300.webm`,\n                            lg`Nature/GroupVineNature03_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature03_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature03_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature03_03_Regular_Green_300x300.webm`,\n\n                        ]\n                    },\n                    elemental: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                            },            \n                        darkblue: [\n                            lg`Nature/GroupVineElemental01_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental01_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental01_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental01_03_Dark_Blue_300x300.webm`,\n                            lg`Nature/GroupVineElemental02_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental02_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental02_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental02_03_Dark_Blue_300x300.webm`,\n                            lg`Nature/GroupVineElemental03_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental03_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental03_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental03_03_Dark_Blue_300x300.webm`,\n                        ]\n                    },\n                    void: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                            },            \n                        purplepink: [\n                            lg`Nature/GroupVineVoid01_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid01_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid01_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid01_03_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/GroupVineVoid02_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid02_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid02_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid02_03_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/GroupVineVoid03_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid03_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid03_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid03_03_Dark_PinkPurple_300x300.webm`,\n                        ]\n                    },\n                },\n                loop: {\n                    _free:['nature'],\n                    nature: {\n                        _free:['green'],\n                        green: [\n                            lg`Nature/GroupVineNatureLoop01_01_Regular_Green_300x300.webm`,\n                            lg`Nature/GroupVineNatureLoop02_01_Regular_Green_300x300.webm`,\n                            lg`Nature/GroupVineNatureLoop03_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop01_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop01_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop01_03_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop02_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop02_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop02_03_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop03_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop03_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop03_03_Regular_Green_300x300.webm`,\n                        ]\n                    },\n                    elemental: {\n                        darkblue: [\n                            lg`Nature/GroupVineElementalLoop01_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/GroupVineElementalLoop02_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/GroupVineElementalLoop03_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_03_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_03_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_03_Dark_Blue_300x300.webm`,\n                        ]\n                    },\n                    void: {\n                        purplepink: [\n                            lg`Nature/GroupVineVoidLoop01_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/GroupVineVoidLoop02_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/GroupVineVoidLoop03_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop01_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop01_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop01_03_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop02_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop02_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop02_03_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop03_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop03_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop03_03_Dark_PinkPurple_300x300.webm`,\n                        ]\n                    }\n                },\n            }\n        },\n        static: {\n            _free:['generic', 'vines', ],\n            generic: {\n                _free:['water'],\n                water: {\n                    _free:['01'],\n                    '01': {\n                        _free:['blue'],\n                        black: [lg`Liquid/WaterSplashLoop_01_01_Regular_Black_600x600.webm`],\n                        blue: [lg`Liquid/WaterSplashLoop_01_01_Regular_Blue_600x600.webm`],\n                        green: [lg`Liquid/WaterSplashLoop_01_01_Regular_Green_600x600.webm`],\n                        purple: [lg`Liquid/WaterSplashLoop_01_01_Regular_Purple_600x600.webm`],\n                        red: [lg`Liquid/WaterSplashLoop_01_01_Regular_Red_600x600.webm`],\n                    }\n                }\n            },\n            liquid: {\n                blob: {\n                    '01': {\n                        red: [lg`Liquid/LiquidBlob01_01_Regular_Red_400x400.webm`]\n                    }\n                }\n            },\n            spell: {\n                entangle: {\n                    '02': {\n                        purplepink: [l1`Entangle/EntangleLoop02_01_Dark_PinkPurple_500x500.webm`],\n                        green: [l1`Entangle/EntangleLoop02_02_Regular_Green_500x500.webm`],\n                        darkblue: [l1`Entangle/EntangleLoop02_03_Dark_Blue_500x500.webm`],\n                    },\n                    complete: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                        },        \n                        purplepink: [l1`Entangle/Entangle02_01_Dark_PinkPurple_500x500.webm`],\n                        green: [l1`Entangle/Entangle02_02_Regular_Green_500x500.webm`],\n                        darkblue: [l1`Entangle/Entangle02_03_Dark_Blue_500x500.webm`],\n                    }\n                }\n            },\n            vines: {\n                _free:['complete', 'loop'],\n                complete: {\n                    _free:['nature'],\n                    nature: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                            },\n                        _free:['green'],\n                        green: [\n                            lg`Nature/GroupVineNature01_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature01_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature01_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature01_03_Regular_Green_300x300.webm`,\n                            lg`Nature/GroupVineNature02_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature02_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature02_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature02_03_Regular_Green_300x300.webm`,\n                            lg`Nature/GroupVineNature03_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature03_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature03_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNature03_03_Regular_Green_300x300.webm`,\n\n                        ]\n                    },\n                    elemental: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                            },            \n                        darkblue: [\n                            lg`Nature/GroupVineElemental01_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental01_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental01_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental01_03_Dark_Blue_300x300.webm`,\n                            lg`Nature/GroupVineElemental02_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental02_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental02_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental02_03_Dark_Blue_300x300.webm`,\n                            lg`Nature/GroupVineElemental03_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental03_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental03_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElemental03_03_Dark_Blue_300x300.webm`,\n                        ]\n                    },\n                    void: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                            },            \n                        purplepink: [\n                            lg`Nature/GroupVineVoid01_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid01_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid01_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid01_03_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/GroupVineVoid02_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid02_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid02_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid02_03_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/GroupVineVoid03_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid03_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid03_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoid03_03_Dark_PinkPurple_300x300.webm`,\n                        ]\n                    },\n                },\n                loop: {\n                    _free:['nature'],\n                    nature: {\n                        _free:['green'],\n                        green: [\n                            lg`Nature/GroupVineNatureLoop01_01_Regular_Green_300x300.webm`,\n                            lg`Nature/GroupVineNatureLoop02_01_Regular_Green_300x300.webm`,\n                            lg`Nature/GroupVineNatureLoop03_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop01_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop01_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop01_03_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop02_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop02_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop02_03_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop03_01_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop03_02_Regular_Green_300x300.webm`,\n                            lg`Nature/VineNatureLoop03_03_Regular_Green_300x300.webm`,\n                        ]\n                    },\n                    elemental: {\n                        darkblue: [\n                            lg`Nature/GroupVineElementalLoop01_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/GroupVineElementalLoop02_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/GroupVineElementalLoop03_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_03_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_03_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_01_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_02_Dark_Blue_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_03_Dark_Blue_300x300.webm`,\n                        ]\n                    },\n                    void: {\n                        purplepink: [\n                            lg`Nature/GroupVineVoidLoop01_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/GroupVineVoidLoop02_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/GroupVineVoidLoop03_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop01_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop01_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop01_03_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop02_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop02_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop02_03_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop03_01_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop03_02_Dark_PinkPurple_300x300.webm`,\n                            lg`Nature/VineVoidLoop03_03_Dark_PinkPurple_300x300.webm`,\n                        ]\n                    }\n                },\n            }\n        },\n    }\n    return patreonDB048;\n\n}","export async function db049(path) {\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l0 = prefix('Cantrip')\n    const l1 = prefix('1st_Level')\n    const l2 = prefix('2nd_Level')\n    const l3 = prefix('3rd_Level')\n    const l4 = prefix('4th_Level')\n    const l5 = prefix('5th_Level')\n    const l6 = prefix('6th_Level')\n    const l7 = prefix('7th_Level')\n    const lg = prefix('Generic')\n\n    const patreonDB049 = {\n        range: {\n            _free: [],\n            weapon: {\n                flask: {\n                    '01': {\n                        purple: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Purple_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Purple_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Purple_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Purple_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Purple_90ft_4000x400.webm`]\n                        },\n                        red: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Red_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Red_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Red_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Red_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_Red_90ft_4000x400.webm`]\n                        },\n                        white: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_White_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask01_01_Regular_White_90ft_4000x400.webm`]\n                        }\n                    },\n                    '02': {\n                        purple: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Purple_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Purple_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Purple_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Purple_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Purple_90ft_4000x400.webm`]\n                        },\n                        red: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Red_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Red_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Red_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Red_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_Red_90ft_4000x400.webm`]\n                        },\n                        white: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_White_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask02_01_Regular_White_90ft_4000x400.webm`]\n                        },\n                    },\n                    '03': {\n                        purple: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Purple_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Purple_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Purple_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Purple_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Purple_90ft_4000x400.webm`]\n                        },\n                        red: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Red_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Red_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Red_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Red_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_Red_90ft_4000x400.webm`]\n                        },\n                        white: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_White_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowFlask03_01_Regular_White_90ft_4000x400.webm`]\n                        },\n                    },\n                },\n                grenade: {\n                    '03': {\n                        green: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Green_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Green_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Green_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Green_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Green_90ft_4000x400.webm`]\n                        },\n                        orange: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Orange_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Orange_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Orange_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Orange_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Orange_90ft_4000x400.webm`]\n                        },\n                        red: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Red_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Red_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Red_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Red_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/ThrowGrenade03_01_Regular_Red_90ft_4000x400.webm`]\n                        },\n                    },\n                },\n                grenadelaunch: {\n                    '03': {\n                        green: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Green_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Green_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Green_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Green_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Green_90ft_4000x400.webm`]\n                        },\n                        orange: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Orange_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Orange_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Orange_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Orange_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Orange_90ft_4000x400.webm`]\n                        },\n                        red: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Red_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Red_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Red_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Red_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/LaunchGrenade03_01_Regular_Red_90ft_4000x400.webm`]\n                        },\n                    }\n                },\n            },\n        },\n        static: {\n            _free:['spell'],\n            generic: {\n                fire: {\n                    ring: {\n                        grey: [lg`Fire/FireRing_01_Circle_Grey_900x900.webm`],\n                        purple: [lg`Fire/FireRing_01_Circle_Purple_900x900.webm`],\n                        yellow: [lg`Fire/FireRing_01_Circle_Yellow_900x900.webm`],\n                    }\n                }\n            },\n            spell: {\n                _free:['divinesmite'],\n                divinesmite: {\n                    _free:['reverse'],\n                    reverse: {\n                        _free:['yellowblue'],\n                        yellowblue: [l2`Divine_Smite/DivineSmiteReversed_01_Regular_BlueYellow_Caster_400x400.webm`],\n                        greenyellow: [l2`Divine_Smite/DivineSmiteReversed_01_Regular_GreenYellow_Caster_400x400.webm`],\n                        orange: [l2`Divine_Smite/DivineSmiteReversed_01_Regular_Orange_Caster_400x400.webm`],\n                        purplepink: [l2`Divine_Smite/DivineSmiteReversed_01_Regular_PurplePink_Caster_400x400.webm`],\n                        darkpurple: [l2`Divine_Smite/DivineSmiteReversed_01_Dark_Purple_Caster_400x400.webm`],\n                        yellowwhite: [l2`Divine_Smite/DivineSmiteReversed_01_Regular_YellowWhite_Caster_400x400.webm`],\n                        darkred: [l2`Divine_Smite/DivineSmiteReversed_01_Dark_Red_Caster_400x400.webm`],\n                        greenorange: [l2`Divine_Smite/DivineSmiteReversed_01_Regular_GreenOrange_Caster_400x400.webm`],\n                        pink: [l2`Divine_Smite/DivineSmiteReversed_01_Regular_Pink_Caster_400x400.webm`],\n                    }\n                },\n            },\n        },\n    }\n    return patreonDB049;\n}","export async function db050(path) {\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l1 = prefix('1st_Level')\n    const l7 = prefix('7th_Level')\n    const lg = prefix('Generic')\n\n    const patreonDB050 = {\n        range: {\n            _free: [],\n            weapon: {\n                boulder: {\n                    '02': {\n                        white: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_02_Regular_White_05ft_600x500.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_02_Regular_White_15ft_1000x500.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_02_Regular_White_30ft_1600x500.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_02_Regular_White_60ft_2800x500.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/BoulderToss01_02_Regular_White_90ft_4000x500.webm`]    \n                        }\n                    }\n                }\n            },\n        },\n        templatefx: {\n            _free: [],\n            cone: {\n                breathweaponspray01: {\n                    burst: {\n                        blue: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Ice01_Regular_Blue_Cone_Burst_800x800.webm`]\n                    },\n                    loop: {\n                        blue: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Ice01_Regular_Blue_Cone_Loop_800x800.webm`]\n                    },\n                },\n                breathweaponspray02: {\n                    burst: {\n                        blue: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Ice02_Regular_Blue_Cone_Burst_800x800.webm`]\n                    },\n                    loop: {\n                        blue: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Ice02_Regular_Blue_Cone_Loop_800x800.webm`]\n                    }\n                }\n            },\n            ray: {\n                breathweaponspray01: {\n                    burst: {\n                        blue: [lg`Template/Line/Breath_Weapon/Breathweapon02_Ice01_Regular_Blue_Line_Burst_1200x400.webm`]\n                    },\n                    loop: {\n                        blue: [lg`Template/Line/Breath_Weapon/Breathweapon02_Ice01_Regular_Blue_Line_Loop_1200x400.webm`]\n                    },\n                }\n            },\n            square: {\n                entangle: {\n                    '02': {\n                        darkorange: [l1`Entangle/EntangleLoop02_03_Dark_Orange_500x500.webm`]\n                    },\n                    complete: {\n                        darkorange: [l1`Entangle/Entangle02_03_Dark_Orange_500x500.webm`]\n                    }\n                }\n            },\n            vines: {\n                complete: {\n                    elemental: {\n                        darkorange: [\n                            lg`Nature/GroupVineElemental01_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/GroupVineElemental02_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/GroupVineElemental03_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental01_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental01_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental01_03_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental02_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental02_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental02_03_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental03_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental03_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental03_03_Dark_Orange_300x300.webm`,\n                        ]\n                    },\n                },\n                loop: {\n                    elemental: {\n                        darkorange: [\n                            lg`Nature/GroupVineElementalLoop01_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/GroupVineElementalLoop02_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/GroupVineElementalLoop03_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_03_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_03_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_03_Dark_Orange_300x300.webm`,\n                        ]\n                    },\n                },\n            }\n        },\n        static: {\n            _free:['plants'],\n            generic: {\n                boulderimpact: {\n                    '02': {\n                        white: [lg`Impact/BoulderImpactNoCracks_01_Regular_White_500x500.webm`]\n                    }\n                }\n            },\n            plants: {\n                _free:['circle', 'ring', 'square'],\n                circle: {\n                    _free:['complete', 'loop'],\n                    complete: {\n                        _markers: {\n                            loop: { start: 2000, end: 6000 }\n                        },\n                        _free:['greenyellow'],\n                        purpleblue: [lg`Nature/PlantGrowthRound01_01_Regular_BluePurple_500x500.webm`],\n                        greenred: [lg`Nature/PlantGrowthRound02_01_Regular_GreenRed_500x500.webm`],\n                        greenyellow: [lg`Nature/PlantGrowthRound03_01_Regular_GreenYellow_500x500.webm`]\n                    },\n                    loop: {\n                        _free:['greenyellow'],\n                        purpleblue: [lg`Nature/PlantGrowthRoundLoop01_01_Regular_BluePurple_500x500.webm`],\n                        greenred: [lg`Nature/PlantGrowthRoundLoop02_01_Regular_GreenRed_500x500.webm`],\n                        greenyellow: [lg`Nature/PlantGrowthRoundLoop03_01_Regular_GreenYellow_500x500.webm`]\n                    },\n                },\n                ring: {\n                    _free:['complete', 'loop', 'pulse'],\n                    complete: {\n                        _markers: {\n                            loop: { start: 2000, end: 6000 }\n                        },\n                        _free:['greenyellow'],\n                        purpleblue: [lg`Nature/PlantGrowthRing01_01_Regular_BluePurple_500x500.webm`],\n                        greenred: [lg`Nature/PlantGrowthRing02_01_Regular_GreenRed_500x500.webm`],\n                        greenyellow: [lg`Nature/PlantGrowthRing03_01_Regular_GreenYellow_500x500.webm`]\n                    },\n                    loop: {\n                        _free:['greenyellow'],\n                        purpleblue: [lg`Nature/PlantGrowthRingLoop01_01_Regular_BluePurple_500x500.webm`],\n                        greenred: [lg`Nature/PlantGrowthRingLoop02_01_Regular_GreenRed_500x500.webm`],\n                        greenyellow: [lg`Nature/PlantGrowthRingLoop03_01_Regular_GreenYellow_500x500.webm`]\n                    },\n                    pulse: {\n                        _free:['greenyellow'],\n                        purpleblue: [lg`Nature/PlantGrowthRingPulse01_01_Regular_BluePurple_500x500.webm`],\n                        greenred: [lg`Nature/PlantGrowthRingPulse02_01_Regular_GreenRed_500x500.webm`],\n                        greenyellow: [lg`Nature/PlantGrowthRingPulse03_01_Regular_GreenYellow_500x500.webm`]\n                    },\n                },\n                square: {\n                    _free:['complete', 'loop'],\n                    complete: {\n                        _markers: {\n                            loop: { start: 2000, end: 6000 }\n                        },\n                        _free:['greenyellow'],\n                        purpleblue: [lg`Nature/PlantGrowthSquare01_01_Regular_BluePurple_500x500.webm`],\n                        greenred: [lg`Nature/PlantGrowthSquare02_01_Regular_GreenRed_500x500.webm`],\n                        greenyellow: [lg`Nature/PlantGrowthSquare03_01_Regular_GreenYellow_500x500.webm`]\n                    },\n                    loop: {\n                        _free:['greenyellow'],\n                        purpleblue: [lg`Nature/PlantGrowthSquareLoop01_01_Regular_BluePurple_500x500.webm`],\n                        greenred: [lg`Nature/PlantGrowthSquareLoop02_01_Regular_GreenRed_500x500.webm`],\n                        greenyellow: [lg`Nature/PlantGrowthSquareLoop03_01_Regular_GreenYellow_500x500.webm`]\n                    },\n                },\n            },\n            spell: {\n                entangle: {\n                    '02': {\n                        darkorange: [l1`Entangle/EntangleLoop02_03_Dark_Orange_500x500.webm`]\n                    },\n                    complete: {\n                        darkorange: [l1`Entangle/Entangle02_03_Dark_Orange_500x500.webm`]\n                    }\n                },\n                whirlwind: {\n                    '01': {\n                        whiteblue: [l7`Whirlwind/Whirlwind_01_BlueWhite_400x400.webm`],\n                    }\n                },    \n            },\n            vines: {\n                complete: {\n                    elemental: {\n                        darkorange: [\n                            lg`Nature/GroupVineElemental01_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/GroupVineElemental02_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/GroupVineElemental03_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental01_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental01_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental01_03_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental02_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental02_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental02_03_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental03_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental03_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElemental03_03_Dark_Orange_300x300.webm`,\n                        ]\n                    },\n                },\n                loop: {\n                    elemental: {\n                        darkorange: [\n                            lg`Nature/GroupVineElementalLoop01_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/GroupVineElementalLoop02_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/GroupVineElementalLoop03_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop01_03_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop02_03_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_01_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_02_Dark_Orange_300x300.webm`,\n                            lg`Nature/VineElementalLoop03_03_Dark_Orange_300x300.webm`,\n                        ]\n                    },\n                },\n            }\n        },\n    }\n    return patreonDB050;\n}","export async function db051(path) {\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l0 = prefix('Cantrip')\n    const l1 = prefix('1st_Level')\n    const l2 = prefix('2nd_Level')\n    const l3 = prefix('3rd_Level')\n    const l4 = prefix('4th_Level')\n    const l5 = prefix('5th_Level')\n    const l6 = prefix('6th_Level')\n    const l7 = prefix('7th_Level')\n    const lg = prefix('Generic')\n\n    /**\n     * Structure for the internal Select menus work as:\n     * Type => Animation => Variant => Color\n     * Example: Range Menu - Weapon => Arrow => Regular => Regular\n     * \n     * Entries in each section type should have a localized Variable matching in the lang/en.json file under\n     * the proper category.\n     * Type relates to the MenuTypes section\n     * Animation to animations\n     * Variant to variants\n     * Color to colors\n     * \n     */\n    const patreonDB051 = {\n        range: {\n            _template: 'ranged',\n            _free: [],\n            weapon: {\n                boomerang: {\n                    '01': {\n                        white: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Boomerang01_01_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Boomerang01_01_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Boomerang01_01_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Boomerang01_01_Regular_White_90ft_4000x400.webm`],\n                        }\n                    },\n                    '02': {\n                        white: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Boomerang01_02_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Boomerang01_02_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Boomerang01_02_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Boomerang01_02_Regular_White_90ft_4000x400.webm`]\n                        }\n                    }\n                },\n                bullet: {\n                    '1': {\n                        purple: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Purple_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Purple_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Purple_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Purple_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Bullet_01_Regular_Purple_90ft_4000x400.webm`]\n                        },\n                    },\n                    '2': {\n                        purple: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Purple_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Purple_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Purple_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Purple_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Bullet_02_Regular_Purple_90ft_4000x400.webm`]\n                        },\n                    },\n                    '3': {\n                        purple: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Purple_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Purple_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Purple_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Purple_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Bullet_03_Regular_Purple_90ft_4000x400.webm`]\n                        },\n                    }\n                },\n                snipe: {\n                    '01': {\n                        purple: {\n                            '05ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Purple_05ft_600x400.webm`],\n                            '15ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Purple_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Purple_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Purple_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Snipe_01_Regular_Purple_90ft_4000x400.webm`]\n                        },\n                    }\n                },\n                triboomerang: {\n                    '01': {\n                        white: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Boomerang02_01_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Boomerang02_01_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Boomerang02_01_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Boomerang02_01_Regular_White_90ft_4000x400.webm`],\n                        }\n                    },\n                    '02': {\n                        white: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Boomerang02_02_Regular_White_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Boomerang02_02_Regular_White_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Boomerang02_02_Regular_White_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Boomerang02_02_Regular_White_90ft_4000x400.webm`]\n                        }\n                    }\n                },\n            },\n            spell: {\n                fireballbeam: {\n                    '01': {\n                        darkgreen: {\n                            '05ft': [l3`Fireball/FireballBeam_01_Dark_Green_05ft_600x400.webm`],\n                            '15ft': [l3`Fireball/FireballBeam_01_Dark_Green_15ft_1000x400.webm`],\n                            '30ft': [l3`Fireball/FireballBeam_01_Dark_Green_30ft_1600x400.webm`],\n                            '60ft': [l3`Fireball/FireballBeam_01_Dark_Green_60ft_2800x400.webm`],\n                            '90ft': [l3`Fireball/FireballBeam_01_Dark_Green_90ft_4000x400.webm`]\n                        }\n                    },\n                },\n            },\n        },\n        templatefx: {\n            _free: [],\n            circle: {\n                fireball: {\n                    loop: {\n                        darkgreen: [l3`Fireball/FireballLoop_01_Dark_Green_800x800.webm`],\n                    },\n                    explode: {\n                        darkgreen: [l3`Fireball/FireballExplosion_01_Dark_Green_800x800.webm`],\n                    },\n                    nodebris: {\n                        darkgreen: [l3`Fireball/FireballLoopNoDebris_01_Dark_Green_800x800.webm`],\n                    },\n                },\n            },\n            square: {\n                entangle: {\n                    '02': {\n                        grey: [l1`Entangle/EntangleLoop02_04_Regular_Grey_500x500.webm`]\n                    },\n                    complete: {\n                        grey: [l1`Entangle/Entangle02_04_Regular_Grey_500x500.webm`]\n                    }\n                }\n            },\n            vines: {\n                complete: {\n                    liquid: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                            },\n                        grey: [\n                            lg`Nature/GroupVineLiquid01_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid01_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid01_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid01_03_Regular_Grey_300x300.webm`,\n                            lg`Nature/GroupVineLiquid02_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid02_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid02_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid02_03_Regular_Grey_300x300.webm`,\n                            lg`Nature/GroupVineLiquid03_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid03_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid03_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid03_03_Regular_Grey_300x300.webm`,\n\n                        ]\n                    },\n                },\n                loop: {\n                    liquid: {\n                        grey: [\n                            lg`Nature/GroupVineLiquidLoop01_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/GroupVineLiquidLoop02_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/GroupVineLiquidLoop03_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop01_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop01_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop01_03_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop02_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop02_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop02_03_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop03_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop03_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop03_03_Regular_Grey_300x300.webm`,\n                        ]\n                    },\n                },\n            },\n        },\n        static: {\n            _free:['leaves', 'marker'],\n            leaves: {\n                _free:['outburst'],\n                complete: {\n                    '01': {\n                        orangered: [lg`Nature/SwirlingLeavesComplete01_01_Regular_OrangeRed_400x400.webm`],\n                        pink: [lg`Nature/SwirlingLeavesComplete01_01_Regular_Pink_400x400.webm`],\n                    },\n                    '02': {\n                        orangered: [lg`Nature/SwirlingLeavesComplete01_02_Regular_OrangeRed_400x400.webm`],\n                        pink: [lg`Nature/SwirlingLeavesComplete01_02_Regular_Pink_400x400.webm`],\n                    },\n                    '03': {\n                        orangered: [lg`Nature/SwirlingLeavesComplete02_01_Regular_OrangeRed_400x400.webm`],\n                        pink: [lg`Nature/SwirlingLeavesComplete02_01_Regular_Pink_400x400.webm`],\n                    },\n                },\n                loop: {\n                    '01': {\n                        orangered: [lg`Nature/SwirlingLeavesLoop01_01_Regular_OrangeRed_400x400.webm`],\n                        pink: [lg`Nature/SwirlingLeavesLoop01_01_Regular_Pink_400x400.webm`],\n                    },\n                    '02': {\n                        orangered: [lg`Nature/SwirlingLeavesLoop01_02_Regular_OrangeRed_400x400.webm`],\n                        pink: [lg`Nature/SwirlingLeavesLoop01_02_Regular_Pink_400x400.webm`],\n                    },\n                    '03': {\n                        orangered: [lg`Nature/SwirlingLeavesLoop02_01_Regular_OrangeRed_400x400.webm`],\n                        pink: [lg`Nature/SwirlingLeavesLoop02_01_Regular_Pink_400x400.webm`],\n                    },\n                },\n                outburst: {\n                    _free:['01'],\n                    '01': {\n                        _free:['pink'],\n                        purpleblue: [lg`Nature/SwirlingLeavesOutburst_01_01_Regular_BluePurple_400x400.webm`],\n                        greenorange: [lg`Nature/SwirlingLeavesOutburst_01_01_Regular_GreenOrange_400x400.webm`],\n                        orangered: [lg`Nature/SwirlingLeavesOutburst_01_01_Regular_OrangeRed_400x400.webm`],\n                        pink: [lg`Nature/SwirlingLeavesOutburst_01_01_Regular_Pink_400x400.webm`],\n                    }\n                },\n            },\n            magicsign: {\n                abjuration: {\n                    complete: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        blue: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Yellow_800x800.webm`],\n                    }\n                },\n                conjuration: {\n                    complete: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        blue: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Yellow_800x800.webm`],\n                    }\n                },\n                divination: {\n                    complete: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        blue: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Yellow_800x800.webm`],\n                    }\n                },\n                enchantment: {\n                    complete: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        blue: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Yellow_800x800.webm`],\n                    }\n                },\n                evocation: {\n                    complete: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        blue: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Yellow_800x800.webm`],\n                    }\n                },\n                illusion: {\n                    complete: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        blue: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Yellow_800x800.webm`],\n                    }\n                },\n                necromancy: {\n                    complete: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        blue: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Yellow_800x800.webm`],\n                    }\n                },\n                transmutation: {\n                    complete: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        blue: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Yellow_800x800.webm`],\n                    }\n                },\n            },\n            marker: {\n                _free:['energystrand'],\n                energystrand: {\n                    _free:['02'],\n                    '02': {\n                        _free:['purpleblue'],\n                        purpleblue: [lg`Marker/EnergyStrands02_01_Regular_BluePurple_400x400.webm`],\n                        green: [lg`Marker/EnergyStrands02_01_Regular_Green_400x400.webm`],\n                        greenorange: [lg`Marker/EnergyStrands02_01_Regular_GreenOrange_400x400.webm`],\n                        orangered: [lg`Marker/EnergyStrands02_01_Regular_OrangeRed_400x400.webm`],\n                    }\n                },\n            },\n            spell: {\n                entangle: {\n                    '02': {\n                        grey: [l1`Entangle/EntangleLoop02_04_Regular_Grey_500x500.webm`]\n                    },\n                    complete: {\n                        grey: [l1`Entangle/Entangle02_04_Regular_Grey_500x500.webm`]\n                    }\n                },\n                fireball: {\n                    loop: {\n                        darkgreen: [l3`Fireball/FireballLoop_01_Dark_Green_800x800.webm`],\n                    },\n                    explode: {\n                        darkgreen: [l3`Fireball/FireballExplosion_01_Dark_Green_800x800.webm`],\n                    },\n                    nodebris: {\n                        darkgreen: [l3`Fireball/FireballLoopNoDebris_01_Dark_Green_800x800.webm`],\n                    },\n                },\n            },\n            vines: {\n                complete: {\n                    liquid: {\n                        _markers: {\n                            loop: { start: 2125, end: 6250 }\n                            },\n                        grey: [\n                            lg`Nature/GroupVineLiquid01_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid01_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid01_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid01_03_Regular_Grey_300x300.webm`,\n                            lg`Nature/GroupVineLiquid02_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid02_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid02_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid02_03_Regular_Grey_300x300.webm`,\n                            lg`Nature/GroupVineLiquid03_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid03_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid03_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquid03_03_Regular_Grey_300x300.webm`,\n\n                        ]\n                    },\n                },\n                loop: {\n                    liquid: {\n                        grey: [\n                            lg`Nature/GroupVineLiquidLoop01_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/GroupVineLiquidLoop02_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/GroupVineLiquidLoop03_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop01_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop01_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop01_03_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop02_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop02_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop02_03_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop03_01_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop03_02_Regular_Grey_300x300.webm`,\n                            lg`Nature/VineLiquidLoop03_03_Regular_Grey_300x300.webm`,\n                        ]\n                    },\n                },\n            },\n        },\n        return: {\n            _template: 'ranged',\n            _free: [],\n            weapon: {\n                boomerang: {\n                    '01': {\n                        white: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Boomerang01_01_Regular_White_Return_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Boomerang01_01_Regular_White_Return_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Boomerang01_01_Regular_White_Return_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Boomerang01_01_Regular_White_Return_90ft_4000x400.webm`],\n                        }\n                    },\n                },\n                triboomerang: {\n                    '01': {\n                        white: {\n                            '15ft': [lg`Weapon_Attacks/Ranged/Boomerang02_01_Regular_White_Return_15ft_1000x400.webm`],\n                            '30ft': [lg`Weapon_Attacks/Ranged/Boomerang02_01_Regular_White_Return_30ft_1600x400.webm`],\n                            '60ft': [lg`Weapon_Attacks/Ranged/Boomerang02_01_Regular_White_Return_60ft_2800x400.webm`],\n                            '90ft': [lg`Weapon_Attacks/Ranged/Boomerang02_01_Regular_White_Return_90ft_4000x400.webm`],\n                        }\n                    },\n                },\n            }\n        }\n    }\n    return patreonDB051;\n}","export async function db052(path) {\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const lg = prefix('Generic')\n\n    /**\n     * Structure for the internal Select menus work as:\n     * Type => Animation => Variant => Color\n     * Example: Range Menu - Weapon => Arrow => Regular => Regular\n     * \n     * Entries in each section type should have a localized Variable matching in the lang/en.json file under\n     * the proper category.\n     * Type relates to the MenuTypes section\n     * Animation to animations\n     * Variant to variants\n     * Color to colors\n     * \n     */\n    const patreonDB052 = {\n        range: {\n            _free: [],\n            generic: {\n                poison: {\n                    '01': {\n                        greenyellow: {\n                            '05ft': [lg`RangedSpell/ProjectilePoison01_01_Regular_GreenYellow_05ft_600x400.webm`],\n                            '15ft': [lg`RangedSpell/ProjectilePoison01_01_Regular_GreenYellow_15ft_1000x400.webm`],\n                            '30ft': [lg`RangedSpell/ProjectilePoison01_01_Regular_GreenYellow_30ft_1600x400.webm`],\n                            '60ft': [lg`RangedSpell/ProjectilePoison01_01_Regular_GreenYellow_60ft_2800x400.webm`],\n                            '90ft': [lg`RangedSpell/ProjectilePoison01_01_Regular_GreenYellow_90ft_4000x400.webm`],\n                        },\n                    },\n                },\n            },\n        },\n        melee: {\n            _free:['weapon', 'generic'],\n            weapon: {\n                _free:['lasersword'],\n                lasersword: {\n                    _free:['02'],\n                    '02': {\n                        _free:['blue'],\n                        blue: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Blue_800x600.webm`],\n                        blue02: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Blue02_800x600.webm`],\n                        blue03: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Blue03_800x600.webm`],\n                        darkred: [lg`Weapon_Attacks/Melee/LaserSword01_02_Dark_Red_800x600.webm`],\n                        darkwhite: [lg`Weapon_Attacks/Melee/LaserSword01_02_Dark_White_800x600.webm`],\n                        green: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Green_800x600.webm`],\n                        green02: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Green02_800x600.webm`],\n                        orange: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Orange_800x600.webm`],\n                        purple: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Purple_800x600.webm`],\n                        red: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Red_800x600.webm`],\n                        white: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_White_800x600.webm`],\n                        yellow: [lg`Weapon_Attacks/Melee/LaserSword01_02_Regular_Yellow_800x600.webm`],\n                    },\n                }    \n            },\n            generic: {\n                _free:['slashing', 'whirlwind'],\n                slashing: {\n                    _free:['01', '02', '03'],\n                    '01': {\n                        _free:['orange'],\n                        greenyellow: [lg`Weapon_Attacks/Melee/GenericSlash01_01_Regular_GreenYellow_800x600.webm`],\n                        purpleblue: [lg`Weapon_Attacks/Melee/GenericSlash01_01_Regular_BluePurple_800x600.webm`],\n                        orange: [lg`Weapon_Attacks/Melee/GenericSlash01_01_Regular_Orange_800x600.webm`],\n                    },\n                    '02': {\n                        _free:['orange'],\n                        greenyellow: [lg`Weapon_Attacks/Melee/GenericSlash01_02_Regular_GreenYellow_800x600.webm`],\n                        purpleblue: [lg`Weapon_Attacks/Melee/GenericSlash01_02_Regular_BluePurple_800x600.webm`],\n                        orange: [lg`Weapon_Attacks/Melee/GenericSlash01_02_Regular_Orange_800x600.webm`],\n                    },\n                    '03': {\n                        _free:['orange'],\n                        greenyellow: [lg`Weapon_Attacks/Melee/GenericSlash01_03_Regular_GreenYellow_800x600.webm`],\n                        purpleblue: [lg`Weapon_Attacks/Melee/GenericSlash01_03_Regular_BluePurple_800x600.webm`],\n                        orange: [lg`Weapon_Attacks/Melee/GenericSlash01_03_Regular_Orange_800x600.webm`],\n                    } ,\n                },\n                whirlwind: {\n                    _free:['01', '02'],\n                    '01': {\n                        _free:['orange'],\n                        greenyellow: [lg`Weapon_Attacks/Melee/GenericWhirlwind01_01_Regular_GreenYellow_800x600.webm`],\n                        purpleblue: [lg`Weapon_Attacks/Melee/GenericWhirlwind01_01_Regular_BluePurple_800x600.webm`],\n                        orange: [lg`Weapon_Attacks/Melee/GenericWhirlwind01_01_Regular_Orange_800x600.webm`],\n                    },\n                    '02': {\n                        _free:['orange'],\n                        greenyellow: [lg`Weapon_Attacks/Melee/GenericWhirlwind01_02_Regular_GreenYellow_800x600.webm`],\n                        purpleblue: [lg`Weapon_Attacks/Melee/GenericWhirlwind01_02_Regular_BluePurple_800x600.webm`],\n                        orange: [lg`Weapon_Attacks/Melee/GenericWhirlwind01_02_Regular_Orange_800x600.webm`],\n                    },\n                },\n            }\n        },\n        templatefx: {\n            _free:['circle'],\n            circle: {\n                _free:['magicsign'],\n                magicsign: {\n                    _free:['abjuration', 'conjuration', 'divination', 'enchantment', 'evocation', 'illusion',\n                            'necromancy', 'transmutation'],\n                    abjuration: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        _free:['blue'],\n                        blue: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/AbjurationCircleComplete_02_Regular_Yellow_800x800.webm`]\n                    },\n                    conjuration: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        _free:['yellow'],\n                        blue: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/ConjurationCircleComplete_02_Regular_Yellow_800x800.webm`]\n                    },\n                    divination: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        _free:['blue'],\n                        blue: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/DivinationCircleComplete_02_Regular_Yellow_800x800.webm`]\n                    },\n                    enchantment: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        _free:['pink'],\n                        blue: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/EnchantmentCircleComplete_02_Regular_Yellow_800x800.webm`]\n                    },\n                    evocation: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        _free:['red'],\n                        blue: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/EvocationCircleComplete_02_Regular_Yellow_800x800.webm`]\n                    },\n                    illusion: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        _free:['purple'],\n                        blue: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/IllusionCircleComplete_02_Regular_Yellow_800x800.webm`]\n                    },\n                    necromancy: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        _free:['green'],\n                        blue: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/NecromancyCircleComplete_02_Regular_Yellow_800x800.webm`]\n                    },\n                    transmutation: {\n                        _markers: {\n                            loop: { start: 3000, end: 8000 },\n                            forcedEnd: 8000\n                        },\n                        _free:['yellow'],\n                        blue: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Blue_800x800.webm`],\n                        green: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Green_800x800.webm`],\n                        pink: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Pink_800x800.webm`],\n                        purple: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Purple_800x800.webm`],\n                        red: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Red_800x800.webm`],\n                        yellow: [lg`Magic_Signs/TransmutationCircleComplete_02_Regular_Yellow_800x800.webm`]\n                    }\n                },\n            },\n        },\n        static: {\n            _free:['magicsign'],\n            fire: {\n                groundcrack: {\n                    '01': {\n                        white: [lg`Fire/GroundCrackLoop_01_Regular_White_600x600.webm`],\n                    },\n                    '02': {\n                        white: [lg`Fire/GroundCrackLoop_02_Regular_White_600x600.webm`],\n                    },\n                    '03': {\n                        white: [lg`Fire/GroundCrackLoop_03_Regular_White_600x600.webm`],\n                    },\n                },    \n            },\n            impact: {\n                frost: {\n                    '01': {\n                        blue: [lg`Impact/FrostImpact_01_Regular_Blue_600x600.webm`],\n                        green: [lg`Impact/FrostImpact_01_Regular_Green_600x600.webm`],\n                        orange: [lg`Impact/FrostImpact_01_Regular_Orange_600x600.webm`],\n                        purple: [lg`Impact/FrostImpact_01_Regular_Purple_600x600.webm`],\n                        white: [lg`Impact/FrostImpact_01_Regular_White_600x600.webm`],\n                    },\n                },\n                groundcrack: {\n                    '01': {\n                        blue: [\n                            lg`Impact/GroundCrackImpact_01_Regular_Blue_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_02_Regular_Blue_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_03_Regular_Blue_600x600.webm`,\n                        ],\n                        green: [\n                            lg`Impact/GroundCrackImpact_01_Regular_Green_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_02_Regular_Green_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_03_Regular_Green_600x600.webm`,\n                        ],\n                        orange: [\n                            lg`Impact/GroundCrackImpact_01_Regular_Orange_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_02_Regular_Orange_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_03_Regular_Orange_600x600.webm`,\n                        ],\n                        purple: [\n                            lg`Impact/GroundCrackImpact_01_Regular_Purple_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_02_Regular_Purple_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_03_Regular_Purple_600x600.webm`,\n                        ],\n                        white: [\n                            lg`Impact/GroundCrackImpact_01_Regular_White_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_02_Regular_White_600x600.webm`,\n                            lg`Impact/GroundCrackImpact_03_Regular_White_600x600.webm`,\n                        ],\n                    },\n                    frost: {\n                        blue: [lg`Impact/GroundCrackFrostImpact_01_Regular_Blue_600x600.webm`],\n                        green: [lg`Impact/GroundCrackFrostImpact_01_Regular_Green_600x600.webm`],\n                        orange: [lg`Impact/GroundCrackFrostImpact_01_Regular_Orange_600x600.webm`],\n                        purple: [lg`Impact/GroundCrackFrostImpact_01_Regular_Purple_600x600.webm`],\n                        white: [lg`Impact/GroundCrackFrostImpact_01_Regular_White_600x600.webm`],\n                    },\n                },\n                poison: {\n                    '01': {\n                        green: [lg`Impact/ImpactPoison01_01_Regular_GreenYellow_400x400.webm`]\n                    },\n                },\n            },\n            magicsign: {\n                _free:['abjuration', 'conjuration', 'divination', 'enchantment', 'evocation', 'illusion',\n                'necromancy', 'transmutation'],\n                abjuration: {\n                    _free:['complete'],\n                    complete: {\n                        _free:['darkblue'],\n                        darkblue: [lg`Magic_Signs/AbjurationCircleComplete_02_Dark_Blue_800x800.webm`],\n                        darkgreen: [lg`Magic_Signs/AbjurationCircleComplete_02_Dark_Green_800x800.webm`],\n                        darkpink: [lg`Magic_Signs/AbjurationCircleComplete_02_Dark_Pink_800x800.webm`],\n                        darkpurple: [lg`Magic_Signs/AbjurationCircleComplete_02_Dark_Purple_800x800.webm`],\n                        darkred: [lg`Magic_Signs/AbjurationCircleComplete_02_Dark_Red_800x800.webm`],\n                        darkyellow: [lg`Magic_Signs/AbjurationCircleComplete_02_Dark_Yellow_800x800.webm`],\n                    },\n                },\n                conjuration: {\n                    _free:['complete'],\n                    complete: {\n                        _free:['darkyellow'],\n                        darkblue: [lg`Magic_Signs/ConjurationCircleComplete_02_Dark_Blue_800x800.webm`],\n                        darkgreen: [lg`Magic_Signs/ConjurationCircleComplete_02_Dark_Green_800x800.webm`],\n                        darkpink: [lg`Magic_Signs/ConjurationCircleComplete_02_Dark_Pink_800x800.webm`],\n                        darkpurple: [lg`Magic_Signs/ConjurationCircleComplete_02_Dark_Purple_800x800.webm`],\n                        darkred: [lg`Magic_Signs/ConjurationCircleComplete_02_Dark_Red_800x800.webm`],\n                        darkyellow: [lg`Magic_Signs/ConjurationCircleComplete_02_Dark_Yellow_800x800.webm`],\n                    },\n                },\n                divination: {\n                    _free:['complete'],\n                    complete: {\n                        _free:['darkblue'],\n                        darkblue: [lg`Magic_Signs/DivinationCircleComplete_02_Dark_Blue_800x800.webm`],\n                        darkgreen: [lg`Magic_Signs/DivinationCircleComplete_02_Dark_Green_800x800.webm`],\n                        darkpink: [lg`Magic_Signs/DivinationCircleComplete_02_Dark_Pink_800x800.webm`],\n                        darkpurple: [lg`Magic_Signs/DivinationCircleComplete_02_Dark_Purple_800x800.webm`],\n                        darkred: [lg`Magic_Signs/DivinationCircleComplete_02_Dark_Red_800x800.webm`],\n                        darkyellow: [lg`Magic_Signs/DivinationCircleComplete_02_Dark_Yellow_800x800.webm`],\n                    },\n                },\n                enchantment: {\n                    _free:['complete'],\n                    complete: {\n                        _free:['darkpink'],\n                        darkblue: [lg`Magic_Signs/EnchantmentCircleComplete_02_Dark_Blue_800x800.webm`],\n                        darkgreen: [lg`Magic_Signs/EnchantmentCircleComplete_02_Dark_Green_800x800.webm`],\n                        darkpink: [lg`Magic_Signs/EnchantmentCircleComplete_02_Dark_Pink_800x800.webm`],\n                        darkpurple: [lg`Magic_Signs/EnchantmentCircleComplete_02_Dark_Purple_800x800.webm`],\n                        darkred: [lg`Magic_Signs/EnchantmentCircleComplete_02_Dark_Red_800x800.webm`],\n                        darkyellow: [lg`Magic_Signs/EnchantmentCircleComplete_02_Dark_Yellow_800x800.webm`],\n                    },\n                },\n                illusion: {\n                    _free:['complete'],\n                    complete: {\n                        _free:['darkpurple'],\n                        darkblue: [lg`Magic_Signs/IllusionCircleComplete_02_Dark_Blue_800x800.webm`],\n                        darkgreen: [lg`Magic_Signs/IllusionCircleComplete_02_Dark_Green_800x800.webm`],\n                        darkpink: [lg`Magic_Signs/IllusionCircleComplete_02_Dark_Pink_800x800.webm`],\n                        darkpurple: [lg`Magic_Signs/IllusionCircleComplete_02_Dark_Purple_800x800.webm`],\n                        darkred: [lg`Magic_Signs/IllusionCircleComplete_02_Dark_Red_800x800.webm`],\n                        darkyellow: [lg`Magic_Signs/IllusionCircleComplete_02_Dark_Yellow_800x800.webm`],\n                    },\n                },\n                necromancy: {\n                    _free:['complete'],\n                    complete: {\n                        _free:['darkgreen'],\n                        darkblue: [lg`Magic_Signs/NecromancyCircleComplete_02_Dark_Blue_800x800.webm`],\n                        darkgreen: [lg`Magic_Signs/NecromancyCircleComplete_02_Dark_Green_800x800.webm`],\n                        darkpink: [lg`Magic_Signs/NecromancyCircleComplete_02_Dark_Pink_800x800.webm`],\n                        darkpurple: [lg`Magic_Signs/NecromancyCircleComplete_02_Dark_Purple_800x800.webm`],\n                        darkred: [lg`Magic_Signs/NecromancyCircleComplete_02_Dark_Red_800x800.webm`],\n                        darkyellow: [lg`Magic_Signs/NecromancyCircleComplete_02_Dark_Yellow_800x800.webm`],\n                    },\n                },\n                transmutation: {\n                    _free:['complete'],\n                    complete: {\n                        _free:['darkyellow'],\n                        darkblue: [lg`Magic_Signs/TransmutationCircleComplete_02_Dark_Blue_800x800.webm`],\n                        darkgreen: [lg`Magic_Signs/TransmutationCircleComplete_02_Dark_Green_800x800.webm`],\n                        darkpink: [lg`Magic_Signs/TransmutationCircleComplete_02_Dark_Pink_800x800.webm`],\n                        darkpurple: [lg`Magic_Signs/TransmutationCircleComplete_02_Dark_Purple_800x800.webm`],\n                        darkred: [lg`Magic_Signs/TransmutationCircleComplete_02_Dark_Red_800x800.webm`],\n                        darkyellow: [lg`Magic_Signs/TransmutationCircleComplete_02_Dark_Yellow_800x800.webm`],\n                    },\n                },\n\n            },\n            sideImpact: {\n                poison: {\n                    regular: {\n                        greenyellow: [lg`Impact/SideImpactPoison01_01_Regular_GreenYellow_600x600.webm`],\n                    },\n                    slow: {\n                        purplepink: [lg`Impact/PartSideImpactSlowPoison01_01_Regular_GreenYellow_600x600.webm`]\n                    }\n                }\n            },\n        },\n    }\n    return patreonDB052;\n}","export async function db053(path) {\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l0 = prefix('Cantrip')\n    const l1 = prefix('1st_Level')\n    const l2 = prefix('2nd_Level')\n    const lg = prefix('Generic')\n\n    /**\n     * Structure for the internal Select menus work as:\n     * Type => Animation => Variant => Color\n     * Example: Range Menu - Weapon => Arrow => Regular => Regular\n     * \n     * Entries in each section type should have a localized Variable matching in the lang/en.json file under\n     * the proper category.\n     * Type relates to the MenuTypes section\n     * Animation to animations\n     * Variant to variants\n     * Color to colors\n     * \n     */\n    const patreonDB053 = {\n        range: {\n            _free: [],\n            spell: {\n                guidingbolt: {\n                    '01': {\n                        yellow: {\n                            '05ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Yellow_05ft_600x400.webm`],\n                            '15ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Yellow_15ft_1000x400.webm`],\n                            '30ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Yellow_30ft_1600x400.webm`],\n                            '60ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Yellow_60ft_2800x400.webm`],\n                            '90ft': [l1`Guiding_Bolt/GuidingBolt_01_Regular_Yellow_90ft_4000x400.webm`]\n                        },\n                    },\n                    '02': {\n                        yellow: {\n                            '05ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Yellow_05ft_600x400.webm`],\n                            '15ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Yellow_15ft_1000x400.webm`],\n                            '30ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Yellow_30ft_1600x400.webm`],\n                            '60ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Yellow_60ft_2800x400.webm`],\n                            '90ft': [l1`Guiding_Bolt/GuidingBolt_02_Regular_Yellow_90ft_4000x400.webm`]\n                        },\n                    },\n                },\n            },\n            generic: {\n                energybeam: {\n                    '01': {\n                        yellow: {\n                            '15ft': [lg`Energy/EnergyBeam_01_Regular_Yellow_15ft_1000x400.webm`],\n                            '30ft': [lg`Energy/EnergyBeam_01_Regular_Yellow_30ft_1600x400.webm`],\n                            '60ft': [lg`Energy/EnergyBeam_01_Regular_Yellow_60ft_2800x400.webm`],\n                            '90ft': [lg`Energy/EnergyBeam_01_Regular_Yellow_90ft_4000x400.webm`],\n                        }    \n                    },\n                    '02': {\n                        yellow: {\n                            '05ft': [lg`Energy/EnergyBeam_02_Regular_Yellow_05ft_600x400.webm`],\n                            '15ft': [lg`Energy/EnergyBeam_02_Regular_Yellow_15ft_1000x400.webm`],\n                            '30ft': [lg`Energy/EnergyBeam_02_Regular_Yellow_30ft_1600x400.webm`],\n                            '60ft': [lg`Energy/EnergyBeam_02_Regular_Yellow_60ft_2800x400.webm`],\n                            '90ft': [lg`Energy/EnergyBeam_02_Regular_Yellow_90ft_4000x400.webm`],\n                        }    \n                    },\n                    '03': {\n                        yellow: {\n                            '05ft': [lg`Energy/EnergyBeam_03_Regular_Yellow_05ft_600x400.webm`],\n                            '15ft': [lg`Energy/EnergyBeam_03_Regular_Yellow_15ft_1000x400.webm`],\n                            '30ft': [lg`Energy/EnergyBeam_03_Regular_Yellow_30ft_1600x400.webm`],\n                            '60ft': [lg`Energy/EnergyBeam_03_Regular_Yellow_60ft_2800x400.webm`],\n                            '90ft': [lg`Energy/EnergyBeam_03_Regular_Yellow_90ft_4000x400.webm`],\n                        }    \n                    },\n                    reverse: {\n                        yellow: {\n                            '15ft': [lg`Energy/EnergyBeamReverse_01_Regular_Yellow_15ft_1000x400.webm`],\n                            '30ft': [lg`Energy/EnergyBeamReverse_01_Regular_Yellow_30ft_1600x400.webm`],\n                            '60ft': [lg`Energy/EnergyBeamReverse_01_Regular_Yellow_60ft_2800x400.webm`],\n                            '90ft': [lg`Energy/EnergyBeamReverse_01_Regular_Yellow_90ft_4000x400.webm`],\n                        }    \n                    },\n                },\n                energystrand: {\n                    '02': {\n                        yellow: {\n                            '05ft': [lg`Energy/EnergyStrand_Multiple02_Regular_Yellow_05ft_600x400.webm`],\n                            '15ft': [lg`Energy/EnergyStrand_Multiple02_Regular_Yellow_15ft_1000x400.webm`],\n                            '30ft': [lg`Energy/EnergyStrand_Multiple02_Regular_Yellow_30ft_1600x400.webm`],\n                            '60ft': [lg`Energy/EnergyStrand_Multiple02_Regular_Yellow_60ft_2800x400.webm`],\n                            '90ft': [lg`Energy/EnergyStrand_Multiple02_Regular_Yellow_90ft_4000x400.webm`]\n                        }\n                    },\n                },\n            },\n        },\n        templatefx: {\n            _free: [],\n            circle: {\n                detectmagic: {\n                    '01': {\n                        yellow: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Yellow_1200x1200.webm`],\n                    }\n                },    \n                moonbeam: {\n                    loop: {\n                        yellow: [l2`Moonbeam/Moonbeam_01_Regular_Yellow_400x400.webm`],\n                    },\n                    intro: {\n                        yellow: [l2`Moonbeam/MoonbeamIntro_01_Regular_Yellow_400x400.webm`],\n                    },\n                    outro: {\n                        yellow: [l2`Moonbeam/MoonbeamOutro_01_Regular_Yellow_400x400.webm`],\n                    },    \n                    complete: {\n                        _markers: {\n                            loop: { start: 3708, end: 8708 }\n                        },    \n                        blue: [l2`Moonbeam/MoonbeamComplete_01_Regular_Blue_400x400.webm`],\n                        green: [l2`Moonbeam/MoonbeamComplete_01_Regular_Green_400x400.webm`],\n                        rainbow: [l2`Moonbeam/MoonbeamComplete_01_Regular_Rainbow_400x400.webm`],\n                        yellow: [l2`Moonbeam/MoonbeamComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                outpulse: {\n                    '01': {\n                        yellowwhite: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_YellowWhite_Burst_600x600.webm`],\n                    },\n                    '02': {\n                        yellowwhite: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_YellowWhite_Burst_600x600.webm`],\n                    }\n                },\n            },\n            cone: {\n                detectmagic: {\n                    '01': {\n                        blue: [l1`Detect_Magic/DetectMagicCone_01_Regular_Blue_15ft_500x500.webm`],\n                        green: [l1`Detect_Magic/DetectMagicCone_01_Regular_Green_15ft_500x500.webm`],\n                        greenorange: [l1`Detect_Magic/DetectMagicCone_01_Regular_GreenOrange_15ft_500x500.webm`],\n                        grey: [l1`Detect_Magic/DetectMagicCone_01_Regular_Grey_15ft_500x500.webm`],\n                        purple: [l1`Detect_Magic/DetectMagicCone_01_Regular_Purple_15ft_500x500.webm`],    \n                        yellow: [l1`Detect_Magic/DetectMagicCone_01_Regular_Yellow_15ft_500x500.webm`],\n                    }\n                },    \n            },\n        },\n        static: {\n            _free:['marker', 'nature', 'sideImpact', 'smoke'],\n            energy: {\n                energyfield: {\n                    '01': {\n                        yellow: [lg`Energy/EnergyField_01_Regular_Yellow_600x600.webm`],\n                    }\n                },\n                sparkles: {\n                    '01': {\n                        yellow: [lg`Energy/SwirlingSparkles_01_Regular_Yellow_400x400.webm`],\n                    },\n                },    \n            },\n            generic: {\n                outpulse: {\n                    '01': {\n                        yellowwhite: [lg`Template/Circle/OutPulse/OutPulse_01_Regular_YellowWhite_Burst_600x600.webm`],\n                    },\n                    '02': {\n                        yellowwhite: [lg`Template/Circle/OutPulse/OutPulse_02_Regular_YellowWhite_Burst_600x600.webm`],\n                    }\n                },\n                smoke: {\n                    '01': {\n                        green: [lg`Smoke/SmokePuff01_01_Regular_Green_400x400.webm`],\n                    },\n                    '02': {\n                        green: [lg`Smoke/SmokePuff01_02_Regular_Green_400x400.webm`],\n                    },\n                    '03': {\n                        green: [lg`Smoke/SmokePuff01_03_Regular_Green_400x400.webm`],\n                    },\n                },    \n            },\n            ice: {\n                icespikes: {\n                    '01': {\n                        grey: [lg`Ice/IceSpikesRadialBurst_01_Regular_Grey_1000x1000.webm`],\n                        yellow: [lg`Ice/IceSpikesRadialBurst_01_Regular_Yellow_1000x1000.webm`],\n                    }\n                },\n                snowflake: {\n                    '01': {\n                        yellowwhite: [lg`Ice/SnowflakeBurst_01_Regular_YellowWhite_Burst_600x600.webm`],\n                    }\n                },    \n            },\n            marker: {\n                _free:['bubble', 'roundshield', 'smokering'],\n                bubble: {\n                    _free:['complete'],\n                    '01': {\n                        yellow: [lg`Marker/MarkerBubble_01_Regular_Yellow_400x400.webm`],\n                    },    \n                    complete: {\n                        _markers: {\n                            loop: { start: 2625, end: 7625 }\n                        },\n                        _free:['blue', \"_markers\"],\n                        blue: [lg`Marker/MarkerBubbleComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Marker/MarkerBubbleComplete_01_Regular_Green_400x400.webm`],\n                        rainbow: [lg`Marker/MarkerBubbleComplete_01_Regular_Rainbow_400x400.webm`],\n                        yellow: [lg`Marker/MarkerBubbleComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                light: {\n                    intro: {\n                        blue: [lg`Marker/MarkerLightIntro_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Marker/MarkerLightIntro_01_Regular_Green_400x400.webm`],\n                        yellow: [lg`Marker/MarkerLightIntro_01_Regular_Yellow_400x400.webm`],\n                    },\n                    outro: {\n                        blue: [lg`Marker/MarkerLightOutro_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Marker/MarkerLightOutro_01_Regular_Green_400x400.webm`],\n                        yellow: [lg`Marker/MarkerLightOutro_01_Regular_Yellow_400x400.webm`],\n                    },\n                    complete: {\n                        _markers: {\n                            loop: { start: 3750, end: 8750 }\n                        },    \n                        blue: [lg`Marker/MarkerLightComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Marker/MarkerLightComplete_01_Regular_Green_400x400.webm`],\n                        yellow: [lg`Marker/MarkerLightComplete_01_Regular_Yellow_400x400.webm`],\n                    },\n                },\n                roundshield: {\n                    _free:['loop', 'complete'],\n                    loop: {\n                        _free:['orange'],\n                        darkred: [lg`Marker/MarkerShieldRampartLoop01_01_Dark_Red_400x400.webm`],\n                        orange: [lg`Marker/MarkerShieldRampartLoop01_01_Regular_Orange_400x400.webm`],\n                    },\n                    complete: {\n                        _markers: {\n                            loop: { start: 1916, end: 6208 }\n                        },\n                        _free:['orange', \"_markers\"],\n                        darkred: [lg`Marker/MarkerShieldRampart01_01_Dark_Red_400x400.webm`],\n                        orange: [lg`Marker/MarkerShieldRampart01_01_Regular_Orange_400x400.webm`],\n                    },\n                },\n                boneshield: {\n                    loop: {\n                        green: [lg`Marker/MarkerShieldRampartLoop02_01_Regular_Green_400x400.webm`],\n                        purple: [lg`Marker/MarkerShieldRampartLoop02_01_Regular_Purple_400x400.webm`],\n                    },\n                    complete: {\n                        _markers: {\n                            loop: { start: 1916, end: 6208 }\n                        },    \n                        green: [lg`Marker/MarkerShieldRampart02_01_Regular_Green_400x400.webm`],\n                        purple: [lg`Marker/MarkerShieldRampart02_01_Regular_Purple_400x400.webm`],\n                    },\n                },\n                towershield: {\n                    loop: {\n                        blue: [lg`Marker/MarkerShieldRampartLoop03_01_Regular_Blue_400x400.webm`],\n                        yellow: [lg`Marker/MarkerShieldRampartLoop03_01_Regular_Yellow_400x400.webm`],\n                    },\n                    complete: {\n                        _markers: {\n                            loop: { start: 1916, end: 6208 }\n                        },    \n                        blue: [lg`Marker/MarkerShieldRampart03_01_Regular_Blue_400x400.webm`],\n                        yellow: [lg`Marker/MarkerShieldRampart03_01_Regular_Yellow_400x400.webm`],\n                    },\n                },\n                smokering: {\n                    _free:['loop'],\n                    loop: {\n                        _free:['purpleblue'],\n                        darkred: [lg`Marker/MarkerSmokeRingLoop01_Dark_Red_400x400.webm`],\n                        purpleblue: [lg`Marker/MarkerSmokeRingLoop01_Regular_BluePurple_400x400.webm`],\n                        purple: [lg`Marker/MarkerSmokeRingLoop01_Regular_Purple_400x400.webm`],\n                        yellow: [lg`Marker/MarkerSmokeRingLoop01_Regular_Yellow_400x400.webm`],\n                    },\n                },\n                standard: {\n                    '01': {\n                        yellow: [lg`Marker/Marker_01_Regular_Yellow_400x400.webm`],\n                    },\n                    '02': {\n                        yellow: [lg`Marker/Marker_02_Regular_Yellow_400x400.webm`],\n                    },\n                },    \n            },\n            nature: {\n                _free:['feathers'],\n                feathers: {\n                    _free:['outburst'],\n                    outburst: {\n                        _free:['textured'],\n                        blue: [\n                            lg`Nature/SwirlingFeathersOutburst01_01_Regular_Blue_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst02_01_Regular_Blue_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst03_01_Regular_Blue_400x400.webm`\n                        ],\n                        orange: [\n                            lg`Nature/SwirlingFeathersOutburst01_01_Regular_Orange_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst02_01_Regular_Orange_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst03_01_Regular_Orange_400x400.webm`\n                        ],\n                        purple: [\n                            lg`Nature/SwirlingFeathersOutburst01_01_Regular_Purple_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst02_01_Regular_Purple_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst03_01_Regular_Purple_400x400.webm`\n                        ],\n                        red: [\n                            lg`Nature/SwirlingFeathersOutburst01_01_Regular_Red_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst02_01_Regular_Red_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst03_01_Regular_Red_400x400.webm`\n                        ],\n                        textured: [\n                            lg`Nature/SwirlingFeathersOutburst01_01_Regular_Textured_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst02_01_Regular_Textured_400x400.webm`,\n                            lg`Nature/SwirlingFeathersOutburst03_01_Regular_Textured_400x400.webm`\n                        ],\n                    },\n                },\n            },\n            shieldfx: {\n                energyfield: {\n                    '01': {\n                        yellow: [lg`Energy/EnergyFieldTop_02_Regular_Yellow_400x400.webm`],\n                    }\n                },    \n            },\n            sideImpact: {\n                _free:['smoke'],\n                smoke: {\n                    _free:['01', '02'],\n                    \"01\": {\n                        _free:['grey'],\n                        black: [\n                            lg`Smoke/SmokePuffSide01_01_Dark_Black_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_02_Dark_Black_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_03_Dark_Black_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_04_Dark_Black_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_05_Dark_Black_400x400.webm`,\n                        ],\n                        blue: [\n                            lg`Smoke/SmokePuffSide01_01_Regular_Blue_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_02_Regular_Blue_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_03_Regular_Blue_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_04_Regular_Blue_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_05_Regular_Blue_400x400.webm`,\n                        ],\n                        darkgreen: [\n                            lg`Smoke/SmokePuffSide01_01_Dark_Green_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_02_Dark_Green_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_03_Dark_Green_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_04_Dark_Green_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_05_Dark_Green_400x400.webm`,\n                        ],\n                        darkpurple: [\n                            lg`Smoke/SmokePuffSide01_01_Dark_Purple_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_02_Dark_Purple_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_03_Dark_Purple_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_04_Dark_Purple_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_05_Dark_Purple_400x400.webm`,\n                        ],\n                        green: [\n                            lg`Smoke/SmokePuffSide01_01_Regular_Green_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_02_Regular_Green_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_03_Regular_Green_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_04_Regular_Green_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_05_Regular_Green_400x400.webm`,\n                        ],\n                        grey: [\n                            lg`Smoke/SmokePuffSide01_01_Regular_Grey_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_02_Regular_Grey_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_03_Regular_Grey_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_04_Regular_Grey_400x400.webm`,\n                            lg`Smoke/SmokePuffSide01_05_Regular_Grey_400x400.webm`,\n                        ]\n                    },\n                    '02': {\n                        _free:['white'],\n                        black: [\n                            lg`Smoke/SmokePuffSide02_01_Dark_Black_400x400.webm`,\n                            lg`Smoke/SmokePuffSide02_02_Dark_Black_400x400.webm`,\n                            lg`Smoke/SmokePuffSide02_03_Dark_Black_400x400.webm`,\n                        ],\n                        white: [\n                            lg`Smoke/SmokePuffSide02_01_Regular_White_400x400.webm`,\n                            lg`Smoke/SmokePuffSide02_02_Regular_White_400x400.webm`,\n                            lg`Smoke/SmokePuffSide02_03_Regular_White_400x400.webm`,\n                        ]\n                    }\n                }\n            },\n            smoke: {\n                _free:['plume'],\n                plume: {\n                    _free:['complete'],\n                    complete: {\n                        _markers: {\n                            loop: { start: 2000, end: 4000 }\n                            },\n                        _free:['grey', '_markers'],\n                        blue: [\n                            lg`Smoke/SmokePlumes01_01_Regular_Blue_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_02_Regular_Blue_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_03_Regular_Blue_400x400.webm`,\n                        ],\n                        darkgreen: [\n                            lg`Smoke/SmokePlumes01_01_Dark_Green_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_02_Dark_Green_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_03_Dark_Green_400x400.webm`\n                        ],\n                        darkred: [\n                            lg`Smoke/SmokePlumes01_01_Dark_Red_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_02_Dark_Red_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_03_Dark_Red_400x400.webm`\n                        ],\n                        grey: [\n                            lg`Smoke/SmokePlumes01_01_Regular_Grey_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_02_Regular_Grey_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_03_Regular_Grey_400x400.webm`\n                        ],\n                        purple: [\n                            lg`Smoke/SmokePlumes01_01_Regular_Purple_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_02_Regular_Purple_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_03_Regular_Purple_400x400.webm`\n                        ],\n                        yellow: [\n                            lg`Smoke/SmokePlumes01_01_Regular_Yellow_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_02_Regular_Yellow_400x400.webm`,\n                            lg`Smoke/SmokePlumes01_03_Regular_Yellow_400x400.webm`\n                        ],\n                    },\n                }\n            },\n            spell: {\n                moonbeam: {\n                    loop: {\n                        yellow: [l2`Moonbeam/Moonbeam_01_Regular_Yellow_400x400.webm`],\n                    },\n                    intro: {\n                        yellow: [l2`Moonbeam/MoonbeamIntro_01_Regular_Yellow_400x400.webm`],\n                    },\n                    outro: {\n                        yellow: [l2`Moonbeam/MoonbeamOutro_01_Regular_Yellow_400x400.webm`],\n                    },    \n                    complete: {\n                        blue: [l2`Moonbeam/MoonbeamComplete_01_Regular_Blue_400x400.webm`],\n                        green: [l2`Moonbeam/MoonbeamComplete_01_Regular_Green_400x400.webm`],\n                        rainbow: [l2`Moonbeam/MoonbeamComplete_01_Regular_Rainbow_400x400.webm`],\n                        yellow: [l2`Moonbeam/MoonbeamComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                curewounds: {\n                    '01': {\n                        yellow: [l1`Cure_Wounds/CureWounds_01_Yellow_400x400.webm`]\n                    }\n                },\n                detectmagic: {\n                    '01': {\n                        yellow: [l1`Detect_Magic/DetectMagicCircle_01_Regular_Yellow_1200x1200.webm`],\n                    }\n                },\n                tollthedead: {\n                    bell: {\n                        yellow: [l0`Toll_The_Dead/TollTheDeadBell_01_Regular_Yellow_400x400.webm`],\n                    },\n                    complete: {\n                        yellow: [l0`Toll_The_Dead/TollTheDead_01_Regular_Yellow_400x400.webm`],\n                    },\n                    shockwave: {\n                        yellow: [l0`Toll_The_Dead/TollTheDeadShockwave_01_Regular_Yellow_400x400.webm`],\n                    },\n                    skull: {\n                        yellow: [l0`Toll_The_Dead/TollTheDeadSkullSmoke_01_Regular_Yellow_400x400.webm`],\n                    },\n                },    \n            },\n        },\n    }\n    return patreonDB053;\n}","export async function db054(path) {\n\n    const BASE = `${path}/Library/`\n    const prefix = (str) => (strs, ...exprs) => `${BASE}${str}/${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}`\n    const l0 = prefix('Cantrip')\n    const l1 = prefix('1st_Level')\n    const l2 = prefix('2nd_Level')\n    const l3 = prefix('3rd_Level')\n    const l4 = prefix('4th_Level')\n    const l5 = prefix('5th_Level')\n    const l6 = prefix('6th_Level')\n    const l7 = prefix('7th_Level')\n    const lg = prefix('Generic')\n\n    /**\n     * Structure for the internal Select menus work as:\n     * Type => Animation => Variant => Color\n     * Example: Range Menu - Weapon => Arrow => Regular => Regular\n     * \n     * Entries in each section type should have a localized Variable matching in the lang/en.json file under\n     * the proper category.\n     * Type relates to the MenuTypes section\n     * Animation to animations\n     * Variant to variants\n     * Color to colors\n     * \n     */\n    const patreonDB054 = {\n        range: {\n            _template: 'ranged',\n            _free: ['generic'],\n            spell: {\n                fireballbeam: {\n                    '01': {\n                        darkred: {\n                            '05ft': [l3`Fireball/FireballBeam_01_Dark_Red_05ft_600x400.webm`],\n                            '15ft': [l3`Fireball/FireballBeam_01_Dark_Red_15ft_1000x400.webm`],\n                            '30ft': [l3`Fireball/FireballBeam_01_Dark_Red_30ft_1600x400.webm`],\n                            '60ft': [l3`Fireball/FireballBeam_01_Dark_Red_60ft_2800x400.webm`],\n                            '90ft': [l3`Fireball/FireballBeam_01_Dark_Red_90ft_4000x400.webm`]\n                        }\n                    },\n                },\n            },\n            generic: {\n                _free: ['energywall'],\n                energywall: {\n                    _free: ['loop', 'complete'],\n                    loop: {\n                        _free: ['orange'],\n                        blue: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Blue_05x05ft_Loop_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Blue_10x05ft_Loop_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Blue_15x05ft_Loop_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Blue_25x05ft_Loop_1400x400.webm`],\n                        },\n                        green: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Green_05x05ft_Loop_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Green_10x05ft_Loop_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Green_15x05ft_Loop_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Green_25x05ft_Loop_1400x400.webm`],\n                        },\n                        orange: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Orange_05x05ft_Loop_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Orange_10x05ft_Loop_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Orange_15x05ft_Loop_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Orange_25x05ft_Loop_1400x400.webm`],\n                        },\n                        purple: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Purple_05x05ft_Loop_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Purple_10x05ft_Loop_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Purple_15x05ft_Loop_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Purple_25x05ft_Loop_1400x400.webm`],\n                        },\n                        red: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Red_05x05ft_Loop_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Red_10x05ft_Loop_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Red_15x05ft_Loop_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Red_25x05ft_Loop_1400x400.webm`],\n                        }\n                    },\n                    complete: {\n                        _free: ['orange'],\n                        blue: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Blue_05x05ft_Complete_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Blue_10x05ft_Complete_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Blue_15x05ft_Complete_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Blue_25x05ft_Complete_1400x400.webm`],\n                        },\n                        green: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Green_05x05ft_Complete_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Green_10x05ft_Complete_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Green_15x05ft_Complete_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Green_25x05ft_Complete_1400x400.webm`],\n                        },\n                        orange: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Orange_05x05ft_Complete_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Orange_10x05ft_Complete_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Orange_15x05ft_Complete_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Orange_25x05ft_Complete_1400x400.webm`],\n                        },\n                        purple: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Purple_05x05ft_Complete_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Purple_10x05ft_Complete_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Purple_15x05ft_Complete_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Purple_25x05ft_Complete_1400x400.webm`],\n                        },\n                        red: {\n                            '05ft': [lg`Energy/EnergyWall01_01_Regular_Red_05x05ft_Complete_400x400.webm`],\n                            '10ft': [lg`Energy/EnergyWall01_01_Regular_Red_10x05ft_Complete_800x400.webm`],\n                            '15ft': [lg`Energy/EnergyWall01_01_Regular_Red_15x05ft_Complete_1000x400.webm`],\n                            '25ft': [lg`Energy/EnergyWall01_01_Regular_Red_25x05ft_Complete_1400x400.webm`],\n                        }\n                    }\n                }\n            },\n        },\n        templatefx: {\n            _free: ['circle'],\n            circle: {\n                _free: ['energy'],\n                detectmagic: {\n                    '01': {\n                        darkred: [l1`Detect_Magic/DetectMagicCircle_01_Dark_Red_1200x1200.webm`],\n                    }\n                },    \n                energy: {\n                    _free: ['loop', 'complete'],\n                    loop: {\n                        _free: ['orange'],\n                        blue: [lg`Energy/EnergyWall01_01_Regular_Blue_Circle_Loop_900x900.webm`],\n                        green: [lg`Energy/EnergyWall01_01_Regular_Green_Circle_Loop_900x900.webm`],\n                        orange: [lg`Energy/EnergyWall01_01_Regular_Orange_Circle_Loop_900x900.webm`],\n                        purple: [lg`Energy/EnergyWall01_01_Regular_Purple_Circle_Loop_900x900.webm`],\n                        red: [lg`Energy/EnergyWall01_01_Regular_Red_Circle_Loop_900x900.webm`],\n                    },\n                    complete: {\n                        _free: ['orange', '_markers'],\n                        _markers: {\n                            loop: { start: 700, end: 3333 }\n                        },\n                        blue: [lg`Energy/EnergyWall01_01_Regular_Blue_Circle_Complete_900x900.webm`],\n                        green: [lg`Energy/EnergyWall01_01_Regular_Green_Circle_Complete_900x900.webm`],\n                        orange: [lg`Energy/EnergyWall01_01_Regular_Orange_Circle_Complete_900x900.webm`],\n                        purple: [lg`Energy/EnergyWall01_01_Regular_Purple_Circle_Complete_900x900.webm`],\n                        red: [lg`Energy/EnergyWall01_01_Regular_Red_Circle_Complete_900x900.webm`],\n                    }\n                },\n                fireball: {\n                    loop: {\n                        darkred: [l3`Fireball/FireballLoop_01_Dark_Red_800x800.webm`],\n                    },\n                    explode: {\n                        darkred: [l3`Fireball/FireballExplosion_01_Dark_Red_800x800.webm`],\n                    },\n                    nodebris: {\n                        darkred: [l3`Fireball/FireballLoopNoDebris_01_Dark_Red_800x800.webm`],\n                    },\n                },\n            },\n            cone: {\n                breathweaponspray01: {\n                    burst: {\n                        black: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Arcana01_Dark_Black_Cone_Burst_800x800.webm`]\n                    },\n                    loop: {\n                        black: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Arcana01_Dark_Black_Cone_Loop_800x800.webm`]\n                    }\n                },\n                breathweaponspray02: {\n                    burst: {\n                        black: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Arcana02_Dark_Black_Cone_Burst_800x800.webm`]\n                    },\n                    loop: {\n                        black: [lg`Template/Cone/Breath_Weapon/Breathweapon02_Arcana02_Dark_Black_Cone_Loop_800x800.webm`]\n                    }\n                },\n                detectmagic: {\n                    '01': {\n                        darkred: [l1`Detect_Magic/DetectMagicCone_01_Dark_Red_15ft_500x500.webm`],\n                    }\n                },    \n            },\n            ray: {\n                breathweaponspray01: {\n                    burst: {\n                        black: [lg`Template/Line/Breath_Weapon/Breathweapon02_Arcana01_Dark_Black_Line_Burst_1200x400.webm`],\n                    },\n                    loop: {\n                        black: [lg`Template/Line/Breath_Weapon/Breathweapon02_Arcana01_Dark_Black_Line_Loop_1200x400.webm`],\n                    }\n                },    \n            },\n        },\n        static: {\n            _free: ['energy', 'magicsign'],\n            conditions: {\n                skull: {\n                    '01': {\n                        darkred: [lg`Marker/MarkerSkull_01_Dark_Red_400x400.webm`],\n                    },\n                    '02': {\n                        darkred: [lg`Marker/MarkerSkull_02_Dark_Red_400x400.webm`],\n                    },\n                    '03': {\n                        darkred: [lg`Marker/MarkerSkull_03_Dark_Red_400x400.webm`],\n                    },\n                },    \n            },\n            energy: {\n                _free: ['circle'],\n                circle: {\n                    _free: ['loop', 'complete'],\n                    loop: {\n                        _free: ['orange'],\n                        blue: [lg`Energy/EnergyWall01_01_Regular_Blue_Circle_Loop_500x500.webm`],\n                        green: [lg`Energy/EnergyWall01_01_Regular_Green_Circle_Loop_500x500.webm`],\n                        orange: [lg`Energy/EnergyWall01_01_Regular_Orange_Circle_Loop_500x500.webm`],\n                        purple: [lg`Energy/EnergyWall01_01_Regular_Purple_Circle_Loop_500x500.webm`],\n                        red: [lg`Energy/EnergyWall01_01_Regular_Red_Circle_Loop_500x500.webm`],\n                    },\n                    complete: {\n                        _free: ['orange'],\n                        blue: [lg`Energy/EnergyWall01_01_Regular_Blue_Circle_Complete_500x500.webm`],\n                        green: [lg`Energy/EnergyWall01_01_Regular_Green_Circle_Complete_500x500.webm`],\n                        orange: [lg`Energy/EnergyWall01_01_Regular_Orange_Circle_Complete_500x500.webm`],\n                        purple: [lg`Energy/EnergyWall01_01_Regular_Purple_Circle_Complete_500x500.webm`],\n                        red: [lg`Energy/EnergyWall01_01_Regular_Red_Circle_Complete_500x500.webm`],\n                    }\n                }\n            },\n            fire: {\n                groundcrack: {\n                    '01': {\n                        darkred: [lg`Fire/GroundCrackLoop_01_Dark_Red_600x600.webm`],\n                    },\n                    '02': {\n                        darkred: [lg`Fire/GroundCrackLoop_02_Dark_Red_600x600.webm`],\n                    },\n                    '03': {\n                        darkred: [lg`Fire/GroundCrackLoop_03_Dark_Red_600x600.webm`],\n                    },\n                },    \n            },\n            generic: {\n                ui: {\n                    skull: {\n                        darkred: [lg`UI/IconSkull_01_Dark_Red_200x200.webm`],\n                    },\n                },    \n            },\n            lightning: {\n                strike: {\n                    '01': {\n                        red: [\n                            lg`Lightning/LightningStrike01_01_Regular_Red_800x800.webm`,\n                            lg`Lightning/LightningStrike01_02_Regular_Red_800x800.webm`,\n                            lg`Lightning/LightningStrike01_03_Regular_Red_800x800.webm`,\n                            lg`Lightning/LightningStrike01_04_Regular_Red_800x800.webm`,\n                            lg`Lightning/LightningStrike01_05_Regular_Red_800x800.webm`,\n                            lg`Lightning/LightningStrike01_06_Regular_Red_800x800.webm`,\n                        ],\n                    }\n                },\n            },\n            magicsign: {\n                _free:['abjuration', 'conjuration', 'divination', 'enchantment', 'evocation', 'illusion',\n                'necromancy', 'transmutation'],\n                abjuration: {\n                    _free: ['runecomplete'],\n                    runecomplete: {\n                        _free: ['blue'],\n                        blue: [lg`Magic_Signs/Runes/AbjurationRuneComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Magic_Signs/Runes/AbjurationRuneComplete_01_Regular_Green_400x400.webm`],\n                        pink: [lg`Magic_Signs/Runes/AbjurationRuneComplete_01_Regular_Pink_400x400.webm`],\n                        purple: [lg`Magic_Signs/Runes/AbjurationRuneComplete_01_Regular_Purple_400x400.webm`],\n                        red: [lg`Magic_Signs/Runes/AbjurationRuneComplete_01_Regular_Red_400x400.webm`],\n                        yellow: [lg`Magic_Signs/Runes/AbjurationRuneComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                conjuration: {\n                    _free: ['runecomplete'],\n                    runecomplete: {\n                        _free: ['yellow'],\n                        blue: [lg`Magic_Signs/Runes/ConjurationRuneComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Magic_Signs/Runes/ConjurationRuneComplete_01_Regular_Green_400x400.webm`],\n                        pink: [lg`Magic_Signs/Runes/ConjurationRuneComplete_01_Regular_Pink_400x400.webm`],\n                        purple: [lg`Magic_Signs/Runes/ConjurationRuneComplete_01_Regular_Purple_400x400.webm`],\n                        red: [lg`Magic_Signs/Runes/ConjurationRuneComplete_01_Regular_Red_400x400.webm`],\n                        yellow: [lg`Magic_Signs/Runes/ConjurationRuneComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                divination: {\n                    _free: ['runecomplete'],\n                    runecomplete: {\n                        _free: ['blue'],\n                        blue: [lg`Magic_Signs/Runes/DivinationRuneComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Magic_Signs/Runes/DivinationRuneComplete_01_Regular_Green_400x400.webm`],\n                        pink: [lg`Magic_Signs/Runes/DivinationRuneComplete_01_Regular_Pink_400x400.webm`],\n                        purple: [lg`Magic_Signs/Runes/DivinationRuneComplete_01_Regular_Purple_400x400.webm`],\n                        red: [lg`Magic_Signs/Runes/DivinationRuneComplete_01_Regular_Red_400x400.webm`],\n                        yellow: [lg`Magic_Signs/Runes/DivinationRuneComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                enchantment: {\n                    _free: ['runecomplete'],\n                    runecomplete: {\n                        _free: ['pink'],\n                        blue: [lg`Magic_Signs/Runes/EnchantmentRuneComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Magic_Signs/Runes/EnchantmentRuneComplete_01_Regular_Green_400x400.webm`],\n                        pink: [lg`Magic_Signs/Runes/EnchantmentRuneComplete_01_Regular_Pink_400x400.webm`],\n                        purple: [lg`Magic_Signs/Runes/EnchantmentRuneComplete_01_Regular_Purple_400x400.webm`],\n                        red: [lg`Magic_Signs/Runes/EnchantmentRuneComplete_01_Regular_Red_400x400.webm`],\n                        yellow: [lg`Magic_Signs/Runes/EnchantmentRuneComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                evocation: {\n                    _free: ['runecomplete'],\n                    runecomplete: {\n                        _free: ['red'],\n                        blue: [lg`Magic_Signs/Runes/EvocationRuneComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Magic_Signs/Runes/EvocationRuneComplete_01_Regular_Green_400x400.webm`],\n                        pink: [lg`Magic_Signs/Runes/EvocationRuneComplete_01_Regular_Pink_400x400.webm`],\n                        purple: [lg`Magic_Signs/Runes/EvocationRuneComplete_01_Regular_Purple_400x400.webm`],\n                        red: [lg`Magic_Signs/Runes/EvocationRuneComplete_01_Regular_Red_400x400.webm`],\n                        yellow: [lg`Magic_Signs/Runes/EvocationRuneComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                illusion: {\n                    _free: ['runecomplete'],\n                    runecomplete: {\n                        _free: ['purple'],\n                        blue: [lg`Magic_Signs/Runes/IllusionRuneComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Magic_Signs/Runes/IllusionRuneComplete_01_Regular_Green_400x400.webm`],\n                        pink: [lg`Magic_Signs/Runes/IllusionRuneComplete_01_Regular_Pink_400x400.webm`],\n                        purple: [lg`Magic_Signs/Runes/IllusionRuneComplete_01_Regular_Purple_400x400.webm`],\n                        red: [lg`Magic_Signs/Runes/IllusionRuneComplete_01_Regular_Red_400x400.webm`],\n                        yellow: [lg`Magic_Signs/Runes/IllusionRuneComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                necromancy: {\n                    _free: ['runecomplete'],\n                    runecomplete: {\n                        _free: ['green'],\n                        blue: [lg`Magic_Signs/Runes/NecromancyRuneComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Magic_Signs/Runes/NecromancyRuneComplete_01_Regular_Green_400x400.webm`],\n                        pink: [lg`Magic_Signs/Runes/NecromancyRuneComplete_01_Regular_Pink_400x400.webm`],\n                        purple: [lg`Magic_Signs/Runes/NecromancyRuneComplete_01_Regular_Purple_400x400.webm`],\n                        red: [lg`Magic_Signs/Runes/NecromancyRuneComplete_01_Regular_Red_400x400.webm`],\n                        yellow: [lg`Magic_Signs/Runes/NecromancyRuneComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                },\n                transmutation: {\n                    _free: ['runecomplete'],\n                    runecomplete: {\n                        _free: ['yellow'],\n                        blue: [lg`Magic_Signs/Runes/TransmutationRuneComplete_01_Regular_Blue_400x400.webm`],\n                        green: [lg`Magic_Signs/Runes/TransmutationRuneComplete_01_Regular_Green_400x400.webm`],\n                        pink: [lg`Magic_Signs/RunesTransmutationRuneComplete_01_Regular_Pink_400x400.webm`],\n                        purple: [lg`Magic_Signs/Runes/TransmutationRuneComplete_01_Regular_Purple_400x400.webm`],\n                        red: [lg`Magic_Signs/Runes/TransmutationRuneComplete_01_Regular_Red_400x400.webm`],\n                        yellow: [lg`Magic_Signs/Runes/TransmutationRuneComplete_01_Regular_Yellow_400x400.webm`],\n                    }\n                }\n            },\n            shieldfx: {\n                fire: {\n                    '01': {\n                        blue: [lg`Fire/ShieldFireAbove01_01_Regular_Blue_400x400.webm`],\n                        purple: [lg`Fire/ShieldFireAbove01_01_Regular_Purple_400x400.webm`],\n                    },\n                    '03': {\n                        blue: [lg`Fire/ShieldFireAbove01_03_Regular_Blue_400x400.webm`],\n                        purple: [lg`Fire/ShieldFireAbove01_03_Regular_Purple_400x400.webm`],\n                    },\n                },    \n            },\n            spell: {\n                mistystep: {\n                    '01': {\n                        pink: [l2`Misty_Step/MistyStep_01_Regular_Pink_400x400.webm`],\n                    },\n                    '02': {\n                        pink: [l2`Misty_Step/MistyStep_02_Regular_Pink_400x400.webm`],\n                    }\n                },\n                shatter: {\n                    '01': {\n                        darkred: [l2`Shatter/Shatter_01_Dark_Red_400x400.webm`],\n                    }\n                },\n            },\n        },\n    }\n    return patreonDB054;\n}","import * as patreon         from \"./patreonDB\"\nimport { aaDatabase }   from \"../databaseSort\";\nimport { sortDatabase }     from \"../databaseSort\";\n\nexport const dbMerge = {\n\n    async handle(freeVersion, patreonVersion, s3Location) {\n        const freePath = s3Location ? s3Location : \"modules/JB2A_DnD5e\";\n        const patreonPath = s3Location ? s3Location : \"modules/jb2a_patreon\";\n\n        if (patreonVersion) {\n            for (let [version, migration] of Object.entries(this.migrations)) {\n                if (!foundry.utils.isNewerVersion(patreonVersion, version)) {\n                    if (patreonVersion === version) {\n                        await migration(patreonPath, true)\n                        break;\n                    } else {\n                        break;\n                    } \n                }\n                await migration(patreonPath, true)\n            };    \n        }\n        if (freeVersion) {\n            for (let [version, migration] of Object.entries(this.migrations)) {\n                if (foundry.utils.isNewerVersion(patreonVersion, version)) {\n                    continue;\n                }\n                if (patreonVersion === version) {\n                    continue;\n                }\n                if (!foundry.utils.isNewerVersion(freeVersion, version)) {\n                    if (freeVersion === version) {\n                        await migration(freePath);\n                        break;\n                    } else {\n                        break;\n                    }\n                }\n                await migration(freePath)\n            }    \n        }\n        return;\n    },\n\n    migrations: {\n        \"0.4.7\": async (path, isPatreon = false) => {\n            let db047 = await patreon.db047(path);\n            await sortDatabase(db047, isPatreon)\n            foundry.utils.mergeObject(aaDatabase, db047);\n        },\n        \"0.4.8\": async (path, isPatreon = false) => {\n            let db048 = await patreon.db048(path);\n            await sortDatabase(db048, isPatreon)\n            foundry.utils.mergeObject(aaDatabase, db048);\n        },\n        \"0.4.9\": async (path, isPatreon = false) => {\n            let db049 = await patreon.db049(path);\n            await sortDatabase(db049, isPatreon)\n            foundry.utils.mergeObject(aaDatabase, db049);\n        },\n        \"0.5.0\": async (path, isPatreon = false) => {\n            let db050 = await patreon.db050(path);\n            await sortDatabase(db050, isPatreon)\n            foundry.utils.mergeObject(aaDatabase, db050);\n        },\n        \"0.5.1\": async (path, isPatreon = false) => {\n            let db051 = await patreon.db051(path);\n            await sortDatabase(db051, isPatreon)\n            foundry.utils.mergeObject(aaDatabase, db051);\n        },\n        \"0.5.2\": async (path, isPatreon = false) => {\n            let db052 = await patreon.db052(path);\n            await sortDatabase(db052, isPatreon)\n            foundry.utils.mergeObject(aaDatabase, db052);\n        },\n        \"0.5.3\": async (path, isPatreon = false) => {\n            let db053 = await patreon.db053(path);\n            await sortDatabase(db053, isPatreon)\n            foundry.utils.mergeObject(aaDatabase, db053);\n        },\n        \"0.5.4\": async (path, isPatreon = false) => {\n            let db054 = await patreon.db054(path);\n            await sortDatabase(db054, isPatreon)\n            foundry.utils.mergeObject(aaDatabase, db054);\n        },\n    }\n}\n","export function debug(...args) {\n    if (game.settings.get(\"autoanimations\", \"debug\")) {\n        console.log(`DEBUG | Automated Animations |`, ...args);\n    }\n}\n\n// Credit to Wasp for these functions\nexport function custom_notify(message, consoleLog = false) {\n    message = `Automated Animations | ${message}`;\n    if (consoleLog) {\n        console.log(`%c${message.replace(\"<br>\", \"\\n\")}`, 'color: orange');\n    } else {\n        ui.notifications.notify(message);\n    }\n}\n\nexport function custom_warning(warning, notify = false, ...args) {\n    warning = `Automated Animations | ${warning}`;\n    if (notify) {\n        ui.notifications.warn(warning);\n    }\n    console.warn(warning.replace(\"<br>\", \"\\n\"), ...args);\n}\n\nexport function custom_error(error, notify = true) {\n    error = `Automated Animations | ${error}`;\n    if (notify) {\n        ui.notifications.error(error);\n    }\n    return new Error(error.replace(\"<br>\", \"\\n\"));\n}\n\nexport function howToDelete(type) {\n    if (game.settings.get(\"autoanimations\", \"noTips\")) { return; }\n    let disableTips = \"You can disabled these tips in the Automated Animations module settings\"\n    switch (type) {\n        case 'overheadtile':\n            custom_notify(`This is an OVERHEAD Tile. Use the Tile Foreground Layer to remove the Animation. ${disableTips}`)\n            break;\n        case 'groundtile':\n            custom_notify(`This is an GROUND Tile. Use the Tile Layer to remove the Animation. ${disableTips}`)\n            break;\n        case 'sequencerground':\n            custom_notify(`This is a SEQUENCER Persistent Effect. Use the Sequencer Effect Manager to remove the Animation. ${disableTips}`)\n            break\n    }\n}\n","import { initializeJB2APatreonDB }  from \"./jb2a-patreon-database\";\nimport { initializeJB2AFreeDB }     from \"./jb2a-free-database\";\nimport { JB2APATREONDB }            from \"./jb2a-patreon-database\";\nimport { JB2AFREEDB }               from \"./jb2a-free-database\";\nimport { dbMerge }                  from \"./database-merge/dbMerge\";\nimport { custom_error }             from \"../constants/constants\";\n\nexport let aaDatabase;\n\nexport async function initializeAADB() {\n\n    const freePath = \"modules/JB2A_DnD5e\";\n    const patreonPath = \"modules/jb2a_patreon\";\n\n    let s3Location = game.settings.get('autoanimations', 'jb2aLocation');\n    const jb2aFreeFound = game.modules.get(\"JB2A_DnD5e\");\n    const jb2aPatreonFound = game.modules.get(\"jb2a_patreon\");\n\n    if (game.user.isGM && (!jb2aFreeFound && !jb2aPatreonFound)) {\n        if (s3Location && (s3Location.includes('jb2a_patreon') || s3Location.includes('JB2A_DnD5e'))) { } else {\n            ui.notifications.error(game.i18n.format(\"autoanimations.settings.error\"));\n        }\n    }\n\n    const freeVersion = jb2aFreeFound?.version ?? \"\";\n    const patreonVersion = jb2aPatreonFound?.version ?? \"\";\n\n    // To-Do: handle S3 better...? Needs to be able to check free vs patreon versions\n    if (s3Location) {\n            // If the S3 Location includes Patreon, register Patreon Content\n        if (s3Location.includes('patreon')) {\n            await initializeJB2APatreonDB(s3Location);\n            aaDatabase = JB2APATREONDB;\n            await dbMerge.handle(\"\", patreonVersion, s3Location);\n            // Otherwise if the S3 Location includes the Free path intialize that DB and merge accordingly\n        } else if (s3Location.includes('JB2A_DnD5e')) {\n            await initializeJB2AFreeDB(s3Location)\n            aaDatabase = JB2AFREEDB;\n            await dbMerge.handle(freeVersion, \"\", s3Location)\n            // If the S3 Location contains neither Free nor Patreon Path, register the Patreon Path and throw error\n        } else {\n            await initializeJB2APatreonDB(s3Location);\n            aaDatabase = JB2APATREONDB;\n            custom_error(\"You have specified an External path (S3 Bucket or other) incorrectly. Check your Automated Animations module settings\", true)\n        }\n    // If neither Patreon nor Free JB2A is installed, register the base Free DB and throw error\n    } else if (!patreonVersion && !freeVersion) {\n        await initializeJB2AFreeDB(freePath)\n        custom_error(\"You do not have a JB2A module installed, Automated Animation Select menus will NOT work\", true)\n    } else {\n        // If Patreon JB2A is found, register that base DB\n        if (jb2aPatreonFound) {\n            await initializeJB2APatreonDB(patreonPath);\n            aaDatabase = JB2APATREONDB;\n        // If Free is found and Patroen is NOT, register the base Free DB\n        } else {\n            await initializeJB2AFreeDB(freePath)\n            aaDatabase = JB2AFREEDB;\n        }\n        // Run the versioned DB merges\n        await dbMerge.handle(freeVersion, patreonVersion);\n    }\n\n    // Register aaDatabase with Sequencer\n    Sequencer.Database.registerEntries(\"autoanimations\", aaDatabase, true);\n    console.log('%cAutomated Animations Database has been compiled and registered', 'color: green', {aaDatabase})\n    // Let Automated Animations know it is ready to compiled the select menu options\n    Hooks.callAll('aa.ready', aaDatabase)\n}\n\nexport async function sortDatabase(database, isPatreon = false) {\n\n    if (isPatreon) { \n        return await removeFreeMarker(database);\n    } else {\n        await removePatreonContent()\n    }\n    //await clearTypes();\n    //await clearAnimations();\n    //await clearVariants();\n    //await clearColor();\n\n    return database;\n    \n    async function removePatreonContent() {\n        let sections = Object.keys(database);\n        for (let section of sections) {\n            if (section === \"_templates\") { continue }\n            let freeOptions = database[section]._free;\n            if (!freeOptions) { continue }\n            await removePatreonTypes(freeOptions, section)\n            let types = Object.keys(database[section])\n            for (let type of types) {\n                if (type === \"_template\") { continue }\n                let freeOptions = database[section][type]._free;\n                if (!freeOptions) { continue }\n                await removePatreonAnimations(freeOptions, section, type)\n                let animations = Object.keys(database[section][type]);\n                for (let animation of animations) {\n                    let freeOptions = database[section][type][animation]._free;\n                    if (!freeOptions) { continue }\n                    await removePatreonVariants(freeOptions, section, type, animation)\n                    let variants = Object.keys(database[section][type][animation]);\n                    for (let variant of variants) {\n                        let freeOptions = database[section][type][animation][variant]._free;\n                        if (!freeOptions) { continue }\n                        await removePatreonColors(freeOptions, section, type, animation, variant)\n                    }\n                }\n            }\n        }\n    }\n\n    async function removePatreonTypes(freeOptions, section) {\n        let types = Object.keys(database[section]);\n        for (let i = 0; i < types.length; i++) {\n            let typeFound = freeOptions.indexOf(types[i])\n            if (typeFound === -1) {\n                delete database[section][types[i]]\n            }\n        }\n    }\n    async function removePatreonAnimations(freeOptions, section, type) {\n        let animations = Object.keys(database[section][type]);\n        for (let i = 0; i < animations.length; i++) {\n            let animationFound = freeOptions.indexOf(animations[i]);\n            if (animationFound === -1) {\n                delete database[section][type][animations[i]]\n            }\n        }\n    }\n    async function removePatreonVariants(freeOptions, section, type, animation) {\n        let variants = Object.keys(database[section][type][animation]);\n        for (let i = 0; i < variants.length; i++) {\n            let variantFound = freeOptions.indexOf(variants[i]);\n            if (variantFound === -1) {\n                delete database[section][type][animation][variants[i]]\n            }\n        }\n    }\n    async function removePatreonColors(freeOptions, section, type, animation, variant) {\n        let colors = Object.keys(database[section][type][animation][variant]);\n        for (let i = 0; i < colors.length; i++) {\n            let colorFound = freeOptions.indexOf(colors[i]);\n            if (colorFound === -1) {\n                delete database[section][type][animation][variant][colors[i]]\n            }\n        }\n    }\n\n    /*\n    async function clearAnimations() {\n        let sections = Object.keys(database);\n        for (let section of sections) {\n            if (section === \"_templates\") { continue }\n            let types = Object.keys(database[section])\n            for (let type of types) {\n                if (type === \"_template\") { continue }\n                let freeOptions = database[section][type]._free;\n                if (!freeOptions) { continue }\n                await removePatreonAnimation(freeOptions, section, type)\n            }\n        }\n    }\n    */\n    /*\n    async function clearVariants() {\n        let sections = Object.keys(database);\n        for (let section of sections) {\n            if (section === \"_templates\") { continue }\n            let types = Object.keys(database[section])\n            for (let type of types) {\n                if (type === \"_template\") { continue }\n                let animations = Object.keys(database[section][type]);\n                for (let animation of animations) {\n                    let freeOptions = database[section][type][animation]._free;\n                    if (!freeOptions) { continue }\n                    await removePatreonVariant(freeOptions, section, type, animation)\n                }\n            }\n        }\n    }\n    */\n    /*\n    async function clearColor() {\n        let sections = Object.keys(database);\n        for (let section of sections) {\n            if (section === \"_templates\") { continue }\n            let types = Object.keys(database[section])\n            for (let type of types) {\n                if (type === \"_template\") { continue }\n                let animations = Object.keys(database[section][type]);\n                for (let animation of animations) {\n                    let variants = Object.keys(database[section][type][animation]);\n                    for (let variant of variants) {\n                        let freeOptions = database[section][type][animation][variant]._free;\n                        if (!freeOptions) { continue }\n                        await removePatreonColor(freeOptions, section, type, animation, variant)\n                    }\n                }\n            }\n        }\n    }\n    */\n\n}\n\nasync function removeFreeMarker(database) {\n\n    await deleteFreeMarker();\n    /*\n    await clearTypes();\n    await clearAnimations();\n    await clearVariants();\n    await clearColor();\n    */\n    return database;\n    \n    async function deleteFreeMarker() {\n        let sections = Object.keys(database);\n        for (let section of sections) {\n            if (section === \"_templates\") { continue }\n            await removePatreonType(section)\n            let types = Object.keys(database[section])\n            for (let type of types) {\n                if (type === \"_template\") { continue }\n                await removePatreonAnimation(section, type)\n                let animations = Object.keys(database[section][type]);\n                for (let animation of animations) {\n                    await removePatreonVariant(section, type, animation)\n                    let variants = Object.keys(database[section][type][animation]);\n                    for (let variant of variants) {\n                        await removePatreonColor(section, type, animation, variant)\n                    }\n                }\n            }\n        }\n    }\n\n    async function removePatreonType(section) {\n        let types = Object.keys(database[section]);\n        for (let i = 0; i < types.length; i++) {\n            delete database[section]._free\n        }\n    }\n    async function removePatreonAnimation(section, type) {\n        let animations = Object.keys(database[section][type]);\n        for (let i = 0; i < animations.length; i++) {\n            delete database[section][type]._free\n        }\n    }\n    async function removePatreonVariant(section, type, animation) {\n        let variants = Object.keys(database[section][type][animation]);\n        for (let i = 0; i < variants.length; i++) {\n            delete database[section][type][animation]._free\n        }\n    }\n    async function removePatreonColor(section, type, animation, variant) {\n        let colors = Object.keys(database[section][type][animation][variant]);\n        for (let i = 0; i < colors.length; i++) {\n            delete database[section][type][animation][variant]._free\n        }\n    }\n    /*\n    async function clearAnimations() {\n        let sections = Object.keys(database);\n        for (let section of sections) {\n            if (section === \"_templates\") { continue }\n            let types = Object.keys(database[section])\n            for (let type of types) {\n                if (type === \"_template\") { continue }\n                await removePatreonAnimation(section, type)\n            }\n        }\n    }\n    async function clearVariants() {\n        let sections = Object.keys(database);\n        for (let section of sections) {\n            if (section === \"_templates\") { continue }\n            let types = Object.keys(database[section])\n            for (let type of types) {\n                if (type === \"_template\") { continue }\n                let animations = Object.keys(database[section][type]);\n                for (let animation of animations) {\n                    await removePatreonVariant(section, type, animation)\n                }\n            }\n        }\n    }\n    async function clearColor() {\n        let sections = Object.keys(database);\n        for (let section of sections) {\n            if (section === \"_templates\") { continue }\n            let types = Object.keys(database[section])\n            for (let type of types) {\n                if (type === \"_template\") { continue }\n                let animations = Object.keys(database[section][type]);\n                for (let animation of animations) {\n                    let variants = Object.keys(database[section][type][animation]);\n                    for (let variant of variants) {\n                        await removePatreonColor(section, type, animation, variant)\n                    }\n                }\n            }\n        }\n    }\n    */\n}\n","/**\n * Provides strictly readonly collections at runtime including {@link ReadonlyMap} and {@link ReadonlySet}.\n *\n * The protection level provided is for accidental modification. A determined caller could still mutate via\n * `Map.prototype.set.call(frozenMap, ...)` or `Set.prototype.add.call(frozenSet, ...)`.\n */\nclass Frozen\n{\n   /**\n    * @hideconstructor\n    */\n   constructor()\n   {\n      throw new Error('Frozen constructor: This is a static class and should not be constructed.');\n   }\n\n   /**\n    * @param {Iterable<[K, V]>} [entries] - Target Map or iterable of [key, value] pairs.\n    *\n    * @returns {ReadonlyMap<K, V>} A strictly ReadonlyMap.\n    *\n    * @template K, V\n    */\n   static Map(entries)\n   {\n      const result = new Map(entries);\n\n      result.set = void 0;\n      result.delete = void 0;\n      result.clear = void 0;\n\n      return /** @type {ReadonlyMap<K, V>} */ result;\n   }\n\n   /**\n    * @param {Iterable<T>} [data] - Target Set or iterable list.\n    *\n    * @returns {ReadonlySet<T>} A strictly ReadonlySet.\n    *\n    * @template T\n    */\n   static Set(data)\n   {\n      const result = new Set(data);\n\n      result.add = void 0;\n      result.delete = void 0;\n      result.clear = void 0;\n\n      return /** @type {ReadonlySet<T>} */ result;\n   }\n}\n\nObject.freeze(Frozen);\n\n/**\r\n * Provides various utilities for generating hash codes for strings and UUIDs.\r\n *\r\n * This class should not be constructed as it only contains static methods.\r\n */\r\nclass Hashing\r\n{\r\n   static #regexUuidv = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\r\n\r\n   /**\r\n    * @hideconstructor\r\n    */\r\n   constructor()\r\n   {\r\n      throw new Error('Hashing constructor: This is a static class and should not be constructed.');\r\n   }\r\n\r\n   /**\r\n    * Provides a solid string hashing algorithm.\r\n    *\r\n    * Sourced from: https://stackoverflow.com/a/52171480\r\n    *\r\n    * @param {string}   str - String to hash.\r\n    *\r\n    * @param {number}   [seed=0] - A seed value altering the hash.\r\n    *\r\n    * @returns {number} Hash code.\r\n    */\r\n   static hashCode(str, seed = 0)\r\n   {\r\n      if (typeof str !== 'string') { return 0; }\r\n\r\n      let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\r\n\r\n      for (let ch, i = 0; i < str.length; i++)\r\n      {\r\n         ch = str.charCodeAt(i);\r\n         h1 = Math.imul(h1 ^ ch, 2654435761);\r\n         h2 = Math.imul(h2 ^ ch, 1597334677);\r\n      }\r\n\r\n      h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);\r\n      h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);\r\n\r\n      return 4294967296 * (2097151 & h2) + (h1 >>> 0);\r\n   }\r\n\r\n   /**\r\n    * Validates that the given string is formatted as a UUIDv4 string.\r\n    *\r\n    * @param {unknown}   uuid - UUID string to test.\r\n    *\r\n    * @returns {uuid is string} Is UUIDv4 string.\r\n    */\r\n   static isUuidv4(uuid)\r\n   {\r\n      return typeof uuid === 'string' && this.#regexUuidv.test(uuid);\r\n   }\r\n\r\n   /**\r\n    * Generates a UUID v4 compliant ID. Please use a complete UUID generation package for guaranteed compliance.\r\n    *\r\n    * This code is an evolution of the following Gist.\r\n    * https://gist.github.com/jed/982883\r\n    *\r\n    * There is a public domain / free copy license attached to it that is not a standard OSS license...\r\n    * https://gist.github.com/jed/982883#file-license-txt\r\n    *\r\n    * @returns {string} UUIDv4\r\n    */\r\n   static uuidv4()\r\n   {\r\n      return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>\r\n       (c ^ (globalThis.crypto ?? globalThis.msCrypto).getRandomValues(\r\n        new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\r\n   }\r\n}\n\n/**\r\n * Provides utility functions for strings.\r\n *\r\n * This class should not be constructed as it only contains static methods.\r\n */\r\nclass Strings\r\n{\r\n   /**\r\n    * @hideconstructor\r\n    */\r\n   constructor()\r\n   {\r\n      throw new Error('Strings constructor: This is a static class and should not be constructed.');\r\n   }\r\n\r\n   /**\r\n    * Escape a given input string prefacing special characters with backslashes for use in a regular expression.\r\n    *\r\n    * @param {string}   string - An un-escaped input string.\r\n    *\r\n    * @returns {string} The escaped string suitable for use in a regular expression.\r\n    */\r\n   static escape(string)\r\n   {\r\n      return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n   }\r\n\r\n   /**\r\n    * Normalizes a string.\r\n    *\r\n    * @param {string}   string - A string to normalize for comparisons.\r\n    *\r\n    * @returns {string} Cleaned string.\r\n    *\r\n    * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\r\n    */\r\n   static normalize(string)\r\n   {\r\n      return string.trim().normalize('NFD').replace(/[\\x00-\\x1F]/gm, ''); // eslint-disable-line no-control-regex\r\n   }\r\n}\n\n/**\r\n * Provides timing related higher-order functions.\r\n *\r\n * This class should not be constructed as it only contains static methods.\r\n */\r\nclass Timing\r\n{\r\n   /**\r\n    * @hideconstructor\r\n    */\r\n   constructor()\r\n   {\r\n      throw new Error('Timing constructor: This is a static class and should not be constructed.');\r\n   }\r\n\r\n   /**\r\n    * Wraps a callback in a debounced timeout. Delay execution of the callback function until the function has not been\r\n    * called for the given delay in milliseconds.\r\n    *\r\n    * @template Args\r\n    *\r\n    * @param {(...args: Args[]) => void} callback - A function to execute once the debounced threshold has been passed.\r\n    *\r\n    * @param {number}   delay - An amount of time in milliseconds to delay.\r\n    *\r\n    * @returns {(...args: Args[]) => void} A wrapped function that can be called to debounce execution.\r\n    *\r\n    * @example\r\n    * /**\r\n    *  * Debounce the update invocation by 500ms.\r\n    *  *\\/\r\n    * const updateDebounced = Timing.debounce(() => doc.update(), 500);\r\n    *\r\n    * // Use the function like:\r\n    * updateDebounced();\r\n    *\r\n    * @example\r\n    * /**\r\n    *  * Debounce the update invocation by 500ms.\r\n    *  *\r\n    *  * \\@param {string} value - A value to update.\r\n    *  *\\/\r\n    * const updateDebounced = Timing.debounce((value) => doc.update(value), 500);\r\n    *\r\n    * // Use the function like:\r\n    * updateDebounced('new value');\r\n    */\r\n   static debounce(callback, delay)\r\n   {\r\n      if (typeof callback !== 'function')\r\n      {\r\n         throw new TypeError(`'callback' must be a function.`);\r\n      }\r\n\r\n      if (!Number.isInteger(delay) || delay < 0)\r\n      {\r\n         throw new TypeError(`'delay' must be a positive integer representing milliseconds.`);\r\n      }\r\n\r\n      let timeoutId;\r\n\r\n      return function(...args)\r\n      {\r\n         globalThis.clearTimeout(timeoutId);\r\n         timeoutId = globalThis.setTimeout(() => { callback.apply(this, args); }, delay);\r\n      };\r\n   }\r\n\r\n   /**\r\n    * Creates a double click event handler that distinguishes between single and double clicks. Calls the `single`\r\n    * callback on a single click and the `double` callback on a double click. The default double click delay to invoke\r\n    * the `double` callback is 400 milliseconds.\r\n    *\r\n    * @param {object}   opts - Optional parameters.\r\n    *\r\n    * @param {(event: Event) => void} [opts.single] - Single click callback.\r\n    *\r\n    * @param {(event: Event) => void} [opts.double] - Double click callback.\r\n    *\r\n    * @param {number}   [opts.delay=400] - Double click delay.\r\n    *\r\n    * @returns {(event: Event) => void} The gated double-click handler.\r\n    *\r\n    * @example\r\n    * // Given a button element.\r\n    * button.addEventListener('click', Timing.doubleClick({\r\n    *    single: (event) => console.log('Single click: ', event),\r\n    *    double: (event) => console.log('Double click: ', event)\r\n    * });\r\n    */\r\n   static doubleClick({ single, double, delay = 400 })\r\n   {\r\n      if (single !== void 0 && typeof single !== 'function') { throw new TypeError(`'single' must be a function.`); }\r\n      if (double !== void 0 && typeof double !== 'function') { throw new TypeError(`'double' must be a function.`); }\r\n\r\n      if (!Number.isInteger(delay) || delay < 0)\r\n      {\r\n         throw new TypeError(`'delay' must be a positive integer representing milliseconds.`);\r\n      }\r\n\r\n      let clicks = 0;\r\n      let timeoutId;\r\n\r\n      return (event) =>\r\n      {\r\n         globalThis.clearTimeout(timeoutId);\r\n         clicks++;\r\n\r\n         if (clicks === 1)\r\n         {\r\n            timeoutId = globalThis.setTimeout(() =>\r\n            {\r\n               if (typeof single === 'function') { single(event); }\r\n               clicks = 0;\r\n            }, delay);\r\n         }\r\n         else\r\n         {\r\n            if (typeof double === 'function') { double(event); }\r\n            clicks = 0;\r\n         }\r\n      };\r\n   }\r\n}\n\nexport { Frozen, Hashing, Strings, Timing };\n//# sourceMappingURL=index.js.map\n","export async function version01(flags) {\n        const oldFlags = flags || {};\n        const type = oldFlags.animType;\n\n        const data = {\n            killAnim: oldFlags.killAnim ?? false,\n            below: oldFlags.animLevel ?? false,\n            override: oldFlags.override ?? false,\n            //animType: 'function here',\n            //animation: 'animation function here',\n            //color: 'color funciton here',\n            //'options.repeat': type === 't8' ? oldFlags.templates?.tempLoop || 1 : oldFlags.options?.loops || 1,\n            //'options.delay': type === 't8' ? oldFlags.templates?.loopDelay || 250 : oldFlags.options?.loopDelay || 250,\n            //'options.scale': oldFlags.options?.scale ?? 1,\n            //enableCustom: 'function here',\n            //customPath: 'function here',\n            targetToken: oldFlags.targetToken?.enable ? oldFlags.targetToken : { enable: false },\n            sourceToken: oldFlags.sourceToken?.enable ? oldFlags.sourceToken : { enable: false },\n            allSounds: oldFlags.allSounds ?? {},\n            autoOverride: oldFlags.options?.overrideAuto ? await overrideAuto() : { enable: false },\n            version: 1,\n        }\n\n        if (oldFlags.override) {\n\n            switch (type) {\n                case \"t2\":\n                    data.animType = 'melee';\n                    data.animation = replaceName(oldFlags.animName);\n                    data.color = replaceName(oldFlags.color);\n                    data.meleeSwitch = oldFlags.meleeSwitch?.switchType === \"custom\" ? await rangeSwitch() : { switchType: oldFlags.meleeSwitch?.switchType ?? 'on' };\n                    data.explosions = oldFlags.explosion ? await explosions() : { enable: false };\n                    data.options = {\n                        meleeType: \"weapon\",\n                        variant: oldFlags.uaStrikeType ?? \"01\",\n                        repeat: oldFlags.options?.loops || 1,\n                        delay: oldFlags.options?.loopDelay || 250,\n                        scale: oldFlags.options?.scale ?? 1,\n                        enableCustom: oldFlags.options?.enableCustom01 ?? false,\n                        customPath: oldFlags.options?.customPath01 ?? \"\",\n                    }\n\n                    break;\n                case \"t3\":\n                    let genericList = ['flurryofblows', 'unarmedstrike'];\n\n                    data.animation = replaceName(oldFlags.animName);\n                    data.animType = \"melee\";\n                    data.color = replaceName(oldFlags.color);\n                    data.meleeSwitch = oldFlags.meleeSwitch?.switchType === \"custom\" ? await rangeSwitch() : { switchType: oldFlags.meleeSwitch?.switchType ?? 'on' };\n                    data.explosions = oldFlags.explosion ? await explosions() : { enable: false };\n                    data.options = {\n                        meleeType: genericList.includes(data.animation) ? \"weapon\" : \"generic\",\n                        variant: oldFlags.uaStrikeType ?? \"01\",\n                        repeat: oldFlags.options?.loops || 1,\n                        delay: oldFlags.options?.loopDelay || 250,\n                        scale: oldFlags.options?.scale ?? 1,\n                        enableCustom: oldFlags.options?.enableCustom01 ?? false,\n                        customPath: oldFlags.options?.customPath01 ?? \"\",\n                    }\n\n                    break;\n                case \"t4\":\n                    data.animType = 'range';\n                    data.animation = replaceName(oldFlags.animName);\n                    data.color = replaceName(oldFlags.color);\n                    data.explosions = oldFlags.explosion ? await explosions() : { enable: false };\n                    data.options = {\n                        rangeType: 'weapon',\n                        variant: t4VariantSwitch(replaceName(oldFlags.animName)),\n                        repeat: oldFlags.options?.loops || 1,\n                        delay: oldFlags.options?.loopDelay || 250,\n                    }\n\n                    function t4VariantSwitch(name) {\n                        switch (name) {\n                            case 'bolt':\n                            case 'bullet':\n                            case 'arrow':\n                                return oldFlags.rangedOptions?.rangeDmgType ?? \"01\";\n                            case 'lasersword':\n                            case 'dagger':\n                            case 'handaxe':\n                            case 'chakram':\n                                return oldFlags.dtvar ?? \"01\";\n                            default:\n                                return \"01\"\n                        }\n                    }\n\n                    break;\n                case \"t5\":\n                    data.animType = 'static';\n                    data.animation = replaceName(oldFlags.animName);\n                    data.color = replaceName(oldFlags.color);\n                    data.explosions = oldFlags.explosion ? await explosions() : { enable: false };\n                    data.options = {\n                        staticType: 'target',\n                        staticOptions: 'creature',\n                        variant: \"01\",\n                        repeat: oldFlags.options?.loops || 1,\n                        delay: oldFlags.options?.loopDelay || 250,\n                        scale: oldFlags.options?.scale ?? 1,\n                        enableCustom: oldFlags.options?.enableCustom01 ?? false,\n                        customPath: oldFlags.options?.customPath01 ?? \"\",\n                    }\n\n                    break;\n                case \"t6\":\n                    data.animType = 'range';\n                    data.animation = replaceName(oldFlags.animName);\n                    data.color = replaceName(oldFlags.color);\n                    data.explosions = oldFlags.explosion ? await explosions() : { enable: false };\n                    data.options = {\n                        rangeType: 'spell',\n                        variant: oldFlags.spellVar ?? \"01\",\n                        repeat: oldFlags.options?.loops || 1,\n                        delay: oldFlags.options?.loopDelay || 250,\n                    }\n\n                    break;\n                case \"t7\":\n                    data.animType = 'static';\n                    data.animation = replaceName(oldFlags.animName);\n                    data.color = replaceName(oldFlags.color);\n                    data.explosions = oldFlags.explosion ? await explosions() : { enable: false };\n                    data.options = {\n                        staticType: \"targetDefault\",\n                        staticOptions: 'staticSpells',\n                        variant: oldFlags.spellVar ?? \"01\",\n                        repeat: oldFlags.options?.loops || 1,\n                        delay: oldFlags.options?.loopDelay || 250,\n                        scale: oldFlags.options?.scale ?? 1,\n                        enableCustom: oldFlags.options?.enableCustom01 ?? false,\n                        customPath: oldFlags.options?.customPath01 ?? \"\",\n                    }\n\n                    break;\n                case \"t8\":\n                    const tempAnimVar = await templateAnimation()\n                    data.animType = 'template';\n                    data.animation = tempAnimVar.name;\n                    data.color = replaceName(oldFlags.templates?.tempColor);\n                    data.options = {\n                        tempType: oldFlags.templates?.tempType,\n                        variant: tempAnimVar.variant,\n                        removeTemplate: oldFlags.templates?.removeTemplate ?? false,\n                        enableCustom: oldFlags.templates?.customAnim ?? false,\n                        customPath: oldFlags.templates?.customPath ?? \"\",\n                        persistent: oldFlags.templates?.persistent ?? false,\n                        persistType: (oldFlags.templates?.persistent && oldFlags.templates?.overhead) ? 'overheadtile' : 'sequencerground',\n                        opacity: oldFlags.templates?.opacity ?? 0.75,\n                        overhead: oldFlags.templates?.overhead ?? false,\n                        occlusionMode: oldFlags.templates?.occlusionMode ?? \"03\",\n                        occlusionAlpha: oldFlags.templates?.occlusionAlpha ?? 0.75,\n                        repeat: oldFlags.templates?.tempLoop || 1,\n                        delay: oldFlags.templates?.loopDelay || 250,\n                    }\n\n                    break;\n                case \"t9\":\n                case \"t10\":\n                    data.animType = 'static';\n                    data.animation = replaceName(oldFlags.explodeVariant);\n                    data.color = replaceName(oldFlags.explodeColor);\n                    data.explosions = { enable: false };\n                    data.options = {\n                        staticType: type === 't9' ? 'target' : 'source',\n                        staticOptions: 'explosion',\n                        variant: oldFlags.options?.variant ?? \"01\",\n                        repeat: oldFlags.explodeLoop || 1,\n                        delay: oldFlags.explodeDelay || 250,\n                        scale: oldFlags.options?.scale ?? 1,\n                        enableCustom: oldFlags.options?.enableCustomExplosion ?? false,\n                        customPath: oldFlags.options?.customExplosion ?? \"\",\n                    }\n\n                    break;\n                case \"t11\":\n                    data.animType = 'aura';\n                    data.animation = replaceName(oldFlags.animName);\n                    data.color = replaceName(oldFlags.color);\n                    data.options = {\n                        variant: \"01\",\n                        enableCustom: oldFlags.options?.enableCustom01 ?? false,\n                        customPath: oldFlags.options?.customPath01 ?? \"\",\n                        auraRadius: oldFlags.selfRadius ?? 3.5,\n                        opacity: oldFlags.auraOpacity ?? 0.75,\n                        ignoreTarget: oldFlags.ignoreTarget ?? false,\n                    }\n\n                    break;\n                case \"t12\":\n                    data.animType = 'preset';\n                    data.animation = \"teleportation\";\n                    data.color = replaceName(oldFlags.color);\n                    data.options = {\n                        name: replaceName(oldFlags.animName),\n                        variant: \"01\",\n                        teleDist: oldFlags.teleDist ?? 30,\n                        scale: oldFlags.options?.scale ?? 1,\n                        hideTemplate: oldFlags.options?.hideTemplate ?? false,\n                        enableCustom: oldFlags.options?.enableCustom01 ?? false,\n                        customPath: oldFlags.options?.customPath01 ?? \"\",\n                    }\n\n                    break;\n                case \"t13\":\n                    const presetName = replaceName(oldFlags.animName);\n                    data.animType = 'preset';\n                    data.animation = presetName;\n                    data.color = replaceName(oldFlags.color);\n                    switch (presetName) {\n                        case 'shieldspell':\n                            data.options = {\n                                variant: oldFlags.spellVar ?? \"01\",\n                                shieldVar: oldFlags.shieldVar ?? 'outro_explode',\n                            }\n                            break;\n                        case 'bardicinspiration':\n                            data.bards = oldFlags.bards;\n                            break;\n                        case 'huntersmark':\n                            data.options = {\n                                variant: replaceName(oldFlags.hmAnim),\n                                persistent: oldFlags.ctaOption ?? false,\n                            }\n                            break;\n                        case 'sneakattack':\n                            data.options = {\n                                variant: \"01\",\n                            }\n                            break;\n                        case 'bless':\n                            data.options = {\n                                variant: \"01\",\n                                persistent: oldFlags.options.addCTA ?? false,\n                            }\n                            break;\n                    }\n\n                    break;\n            }\n        }\n\n        async function overrideAuto() {\n            const auto = oldFlags.options ?? {};\n            const data = {\n                enable: true,\n                variant: auto.autoVariant ?? \"01\",\n                color: auto.autoColor ?? \"\",\n                repeat: auto.autoRepeat ?? 1,\n                endEffect: auto.endEffect ?? \"outro_explode\",\n                delay: auto.autoDelay ?? 250,\n                scale: auto.autoScale ?? 1,\n                fireball: auto.autoFireball ?? {},\n            }\n            return data;\n        }\n        /*\n        if (oldFlags.options?.overrideAuto) {\n            const auto = oldFlags.options ?? {};\n            data.autoOverride = {\n                enable: true,\n                variant: auto.autoVariant ?? \"01\",\n                color: auto.autoColor ?? \"\",\n                repeat: auto.autoRepeat ?? 1,\n                delay: auto.autoDelay ?? 250,\n                scale: auto.autoScale ?? 1,\n                fireball: auto.autoFireball ?? {},\n            }\n        }\n        */\n        async function explosions() {\n            //if (!oldFlags.explosion) { return; }\n            const explosion = {\n                enable: true,\n                below: oldFlags.exAnimLevel ?? false,\n                radius: oldFlags.explodeRadius ?? 2,\n                delay: oldFlags.explodeDelay ?? 500,\n                animation: replaceName(oldFlags.explodeVariant) ?? \"\",\n                variant: \"01\",\n                color: replaceName(oldFlags.explodeColor),\n                enableCustom: oldFlags.options?.enableCustomExplosion ?? false,\n                customPath: oldFlags.options?.customExplosion ?? \"\",\n            }\n            return explosion;\n        }\n\n        async function rangeSwitch() {\n            const data = {\n                animation: oldFlags.meleeSwitch?.animName ?? \"\",\n                variant: switchVariants(replaceName(oldFlags.animName)),\n                switchType: \"custom\",\n                color: oldFlags.meleeSwitch?.color ?? \"white\",\n                detect: oldFlags.meleeSwitch?.detect ?? \"auto\",\n                range: oldFlags.meleeSwitch?.detect === 'custom' ? oldFlags.meleeSwitch?.range ?? 2 : 2,\n                returning: oldFlags.meleeSwitch?.returning ?? false,\n            }\n\n            function switchVariants(name) {\n                switch (name) {\n                    case 'bolt':\n                    case 'bullet':\n                    case 'arrow':\n                        return oldFlags.meleeSwitch?.rangeDmgType ?? \"01\";\n                    case 'lasersword':\n                    case 'dagger':\n                    case 'handaxe':\n                        return oldFlags.meleeSwitch?.rangeVar ?? \"01\";\n                    default:\n                        return \"01\"\n                }\n            }\n            return data;\n        }\n\n        async function templateAnimation() {\n            switch (oldFlags.templates?.tempType) {\n                case 'cone':\n                    switch (oldFlags.templates?.tempAnim) {\n                        case 'coneofcold':\n                            return { name: 'coneofcold', variant: \"01\" };\n                        case 'burninghands01':\n                            return { name: 'burninghands', variant: '01' };\n                        case 'burninghands02':\n                            return { name: 'burninghands', variant: '02' };\n                        default:\n                            return { name: 'breathweaponcone', variant: oldFlags.templates?.tempAnim };\n                    }\n                case 'ray':\n                    switch (oldFlags.templates?.tempAnim) {\n                        case 'lightningbolt01':\n                            return { name: 'lightningbolt', variant: '01' };\n                        case 'lightningbolt02':\n                            return { name: 'lightningbolt', variant: '02' };\n                        default:\n                            return { name: 'breathweaponline', variant: oldFlags.templates?.tempAnim };\n                    }\n                case \"circle\":\n                    switch (oldFlags.templates?.tempAnim) {\n                        case 'snowflake':\n                            return { name: 'snowflake', variant: '01' };\n                        case 'outpulse01':\n                            return { name: 'outpulse01', variant: '01' };\n                        case 'outpulse02':\n                            return { name: 'outpulse02', variant: '01' };\n                        case 'shatter':\n                            return { name: 'shatter', variant: '01' };\n                        case 'fogcloud':\n                            return { name: 'fogcloud', variant: '01' };\n                        case 'darkness':\n                            return { name: 'darkness', variant: '01' };\n                        case 'calllightning':\n                            return { name: 'calllightning', variant: '01' };\n                        case 'sleetstorm':\n                            return { name: 'sleetstorm', variant: '01' };\n                        case 'cloudofdaggers':\n                            return { name: 'cloudofdaggers', variant: '01' };\n                        case 'cloudofkunais':\n                            return { name: 'cloudofdaggers', variant: '02' };\n                        default:\n                            return { name: 'explosion', variant: '01' }\n                    }\n                case 'rect':\n                    switch (oldFlags.templates?.tempAnim) {\n                        case 'entangle':\n                            return { name: 'entangle', variant: '01' };\n                        case 'thunderwave':\n                            return { name: 'thunderwave', variant: '01' };\n                        default:\n                            return { name: 'web', variant: '01' };\n                    }\n                default:\n                    return {};\n            }\n        }\n\n        function replaceName(name) {\n            if (!name) { return \"\" }\n            const newName = name.replace(/\\s+/g, '').toLowerCase();\n            return newName;\n        }\n        //await item.update({ 'flags.-=autoanimations': null })\n        //await item.update({ 'flags.autoanimations': data })\n        return data;\n}","export async function version02(flags) {\n    /**\n     * allSounds.item.enableAudio --------------> audio.a01.enable\n     * allSounds.item.file ---------------------> audio.a01.file\n     * allSounds.item.delay --------------------> audio.a01.delay\n     * allSounds.item.volume -------------------> audio.a01.volume\n     * \n     * allSounds.explosion.audioExplodeEnabled -> audio.e01.enable\n     * allSounds.explosion.file ----------------> audio.e01.file\n     * allSounds.explosion.delay ---------------> audio.e01.delay\n     * allSounds.explosion.volume --------------> audio.e01.volume\n     * \n     */\n    const v2Flags = flags || {};\n    const allSounds = v2Flags.allSounds || {};\n    v2Flags.audio = {\n        a01: {\n            enable: allSounds.item?.enableAudio ?? false,\n            file: allSounds.item?.file ?? \"\",\n            delay: allSounds.item?.delay ?? 0,\n            volume: allSounds.item?.volume ?? 0.25,\n        },\n        e01: {\n            enable: allSounds.explosion?.audioExplodeEnabled || false,\n            file: allSounds.explosion?.file ?? \"\",\n            delay: allSounds.explosion?.delay ?? 0,\n            volume: allSounds.explosion?.volume ?? 0.25,\n        }\n    }\n    v2Flags.version = 2;\n\n    //await item.update({ 'flags.-=autoanimations': null })\n    //await item.update({ 'flags.autoanimations': v2Flags })\n    //console.warn(`DEBUG | Automated Animations | Version 2 Flag Migration Complete`, v2Flags)\n    return v2Flags;\n}","export async function version03(flags) {\n    const v3Flags = flags || {};\n    if (v3Flags.killAnim) {\n        v3Flags.version = 3;\n        //await item.update({ 'flags.-=autoanimations': null })\n        //await item.update({ 'flags.autoanimations': v3Flags })\n        return v3Flags;\n    }\n    if (v3Flags.override) {\n        if (v3Flags.animType === 'template') {\n            v3Flags.options.scaleX = v3Flags.options.scale || 1;\n            v3Flags.options.scaleY = v3Flags.options.scale || 1;\n        }\n        if (v3Flags.animType === 'preset') {\n            if (v3Flags.animation === 'teleportation') {\n                v3Flags.options.measureType = 'alternating';\n                v3Flags.options.hideFromPlayers = v3Flags.options?.hideTemplate === true ? true : false;\n                v3Flags.options.enableCustom02 = v3Flags.options?.enableCustom ? true : false;\n                v3Flags.options.customPath02 = v3Flags.options?.enableCustom ? v3Flags.options?.customPath : \"\";\n                v3Flags.options.name02 = v3Flags.options?.name ?? \"mistystep\";\n                v3Flags.options.variant02 = \"02\";\n                v3Flags.color02 = v3Flags.color || \"blue\";\n                v3Flags.options.scale02 = v3Flags.options?.scale ?? 1;\n            }\n        }\n        v3Flags.version = 3;\n        //await item.update({ 'flags.-=autoanimations': null })\n        //await item.update({ 'flags.autoanimations': v3Flags })\n        //console.warn(`DEBUG | Automated Animations | Version 3 Flag Migration Complete`, v3Flags)\n        return v3Flags\n    }\n}\n","export async function version04(flags) {\n    const v4Flags = flags || {};\n    const options = v4Flags.options || {}\n    if (v4Flags.killAnim) {\n        v4Flags.version = 4;\n        //await item.update({ 'flags.-=autoanimations': null })\n        //await item.update({ 'flags.autoanimations': v4Flags })\n        return v4Flags;\n    }\n    if (v4Flags.sourceToken?.enable) {\n        await convertExtraFX(v4Flags.sourceToken)\n    }\n    if (v4Flags.sourceToken?.enable) {\n        await convertExtraFX(v4Flags.targetToken)\n    }\n\n    if (v4Flags.override) {\n        const section = v4Flags.animType\n        switch (section) {\n            case 'melee':\n                options.menuType = options.meleeType;\n                if (v4Flags.explosions?.enable) {\n                    await convertExplosion(v4Flags.explosions)\n                }\n                delete options.meleeType;\n                break;\n            case 'range':\n                const genericRange = ['energyconduitsquare', 'energyconduitcircle', 'energybeam', 'heart', 'iceshard', 'musicnote', 'skull', 'energystrand'];\n                if (genericRange.some(el => v4Flags.animation === el)) {\n                    options.menuType = 'generic';\n                    if (v4Flags.animation === \"energyconduitcircle\") {\n                        v4Flags.animation = 'conduit';\n                        options.variant = 'circle';\n                    }\n                    if (v4Flags.animation === \"energyconduitsquare\") {\n                        v4Flags.animation = 'conduit';\n                        options.variant = 'square';\n                    }\n                } else {\n                    options.menuType = options.rangeType;\n                }\n                if (v4Flags.explosions?.enable) {\n                    await convertExplosion(v4Flags.explosions)\n                }\n                delete options.rangeType;\n                break;\n            case 'static':\n                const conditions = ['drop', 'fear', 'heart', 'horror', 'light', 'poison', 'runes', 'shields', 'crackedshield', 'skull', 'snowflakes', 'stun', 'dizzystars'];\n                const creature = ['bite', 'claw'];\n                const energy = ['energyfield', 'dodecahedron', 'shimmer', 'sparkles'];\n                const fire = ['eruption', 'groundcrack', 'fireworks'];\n                const generic = ['boulderimpact', 'explosion', 'impact', 'outpulse01', 'outpulse02', 'vortex', 'whirl'];\n                const ice = ['icespikes', 'snowflake'];\n                const lightning = ['lightningball', 'staticelectricity'];\n                const liquid = ['liquidsplash'];\n                const magicsign = ['magicSign'];\n                const marker = ['marker', 'circleofstars', 'energystrand'];\n                const shieldfx = ['energyfieldtop', 'shieldfiretop', 'shieldicetop', 'shieldearthtop', 'shieldeldritchwebtop'];\n                const tokenborder = ['staticborder', 'spinningborder'];\n                const fireball = ['fireballexplode']\n\n                switch (true) {\n                    case conditions.some(el => v4Flags.animation === el):\n                        options.menuType = 'conditions';\n                        break;\n                    case creature.some(el => v4Flags.animation === el):\n                        options.menuType = 'creature';\n                        break;\n                    case energy.some(el => v4Flags.animation === el):\n                        options.menuType = 'energy';\n                        break;\n                    case fire.some(el => v4Flags.animation === el):\n                        options.menuType = 'fire';\n                        break;\n                    case generic.some(el => v4Flags.animation === el):\n                        options.menuType = 'generic';\n                        if (v4Flags.animation?.includes('outpulse')) {\n                            options.variant = v4Flags.animation === 'outpulse02' ? '02' : '01';\n                            v4Flags.animation = 'outpulse';\n                        }\n                        break;\n                    case ice.some(el => v4Flags.animation === el):\n                        options.menuType = 'ice';\n                        break;\n                    case lightning.some(el => v4Flags.animation === el):\n                        options.menuType = 'lightning';\n                        break;\n                    case liquid.some(el => v4Flags.animation === el):\n                        options.menuType = 'liquid';\n                        v4Flags.animation = 'splash';\n                        break;\n                    case magicsign.some(el => v4Flags.animation === el):\n                        options.menuType = 'magicsign';\n                        break;\n                    case marker.some(el => v4Flags.animation === el):\n                        options.menuType = 'marker';\n                        if (v4Flags.animation === 'circleofstars') { }\n                        else if (v4Flags.animation === 'energystrand') {\n                            v4Flags.animation = 'energystrand'\n                        }\n                        else {\n                            switch (v4Flags.variant) {\n                                case '03':\n                                    v4Flags.animation = 'music';\n                                    v4Flags.variant = '01';\n                                    break;\n                                case 'bubble':\n                                    v4Flags.animation = 'bubble';\n                                    v4Flags.variant = '01';\n                                    break;\n                                case 'energystrand':\n                                    v4Flags.animation = 'energystrands';\n                                    v4Flags.variant = '01'\n                                    break;\n                                default:\n                                    v4Flags.animation = 'standard';\n                                    v4Flags.variant = '01';\n                            }\n                        }\n                        break;\n                    case shieldfx.some(el => v4Flags.animation === el):\n                        options.menuType = 'shieldfx';\n                        switch (v4Flags.animation) {\n                            case 'energyfieldtop':\n                                v4Flags.animation = 'energyfield';\n                                break;\n                            case 'shieldfiretop':\n                                v4Flags.animation = 'fire';\n                                break;\n                            case 'shieldicetop':\n                                v4Flags.animation = 'ice';\n                                break;\n                            case 'shieldearthtop':\n                                v4Flags.animation = 'earth';\n                                break;\n                            case 'shieldeldritchwebtop':\n                                v4Flags.animation = 'eldritchweb';\n                                break;\n                        }\n                        break;\n                    case tokenborder.some(el => v4Flags.animation === el):\n                        options.menuType = 'tokenborder';\n                        if (v4Flags.animation === 'staticborder') {\n                            v4Flags.animation = 'static';\n                        } else {\n                            v4Flags.animation = 'spinning';\n                        }\n                        break;\n                    case fireball.some(el => v4Flags.animation === el):\n                        options.menuType = 'spell';\n                        v4Flags.animation = 'fireball';\n                        options.variant = 'explode';\n                        break;\n                    default:\n                        options.menuType = 'spell';\n                }\n                if (v4Flags.explosions?.enable) {\n                    await convertExplosion(v4Flags.explosions)\n                }\n\n                delete options.staticOptions;\n\n                break;\n            case 'template':\n                options.menuType = options.tempType === 'rect' ? 'square' : options.tempType\n                switch (options.menuType) {\n                    case \"cone\":\n                        if (v4Flags.animation === 'breathweaponcone') {\n                            v4Flags.animation = 'breathweapon';\n                        }\n                        break;\n                    case \"circle\":\n                        const circleTypes = ['dropct', 'fearct', 'heartct', 'horrorct', 'poisonct', 'runesct', 'shieldsct', 'crackedshieldct', 'skullct', 'snowflakesct', 'musicnotect'];\n                        if (circleTypes.some(el => v4Flags.animation === el)) {\n                            v4Flags.animation = v4Flags.animation.replace('ct', '')\n                        }\n                        switch (v4Flags.animation) {\n                            case 'outpulse01':\n                                v4Flags.animation = 'outpulse';\n                                options.variant = '01';\n                                break;\n                            case 'outpulse02':\n                                v4Flags.animation = 'outpulse';\n                                options.variant = '02';\n                                break;\n                            case 'fireballloop':\n                                v4Flags.animation = 'fireball';\n                                options.variant = options.variant === 'nodebris' ? 'nodebris' : 'loop';\n                                break;\n                            case 'fireballexplode':\n                                v4Flags.animation = 'fireball';\n                                options.variant = 'explode';\n                                break;\n                        }\n                        break;\n                    case \"square\":\n                        const squareTypes = ['dropct', 'fearct', 'heartct', 'horrorct', 'poisonct', 'runesct', 'shieldsct', 'crackedshieldct', 'skullct', 'snowflakesct']\n                        if (squareTypes.some(el => v4Flags.animation === el)) {\n                            v4Flags.animation = v4Flags.animation.replace('ct', '')\n                        } else if (v4Flags.animation === 'musicnotest') {\n                            v4Flags.animation = 'musicnote';\n                        }\n                        break;\n                    case \"ray\":\n                        if (v4Flags.animation === 'breathweaponline') {\n                            v4Flags.animation = 'breathweapon';\n                        }\n                        break;\n                }\n                break;\n            case 'aura':\n                switch (v4Flags.animation) {\n                    case \"energystrand\":\n                        options.menuType = 'marker';\n                        break;\n                    case 'dodecahedron':\n                        options.menuType = 'energy';\n                        break;\n                    case 'staticelectricity':\n                        options.menuType = 'lightning';\n                        break;\n                    default:\n                        options.menuType = 'spell';\n                }\n                break;\n            case 'preset':\n                switch (v4Flags.animation) {\n                    case 'teleportation':\n                        options.menuType = 'spell';\n                        options.menuType02 = 'spell';\n                        break;\n                    case \"dualattach\":\n                        switch (options.name) {\n                            case 'energystrand':\n                            case 'energybeam':\n                                options.menuType = 'generic';\n                                break;\n                            default:\n                                options.menuType = 'spell'\n                        }\n                        break;\n                    case 'fireball':\n                        const fire = ['eruption'];\n                        const generic = ['boulderimpact', 'explosion', 'impact', 'outpulse01', 'outpulse02'];\n                        const ice = ['snowflake'];\n                        const liquid = ['liquidsplash'];\n                        const fireball = ['fireballexplode']\n                        const fireSettings = v4Flags.fireball || {};\n                        switch (fireSettings.projectile) {\n                            case 'energystrand':\n                            case 'energybeam':\n                                fireSettings.rangeType = 'generic';\n                                break;\n                            default:\n                                fireSettings.rangeType = 'spell'\n                        }\n                        if (fireSettings.explosion01) {\n                            switch (true) {\n                                case fire.some(el => fireSettings.explosion01 === el):\n                                    fireSettings.ex01Type = 'fire';\n                                    break;\n                                case generic.some(el => fireSettings.explosion01 === el):\n                                    fireSettings.ex01Type = 'generic';\n                                    if (fireSettings.explosion01?.includes('outpulse')) {\n                                        fireSettings.explosion01 = 'outpulse';\n                                        fireSettings.explosion01Variant = fireSettings.explosion01Variant === 'outpulse02' ? '02' : '01';\n                                    }\n                                    break;\n                                case ice.some(el => fireSettings.explosion01 === el):\n                                    fireSettings.ex01Type = 'ice';\n                                    break;\n                                case liquid.some(el => fireSettings.explosion01 === el):\n                                    fireSettings.ex01Type = 'liquid';\n                                    fireSettings.explosion01 = 'splash';\n                                    break;\n                                case fireball.some(el => fireSettings.explosion01 === el):\n                                    fireSettings.ex01Type = 'spell';\n                                    fireSettings.explosion01 = 'fireball';\n                                    fireSettings.explosion01Variant = 'explode';\n                                    break;\n                                default:\n                                    if (fireSettings.explosion01 === 'a1' || !fireSettings.explosion01) {\n                                        fireSettings.ex01Type === ''\n                                    } else {\n                                        fireSettings.ex01Type = 'spell';\n                                    }\n                            }\n                        }\n                        if (fireSettings.explosion02) {\n                            switch (true) {\n                                case fire.some(el => fireSettings.explosion02 === el):\n                                    fireSettings.ex02Type = 'fire';\n                                    break;\n                                case generic.some(el => fireSettings.explosion02 === el):\n                                    fireSettings.ex02Type = 'generic';\n                                    if (fireSettings.explosion02?.includes('outpulse')) {\n                                        fireSettings.explosion02 = 'outpulse';\n                                        fireSettings.explosion02Variant = fireSettings.explosion02Variant === 'outpulse02' ? '02' : '01';\n                                    }\n                                    break;\n                                case ice.some(el => fireSettings.explosion02 === el):\n                                    fireSettings.ex02Type = 'ice';\n                                    break;\n                                case liquid.some(el => fireSettings.explosion02 === el):\n                                    fireSettings.ex02Type = 'liquid';\n                                    fireSettings.explosion02 = 'splash';\n                                    break;\n                                case fireball.some(el => fireSettings.explosion02 === el):\n                                    fireSettings.ex02Type = 'spell';\n                                    fireSettings.explosion02 = 'fireball';\n                                    fireSettings.explosion02Variant = 'explode';\n                                    break;\n                                default:\n                                    if (fireSettings.explosion02 === 'a1' || !fireSettings.explosion02) {\n                                        fireSettings.ex02Type === ''\n                                    } else {\n                                        fireSettings.ex02Type = 'spell';\n                                    }\n                            }\n                        }\n                        break;\n                }\n                break;\n        }\n        async function convertExplosion(flags) {\n            if (flags.enableCustom) { return; } else {\n                const fire = ['eruption'];\n                const generic = ['boulderimpact', 'explosion', 'impact', 'outpulse01', 'outpulse02'];\n                const ice = ['snowflake'];\n                const liquid = ['liquidsplash'];\n                const fireball = ['fireballexplode']\n                switch (true) {\n                    case fire.some(el => flags.animation === el):\n                        flags.menuType = 'fire';\n                        break;\n                    case generic.some(el => flags.animation === el):\n                        flags.menuType = 'generic';\n                        if (flags.animation?.includes('outpulse')) {\n                            flags.animation = 'outpulse';\n                            flags.variant = flags.variant === 'outpulse02' ? '02' : '01';\n                        }\n                        break;\n                    case ice.some(el => flags.animation === el):\n                        flags.menuType = 'ice';\n                        break;\n                    case liquid.some(el => flags.animation === el):\n                        flags.menuType = 'liquid';\n                        flags.animation = 'splash';\n                        break;\n                    case fireball.some(el => flags.animation === el):\n                        flags.menuType = 'spell';\n                        flags.animation = 'fireball';\n                        flags.variant = 'explode';\n                        break;\n                    default:\n                        if (flags.animation === 'a1' || !flags.animation) {\n                            flags.menuType === ''\n                        } else {\n                            flags.menuType = 'spell';\n                        }\n                }\n            }\n            return flags;\n        }\n    }\n    async function convertExtraFX(flags) {\n        const generic = ['explosion', 'impact'];\n        const ice = ['icespikes', 'snowflake'];\n        const fireball = ['fireballexplode']\n\n        switch (true) {\n            case flags.name?.includes('dizzystars'):\n                flags.menuType = 'conditions';\n                break;\n            case flags.name?.includes('eruption'):\n                flags.menuType = 'fire';\n                break;\n            case generic.some(el => flags.name === el):\n                flags.menuType = 'generic';\n                break;\n            case ice.some(el => flags.name === el):\n                flags.menuType = 'ice';\n                break;\n            case flags.name?.includes('liquidsplash'):\n                flags.menuType = 'liquid';\n                flags.name = 'splash';\n                break;\n            case flags.name?.includes('magicSign'):\n                flags.menuType = 'magicsign';\n                switch (flags.color) {\n                    case 'blue':\n                        flags.name = 'abjuration';\n                        break;\n                    case 'yellow':\n                        flags.name = 'conjuration';\n                        break;\n                    default:\n                        flags.name = 'divination';\n                }\n                flags.variant = '01';\n                break;\n            case flags.name?.includes('marker'):\n                flags.menuType = 'marker';\n                if (flags.name === 'circleofstars') { }\n                else if (flags.name === 'energystrand') {\n                    flags.name = 'energystrand'\n                }\n                else {\n                    switch (flags.variant) {\n                        case '03':\n                            flags.name = 'music';\n                            flags.variant = '01';\n                            break;\n                        case 'bubble':\n                            flags.name = 'bubble';\n                            flags.variant = '01';\n                            break;\n                        case 'energystrand':\n                            flags.name = 'energystrands';\n                            flags.variant = '01'\n                            break;\n                        default:\n                            flags.name = 'standard';\n                            flags.variant = '01';\n                    }\n                }\n                break;\n            case fireball.some(el => flags.name === el):\n                flags.menuType = 'spell';\n                flags.name = 'fireball';\n                flags.variant = 'explode';\n                break;\n            default:\n                flags.menuType = 'spell';\n        }\n    }\n    v4Flags.version = 4;\n    //await item.update({ 'flags.-=autoanimations': null })\n    //await item.update({ 'flags.autoanimations': v4Flags })\n    //console.warn(`DEBUG | Automated Animations | Version 3 Flag Migration Complete`, v4Flags)\n    return v4Flags;\n}","import { Hashing } from \"#runtime/util\";\nimport { custom_warning } from \"../../../constants/constants\";\n\nexport async function version05(flags, isActiveEffect) {\n\n    if (!flags) {\n        console.error(\"Automated Animations | Critical A-A Flag Errors found in version 05 merge. Removing A-A flags from item\")\n        await item.update({ 'flags.-=autoanimations': null })\n        return;\n    }\n    const v4Flags = flags || {};\n    //const v5Flags = {};\n\n    if (v4Flags.killAnim && !v4Flags.macro?.enable && !v4Flags.audio?.a01?.enable) {\n        // Item is Disabled, and no Macro or Sound is set to play.\n        const v5Flags = {\n            isEnabled: false,\n            isCustomized: false,\n            fromAmmo: false,\n            version: 5,\n        }\n        custom_warning(\"Item is Disabled, and no Macro or Sound is set to play\")\n        return v5Flags;\n        //await item.update({ 'flags.-=autoanimations': null })\n        //await item.update({ 'flags.autoanimations': v5Flags })\n        return;\n    } else if (!v4Flags.killAnim && !v4Flags.override) {\n        // Item is enabled but not customized, delete flags\n        custom_warning(\"Item is enabled but not customized, delete flags\")\n        return void 0;\n        //await item.update({ 'flags.-=autoanimations': null })\n        //await item.update({ 'flags.autoanimations': v5Flags })\n        return;\n    } else if (v4Flags.override && v4Flags.animType !== \"preset\" && (!v4Flags.options?.enableCustom) && (!v4Flags.animType || !v4Flags.options?.menuType || !v4Flags.animation || !v4Flags.options?.variant || !v4Flags.color)) {\n        // Item is customized but has critical errors in the Animation settings. Delete flags\n        custom_warning(\"Item is customized but has critical errors in the Primary Animation settings. Delete flags\")\n        return void 0;\n        //await item.update({ 'flags.-=autoanimations': null })\n        //return;\n    } else if (v4Flags.autoOverride?.enable) {\n        // Item was set to old Auto-Override, delete flags\n        custom_warning(\"Item was set to old Auto-Override, delete flags\")\n        return void 0;\n        //await item.update({ 'flags.-=autoanimations': null })\n        //return;\n    }  else if (v4Flags.killAnim && (v4Flags.macro?.enable || v4Flags.audio?.a01?.enable)) {\n        // Item is Disabled and either a Macro or Sound is set to play.\n        const v5Flags = {};\n        await convertV6(v4Flags, v5Flags, \"melee\");\n        if (v4Flags.macro?.enable) {\n            v5Flags.macro.playWhen = \"2\"\n        }\n        if (v4Flags.audio?.a01?.enable) {\n            v5Flags.soundOnly.sound = v5Flags.primary.sound;\n        }\n        custom_warning(\"Item was Disabled and either a Macro or Sound is set to play, reorganizing flags\")\n        return v5Flags;\n    } else {\n        const type = v4Flags.animType === \"static\" ? \"ontoken\" : v4Flags.animType === \"template\" ? \"templatefx\" : v4Flags.animType;\n        const v5Flags = {};\n        if (isActiveEffect) {\n            await routeActiveEffect(v4Flags, v5Flags);\n        } else {\n            switch(type) {\n                case \"preset\":\n                    await routePreset(v4Flags, v5Flags);\n                    break;\n                default:\n                    await convertV6(v4Flags, v5Flags, type);\n                    break;\n            }\n        }\n        v5Flags.version = 5;\n        custom_warning(`Automated Animations | Version 5 Flag Migration Complete`, false, v5Flags)\n        return v5Flags;\n    }\n\n    async function convertV6(oldMO, newMO, type) {\n\n        let { animLevel, animType, animation, audio, autoOverride, color, explosions, killAnim,\n            levels3d, macro, meleeSwitch, options, override, preview, sourceToken, targetToken } = oldMO\n\n        newMO.id = Hashing.uuidv4();\n        newMO.isEnabled = true;\n        newMO.isCustomized = true;\n        newMO.fromAmmo = options?.ammo ?? false;\n        //v5Flags.label = name;\n\n        if (type !== \"aura\" && type !== \"templatefx\") {\n            newMO.levels3d = await new3d(oldMO);\n        }\n\n        newMO.macro = macro || {};\n\n        if (type === \"melee\") {\n            newMO.meleeSwitch = compileMeleeSwitch(oldMO);\n        }\n\n        newMO.menu = type;\n\n        newMO.primary = {\n            options: convertOptionsV6(oldMO, type),\n            sound: setSound(audio, \"a01\"),\n            video: {\n                dbSection: setDBSection(type),\n                menuType: options?.menuType,\n                animation,\n                variant: options?.variant,\n                color,\n                enableCustom: options?.enableCustom ?? false,\n                customPath: options?.customPath ?? \"\",\n            },\n        }\n\n        newMO.secondary = await convertExplosionV6(explosions, audio, oldMO)\n\n        const primaryVideo = newMO.primary.video;\n        if (!primaryVideo.menuType || !primaryVideo.animation || !primaryVideo.variant || !primaryVideo.color) {\n            resetVideo(newMO.primary.video, type)\n        }\n\n        newMO.soundOnly = {\n            sound: setSound({}, \"a01\", true)\n        }\n        newMO.source = convertSourceFX(sourceToken, audio, \"source\");\n        newMO.target = convertTargetFX(targetToken, audio, \"target\");\n        return newMO;\n    }\n\n    function setSound(audio = {}, section = \"a01\", rebase = false) {\n        if (rebase) {\n            return {\n                delay: 0,\n                enable: false,\n                file: \"\",\n                startTime: 0,\n                repeat: 1,\n                repeatDelay: 250,\n                volume: 1,\n            }\n        } else {\n            return {\n                delay: audio?.[section]?.delay ?? 0,\n                enable: audio?.[section]?.enable ?? false,\n                file: audio?.[section]?.file ?? \"\",\n                startTime: audio?.[section]?.startTime ?? 0,\n                volume: audio?.[section]?.volume ?? 1,\n                repeat: 1,\n                repeatDelay: 250,\n            }\n        }\n    }\n\n    function setDBSection(type) {\n        return type === \"aura\" || type === \"ontoken\" ? \"static\" : type;\n    }\n\n    function convertSourceFX(extraFX, audio, section) {\n        const oldData = extraFX || {};\n        const data = {\n            enable: oldData.enable ?? false,\n            options: {\n                addTokenWidth:false,\n                anchor: \"0.5\",\n                delay: oldData.delayAfter ?? 0,\n                elevation: oldData.animLevel ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isWait: true,\n                isMasked: false,\n                isRadius: false,\n                opacity: oldData.opacity ?? 1,\n                repeat: oldData.loops ?? 1,\n                repeatDelay: oldData.loopDelay ?? 250,\n                size: oldData.scale ?? 1,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"s01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: oldData.menuType,\n                animation: oldData.name,\n                variant: oldData.variant,\n                color: oldData.color,\n                enableCustom: oldData.enableCustom ?? false,\n                customPath: oldData.customPath ?? \"\",\n            }\n        }\n        let video = data.video;\n        if (!video.menuType || !video.animation || !video.variant || !video.color) {\n            resetVideo(data.video, \"static\")\n        }\n        return data;\n    }\n\n    function convertTargetFX(extraFX, audio, section) {\n        const oldData = extraFX || {};\n        const data = {\n            enable: oldData.enable ?? false,\n            options: {\n                addTokenWidth:false,\n                anchor: \"0.5\",\n                delay: oldData.delayStart ?? 0,\n                elevation: oldData.animLevel ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isMasked: false,\n                isRadius: false,\n                opacity: oldData.opacity ?? 1,\n                persistent: oldData.persistent ?? false,\n                repeat: oldData.loops ?? 1,\n                repeatDelay: oldData.loopDelay ?? 250,\n                size: oldData.scale ?? 1,\n                unbindAlpha: false,\n                unbindVisibility: false,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"t01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: oldData.menuType,\n                animation: oldData.name,\n                variant: oldData.variant,\n                color: oldData.color,\n                enableCustom: oldData.enableCustom ?? false,\n                customPath: oldData.customPath ?? \"\",\n            }\n        }\n        let video = data.video;\n        if (!video.menuType || !video.animation || !video.variant || !video.color) {\n            resetVideo(data.video, \"static\")\n        }\n        return data;\n    }\n\n    function compileMeleeSwitch(oldMO) {\n        let oldData = oldMO.meleeSwitch || {};\n        let audio = oldMO.audio || {};\n        const data = {\n            video: {\n                dbSection: \"range\",\n                menuType: oldData.menuType,\n                animation: oldData.animation,\n                variant: oldData.variant,\n                color: oldData.color,\n                enableCustom: false,\n                customPath: \"\",\n            },\n            sound: setSound(audio, \"a02\"),\n            options: {\n                detect: oldData.detect || \"automatic\",\n                range: oldData.range || 2,\n                isReturning: oldData.returning ?? false,\n                switchType: oldData.switchType || \"on\",\n            }\n        }\n        const switchVideo = data.video;\n        if (!switchVideo.menuType || !switchVideo.animation || !switchVideo.variant || !switchVideo.color) {\n            resetVideo(data.video, \"range\")\n        }\n        return data;\n    }\n\n    function convertOptionsV6(oldMO, type) {\n        const data = {};\n        const options = oldMO.options || {};\n        switch (type) {\n            case \"melee\":\n                data.delay = 0;\n                data.elevation = oldMO.animLevel ? 0 : 1000;\n                data.isWait = false;\n                data.opacity = 1;\n                data.repeat = options.repeat ?? 1;\n                data.repeatDelay = options.delay ?? 0;\n                data.size = options.scale ?? 1;\n                data.zIndex = 1;\n                break;\n            case \"range\":\n                data.delay = 0;\n                data.elevation = oldMO.below ? 0 : 1000;\n                data.isReturning = false;\n                data.isWait = false;\n                data.onlyX = options.onlyX ?? false;\n                data.opacity = options.opacity ?? 1;\n                data.repeat = options.repeat ?? 1;\n                data.repeatDelay = options.delay ?? 0;\n                data.zIndex = options.zIndex ?? 1;\n                break;\n            case \"ontoken\":\n                data.addTokenWidth = false;\n                data.anchor = \"0.5\";\n                data.delay = 0;\n                data.elevation = oldMO.below ? 0 : 1000;\n                data.fadeIn = 250;\n                data.fadeOut = 500;\n                data.isMasked = false;\n                data.isRadius = false;\n                data.isWait = false;\n                data.opacity = options.opacity ?? 1;\n                data.persistent = options.persistent ?? false;\n                data.playOn = options.staticType === \"targetDefault\" ? \"default\" : options.staticType === \"sourceTarget\" ? \"both\" : !options.staticType ? \"default\" : options.staticType;\n                data.repeat = options.repeat ?? 1;\n                data.repeatDelay = options.delay ?? 0;\n                data.size = options.scale ?? 1;\n                data.unbindAlpha = options.unbindAlpha ?? false;\n                data.unbindVisibility = options.unbindVisibility ?? false;\n                data.zIndex = options.zIndex ?? 1;\n                break;\n            case \"templatefx\":\n                data.delay = 0;\n                data.elevation = oldMO.below ? 0 : 1000;\n                data.isMasked = false;\n                data.isWait = false;\n                data.occlusionAlpha = options.occlusionAlpha ?? 0;\n                data.occlusionMode = options.occlusionMode ?? 0;\n                data.opacity = options.opacity ?? 1;\n                data.persistent = options.persistent ?? false;\n                data.persistType = options.persistType || \"sequencerground\";\n                data.removeTemplate = options.removeTemplate ?? 1;\n                data.repeat = options.repeat ?? 1;\n                data.repeatDelay = options.delay ?? 0;\n                data.rotate = 0;\n                data.scale = `${options.scaleX ?? 1}, ${options.scaleY ?? 1}`\n                //data.scaleX = options.scaleX ?? 1;\n                //data.scaleY = options.scaleY ?? 1;\n                data.zIndex = options.zIndex ?? 1;\n                break;\n            case \"aura\":\n                data.addTokenWidth = options.addTokenWidth ?? false;\n                data.alpha = false,\n                data.alphaMax = 0.5,\n                data.alphaMin = -0.5,\n                data.alphaDuration = 1000,\n                data.breath = false,\n                data.breathMax = 1.05,\n                data.breathMin = 0.95,\n                data.breathDuration = 1000,\n                data.delay = 0;\n                data.elevation = options.below ? 0 : 1000;\n                data.fadeIn = 250;\n                data.fadeOut = 500;\n                data.playOn = options.ignoreTarget ? \"source\" : \"default\";\n                data.isRadius = true;\n                data.isWait = false;\n                data.opacity = options.opacity ?? 1;\n                data.size = options.auraRadius ?? 3;\n                data.tint = false,\n                data.tintColor = \"#FFFFFF\",\n                data.tintSaturate = 0,\n                data.unbindAlpha = options.unbindAlpha ?? false;\n                data.unbindVisibility = options.unbindVisibility ?? false;\n                data.zIndex = options.zIndex ?? 1;\n                break;\n        }\n        return data;\n    }\n\n    async function new3d(oldData) {\n        let newData = oldData.levels3d || {};\n        let {type, addExplosion, ...rest} = newData;\n        const data3d = {\n            enable: type ? true : false,\n            type: type || \"\",\n            data: rest || {},\n            secondary: {\n                enable: addExplosion?.enable ?? false,\n                data: addExplosion || {}\n            },\n            sound: setSound({}, \"a01\", true),\n        };\n        return data3d;\n    }\n\n    function resetVideo(data, type) {\n        switch (type) {\n            case \"melee\":\n                data.menuType = \"weapon\";\n                data.animation = \"dagger\";\n                data.variant = \"01\";\n                data.color = \"white\";\n                break;\n            case \"range\":\n                data.menuType = \"weapon\";\n                data.animation = \"arrow\";\n                data.variant = \"regular\";\n                data.color = \"regular\";\n                break;\n            case \"templatefx\":\n                data.menuType = \"circle\";\n                data.animation = \"calllightning\";\n                data.variant = \"01\";\n                data.color = \"blue\";\n                break;\n            default:\n                data.menuType = \"spell\";\n                data.animation = \"curewounds\";\n                data.variant = \"01\";\n                data.color = \"blue\";\n            }\n    }\n\n    async function convertExplosionV6(exp, audio, oldMO) {\n\n        let data = {\n            enable: exp?.enable ?? false,\n            options: {\n                addTokenWidth: false,\n                anchor: \"0.5\",\n                delay: exp?.delay ?? 250,\n                elevation: exp?.below ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isMasked: exp?.isMasked ?? false,\n                isRadius: true,\n                isWait: false,\n                opacity: 1,\n                repeat: oldMO.options?.repeat ?? 1,\n                repeatDelay: oldMO.delay ?? 0,\n                size: exp?.radius ?? 1.5,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"e01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: exp?.menuType,\n                animation: exp?.animation,\n                variant: exp?.variant,\n                color: exp?.color,\n                enableCustom: exp?.enableCustom ?? false,\n                customPath: exp?.customPath ?? \"\",\n            }\n        };\n        const video = data.video;\n        if (!video.menuType || !video.animation || !video.variant || !video.color) {\n            data.video.menuType = \"spell\";\n            data.video.animation = \"curewounds\";\n            data.video.variant = \"01\";\n            data.video.color = \"blue\";\n        }\n        return data;\n    }\n\n    /**\n     * Preset Conversions\n     * Bardic Inspiration, Bless, Shield, Hunters Mark and Sneak Attack are removed\n     */\n    async function routePreset(oldMO, newMO) {\n        //const oldMO = presetObject[i]\n        //newMenu.preset[i] = {};\n        //const newMO = newMenu.preset[i];\n        //let newMO = {};\n        let current;\n        switch (oldMO.animation) {\n            case \"teleportation\":\n                current = await updateTele(oldMO, newMO);\n                return current;\n            case \"dualattach\":\n                current = await updateDAttach(oldMO, newMO);\n                return current;\n            case \"fireball\":\n                current = await updateFireball(oldMO, newMO);\n                return current;\n            case \"thunderwave\":\n                current = await updateThunderwave(oldMO, newMO);\n                return current;\n            default:\n                return \"deleteFlags\"\n        }\n    }\n\n    async function updateDAttach(oldData, newData) {\n\n        let { animLevel, animType, animation, audio, color, killAnim, macro, options, override, sourceToken, targetToken } = oldData;\n\n        newData.id = Hashing.uuidv4();\n        newData.isEnabled = true;\n        newData.isCustomized = true;\n        newData.fromAmmo = options?.ammo ?? false;\n        newData.menu = \"preset\"\n        newData.presetType = \"dualattach\";\n\n\n        newData.macro = macro || {};\n        //newData.label = name;\n        newData.data = {\n            video: {\n                dbSection: \"range\",\n                menuType: options?.menuType,\n                animation: options?.name,\n                variant: options?.variant,\n                color,\n                enableCustom: options?.enableCustom ?? false,\n                customPath: options?.customPath ?? \"\",\n            },\n            options: {\n                playbackRate: options?.playbackRate,\n                onlyX: options?.onlyX ?? false,\n                elevation: animLevel ? 0 : 1000,\n                opacity: 1,\n            },\n            sound: setSound(audio, \"a01\"),\n        };\n        if (!newData.data.video.menuType || !newData.data.video.animation || !newData.data.video.variant || !newData.data.video.color) {\n            resetVideo(newData.data.video, \"range\")\n        }\n        newData.soundOnly = {\n            sound: setSound({}, \"a01\", true)\n        }\n        return newData;\n    }\n\n    async function updateFireball(oldData, newData) {\n        newData.data = {};\n        const root = newData.data;\n        let { animLevel, animType, animation, audio, killAnim, macro, options, override, sourceToken, targetToken } = oldData;\n\n        let fireballData = oldData.fireball || {};\n        let {afterEffect, afterEffectPath, ex01Type, ex02Type, explosion01, explosion01Color, explosion01Delay, explosion01Repeat,\n            explosion01Scale, explosion01Variant, explosion02, explosion02Color, explosion02Delay, explosion02Repeat, explosion02Scale,\n            explosion02Variant, projectile, projectileColor, projectileDelay, projectileRepeat, projectileVariant, rangeType, wait01,\n            wait02, wait03} = fireballData;\n\n        newData.id = Hashing.uuidv4();\n        newData.isEnabled = true;\n        newData.isCustomized = true;\n        newData.fromAmmo = options?.ammo ?? false;\n        newData.menu = \"preset\"\n        newData.presetType = \"proToTemp\";\n\n        //root.audio = audio || {};\n        newData.macro = macro || {};\n\n        //root.removeTemplate = removeTemplate;\n        root.projectile = {\n            dbSection: \"range\",\n            menuType: rangeType,\n            animation: projectile,\n            variant: projectileVariant,\n            color: projectileColor,\n            options: {\n                repeat: projectileRepeat ?? 1,\n                repeatDelay: projectileDelay ?? 250,\n                wait: wait01,\n                elevation: animLevel ? 0 : 1000,\n                removeTemplate: oldData?.options?.removeTemplate ?? false,\n            },\n            sound: setSound(audio, \"a01\"),\n        }\n        if (!root.projectile.menuType || !root.projectile.animation || !root.projectile.variant || !root.projectile.color) {\n            resetVideo(root.projectile, \"range\")\n        }\n        root.preExplosion = {\n            dbSection: \"static\",\n            menuType: ex01Type,\n            animation: explosion01,\n            variant: explosion01Variant,\n            color: explosion01Color,\n            options: {\n                repeat: explosion01Repeat,\n                repeatDelay: explosion01Delay,\n                scale: explosion01Scale,\n                wait: wait02,\n                elevation: animLevel ? 0 : 1000,\n            },\n            sound: setSound(audio, \"e01\"),\n        }\n        if (!root.preExplosion.menuType || !root.preExplosion.animation || !root.preExplosion.variant || !root.preExplosion.color) {\n            root.preExplosion.enable = false;\n            resetVideo(root.preExplosion, \"static\")\n        } else { root.preExplosion.enable = true }\n        root.explosion = {\n            dbSection: \"static\",\n            menuType: ex02Type,\n            animation: explosion02,\n            variant: explosion02Variant,\n            color: explosion02Color,\n            options: {\n                elevation: animLevel ? 0 : 1000,\n                repeat: explosion02Repeat,\n                repeatDelay: explosion02Delay,\n                scale: explosion02Scale,\n                wait: -500,\n            },\n            sound: setSound(audio, \"e02\"),\n        }\n        if (!root.explosion.menuType || !root.explosion.animation || !root.explosion.variant || !root.explosion.color) {\n            resetVideo(root.explosion, \"static\")\n        }\n        root.afterImage = {\n            enable: afterEffect,\n            customPath: afterEffectPath,\n            options: {\n                elevation: 0,\n                persistent: false,\n                scale: 1,\n            }\n        }\n        newData.soundOnly = {\n            sound: setSound({}, \"a01\", true),\n        }\n\n        newData.secondary = {\n            enable: false,\n            options: {\n                addTokenWidth: false,\n                delay: 250,\n                elevation: 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isMasked: false,\n                isRadius: true,\n                isWait: false,\n                opacity: 1,\n                repeat: 1,\n                repeatDelay: 0,\n                size: 1.5,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"e01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"curewounds\",\n                variant: \"01\",\n                color: \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        };\n\n        newData.target = newExtraFX(true);\n\n        return newData;\n    }\n\n    async function updateTele(oldData, newData) {\n        newData.data = {};\n        const root = newData.data;\n        let { animLevel, animType, animation, audio, color, color02, killAnim, macro, options, override } = oldData;\n\n        newData.id = Hashing.uuidv4();\n        newData.isEnabled = true;\n        newData.isCustomized = true;\n        newData.fromAmmo = options?.ammo ?? false;\n        newData.menu = \"preset\"\n        newData.presetType = \"teleportation\";\n\n        newData.macro = macro || {};\n\n        root.options = {\n            alpha: 0,\n            delayFade: 750,\n            delayMove: 1000,\n            delayReturn:  options?.delay ?? 250,\n            hideFromPlayers: options?.hideFromPlayers ?? false,\n            measureType: options?.measureType ?? \"alternating\",\n            range: options?.teleDist ?? 30,\n            speed: 120,\n            teleport: true,\n        }\n        root.sound = setSound(audio, \"a01\");\n        root.start = {\n            dbSection: \"static\",\n            enable: true,\n            menuType: options?.menuType,\n            animation: options?.name,\n            variant: options?.variant,\n            color: color,\n            enableCustom: options.enableCustom ?? false,\n            customPath: options.customPath ?? \"\",\n            options: {\n                delay: 0,\n                elevation: animLevel ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 250,\n                isMasked: false,\n                opacity: 1,\n                isRadius: false,\n                size: options?.scale || 1.5,\n            }\n        }\n        root.between = {\n            dbSection: \"range\",\n            enable: false,\n            menuType: \"weapon\",\n            animation: \"arrow\",\n            variant: \"regular\",\n            color: \"regular\",\n            options: {\n                delay: 0,\n                enable: false,\n                elevation: 1000,\n                opacity: 1,\n                playbackRate: 1,\n            }\n        }\n        root.end = {\n            dbSection: \"static\",\n            enable: true,\n            menuType: options?.menuType02,\n            animation: options?.name02,\n            variant: options?.variant02,\n            color: color02,\n            enableCustom: options?.enableCustom02 ?? false,\n            customPath: options?.customPath02 ?? \"\",\n            options: {\n                delay: 500,\n                elevation: animLevel ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 250,\n                isMasked: false,\n                isRadius: false,\n                opacity: 1,\n                size: options?.scale02 ?? 1,\n            }\n        }\n        if (!root.start.menuType || !root.start.animation || !root.start.variant || !root.start.color) {\n            resetVideo(root.start, \"static\")\n        }\n        if (!root.end.menuType || !root.end.animation || !root.end.variant || !root.end.color) {\n            resetVideo(root.end, \"static\")\n        }\n        newData.soundOnly = {\n            sound: setSound({}, \"a01\", true)\n        }\n        return newData;\n    }\n\n    async function updateThunderwave(oldData, newData) {\n        let { animLevel, animType, animation, audio, color, killAnim, macro, options, override } = oldData;\n\n        newData.id = Hashing.uuidv4();\n        newData.isEnabled = true;\n        newData.isCustomized = true;\n        newData.fromAmmo = options?.ammo ?? false;\n        newData.menu = \"preset\"\n        newData.presetType = \"thunderwave\";\n\n        newData.macro = macro || {};\n        newData.data = {\n            video: {\n                dbSection: \"templatefx\",\n                menuType: \"square\",\n                animation: \"thunderwave\",\n                variant: \"mid\",\n                color: color || \"blue\",\n            },\n            options: {\n                elevation: animLevel ? 0 : 1000,\n                repeat: options?.repeat ?? 1,\n                repeatDelay: options?.delay ?? 250,\n                opacity: options?.opacity ?? 1,\n                removeTemplate: options?.removeTemplate ?? false,\n            },\n            sound: setSound(audio, \"a01\"),\n        };\n        newData.soundOnly = {\n            sound: setSound({}, \"a01\", true)\n        }\n        return newData;\n    }\n\n    /**\n     * Active Effect Conversions\n     * Shield and Bless converted to OnToken menu\n     */\n     async function routeActiveEffect(oldMO, newMO) {\n\n        let current;\n        switch (oldMO.animType) {\n            case \"static\":\n                current = await convertAEOnToken(oldMO, newMO);\n                return current;\n            case \"aura\":\n                current = await convertAEAura(oldMO, newMO);\n                return current;\n            case \"preset\":\n                switch(oldMO.animation) {\n                    case \"bless\":\n                        current = await convertAEBless(oldMO, newMO);\n                        return current;\n                    case \"shieldspell\":\n                        current = await convertAEShield(oldMO, newMO);\n                        return current;\n                }\n\n        }\n    }\n\n    function newExtraFX() {\n        const data = {\n            enable: false,\n            options: {\n                addTokenWidth: false,\n                delay: 0,\n                elevation: 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isMasked: false,\n                isRadius: false,\n                isWait: true,\n                opacity: 1,\n                repeat: 1,\n                repeatDelay: 250,\n                size: 1,\n                zIndex: 1,\n            },\n            sound: setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"curewounds\",\n                variant: \"01\",\n                color: \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n        return data;\n    }\n\n    async function convertAEOnToken(oldMO, newMO) {\n\n        let { animLevel, animation, audio, color, explosions, macro, options } = oldMO;\n        //let { aeDelay, aeType, animation, audio, below, color, custom, customPath, delay, explosion, macro, menuType, name,\n            //opacity, persistent, repeat, scale, soundOnly, type, unbindAlpha, unbindVisibility, variant } = oldMO;\n\n        newMO.id = Hashing.uuidv4();\n        newMO.isEnabled = true;\n        newMO.isCustomized = true;\n        newMO.activeEffectType = \"ontoken\";\n\n        newMO.primary = {\n            options: {\n                addTokenWidth: false,\n                elevation: animLevel ? 0 : 1000,\n                delay: 0,\n                isMasked: false,\n                isRadius: false,\n                isWait: false,\n                opacity: options?.opacity ?? 1,\n                persistent: options?.persistent ?? false,\n                playOn: \"source\",\n                repeat: options?.repeat ?? 1,\n                repeatDelay: options?.delay || 250,\n                size: options?.scale || 1,\n                unbindAlpha: options?.unbindAlpha ?? false,\n                unbindVisibility: options?.unbindVisibility ?? false,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"a01\"),\n            video: {\n                animation: animation,\n                color: color,\n                customPath: options?.customPath ?? \"\",\n                dbSection: \"static\",\n                enableCustom: options?.enableCustom ?? false,\n                menuType: options?.menuType,\n                variant: options?.variant,\n            }\n        }\n\n        const newVideo = newMO.primary.video;\n        if (!newVideo.menuType || !newVideo.animation || !newVideo.variant || !newVideo.color) {\n            resetVideo(newMO.primary.video)\n        }\n\n        newMO.macro = macro || {};\n        newMO.menu = \"aefx\";\n        newMO.secondary = await convertExplosionV6(explosions, audio, oldMO)\n        newMO.soundOnly = {\n            sound: setSound({}, \"a01\", true),\n        }\n        newMO.source = newExtraFX();\n\n        return newMO;\n    }\n\n    async function convertAEAura(oldMO, newMO) {\n\n        let { animLevel, animType, animation, audio, color, macro, options } = oldMO;\n\n        newMO.id = Hashing.uuidv4();\n        newMO.isEnabled = true;\n        newMO.isCustomized = true;\n        newMO.activeEffectType = \"ontoken\";\n        newMO.menu = \"aefx\";\n\n        newMO.secondary = {\n            enable: false,\n            options: {},\n            sound: setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"curewounds\",\n                variant: \"01\",\n                color: \"blue\",\n            }\n        }\n\n        newMO.primary = {\n            options: {\n                addTokenWidth: false,\n                alpha: false,\n                alphaMax: 0.5,\n                alphaMin: -0.5,\n                alphaDuration: 1000,\n                breath: false,\n                breathMax: 1.05,\n                breathMin: 0.95,\n                breathDuration: 1000,\n                delay: 0,\n                elevation: animLevel ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isRadius: true,\n                isWait: true,\n                opacity: options?.opacity || 1,\n                playOn: \"source\",\n                size: options?.auraRadius || 3,\n                tint: false,\n                tintColor: \"#FFFFFF\",\n                tintSaturate: 0,\n                unbindAlpha: options?.unbindAlpha ?? false,\n                unbindVisibility: options?.unbindVisibility ?? false,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"a01\"),\n            video: {\n                animation: animation,\n                color: color,\n                customPath: options?.customPath || \"\",\n                dbSection: \"static\",\n                enableCustom: options?.enableCustom ?? false,\n                menuType: options?.menuType,\n                variant: options?.variant,\n            }\n        }\n\n        const newVideo = newMO.primary.video;\n        if (!newVideo.menuType || !newVideo.animation || !newVideo.variant || !newVideo.color) {\n            resetVideo(newMO.primary.video)\n        }\n\n        newMO.macro = macro || {};\n\n        newMO.soundOnly = {\n            sound: setSound({}, \"a01\", true)\n        }\n\n        newMO.source = newExtraFX();\n        return newMO;\n    }\n\n    async function convertAEBless(oldMO, newMO) {\n\n        let { animLevel, animType, animation, audio, color, macro, options } = oldMO;\n\n        newMO.id = Hashing.uuidv4();\n        newMO.isEnabled = true;\n        newMO.isCustomized = true;\n        newMO.activeEffectType = \"ontoken\";\n        newMO.menu = \"aefx\";\n\n        newMO.macro = macro || {};\n\n        newMO.primary = {\n            options: {\n                addTokenWidth: false,\n                delay: 0,\n                elevation: animLevel ? 0 : 1000,\n                fadeIn: 0,\n                fadeOut: 500,\n                isMasked: false,\n                isRadius: false,\n                isWait: true,\n                opacity: 1,\n                persistent: options?.persistent ?? false,\n                playOn: \"source\",\n                repeat: 1,\n                repeatDelay: 250,\n                size: options?.scale || 1,\n                unbindAlpha: options?.unbindAlpha ?? false,\n                unbindVisibility: options?.unbindVisibility ?? false,\n                zIndex: 1,\n            },\n            sound: setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"bless\",\n                variant: \"loop\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            },\n        }\n\n        newMO.secondary = {\n            enable: false,\n            options: {},\n            sound: setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"curewounds\",\n                variant: \"01\",\n                color: \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            },\n        }\n\n        newMO.soundOnly = {\n            sound: setSound({}, \"a01\", true)\n        }\n\n        newMO.source = {\n            enable: true,\n            options: {\n                addTokenWidth: false,\n                delay: -500,\n                elevation: animLevel ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isMasked: false,\n                isRadius: false,\n                isWait: true,\n                opacity: 1,\n                repeat: 1,\n                repeatDelay: 250,\n                size: options?.scale || 1,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"a01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"bless\",\n                variant: \"intro\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n\n        return newMO;\n    }\n\n    async function convertAEShield(oldMO, newMO) {\n\n        let { animLevel, animType, animation, audio, color, macro, options } = oldMO;\n\n        newMO.id = Hashing.uuidv4();\n        newMO.isEnabled = true;\n        newMO.isCustomized = true;\n        newMO.activeEffectType = \"ontoken\";\n        newMO.menu = \"aefx\";\n\n        newMO.primary = {\n            options:{\n                isWait: true,\n                delay: -1000,\n                elevation: animLevel ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 0,\n                isMasked: false,\n                isRadius: false,\n                opacity: 1,\n                persistent: options?.persistent || false,\n                repeat: 1,\n                repeatDelay: 250,\n                size: options?.scale ?? 1,\n                playOn: \"source\",\n                unbindAlpha: options?.unbindAlpha ?? false,\n                unbindVisibility: options?.unbindVisibility ?? false,\n                zIndex: 1,\n            },\n            sound: setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"shieldspell\",\n                animation: \"loop\",\n                variant: options?.variant || \"01\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n        newMO.source = {\n            enable: true,\n            options: {\n                delay: -500,\n                elevation: animLevel ? 0 : 1000,\n                fadeIn: 500,\n                fadeOut: 0,\n                isRadius: false,\n                isWait: true,\n                mask: false,\n                repeat: 1,\n                repeatDelay: 250,\n                size: options?.scale || 1,\n            },\n            sound: setSound(audio, \"a01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: \"shieldspell\",\n                animation: \"intro\",\n                variant: options?.variant || \"01\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n\n        newMO.secondary = {\n            enable: true,\n            options: {\n                delay: 0,\n                elevation: animLevel ? 0 : 1000,\n                isMasked: false,\n                isRadius: false,\n                isWait: false,\n                repeat: 1,\n                repeatDelay: 250,\n                size: options?.scale || 1,\n                opacity: 1,\n                zIndex: 1,\n            },\n            sound: setSound({}, \"a01\", true),\n            video:{\n                dbSection: \"static\",\n                menuType: \"shieldspell\",\n                animation: options?.shieldVar || \"outro_explode\",\n                variant: options?.variant || \"01\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n\n        newMO.macro = macro || {};\n\n        newMO.soundOnly = {\n            sound: setSound({}, \"a01\", true),\n        }\n\n        return newMO;\n    }\n}\n","import * as itemMerge from \"./merges/versionIndex.js\";\n\nexport const flagMigrations = {\n\n    async handle(item, options = {}) {\n        let flags = item.flags?.autoanimations;\n        if (!flags) return;\n\n        if (this.upToDate(flags)) return flags;\n\n        if (flags.version && isNaN(flags.version)) {\n            console.error(\"Your A-A Item data may be corrupted. Please log this in the Automated Animations GitHub issues\");\n            return flags;\n        }\n        let newFlagData = item.flags.autoanimations;\n        for (let [version, migration] of Object.entries(this.migrations)) {\n            let flagVersion = item.flags.autoanimations.version;\n\n            if (flagVersion >= Number(version)) continue;\n\n            newFlagData = await migration(newFlagData, options.isActiveEffect);\n        }\n        //let updatedFlags = item.flags?.autoanimations ?? {};\n        if (!newFlagData) {\n            await item.update({ 'flags.-=autoanimations': null })\n            return void 0;\n        } else {\n            await item.update({ 'flags.-=autoanimations': null })\n            await item.update({ 'flags.autoanimations': newFlagData })   \n            return newFlagData;\n        }\n    },\n\n    upToDate(flags) {\n        const currentFlagVersion = Object.keys(this.migrations).map(n => Number(n)).reverse()[0]\n        return flags.version >= currentFlagVersion;\n    },\n\n    migrations: {\n        \"1\": async (item) => {\n            return await itemMerge.version01(item)\n        },\n        \"2\": async (item) => {\n            return await itemMerge.version02(item)\n        },\n        \"3\": async (item) => {\n            return await itemMerge.version03(item)\n        },\n        \"4\": async (item) => {\n            return await itemMerge.version04(item)\n        },\n        \"5\": async (item, isActiveEffect) => {\n            return await itemMerge.version05(item, isActiveEffect)\n        }\n    }\n}","/** @returns {void} */\nexport function noop() {}\n\nexport const identity = (x) => x;\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nexport function assign(tar, src) {\n\t// @ts-ignore\n\tfor (const k in src) tar[k] = src[k];\n\treturn /** @type {T & S} */ (tar);\n}\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n/**\n * @param {any} value\n * @returns {value is PromiseLike<any>}\n */\nexport function is_promise(value) {\n\treturn (\n\t\t!!value &&\n\t\t(typeof value === 'object' || typeof value === 'function') &&\n\t\ttypeof (/** @type {any} */ (value).then) === 'function'\n\t);\n}\n\n/** @returns {void} */\nexport function add_location(element, file, line, column, char) {\n\telement.__svelte_meta = {\n\t\tloc: { file, line, column, char }\n\t};\n}\n\nexport function run(fn) {\n\treturn fn();\n}\n\nexport function blank_object() {\n\treturn Object.create(null);\n}\n\n/**\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function run_all(fns) {\n\tfns.forEach(run);\n}\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\n/** @returns {boolean} */\nexport function safe_not_equal(a, b) {\n\treturn a != a ? b == b : a !== b || (a && typeof a === 'object') || typeof a === 'function';\n}\n\nlet src_url_equal_anchor;\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nexport function src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\tif (!src_url_equal_anchor) {\n\t\tsrc_url_equal_anchor = document.createElement('a');\n\t}\n\t// This is actually faster than doing URL(..).href\n\tsrc_url_equal_anchor.href = url;\n\treturn element_src === src_url_equal_anchor.href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element_srcset\n * @param {string | undefined | null} srcset\n * @returns {boolean}\n */\nexport function srcset_url_equal(element_srcset, srcset) {\n\tconst element_urls = split_srcset(element_srcset.srcset);\n\tconst urls = split_srcset(srcset || '');\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n\n/** @returns {boolean} */\nexport function not_equal(a, b) {\n\treturn a != a ? b == b : a !== b;\n}\n\n/** @returns {boolean} */\nexport function is_empty(obj) {\n\treturn Object.keys(obj).length === 0;\n}\n\n/** @returns {void} */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\tthrow new Error(`'${name}' is not a store with a 'subscribe' method`);\n\t}\n}\n\nexport function subscribe(store, ...callbacks) {\n\tif (store == null) {\n\t\tfor (const callback of callbacks) {\n\t\t\tcallback(undefined);\n\t\t}\n\t\treturn noop;\n\t}\n\tconst unsub = store.subscribe(...callbacks);\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * https://svelte.dev/docs/svelte-store#get\n * @template T\n * @param {import('../store/public.js').Readable<T>} store\n * @returns {T}\n */\nexport function get_store_value(store) {\n\tlet value;\n\tsubscribe(store, (_) => (value = _))();\n\treturn value;\n}\n\n/** @returns {void} */\nexport function component_subscribe(component, store, callback) {\n\tcomponent.$$.on_destroy.push(subscribe(store, callback));\n}\n\nexport function create_slot(definition, ctx, $$scope, fn) {\n\tif (definition) {\n\t\tconst slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n\t\treturn definition[0](slot_ctx);\n\t}\n}\n\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n\treturn definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx;\n}\n\nexport function get_slot_changes(definition, $$scope, dirty, fn) {\n\tif (definition[2] && fn) {\n\t\tconst lets = definition[2](fn(dirty));\n\t\tif ($$scope.dirty === undefined) {\n\t\t\treturn lets;\n\t\t}\n\t\tif (typeof lets === 'object') {\n\t\t\tconst merged = [];\n\t\t\tconst len = Math.max($$scope.dirty.length, lets.length);\n\t\t\tfor (let i = 0; i < len; i += 1) {\n\t\t\t\tmerged[i] = $$scope.dirty[i] | lets[i];\n\t\t\t}\n\t\t\treturn merged;\n\t\t}\n\t\treturn $$scope.dirty | lets;\n\t}\n\treturn $$scope.dirty;\n}\n\n/** @returns {void} */\nexport function update_slot_base(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tslot_changes,\n\tget_slot_context_fn\n) {\n\tif (slot_changes) {\n\t\tconst slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n\t\tslot.p(slot_context, slot_changes);\n\t}\n}\n\n/** @returns {void} */\nexport function update_slot(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tdirty,\n\tget_slot_changes_fn,\n\tget_slot_context_fn\n) {\n\tconst slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n\tupdate_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\n\n/** @returns {any[] | -1} */\nexport function get_all_dirty_from_scope($$scope) {\n\tif ($$scope.ctx.length > 32) {\n\t\tconst dirty = [];\n\t\tconst length = $$scope.ctx.length / 32;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tdirty[i] = -1;\n\t\t}\n\t\treturn dirty;\n\t}\n\treturn -1;\n}\n\n/** @returns {{}} */\nexport function exclude_internal_props(props) {\n\tconst result = {};\n\tfor (const k in props) if (k[0] !== '$') result[k] = props[k];\n\treturn result;\n}\n\n/** @returns {{}} */\nexport function compute_rest_props(props, keys) {\n\tconst rest = {};\n\tkeys = new Set(keys);\n\tfor (const k in props) if (!keys.has(k) && k[0] !== '$') rest[k] = props[k];\n\treturn rest;\n}\n\n/** @returns {{}} */\nexport function compute_slots(slots) {\n\tconst result = {};\n\tfor (const key in slots) {\n\t\tresult[key] = true;\n\t}\n\treturn result;\n}\n\n/** @returns {(this: any, ...args: any[]) => void} */\nexport function once(fn) {\n\tlet ran = false;\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\t\tfn.call(this, ...args);\n\t};\n}\n\nexport function null_to_empty(value) {\n\treturn value == null ? '' : value;\n}\n\nexport function set_store_value(store, ret, value) {\n\tstore.set(value);\n\treturn ret;\n}\n\nexport const has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\n\nexport function action_destroyer(action_result) {\n\treturn action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nexport function split_css_unit(value) {\n\tconst split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n\treturn split ? [parseFloat(split[1]), split[2] || 'px'] : [/** @type {number} */ (value), 'px'];\n}\n\nexport const contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n","import { noop } from './utils.js';\n\nexport const is_client = typeof window !== 'undefined';\n\n/** @type {() => number} */\nexport let now = is_client ? () => window.performance.now() : () => Date.now();\n\nexport let raf = is_client ? (cb) => requestAnimationFrame(cb) : noop;\n\n// used internally for testing\n/** @returns {void} */\nexport function set_now(fn) {\n\tnow = fn;\n}\n\n/** @returns {void} */\nexport function set_raf(fn) {\n\traf = fn;\n}\n","import { raf } from './environment.js';\n\nconst tasks = new Set();\n\n/**\n * @param {number} now\n * @returns {void}\n */\nfunction run_tasks(now) {\n\ttasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\ttasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\tif (tasks.size !== 0) raf(run_tasks);\n}\n\n/**\n * For testing purposes only!\n * @returns {void}\n */\nexport function clear_loops() {\n\ttasks.clear();\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {import('./private.js').TaskCallback} callback\n * @returns {import('./private.js').Task}\n */\nexport function loop(callback) {\n\t/** @type {import('./private.js').TaskEntry} */\n\tlet task;\n\tif (tasks.size === 0) raf(run_tasks);\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\ttasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\ttasks.delete(task);\n\t\t}\n\t};\n}\n","import { contenteditable_truthy_values, has_prop } from './utils.js';\n\nimport { ResizeObserverSingleton } from './ResizeObserverSingleton.js';\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\n\n/**\n * @returns {void}\n */\nexport function start_hydrating() {\n\tis_hydrating = true;\n}\n\n/**\n * @returns {void}\n */\nexport function end_hydrating() {\n\tis_hydrating = false;\n}\n\n/**\n * @param {number} low\n * @param {number} high\n * @param {(index: number) => number} key\n * @param {number} value\n * @returns {number}\n */\nfunction upper_bound(low, high, key, value) {\n\t// Return first index of value larger than input value in the range [low, high)\n\twhile (low < high) {\n\t\tconst mid = low + ((high - low) >> 1);\n\t\tif (key(mid) <= value) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\treturn low;\n}\n\n/**\n * @param {NodeEx} target\n * @returns {void}\n */\nfunction init_hydrate(target) {\n\tif (target.hydrate_init) return;\n\ttarget.hydrate_init = true;\n\t// We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n\n\tlet children = /** @type {ArrayLike<NodeEx2>} */ (target.childNodes);\n\t// If target is <head>, there may be children without claim_order\n\tif (target.nodeName === 'HEAD') {\n\t\tconst my_children = [];\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst node = children[i];\n\t\t\tif (node.claim_order !== undefined) {\n\t\t\t\tmy_children.push(node);\n\t\t\t}\n\t\t}\n\t\tchildren = my_children;\n\t}\n\t/*\n\t * Reorder claimed children optimally.\n\t * We can reorder claimed children optimally by finding the longest subsequence of\n\t * nodes that are already claimed in order and only moving the rest. The longest\n\t * subsequence of nodes that are claimed in order can be found by\n\t * computing the longest increasing subsequence of .claim_order values.\n\t *\n\t * This algorithm is optimal in generating the least amount of reorder operations\n\t * possible.\n\t *\n\t * Proof:\n\t * We know that, given a set of reordering operations, the nodes that do not move\n\t * always form an increasing subsequence, since they do not move among each other\n\t * meaning that they must be already ordered among each other. Thus, the maximal\n\t * set of nodes that do not move form a longest increasing subsequence.\n\t */\n\t// Compute longest increasing subsequence\n\t// m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n\tconst m = new Int32Array(children.length + 1);\n\t// Predecessor indices + 1\n\tconst p = new Int32Array(children.length);\n\tm[0] = -1;\n\tlet longest = 0;\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst current = children[i].claim_order;\n\t\t// Find the largest subsequence length such that it ends in a value less than our current value\n\t\t// upper_bound returns first greater value, so we subtract one\n\t\t// with fast path for when we are on the current longest subsequence\n\t\tconst seq_len =\n\t\t\t(longest > 0 && children[m[longest]].claim_order <= current\n\t\t\t\t? longest + 1\n\t\t\t\t: upper_bound(1, longest, (idx) => children[m[idx]].claim_order, current)) - 1;\n\t\tp[i] = m[seq_len] + 1;\n\t\tconst new_len = seq_len + 1;\n\t\t// We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n\t\tm[new_len] = i;\n\t\tlongest = Math.max(new_len, longest);\n\t}\n\t// The longest increasing subsequence of nodes (initially reversed)\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst lis = [];\n\t// The rest of the nodes, nodes that will be moved\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst to_move = [];\n\tlet last = children.length - 1;\n\tfor (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n\t\tlis.push(children[cur - 1]);\n\t\tfor (; last >= cur; last--) {\n\t\t\tto_move.push(children[last]);\n\t\t}\n\t\tlast--;\n\t}\n\tfor (; last >= 0; last--) {\n\t\tto_move.push(children[last]);\n\t}\n\tlis.reverse();\n\t// We sort the nodes being moved to guarantee that their insertion order matches the claim order\n\tto_move.sort((a, b) => a.claim_order - b.claim_order);\n\t// Finally, we move the nodes\n\tfor (let i = 0, j = 0; i < to_move.length; i++) {\n\t\twhile (j < lis.length && to_move[i].claim_order >= lis[j].claim_order) {\n\t\t\tj++;\n\t\t}\n\t\tconst anchor = j < lis.length ? lis[j] : null;\n\t\ttarget.insertBefore(to_move[i], anchor);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @returns {void}\n */\nexport function append(target, node) {\n\ttarget.appendChild(node);\n}\n\n/**\n * @param {Node} target\n * @param {string} style_sheet_id\n * @param {string} styles\n * @returns {void}\n */\nexport function append_styles(target, style_sheet_id, styles) {\n\tconst append_styles_to = get_root_for_style(target);\n\tif (!append_styles_to.getElementById(style_sheet_id)) {\n\t\tconst style = element('style');\n\t\tstyle.id = style_sheet_id;\n\t\tstyle.textContent = styles;\n\t\tappend_stylesheet(append_styles_to, style);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {ShadowRoot | Document}\n */\nexport function get_root_for_style(node) {\n\tif (!node) return document;\n\tconst root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n\tif (root && /** @type {ShadowRoot} */ (root).host) {\n\t\treturn /** @type {ShadowRoot} */ (root);\n\t}\n\treturn node.ownerDocument;\n}\n\n/**\n * @param {Node} node\n * @returns {CSSStyleSheet}\n */\nexport function append_empty_stylesheet(node) {\n\tconst style_element = element('style');\n\t// For transitions to work without 'style-src: unsafe-inline' Content Security Policy,\n\t// these empty tags need to be allowed with a hash as a workaround until we move to the Web Animations API.\n\t// Using the hash for the empty string (for an empty tag) works in all browsers except Safari.\n\t// So as a workaround for the workaround, when we append empty style tags we set their content to /* empty */.\n\t// The hash 'sha256-9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc=' will then work even in Safari.\n\tstyle_element.textContent = '/* empty */';\n\tappend_stylesheet(get_root_for_style(node), style_element);\n\treturn style_element.sheet;\n}\n\n/**\n * @param {ShadowRoot | Document} node\n * @param {HTMLStyleElement} style\n * @returns {CSSStyleSheet}\n */\nfunction append_stylesheet(node, style) {\n\tappend(/** @type {Document} */ (node).head || node, style);\n\treturn style.sheet;\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @returns {void}\n */\nexport function append_hydration(target, node) {\n\tif (is_hydrating) {\n\t\tinit_hydrate(target);\n\t\tif (\n\t\t\ttarget.actual_end_child === undefined ||\n\t\t\t(target.actual_end_child !== null && target.actual_end_child.parentNode !== target)\n\t\t) {\n\t\t\ttarget.actual_end_child = target.firstChild;\n\t\t}\n\t\t// Skip nodes of undefined ordering\n\t\twhile (target.actual_end_child !== null && target.actual_end_child.claim_order === undefined) {\n\t\t\ttarget.actual_end_child = target.actual_end_child.nextSibling;\n\t\t}\n\t\tif (node !== target.actual_end_child) {\n\t\t\t// We only insert if the ordering of this node should be modified or the parent node is not target\n\t\t\tif (node.claim_order !== undefined || node.parentNode !== target) {\n\t\t\t\ttarget.insertBefore(node, target.actual_end_child);\n\t\t\t}\n\t\t} else {\n\t\t\ttarget.actual_end_child = node.nextSibling;\n\t\t}\n\t} else if (node.parentNode !== target || node.nextSibling !== null) {\n\t\ttarget.appendChild(node);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @param {Node} [anchor]\n * @returns {void}\n */\nexport function insert(target, node, anchor) {\n\ttarget.insertBefore(node, anchor || null);\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @param {NodeEx} [anchor]\n * @returns {void}\n */\nexport function insert_hydration(target, node, anchor) {\n\tif (is_hydrating && !anchor) {\n\t\tappend_hydration(target, node);\n\t} else if (node.parentNode !== target || node.nextSibling != anchor) {\n\t\ttarget.insertBefore(node, anchor || null);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {void}\n */\nexport function detach(node) {\n\tif (node.parentNode) {\n\t\tnode.parentNode.removeChild(node);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function destroy_each(iterations, detaching) {\n\tfor (let i = 0; i < iterations.length; i += 1) {\n\t\tif (iterations[i]) iterations[i].d(detaching);\n\t}\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element(name) {\n\treturn document.createElement(name);\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @param {string} is\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element_is(name, is) {\n\treturn document.createElement(name, { is });\n}\n\n/**\n * @template T\n * @template {keyof T} K\n * @param {T} obj\n * @param {K[]} exclude\n * @returns {Pick<T, Exclude<keyof T, K>>}\n */\nexport function object_without_properties(obj, exclude) {\n\tconst target = /** @type {Pick<T, Exclude<keyof T, K>>} */ ({});\n\tfor (const k in obj) {\n\t\tif (\n\t\t\thas_prop(obj, k) &&\n\t\t\t// @ts-ignore\n\t\t\texclude.indexOf(k) === -1\n\t\t) {\n\t\t\t// @ts-ignore\n\t\t\ttarget[k] = obj[k];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * @template {keyof SVGElementTagNameMap} K\n * @param {K} name\n * @returns {SVGElement}\n */\nexport function svg_element(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n/**\n * @param {string} data\n * @returns {Text}\n */\nexport function text(data) {\n\treturn document.createTextNode(data);\n}\n\n/**\n * @returns {Text} */\nexport function space() {\n\treturn text(' ');\n}\n\n/**\n * @returns {Text} */\nexport function empty() {\n\treturn text('');\n}\n\n/**\n * @param {string} content\n * @returns {Comment}\n */\nexport function comment(content) {\n\treturn document.createComment(content);\n}\n\n/**\n * @param {EventTarget} node\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} handler\n * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options]\n * @returns {() => void}\n */\nexport function listen(node, event, handler, options) {\n\tnode.addEventListener(event, handler, options);\n\treturn () => node.removeEventListener(event, handler, options);\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function prevent_default(fn) {\n\treturn function (event) {\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_immediate_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function self(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.target === this) fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function trusted(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.isTrusted) fn.call(this, event);\n\t};\n}\n\n/**\n * @param {Element} node\n * @param {string} attribute\n * @param {string} [value]\n * @returns {void}\n */\nexport function attr(node, attribute, value) {\n\tif (value == null) node.removeAttribute(attribute);\n\telse if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_attributes(node, attributes) {\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n\tfor (const key in attributes) {\n\t\tif (attributes[key] == null) {\n\t\t\tnode.removeAttribute(key);\n\t\t} else if (key === 'style') {\n\t\t\tnode.style.cssText = attributes[key];\n\t\t} else if (key === '__value') {\n\t\t\t/** @type {any} */ (node).value = node[key] = attributes[key];\n\t\t} else if (\n\t\t\tdescriptors[key] &&\n\t\t\tdescriptors[key].set &&\n\t\t\talways_set_through_set_attribute.indexOf(key) === -1\n\t\t) {\n\t\t\tnode[key] = attributes[key];\n\t\t} else {\n\t\t\tattr(node, key, attributes[key]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_svg_attributes(node, attributes) {\n\tfor (const key in attributes) {\n\t\tattr(node, key, attributes[key]);\n\t}\n}\n\n/**\n * @param {Record<string, unknown>} data_map\n * @returns {void}\n */\nexport function set_custom_element_data_map(node, data_map) {\n\tObject.keys(data_map).forEach((key) => {\n\t\tset_custom_element_data(node, key, data_map[key]);\n\t});\n}\n\n/**\n * @returns {void} */\nexport function set_custom_element_data(node, prop, value) {\n\tconst lower = prop.toLowerCase(); // for backwards compatibility with existing behavior we do lowercase first\n\tif (lower in node) {\n\t\tnode[lower] = typeof node[lower] === 'boolean' && value === '' ? true : value;\n\t} else if (prop in node) {\n\t\tnode[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n\t} else {\n\t\tattr(node, prop, value);\n\t}\n}\n\n/**\n * @param {string} tag\n */\nexport function set_dynamic_element_data(tag) {\n\treturn /-/.test(tag) ? set_custom_element_data_map : set_attributes;\n}\n\n/**\n * @returns {void}\n */\nexport function xlink_attr(node, attribute, value) {\n\tnode.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @returns {string}\n */\nexport function get_svelte_dataset(node) {\n\treturn node.dataset.svelteH;\n}\n\n/**\n * @returns {unknown[]} */\nexport function get_binding_group_value(group, __value, checked) {\n\tconst value = new Set();\n\tfor (let i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) value.add(group[i].__value);\n\t}\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement[]} group\n * @returns {{ p(...inputs: HTMLInputElement[]): void; r(): void; }}\n */\nexport function init_binding_group(group) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\treturn {\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\t_inputs.forEach((input) => group.push(input));\n\t\t},\n\t\t/* remove */ r() {\n\t\t\t_inputs.forEach((input) => group.splice(group.indexOf(input), 1));\n\t\t}\n\t};\n}\n\n/**\n * @param {number[]} indexes\n * @returns {{ u(new_indexes: number[]): void; p(...inputs: HTMLInputElement[]): void; r: () => void; }}\n */\nexport function init_binding_group_dynamic(group, indexes) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _group = get_binding_group(group);\n\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\n\tfunction get_binding_group(group) {\n\t\tfor (let i = 0; i < indexes.length; i++) {\n\t\t\tgroup = group[indexes[i]] = group[indexes[i]] || [];\n\t\t}\n\t\treturn group;\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction push() {\n\t\t_inputs.forEach((input) => _group.push(input));\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction remove() {\n\t\t_inputs.forEach((input) => _group.splice(_group.indexOf(input), 1));\n\t}\n\treturn {\n\t\t/* update */ u(new_indexes) {\n\t\t\tindexes = new_indexes;\n\t\t\tconst new_group = get_binding_group(group);\n\t\t\tif (new_group !== _group) {\n\t\t\t\tremove();\n\t\t\t\t_group = new_group;\n\t\t\t\tpush();\n\t\t\t}\n\t\t},\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\tpush();\n\t\t},\n\t\t/* remove */ r: remove\n\t};\n}\n\n/** @returns {number} */\nexport function to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/** @returns {any[]} */\nexport function time_ranges_to_array(ranges) {\n\tconst array = [];\n\tfor (let i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\treturn array;\n}\n\n/**\n * @param {Element} element\n * @returns {ChildNode[]}\n */\nexport function children(element) {\n\treturn Array.from(element.childNodes);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {void}\n */\nfunction init_claim_info(nodes) {\n\tif (nodes.claim_info === undefined) {\n\t\tnodes.claim_info = { last_index: 0, total_claimed: 0 };\n\t}\n}\n\n/**\n * @template {ChildNodeEx} R\n * @param {ChildNodeArray} nodes\n * @param {(node: ChildNodeEx) => node is R} predicate\n * @param {(node: ChildNodeEx) => ChildNodeEx | undefined} process_node\n * @param {() => R} create_node\n * @param {boolean} dont_update_last_index\n * @returns {R}\n */\nfunction claim_node(nodes, predicate, process_node, create_node, dont_update_last_index = false) {\n\t// Try to find nodes in an order such that we lengthen the longest increasing subsequence\n\tinit_claim_info(nodes);\n\tconst result_node = (() => {\n\t\t// We first try to find an element after the previous one\n\t\tfor (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// Otherwise, we try to find one before\n\t\t// We iterate in reverse so that we don't go too far back\n\t\tfor (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t} else if (replacement === undefined) {\n\t\t\t\t\t// Since we spliced before the last_index, we decrease it\n\t\t\t\t\tnodes.claim_info.last_index--;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// If we can't find any matching node, we create a new one\n\t\treturn create_node();\n\t})();\n\tresult_node.claim_order = nodes.claim_info.total_claimed;\n\tnodes.claim_info.total_claimed += 1;\n\treturn result_node;\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @param {(name: string) => Element | SVGElement} create_element\n * @returns {Element | SVGElement}\n */\nfunction claim_element_base(nodes, name, attributes, create_element) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Element | SVGElement} */\n\t\t(node) => node.nodeName === name,\n\t\t/** @param {Element} node */\n\t\t(node) => {\n\t\t\tconst remove = [];\n\t\t\tfor (let j = 0; j < node.attributes.length; j++) {\n\t\t\t\tconst attribute = node.attributes[j];\n\t\t\t\tif (!attributes[attribute.name]) {\n\t\t\t\t\tremove.push(attribute.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tremove.forEach((v) => node.removeAttribute(v));\n\t\t\treturn undefined;\n\t\t},\n\t\t() => create_element(name)\n\t);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_svg_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, svg_element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Text}\n */\nexport function claim_text(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Text} */\n\t\t(node) => node.nodeType === 3,\n\t\t/** @param {Text} node */\n\t\t(node) => {\n\t\t\tconst data_str = '' + data;\n\t\t\tif (node.data.startsWith(data_str)) {\n\t\t\t\tif (node.data.length !== data_str.length) {\n\t\t\t\t\treturn node.splitText(data_str.length);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode.data = data_str;\n\t\t\t}\n\t\t},\n\t\t() => text(data),\n\t\ttrue // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n\t);\n}\n\n/**\n * @returns {Text} */\nexport function claim_space(nodes) {\n\treturn claim_text(nodes, ' ');\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Comment}\n */\nexport function claim_comment(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Comment} */\n\t\t(node) => node.nodeType === 8,\n\t\t/** @param {Comment} node */\n\t\t(node) => {\n\t\t\tnode.data = '' + data;\n\t\t\treturn undefined;\n\t\t},\n\t\t() => comment(data),\n\t\ttrue\n\t);\n}\n\nfunction get_comment_idx(nodes, text, start) {\n\tfor (let i = start; i < nodes.length; i += 1) {\n\t\tconst node = nodes[i];\n\t\tif (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\n/**\n * @param {boolean} is_svg\n * @returns {HtmlTagHydration}\n */\nexport function claim_html_tag(nodes, is_svg) {\n\t// find html opening tag\n\tconst start_index = get_comment_idx(nodes, 'HTML_TAG_START', 0);\n\tconst end_index = get_comment_idx(nodes, 'HTML_TAG_END', start_index + 1);\n\tif (start_index === -1 || end_index === -1) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\n\tinit_claim_info(nodes);\n\tconst html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n\tdetach(html_tag_nodes[0]);\n\tdetach(html_tag_nodes[html_tag_nodes.length - 1]);\n\tconst claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n\tif (claimed_nodes.length === 0) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\tfor (const n of claimed_nodes) {\n\t\tn.claim_order = nodes.claim_info.total_claimed;\n\t\tnodes.claim_info.total_claimed += 1;\n\t}\n\treturn new HtmlTagHydration(is_svg, claimed_nodes);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data(text, data) {\n\tdata = '' + data;\n\tif (text.data === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data_contenteditable(text, data) {\n\tdata = '' + data;\n\tif (text.wholeText === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @param {string} attr_value\n * @returns {void}\n */\nexport function set_data_maybe_contenteditable(text, data, attr_value) {\n\tif (~contenteditable_truthy_values.indexOf(attr_value)) {\n\t\tset_data_contenteditable(text, data);\n\t} else {\n\t\tset_data(text, data);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_input_value(input, value) {\n\tinput.value = value == null ? '' : value;\n}\n\n/**\n * @returns {void} */\nexport function set_input_type(input, type) {\n\ttry {\n\t\tinput.type = type;\n\t} catch (e) {\n\t\t// do nothing\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_style(node, key, value, important) {\n\tif (value == null) {\n\t\tnode.style.removeProperty(key);\n\t} else {\n\t\tnode.style.setProperty(key, value, important ? 'important' : '');\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_option(select, value, mounting) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\tif (option.__value === value) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_options(select, value) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\toption.selected = ~value.indexOf(option.__value);\n\t}\n}\n\nexport function select_value(select) {\n\tconst selected_option = select.querySelector(':checked');\n\treturn selected_option && selected_option.__value;\n}\n\nexport function select_multiple_value(select) {\n\treturn [].map.call(select.querySelectorAll(':checked'), (option) => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\n\n/**\n * @type {boolean} */\nlet crossorigin;\n\n/**\n * @returns {boolean} */\nexport function is_crossorigin() {\n\tif (crossorigin === undefined) {\n\t\tcrossorigin = false;\n\t\ttry {\n\t\t\tif (typeof window !== 'undefined' && window.parent) {\n\t\t\t\tvoid window.parent.document;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcrossorigin = true;\n\t\t}\n\t}\n\treturn crossorigin;\n}\n\n/**\n * @param {HTMLElement} node\n * @param {() => void} fn\n * @returns {() => void}\n */\nexport function add_iframe_resize_listener(node, fn) {\n\tconst computed_style = getComputedStyle(node);\n\tif (computed_style.position === 'static') {\n\t\tnode.style.position = 'relative';\n\t}\n\tconst iframe = element('iframe');\n\tiframe.setAttribute(\n\t\t'style',\n\t\t'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n\t\t\t'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;'\n\t);\n\tiframe.setAttribute('aria-hidden', 'true');\n\tiframe.tabIndex = -1;\n\tconst crossorigin = is_crossorigin();\n\n\t/**\n\t * @type {() => void}\n\t */\n\tlet unsubscribe;\n\tif (crossorigin) {\n\t\tiframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n\t\tunsubscribe = listen(\n\t\t\twindow,\n\t\t\t'message',\n\t\t\t/** @param {MessageEvent} event */ (event) => {\n\t\t\t\tif (event.source === iframe.contentWindow) fn();\n\t\t\t}\n\t\t);\n\t} else {\n\t\tiframe.src = 'about:blank';\n\t\tiframe.onload = () => {\n\t\t\tunsubscribe = listen(iframe.contentWindow, 'resize', fn);\n\t\t\t// make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n\t\t\t// see https://github.com/sveltejs/svelte/issues/4233\n\t\t\tfn();\n\t\t};\n\t}\n\tappend(node, iframe);\n\treturn () => {\n\t\tif (crossorigin) {\n\t\t\tunsubscribe();\n\t\t} else if (unsubscribe && iframe.contentWindow) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tdetach(iframe);\n\t};\n}\nexport const resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\nexport const resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\nexport const resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton(\n\t{ box: 'device-pixel-content-box' }\n);\nexport { ResizeObserverSingleton };\n\n/**\n * @returns {void} */\nexport function toggle_class(element, name, toggle) {\n\t// The `!!` is required because an `undefined` flag means flipping the current state.\n\telement.classList.toggle(name, !!toggle);\n}\n\n/**\n * @template T\n * @param {string} type\n * @param {T} [detail]\n * @param {{ bubbles?: boolean, cancelable?: boolean }} [options]\n * @returns {CustomEvent<T>}\n */\nexport function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * @param {string} selector\n * @param {HTMLElement} parent\n * @returns {ChildNodeArray}\n */\nexport function query_selector_all(selector, parent = document.body) {\n\treturn Array.from(parent.querySelectorAll(selector));\n}\n\n/**\n * @param {string} nodeId\n * @param {HTMLElement} head\n * @returns {any[]}\n */\nexport function head_selector(nodeId, head) {\n\tconst result = [];\n\tlet started = 0;\n\tfor (const node of head.childNodes) {\n\t\tif (node.nodeType === 8 /* comment node */) {\n\t\t\tconst comment = node.textContent.trim();\n\t\t\tif (comment === `HEAD_${nodeId}_END`) {\n\t\t\t\tstarted -= 1;\n\t\t\t\tresult.push(node);\n\t\t\t} else if (comment === `HEAD_${nodeId}_START`) {\n\t\t\t\tstarted += 1;\n\t\t\t\tresult.push(node);\n\t\t\t}\n\t\t} else if (started > 0) {\n\t\t\tresult.push(node);\n\t\t}\n\t}\n\treturn result;\n}\n/** */\nexport class HtmlTag {\n\t/**\n\t * @private\n\t * @default false\n\t */\n\tis_svg = false;\n\t/** parent for creating node */\n\te = undefined;\n\t/** html tag nodes */\n\tn = undefined;\n\t/** target */\n\tt = undefined;\n\t/** anchor */\n\ta = undefined;\n\tconstructor(is_svg = false) {\n\t\tthis.is_svg = is_svg;\n\t\tthis.e = this.n = null;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tthis.h(html);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @param {HTMLElement | SVGElement} target\n\t * @param {HTMLElement | SVGElement} anchor\n\t * @returns {void}\n\t */\n\tm(html, target, anchor = null) {\n\t\tif (!this.e) {\n\t\t\tif (this.is_svg)\n\t\t\t\tthis.e = svg_element(/** @type {keyof SVGElementTagNameMap} */ (target.nodeName));\n\t\t\t/** #7364  target for <template> may be provided as #document-fragment(11) */ else\n\t\t\t\tthis.e = element(\n\t\t\t\t\t/** @type {keyof HTMLElementTagNameMap} */ (\n\t\t\t\t\t\ttarget.nodeType === 11 ? 'TEMPLATE' : target.nodeName\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\tthis.t =\n\t\t\t\ttarget.tagName !== 'TEMPLATE'\n\t\t\t\t\t? target\n\t\t\t\t\t: /** @type {HTMLTemplateElement} */ (target).content;\n\t\t\tthis.c(html);\n\t\t}\n\t\tthis.i(anchor);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\th(html) {\n\t\tthis.e.innerHTML = html;\n\t\tthis.n = Array.from(\n\t\t\tthis.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes\n\t\t);\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert(this.t, this.n[i], anchor);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tp(html) {\n\t\tthis.d();\n\t\tthis.h(html);\n\t\tthis.i(this.a);\n\t}\n\n\t/**\n\t * @returns {void} */\n\td() {\n\t\tthis.n.forEach(detach);\n\t}\n}\n\nexport class HtmlTagHydration extends HtmlTag {\n\t/** @type {Element[]} hydration claimed nodes */\n\tl = undefined;\n\n\tconstructor(is_svg = false, claimed_nodes) {\n\t\tsuper(is_svg);\n\t\tthis.e = this.n = null;\n\t\tthis.l = claimed_nodes;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tif (this.l) {\n\t\t\tthis.n = this.l;\n\t\t} else {\n\t\t\tsuper.c(html);\n\t\t}\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert_hydration(this.t, this.n[i], anchor);\n\t\t}\n\t}\n}\n\n/**\n * @param {NamedNodeMap} attributes\n * @returns {{}}\n */\nexport function attribute_to_object(attributes) {\n\tconst result = {};\n\tfor (const attribute of attributes) {\n\t\tresult[attribute.name] = attribute.value;\n\t}\n\treturn result;\n}\n\nconst escaped = {\n\t'\"': '&quot;',\n\t'&': '&amp;',\n\t'<': '&lt;'\n};\n\nconst regex_attribute_characters_to_escape = /[\"&<]/g;\n\n/**\n * Note that the attribute itself should be surrounded in double quotes\n * @param {any} attribute\n */\nfunction escape_attribute(attribute) {\n\treturn String(attribute).replace(regex_attribute_characters_to_escape, (match) => escaped[match]);\n}\n\n/**\n * @param {Record<string, string>} attributes\n */\nexport function stringify_spread(attributes) {\n\tlet str = ' ';\n\tfor (const key in attributes) {\n\t\tif (attributes[key] != null) {\n\t\t\tstr += `${key}=\"${escape_attribute(attributes[key])}\" `;\n\t\t}\n\t}\n\n\treturn str;\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {{}}\n */\nexport function get_custom_elements_slots(element) {\n\tconst result = {};\n\telement.childNodes.forEach(\n\t\t/** @param {Element} node */ (node) => {\n\t\t\tresult[node.slot || 'default'] = true;\n\t\t}\n\t);\n\treturn result;\n}\n\nexport function construct_svelte_component(component, props) {\n\treturn new component(props);\n}\n\n/**\n * @typedef {Node & {\n * \tclaim_order?: number;\n * \thydrate_init?: true;\n * \tactual_end_child?: NodeEx;\n * \tchildNodes: NodeListOf<NodeEx>;\n * }} NodeEx\n */\n\n/** @typedef {ChildNode & NodeEx} ChildNodeEx */\n\n/** @typedef {NodeEx & { claim_order: number }} NodeEx2 */\n\n/**\n * @typedef {ChildNodeEx[] & {\n * \tclaim_info?: {\n * \t\tlast_index: number;\n * \t\ttotal_claimed: number;\n * \t};\n * }} ChildNodeArray\n */\n","import { append_empty_stylesheet, detach, get_root_for_style } from './dom.js';\nimport { raf } from './environment.js';\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\n/** @type {Map<Document | ShadowRoot, import('./private.d.ts').StyleInformation>} */\nconst managed_styles = new Map();\n\nlet active = 0;\n\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\n/**\n * @param {string} str\n * @returns {number}\n */\nfunction hash(str) {\n\tlet hash = 5381;\n\tlet i = str.length;\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\n\n/**\n * @param {Document | ShadowRoot} doc\n * @param {Element & ElementCSSInlineStyle} node\n * @returns {{ stylesheet: any; rules: {}; }}\n */\nfunction create_style_information(doc, node) {\n\tconst info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n\tmanaged_styles.set(doc, info);\n\treturn info;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {number} a\n * @param {number} b\n * @param {number} duration\n * @param {number} delay\n * @param {(t: number) => number} ease\n * @param {(t: number, u: number) => string} fn\n * @param {number} uid\n * @returns {string}\n */\nexport function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n\tconst step = 16.666 / duration;\n\tlet keyframes = '{\\n';\n\tfor (let p = 0; p <= 1; p += step) {\n\t\tconst t = a + (b - a) * ease(p);\n\t\tkeyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n\t}\n\tconst rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n\tconst name = `__svelte_${hash(rule)}_${uid}`;\n\tconst doc = get_root_for_style(node);\n\tconst { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n\tif (!rules[name]) {\n\t\trules[name] = true;\n\t\tstylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n\t}\n\tconst animation = node.style.animation || '';\n\tnode.style.animation = `${\n\t\tanimation ? `${animation}, ` : ''\n\t}${name} ${duration}ms linear ${delay}ms 1 both`;\n\tactive += 1;\n\treturn name;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {string} [name]\n * @returns {void}\n */\nexport function delete_rule(node, name) {\n\tconst previous = (node.style.animation || '').split(', ');\n\tconst next = previous.filter(\n\t\tname\n\t\t\t? (anim) => anim.indexOf(name) < 0 // remove specific animation\n\t\t\t: (anim) => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n\t);\n\tconst deleted = previous.length - next.length;\n\tif (deleted) {\n\t\tnode.style.animation = next.join(', ');\n\t\tactive -= deleted;\n\t\tif (!active) clear_rules();\n\t}\n}\n\n/** @returns {void} */\nexport function clear_rules() {\n\traf(() => {\n\t\tif (active) return;\n\t\tmanaged_styles.forEach((info) => {\n\t\t\tconst { ownerNode } = info.stylesheet;\n\t\t\t// there is no ownerNode if it runs on jsdom.\n\t\t\tif (ownerNode) detach(ownerNode);\n\t\t});\n\t\tmanaged_styles.clear();\n\t});\n}\n","import { custom_event } from './dom.js';\n\nexport let current_component;\n\n/** @returns {void} */\nexport function set_current_component(component) {\n\tcurrent_component = component;\n}\n\nexport function get_current_component() {\n\tif (!current_component) throw new Error('Function called outside component initialization');\n\treturn current_component;\n}\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#beforeupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tget_current_component().$$.before_update.push(fn);\n}\n\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted.\n *\n * `onMount` does not run inside a [server-side component](https://svelte.dev/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs/svelte#onmount\n * @template T\n * @param {() => import('./private.js').NotFunction<T> | Promise<import('./private.js').NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tget_current_component().$$.on_mount.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#afterupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tget_current_component().$$.after_update.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs/svelte#ondestroy\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tget_current_component().$$.on_destroy.push(fn);\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n *  loaded: never; // does not take a detail argument\n *  change: string; // takes a detail argument of type string, which is required\n *  optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * https://svelte.dev/docs/svelte#createeventdispatcher\n * @template {Record<string, any>} [EventMap=any]\n * @returns {import('./public.js').EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst component = get_current_component();\n\treturn (type, detail, { cancelable = false } = {}) => {\n\t\tconst callbacks = component.$$.callbacks[type];\n\t\tif (callbacks) {\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = custom_event(/** @type {string} */ (type), detail, { cancelable });\n\t\t\tcallbacks.slice().forEach((fn) => {\n\t\t\t\tfn.call(component, event);\n\t\t\t});\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#setcontext\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tget_current_component().$$.context.set(key, context);\n\treturn context;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#getcontext\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\treturn get_current_component().$$.context.get(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs/svelte#getallcontexts\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\treturn get_current_component().$$.context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#hascontext\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\treturn get_current_component().$$.context.has(key);\n}\n\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\n/**\n * @param component\n * @param event\n * @returns {void}\n */\nexport function bubble(component, event) {\n\tconst callbacks = component.$$.callbacks[event.type];\n\tif (callbacks) {\n\t\t// @ts-ignore\n\t\tcallbacks.slice().forEach((fn) => fn.call(this, event));\n\t}\n}\n","import { run_all } from './utils.js';\nimport { current_component, set_current_component } from './lifecycle.js';\n\nexport const dirty_components = [];\nexport const intros = { enabled: false };\nexport const binding_callbacks = [];\n\nlet render_callbacks = [];\n\nconst flush_callbacks = [];\n\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\n\nlet update_scheduled = false;\n\n/** @returns {void} */\nexport function schedule_update() {\n\tif (!update_scheduled) {\n\t\tupdate_scheduled = true;\n\t\tresolved_promise.then(flush);\n\t}\n}\n\n/** @returns {Promise<void>} */\nexport function tick() {\n\tschedule_update();\n\treturn resolved_promise;\n}\n\n/** @returns {void} */\nexport function add_render_callback(fn) {\n\trender_callbacks.push(fn);\n}\n\n/** @returns {void} */\nexport function add_flush_callback(fn) {\n\tflush_callbacks.push(fn);\n}\n\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n//    for afterUpdates called during the initial onMount, which are called in\n//    reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n//    dirty_components array and will cause a reentrant call to flush(). Because\n//    the flush index is kept outside the function, the reentrant call will pick\n//    up where the earlier call left off and go through all dirty components. The\n//    current_component value is saved and restored so that the reentrant call will\n//    not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n//    callback called a second time; the seen_callbacks set, outside the flush()\n//    function, guarantees this behavior.\nconst seen_callbacks = new Set();\n\nlet flushidx = 0; // Do *not* move this inside the flush() function\n\n/** @returns {void} */\nexport function flush() {\n\t// Do not reenter flush while dirty components are updated, as this can\n\t// result in an infinite loop. Instead, let the inner flush handle it.\n\t// Reentrancy is ok afterwards for bindings etc.\n\tif (flushidx !== 0) {\n\t\treturn;\n\t}\n\tconst saved_component = current_component;\n\tdo {\n\t\t// first, call beforeUpdate functions\n\t\t// and update components\n\t\ttry {\n\t\t\twhile (flushidx < dirty_components.length) {\n\t\t\t\tconst component = dirty_components[flushidx];\n\t\t\t\tflushidx++;\n\t\t\t\tset_current_component(component);\n\t\t\t\tupdate(component.$$);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// reset dirty state to not end up in a deadlocked state and then rethrow\n\t\t\tdirty_components.length = 0;\n\t\t\tflushidx = 0;\n\t\t\tthrow e;\n\t\t}\n\t\tset_current_component(null);\n\t\tdirty_components.length = 0;\n\t\tflushidx = 0;\n\t\twhile (binding_callbacks.length) binding_callbacks.pop()();\n\t\t// then, once components are updated, call\n\t\t// afterUpdate functions. This may cause\n\t\t// subsequent updates...\n\t\tfor (let i = 0; i < render_callbacks.length; i += 1) {\n\t\t\tconst callback = render_callbacks[i];\n\t\t\tif (!seen_callbacks.has(callback)) {\n\t\t\t\t// ...so guard against infinite loops\n\t\t\t\tseen_callbacks.add(callback);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t\trender_callbacks.length = 0;\n\t} while (dirty_components.length);\n\twhile (flush_callbacks.length) {\n\t\tflush_callbacks.pop()();\n\t}\n\tupdate_scheduled = false;\n\tseen_callbacks.clear();\n\tset_current_component(saved_component);\n}\n\n/** @returns {void} */\nfunction update($$) {\n\tif ($$.fragment !== null) {\n\t\t$$.update();\n\t\trun_all($$.before_update);\n\t\tconst dirty = $$.dirty;\n\t\t$$.dirty = [-1];\n\t\t$$.fragment && $$.fragment.p($$.ctx, dirty);\n\t\t$$.after_update.forEach(add_render_callback);\n\t}\n}\n\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function flush_render_callbacks(fns) {\n\tconst filtered = [];\n\tconst targets = [];\n\trender_callbacks.forEach((c) => (fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)));\n\ttargets.forEach((c) => c());\n\trender_callbacks = filtered;\n}\n","import { identity as linear, is_function, noop, run_all } from './utils.js';\nimport { now } from './environment.js';\nimport { loop } from './loop.js';\nimport { create_rule, delete_rule } from './style_manager.js';\nimport { custom_event } from './dom.js';\nimport { add_render_callback } from './scheduler.js';\n\n/**\n * @type {Promise<void> | null}\n */\nlet promise;\n\n/**\n * @returns {Promise<void>}\n */\nfunction wait() {\n\tif (!promise) {\n\t\tpromise = Promise.resolve();\n\t\tpromise.then(() => {\n\t\t\tpromise = null;\n\t\t});\n\t}\n\treturn promise;\n}\n\n/**\n * @param {Element} node\n * @param {INTRO | OUTRO | boolean} direction\n * @param {'start' | 'end'} kind\n * @returns {void}\n */\nfunction dispatch(node, direction, kind) {\n\tnode.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\n\nconst outroing = new Set();\n\n/**\n * @type {Outro}\n */\nlet outros;\n\n/**\n * @returns {void} */\nexport function group_outros() {\n\toutros = {\n\t\tr: 0,\n\t\tc: [],\n\t\tp: outros // parent group\n\t};\n}\n\n/**\n * @returns {void} */\nexport function check_outros() {\n\tif (!outros.r) {\n\t\trun_all(outros.c);\n\t}\n\toutros = outros.p;\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} [local]\n * @returns {void}\n */\nexport function transition_in(block, local) {\n\tif (block && block.i) {\n\t\toutroing.delete(block);\n\t\tblock.i(local);\n\t}\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} local\n * @param {0 | 1} [detach]\n * @param {() => void} [callback]\n * @returns {void}\n */\nexport function transition_out(block, local, detach, callback) {\n\tif (block && block.o) {\n\t\tif (outroing.has(block)) return;\n\t\toutroing.add(block);\n\t\toutros.c.push(() => {\n\t\t\toutroing.delete(block);\n\t\t\tif (callback) {\n\t\t\t\tif (detach) block.d(1);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t});\n\t\tblock.o(local);\n\t} else if (callback) {\n\t\tcallback();\n\t}\n}\n\n/**\n * @type {import('../transition/public.js').TransitionConfig}\n */\nconst null_transition = { duration: 0 };\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ start(): void; invalidate(): void; end(): void; }}\n */\nexport function create_in_transition(node, fn, params) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'in' };\n\tlet config = fn(node, params, options);\n\tlet running = false;\n\tlet animation_name;\n\tlet task;\n\tlet uid = 0;\n\n\t/**\n\t * @returns {void} */\n\tfunction cleanup() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\t\tif (css) animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n\t\ttick(0, 1);\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tif (task) task.abort();\n\t\trunning = true;\n\t\tadd_render_callback(() => dispatch(node, true, 'start'));\n\t\ttask = loop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(1, 0);\n\t\t\t\t\tdispatch(node, true, 'end');\n\t\t\t\t\tcleanup();\n\t\t\t\t\treturn (running = false);\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\tlet started = false;\n\treturn {\n\t\tstart() {\n\t\t\tif (started) return;\n\t\t\tstarted = true;\n\t\t\tdelete_rule(node);\n\t\t\tif (is_function(config)) {\n\t\t\t\tconfig = config(options);\n\t\t\t\twait().then(go);\n\t\t\t} else {\n\t\t\t\tgo();\n\t\t\t}\n\t\t},\n\t\tinvalidate() {\n\t\t\tstarted = false;\n\t\t},\n\t\tend() {\n\t\t\tif (running) {\n\t\t\t\tcleanup();\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ end(reset: any): void; }}\n */\nexport function create_out_transition(node, fn, params) {\n\t/** @type {TransitionOptions} */\n\tconst options = { direction: 'out' };\n\tlet config = fn(node, params, options);\n\tlet running = true;\n\tlet animation_name;\n\tconst group = outros;\n\tgroup.r += 1;\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\tif (css) animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tadd_render_callback(() => dispatch(node, false, 'start'));\n\n\t\tif ('inert' in node) {\n\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\tnode.inert = true;\n\t\t}\n\n\t\tloop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(0, 1);\n\t\t\t\t\tdispatch(node, false, 'end');\n\t\t\t\t\tif (!--group.r) {\n\t\t\t\t\t\t// this will result in `end()` being called,\n\t\t\t\t\t\t// so we don't need to clean up here\n\t\t\t\t\t\trun_all(group.c);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(1 - t, t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\n\tif (is_function(config)) {\n\t\twait().then(() => {\n\t\t\t// @ts-ignore\n\t\t\tconfig = config(options);\n\t\t\tgo();\n\t\t});\n\t} else {\n\t\tgo();\n\t}\n\n\treturn {\n\t\tend(reset) {\n\t\t\tif (reset && 'inert' in node) {\n\t\t\t\tnode.inert = original_inert_value;\n\t\t\t}\n\t\t\tif (reset && config.tick) {\n\t\t\t\tconfig.tick(1, 0);\n\t\t\t}\n\t\t\tif (running) {\n\t\t\t\tif (animation_name) delete_rule(node, animation_name);\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @param {boolean} intro\n * @returns {{ run(b: 0 | 1): void; end(): void; }}\n */\nexport function create_bidirectional_transition(node, fn, params, intro) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'both' };\n\tlet config = fn(node, params, options);\n\tlet t = intro ? 0 : 1;\n\n\t/**\n\t * @type {Program | null} */\n\tlet running_program = null;\n\n\t/**\n\t * @type {PendingProgram | null} */\n\tlet pending_program = null;\n\tlet animation_name = null;\n\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction clear_animation() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @param {PendingProgram} program\n\t * @param {number} duration\n\t * @returns {Program}\n\t */\n\tfunction init(program, duration) {\n\t\tconst d = /** @type {Program['d']} */ (program.b - t);\n\t\tduration *= Math.abs(d);\n\t\treturn {\n\t\t\ta: t,\n\t\t\tb: program.b,\n\t\t\td,\n\t\t\tduration,\n\t\t\tstart: program.start,\n\t\t\tend: program.start + duration,\n\t\t\tgroup: program.group\n\t\t};\n\t}\n\n\t/**\n\t * @param {INTRO | OUTRO} b\n\t * @returns {void}\n\t */\n\tfunction go(b) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\t/**\n\t\t * @type {PendingProgram} */\n\t\tconst program = {\n\t\t\tstart: now() + delay,\n\t\t\tb\n\t\t};\n\n\t\tif (!b) {\n\t\t\t// @ts-ignore todo: improve typings\n\t\t\tprogram.group = outros;\n\t\t\toutros.r += 1;\n\t\t}\n\n\t\tif ('inert' in node) {\n\t\t\tif (b) {\n\t\t\t\tif (original_inert_value !== undefined) {\n\t\t\t\t\t// aborted/reversed outro — restore previous inert value\n\t\t\t\t\tnode.inert = original_inert_value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\t\tnode.inert = true;\n\t\t\t}\n\t\t}\n\n\t\tif (running_program || pending_program) {\n\t\t\tpending_program = program;\n\t\t} else {\n\t\t\t// if this is an intro, and there's a delay, we need to do\n\t\t\t// an initial tick and/or apply CSS animation immediately\n\t\t\tif (css) {\n\t\t\t\tclear_animation();\n\t\t\t\tanimation_name = create_rule(node, t, b, duration, delay, easing, css);\n\t\t\t}\n\t\t\tif (b) tick(0, 1);\n\t\t\trunning_program = init(program, duration);\n\t\t\tadd_render_callback(() => dispatch(node, b, 'start'));\n\t\t\tloop((now) => {\n\t\t\t\tif (pending_program && now > pending_program.start) {\n\t\t\t\t\trunning_program = init(pending_program, duration);\n\t\t\t\t\tpending_program = null;\n\t\t\t\t\tdispatch(node, running_program.b, 'start');\n\t\t\t\t\tif (css) {\n\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\tanimation_name = create_rule(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\trunning_program.b,\n\t\t\t\t\t\t\trunning_program.duration,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\teasing,\n\t\t\t\t\t\t\tconfig.css\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (running_program) {\n\t\t\t\t\tif (now >= running_program.end) {\n\t\t\t\t\t\ttick((t = running_program.b), 1 - t);\n\t\t\t\t\t\tdispatch(node, running_program.b, 'end');\n\t\t\t\t\t\tif (!pending_program) {\n\t\t\t\t\t\t\t// we're done\n\t\t\t\t\t\t\tif (running_program.b) {\n\t\t\t\t\t\t\t\t// intro — we can tidy up immediately\n\t\t\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// outro — needs to be coordinated\n\t\t\t\t\t\t\t\tif (!--running_program.group.r) run_all(running_program.group.c);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\trunning_program = null;\n\t\t\t\t\t} else if (now >= running_program.start) {\n\t\t\t\t\t\tconst p = now - running_program.start;\n\t\t\t\t\t\tt = running_program.a + running_program.d * easing(p / running_program.duration);\n\t\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!(running_program || pending_program);\n\t\t\t});\n\t\t}\n\t}\n\treturn {\n\t\trun(b) {\n\t\t\tif (is_function(config)) {\n\t\t\t\twait().then(() => {\n\t\t\t\t\tconst opts = { direction: b ? 'in' : 'out' };\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconfig = config(opts);\n\t\t\t\t\tgo(b);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tgo(b);\n\t\t\t}\n\t\t},\n\t\tend() {\n\t\t\tclear_animation();\n\t\t\trunning_program = pending_program = null;\n\t\t}\n\t};\n}\n\n/** @typedef {1} INTRO */\n/** @typedef {0} OUTRO */\n/** @typedef {{ direction: 'in' | 'out' | 'both' }} TransitionOptions */\n/** @typedef {(node: Element, params: any, options: TransitionOptions) => import('../transition/public.js').TransitionConfig} TransitionFn */\n\n/**\n * @typedef {Object} Outro\n * @property {number} r\n * @property {Function[]} c\n * @property {Object} p\n */\n\n/**\n * @typedef {Object} PendingProgram\n * @property {number} start\n * @property {INTRO|OUTRO} b\n * @property {Outro} [group]\n */\n\n/**\n * @typedef {Object} Program\n * @property {number} a\n * @property {INTRO|OUTRO} b\n * @property {1|-1} d\n * @property {number} duration\n * @property {number} start\n * @property {number} end\n * @property {Outro} [group]\n */\n","import { transition_in, transition_out } from './transitions.js';\nimport { run_all } from './utils.js';\n\n// general each functions:\n\nexport function ensure_array_like(array_like_or_iterator) {\n\treturn array_like_or_iterator?.length !== undefined\n\t\t? array_like_or_iterator\n\t\t: Array.from(array_like_or_iterator);\n}\n\n// keyed each functions:\n\n/** @returns {void} */\nexport function destroy_block(block, lookup) {\n\tblock.d(1);\n\tlookup.delete(block.key);\n}\n\n/** @returns {void} */\nexport function outro_and_destroy_block(block, lookup) {\n\ttransition_out(block, 1, 1, () => {\n\t\tlookup.delete(block.key);\n\t});\n}\n\n/** @returns {void} */\nexport function fix_and_destroy_block(block, lookup) {\n\tblock.f();\n\tdestroy_block(block, lookup);\n}\n\n/** @returns {void} */\nexport function fix_and_outro_and_destroy_block(block, lookup) {\n\tblock.f();\n\toutro_and_destroy_block(block, lookup);\n}\n\n/** @returns {any[]} */\nexport function update_keyed_each(\n\told_blocks,\n\tdirty,\n\tget_key,\n\tdynamic,\n\tctx,\n\tlist,\n\tlookup,\n\tnode,\n\tdestroy,\n\tcreate_each_block,\n\tnext,\n\tget_context\n) {\n\tlet o = old_blocks.length;\n\tlet n = list.length;\n\tlet i = o;\n\tconst old_indexes = {};\n\twhile (i--) old_indexes[old_blocks[i].key] = i;\n\tconst new_blocks = [];\n\tconst new_lookup = new Map();\n\tconst deltas = new Map();\n\tconst updates = [];\n\ti = n;\n\twhile (i--) {\n\t\tconst child_ctx = get_context(ctx, list, i);\n\t\tconst key = get_key(child_ctx);\n\t\tlet block = lookup.get(key);\n\t\tif (!block) {\n\t\t\tblock = create_each_block(key, child_ctx);\n\t\t\tblock.c();\n\t\t} else if (dynamic) {\n\t\t\t// defer updates until all the DOM shuffling is done\n\t\t\tupdates.push(() => block.p(child_ctx, dirty));\n\t\t}\n\t\tnew_lookup.set(key, (new_blocks[i] = block));\n\t\tif (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key]));\n\t}\n\tconst will_move = new Set();\n\tconst did_move = new Set();\n\t/** @returns {void} */\n\tfunction insert(block) {\n\t\ttransition_in(block, 1);\n\t\tblock.m(node, next);\n\t\tlookup.set(block.key, block);\n\t\tnext = block.first;\n\t\tn--;\n\t}\n\twhile (o && n) {\n\t\tconst new_block = new_blocks[n - 1];\n\t\tconst old_block = old_blocks[o - 1];\n\t\tconst new_key = new_block.key;\n\t\tconst old_key = old_block.key;\n\t\tif (new_block === old_block) {\n\t\t\t// do nothing\n\t\t\tnext = new_block.first;\n\t\t\to--;\n\t\t\tn--;\n\t\t} else if (!new_lookup.has(old_key)) {\n\t\t\t// remove old block\n\t\t\tdestroy(old_block, lookup);\n\t\t\to--;\n\t\t} else if (!lookup.has(new_key) || will_move.has(new_key)) {\n\t\t\tinsert(new_block);\n\t\t} else if (did_move.has(old_key)) {\n\t\t\to--;\n\t\t} else if (deltas.get(new_key) > deltas.get(old_key)) {\n\t\t\tdid_move.add(new_key);\n\t\t\tinsert(new_block);\n\t\t} else {\n\t\t\twill_move.add(old_key);\n\t\t\to--;\n\t\t}\n\t}\n\twhile (o--) {\n\t\tconst old_block = old_blocks[o];\n\t\tif (!new_lookup.has(old_block.key)) destroy(old_block, lookup);\n\t}\n\twhile (n) insert(new_blocks[n - 1]);\n\trun_all(updates);\n\treturn new_blocks;\n}\n\n/** @returns {void} */\nexport function validate_each_keys(ctx, list, get_context, get_key) {\n\tconst keys = new Map();\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst key = get_key(get_context(ctx, list, i));\n\t\tif (keys.has(key)) {\n\t\t\tlet value = '';\n\t\t\ttry {\n\t\t\t\tvalue = `with value '${String(key)}' `;\n\t\t\t} catch (e) {\n\t\t\t\t// can't stringify\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot have duplicate keys in a keyed each: Keys at index ${keys.get(\n\t\t\t\t\tkey\n\t\t\t\t)} and ${i} ${value}are duplicates`\n\t\t\t);\n\t\t}\n\t\tkeys.set(key, i);\n\t}\n}\n","/** @returns {{}} */\nexport function get_spread_update(levels, updates) {\n\tconst update = {};\n\tconst to_null_out = {};\n\tconst accounted_for = { $$scope: 1 };\n\tlet i = levels.length;\n\twhile (i--) {\n\t\tconst o = levels[i];\n\t\tconst n = updates[i];\n\t\tif (n) {\n\t\t\tfor (const key in o) {\n\t\t\t\tif (!(key in n)) to_null_out[key] = 1;\n\t\t\t}\n\t\t\tfor (const key in n) {\n\t\t\t\tif (!accounted_for[key]) {\n\t\t\t\t\tupdate[key] = n[key];\n\t\t\t\t\taccounted_for[key] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlevels[i] = n;\n\t\t} else {\n\t\t\tfor (const key in o) {\n\t\t\t\taccounted_for[key] = 1;\n\t\t\t}\n\t\t}\n\t}\n\tfor (const key in to_null_out) {\n\t\tif (!(key in update)) update[key] = undefined;\n\t}\n\treturn update;\n}\n\nexport function get_spread_object(spread_props) {\n\treturn typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n","import { set_current_component, current_component } from './lifecycle.js';\nimport { run_all, blank_object } from './utils.js';\nimport { boolean_attributes } from '../../shared/boolean_attributes.js';\nimport { ensure_array_like } from './each.js';\nimport { escape } from '../../shared/utils/escape.js';\nexport { is_void } from '../../shared/utils/names.js';\nexport { escape };\n\nexport const invalid_attribute_name_character =\n\t/[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\n\n/** @returns {string} */\nexport function spread(args, attrs_to_add) {\n\tconst attributes = Object.assign({}, ...args);\n\tif (attrs_to_add) {\n\t\tconst classes_to_add = attrs_to_add.classes;\n\t\tconst styles_to_add = attrs_to_add.styles;\n\t\tif (classes_to_add) {\n\t\t\tif (attributes.class == null) {\n\t\t\t\tattributes.class = classes_to_add;\n\t\t\t} else {\n\t\t\t\tattributes.class += ' ' + classes_to_add;\n\t\t\t}\n\t\t}\n\t\tif (styles_to_add) {\n\t\t\tif (attributes.style == null) {\n\t\t\t\tattributes.style = style_object_to_string(styles_to_add);\n\t\t\t} else {\n\t\t\t\tattributes.style = style_object_to_string(\n\t\t\t\t\tmerge_ssr_styles(attributes.style, styles_to_add)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tlet str = '';\n\tObject.keys(attributes).forEach((name) => {\n\t\tif (invalid_attribute_name_character.test(name)) return;\n\t\tconst value = attributes[name];\n\t\tif (value === true) str += ' ' + name;\n\t\telse if (boolean_attributes.has(name.toLowerCase())) {\n\t\t\tif (value) str += ' ' + name;\n\t\t} else if (value != null) {\n\t\t\tstr += ` ${name}=\"${value}\"`;\n\t\t}\n\t});\n\treturn str;\n}\n\n/** @returns {{}} */\nexport function merge_ssr_styles(style_attribute, style_directive) {\n\tconst style_object = {};\n\tfor (const individual_style of style_attribute.split(';')) {\n\t\tconst colon_index = individual_style.indexOf(':');\n\t\tconst name = individual_style.slice(0, colon_index).trim();\n\t\tconst value = individual_style.slice(colon_index + 1).trim();\n\t\tif (!name) continue;\n\t\tstyle_object[name] = value;\n\t}\n\tfor (const name in style_directive) {\n\t\tconst value = style_directive[name];\n\t\tif (value) {\n\t\t\tstyle_object[name] = value;\n\t\t} else {\n\t\t\tdelete style_object[name];\n\t\t}\n\t}\n\treturn style_object;\n}\n\nexport function escape_attribute_value(value) {\n\t// keep booleans, null, and undefined for the sake of `spread`\n\tconst should_escape = typeof value === 'string' || (value && typeof value === 'object');\n\treturn should_escape ? escape(value, true) : value;\n}\n\n/** @returns {{}} */\nexport function escape_object(obj) {\n\tconst result = {};\n\tfor (const key in obj) {\n\t\tresult[key] = escape_attribute_value(obj[key]);\n\t}\n\treturn result;\n}\n\n/** @returns {string} */\nexport function each(items, fn) {\n\titems = ensure_array_like(items);\n\tlet str = '';\n\tfor (let i = 0; i < items.length; i += 1) {\n\t\tstr += fn(items[i], i);\n\t}\n\treturn str;\n}\n\nexport const missing_component = {\n\t$$render: () => ''\n};\n\nexport function validate_component(component, name) {\n\tif (!component || !component.$$render) {\n\t\tif (name === 'svelte:component') name += ' this={...}';\n\t\tthrow new Error(\n\t\t\t`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules. Otherwise you may need to fix a <${name}>.`\n\t\t);\n\t}\n\treturn component;\n}\n\n/** @returns {string} */\nexport function debug(file, line, column, values) {\n\tconsole.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n\tconsole.log(values); // eslint-disable-line no-console\n\treturn '';\n}\n\nlet on_destroy;\n\n/** @returns {{ render: (props?: {}, { $$slots, context }?: { $$slots?: {}; context?: Map<any, any>; }) => { html: any; css: { code: string; map: any; }; head: string; }; $$render: (result: any, props: any, bindings: any, slots: any, context: any) => any; }} */\nexport function create_ssr_component(fn) {\n\tfunction $$render(result, props, bindings, slots, context) {\n\t\tconst parent_component = current_component;\n\t\tconst $$ = {\n\t\t\ton_destroy,\n\t\t\tcontext: new Map(context || (parent_component ? parent_component.$$.context : [])),\n\t\t\t// these will be immediately discarded\n\t\t\ton_mount: [],\n\t\t\tbefore_update: [],\n\t\t\tafter_update: [],\n\t\t\tcallbacks: blank_object()\n\t\t};\n\t\tset_current_component({ $$ });\n\t\tconst html = fn(result, props, bindings, slots);\n\t\tset_current_component(parent_component);\n\t\treturn html;\n\t}\n\treturn {\n\t\trender: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n\t\t\ton_destroy = [];\n\t\t\tconst result = { title: '', head: '', css: new Set() };\n\t\t\tconst html = $$render(result, props, {}, $$slots, context);\n\t\t\trun_all(on_destroy);\n\t\t\treturn {\n\t\t\t\thtml,\n\t\t\t\tcss: {\n\t\t\t\t\tcode: Array.from(result.css)\n\t\t\t\t\t\t.map((css) => css.code)\n\t\t\t\t\t\t.join('\\n'),\n\t\t\t\t\tmap: null // TODO\n\t\t\t\t},\n\t\t\t\thead: result.title + result.head\n\t\t\t};\n\t\t},\n\t\t$$render\n\t};\n}\n\n/** @returns {string} */\nexport function add_attribute(name, value, boolean) {\n\tif (value == null || (boolean && !value)) return '';\n\tconst assignment = boolean && value === true ? '' : `=\"${escape(value, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/** @returns {string} */\nexport function add_classes(classes) {\n\treturn classes ? ` class=\"${classes}\"` : '';\n}\n\n/** @returns {string} */\nfunction style_object_to_string(style_object) {\n\treturn Object.keys(style_object)\n\t\t.filter((key) => style_object[key] != null && style_object[key] !== '')\n\t\t.map((key) => `${key}: ${escape_attribute_value(style_object[key])};`)\n\t\t.join(' ');\n}\n\n/** @returns {string} */\nexport function add_styles(style_object) {\n\tconst styles = style_object_to_string(style_object);\n\treturn styles ? ` style=\"${styles}\"` : '';\n}\n","import {\n\tadd_render_callback,\n\tflush,\n\tflush_render_callbacks,\n\tschedule_update,\n\tdirty_components\n} from './scheduler.js';\nimport { current_component, set_current_component } from './lifecycle.js';\nimport { blank_object, is_empty, is_function, run, run_all, noop } from './utils.js';\nimport {\n\tchildren,\n\tdetach,\n\tstart_hydrating,\n\tend_hydrating,\n\tget_custom_elements_slots,\n\tinsert,\n\telement,\n\tattr\n} from './dom.js';\nimport { transition_in } from './transitions.js';\n\n/** @returns {void} */\nexport function bind(component, name, callback) {\n\tconst index = component.$$.props[name];\n\tif (index !== undefined) {\n\t\tcomponent.$$.bound[index] = callback;\n\t\tcallback(component.$$.ctx[index]);\n\t}\n}\n\n/** @returns {void} */\nexport function create_component(block) {\n\tblock && block.c();\n}\n\n/** @returns {void} */\nexport function claim_component(block, parent_nodes) {\n\tblock && block.l(parent_nodes);\n}\n\n/** @returns {void} */\nexport function mount_component(component, target, anchor) {\n\tconst { fragment, after_update } = component.$$;\n\tfragment && fragment.m(target, anchor);\n\t// onMount happens before the initial afterUpdate\n\tadd_render_callback(() => {\n\t\tconst new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n\t\t// if the component was destroyed immediately\n\t\t// it will update the `$$.on_destroy` reference to `null`.\n\t\t// the destructured on_destroy may still reference to the old array\n\t\tif (component.$$.on_destroy) {\n\t\t\tcomponent.$$.on_destroy.push(...new_on_destroy);\n\t\t} else {\n\t\t\t// Edge case - component was destroyed immediately,\n\t\t\t// most likely as a result of a binding initialising\n\t\t\trun_all(new_on_destroy);\n\t\t}\n\t\tcomponent.$$.on_mount = [];\n\t});\n\tafter_update.forEach(add_render_callback);\n}\n\n/** @returns {void} */\nexport function destroy_component(component, detaching) {\n\tconst $$ = component.$$;\n\tif ($$.fragment !== null) {\n\t\tflush_render_callbacks($$.after_update);\n\t\trun_all($$.on_destroy);\n\t\t$$.fragment && $$.fragment.d(detaching);\n\t\t// TODO null out other refs, including component.$$ (but need to\n\t\t// preserve final state?)\n\t\t$$.on_destroy = $$.fragment = null;\n\t\t$$.ctx = [];\n\t}\n}\n\n/** @returns {void} */\nfunction make_dirty(component, i) {\n\tif (component.$$.dirty[0] === -1) {\n\t\tdirty_components.push(component);\n\t\tschedule_update();\n\t\tcomponent.$$.dirty.fill(0);\n\t}\n\tcomponent.$$.dirty[(i / 31) | 0] |= 1 << i % 31;\n}\n\n// TODO: Document the other params\n/**\n * @param {SvelteComponent} component\n * @param {import('./public.js').ComponentConstructorOptions} options\n *\n * @param {import('./utils.js')['not_equal']} not_equal Used to compare props and state values.\n * @param {(target: Element | ShadowRoot) => void} [append_styles] Function that appends styles to the DOM when the component is first initialised.\n * This will be the `add_css` function from the compiled component.\n *\n * @returns {void}\n */\nexport function init(\n\tcomponent,\n\toptions,\n\tinstance,\n\tcreate_fragment,\n\tnot_equal,\n\tprops,\n\tappend_styles = null,\n\tdirty = [-1]\n) {\n\tconst parent_component = current_component;\n\tset_current_component(component);\n\t/** @type {import('./private.js').T$$} */\n\tconst $$ = (component.$$ = {\n\t\tfragment: null,\n\t\tctx: [],\n\t\t// state\n\t\tprops,\n\t\tupdate: noop,\n\t\tnot_equal,\n\t\tbound: blank_object(),\n\t\t// lifecycle\n\t\ton_mount: [],\n\t\ton_destroy: [],\n\t\ton_disconnect: [],\n\t\tbefore_update: [],\n\t\tafter_update: [],\n\t\tcontext: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n\t\t// everything else\n\t\tcallbacks: blank_object(),\n\t\tdirty,\n\t\tskip_bound: false,\n\t\troot: options.target || parent_component.$$.root\n\t});\n\tappend_styles && append_styles($$.root);\n\tlet ready = false;\n\t$$.ctx = instance\n\t\t? instance(component, options.props || {}, (i, ret, ...rest) => {\n\t\t\t\tconst value = rest.length ? rest[0] : ret;\n\t\t\t\tif ($$.ctx && not_equal($$.ctx[i], ($$.ctx[i] = value))) {\n\t\t\t\t\tif (!$$.skip_bound && $$.bound[i]) $$.bound[i](value);\n\t\t\t\t\tif (ready) make_dirty(component, i);\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t  })\n\t\t: [];\n\t$$.update();\n\tready = true;\n\trun_all($$.before_update);\n\t// `false` as a special case of no DOM component\n\t$$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n\tif (options.target) {\n\t\tif (options.hydrate) {\n\t\t\tstart_hydrating();\n\t\t\t// TODO: what is the correct type here?\n\t\t\t// @ts-expect-error\n\t\t\tconst nodes = children(options.target);\n\t\t\t$$.fragment && $$.fragment.l(nodes);\n\t\t\tnodes.forEach(detach);\n\t\t} else {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t$$.fragment && $$.fragment.c();\n\t\t}\n\t\tif (options.intro) transition_in(component.$$.fragment);\n\t\tmount_component(component, options.target, options.anchor);\n\t\tend_hydrating();\n\t\tflush();\n\t}\n\tset_current_component(parent_component);\n}\n\nexport let SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, Function[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<Function, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\n\t\tconstructor($$componentCtor, $$slots, use_shadow_dom) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\t\t\tif (use_shadow_dom) {\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t}\n\t\t}\n\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.$$l[type]) {\n\t\t\t\tconst idx = this.$$l[type].indexOf(listener);\n\t\t\t\tif (idx >= 0) {\n\t\t\t\t\tthis.$$l[type].splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tlet node;\n\t\t\t\t\t\tconst obj = {\n\t\t\t\t\t\t\tc: function create() {\n\t\t\t\t\t\t\t\tnode = element('slot');\n\t\t\t\t\t\t\t\tif (name !== 'default') {\n\t\t\t\t\t\t\t\t\tattr(node, 'name', name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @param {HTMLElement} target\n\t\t\t\t\t\t\t * @param {HTMLElement} [anchor]\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tm: function mount(target, anchor) {\n\t\t\t\t\t\t\t\tinsert(target, node, anchor);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\td: function destroy(detaching) {\n\t\t\t\t\t\t\t\tif (detaching) {\n\t\t\t\t\t\t\t\t\tdetach(node);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\t$$slots[name] = [create_slot(name)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = new this.$$ctor({\n\t\t\t\t\ttarget: this.shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$scope: {\n\t\t\t\t\t\t\tctx: []\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tconst reflect_attributes = () => {\n\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t\tthis.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]];\n\t\t\t\t\t\tif (this.$$p_d[key].reflect) {\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.$$r = false;\n\t\t\t\t};\n\t\t\t\tthis.$$c.$$.after_update.push(reflect_attributes);\n\t\t\t\treflect_attributes(); // once initially because after_update is added too late for first render\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn && this.$$c) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tObject.keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {import('./public.js').ComponentType} Component  A Svelte component constructor\n * @param {Record<string, CustomElementPropDefinition>} props_definition  The props to observe\n * @param {string[]} slots  The slots to create\n * @param {string[]} accessors  Other accessors besides the ones for props the component has\n * @param {boolean} use_shadow_dom  Whether to use shadow DOM\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\taccessors,\n\tuse_shadow_dom,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, use_shadow_dom);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn Object.keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tObject.keys(props_definition).forEach((prop) => {\n\t\tObject.defineProperty(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tthis.$$c?.$set({ [prop]: value });\n\t\t\t}\n\t\t});\n\t});\n\taccessors.forEach((accessor) => {\n\t\tObject.defineProperty(Class.prototype, accessor, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[accessor];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ (Class);\n\treturn Class;\n}\n\n/**\n * Base class for Svelte components. Used when dev=false.\n *\n * @template {Record<string, any>} [Props=any]\n * @template {Record<string, any>} [Events=any]\n */\nexport class SvelteComponent {\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$ = undefined;\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$set = undefined;\n\n\t/** @returns {void} */\n\t$destroy() {\n\t\tdestroy_component(this, 1);\n\t\tthis.$destroy = noop;\n\t}\n\n\t/**\n\t * @template {Extract<keyof Events, string>} K\n\t * @param {K} type\n\t * @param {((e: Events[K]) => void) | null | undefined} callback\n\t * @returns {() => void}\n\t */\n\t$on(type, callback) {\n\t\tif (!is_function(callback)) {\n\t\t\treturn noop;\n\t\t}\n\t\tconst callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);\n\t\tcallbacks.push(callback);\n\t\treturn () => {\n\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * @param {Partial<Props>} props\n\t * @returns {void}\n\t */\n\t$set(props) {\n\t\tif (this.$$set && !is_empty(props)) {\n\t\t\tthis.$$.skip_bound = true;\n\t\t\tthis.$$set(props);\n\t\t\tthis.$$.skip_bound = false;\n\t\t}\n\t}\n}\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '4.2.20';\nexport const PUBLIC_VERSION = '4';\n","//import { autoRecMigration } from \"../mergeScripts/autorec/autoRecMerge.js\";\nimport { debug } from \"svelte/internal\";\nimport { custom_warning } from \"../constants/constants\";\n\nexport class AAAutorecFunctions {\n\n    static rinseName(oldName) {\n        if (!oldName) { return; }\n        const newName = oldName.replace(/\\s+/g, '').toLowerCase();\n        return newName;\n    }\n\n    static sortAndFilterMenus(menus) {\n\n        let combinedMenus = [];\n        for (const key in menus) {\n            combinedMenus = [...combinedMenus, ...menus[key]];\n        }\n\n        let sortedMenus = combinedMenus.sort((a, b) => b.label?.replace(/\\s+/g, '').length - a.label?.replace(/\\s+/g, '').length);\n        return {\n            exactMatchMenus: sortedMenus.filter(x => x.advanced?.exactMatch),\n            bestMatchMenus: sortedMenus.filter(x => !x.advanced?.exactMatch),\n        }\n    }\n\n    static allMenuSearch(menus, rinsedName, trueName) {\n        return menus.exactMatchMenus.find(x => x.label && x.label === trueName)\n        || \n        menus.bestMatchMenus.find(x => \n            x.advanced?.excludedTerms?.length ? \n            x.label && rinsedName.includes(this.rinseName(x.label)) && !x.advanced.excludedTerms.some(el => rinsedName.includes(this.rinseName(el)))\n            :\n            x.label && rinsedName.includes(this.rinseName(x.label))\n        ) \n        || false;\n    }\n    /*\n    static allMenuSearch(menus, name) {\n\n        let combinedMenus = [...menus.melee, ...menus.range, ...menus.ontoken,\n            ...menus.templatefx, ...menus.aura, ...menus.preset];\n\n        let sortedMenus = combinedMenus.sort((a, b) => b.label?.replace(/\\s+/g, '').length - a.label?.replace(/\\s+/g, '').length);\n\n        return sortedMenus.find(x => x.label && name.includes(this.rinseName(x.label))) || false;\n    }\n    */\n\n    static allMenuTrueSearch(menus, rinsedName, trueName) {\n        return menus.exactMatchMenus.find(x => x.label && x.label === trueName)\n        || \n        menus.bestMatchMenus.find(x => \n            x.advanced?.excludedTerms?.length ? \n            x.label && rinsedName.includes(this.rinseName(x.label)) && !x.advanced.excludedTerms.some(el => rinsedName.includes(this.rinseName(el)))\n            :\n            x.label && rinsedName.includes(this.rinseName(x.label))\n        ) \n        || false;\n    }\n\n    static sortAndFilterAllMenus(menus) {\n\n        let combinedMenus = [...menus.melee, ...menus.range, ...menus.ontoken,\n            ...menus.templatefx, ...menus.aura, ...menus.preset, ...menus.aefx];\n\n        let sortedMenus = combinedMenus.sort((a, b) => b.label?.replace(/\\s+/g, '').length - a.label?.replace(/\\s+/g, '').length);\n        return {\n            exactMatchMenus: sortedMenus.filter(x => x.advanced?.exactMatch),\n            bestMatchMenus: sortedMenus.filter(x => !x.advanced?.exactMatch),\n        }\n    }\n\n    static singleMenuSearch(menu, rinsedName, trueName) {\n\n        if (!rinsedName) { \n            custom_warning(\"No Name was provided for the Global Menu search\")\n            return;\n        }\n\n        if(!Array.isArray(menu)) {\n            menu = Object.values(menu).flat();\n        }\n\n        let sortedMenu = menu.sort((a, b) => b.label.replace(/\\s+/g, '').length - a.label?.replace(/\\s+/g, '').length);\n\n        let exactMatchMenus = sortedMenu.filter(x => x.advanced?.exactMatch);\n        let bestMatchMenus = sortedMenu.filter(x => !x.advanced?.exactMatch);\n\n        return exactMatchMenus.find(x => x.label && x.label === trueName)\n        || \n        bestMatchMenus.find(x => \n            x.advanced?.excludedTerms?.length ? \n            x.label && rinsedName.includes(this.rinseName(x.label)) && !x.advanced.excludedTerms.some(el => rinsedName.includes(this.rinseName(el)))\n            :\n            x.label && rinsedName.includes(this.rinseName(x.label))\n        ) \n        || false;        \n        //return exactMatchMenus.find(x => x.label && x.label === trueName) || bestMatchMenus.find(x => x.label && name.includes(this.rinseName(x.label))) || false;\n        //return sortedMenu.find(x => name.includes(this.rinseName(x.label))) || false;\n    }\n\n    static singleMenuStrictSearch(menu, name) {\n\n        if (!name) { \n            custom_warning(\"No Name was provided for the Global Menu search\")\n            return;\n        }\n\n        return menu.find(x => name === this.rinseName(x.label)) || false;\n    }\n\n    static getAllLabelsInMenu(menu) {\n\n        const nameArray = []\n\n        for (var i = 0; i < menu.length; i++) {\n            if (!menu[i].label) { continue }\n            nameArray.push(this.rinseName(menu[i].label))\n        }\n        return nameArray;\n    }\n\n    static sortMenu(menu) {\n\n        let sortedMenu = menu.sort((a, b) => b.label.replace(/\\s+/g, '').length - a.label.replace(/\\s+/g, '').length);\n\n        return sortedMenus;\n    }\n\n    // If an Autorec section has advanced search features enabled for excluding an Item property, this will check that property against that of the item used\n    static checkExcludedProperty(item, property, path = \"\") {\n        if (!path || !property || !item) { return; }\n\n        let value = path.split('.').reduce((a,b) => a[b], item);\n        if (typeof value !== \"string\") {\n            debug(\"Invalid path for Excluded Item type\", path)\n            return false\n        }\n\n        return this.rinseName(property) === this.rinseName(value)\n    }\n}","import { flagMigrations } from \"../mergeScripts/items/itemFlagMerge.js\";\nimport { AAAutorecFunctions } from \"../aa-classes/aaAutorecFunctions.js\";\nimport { debug } from \"../constants/constants.js\";\n\nexport async function handleItem(data) {\n\n    // GTFO if no Item was sent\n    if (!data.item) { return; };\n\n    const item = data.item;\n    const activity = data.activity;\n    const itemName = item.name ?? item.label;\n    const rinsedItemName = itemName ? AAAutorecFunctions.rinseName(itemName) : \"noitem\";\n\n    const ammoItem = data.ammoItem;\n    const rinsedAmmoName = ammoItem?.name ? AAAutorecFunctions.rinseName(ammoItem.name) : \"\";\n\n    // Send Item and Activity thru Flag Merge\n    const itemFlags = await flagMigrations.handle(data.item, {activeEffect: data.activeEffect}) || {};\n    const activityFlags = activity ? await flagMigrations.handle(activity, {activeEffect: data.activeEffect}) || {} : null;\n    // If Item has Ammunition send it thru the Flag Merge\n    const ammoFlags = ammoItem ? await flagMigrations.handle(ammoItem, {activeEffect: data.activeEffect}) || {isEnabled: true} : null;\n    \n    let autorecDisabled = game.settings.get(\"autoanimations\", \"disableAutoRec\");\n    if (autorecDisabled) {\n        debug(\"Global Automatic Recognition menu is Disabled from the Module Settings\");\n    }\n\n    const autorecSettings = {\n        melee: game.settings.get(\"autoanimations\", \"aaAutorec-melee\"),\n        range: game.settings.get(\"autoanimations\", \"aaAutorec-range\"),\n        ontoken: game.settings.get(\"autoanimations\", \"aaAutorec-ontoken\"),\n        templatefx: game.settings.get(\"autoanimations\", \"aaAutorec-templatefx\"),\n        aura: game.settings.get(\"autoanimations\", \"aaAutorec-aura\"),\n        preset: game.settings.get(\"autoanimations\", \"aaAutorec-preset\"),\n        aefx: data.activeEffect ? game.settings.get(\"autoanimations\", \"aaAutorec-aefx\") : [],\n    }\n\n    let menus = AAAutorecFunctions.sortAndFilterMenus(autorecSettings);\n\n    let autorecObject;\n\n    // If Item has Ammo, search for matching animations. If found, return it, otherwise keep going\n    if (ammoItem && ammoFlags.isEnabled) {\n        if (ammoFlags.isCustomized) {\n            return ammoFlags;\n        } else if (!autorecDisabled) {\n            autorecObject = AAAutorecFunctions.allMenuSearch(menus, rinsedAmmoName, ammoItem?.name || \"\");\n        }\n        if (autorecObject) { return autorecObject }\n    }\n\n    const activityIsEnabled = activityFlags ? (!!activityFlags.killAnim ? false : activityFlags.isEnabled ?? true) : true;\n    if (!activityIsEnabled) { return false }\n\n    const itemIsEnabled = !!itemFlags.killAnim ? false : itemFlags.isEnabled ?? true;\n    if (!itemIsEnabled) { return false }\n    \n    if (data.activeEffect) {\n        if (itemFlags.isCustomized) {\n            return itemFlags\n        } else if (!autorecDisabled) {\n            autorecObject = AAAutorecFunctions.singleMenuSearch(autorecSettings.aefx, rinsedItemName, itemName);\n            return autorecObject;\n        }\n    } else {\n        if (activityFlags?.isCustomized) {\n            return activityFlags;\n        } else if (itemFlags.isCustomized) {\n            return itemFlags;\n        } else if (!autorecDisabled) {\n            const prioritizedNames = [...(data.overrideNames || []), itemName, ...(data.extraNames || [])];\n            prioritizedNames.find((name) => {\n                const rinsedName = AAAutorecFunctions.rinseName(name);\n                const found = AAAutorecFunctions.allMenuSearch(menus, rinsedName, name);\n                if (found) {\n                    autorecObject = found;\n                    data.rinsedName = rinsedName;\n                }\n                return !!found;\n            });\n\n            if (!autorecObject && data.isVariant && !data.isTemplate) {\n                let originalItemName = data.originalItem?.name\n                let originalRinsedName = originalItemName ? AAAutorecFunctions.rinseName(originalItemName) : \"noitem\"\n                autorecObject = AAAutorecFunctions.allMenuSearch(menus, originalRinsedName, originalItemName);\n            }\n        }\n    }\n\n    if (autorecObject && data.isTemplate && !autorecDisabled) {\n        let data = autorecObject;\n        if (data.menu === \"range\" || data.menu === \"melee\" || data.menu === \"ontoken\") {\n            autorecObject = AAAutorecFunctions.singleMenuSearch(autorecSettings.templatefx, rinsedItemName, itemName);\n        }\n    } else if ( data.isVariant && !autorecObject && data.isTemplate && !autorecDisabled) {\n        // For use with Variant spell casting, based off PF2e. If the variant name is not found in the Global menu, it looks for one matching the original name\n        let newItemName = data.originalItem?.name;\n        let newRinsedName = newItemName ? AAAutorecFunctions.rinseName(newItemName) : \"noitem\";\n        autorecObject = AAAutorecFunctions.allMenuSearch(menus, newRinsedName, newItemName);\n    }\n    return autorecObject;\n}\n","export function sourceEffect(sourceFX, seq, handler) {\n    const options = sourceFX.options;\n    if (sourceFX.sound) {\n        seq.addSequence(sourceFX.sound)\n    }\n    let thisSeq = seq.effect()\n        .file(sourceFX.path.file)\n        .anchor({ x: options.anchor.x, y: options.anchor.y })\n        .fadeIn(options.fadeIn)\n        .opacity(options.opacity)\n        .origin(handler.itemUuid)\n        .playbackRate(options.playbackRate)\n        .repeats(options.repeat, options.repeatDelay)\n        .size(handler.getSize(options.isRadius, options.size, handler.sourceToken, options.addTokenWidth), { gridUnits: true })\n        .zIndex(options.zIndex)\n\n    if (options.elevation === 0) {\n        thisSeq.belowTokens(true)\n    } else {\n        thisSeq.elevation(options.isAbsolute ? options.elevation : options.elevation - 1, { absolute: options.isAbsolute })\n    }\n    if (options.tint) {\n        thisSeq.tint(options.tintColor)\n        thisSeq.filter(\"ColorMatrix\", { contrast: options.contrast, saturate: options.saturation })\n    }\n    if (options.animationSource) {\n        thisSeq.atLocation({ x: options.fakeLocation.x, y: options.fakeLocation.y })\n    } else {\n        if (options.persistent) {\n            thisSeq.attachTo(handler.sourceToken)\n            thisSeq.persist(true, { persistTokenPrototype: true })\n        } else {\n            thisSeq.attachTo(handler.sourceToken)\n        }\n    }\n    if (options.isMasked) {\n        thisSeq.mask(handler.sourceToken)\n    }\n    if (handler.systemData.tieToDocuments) {\n        thisSeq.tieToDocuments(handler.item)\n    }\n    if (sourceFX.video.variant === \"complete\" || sourceFX.video.animation === \"complete\") { }\n    else { thisSeq.fadeOut(options.fadeOut) }\n    if (options.isWait) { thisSeq.waitUntilFinished(options.delay) }\n    else { thisSeq.delay(options.delay) }\n}\n\nexport function secondaryEffect(secondary, seq, targetArray, targetEnabled = false, missable = false, handler) {\n    const options = secondary.options;\n    if (secondary.sound) {\n        seq.addSequence(secondary.sound)\n    }\n    for (let i = 0; i < targetArray.length; i++) {\n        let currentTarget = targetArray[i];\n\n        let thisSeq = seq.effect()\n            .file(secondary.path?.file)\n            .anchor({ x: options.anchor.x, y: options.anchor.y })\n            .atLocation(missable ? `spot ${currentTarget.id}` : currentTarget)\n            .fadeIn(options.fadeIn)\n            .fadeOut(options.fadeOut)\n            .opacity(options.opacity)\n            .origin(handler.itemUuid)\n            .playbackRate(options.playbackRate)\n            .repeats(options.repeat, options.repeatDelay)\n            .size(handler.getSize(options.isRadius, options.size, currentTarget, options.addTokenWidth), { gridUnits: true })\n            .zIndex(options.zIndex)\n\n        if (options.elevation === 0) {\n            thisSeq.belowTokens(true)\n        } else {\n            thisSeq.elevation(handler.elevation(currentTarget, options.isAbsolute, options.elevation), { absolute: options.isAbsolute })\n        }\n        if (options.tint) {\n            thisSeq.tint(options.tintColor)\n            thisSeq.filter(\"ColorMatrix\", { contrast: options.contrast, saturate: options.saturation })\n        }\n        if (i === handler.allTargets.length - 1 && options.isWait && targetEnabled) {\n            thisSeq.waitUntilFinished(options.delay)\n        } else if (!options.isWait) {\n            thisSeq.delay(options.delay)\n        }\n        if (options.rotateSource) {\n            thisSeq.rotateTowards(handler.sourceToken)\n            thisSeq.rotate(180)\n        }\n        if (options.isMasked) {\n            thisSeq.mask(currentTarget)\n        }\n    }\n}\n\nexport function targetEffect(targetFX, seq, targetArray, missable = false, handler) {\n    const options = targetFX.options;\n    if (targetFX.sound) {\n        seq.addSequence(targetFX.sound)\n    }\n    for (let i = 0; i < targetArray.length; i++) {\n        let currentTarget = targetArray[i];\n        let checkAnim = Sequencer.EffectManager.getEffects({ object: currentTarget, origin: handler.itemUuid }).length > 0;\n        if (checkAnim) { continue; }\n\n        let thisSeq = seq.effect()\n            .file(targetFX.path?.file)\n            .anchor({ x: options.anchor.x, y: options.anchor.y })\n            .delay(options.delay)\n            .fadeIn(options.fadeIn)\n            .opacity(options.opacity)\n            .origin(handler.itemUuid)\n            .playbackRate(options.playbackRate)\n            .repeats(options.repeat, options.repeatDelay)\n            .size(handler.getSize(options.isRadius, options.size, currentTarget, options.addTokenWidth), { gridUnits: true })\n            .zIndex(options.zIndex)\n\n        if (options.elevation === 0) {\n            thisSeq.belowTokens(true)\n        } else {\n            thisSeq.elevation(handler.elevation(currentTarget, options.isAbsolute, options.elevation), { absolute: options.isAbsolute })\n        }\n        if (options.tint) {\n            thisSeq.tint(options.tintColor)\n            thisSeq.filter(\"ColorMatrix\", { contrast: options.contrast, saturate: options.saturation })\n        }\n        if (options.persistent) {\n            thisSeq.persist(true, { persistTokenPrototype: true })\n            thisSeq.attachTo(currentTarget, { bindVisibility: targetFX.options.unbindVisibility, bindAlpha: targetFX.options.unbindAlpha })\n        } else {\n            thisSeq.atLocation(missable ? `spot ${currentTarget.id}` : currentTarget)\n        }\n        if (options.rotateSource) {\n            thisSeq.rotateTowards(handler.sourceToken)\n            thisSeq.rotate(180)\n        }\n        if (options.isMasked) {\n            thisSeq.mask(currentTarget)\n        }\n        if (targetFX.video?.variant === \"complete\" || targetFX.video?.animation === \"complete\") { } else {\n            thisSeq.fadeOut(options.fadeOut)\n        }\n    }\n}\n\nexport function macroSection(seq, macro, handler) {\n    let userData = macro.args\n    if (foundry.utils.isNewerVersion(game.version, 11)) {\n        seq.macro(macro.name, { args: [handler.workflow, handler, userData] })\n    } else {\n        if (game.modules.get(\"advanced-macros\")?.active) {\n            seq.macro(macro.name, handler.workflow, handler, userData)\n        } else {\n            seq.macro(macro.name)\n        }\n    }\n}\n","let enabled = true;\n\n/**\n * Provides a centralized location to check if animation is enabled.\n */\nexport class AnimationState {\n   static get enabled() { return enabled; }\n\n   static set enabled(newEnabled)\n   {\n      enabled = newEnabled;\n   }\n}","import { Hashing } from \"#runtime/util\";\nimport { debug, custom_notify } from \"../constants/constants.js\";\nimport { handleItem } from \"./findAnimation.js\";\n// import { endTiming } from \"../constants/timings.js\";\nimport { sourceEffect, secondaryEffect, targetEffect, macroSection } from \"./commonSequences.js\";\nimport { AnimationState } from \"../AnimationState.js\";\n\nexport default class AAHandler {\n    static async make(data) {\n        if (!AnimationState.enabled) {\n            custom_notify(\"Animations are Disabled from the Automated Animations Settings\", true);\n            return false;\n        }\n        // Deep Clones the data sent by the system prep\n        let clonedData = foundry.utils.deepClone(data);\n\n        // Checks the item for any animation data on the item itself, or in the global menu\n        let animationData = await handleItem(clonedData);\n\n        // Hook to signify the start of the A-A workflow;\n        Hooks.callAll(\"AutomatedAnimations-WorkflowStart\", clonedData, animationData);\n\n        // Can be added from the above Hook to stop the A-A workflow\n        if (clonedData.stopWorkflow) {\n            debug(`Animation Workflow was interrupted by an External Source`, clonedData )\n            return;\n        }\n\n        // recheckAnimation can be passed as a Boolean to let A-A know it needs to recheck for Animations.\n        // Useful for changing out the Item to be processed mid-stream\n        let newAnimationData;\n        if (clonedData.recheckAnimation) {\n            newAnimationData = await handleItem(clonedData);\n            // If no Animation data is found for the newly passed Item, resets to the Original Item\n            if (!newAnimationData) {\n                clonedData.item = data.item\n            }\n        }\n\n        // If no Animation data is matched, returns False and stops workflow\n        if (!animationData && !newAnimationData) {\n            debug(`No Animation matched for Item`, clonedData )\n            return false;\n        }\n\n        // Determines the animation data to be used, either original or new.\n        let finalAnimationData = newAnimationData ? newAnimationData : animationData\n        return new AAHandler({...clonedData, finalAnimationData});\n    }\n    constructor (data) {\n        debug(\"Compiling Automated Animations data\");\n\n        this.animationData = data.finalAnimationData;\n\n        this.isActiveEffect = data.activeEffect ?? false;\n\n        this.systemId = game.system.id;\n        this.workflow = this.isActiveEffect ? \"on\" : data.workflow;\n        if (this.isActiveEffect) {\n            this.workflowBackup = data.workflow;\n        }\n\n        this.sourceToken = data.token?.isEmbedded ? data.token?.object : data.token;\n\n        this.item = data.ammoItem || data.item;\n        this.itemUuid = this.item?.uuid || Hashing.uuidv4();\n        this.itemName = this.item.name ?? this.item.label;\n        this.rinsedName = data.rinsedName || this.itemName ? this.itemName.replace(/\\s+/g, '').toLowerCase() : \"\";\n\n        this.reachCheck = data.reach || 0;\n        this.allTargets = data.targets;\n        this.hitTargets = data.hitTargets;\n        if (data.hit && !this.hitTargets) this.hitTargets = data.targets;\n        this.hitTargets ??= [];\n        this.hitTargetsId = Array.from(this.hitTargets.filter(actor => actor.id).map(actor => actor.id));\n        this.playOnMiss = data.playOnMiss ?? (game.modules.get('midi-qol')?.active || game.system.id === 'pf2e'  || game.system.id === 'sf2e' || game.system.id === 'dnd5e' ? game.settings.get(\"autoanimations\", \"playonmiss\") : false) ?? false;\n\n        this.menu = this.animationData.menu;\n\n        this.templateData = data.templateData;\n\n        this.sequenceData = {moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")}\n\n        this.systemData = data;\n        /**\n         * Optional parameters passed from System Specific Settings thru this.systemData:\n         * @param {Number} overrideRepeat // override the Repeat parameter for Primary and Secondary animations\n         * @param {Boolean} forceMiss // force a Ranged animation to use the .missed() method\n         * @param {Boolean} tieToDocuments // sets the Sequencer method for .tieToDocument()\n         */\n    }\n\n    get isTemplateAnimation () {\n        const presetType = this.animationData.presetType;\n        return this.menu === 'templatefx' ||  (this.menu === 'preset' && presetType === \"proToTemp\") || (this.menu === 'preset' && presetType === \"thunderwave\")\n    }\n\n    get isAura () {\n        return this.menu === \"aura\"\n    }\n\n    get isTeleport() {\n        if (this.menu !== 'preset') {\n            return false;\n        }\n        return this.animationData.presetType === \"teleportation\";\n    }\n\n    get macroActive() {\n        return this.flags.macro?.enable && this.flags.macro?.name\n    }\n\n    // Sets the Elevation of the Effect\n    elevation(token = {}, abs = false, level = 0) {\n        return abs ? level : level - 1;\n    }\n\n    // Sets the Size of the effect\n    getSize(isRadius = false, size = 1, token, addToken = false) {\n        const td = token.document;\n        const maxSize = Math.max(td.width * td.texture.scaleX, td.height * td.texture.scaleY) / (td.ring.enabled*td.ring.subject.scale || 1);\n        if (isRadius && addToken) return (size * 2) + maxSize;\n        if (isRadius) return size * 2;\n        return maxSize * 1.5 * size;\n    }\n\n    getDistance(target) {\n        if (this.systemId === \"pf1\") {\n            // This code was provided by David (AKA Claudekennilol) specific for PF1\n            const scene = game.scenes.active;\n            const gridSize = scene.grid.size;\n\n            const left = (token) => token.x;\n            const right = (token) => token.x + token.w;\n            const top = (token) => token.y;\n            const bottom = (token) => token.y + token.h;\n\n            const isLeftOf = right(this.sourceToken) <= left(target);\n            const isRightOf = left(this.sourceToken) >= right(target);\n            const isAbove = bottom(this.sourceToken) <= top(target);\n            const isBelow = top(this.sourceToken) >= bottom(target);\n\n            let x1 = left(this.sourceToken);\n            let x2 = left(target);\n            let y1 = top(this.sourceToken);\n            let y2 = top(target);\n\n            if (isLeftOf) {\n                x1 += (this.sourceToken.document.width - 1) * gridSize;\n            }\n            else if (isRightOf) {\n                x2 += (target.document.width - 1) * gridSize;\n            }\n\n            if (isAbove) {\n                y1 += (this.sourceToken.document.height - 1) * gridSize;\n            }\n            else if (isBelow) {\n                y2 += (target.document.height - 1) * gridSize;\n            }\n\n            const ray = new Ray({ x: x1, y: y1 }, { x: x2, y: y2 });\n            const distance = canvas.grid.grid.measureDistances([{ ray }], { gridSpaces: true })[0];\n            return distance / canvas.dimensions.distance;\n        } else {\n            // This code was written by TPosney for Midi-QOL. It is adapated here for A-A\n            const t1 = this.sourceToken;\n            const noResult = { distance: -1, acBonus: undefined };\n            if (!canvas || !canvas.scene)\n                return noResult;\n            if (!canvas.grid || !canvas.dimensions)\n                noResult;\n            if (!t1 || !target)\n                return noResult;\n            if (!canvas || !canvas.grid || !canvas.dimensions)\n                return noResult;\n            //@ts-ignore\n            const t1StartX = t1.document.width >= 1 ? 0.5 : t1.document.width / 2;\n            const t1StartY = t1.document.height >= 1 ? 0.5 : t1.document.height / 2;\n            const t2StartX = target.document.width >= 1 ? 0.5 : target.document.width / 2;\n            const t2StartY = target.document.height >= 1 ? 0.5 : target.document.height / 2;\n            var x, x1, y, y1, d, r, segments = [], rdistance, distance;\n            for (x = t1StartX; x < t1.document.width; x++) {\n                for (y = t1StartY; y < t1.document.height; y++) {\n                    const origin = new PIXI.Point(...canvas.grid.getCenter(Math.round(t1.document.x + (canvas.dimensions.size * x)), Math.round(t1.document.y + (canvas.dimensions.size * y))));\n                    for (x1 = t2StartX; x1 < target.document.width; x1++) {\n                        for (y1 = t2StartY; y1 < target.document.height; y1++) {\n                            const dest = new PIXI.Point(...canvas.grid.getCenter(Math.round(target.document.x + (canvas.dimensions.size * x1)), Math.round(target.document.y + (canvas.dimensions.size * y1))));\n                            const r = new Ray(origin, dest);\n                            segments.push({ ray: r });\n                        }\n                    }\n                }\n            }\n            if (segments.length === 0) {\n                return noResult;\n            }\n            rdistance = segments.map(ray => canvas.grid.measureDistances([ray], { gridSpaces: true })[0]);\n            distance = rdistance[0];\n            rdistance.forEach(d => {\n                if (d < distance)\n                    distance = d;\n            });\n            return distance / canvas.dimensions.distance;\n        }\n    }\n\n    complileMacroSection(seq, macro, handler = this) {\n        macroSection(seq, macro, handler)\n    }\n    runMacro(macro, handler = this) {\n        let userData = macro.args;\n        if (foundry.utils.isNewerVersion(game.version, 11)) {\n            new Sequence(handler.sequenceData)\n                .macro(macro.name, {args: [handler.workflow, handler, userData]})\n                .play()\n        } else {\n            if (game.modules.get(\"advanced-macros\")?.active) {\n                new Sequence(handler.sequenceData)\n                    .macro(macro.name, handler.workflow, handler, userData)\n                    .play()\n            } else {\n                new Sequence(handler.sequenceData)\n                    .macro(macro.name)\n                    .play()\n            }\n        }\n    }\n    compileSourceEffect(sourceFX, seq, handler = this) {\n        sourceEffect(sourceFX, seq, handler)\n    }\n    compileSecondaryEffect(secondary, seq, targetArray, targetEnabled = false, missable = false, handler = this) {\n        secondaryEffect(secondary, seq, targetArray, targetEnabled, missable, handler)\n    }\n    compileTargetEffect(targetFX, seq, targetArray, missable = false, handler = this) {\n        targetEffect(targetFX, seq, targetArray, missable, handler)\n    }\n\n    // Returns a pseudo Token X/Y for Ranged effects\n    fakeSource() {\n        let templateSource = Sequencer.EffectManager.getEffects({sceneId: canvas.scene.id, name: this.rinsedName})[0];\n        if (!templateSource) { return this.sourceToken; }\n\n        let gridSize = canvas.grid.size / 2;\n        let tsXmin = templateSource.source.x - (templateSource.source.width / 2) + gridSize;\n        let tsXmax = templateSource.source.x + (templateSource.source.width / 2) - gridSize;\n        let tsYmin = templateSource.source.y - (templateSource.source.height / 2) + gridSize;\n        let txYmax = templateSource.source.y + (templateSource.source.height / 2) - gridSize;\n        let newX = Sequencer.Helpers.random_int_between(tsXmin, tsXmax);\n        let newY = Sequencer.Helpers.random_int_between(tsYmin, txYmax);\n        return {x: newX, y: newY}\n    }\n\n}\n","import { aaDatabase } from \"../../database/databaseSort.js\";\nimport { debug } from \"../../constants/constants.js\";\n\nexport async function buildFile(dbType, video, custom = true, options = {}) {\n    const {menuType, animation, variant, color, customPath} = video;\n\n    if (!dbType && (!customPath || !custom)) { return false }\n\n    if (customPath) {\n        return { file: customPath, fileData: customPath }\n    }\n\n    let cleanType = menuType;\n    let cleanAnimation = animation;\n    let cleanVariant = variant;\n    let cleanColor = color;\n\n    // If the database path cannot be validated, play animation with defaults\n    if (!validateVideoPath(dbType, menuType, animation, variant, color)) {\n        debug(\"Error found while building database path, reverting a default\")\n        cleanType = getCleanProperty(aaDatabase[dbType], menuType);\n        cleanAnimation = getCleanProperty(aaDatabase[dbType][cleanType], animation);\n        cleanVariant = getCleanProperty(aaDatabase[dbType][cleanType][cleanAnimation], variant);\n        cleanColor = getCleanProperty(aaDatabase[dbType][cleanType][cleanAnimation][cleanVariant], color);\n    }\n\n    // Gets the array or Return weapon keys from the database\n    const returnArray = Object.keys(aaDatabase.return.weapon);\n    \n    return {\n        filePath: options.getTruePath ? filePath() : void 0,\n        file: databasePath(),\n        returnFile: options.isReturnable ? returnDatabasePath() : void 0,\n        // Cleaned properties. Useful for debugging\n        cleanProperties: {\n            cleanType, cleanAnimation, cleanVariant, cleanColor\n        },\n        // Original properties. Useful for debugging\n        originalProperties: {\n            menuType, animation, variant, color\n        }\n    }\n\n    function getCleanProperty(path, prop) {\n        let newArray = Object.keys(path ?? {});\n        return newArray.find(el => prop === el) ? prop : newArray[0] !== \"_markers\" ? newArray[0] : newArray[1]\n    }\n    function validateVideoPath() {\n        if (!dbType || !menuType || !animation || !variant || !color) { return false; }\n        let dbPath = color === \"random\" ? `autoanimations.${dbType}.${[menuType]}.${animation}.${variant}` : `autoanimations.${dbType}.${[menuType]}.${animation}.${variant}.${color}`;\n        return !!Sequencer.Database.getEntry(dbPath, {softFail: true})\n    }\n    // Returns the actual filepath. This is only used in Static and Templates\n    function filePath() {\n        let colorOptions = Object.keys(aaDatabase[dbType][cleanType]?.[cleanAnimation]?.[cleanVariant])\n        return color === \"random\"\n                ? aaDatabase[dbType][cleanType]?.[cleanAnimation]?.[cleanVariant]?.[colorOptions[0]]?.[0]\n                : aaDatabase[dbType][cleanType]?.[cleanAnimation]?.[cleanVariant]?.[cleanColor]?.[0]\n    }\n    // Returns the Database path structure to send to Sequencer\n    function databasePath() {\n        return color === \"random\"\n                ? `autoanimations.${dbType}.${[cleanType]}.${cleanAnimation}.${cleanVariant}` \n                : `autoanimations.${dbType}.${[cleanType]}.${cleanAnimation}.${cleanVariant}.${cleanColor}`\n    }\n    // Returns the Database path for the return animation to send to Sequencer if it exists, otherwise false\n    function returnDatabasePath() {\n        return returnArray.find(el => cleanAnimation === el) \n        ? color === \"random\"\n        ? `autoanimations.return.weapon.${cleanAnimation}.${cleanVariant}`\n        : `autoanimations.return.weapon.${cleanAnimation}.${cleanVariant}.${cleanColor}`\n        : false\n    }\n}\n","export const particleDefaultValues = {\n    explosion: {\n        type: \"explosion\",\n        speed: 0,\n        repeat: 1,\n        delay: 500,\n        scale: 2,\n        color01: \"#FFFFFF\",\n        color02: \"#FFFFFF\",\n        sprite: \"modules/levels-3d-preview/assets/particles/dust.png\",\n        life: 500,\n        emittersize: 1,\n        alpha: 0.2,\n        mass: 400,\n        gravity: 2,\n        rate: 10,\n        explosion: {},\n        onCenter: false,\n        autoSize: true,\n    },\n    projectile: {\n        type: \"projectile\",\n        speed: 5,\n        repeat: 1,\n        arc: 2,\n        delay: 500,\n        scale: 0.7,\n        color01: \"#FFFFFF\",\n        color02: \"#FFFFFF\",\n        sprite: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n        life: 500,\n        emittersize: .0001,\n        alpha: 0.5,\n        mass: 100,\n        gravity: 0,\n        rate: 10,\n        duration: 3000,\n    },\n    ray: {\n        type: \"ray\",\n        speed: 5,\n        repeat: 1,\n        arc: 2,\n        delay: 500,\n        scale: 0.7,\n        color01: \"#FFFFFF\",\n        color02: \"#FFFFFF\",\n        sprite: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n        life: 500,\n        emittersize: .0001,\n        alpha: 0.5,\n        mass: 100,\n        gravity: 0,\n        rate: 10,\n    },\n    sprite: {\n        type: \"sprite\",\n        speed: 5,\n        repeat: 1,\n        delay: 0,\n        scale: 0.7,\n        color01: \"#FFFFFF\",\n        sprite: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n        alpha: 0.7,\n    },\n    token: {\n        repeat: 1,\n        resetTime: 100,\n    }\n}\n","import { buildFile }                from \"../animation-functions/file-builder/build-filepath.js\";\nimport { custom_notify }            from \"../constants/constants.js\"\nimport { particleDefaultValues }    from \"../animation-functions/levels-particles/particleDefaults.js\";\n\nexport class DataSanitizer {\n\n    static async _getAnimationData(handler, flagData) {\n        if (!flagData) { return; }\n        let menu = flagData.menu;\n        menu = menu === \"aefx\" ? flagData.activeEffectType : menu;\n        const data = {};\n\n        //const data = {\n            data.primary = menu === \"preset\" ? await this.compilePreset(flagData) : await this.compilePrimary(flagData, menu, handler),\n            data.secondary = flagData.secondary ? await this.compileSecondary(flagData, handler) : false,\n            data.sourceFX = await this.compileSource(flagData, data.primary),\n            data.targetFX = flagData.target ? await this.compileTarget(flagData) : false,\n            data.macro = await this.compileMacro(handler, flagData)\n        //}\n        return data;\n    }\n\n    static async compileMacro(handler, flagData) {\n        const macro = flagData.macro;\n        if (!macro || !macro.enable || !macro.name) { return false}\n        const isItemMacro = macro.name.startsWith(\"ItemMacro\");\n        let itemMacro;\n        if (isItemMacro) {\n            itemMacro = handler.item.getMacro()\n        }\n        if (isItemMacro && !itemMacro.command) { return false}\n        const data = {\n            enable: macro.enable ?? false,\n            name: isItemMacro ? itemMacro : macro.name,\n            args: this.strToObj(macro.args),\n            playWhen: macro.playWhen ?? \"0\",\n        }\n        return data;\n    }\n\n    static strToObj(data) {\n\n        if (!data) { return []; }\n        let obj = {};\n        try {\n            if (data && typeof data === 'string') {\n                let objStr = data.replaceAll(\"\\n\", \"\").match(/\\{(.)+\\}/g);\n                eval(\"obj =\" + objStr);\n            }\n            return obj || data.split(',').map(s => s.trim())\n        }\n        catch (err) {\n            return data.split(',').map(s => s.trim())\n        }\n\n\n    }\n\n    static setSound(data, addDelay = 0, overrideRepeat = false) {\n\n        const input = {\n            enable: data.enable ?? false,\n            file: data.file,\n            delay: data.delay ?? 0,\n            startTime: data.startTime ?? 0,\n            volume: data.volume ?? 1,\n            repeat: overrideRepeat || data.repeat || 1,\n            repeatDelay: data.repeatDelay ?? 250,\n        }\n        if (!input.enable || !input.file) { return false }\n        let soundSeq = new Sequence({moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")})\n        let section = soundSeq.sound()\n        section.file(input.file)\n        section.delay(input.delay + addDelay)\n        section.startTime(input.startTime)\n        section.volume(input.volume)\n        section.repeats(input.repeat, input.repeatDelay)\n        return soundSeq;\n    }\n\n    static async compilePrimary(flagData, menu, handler) {\n        const topLevel = flagData || {};\n\n        const primary = topLevel.primary || topLevel.data || {};\n        const options = primary.options || {};\n        const sound = primary.sound || {};\n        const video = primary.video || {};\n\n        const data = {\n            video: {\n                dbSection: video.dbSection,\n                menuType: video.menuType,\n                animation: video.animation,\n                variant: video.variant,\n                color: video.color,\n                customPath: video.enableCustom && video.customPath ? video.customPath : false,\n            },\n            options: this.setPrimaryOptions(options, menu, handler),\n            //sound: this.setSound(sound),\n        }\n        let addSoundDelay = 0;\n        if (!data.options.isWait) {\n            addSoundDelay = data.options.delay;\n        }\n        data.sound = this.setSound(sound, addSoundDelay, handler.systemData.overrideRepeat)\n        if (menu === \"melee\") {\n            data.meleeSwitch = this.compileMeleeSwitch(topLevel.meleeSwitch)\n        }\n        if (data.video.menuType === 'shieldfx' && !video.enableCustom) { data.options.isShieldFX = true};\n\n        let truePathRequired = ['static', 'templatefx'];\n        let returnable = ['melee', 'range'];\n\n        data.path = await buildFile(data.video.dbSection, data.video, data.video.customPath, {getTruePath: truePathRequired.some(el => el === data.video.dbSection), isReturnable: returnable.some(el => el === data.video.dbSection)})\n        return data;\n    }\n\n    static compileMeleeSwitch(switchData) {\n        const topLevel = switchData || {};\n\n        const video = topLevel.video || {};\n        const options = topLevel.options || {};\n        const sound = topLevel.sound || {};\n\n        const data = {\n            video: {\n                dbSection: \"range\",\n                menuType: video.menuType,\n                animation: video.animation,\n                variant: video.variant,\n                color: video.color,\n                customPath: video.enableCustom && video.customPath ? video.customPath : false,\n            },\n            options: {\n                detect: options.detect || \"automatic\",\n                range: options.range || 2,\n                isReturning: options.isReturning ?? false,\n                switchType: options.switchType || \"on\",\n            },\n            sound: this.setSound(sound)\n        }\n        return data;\n    }\n\n    static setPrimaryOptions(data, type, handler) {\n        switch (type) {\n            case \"melee\":\n                return {\n                    contrast: data.contrast ?? 0,\n                    delay: data.delay || 0,\n                    elevation: data.elevation ?? 1000,\n                    isAbsolute: data.isAbsolute ?? false,\n                    isWait: data.isWait ?? false,\n                    opacity: data.opacity ?? 1,\n                    playbackRate: data.playbackRate || 1,\n                    repeat: data.repeat || 1,\n                    repeatDelay: data.repeatDelay ?? 1,\n                    saturation: data.saturation ?? 0,\n                    size: data.size || 1,\n                    tint: data.tint ?? false,\n                    tintColor: data.tintColor || \"#FFFFFF\",\n                    zIndex: data.zIndex || 1,\n                };\n            case \"range\":\n                return {\n                    animationSource: data.animationSource ?? false,\n                    contrast: data.contrast ?? 0,\n                    fakeLocation: handler.fakeSource(),\n                    delay: data.delay || 0,\n                    elevation: data.elevation ?? 1000,\n                    isAbsolute: data.isAbsolute ?? false,\n                    isReturning: data.isReturning ?? false,\n                    isWait: data.isWait ?? false,\n                    onlyX: data.onlyX ?? false,\n                    opacity: data.opacity ?? 1,\n                    playbackRate: data.playbackRate || 1,\n                    randomOffset: data.randomOffset ?? false,\n                    repeat: handler.systemData.overrideRepeat || data.repeat || 1,\n                    repeatDelay: data.repeatDelay ?? 1,\n                    reverse: data.reverse ?? false,\n                    saturation: data.saturation ?? 0,\n                    tint: data.tint ?? false,\n                    tintColor: data.tintColor || \"#FFFFFF\",\n                    zIndex: data.zIndex || 1,\n                };\n            case \"ontoken\":\n                return {\n                    addTokenWidth: data.addTokenWidth ?? false,\n                    anchor: this.convertToXY(data.anchor, true),\n                    contrast: data.contrast ?? 0,\n                    delay: data.delay ?? 1,\n                    elevation: data.elevation ?? 1000,\n                    isAbsolute: data.isAbsolute ?? false,\n                    fadeIn: data.fadeIn ?? 250,\n                    fadeOut: data.fadeOut ?? 500,\n                    isMasked: data.isMasked ?? false,\n                    isRadius: data.isRadius ?? false,\n                    isWait: data.isWait ?? false,\n                    opacity: data.opacity ?? 1,\n                    persistent: data.persistent ?? false,\n                    playbackRate: data.playbackRate || 1,\n                    playOn: data.playOn || \"default\",\n                    repeat: data.repeat || 1,\n                    repeatDelay: data.repeatDelay ?? 1,\n                    saturation: data.saturation ?? 0,\n                    size: data.size || 1,\n                    tint: data.tint ?? false,\n                    tintColor: data.tintColor || \"#FFFFFF\",\n                    unbindAlpha: data.unbindAlpha ?? false,\n                    unbindVisibility: data.unbindVisibility ?? false,\n                    zIndex: data.zIndex || 1,\n                };\n            case \"templatefx\":\n                return {\n                    aboveTemplate: data.aboveTemplate ?? false,\n                    anchor: data.anchor,\n                    contrast: data.contrast ?? 0,\n                    delay: data.delay ?? 1,\n                    elevation: data.elevation ?? 1000,\n                    isAbsolute: data.isAbsolute ?? false,\n                    isMasked: data.isMasked ?? false,\n                    isWait: data.isWait ?? false,\n                    occlusionMode: data.occlusionMode || \"3\",\n                    occlusionAlpha: data.occlusionAlpha ?? 1,\n                    opacity: data.opacity ?? 1,\n                    persistent: data.persistent ?? false,\n                    persistType: data.persistType || \"sequencerground\",\n                    playbackRate: data.playbackRate || 1,\n                    removeTemplate:  data.removeTemplate ?? false,\n                    repeat: data.repeat || 1,\n                    repeatDelay: data.repeatDelay ?? 1,\n                    rotate: data.rotate ?? 0,\n                    saturation: data.saturation ?? 0,\n                    scale: this.convertToXY(data.scale),\n                    tint: data.tint ?? false,\n                    tintColor: data.tintColor || \"#FFFFFF\",\n                    scaleX: data.scaleX || 1,\n                    scaleY: data.scaleY || 1,\n                    xray: data.xray ?? false,\n                    zIndex: data.zIndex || 1,\n                };\n            case \"aura\":\n                return {\n                    addTokenWidth: data.addTokenWidth ?? false,\n                    alpha: data.alpha ?? false,\n                    alphaDuration: data.alphaDuration || 1000,\n                    alphaMax: data.alphaMax ?? 0.5,\n                    alphaMin: data.alphaMin ?? -0.5,\n                    breath: data.breath ?? false,\n                    breathDuration: data.breathDuration || 1000,\n                    breathMax: data.breathMax ?? 1.05,\n                    breathMin: data.breathMin ?? 0.95,\n                    contrast: data.contrast ?? 0,\n                    delay: data.delay || 1,\n                    elevation: data.elevation ?? 1000,\n                    isAbsolute: data.isAbsolute ?? false,\n                    fadeIn: data.fadeIn ?? 250,\n                    fadeOut: data.fadeOut ?? 500,\n                    isWait: data.isWait ?? false,\n                    opacity: data.opacity ?? 1,\n                    playbackRate: data.playbackRate || 1,\n                    playOn: data.playOn || \"source\",\n                    size: data.size || 3,\n                    tint: data.tint ?? false,\n                    tintColor: data.tintColor || \"#FFFFFF\",\n                    tintSaturate: data.tintSaturate ?? 0,\n                    unbindAlpha: data.unbindAlpha ?? false,\n                    unbindVisibility: data.unbindVisibility ?? false,\n                    zIndex: data.zIndex || 1,\n                };\n        }\n    }\n\n    static convertToXY(input, isAnchor) {\n        let dNum = isAnchor ? 0.5 : 1;\n        if (!input) { return {x: dNum, y: dNum}}\n        let parsedInput = input.split(',').map(s => s.trim());\n        let posX = Number(parsedInput[0]);\n        let posY = Number(parsedInput[1]);\n        if (parsedInput.length === 2) {\n            return {x: isNaN(posX) ? dNum : posX, y: isNaN(posY) ? dNum : posY}\n        } else if( parsedInput.length === 1) {\n            return {x: isNaN(posX) ? dNum : posX, y: isNaN(posX) ? dNum : posX}\n        } else {\n            return {x: dNum, y: dNum}\n        }\n    }\n\n    static async compileSecondary(flagData, handler) {\n        const topLevel = flagData || {};\n\n        const secondary = topLevel.secondary || {};\n        if (!secondary.enable) { return false; }\n        const video = secondary.video || {};\n        const options = secondary.options || {};\n        const sound = secondary.sound || {};\n\n        const data = {\n            enable: secondary.enable ?? false,\n            video: {\n                dbSection: \"static\",\n                menuType: video.menuType,\n                animation: video.animation,\n                variant: video.variant,\n                color: video.color,\n                customPath: video.enableCustom && video.customPath ? video.customPath : false,\n            },\n            options: {\n                addTokenWidth: options.addTokenWidth ?? false,\n                anchor: this.convertToXY(options.anchor, true),\n                contrast: options.contrast ?? 0,\n                delay: options.delay ?? 0,\n                elevation: options.elevation ?? 1000,\n                isAbsolute: options.isAbsolute ?? false,\n                fadeIn: options.fadeIn ?? 250,\n                fadeOut: options.fadeOut ?? 250,\n                isMasked: options.isMasked ?? false,\n                isRadius: options.isRadius ?? false,\n                isWait: options.isWait ?? false,\n                opacity: options.opacity || 1,\n                playbackRate: options.playbackRate || 1,\n                repeat: handler.systemData.overrideRepeat || options.repeat || 1,\n                repeatDelay: options.repeatDelay ?? 250,\n                rotateSource: options.rotateSource ?? false,\n                saturation: options.saturation ?? 0,\n                size: options.size || 1,\n                tint: options.tint ?? false,\n                tintColor: options.tintColor || \"#FFFFFF\",\n                zIndex: options.zIndex || 1,\n            },\n            //sound: this.setSound(sound, topLevel.primary.options),\n        }\n        let addSoundDelay = 0;\n        if (!data.options.isWait) {\n            addSoundDelay = data.options.delay;\n        }\n        data.sound = this.setSound(sound, addSoundDelay, handler.systemData.overrideRepeat)\n        data.path = secondary.enable ? await buildFile(\"static\", data.video, data.video.customPath) : \"\";\n\n        return data;\n    }\n\n    static async compileSource(flagData, primary) {\n        const topLevel = flagData || {};\n        const source = topLevel.source || {};\n        const video = source.video || {};\n        const options = source.options || {};\n        const sound = source.sound || {};\n\n        if (!source.enable) { return false; }\n\n        const data = {\n            enable: source.enable ?? false,\n            video: {\n                dbSection: \"static\",\n                menuType: video.menuType,\n                animation: video.animation,\n                variant: video.variant,\n                color: video.color,\n                customPath: video.enableCustom && video.customPath ? video.customPath : false,\n            },\n            options: {\n                animationSource: primary?.options?.animationSource ?? false,\n                fakeLocation: primary?.options?.fakeLocation,\n                addTokenWidth: options.addTokenWidth ?? false,\n                anchor: this.convertToXY(options.anchor, true),\n                contrast: options.contrast ?? 0,\n                delay: options.delay ?? 0,\n                elevation: options.elevation ?? 1000,\n                isAbsolute: options.isAbsolute ?? false,\n                fadeIn: options.fadeIn ?? 250,\n                fadeOut: options.fadeOut ?? 500,\n                isMasked: options.isMasked ?? false,\n                isRadius: options.isRadius ?? false,\n                isWait: options.isWait ?? false,\n                opacity: options.opacity || 1,\n                persistent: options.persistent ?? false,\n                playbackRate: options.playbackRate || 1,\n                repeat: options.repeat || 1,\n                repeatDelay: options.repeatDelay || 1,\n                saturation: options.saturation ?? 0,\n                size: options.size || 1,\n                tint: options.tint ?? false,\n                tintColor: options.tintColor || \"#FFFFFF\",\n                zIndex: options.zIndex || 1,\n            },\n            //sound: this.setSound(sound)\n        }\n        let addSoundDelay = 0;\n        if (!data.options.isWait) {\n            addSoundDelay = data.options.delay;\n        }\n        data.sound = this.setSound(sound, addSoundDelay)\n        data.path = data.enable ? await buildFile(data.video.dbSection, data.video, data.video.customPath) : \"\";\n        return data;\n    }\n\n    static async compileTarget(flagData) {\n        const topLevel = flagData || {};\n\n        const target = topLevel.target || {};\n        const video = target.video || {};\n        const options = target.options || {};\n        const sound = target.sound || {};\n\n        if (!target.enable) { return false; }\n\n        const data = {\n            enable: target.enable ?? false,\n            video: {\n                dbSection: \"static\",\n                menuType: video.menuType,\n                animation: video.animation,\n                variant: video.variant,\n                color: video.color,\n                customPath: video.enableCustom && video.customPath ? video.customPath : false,\n            },\n            options: {\n                addTokenWidth: options.addTokenWidth ?? false,\n                anchor: this.convertToXY(options.anchor, true),\n                contrast: options.contrast ?? 0,\n                delay: options.delay ?? 0,\n                elevation: options.elevation ?? 1000,\n                fadeIn: options.fadeIn ?? 250,\n                fadeOut: options.fadeOut ?? 250,\n                isAbsolute: options.isAbsolute ?? false,\n                isMasked: options.isMasked ?? false,\n                //isWait: options.isWait ?? false,\n                isRadius: options.isRadius ?? false,\n                opacity: options.opacity || 1,\n                playbackRate: options.playbackRate || 1,\n                persistent: options.persistent ?? false,\n                repeat: options.repeat || 1,\n                repeatDelay: options.repeatDelay ?? 250,\n                rotateSource: options.rotateSource ?? false,\n                saturation: options.saturation ?? 0,\n                size: options.size || 1,\n                tint: options.tint ?? false,\n                tintColor: options.tintColor || \"#FFFFFF\",\n                unbindAlpha: options.unbindAlpha ?? false,\n                unbindVisibility: options.unbindVisibility ?? false,\n                zIndex: options.zIndex || 1,\n            },\n            sound: this.setSound(sound, options.delay ?? 0)\n        }\n        data.path = data.enable ? await buildFile(\"static\", data.video, data.video.customPath) : \"\";\n        return data;\n    }\n\n    static _targetSequence(targetFX, target, handler, addDelay = 0) {\n        let hit;\n        if (handler.playOnMiss) {\n            hit = handler.hitTargetsId.includes(target.id) ? true : false;\n        } else {\n            hit = true;\n        }\n\n        const targetTokenGS = targetFX.options.isRadius ? targetFX.options.size * 2 : (target.w / canvas.grid.size) * 1.5 * targetFX.options.size;\n\n        targetFX.targetSeq = new Sequence();\n\n        let targetEffect = targetFX.targetSeq.effect()\n        targetEffect.delay(targetFX.options.delay + addDelay)\n        targetEffect.file(targetFX.path?.file, true)\n        targetEffect.atLocation(target)\n        //.scale(targetFX.tFXScale * targetFX.scale)\n        targetEffect.size(targetTokenGS * 1.5 * targetFX.options.size, { gridUnits: true })\n        targetEffect.repeats(targetFX.options.repeat, targetFX.options.repeatDelay)\n        if (targetFX.options.elevation === 0) {\n            effectAfterImage.belowTokens(true)\n        } else {\n            targetEffect.elevation(targetFX.options.elevation)\n        }\n        if (targetFX.options.isMasked) {\n            targetEffect.mask(target)\n        }\n        targetEffect.persist(targetFX.options.persistent)\n        targetEffect.fadeOut(500)\n        targetEffect.opacity(targetFX.options.opacity)\n        targetEffect.zIndex(targetFX.options.zIndex)\n        //.playIf(playNow)\n\n        return targetFX;\n    }\n\n    static howToDelete(type) {\n        if (game.settings.get(\"autoanimations\", \"noTips\")) { return; }\n        let disableTips = \"You can disabled these tips in the Automated Animations module settings\"\n        switch (type) {\n            case 'overheadtile':\n                custom_notify(`This is an OVERHEAD Tile. Use the Tile Foreground Layer to remove the Animation. ${disableTips}`)\n                break;\n            case 'groundtile':\n                custom_notify(`This is an GROUND Tile. Use the Tile Layer to remove the Animation. ${disableTips}`)\n                break;\n            case 'sequencerground':\n                custom_notify(`This is a SEQUENCER Persistent Effect. Use the Sequencer Effect Manager to remove the Animation. ${disableTips}`)\n                break\n        }\n    }\n\n    static async compileParticleData(animationData) {\n        const options3d = animationData.levels3d;\n        if (!options3d.enable) { return false; }\n        const type = options3d.type;\n        const options = options3d.data || {};\n        const tokens = options3d.tokens || {};\n\n        const secondary = options3d.secondary || {};\n        const defaults = particleDefaultValues[type] ?? particleDefaultValues[\"projectile\"];\n        const data = {\n            type: type,\n            alpha: options.alpha ?? defaults.alpha,\n            animationType: options.animationType ?? \"twirl\",\n            arc: options.arc ?? defaults.arc,\n            color01: options.color01 ?? defaults.color01,\n            color02: options.color02 ?? defaults.color02,\n            delay: options.delay ?? defaults.delay,\n            emittersize: options.emittersize ?? defaults.emittersize,\n            gravity: options.gravity ?? defaults.gravity,\n            life: options.life ?? defaults.life,\n            duration: options.duration ?? defaults.duration,\n            mass: options.mass ?? defaults.mass,\n            playOn: options.playOn ?? \"source\",\n            rate: options.rate ?? defaults.rate,\n            repeat: options.repeat ?? defaults.repeat,\n            resetTime: options.resetTime ?? 100,\n            rotateTowards: options.rotateTowards ?? false,\n            rotationX: options.rotationX ?? 0,\n            rotationY: options.rotationY ?? 0,\n            rotationZ: options.rotationZ ?? 0,\n            scale: options.scale ?? defaults.scale,\n            speed: options.speed ?? defaults.speed,\n            sprite: options.spritePath ?? defaults.sprite,\n            autoSize: options.autoSize ?? defaults.autoSize,\n            onCenter: options.onCenter ?? defaults.onCenter,\n            sound: this.setSound(options3d.sound),\n            tokenAnimation: {\n                enable: tokens.enable ?? false,\n                source: tokens.source ?? false,\n                sourceType: tokens.sourceType ?? \"twirl\",\n                sourceStart: tokens.sourcePlay !== \"end\"  ? true : false,\n                sourceEnd: tokens.sourcePlay !== \"start\" ? true : false,\n                target: tokens.target ?? false,\n                targetType: tokens.targetType ?? \"shake\",\n                targetStart: tokens.targetPlay !== \"end\"  ? true : false,\n                targetEnd: tokens.targetPlay !== \"start\" ? true : false,\n            },\n            secondary: {\n                enable: secondary.enable || false,\n                alpha: secondary.data?.alpha ?? 0.5,\n                color01: secondary.data?.color01 ?? \"#FFFFFF\",\n                color02: secondary.data?.color02 ?? \"#FFFFFF\",\n                emittersize: secondary.data?.emittersize ?? 1,\n                gravity: secondary.data?.gravity ?? 2,\n                life: secondary.data?.life ?? 500,\n                mass: secondary.data?.mass ?? 100,\n                rate: secondary.data?.rate ?? 10,\n                scale: secondary.data?.scale ?? 1,\n                speed: secondary.data?.speed ?? 1,\n                autoSize: secondary.data?.autoSize ?? false,\n                onCenter: secondary.data?.onCenter ?? false,\n                duration: secondary.data?.duration ?? 3000,\n                type: secondary.data?.type ?? \"explosion\",\n                sprite: secondary.data?.spritePath ?? particleDefaultValues.explosion.sprite,\n            }\n        };\n        return data;\n    }\n\n    static async compilePreset(flagData) {\n        const topLevel = flagData || {};\n        const presetType = topLevel.presetType;\n\n        switch (presetType) {\n            case \"proToTemp\":\n                return await proToTemp();\n            case \"teleportation\":\n                return teleportation();\n            case \"dualattach\":\n                return dualAttach();\n            case \"thunderwave\":\n                return thunderwave();\n        }\n\n        async function proToTemp () {\n            const flags = topLevel.data || {};\n            const projectile = flags.projectile || {};\n            const projectileOptions = projectile.options || {};\n            const projectileSound = projectile.sound || {};\n            const preExplosion = flags.preExplosion || {};\n            const preExplosionOptions = preExplosion.options || {};\n            const preExplosionSound = preExplosion.sound || {};\n            const explosion = flags.explosion || {};\n            const explosionOptions = explosion.options || {};\n            const explosionSound = explosion.sound || {};\n            const afterImage = flags.afterImage || {};\n            const afterImageOptions = afterImage.options || {};\n\n            const data = {\n                projectile: {\n                    dbSection: \"range\",\n                    menuType: projectile.menuType,\n                    animation: projectile.animation,\n                    variant: projectile.variant,\n                    color: projectile.color,\n                    customPath: projectile.enableCustom && projectile.customPath ? projectile.customPath : false,\n                    options: {\n                        elevation: projectileOptions.elevation || 1000,\n                        isAbsolute: projectileOptions.isAbsolute ?? false,\n                        playbackRate: projectileOptions.playbackRate || 1,\n                        randomOffset: projectileOptions.randomOffset ?? false,\n                        repeat: projectileOptions.repeat || 1,\n                        repeatDelay: projectileOptions.repeatDelay || 250,\n                        removeTemplate: projectileOptions.removeTemplate ?? false,\n                        wait: projectileOptions.wait ?? -500,\n                        opacity: projectileOptions.opacity ?? 1,\n                    },\n                    sound: setSound(projectileSound)\n                },\n                preExplosion: {\n                    dbSection: \"static\",\n                    enable: preExplosion.enable || false,\n                    menuType: preExplosion.menuType,\n                    animation: preExplosion.animation,\n                    variant: preExplosion.variant,\n                    color: preExplosion.color,\n                    customPath: preExplosion.enableCustom && preExplosion.customPath ? preExplosion.customPath : false,\n                    options: {\n                        aboveTemplate: preExplosionOptions.aboveTemplate ?? false,\n                        elevation: preExplosionOptions.elevation ?? 1000,\n                        isAbsolute: preExplosionOptions.isAbsolute ?? false,\n                        playbackRate: preExplosionOptions.playbackRate || 1,\n                        repeat: preExplosionOptions.repeat || 1,\n                        repeatDelay: preExplosionOptions.repeatDelay || 250,\n                        scale: preExplosionOptions.scale || 1,\n                        wait: preExplosionOptions.wait ?? -500,\n                        opacity: preExplosionOptions.opacity ?? 1,\n                    },\n                    sound: setSound(preExplosionSound)\n                },\n                explosion: {\n                    dbSection: \"static\",\n                    menuType: explosion.menuType,\n                    animation: explosion.animation,\n                    variant: explosion.variant,\n                    color: explosion.color,\n                    customPath: explosion.enableCustom && explosion.customPath ? explosion.customPath : false,\n                    options: {\n                        aboveTemplate: explosionOptions.aboveTemplate ?? false,\n                        elevation: explosionOptions.elevation ?? 1000,\n                        isAbsolute: explosionOptions.isAbsolute ?? false,\n                        playbackRate: explosionOptions.playbackRate || 1,\n                        repeat: explosionOptions.repeat || 1,\n                        repeatDelay: explosionOptions.repeatDelay || 250,\n                        scale: explosionOptions.scale || 1,\n                        wait: explosionOptions.wait ?? -500,\n                        opacity: explosionOptions.opacity ?? 1,\n                    },\n                    sound: setSound(explosionSound)\n\n                },\n                afterImage: {\n                    customPath: afterImage.enable && afterImage.customPath ? afterImage.customPath : false,\n                    enable: afterImage.enable ?? false,\n                    options: {\n                        elevation: afterImageOptions.elevation ?? 1000,\n                        isAbsolute: afterImageOptions.isAbsolute ?? false,\n                        persistent: afterImageOptions.persistent ?? false,\n                        scale: afterImageOptions.scale || 1,\n                    }\n                },\n                soundOnly: {\n                    enable: false,\n                }\n            }\n            data.projectile.path = await buildFile(data.projectile.dbSection, data.projectile, data.projectile.customPath)\n            data.preExplosion.path = await buildFile(data.preExplosion.dbSection, data.preExplosion, data.preExplosion.customPath)\n            data.explosion.path = await buildFile(data.explosion.dbSection, data.explosion, data.explosion.customPath)\n\n            return data;\n        }\n\n        function teleportation() {\n            const flags = topLevel.data || {};\n\n            const start = flags.start || {};\n            const startOptions = start.options || {};\n            const between = flags.between || {};\n            const betweenOptions = between.options || {};\n            const end = flags.end || {};\n            const endOptions = end.options || {};\n            const options = flags.options || {};\n            const sound = flags.sound || {};\n\n            const data = {\n                start: !start.enable ? false : {\n                    menuType: start.menuType,\n                    animation: start.animation,\n                    variant: start.variant,\n                    color: start.color,\n                    customPath: start.enableCustom && start.customPath ? start.customPath : false,\n                    options: {\n                        //alpha: startOptions.alpha ?? 0,\n                        delay: startOptions.delay ?? 0,\n                        elevation: startOptions.elevation ?? 1000,\n                        isAbsolute: startOptions.isAbsolute ?? false,\n                        fadeIn: startOptions.fadeIn ?? 250,\n                        fadeOut: startOptions.fadeOut ?? 500,\n                        isMasked: startOptions.isMasked ?? false,\n                        isRadius: startOptions.isRadius ?? false,\n                        opacity: startOptions.opacity ?? 1,\n                        playbackRate: startOptions.playbackRate || 1,\n                        size: startOptions.size ?? 1,\n                    },\n                },\n                between: !between.enable ? false :  {\n                    menuType: between.menuType,\n                    animation: between.animation,\n                    variant: between.variant,\n                    color: between.color,\n                    customPath: between.enableCustom && between.customPath ? between.customPath : false,\n                    options: {\n                        delay: betweenOptions.delay ?? 0,\n                        elevation: betweenOptions.elevation ?? 1000,\n                        isAbsolute: betweenOptions.isAbsolute ?? false,\n                        opacity: betweenOptions.opacity ?? 1,\n                        playbackRate: betweenOptions.playbackRate ?? 1,\n                    },\n                },\n                end: !end.enable ? false :  {\n                    menuType: end.menuType,\n                    animation: end.animation,\n                    variant: end.variant,\n                    color: end.color,\n                    customPath: end.enableCustom && end.customPath ? end.customPath : false,\n                    options: {\n                        delay: endOptions.delay ?? 0,\n                        elevation: endOptions.elevation ?? 1000,\n                        isAbsolute: endOptions.isAbsolute ?? false,\n                        fadeIn: startOptions.fadeIn ?? 250,\n                        fadeOut: startOptions.fadeOut ?? 500,\n                        isMasked: endOptions.isMasked ?? false,\n                        isRadius: endOptions.isRadius ?? false,\n                        opacity: endOptions.opacity ?? 1,\n                        playbackRate: endOptions.playbackRate || 1,\n                        size: endOptions.size ?? 1,\n                    },\n                },\n                options: {\n                    measureType: options.measureType || \"alternating\",\n                    hideFromPlayers: options.hideFromPlayers ?? false,\n                    range: options.range ?? 30,\n                    teleport: options.teleport ?? false,\n                    delayMove: options.delayMove ?? 0,\n                    speed: options.speed || 6,\n                    alpha: options.alpha ?? 1,\n                    delayFade: options.delayFade ?? 0,\n                    delayReturn: options.delayReturn ?? 0,\n                    checkCollision: options.checkCollision ?? false,\n                },\n                sound: setSound(sound)\n            }\n            return data;\n        }\n\n        function dualAttach() {\n            const flags = topLevel.data || {};\n\n            const video = flags.video || {};\n            const options = flags.options || {};\n            const sound = flags.sound || {};\n\n            const data = {\n                video: {\n                    menuType: video.menuType,\n                    animation: video.animation,\n                    variant: video.variant,\n                    color: video.color,\n                    customPath: video.enableCustom && video.customPath ? video.customPath : false,\n                },\n                options: {\n                    elevation: options.elevation ?? 1000,\n                    isAbsolute: options.isAbsolute ?? false,\n                    onlyX: options.onlyX ?? false,\n                    opacity: options.opacity ?? 1,\n                    playbackRate: options.playbackRate,\n                },\n                sound: setSound(sound)\n            }\n\n            return data;\n        }\n\n        function  thunderwave() {\n            const flags = topLevel.data || {};\n\n            const options = flags.options || {};\n            const sound = flags.sound || {};\n\n            const data = {\n                color: flags.color || \"blue\",\n                options: {\n                    elevation: options.elevation ?? 1000,\n                    isAbsolute: options.isAbsolute ?? false,\n                    opacity: options.opacity ?? 1,\n                    repeat: options.repeat || 1,\n                    repeatDelay: options.repeatDelay ?? 250,\n                    removeTemplate: options.removeTemplate ?? false,\n                },\n                sound: setSound(sound)\n            }\n            return data;\n        }\n\n        function setSound(data, addDelay = 0) {\n\n            const input = {\n                enable: data.enable ?? false,\n                file: data.file,\n                delay: data.delay ?? 0,\n                startTime: data.startTime ?? 0,\n                volume: data.volume ?? 1,\n                repeat: data.repeat || 1,\n                repeatDelay: data.repeatDelay ?? 250,\n            }\n            if (!input.enable || !input.file) { return false }\n            let soundSeq = new Sequence()\n            let section = soundSeq.sound()\n            section.file(input.file)\n            section.delay(input.delay + addDelay)\n            section.startTime(input.startTime)\n            section.volume(input.volume)\n            section.repeats(input.repeat, input.repeatDelay)\n            return soundSeq;\n        }\n\n    }\n}\n/*\n// Testing Hex to HSL conversion. Code from Jon Kantner https://css-tricks.com/converting-color-spaces-in-javascript/\nfunction hexToHSL(H) {\n    // Convert hex to RGB first\n    let r = 0, g = 0, b = 0;\n    if (H.length == 4) {\n      r = \"0x\" + H[1] + H[1];\n      g = \"0x\" + H[2] + H[2];\n      b = \"0x\" + H[3] + H[3];\n    } else if (H.length == 7) {\n      r = \"0x\" + H[1] + H[2];\n      g = \"0x\" + H[3] + H[4];\n      b = \"0x\" + H[5] + H[6];\n    }\n    // Then to HSL\n    r /= 255;\n    g /= 255;\n    b /= 255;\n    let cmin = Math.min(r,g,b),\n        cmax = Math.max(r,g,b),\n        delta = cmax - cmin,\n        h = 0,\n        s = 0,\n        l = 0;\n\n    if (delta == 0)\n      h = 0;\n    else if (cmax == r)\n      h = ((g - b) / delta) % 6;\n    else if (cmax == g)\n      h = (b - r) / delta + 2;\n    else\n      h = (r - g) / delta + 4;\n\n    h = Math.round(h * 60);\n\n    if (h < 0)\n      h += 360;\n\n    l = (cmax + cmin) / 2;\n    s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n    s = +(s * 100).toFixed(1);\n    l = +(l * 100).toFixed(1);\n\n    return ({h: h, s: s/100, l: l/100})\n  }\n*/","import { debug } from \"../constants/constants.js\";\n\nHooks.once('aa.ready', async (jb2a) => { await menuOptions(jb2a) });\n//const aaTypeMenu = {};\n//const aaNameMenu = {};\n//const aaColorMenu = {};\n//const aaVariantMenu = {};\nlet aaReturnWeapons;\nlet aaRangeWeapons;\n\nconst newTypeMenu = {};\nconst newNameMenu = {};\nconst newVariantMenu = {};\nconst newColorMenu = {};\n\nasync function menuOptions(database) {\n    aaReturnWeapons = Object.keys(database.return.weapon)\n    aaRangeWeapons = Object.keys(database.range.weapon)\n    const jb2a = database;\n\n    const menuSets = ['range', 'return', 'melee', 'static', 'templatefx']\n\n    //Object.keys(jb2a.melee).reduce((o, type) => ({...o, [type]: Object.keys(jb2a.melee[type]).forEach(function(a) {meleeMenu.animation.push({[a]: game.i18n.localize(`autoanimations.animations.${a}`)})} )}), {})\n    /** Build new TYPE menu choices ending in Array */\n    for (let section of menuSets) {\n        newTypeMenu[section] = [];\n        let currentTypeArray = [];\n\n        Object.keys(jb2a[section]).forEach(\n            function (a) {\n                currentTypeArray.push(a)\n            }\n        )\n        currentTypeArray.sort((a, b) => a.localeCompare(b))\n        currentTypeArray.forEach(function (d) {\n            if (!newTypeMenu[section]) { newTypeMenu[section] = [] };\n            newTypeMenu[section].push([ d, game.i18n.localize(`autoanimations.menuTypes.${d}`) ])\n        })\n\n    }\n\n    /** Build new ANIMATION menu choices ending in Array */\n    for (let section of menuSets) {\n        newNameMenu[section] = {};\n        let currentNameArray = [];\n        Object.keys(jb2a[section]).forEach(\n            function (a) {\n                currentNameArray = [];\n                Object.keys(jb2a[section][a]).forEach(function (b) {\n                    currentNameArray.push(b)\n                })\n                currentNameArray.sort((a, b) => a.localeCompare(b))\n                currentNameArray.forEach(function (d) {\n                    if (!newNameMenu[section][a]) { newNameMenu[section][a] = [] };\n                    newNameMenu[section][a].push([ d, game.i18n.localize(`autoanimations.animations.${d}`) ])\n                })\n            })\n    }\n\n    /** Build new VARIANT menu choices ending in Array */\n    for (let section of menuSets) {\n        newVariantMenu[section] = {};\n        let currentVariantArray = [];\n        Object.keys(jb2a[section]).forEach(\n            function (a) {\n                Object.keys(jb2a[section][a]).forEach(function (b) {\n                    if (!newVariantMenu[section][a]) { newVariantMenu[section][a] = {} };\n                    currentVariantArray = [];\n                    Object.keys(jb2a[section][a][b]).forEach(function (c) {\n                        currentVariantArray.push(c)\n                    })\n                    currentVariantArray.sort((a, b) => a.localeCompare(b))\n                    currentVariantArray.forEach(function (d) {\n                        if (!newVariantMenu[section][a][b]) { newVariantMenu[section][a][b] = [] };\n                        newVariantMenu[section][a][b].push([d, game.i18n.localize(`autoanimations.variants.${d}`)])\n                    })\n                })\n            })\n    }\n\n    /** Build new COLOR menu choices ending in Array */\n    for (let section of menuSets) {\n        newColorMenu[section] = {};\n        let currentColorArray = [];\n        Object.keys(jb2a[section]).forEach(\n            function (a) {\n                Object.keys(jb2a[section][a]).forEach(function (b) {\n                    if (!newColorMenu[section][a]) { newColorMenu[section][a] = {} };\n                    Object.keys(jb2a[section][a][b]).forEach(function (c) {\n                        if (!newColorMenu[section][a][b]) { newColorMenu[section][a][b] = {} };\n                        currentColorArray = [];\n                        Object.keys(jb2a[section][a][b][c]).forEach(function (d) {\n                            currentColorArray.push(d)\n                        })\n                        currentColorArray.sort((a, b) => a.localeCompare(b))\n                        currentColorArray.forEach(function (d) {\n                            if (!newColorMenu[section][a][b][c]) { newColorMenu[section][a][b][c] = [] };\n                            if (d === \"_markers\") { return; }\n                            newColorMenu[section][a][b][c].push([ d, game.i18n.localize(`autoanimations.colors.${d}`) ])\n                        })\n\n                    })\n                })\n            })\n    }\n\n    /** Adds \"Random\" to each color menu set */\n    newAddRandom()\n    async function newAddRandom() {\n        Object.keys(newColorMenu).forEach(function (a) {\n            Object.keys(newColorMenu[a]).forEach(function (b) {\n                Object.keys(newColorMenu[a][b]).forEach(function (c) {\n                    Object.keys(newColorMenu[a][b][c]).forEach(function (d) {\n                        newColorMenu[a][b][c][d].push([ \"random\", game.i18n.localize('autoanimations.colors.random') ])\n                    })\n                })\n            })\n        })\n    }\n\n    /** Removes the _template from Range and Return menus */\n    newTypeMenu.range.splice(0, 1);\n    newTypeMenu.return.splice(0, 1);\n    delete newNameMenu.range._template\n    delete newNameMenu.return._template\n    delete newVariantMenu.range._template\n    delete newVariantMenu.return._template\n\n    debug( \"Compiled Select Menus\", {newTypeMenu, newNameMenu, newVariantMenu, newColorMenu} )\n}\n\nexport { aaReturnWeapons, newTypeMenu, newNameMenu, newVariantMenu, newColorMenu, aaRangeWeapons }\n\n\nasync function addRandom(menu) {\n    const menuSection = Object.keys(menu);\n    const length = menuSection.length;\n    for (var a = 0; a < length; a++) {\n        let subsetTypes = Object.keys(menu[menuSection[a]]);\n        let typesLength = subsetTypes.length;\n        for (var c = 0; c < typesLength; c++) {\n            let subsetNames = Object.keys(menu[menuSection[a]][subsetTypes[c]]);\n            let namesLength = subsetNames.length;\n            for (var i = 0; i < namesLength; i++) {\n                let subsetVariants = Object.keys(menu[menuSection[a]][subsetTypes[c]][subsetNames[i]]);\n                let variantsLength = subsetVariants.length;\n                for (var z = 0; z < variantsLength; z++) {\n                    menu[menuSection[a]][subsetTypes[c]][subsetNames[i]][subsetVariants[z]].random = game.i18n.localize('autoanimations.colors.random');\n                }\n            }\n        }\n    }\n}\n\nasync function remove_Template(menu) {\n    const menuSection = Object.keys(menu);\n    for (let section of menuSection) {\n        delete menu[section]._template\n    }\n}\n","import { buildFile } from \"../file-builder/build-filepath.js\"\nimport { aaReturnWeapons, aaRangeWeapons } from \"../../database/jb2a-menu-options.js\";\n\nexport async function melee(handler, animationData) {\n    const data = animationData.primary;\n    const secondary = animationData.secondary;\n    const sourceFX = animationData.sourceFX;\n    const targetFX = animationData.targetFX;\n    const macro = animationData.macro;\n\n    const sourceToken = handler.sourceToken;\n    let sourceTokenGS = (sourceToken.w / canvas.grid.size) * 5;\n    if (data.video?.animation === \"claw\" || data.video?.animation === \"bite\") {\n        sourceTokenGS = sourceToken.w / canvas.grid.size;\n    }\n\n    const switchDisabled = game.settings.get(\"autoanimations\", \"rangeSwitch\")\n\n    const switchReturn = data.meleeSwitch.options.switchType === \"on\" && aaReturnWeapons.includes(data.video.animation)\n        ? data.meleeSwitch.options.isReturning\n        : data.meleeSwitch.options.switchType === \"custom\" && aaReturnWeapons.includes(data.meleeSwitch.video.animation)\n            ? data.meleeSwitch.options.isReturning\n            : false;\n\n    let range = {};\n    if (data.meleeSwitch.options.switchType === \"on\") {\n        range = aaRangeWeapons.includes(data.video.animation) && !data.video.customPath ? await buildFile(\"range\", data.video, false, { isReturnable: true }) : {};\n    } else if (data.meleeSwitch.options.switchType === \"custom\") {\n        range = !data.meleeSwitch?.video?.customPath ? await buildFile(\"range\", data.meleeSwitch.video, data.meleeSwitch.video.customPath, { isReturnable: true }) : {};\n    }\n\n    let switchDistance = 5;\n    if (handler.systemId === \"swade\") { switchDistance = 1 }\n    if (handler.systemId === \"alienrpg\") { switchDistance = canvas.grid.distance * 1.5 }\n    if (handler.systemId === \"gurps\") { switchDistance = 0; }\n\n    let rangeArray = [];\n    let meleeArray = [];\n\n    // Compile separate Range and Melee arrays where applicable, with Hit determination for Sequencer Miss effect\n    for (let target of handler.allTargets) {\n\n        let distanceTo = handler.getDistance(target);\n        let rangeDistance = data.meleeSwitch.options.detect === \"manual\"\n            ? data.meleeSwitch.options.range\n            : (switchDistance / canvas.dimensions.distance) + handler.reachCheck;\n\n        let hit = !handler.playOnMiss ? true : handler.hitTargetsId.includes(target.id) ? true : false;\n\n        if ((distanceTo > rangeDistance) && range.file && !switchDisabled) {\n            rangeArray.push({\n                token: target,\n                hit\n            })\n        } else {\n            meleeArray.push({\n                token: target,\n                moveTo: distanceTo > rangeDistance ? true : false,\n                hit\n            })\n        }\n    }\n    let aaSeq = await new Sequence(handler.sequenceData);\n    // Play Macro if Awaiting\n    if (macro && macro.playWhen === \"1\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n    // Extra Effects => Source Token if active\n    if (sourceFX) {\n        handler.compileSourceEffect(sourceFX, aaSeq)\n    }\n    // Primary Sound\n    if (data.sound && meleeArray.length > 0) {\n        aaSeq.addSequence(data.sound)\n    }\n    // Animation Start Hook\n    aaSeq.thenDo(function () {\n        Hooks.callAll(\"aa.animationStart\", sourceToken, handler.allTargets)\n    })\n\n    if (meleeArray.length) {\n        for (let i = 0; i < meleeArray.length; i++) {\n            let currentTarget = meleeArray[i];\n\n            let meleeSeq = aaSeq.effect()\n            meleeSeq.file(data.path.file)\n            meleeSeq.opacity(data.options.opacity)\n            meleeSeq.atLocation(sourceToken)\n            if (currentTarget.moveTo) {\n                meleeSeq.moveTowards(currentTarget.token)\n            } else {\n                meleeSeq.rotateTowards(currentTarget.token)\n                meleeSeq.anchor({ x: 0.4, y: 0.5 })\n            }\n            meleeSeq.size(sourceTokenGS * data.options.size, { gridUnits: true })\n            meleeSeq.repeats(data.options.repeat, data.options.repeatDelay)\n            meleeSeq.randomizeMirrorY()\n            meleeSeq.missed(!currentTarget.hit)\n            meleeSeq.name(\"spot\" + ` ${currentTarget.token.id}`)\n            if (data.options.elevation === 0) {\n                meleeSeq.belowTokens(true)\n            } else {\n                meleeSeq.elevation(handler.elevation(sourceToken, data.options.isAbsolute, data.options.elevation), { absolute: data.options.isAbsolute })\n            }\n            meleeSeq.zIndex(data.options.zIndex)\n            if (data.options.tint) {\n                meleeSeq.tint(data.options.tintColor)\n                meleeSeq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n            }\n            if (i === meleeArray.length - 1 && data.options.isWait) {\n                meleeSeq.waitUntilFinished(data.options.delay)\n            } else if (!data.options.isWait) {\n                meleeSeq.delay(data.options.delay)\n            }\n            meleeSeq.playbackRate(data.options.playbackRate)\n        }\n\n        if (secondary) {\n            handler.compileSecondaryEffect(secondary, aaSeq, meleeArray.map(e => e.token), targetFX.enable, true)\n        }\n        if (targetFX) {\n            handler.compileTargetEffect(targetFX, aaSeq, meleeArray.map(e => e.token), true)\n        }\n    }\n\n    if (rangeArray.length) {\n        // Switch Sound\n        if (data.meleeSwitch?.sound) {\n            aaSeq.addSequence(data.meleeSwitch.sound)\n        }\n\n        // Range Switch attacks\n        for (let i = 0; i < rangeArray.length; i++) {\n            let currentTarget = rangeArray[i];\n\n            let rangeSeq = aaSeq.effect()\n            rangeSeq.file(range.file)\n            rangeSeq.atLocation(sourceToken)\n            rangeSeq.stretchTo(currentTarget.token)\n            rangeSeq.opacity(data.options.opacity)\n            rangeSeq.zIndex(data.options.zIndex)\n            rangeSeq.repeats(data.options.repeat, data.options.repeatDelay)\n            rangeSeq.missed(!currentTarget.hit)\n            rangeSeq.name(\"spot\" + ` ${currentTarget.token.id}`)\n            if (data.options.elevation === 0) {\n                rangeSeq.belowTokens(true)\n            } else {\n                rangeSeq.elevation(handler.elevation(sourceToken, data.options.isAbsolute, data.options.elevation), { absolute: data.options.isAbsolute })\n            }\n            rangeSeq.playbackRate(data.options.playbackRate)\n            if (data.options.tint) {\n                rangeSeq.tint(data.options.tintColor)\n                rangeSeq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n            }\n            if (i === rangeArray.length - 1 && data.options.isWait) {\n                rangeSeq.waitUntilFinished(data.options.delay)\n            } else if (!data.options.isWait) {\n                rangeSeq.delay(data.options.delay)\n            }\n        }\n\n        // Return Animation if Enabled\n        if (switchReturn) {\n            for (let i = 0; i < rangeArray.length; i++) {\n                let currentTarget = rangeArray[i].token\n\n                let returnSeq = aaSeq.effect()\n                returnSeq.file(range.returnFile)\n                returnSeq.opacity(data.options.opacity)\n                returnSeq.atLocation(sourceToken)\n                returnSeq.repeats(data.options.repeat, data.options.repeatDelay)\n                returnSeq.stretchTo(\"spot\" + ` ${currentTarget.id}`)\n                returnSeq.zIndex(data.options.zIndex)\n                returnSeq.playbackRate(data.options.playbackRate)\n                if (data.options.tint) {\n                    returnSeq.tint(data.options.tintColor)\n                    returnSeq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n                }\n            }\n        }\n        if (secondary) {\n            handler.compileSecondaryEffect(secondary, aaSeq, rangeArray.map(e => e.token), targetFX.enable, true)\n        }\n        if (targetFX) {\n            handler.compileTargetEffect(targetFX, aaSeq, rangeArray.map(e => e.token), true)\n        }\n    }\n\n    // Macro if Concurrent\n    if (macro && macro.playWhen === \"0\") {\n        handler.runMacro(macro)\n    }\n\n    // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n    if (macro && macro.playWhen === \"3\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n\n    aaSeq.play()\n\n}\n","import { aaReturnWeapons } from \"../../database/jb2a-menu-options.js\";\n\nconst wait = (delay) => new Promise((resolve) => setTimeout(resolve, delay));\n\nexport async function range(handler, animationData) {\n\n    const data = animationData.primary;\n    const secondary = animationData.secondary;\n    const sourceFX = animationData.sourceFX;\n    const targetFX = animationData.targetFX;\n    const macro = animationData.macro;\n    const sourceToken = handler.sourceToken;\n    const onlyX = data.enableCustom ? data.onlyX : false;\n    const switchReturn = aaReturnWeapons.includes(data.video.animation) && !data.video.enableCustom ? data.options.isReturning : false;\n\n    let returnDelay;\n    switch (true) {\n        case data.video.animation.includes('dagger'):\n        case data.video.animation.includes('hammer'):\n            returnDelay = 1000;\n            break;\n        default:\n            returnDelay = 1500;\n    }\n\n    let aaSeq = await new Sequence(handler.sequenceData)\n\n    // Play Macro if Awaiting\n    if (macro && macro.playWhen === \"1\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n    // Extra Effects => Source Token if active\n    if (sourceFX) {\n        handler.compileSourceEffect(sourceFX, aaSeq)\n    }\n    // Primary Sound\n    if (data.sound) {\n        aaSeq.addSequence(data.sound)\n    }\n    // Animation Start Hook\n    aaSeq.thenDo(function () {\n        Hooks.callAll(\"aa.animationStart\", sourceToken, handler.allTargets)\n    })\n    // Primary Animation\n    for (let i = 0; i < handler.allTargets.length; i++) {\n        let currentTarget = handler.allTargets[i]\n        let hit;\n\n        if (handler.playOnMiss) {\n            hit = handler.hitTargetsId.includes(currentTarget.id) ? true : false;\n        } else {\n            hit = true;\n        }\n        let nextSeq = aaSeq.effect()\n        nextSeq.file(data.path.file)\n        if (data.options.animationSource) {\n            nextSeq.atLocation({ x: data.options.fakeLocation.x, y: data.options.fakeLocation.y })\n        } else {\n            if (data.options.reverse) {\n                nextSeq.atLocation(currentTarget)\n            } else {\n                nextSeq.atLocation(sourceToken)\n            }\n        }\n        if (data.options.reverse) {\n            nextSeq.stretchTo(sourceToken, { onlyX: onlyX, randomOffset: data.options.randomOffset })\n        } else {\n            nextSeq.stretchTo(currentTarget, { onlyX: onlyX, randomOffset: data.options.randomOffset })\n        }\n        nextSeq.randomizeMirrorY()\n        nextSeq.repeats(data.options.repeat, data.options.repeatDelay)\n        nextSeq.opacity(data.options.opacity)\n        nextSeq.missed(!hit || handler.systemData.forceMiss || false)\n        nextSeq.name(\"spot\" + ` ${currentTarget.id}`)\n        if (data.options.elevation === 0) {\n            nextSeq.belowTokens(true)\n        } else {\n            nextSeq.elevation(handler.elevation(sourceToken, data.options.isAbsolute, data.options.elevation), { absolute: data.options.isAbsolute })\n        }\n        nextSeq.zIndex(data.options.zIndex)\n        if (data.options.tint) {\n            nextSeq.tint(data.options.tintColor)\n            nextSeq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n        }\n        if (i === handler.allTargets.length - 1 && data.options.isWait) {\n            nextSeq.waitUntilFinished(data.options.delay)\n        } else if (!data.options.isWait) {\n            nextSeq.delay(data.options.delay)\n        }\n        nextSeq.playbackRate(data.options.playbackRate)\n    }\n\n    // Return Animation if Enabled\n    if (switchReturn) {\n        for (let i = 0; i < handler.allTargets.length; i++) {\n            let currentTarget = handler.allTargets[i]\n\n            let returnSeq = aaSeq.effect()\n            returnSeq.file(data.path.returnFile)\n            returnSeq.opacity(data.options.opacity)\n            returnSeq.atLocation(sourceToken)\n            returnSeq.repeats(data.options.repeat, data.options.repeatDelay)\n            returnSeq.stretchTo(\"spot\" + ` ${currentTarget.id}`)\n            returnSeq.zIndex(data.options.zIndex)\n            returnSeq.playbackRate(data.options.playbackRate)\n            if (data.options.tint) {\n                returnSeq.tint(data.options.tintColor)\n                returnSeq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n            }\n        }\n    }\n\n    // secondary animation and sound\n    if (secondary) {\n        handler.compileSecondaryEffect(secondary, aaSeq, handler.allTargets, targetFX.enable, true)\n    }\n    if (targetFX) {\n        handler.compileTargetEffect(targetFX, aaSeq, handler.allTargets, true)\n    }\n\n    // Macro if Concurrent\n    if (macro && macro.playWhen === \"0\") {\n        handler.runMacro(macro)\n    }\n\n    // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n    if (macro && macro.playWhen === \"3\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n\n    aaSeq.play()\n    await wait(handler.animEnd)\n\n    // Animation End Hook\n    Hooks.callAll(\"aa.animationEnd\", sourceToken, handler.allTargets)\n}\n","import { howToDelete } from \"../../constants/constants.js\";\n\nexport async function ontoken(handler, animationData) {\n\n    const sourceToken = handler.sourceToken;\n\n    const data = animationData.primary;\n    const secondary = animationData.secondary;\n    const sourceFX = animationData.sourceFX;\n    const targetFX = animationData.targetFX;\n    const macro = animationData.macro;\n    const sourceSize = handler.getSize(data.options.isRadius, data.options.size, sourceToken, data.options.addTokenWidth)\n\n    const aaSeq = await new Sequence(handler.sequenceData)\n    const bottomAnim = data.path.filePath?.replace('Above', 'Below')\n\n    let newTargetArray = [];\n    for (let target of handler.allTargets) {\n        let checkAnim = Sequencer.EffectManager.getEffects({ object: target, origin: handler.itemUuid }).length > 0;\n        if (!checkAnim) { newTargetArray.push(target) }\n    }\n\n    // Play Macro if Awaiting\n    if (macro && macro.playWhen === \"1\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n    // Extra Effects => Source Token if active\n    if (sourceFX) {\n        handler.compileSourceEffect(sourceFX, aaSeq)\n    }\n    // Primary Sound\n    if (data.sound) {\n        aaSeq.addSequence(data.sound)\n    }\n    // Animation Start Hook\n    aaSeq.thenDo(function () {\n        Hooks.callAll(\"aa.animationStart\", sourceToken, handler.allTargets)\n    })\n\n    if (data.options.playOn === \"source\" || (data.options.playOn === \"default\" && handler.allTargets.length < 1)) {\n\n        const sourceCheckAnim = Sequencer.EffectManager.getEffects({ object: sourceToken, origin: handler.itemUuid }).length > 0\n        if (sourceCheckAnim) { return; }\n\n        if (data.options.isShieldFX) {\n            let bottomEffect = aaSeq.effect();\n            if (handler.isActiveEffect) {\n                bottomEffect.name(handler.itemName + `${sourceToken.id}`)\n            } else {\n                bottomEffect.name(\"spot\" + ` ${sourceToken.id}`)\n            }\n            setBottom(sourceToken, sourceSize, bottomEffect)\n            let topEffect = aaSeq.effect();\n            if (handler.isActiveEffect) {\n                topEffect.name(handler.itemName + `${sourceToken.id}`)\n            } else {\n                topEffect.name(\"spot\" + ` ${sourceToken.id}`)\n            }\n            setTop(sourceToken, sourceSize, topEffect)\n            if (data.options.isWait) {\n                topEffect.waitUntilFinished(data.options.wait)\n            }\n        } else {\n            let aaEffect = aaSeq.effect();\n            if (handler.isActiveEffect) {\n                aaEffect.name(handler.itemName + `${sourceToken.id}`)\n            } else {\n                aaEffect.name(\"spot\" + ` ${sourceToken.id}`)\n            }\n            setPrimary(sourceToken, sourceSize, aaEffect)\n            if (data.options.isWait) {\n                aaEffect.waitUntilFinished(data.options.delay)\n            }\n        }\n\n        if (secondary) {\n            handler.compileSecondaryEffect(secondary, aaSeq, [sourceToken], false, false)\n        }\n    }\n\n    // Target Effect sections\n    if ((data.options.playOn === 'target' || data.options.playOn === 'default') && handler.allTargets.length > 0) {\n\n        if (newTargetArray.length < 1) { return; }\n\n        for (let i = 0; i < newTargetArray.length; i++) {\n            let currentTarget = newTargetArray[i]\n            //let targetTokenGS = data.options.isRadius ? data.options.size : (currentTarget.w / canvas.grid.size) * 1.5 * data.options.size;\n            let targetSize = handler.getSize(data.options.isRadius, data.options.size, currentTarget, data.options.addTokenWidth)\n            let hit;\n\n            if (handler.playOnMiss) {\n                hit = handler.hitTargetsId.includes(currentTarget.id) ? true : false;\n            } else {\n                hit = true;\n            }\n\n            if (data.options.isShieldFX) {\n                let bottomEffect = aaSeq.effect();\n                bottomEffect.name(\"spot\" + ` ${currentTarget.id}`)\n                setBottom(currentTarget, targetSize, bottomEffect)\n\n                let topEffect = aaSeq.effect();\n                topEffect.name(\"spot\" + ` ${currentTarget.id}`)\n                setTop(currentTarget, targetSize, topEffect)\n\n                if (i === newTargetArray.length - 1 && data.options.isWait) {\n                    topEffect.waitUntilFinished(data.options.delay)\n                } else if (!data.options.isWait) {\n                    topEffect.delay(data.options.delay)\n                }\n            } else {\n                let aaEffect = aaSeq.effect();\n                aaEffect.name(\"spot\" + ` ${currentTarget.id}`)\n                setPrimary(currentTarget, targetSize, aaEffect)\n\n                if (i === newTargetArray.length - 1 && data.options.isWait) {\n                    aaEffect.waitUntilFinished(data.options.delay)\n                } else if (!data.options.isWait) {\n                    aaEffect.delay(data.options.delay)\n                }\n            }\n        }\n\n        if (secondary) {\n            handler.compileSecondaryEffect(secondary, aaSeq, newTargetArray, targetFX.enable, true)\n        }\n        if (targetFX) {\n            handler.compileTargetEffect(targetFX, aaSeq, handler.allTargets, true)\n        }\n    }\n\n    if (data.options.playOn === \"both\") {\n\n        const sourceCheckAnim = Sequencer.EffectManager.getEffects({ object: sourceToken, origin: handler.itemUuid }).length > 0\n        let newTargetArray = [];\n        for (let target of handler.allTargets) {\n            let checkAnim = Sequencer.EffectManager.getEffects({ object: target, origin: handler.itemUuid }).length > 0;\n            if (!checkAnim) { newTargetArray.push(target) }\n        }\n        if (sourceCheckAnim && newTargetArray.length < 1) {\n            return;\n        }\n        if (!sourceCheckAnim) {\n            if (data.options.isShieldFX) {\n                let bottomEffect = aaSeq.effect();\n                bottomEffect.name(\"spot\" + ` ${sourceToken.id}`);\n                setBottom(sourceToken, sourceSize, bottomEffect)\n\n                let topEffect = aaSeq.effect();\n                topEffect.name(\"spot\" + ` ${sourceToken.id}`)\n                setTop(sourceToken, sourceSize, topEffect)\n\n                if (newTargetArray.length < 1 && data.options.isWait) {\n                    topEffect.waitUntilFinished(data.options.delay)\n                } else if (!data.options.isWait) {\n                    topEffect.delay(data.options.delay)\n                }\n            } else {\n                let aaEffect = aaSeq.effect();\n                aaEffect.name(\"spot\" + ` ${sourceToken.id}`)\n                setPrimary(sourceToken, sourceSize, aaEffect)\n\n                if (newTargetArray.length < 1 && data.options.isWait) {\n                    aaEffect.waitUntilFinished(data.options.delay)\n                } else if (!data.options.isWait) {\n                    aaEffect.delay(data.options.delay)\n                }\n            }\n        }\n\n        if (newTargetArray.length) {\n            for (let i = 0; i < newTargetArray.length; i++) {\n                let currentTarget = newTargetArray[i]\n                let targetSize = handler.getSize(data.options.isRadius, data.options.size, currentTarget, data.options.addTokenWidth);\n\n                let hit;\n                if (handler.playOnMiss) {\n                    hit = handler.hitTargetsId.includes(currentTarget.id) ? true : false;\n                } else {\n                    hit = true;\n                }\n\n                if (data.options.isShieldFX) {\n                    let bottomEffect = aaSeq.effect();\n                    bottomEffect.name(\"spot\" + ` ${currentTarget.id}`)\n                    setBottom(currentTarget, targetSize, bottomEffect)\n\n                    let topEffect = aaSeq.effect();\n                    topEffect.name(\"spot\" + ` ${currentTarget.id}`)\n                    setTop(currentTarget, targetSize, topEffect)\n\n                    if (i === newTargetArray.length - 1 && data.options.isWait) {\n                        topEffect.waitUntilFinished(data.options.delay)\n                    } else if (!data.options.isWait) {\n                        topEffect.delay(data.options.delay)\n                    }\n                } else {\n                    let aaEffect = aaSeq.effect();\n                    aaEffect.name(\"spot\" + ` ${currentTarget.id}`)\n                    setPrimary(currentTarget, targetSize, aaEffect)\n\n                    if (i === newTargetArray.length - 1 && data.options.isWait) {\n                        aaEffect.waitUntilFinished(data.options.delay)\n                    } else if (!data.options.isWait) {\n                        aaEffect.delay(data.options.delay)\n                    }\n                }\n            }\n        }\n\n        if (secondary && !sourceCheckAnim) {\n            handler.compileSecondaryEffect(secondary, aaSeq, [sourceToken], false, false)\n        }\n        if (newTargetArray.length) {\n            if (secondary) {\n                handler.compileSecondaryEffect(secondary, aaSeq, newTargetArray, targetFX.enable, true)\n            }\n            if (targetFX) {\n                handler.compileTargetEffect(targetFX, aaSeq, handler.allTargets, true)\n            }\n        }\n    }\n\n    function setBottom(token, size, seq) {\n        seq.file(bottomAnim)\n        seq.opacity(data.options.opacity)\n        seq.size(size, { gridUnits: true })\n        seq.elevation(token.document?.elevation - 1)\n        if (data.options.isMasked) {\n            bottomEffect.mask(token)\n        }\n        seq.rotate(180)\n        seq.fadeIn(250)\n        seq.fadeOut(500)\n        if (data.options.tint) {\n            seq.tint(data.options.tintColor)\n            seq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n        }\n        if (!data.options.persistent) {\n            seq.atLocation(token)\n            seq.repeats(data.options.repeat, data.options.repeatDelay)\n        }\n        if (data.options.persistent) {\n            seq.attachTo(token, { bindAlpha: data.options.unbindAlpha, bindVisibility: data.options.unbindVisibility })\n            seq.persist(true, { persistTokenPrototype: true })\n            seq.origin(handler.itemUuid)\n        }\n        seq.playbackRate(data.options.playbackRate)\n        if (handler.systemData.tieToDocuments) {\n            seq.tieToDocuments(handler.item)\n        }\n    }\n    function setTop(token, size, seq) {\n        seq.file(data.path.filePath)\n        seq.opacity(data.options.opacity)\n        seq.size(size, { gridUnits: true })\n        seq.elevation(token.document?.elevation)\n        if (data.options.isMasked) {\n            seq.mask(token)\n        }\n        seq.fadeIn(250)\n        seq.fadeOut(500)\n        if (data.options.tint) {\n            seq.tint(data.options.tintColor)\n            seq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n        }\n        if (!data.options.persistent) {\n            seq.atLocation(token)\n            seq.repeats(data.options.repeat, data.options.repeatDelay)\n        }\n        if (data.options.persistent) {\n            seq.attachTo(token, { bindAlpha: data.options.unbindAlpha, bindVisibility: data.options.unbindVisibility })\n            seq.persist(true, { persistTokenPrototype: true })\n            seq.origin(handler.itemUuid)\n        }\n        seq.playbackRate(data.options.playbackRate)\n        if (handler.systemData.tieToDocuments) {\n            seq.tieToDocuments(handler.item)\n        }\n    }\n    function setPrimary(token, size, seq) {\n        seq.file(data.path.file)\n        seq.opacity(data.options.opacity)\n        seq.size(size, { gridUnits: true })\n        if (data.options.elevation === 0) {\n            seq.belowTokens(true)\n        } else {\n            seq.elevation(handler.elevation(token, data.options.isAbsolute, data.options.elevation), { absolute: data.options.isAbsolute })\n        }\n        if (data.options.isMasked) {\n            seq.mask(token)\n        }\n        seq.zIndex(data.options.zIndex)\n        if (data.options.tint) {\n            seq.tint(data.options.tintColor)\n            seq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n        }\n        if (!data.options.persistent) {\n            seq.atLocation(token)\n            seq.repeats(data.options.repeat, data.options.repeatDelay)\n            seq.fadeIn(data.options.fadeIn)\n            seq.fadeOut(data.options.fadeOut)\n        }\n        if (data.options.persistent) {\n            seq.fadeIn(data.options.fadeIn)\n            if (data.video.variant === \"complete\" || data.video.animation === \"complete\") { }\n            else {\n                seq.fadeOut(data.options.fadeOut)\n            }\n            seq.attachTo(token, { bindAlpha: data.options.unbindAlpha, bindVisibility: data.options.unbindVisibility })\n            seq.persist(true, { persistTokenPrototype: true })\n            seq.origin(handler.itemUuid)\n        }\n        seq.anchor({ x: data.options.anchor.x, y: data.options.anchor.y })\n        seq.playbackRate(data.options.playbackRate)\n        if (handler.systemData.tieToDocuments) {\n            seq.tieToDocuments(handler.item)\n        }\n    }\n    // Macro if Concurrent\n    if (macro && macro.playWhen === \"0\") {\n        handler.runMacro(macro)\n    }\n\n    // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n    if (macro && macro.playWhen === \"3\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n\n    aaSeq.play()\n\n    Hooks.callAll(\"aa.animationEnd\", sourceToken, handler.allTargets)\n    if (data.options.persistent) { howToDelete(\"sequencerground\") }\n}\n","export var socketlibSocket = undefined;\n\nexport let setupSocket = () => {\n    //@ts-ignore\n    if (game.modules.get(\"socketlib\")?.active) {\n        socketlibSocket = window.socketlib.registerModule(\"autoanimations\");\n        socketlibSocket.register(\"placeTile\", placeTile);\n        socketlibSocket.register(\"removeTile\", removeTile);\n        socketlibSocket.register(\"checkSettings\", checkSettings);\n    }\n};\n\nexport async function placeTile(data) {\n    await canvas.scene.createEmbeddedDocuments(\"Tile\", [data]);\n}\n\nexport async function removeTile(data) {\n    await canvas.scene.deleteEmbeddedDocuments(\"Tile\", data);\n}\n\nexport async function checkSettings() {\n\n    let photoSensitive = game.settings.get(\"core\", \"photosensitiveMode\");\n    let sequencerPermissions = game.settings.get(\"sequencer\", \"permissions-effect-create\");\n    let sequencerEffectsEnabled = game.settings.get(\"sequencer\", \"effectsEnabled\");\n    let sequencerSoundsEnabled = game.settings.get(\"sequencer\", \"soundsEnabled\");\n    let aaEffectsEnabled = game.settings.get(\"autoanimations\", \"killAllAnim\") === \"off\" ? false : true;\n    let aaAutorecDisabled = game.settings.get(\"autoanimations\", \"disableAutoRec\");\n\n    return {\n        coreSettings: {photoSensitive},\n        sequencerSettings: {permission: sequencerPermissions, effects: sequencerEffectsEnabled, sounds: sequencerSoundsEnabled},\n        aaSettings: {effects: aaEffectsEnabled, autorec: aaAutorecDisabled}\n    }\n}","import { socketlibSocket } from \"../../socketset.js\";\nimport { howToDelete } from \"../../constants/constants.js\";\nconst wait = (delay) => new Promise((resolve) => setTimeout(resolve, delay));\n\nexport async function templatefx(handler, animationData, templateDocument) {\n\n    const sourceToken = handler.sourceToken;\n\n    const template = handler.templateData ? handler.templateData : templateDocument //? templateDocument : canvas.templates.placeables[canvas.templates.placeables.length - 1].document;\n    //const templateData = template ? template || {}: template.document || {};;\n    const templateType = template?.t;\n\n    const data = animationData.primary;\n    const secondary = animationData.secondary;\n    const sourceFX = animationData.sourceFX;\n    const targetFX = animationData.targetFX;\n    const macro = animationData.macro;\n\n    const templateTypes = ['sphere', 'cylinder', 'radius']\n\n    let aaSeq = await new Sequence(handler.sequenceData)\n\n    if ((data.options.persistent && data.options.persistType !== \"attachtemplate\") || !data.options.persistent) {\n        aaSeq.thenDo(function () {\n            if (data.options.removeTemplate) {\n                canvas.scene.deleteEmbeddedDocuments(\"MeasuredTemplate\", [template.id])\n            }\n        })\n    }\n\n    // Play Macro if Awaiting\n    if (macro && macro.playWhen === \"1\" && !macro?.args?.warpgateTemplate) {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n    // Extra Effects => Source Token if active\n    if (sourceFX) {\n        handler.compileSourceEffect(sourceFX, aaSeq)\n    }\n    // Primary Sound\n    if (data.sound) {\n        aaSeq.addSequence(data.sound)\n    }\n\n    aaSeq.thenDo(function () {\n        Hooks.callAll(\"aa.animationStart\", sourceToken, \"no-target\")\n    })\n\n    if (data.options.persistent && (data.options.persistType === 'overheadtile' || data.options.persistType === 'groundtile')) {\n\n        let trueSize;\n        if (templateType === 'rect') {\n            trueSize = template.width;\n        } else {\n            trueSize = template.distance * 2;\n        }\n\n        const templateLength = canvas.grid.size * (trueSize / canvas.dimensions.distance);\n        const isOverhead = data.options.persistType === 'overheadtile' ? true : false;\n\n        const tileWidth = templateLength * data.options.scale.x;\n        const tileHeight = templateLength * data.options.scale.y;\n\n        const tileX = templateType === 'circle' ? (template.x - (tileWidth / 2)) : (template.x + ((templateLength - tileWidth) / 2));\n        const tileY = templateType === 'circle' ? (template.y - (tileHeight / 2)) : (template.y + ((templateLength - tileHeight) / 2));\n\n        const templateObject = buildTile(tileX, tileY, isOverhead, tileWidth, tileHeight);\n\n        if(data.options.tint && data.options.tintColor) templateObject.texture.tint = data.options.tintColor;\n\n        templateObject.alpha = data.options.opacity;\n\n        aaSeq.thenDo(function () {\n            socketlibSocket.executeAsGM(\"placeTile\", templateObject);\n        })\n\n    } else {\n\n        //const templateType = templateData.t;\n\n        const templateSeq = aaSeq.effect();\n        if (templateType === 'cone' || templateType === 'ray') {\n            const trueHeight = templateType === 'cone' ? template.distance : template.width * 2;\n            setPrimary(templateSeq)\n            templateSeq.size({\n                width: (canvas.grid.size * (template.distance / canvas.dimensions.distance)) * data.options.scale.x,\n                height: (canvas.grid.size * (trueHeight / canvas.dimensions.distance)) * data.options.scale.y,\n            })\n            if (data.options.isMasked) {\n                templateSeq.mask(template)\n            }\n            if (data.options.persistent) {\n                templateSeq.persist(true)\n                if (data.options.persistType === 'attachtemplate') {\n                    templateSeq.attachTo(template)\n                    templateSeq.rotateTowards(template, { attachTo: true })\n                } else {\n                    templateSeq.atLocation(template, { cacheLocation: true })\n                    templateSeq.rotateTowards(template, { cacheLocation: true })\n                }\n            } else {\n                templateSeq.atLocation(template, { cacheLocation: true })\n                templateSeq.repeats(data.options.repeat, data.options.repeatDelay)\n                templateSeq.rotateTowards(template, { cacheLocation: true })\n            }\n            if (!data.options.isWait) {\n                templateSeq.delay(data.options.delay)\n            }\n        }\n\n        if (templateType === 'circle' || templateType === 'rect') {\n            let trueSize;\n            if (templateType === 'rect') {\n                trueSize = Math.sqrt(Math.pow(template.distance, 2) / 2)\n            } else {\n                trueSize = template.distance * 2;\n            }\n            setPrimary(templateSeq)\n            templateSeq.size({\n                width: canvas.grid.size * (trueSize / canvas.dimensions.distance) * data.options.scale.x,\n                height: canvas.grid.size * (trueSize / canvas.dimensions.distance) * data.options.scale.y,\n            })\n            if (data.options.persistent) {\n                templateSeq.persist(true)\n                if (data.options.persistType === 'attachtemplate') {\n                    templateSeq.attachTo(template, { bindRotation: true })\n                } else {\n                    templateSeq.atLocation(template, { cacheLocation: true })\n                    templateSeq.persist()\n                }\n            } else {\n                templateSeq.atLocation(template, { cacheLocation: true })\n                templateSeq.repeats(data.options.repeat, data.options.repeatDelay)\n            }\n            if (!data.options.isWait) {\n                templateSeq.delay(data.options.delay)\n            }\n        }\n    }\n\n    if (handler.allTargets.length > 0 && data.options.isWait) {\n        aaSeq.wait(data.options.delay || 250)\n    }\n\n    if (secondary) {\n        handler.compileSecondaryEffect(secondary, aaSeq, handler.allTargets, targetFX.enable, false)\n    }\n    if (targetFX) {\n        handler.compileTargetEffect(targetFX, aaSeq, handler.allTargets, false)\n    }\n\n    if (macro && macro.playWhen === \"0\" && !macro?.args?.warpgateTemplate) {\n        handler.runMacro(macro)\n    }\n\n    // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n    if (macro && macro.playWhen === \"3\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n\n    aaSeq.play()\n\n    if (data.options.persistent) {\n        switch (data.options.persistType) {\n            case \"overheadtile\":\n                howToDelete(\"overheadtile\")\n                break;\n            case \"groundtile\":\n                howToDelete(\"groundtile\")\n                break;\n            case \"sequencerground\":\n                howToDelete(\"sequencerground\")\n                break;\n        }\n    }\n\n    await wait(500)\n    Hooks.callAll(\"aa.animationEnd\", sourceToken, \"no-target\")\n\n\n    function setPrimary(seq) {\n        seq.anchor(convertToXY(data.options.anchor))\n        seq.file(data.path.file)\n        seq.opacity(data.options.opacity)\n        seq.origin(handler.itemUuid)\n        if (data.options.elevation === 0) {\n            seq.belowTokens(true)\n        } else {\n            seq.elevation(handler.elevation(sourceToken, data.options.isAbsolute, data.options.elevation), { absolute: data.options.isAbsolute })\n        }\n        seq.zIndex(data.options.zIndex)\n        seq.rotate(data.options.rotate)\n        if (data.options.isMasked) {\n            seq.mask(template)\n        }\n        seq.playbackRate(data.options.playbackRate)\n        seq.name(handler.rinsedName)\n        seq.aboveLighting(data.options.aboveTemplate)\n        seq.xray(data.options.xray)\n        if (data.options.tint) {\n            seq.tint(data.options.tintColor)\n            seq.filter(\"ColorMatrix\", { contrast: data.options.contrast, saturate: data.options.saturation })\n        }\n        function convertToXY(input) {\n            let menuType = data.video.menuType;\n            let templateType = template.t;\n            let defaultAnchor = templateType === \"circle\" || templateType === \"rect\" ? { x: 0.5, y: 0.5 } : { x: 0, y: 0.5 };\n            if (!input) { return defaultAnchor }\n            let dNum = menuType === \"cone\" || menuType === \"ray\"\n                ? input || \"0, 0.5\"\n                : input || \"0.5, 0.5\"\n            //if (!input) { return {x: dNum, y: dNum}}\n            let parsedInput = dNum.split(',').map(s => s.trim());\n            let posX = Number(parsedInput[0]);\n            let posY = Number(parsedInput[1]);\n            if (parsedInput.length === 2) {\n                return { x: posX, y: posY }\n            } else if (parsedInput.length === 1) {\n                return { x: posX, y: posX }\n            }\n        }\n    }\n\n    function buildTile(tileX, tileY, isOverhead, tileWidth, tileHeight) {\n        return {\n            alpha: data.options.opacity,\n            width: tileWidth,\n            height: tileHeight,\n            img: data.path.filePath,\n            texture: { src: data.path.filePath }, // v12 uses this instead of img:\n            overhead: isOverhead, // false sets Tile in canvas.background. true sets Tile to canvas.foreground\n            occlusion: {\n                alpha: `${data.options.occlusionAlpha}`,\n                mode: data.options.occlusionMode,\n            },\n            video: {\n                autoplay: true,\n                loop: true,\n                volume: 0,\n            },\n            flags: {\n                autoanimations: {\n                    origin: handler.itemUuid,\n                }\n            },\n            x: tileX,\n            y: tileY,\n            z: 100,\n        }\n    }\n}\n","import { howToDelete } from \"../../constants/constants.js\";\n\nexport async function aura(handler, animationData) {\n\n    const data = animationData.primary;\n    const secondary = animationData.secondary;\n    const sourceFX = animationData.sourceFX;\n    const targetFX = animationData.targetFX;\n    const macro = animationData.macro;\n    const easeArray = ['easeInOutCubic', 'easeInOutQuart', 'easeInQuad', 'easeInOutQuad', 'easeInCirc']\n    const sourceToken = handler.sourceToken;\n\n    let newTargetArray = [];\n    for (let target of handler.allTargets) {\n        let checkAnim = Sequencer.EffectManager.getEffects({ object: target, origin: handler.itemUuid }).length > 0;\n        if (!checkAnim) { newTargetArray.push(target) }\n    }\n\n    let aaSeq = new Sequence(handler.sequenceData)\n    // Play Macro if Awaiting\n    if (macro && macro.playWhen === \"1\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n    // Extra Effects => Source Token if active\n    if (sourceFX) {\n        handler.compileSourceEffect(sourceFX, aaSeq)\n    }\n    // Primary Sound\n    if (data.sound) {\n        aaSeq.addSequence(data.sound)\n    }\n    // Animation Start Hook\n    aaSeq.thenDo(function () {\n        Hooks.callAll(\"aa.animationStart\", handler)\n    })\n\n    if (data.options.playOn === \"source\" || (data.options.playOn === \"default\" && handler.allTargets.length < 1)) {\n        const sourceCheckAnim = Sequencer.EffectManager.getEffects({ object: sourceToken, origin: handler.itemUuid }).length > 0;\n        if (sourceCheckAnim) { return; }\n\n        let aaEffect = aaSeq.effect();\n        if (handler.isActiveEffect) {\n            aaEffect.name(handler.itemName + `${sourceToken.id}`)\n        } else {\n            aaEffect.name(\"spot\" + ` ${sourceToken.id}`)\n        }\n        setPrimary(sourceToken, aaEffect)\n        if (data.options.isWait) {\n            aaEffect.waitUntilFinished(data.options.delay)\n        }\n\n        if (secondary) {\n            handler.compileSecondaryEffect(secondary, aaSeq, [sourceToken], false, false)\n        }\n    }\n\n    if ((data.options.playOn === 'target' || data.options.playOn === 'default') && handler.allTargets.length > 0) {\n\n        let newTargetArray = [];\n        for (let target of handler.allTargets) {\n            let checkAnim = Sequencer.EffectManager.getEffects({ object: target, origin: handler.itemUuid }).length > 0;\n            if (!checkAnim) { newTargetArray.push(target) }\n        }\n        if (newTargetArray.length < 1) { return; }\n\n        for (let i = 0; i < newTargetArray.length; i++) {\n            let currentTarget = newTargetArray[i]\n\n            let aaEffect = aaSeq.effect();\n            setPrimary(currentTarget, aaEffect)\n\n            if (i === newTargetArray.length - 1 && data.options.isWait) {\n                aaEffect.waitUntilFinished(data.options.delay)\n            } else if (!data.options.isWait) {\n                aaEffect.delay(data.options.delay)\n            }\n        }\n        if (secondary) {\n            handler.compileSecondaryEffect(secondary, aaSeq, newTargetArray, targetFX.enable, false)\n        }\n        if (targetFX) {\n            handler.compileTargetEffect(targetFX, aaSeq, newTargetArray, false)\n        }\n    }\n\n    if (data.options.playOn === \"both\") {\n        const sourceCheckAnim = Sequencer.EffectManager.getEffects({ object: sourceToken, origin: handler.itemUuid }).length > 0;\n        let newTargetArray = [];\n        for (let target of handler.allTargets) {\n            let checkAnim = Sequencer.EffectManager.getEffects({ object: target, origin: handler.itemUuid }).length > 0;\n            if (!checkAnim) { newTargetArray.push(target) }\n        }\n        if (sourceCheckAnim && newTargetArray.length < 1) {\n            return;\n        }\n        if (!sourceCheckAnim) {\n            let aaEffect = aaSeq.effect();\n            setPrimary(sourceToken, aaEffect)\n\n            if (handler.allTargets.length < 1 && data.options.isWait) {\n                aaEffect.waitUntilFinished(data.options.delay)\n            } else if (!data.options.isWait) {\n                aaEffect.delay(data.options.delay)\n            }\n        }\n\n        if (newTargetArray.length > 0) {\n            for (let i = 0; i < newTargetArray.length; i++) {\n                let currentTarget = newTargetArray[i]\n\n                let aaEffect = aaSeq.effect();\n                setPrimary(currentTarget, aaEffect)\n\n                if (i === newTargetArray.length - 1 && data.options.isWait) {\n                    aaEffect.waitUntilFinished(data.options.delay)\n                } else if (!data.options.isWait) {\n                    aaEffect.delay(data.options.delay)\n                }\n            }\n        }\n\n        if (secondary) {\n            handler.compileSecondaryEffect(secondary, aaSeq, [sourceToken], false, false)\n        }\n        if (newTargetArray.length > 0) {\n            if (secondary) {\n                handler.compileSecondaryEffect(secondary, aaSeq, newTargetArray, targetFX.enable, false)\n            }\n            if (targetFX) {\n                handler.compileTargetEffect(targetFX, aaSeq, newTargetArray, false)\n            }\n        }\n    }\n\n    function randomEase() {\n        return easeArray[Math.floor(Math.random() * easeArray.length)]\n    }\n\n    function setPrimary(token, seq) {\n        const size = handler.getSize(true, data.options.size, token, data.options.addTokenWidth)\n        seq.file(data.path.file)\n        seq.persist(true, { persistTokenPrototype: true })\n        seq.origin(handler.itemUuid)\n        if (data.options.tint) {\n            seq.tint(data.options.tintColor)\n            seq.filter(\"ColorMatrix\", { saturate: data.options.tintSaturate })\n            //seq.filter(\"ColorMatrix\", {tint: data.options.tintColor})\n        }\n        seq.size(size, { gridUnits: true })\n        if (data.options.elevation === 0) {\n            seq.belowTokens(true)\n        } else {\n            seq.elevation(handler.elevation(token, data.options.isAbsolute, data.options.elevation), { absolute: data.options.isAbsolute })\n        }\n        seq.attachTo(token, { bindAlpha: data.options.unbindAlpha, bindVisibility: data.options.unbindVisibility })\n        seq.opacity(data.options.opacity)\n        seq.fadeIn(data.options.fadeIn)\n        if (data.video.variant === \"complete\" || data.video.animation === \"complete\") { }\n        else {\n            seq.fadeOut(data.options.fadeOut)\n        }\n        seq.zIndex(data.options.zIndex)\n        /*\n        if (data.options.easeIn) {\n            seq.animateProperty(\"sprite\", \"width\", { from: 0, to: size, duration: 750, ease: data.options.ease, gridUnits: true })\n            seq.animateProperty(\"sprite\", \"height\", { from: 0, to: size, duration: 750, ease: data.options.ease, gridUnits: true })\n        }\n        */\n        if (data.options.breath) {\n            seq.loopProperty(\"sprite\", \"scale.x\", { from: data.options.breathMin, to: data.options.breathMax, duration: data.options.breathDuration, pingPong: true, ease: 'easeInOutSine', gridUnits: true })\n            seq.loopProperty(\"sprite\", \"scale.y\", { from: data.options.breathMin, to: data.options.breathMax, duration: data.options.breathDuration, pingPong: true, ease: 'easeInOutSine', gridUnits: true })\n        }\n        if (data.options.alpha) {\n            seq.loopProperty(\"alphaFilter\", \"alpha\", { from: data.options.alphaMin, to: data.options.alphaMax, duration: data.options.alphaDuration, pingPong: true })\n        }\n        seq.playbackRate(data.options.playbackRate)\n        if (handler.systemData.tieToDocuments) {\n            seq.tieToDocuments(handler.item)\n        }\n    }\n    // Macro if Concurrent\n    if (macro && macro.playWhen === \"0\") {\n        handler.runMacro(macro)\n    }\n\n    // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n    if (macro && macro.playWhen === \"3\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n\n    aaSeq.play()\n\n    howToDelete(\"sequencerground\")\n\n}","import { buildFile } from \"../file-builder/build-filepath.js\";\n\nexport async function dualattach(handler, animationData) {\n\n    const data = animationData.primary;\n    const sourceFX = animationData.sourceFX;\n    const macro = animationData.macro;\n\n    const animFile = await buildFile(\"range\", data.video, data.video.customPath)\n\n    const onlyX = data.video.customPath ? data.options.onlyX : false;\n\n    const sourceToken = handler.sourceToken;\n    let effectExists = Sequencer.EffectManager.getEffects({ object: sourceToken, origin: handler.itemUuid })\n\n    async function cast() {\n\n        let aaSeq = await new Sequence(handler.sequenceData);\n        // Play Macro if Awaiting\n        if (macro && macro.playWhen === \"1\" && !macro?.args?.warpgateTemplate) {\n            handler.complileMacroSection(aaSeq, macro)\n        }\n        // Extra Effects => Source Token if active\n        if (sourceFX) {\n            handler.compileSourceEffect(sourceFX, aaSeq)\n        }\n        // Primary Sound\n        if (data.sound) {\n            aaSeq.addSequence(data.sound)\n        }\n        // Animation Start Hook\n        aaSeq.thenDo(function () {\n            Hooks.callAll(\"aa.animationStart\", sourceToken, handler.allTargets)\n        })\n        for (let target of handler.allTargets) {\n            let checkTarget = effectExists.filter(i => i.data.target.includes(target.id)).length > 0;\n            if (!checkTarget) {\n                const effect = aaSeq.effect()\n                    .file(animFile.file)\n                    .attachTo(sourceToken)\n                    .stretchTo(target, { attachTo: true, onlyX: onlyX })\n                    .persist(true)\n                    .playbackRate(data.options.playbackRate)\n                    .origin(handler.itemUuid)\n\n                if (data.options.elevation === 0) {\n                    effect.belowTokens(true)\n                } else {\n                    effect.elevation(handler.elevation(sourceToken, data.options.isAbsolute, data.options.elevation), { absolute: data.options.isAbsolute })\n                }\n            }\n        }\n        // Macro if Concurrent\n        if (macro && macro.playWhen === \"0\" && !macro?.args?.warpgateTemplate) {\n            handler.runMacro(macro)\n        }\n\n        // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n        if (macro && macro.playWhen === \"3\") {\n            handler.complileMacroSection(aaSeq, macro)\n        }\n\n        aaSeq.play()\n\n        //Hooks.callAll(\"aa.animationEnd\", sourceToken, handler.allTargets)\n    }\n    cast()\n}\n","import { howToDelete } from \"../../constants/constants.js\";\n\n// Credit goes to Wasp-Sequencer Guy for the structure of the Fireball Sequence\nexport async function proToTemp(handler, animationData, templateDocument) {\n\n    const data = animationData.primary;\n    const sourceFX = animationData.sourceFX;\n    const secondary = animationData.secondary;\n    const targetFX = animationData.targetFX;\n    const macro = animationData.macro;\n\n    const template = handler.templateData ? handler.templateData : templateDocument//canvas.templates.placeables[canvas.templates.placeables.length - 1];\n    const sourceToken = handler.sourceToken;\n\n    let aaSeq = await new Sequence(handler.sequenceData)\n    if (data.projectile.options.removeTemplate) {\n        aaSeq.thenDo(function () {\n            canvas.scene.deleteEmbeddedDocuments(\"MeasuredTemplate\", [template.id])\n        })\n    }\n\n    // Play Macro if Awaiting\n    if (macro && macro.playWhen === \"1\" && !macro?.args?.warpgateTemplate) {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n\n    // Extra Effects => Source Token if active\n    if (sourceFX) {\n        handler.compileSourceEffect(sourceFX, aaSeq)\n    }\n    //Projectile Sound and Animation\n    if (data.projectile.sound) {\n        aaSeq.addSequence(data.projectile.sound)\n    }\n    const effect1 = aaSeq.effect()\n        .file(data.projectile.path.file)\n        .atLocation(sourceToken)\n        .stretchTo(template, { cacheLocation: true, randomOffset: data.projectile.options.randomOffset })\n        .repeats(data.projectile.options.repeat, data.projectile.options.repeatDelay)\n        .playbackRate(data.projectile.options.playbackRate)\n        .waitUntilFinished(data.projectile.options.wait)\n\n    if (data.projectile.options.elevation === 0) {\n        effect1.belowTokens(true)\n    } else {\n        effect1.elevation(handler.elevation(sourceToken, data.projectile.options.isAbsolute, data.projectile.options.elevation), { absolute: data.projectile.options.isAbsolute })\n    }\n    if (data.preExplosion.sound) {\n        aaSeq.addSequence(data.preExplosion.sound)\n    }\n    if (data.preExplosion.enable) {\n        const effectExplode = aaSeq.effect()\n            .file(data.preExplosion.path.file)\n            .atLocation(template, { cacheLocation: true })\n            .scaleToObject(data.preExplosion.options.scale)\n            .repeats(data.preExplosion.options.repeat, data.preExplosion.options.repeatDelay)\n            .playbackRate(data.preExplosion.options.playbackRate)\n            .waitUntilFinished(data.preExplosion.options.wait)\n            .aboveLighting(data.preExplosion.options.aboveTemplate)\n\n        if (data.preExplosion.options.elevation === 0) {\n            effectExplode.belowTokens(true)\n        } else {\n            effectExplode.elevation(handler.elevation(sourceToken, data.preExplosion.options.isAbsolute, data.preExplosion.options.elevation), { absolute: data.preExplosion.options.isAbsolute })\n        }\n    }\n    if (data.explosion.sound) {\n        aaSeq.addSequence(data.explosion.sound)\n    }\n    const effect2 = aaSeq.effect()\n        .file(data.explosion.path.file)\n        .atLocation(template, { cacheLocation: true })\n        .scaleToObject(data.explosion.options.scale)\n        .repeats(data.explosion.options.repeat, data.explosion.options.repeatDelay)\n        .zIndex(5)\n        .playbackRate(data.explosion.options.playbackRate)\n        .waitUntilFinished(-750 + data.explosion.options.wait)\n        .aboveLighting(data.explosion.options.aboveTemplate)\n\n    if (data.explosion.options.elevation === 0) {\n        effect2.belowTokens(true)\n    } else {\n        effect2.elevation(handler.elevation(sourceToken, data.explosion.options.isAbsolute, data.explosion.options.elevation), { absolute: data.explosion.options.isAbsolute })\n    }\n    if (data.afterImage.customPath) {\n        const effectAfterImage = aaSeq.effect()\n            .file(data.afterImage.customPath)\n            .atLocation(template, { cacheLocation: true })\n            .scaleToObject(data.afterImage.options.scale)\n            .persist(data.afterImage.options.persistent)\n            .origin(handler.itemUuid)\n            .fadeIn(250)\n            .fadeOut(500)\n\n        if (data.afterImage.options.elevation === 0) {\n            effectAfterImage.belowTokens(true)\n        } else {\n            effectAfterImage.elevation(handler.elevation(sourceToken, data.afterImage.options.isAbsolute, data.afterImage.options.elevation), { absolute: data.afterImage.options.isAbsolute })\n        }\n    }\n\n    if (secondary) {\n        handler.compileSecondaryEffect(secondary, aaSeq, handler.allTargets, targetFX.enable, false)\n    }\n    if (targetFX) {\n        handler.compileTargetEffect(targetFX, aaSeq, handler.allTargets, false)\n    }\n\n    if (macro && macro.playWhen === \"0\" && !macro?.args?.warpgateTemplate) {\n        handler.runMacro(macro)\n    }\n\n    if (data.afterImage.enable && data.afterImage.options.persistent) { howToDelete(\"sequencerground\") }\n\n    // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n    if (macro && macro.playWhen === \"3\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n\n    aaSeq.play()\n\n}","import { buildFile } from \"../file-builder/build-filepath.js\"\n\nexport async function teleportation(handler, animationData) {\n\n    const sourceToken = handler.sourceToken;\n    const data = animationData.primary;\n    const macro = animationData.macro;\n    //const sourceFX = animationData.sourceFX;\n\n\n    const startFile = await buildFile(\"static\", data.start, data.start.customPath);\n    const endFile = await buildFile(\"static\", data.end, data.end.customPath);\n    const betweenFile = await buildFile(\"range\", data.between, data.between.customPath);\n\n    let sourceTokenGS = sourceToken.w / canvas.grid.size;\n\n    let userIDs = Array.from(game.users).map(user => user.id);\n    let gmIDs = Array.from(game.users).filter(i => i.isGM).map(user => user.id)\n\n    const hideBorder = data.options.hideFromPlayers ? gmIDs : userIDs;\n    //const userColor = game.user?.color ? \"0x\" + game.user.color.replace(/^#/, '') : 0x0D26FF;\n    //const filePath = data.options.measureType === 'equidistant' ? \"modules/autoanimations/animationPNG/teleportSquare.png\" : \"modules/autoanimations/animationPNG/teleportCircle.png\"\n\n    const delayFade = data.options.delayFade || 0;\n    const delayReturn = data.options.delayReturn || 0;\n    \n    const borderSize = (sourceTokenGS / canvas.grid.size) + 0.5 + (data.options.range / canvas.dimensions.distance);\n\n    const borderType = data.options.measureType === \"equidistant\" ? \"roundedRect\" : \"circle\";\n    const borderLocation = borderType === \"circle\" ? {} : {offset: {x: -borderSize, y: -borderSize}, gridUnits: true};\n    const borderData = {\n        lineSize: 4,\n        lineColor: game.user.color.toString(),\n        radius: borderType === \"circle\" ? borderSize : .25,\n        width: borderSize * 2,\n        height: borderSize * 2,\n        gridUnits: true,\n        name: \"teleBorder\"\n    }\n\n    let borderSeq = await new Sequence(handler.sequenceData)\n    let borderEffect = borderSeq.effect()\n        .fadeIn(500)\n        .persist()\n        .fadeOut(500)\n        .atLocation(sourceToken, borderLocation)\n        .shape(borderType, borderData)\n        .elevation(sourceToken?.document?.elevation + 1)\n        .forUsers(hideBorder)\n        .name(\"teleportation\")\n        .opacity(0.75)\n    if (borderType === \"circle\") {\n        borderEffect.loopProperty(\"shapes.teleBorder\", \"scale.x\", { from: 0.98, to: 1.02, duration: 1500, pingPong: true, ease: \"easeInOutSine\" })\n        borderEffect.loopProperty(\"shapes.teleBorder\", \"scale.y\", { from: 0.98, to: 1.02, duration: 1500, pingPong: true, ease: \"easeInOutSine\" })    \n    }\n    borderSeq.play()\n\n    let pos;\n    \n    if (game.Levels3DPreview?._active) { \n        const circle3d = data.options.range ? new game.Levels3DPreview.CONFIG.entityClass.RangeRingEffect(sourceToken, data.options.range, game.user.color) : null;\n        const templateData = { t: \"circle\", user: game.user.id, distance: 5, x: 0, y: 0, fillColor: \"#ffffff\", width: 1, texture: \"\", direction: 0,}\n        getPositionFrom3D();\n        function getPositionFrom3D() { \n            game.Levels3DPreview.CONFIG.entityClass.Template3D.drawPreview(new MeasuredTemplateDocument(templateData), false).then((response) => {\n                if(!response) return getPositionFrom3D();\n                pos = {\n                    x: response.x,\n                    y: response.y,\n                    elevation: parseFloat(response.flags.levels.elevation),\n                }\n    \n                let topLeft = canvas.grid.getTopLeft(pos.x, pos.y);\n    \n                if (canvas.grid.measureDistance(sourceToken, { x: topLeft[0], y: topLeft[1] }, { gridSpaces: true }) <= data.options.range) {\n                    //console.log(canvas.grid.measureDistance(sourceToken, { x: topLeft[0], y: topLeft[1] }, {gridSpaces: true}))\n                    if (data.options.checkCollision && testCollision(pos)) {\n                        ui.notifications.error(\"Your Path is Blocked!! Try Again\")\n                        return getPositionFrom3D();\n                    } else {\n                        circle3d?.remove();\n                        deleteTemplatesAndMove();\n                    }\n                } else {\n                    ui.notifications.error(game.i18n.format(\"autoanimations.settings.teleport\"))\n                    return getPositionFrom3D();\n                }\n            });\n        }\n    }\n        \n\n    canvas.app.stage.addListener('pointerdown', event => {\n        if (event.data.button !== 0) { return }\n        pos = event.data.getLocalPosition(canvas.app.stage);\n\n        let topLeft = canvas.grid.getTopLeft(pos.x, pos.y);\n\n        if (canvas.grid.measureDistance(sourceToken, { x: topLeft[0], y: topLeft[1] }, { gridSpaces: true }) <= data.options.range) {\n            //console.log(canvas.grid.measureDistance(sourceToken, { x: topLeft[0], y: topLeft[1] }, {gridSpaces: true}))\n            if (data.options.checkCollision && testCollision(pos)) {\n                ui.notifications.error(\"Your Path is Blocked!! Try Again\")\n            } else {\n                deleteTemplatesAndMove();\n                canvas.app.stage.removeListener('pointerdown');    \n            }\n        } else {\n            ui.notifications.error(game.i18n.format(\"autoanimations.settings.teleport\"))\n        }\n    });\n\n    function testCollision(pos) {\n        let pointerCenter = {\n            x: canvas.grid.getCenter(pos.x, pos.y)[0],\n            y: canvas.grid.getCenter(pos.x, pos.y)[1],\n        };\n        return sourceToken.checkCollision(pointerCenter)\n    }\n\n    async function deleteTemplatesAndMove() {\n\n        let gridPos = canvas.grid.getTopLeft(pos.x, pos.y);\n        let centerPos;\n        if (canvas.scene.gridType === 0) {\n            centerPos = [gridPos[0] + sourceToken.w, gridPos[1] + sourceToken.w];\n        } else {\n            centerPos = canvas.grid.getCenter(pos.x, pos.y);\n        }\n\n        Sequencer.EffectManager.endEffects({ name: \"teleportation\" })\n\n        let aaSeq = new Sequence(handler.sequenceData);\n\n        // Play Macro if Awaiting\n        if (macro && macro.playWhen === \"1\" && !macro?.args?.warpgateTemplate) {\n            handler.complileMacroSection(aaSeq, macro)\n        }\n\n        let startX = sourceToken.center?.x;\n        let startY = sourceToken.center?.y;\n\n        if (data.sound) {\n            aaSeq.addSequence(data.sound)\n        }\n        // Start Animation\n        if (data.start) {\n            let startEffect = aaSeq.effect()\n            startEffect.file(startFile.file)\n            startEffect.atLocation({x: startX, y: startY})\n            startEffect.elevation(handler.elevation(sourceToken, data.start.options.isAbsolute, data.start.options.elevation), {absolute: data.start.options.isAbsolute})\n            startEffect.size(sourceTokenGS * 1.5 * data.start.options.size, { gridUnits: true })\n            startEffect.opacity(data.start.options.opacity)\n            startEffect.fadeIn(data.start.options.fadeIn)\n            startEffect.fadeOut(data.start.options.fadeOut)\n            startEffect.delay(data.start.options.delay)\n            startEffect.playbackRate(data.start.options.playbackRate)\n            //startEffect.randomRotation()\n            if (data.start.options.isMasked) {\n                startEffect.mask(sourceToken)\n            }\n        }\n        //aaSeq.wait(250)\n\n        // Between Animation\n        if (data.between) {\n            let betweenEffect = aaSeq.effect()\n            betweenEffect.file(betweenFile.file)\n            betweenEffect.atLocation({x: startX, y: startY})\n            betweenEffect.delay(data.between.options.delay)\n            betweenEffect.elevation(handler.elevation(sourceToken, data.between.options.isAbsolute, data.between.options.elevation), {absolute: data.between.options.isAbsolute})\n            betweenEffect.opacity(data.between.options.opacity)\n            betweenEffect.stretchTo({ x: centerPos[0], y: centerPos[1] })\n            betweenEffect.playbackRate(data.between.options.playbackRate)\n        }\n\n        // End Animation\n        if (data.end) {\n            let endEffect = aaSeq.effect()\n            endEffect.file(endFile.file)\n            endEffect.atLocation({ x: centerPos[0], y: centerPos[1] })\n            endEffect.delay(data.end.options.delay)\n            endEffect.elevation(handler.elevation(sourceToken, data.end.options.isAbsolute, data.end.options.elevation), {absolute: data.end.options.isAbsolute})\n            endEffect.size(sourceTokenGS * 1.5 * data.end.options.size, { gridUnits: true })\n            endEffect.fadeIn(data.end.options.fadeIn)\n            endEffect.fadeOut(data.end.options.fadeOut)\n            endEffect.playbackRate(data.end.options.playbackRate)\n            //endEffect.randomRotation()\n            if (data.end.options.isMasked) {\n                endEffect.mask(sourceToken)\n            }\n        }\n\n        // FadeOut Token\n        if (data.options.alpha < 1) {\n            let fadeSeq = aaSeq.animation()\n            fadeSeq.on(sourceToken)\n            fadeSeq.opacity(data.options.alpha)\n            fadeSeq.delay(delayFade)\n        }\n\n        // Move Token\n        let animSeq = aaSeq.animation()\n        animSeq.on(sourceToken)\n        //animSeq.opacity(data.start.options.alpha)\n        animSeq.delay(data.options.delayMove)\n        //animSeq.fadeOut(data.start.options.tokenOut)\n        if (data.options.teleport) {\n            animSeq.teleportTo({ x: gridPos[0], y: gridPos[1], elevation: pos.elevation } ,{ relativeToCenter: !canvas.scene.grid.type })\n        } else {\n            animSeq.moveTowards({ x: gridPos[0], y: gridPos[1], elevation: pos.elevation }, { relativeToCenter: !canvas.scene.grid.type })\n            animSeq.moveSpeed(data.options.speed)\n        }\n        \n        // Token to Full Opacity\n        if (data.options.alpha < 1) {\n            let tokenSeq = aaSeq.animation()\n            tokenSeq.on(sourceToken)\n            tokenSeq.opacity(1)\n            tokenSeq.delay(delayFade + delayReturn)\n            //tokenSeq.fadeIn(data.end.options.tokenIn)\n        }\n\n        // Macro if Concurrent\n        if (macro && macro.playWhen === \"0\" && !macro?.args?.warpgateTemplate) {\n            handler.runMacro(macro)\n        }\n\n        // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n        if (macro && macro.playWhen === \"3\") {\n            handler.complileMacroSection(aaSeq, macro)\n        }\n\n        aaSeq.play()\n\n    };\n}\n","const wait = (delay) => new Promise((resolve) => setTimeout(resolve, delay));\n\nexport async function thunderwave(handler, animationData, config) {\n\n    const sourceToken = handler.sourceToken;\n    const data = animationData.primary;\n    const sourceFX = animationData.sourceFX;\n    const macro = animationData.macro;\n\n    let color = data.color;\n\n    const template = config ? config : canvas.templates.placeables[canvas.templates.placeables.length - 1];\n    const templateData = config ? config || {} : template.document || {};\n    const trueSize = Math.sqrt(Math.pow(templateData.distance, 2) / 2)\n\n    const getPosition = getRelativePosition(sourceToken, templateData)\n    const angle = getPosition.angle;\n    const databasePath = color === \"random\"\n        ? `autoanimations.templatefx.square.thunderwave.${getPosition.type}`\n        : `autoanimations.templatefx.square.thunderwave.${getPosition.type}.${color}`\n\n    const gridSize = canvas.scene.dimensions.size;\n\n    let aaSeq = await new Sequence(handler.sequenceData)\n\n    // Play Macro if Awaiting\n    if (macro && macro.playWhen === \"1\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n    // Extra Effects => Source Token if active\n    if (sourceFX) {\n        handler.compileSourceEffect(sourceFX, aaSeq)\n    }\n    // Primary Sound\n    if (data.sound) {\n        aaSeq.addSequence(data.sound)\n    }\n\n    aaSeq.thenDo(function () {\n        Hooks.callAll(\"aa.animationStart\", sourceToken, \"no-target\")\n    })\n    const effect = aaSeq.effect()\n        .file(databasePath)\n        //.atLocation({ x: templateData.x + (gridSize * 1.5), y: templateData.y + (gridSize * 1.5) })\n        .atLocation(template, { cacheLocation: true })\n        .anchor({ x: 0.5, y: 0.5 })\n        .rotate(angle)\n        .opacity(data.options.opacity)\n        .size(3, { gridUnits: true })\n        .repeats(data.options.repeat, data.options.repeatDelay)\n\n    if (data.options.elevation === 0) {\n        effect.belowTokens(true)\n    } else {\n        effect.elevation(handler.elevation(sourceToken, data.options.isAbsolute, data.options.elevation), { absolute: data.options.isAbsolute })\n    }\n\n    if (macro && macro.playWhen === \"0\") {\n        handler.runMacro(macro)\n    }\n\n    if (data.options.removeTemplate) {\n        canvas.scene.deleteEmbeddedDocuments(\"MeasuredTemplate\", [template.id])\n    }\n\n    // Macro if Awaiting Animation. This will respect the Delay/Wait options in the Animation chains\n    if (macro && macro.playWhen === \"3\") {\n        handler.complileMacroSection(aaSeq, macro)\n    }\n\n    aaSeq.play()\n\n    await wait(500)\n    Hooks.callAll(\"aa.animationEnd\", sourceToken, \"no-target\")\n\n    function getRelativePosition(token, template) {\n        const xPos = token.x;\n        const yPos = token.y;\n        const tempY = template.y;\n        const tempX = template.x;\n        const gridSize = canvas.scene.dimensions.size;\n        let type;\n        let angle;\n        switch (true) {\n            case ((xPos >= tempX && xPos <= (tempX + (gridSize * 2))) && (yPos >= tempY && yPos <= (tempY + (gridSize * 2)))):\n                type = 'center';\n                angle = 0;\n                break;\n            case ((xPos >= (tempX - gridSize)) && (xPos <= (tempX - (gridSize * 0.5)))) && ((yPos >= (tempY - gridSize)) && (yPos <= (tempY - (gridSize * 0.5)))):\n                type = 'left';\n                angle = 270;\n                break;\n            case ((xPos >= (tempX + (gridSize * 2.5))) && (xPos <= (tempX + (gridSize * 3)))) && ((yPos >= (tempY - gridSize)) && (yPos <= (tempY - (gridSize * 0.5)))):\n                type = 'left';\n                angle = 180;\n                break;\n            case (((xPos >= (tempX + (gridSize * 2.5))) && xPos <= (tempX + (gridSize * 3))) && ((yPos <= (tempY + (gridSize * 3))) && (yPos >= (tempY + (gridSize * 2.5))))):\n                type = 'left';\n                angle = 90;\n                break;\n            case ((xPos <= (tempX - (gridSize * 0.5))) && (xPos >= (tempX - gridSize))) && ((yPos <= (tempY + (gridSize * 3))) && (yPos >= (tempY + (gridSize * 2.5)))):\n                type = 'left';\n                angle = 0;\n                break;\n            case (xPos >= (tempX + (gridSize * 2.5))) && ((yPos >= tempY) && yPos <= (tempY + (gridSize * 2))):\n                type = 'mid';\n                angle = 90;\n                break;\n            case ((xPos >= tempX) && (xPos <= (tempX + (gridSize * 2)))) && ((yPos >= (tempY - gridSize)) && (yPos <= (tempY - (gridSize * 0.5)))):\n                type = 'mid';\n                angle = 180;\n                break;\n            case ((xPos >= (tempX - gridSize)) && (xPos <= (tempX - (gridSize * 0.5)))) && ((yPos >= tempY) && yPos <= (tempY + (gridSize * 2))):\n                type = 'mid';\n                angle = 270;\n                break;\n            default:\n                type = 'mid';\n                angle = 0;\n        }\n        return { type, angle }\n    }\n}\n","import { DataSanitizer } from \"../../aa-classes/DataSanitizer.js\";\n\nexport async function particleEffects(handler, animationData = {}) {\n    //const options3d = autoObject ? autoObject.levels3d || {} : handler.flags?.levels3d || {};\n\n    const data = await DataSanitizer.compileParticleData(animationData)\n    if (!data) {return;}\n    \n    let hit = true;\n    try {\n    if (handler.playOnMiss) {\n            hit = handler.allTargets.some((target) => handler.hitTargetsId.includes(target.id)) ? true : false;\n        }\n    }catch(e){}\n\n    data.miss = !hit;\n\n    const secondary = data.secondary;\n    const tokenAnim = data.tokenAnimation;\n\n    const sourceToken = handler.sourceToken;\n    //const target = handler.allTargets[0];\n    const targets = handler.allTargets;\n\n\n    /**\n     * This checks the \"Primary Animation\" sounds, and if present\n     * will play that sound alongside the 3D Particle Animation\n     */\n    if (data.sound) {\n        //let soundSeq = await new Sequence(\"Automated Animations\");\n        const audio = data.sound;\n        /*\n        soundSeq.sound()\n            .file(primary.itemAudio.file, true)\n            .volume(primary.itemAudio.volume)\n            .delay(primary.itemAudio.delay)\n            .repeats(primary.itemAudio.repeat, data.delay)\n            .startTime(primary.itemAudio.startTime)\n        */\n        audio.play()\n    }\n\n    const tokenAnimationData = {}\n\n    function compileTokenAnimationData() {\n        if (tokenAnim.source) {\n            tokenAnimationData.from = {\n                id: tokenAnim.sourceType,\n                options: {\n                    start: tokenAnim.sourceStart,\n                    end: tokenAnim.sourceEnd,    \n                }\n            }\n        }\n        if (tokenAnim.target) {\n            tokenAnimationData.to = {\n                id: tokenAnim.targetType,\n                options: {\n                    start: tokenAnim.targetStart,\n                    end: tokenAnim.targetEnd    \n                }\n            }\n        }\n        return tokenAnimationData\n    }\n\n    class ParticleFunctions {\n        static particle(data, sourceToken, targets) {\n                const spriteData = new Particle3D(data.type)\n                spriteData.from(sourceToken)\n                spriteData.to(targets)\n                spriteData.speed(data.speed)\n                spriteData.repeat(data.repeat)\n                spriteData.arc(data.arc)\n                spriteData.delay(data.delay)\n                spriteData.color(data.color01, data.color02)\n                spriteData.scale(data.scale)\n                spriteData.sprite(data.sprite)\n                spriteData.life(data.life)\n                spriteData.emitterSize(data.emittersize)\n                spriteData.alpha(data.alpha)\n                spriteData.mass(data.mass)\n                spriteData.miss(!!data.miss)\n            spriteData.gravity(data.gravity)\n            spriteData.rotateTowards(data.rotateTowards)\n            spriteData.rotation(data.rotationX, data.rotationY, data.rotationZ)\n            spriteData.duration(data.duration)\n            spriteData.onCenter(data.onCenter)\n            spriteData.autoSize(data.autoSize)\n                spriteData.rate(data.rate, 1)\n                spriteData.presetIntensity(data.rate)\n                if (tokenAnim.enable && (tokenAnim.source || tokenAnim.target)) {\n                    spriteData.playAnimation(compileTokenAnimationData())\n                }\n            if (secondary.enable) {\n                    spriteData.onEnd(\n                        new Particle3D(secondary.type ?? \"e\")\n                            .sprite(secondary.sprite)\n                            .speed(secondary.speed)\n                            .color(secondary.color01, secondary.color02)\n                            .scale(secondary.scale)\n                            .gravity(secondary.gravity)\n                            .life(secondary.life)\n                            .rate(secondary.rate, 1)\n                            .presetIntensity(secondary.rate)\n                            .emitterSize(secondary.emittersize)\n                            .duration(secondary.duration)\n                            .onCenter(secondary.onCenter)\n                            .autoSize(secondary.autoSize)\n                            .alpha(secondary.alpha)\n                            .mass(secondary.mass)\n                    )\n                }\n                spriteData.start()\n        }\n\n        static token() {\n            let tokens;\n            switch (data.playOn) {\n                case \"target\":\n                    tokens = targets;\n                    break;\n                case \"default\":\n                    if (targets.length) {\n                        tokens = targets;\n                    } else {\n                        tokens = sourceToken;\n                    }\n                    break;\n                case \"both\":\n                    if (targets.length) {\n                        tokens = [sourceToken, ...targets]\n                    } else {\n                        tokens = sourceToken\n                    }\n                    break;\n                default:\n                    tokens = sourceToken;\n            }\n            let options = {\n                repeats: data.repeat,\n                resetTime: data.resetTime\n            }\n            game.Levels3DPreview.playTokenAnimation(tokens, data.animationType, options);\n        }\n\n    }\n\n    data.type == \"token\" ? ParticleFunctions.token(data, sourceToken, targets) : ParticleFunctions.particle(data, sourceToken, targets)\n}","import { DataSanitizer } from \"../aa-classes/DataSanitizer.js\";\nimport { debug } from \"../constants/constants.js\";\nimport { AAAutorecFunctions } from \"../aa-classes/aaAutorecFunctions.js\";\n\nimport * as animate from \"../animation-functions\"\n\nconst wait = (delay) => new Promise((resolve) => setTimeout(resolve, delay));\n\nexport async function trafficCop(handler) {\n    if (!handler) { return; }\n    const data = foundry.utils.deepClone(handler.animationData);\n    if (data.advanced?.excludedType?.enabled && data.advanced?.excludedType?.path && data.advanced?.excludedType?.property) {\n        if (AAAutorecFunctions.checkExcludedProperty(handler.item, data.advanced?.excludedType?.property, data.advanced?.excludedType?.path)) {\n            return;\n        }\n    }\n    Hooks.callAll(\"aa.preDataSanitize\", handler, data);\n\n    const sanitizedData = await DataSanitizer._getAnimationData(handler, data);\n    Hooks.callAll(\"aa.preAnimationStart\", sanitizedData);\n\n    let globalDelay = game.settings.get(\"autoanimations\", \"globaldelay\");\n    await wait(globalDelay);\n\n    let aaTemplateHook;\n\n    if (sanitizedData.macro && sanitizedData.macro.enable && sanitizedData.macro.playWhen === \"2\") {\n\n        if (handler.isTemplateAnimation) {\n            switch (game.system.id) {\n                case \"a5e\":\n                case \"sw5e\":\n                case \"tormenta20\":\n                    aaTemplateHook = Hooks.once(\"createMeasuredTemplate\", async (template) => {\n                        //Hooks.callAll(\"aa.preAnimationStart\", sanitizedData, data);\n                        await wait(500)\n                        handler.templateData = template;\n                        playMacro()\n                    });\n                    setTimeout(killHook, 30000)\n                    break;\n                default:\n                    await wait(500)\n                    handler.templateData = canvas.templates?.placeables?.[canvas.templates.placeables.length - 1]?.document;\n                    playMacro()\n                }\n        } else {\n            playMacro()\n        }\n        function playMacro() {\n            handler.runMacro(sanitizedData.macro)\n            //new Sequence()\n            //.macro(sanitizedData.macro.name, handler.workflow, handler, sanitizedData.macro.args)\n            //.play()\n        }\n        return;\n    }\n\n    if (data.soundOnly?.sound?.enable && data.soundOnly?.sound?.file) {\n        const sound = {\n            file: data.soundOnly?.sound?.file ?? \"\",\n            volume: data.soundOnly?.sound?.volume ?? 0.75,\n            delay: data.soundOnly?.sound?.delay ?? 0,\n            startTime: data.soundOnly?.sound?.startTime ?? 0,\n            repeat: data.soundOnly?.sound?.repeat ?? 1,\n            repeatDelay: data.soundOnly?.sound?.repeatDelay ?? 250,\n        }\n        new Sequence(handler.sequenceData)\n            .sound()\n                .file(sound.file)\n                .volume(sound.volume)\n                .delay(sound.delay)\n                .startTime(sound.startTime)\n                .repeats(sound.repeat, sound.repeatDelay)\n            .play()\n        return;\n    }\n\n    if (data.levels3d?.type && game.Levels3DPreview?._active) {\n        animate.particleEffects(handler, data)\n        return;\n    }\n\n    const animationType = data.menu === \"preset\" ? data.presetType : data.menu === \"aefx\" ? data.activeEffectType : data.menu;\n    const targets = handler.allTargets?.length;\n\n    if (animationType === \"templatefx\" || animationType === \"proToTemp\") {\n        if (animationType === \"proToTemp\" && !handler.sourceToken) {\n            debug(\"Failed to initialize a Source Token\")\n            return;\n        }\n        debug(`${animationType} Animation Start\"`, handler, sanitizedData)\n        if (handler.templateData) {\n            await wait(500)\n            animate[animationType](handler, sanitizedData);\n            return;\n        }\n        // In place specifically for using Warpgate to spawn a Template thru a Macro\n        if (sanitizedData?.macro && sanitizedData?.macro?.args?.warpgateTemplate) {\n            // Play Macro if it is for using Crosshairs to create a Template\n            if (foundry.utils.isNewerVersion(game.version, 11)) {\n                new Sequence()\n                    .macro(sanitizedData.macro.name, { args: [handler.workflow, handler, sanitizedData.macro.args] })\n                    .play()\n            } else {\n                if (game.modules.get(\"advanced-macros\")?.active) {\n                    new Sequence()\n                        .macro(sanitizedData.macro.name, handler.workflow, handler, sanitizedData.macro.args)\n                        .play()\n                } else {\n                    new Sequence()\n                        .macro(sanitizedData.macro.name)\n                        .play()\n                }\n            }\n            aaTemplateHook = Hooks.once(\"createMeasuredTemplate\", async (template) => {\n                await wait(500)\n                animate[animationType](handler, sanitizedData, template);\n            });\n            setTimeout(killHook, 30000)\n            return;\n        }\n        //sections for Template Hooks.once or straight to function. Systems running the createMeasuredTemplate hook, or those whose workflow runs after template placement, will skip Hooks.once\n        switch (game.system.id) {\n            case \"a5e\":\n            case \"sf2e\":\n            case \"pf2e\":\n            case \"sw5e\":\n            case \"tormenta20\":\n                aaTemplateHook = Hooks.once(\"createMeasuredTemplate\", async (template) => {\n                    //Hooks.callAll(\"aa.preAnimationStart\", sanitizedData, data);\n                    await wait(500)\n                    animate[animationType](handler, sanitizedData, template);\n                });\n                setTimeout(killHook, 30000)\n                break;\n            default:\n                await wait(500)\n                let template = canvas.templates?.placeables?.[canvas.templates.placeables.length - 1]?.document\n                if (!template) {\n                    debug(\"No template found for the Template animaiton, existing early\")\n                    return;\n                }\n                animate[animationType](handler, sanitizedData, template);\n        }\n        return;\n    } else {\n        if (!handler.sourceToken || targets < 1 && (animationType === \"melee\" || animationType === \"range\")) {\n            Hooks.callAll(\"aa.animationEnd\", handler.sourceToken, \"no-target\");\n            debug(`${animationType} Animation End\", \"NO TARGETS`)\n            return;\n        }\n        debug(`${animationType} Animation Start\"`, sanitizedData)\n        //Hooks.callAll(\"aa.preAnimationStart\", sanitizedData, data);\n        animate[animationType](handler, sanitizedData);\n        return;\n    }\n    function killHook() {\n        Hooks.off(\"createMeasuredTemplate\", aaTemplateHook)\n    }\n}\n","import AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { trafficCop }       from \"../router/traffic-cop.js\";\nimport { custom_warning }   from \"../constants/constants.js\";\n/**\n *  AutoAnimations class allows for external calls to directly play animations\n * \n *  @param {Object} sourceToken // The Token using the item\n *  @param {Array} targets // An array of targets\n *  @param {Object} item // The item being used, or a false item with at least {name: \"ItemName\"} for Autorec\n *  @param {Object} options\n * \n *  Options include anything from workflow-data.js to override settings. Most common being:\n *  @param {Number} reachCheck // Reach for Source Token\n *  @param {Boolean} playOnMiss // Animation should play on Misses\n *  @param {Optional} hitTargets // Array or Set of tokens that are \"hit\"\n *  @param {Object} templateData // Pass a template to the system handler, undefined by default until a Template animation is played\n *\n */\nexport class AutoAnimations\n{\n    static async playAnimation(sourceToken, targets, item, options = {}) {\n        custom_warning(\"AutoAnimations.playAnimation is deprecated in favor of AutomatedAnimations.PlayAnimation. This will be removed in Version 5\")\n        if (!Array.isArray(targets)) {\n            targets = Array.from(targets)\n        }\n        const data = {\n            token: sourceToken,\n            targets: targets,\n            item: item,\n            ...options\n        }\n\n        const handler = await AAHandler.make(data)\n        trafficCop(handler);\n    }\n}\n\n/**\n * \n *  @param {Object} item // The item being used, or a false item with at least {name: \"ItemName\"} for Autorec\n *  @param {Object} sourceToken // The Token using the item\n * \n *  @param {Object} options \n * \n *  Options can be:\n *  @param {Array or Set or Object} targets // Array or Set of targeted tokens or a single Object\n *  @param {Optional} hitTargets // Array or Set of tokens that are \"hit\"\n *  @param {Number} reachCheck // Reach for Source Token\n *  @param {Boolean} playOnMiss // Animation should play on Misses\n *  @param {Object} templateData // Pass a template to the system handler, undefined by default until a Template animation is played\n * \n * @returns \n */\nexport async function playAnimation(sourceToken, item, options = {}) {\n    if (!item) { return; }\n\n    let targets;\n    if (options.targets) {\n        if (options.targets instanceof Set) {\n            targets = Array.from(options.targets)\n        } else if (options.targets instanceof Array) {\n            targets = options.targets;\n        } else {\n            targets = [options.targets]\n        }\n        //targets = !Array.isArray(options.targets) ? Array.from(options.targets) : options.targets;\n    } else {\n        targets = Array.from(game.user.targets);\n    }\n\n    const data = {\n        token: sourceToken,\n        targets: targets,\n        item: item,\n        ...options\n    }\n\n    const handler = await AAHandler.make(data)\n    trafficCop(handler);\n    return handler;\n}\n","async function mergeVersion01(data) {\n    let currentAutorec = data;\n    \n    const staticObject = currentAutorec.static;\n    if (staticObject) {\n        const staticLength = Object.keys(staticObject).length;\n        for (var i = 0; i < staticLength; i++) {\n            switch (staticObject[i].animation) {\n                case 'curewounds':\n                case 'generichealing':\n                case 'tollthedead':\n                    staticObject[i].staticOptions = 'staticSpells';\n                    break;\n                case 'bite':\n                case 'claw':\n                    staticObject[i].staticOptions = 'creature';\n                    break;\n                default:\n                    staticObject[i].staticOptions = 'explosion';\n            }\n        }\n    }\n    const templates = currentAutorec.templates;\n    if (templates) {\n        const templateLength = Object.keys(templates).length;\n        for (var i = 0; i < templateLength; i++) {\n            switch (true) {\n                case templates[i].persist:\n                    if (templates[i].overhead) {\n                        templates[i].persistType = 'overheadtile';\n                    } else {\n                        templates[i].persistType = 'sequencerground';\n                    }\n                    break;\n            }\n        }\n    }\n    currentAutorec.version = 1;\n    return currentAutorec;\n}\n\nexport {mergeVersion01}","async function mergeVersion02(data) {\n    let currentAutorec = data;\n    \n    const meleeObject = currentAutorec.melee;\n    if (meleeObject) {\n        const meleeLength = Object.keys(meleeObject).length;\n        for (var i = 0; i < meleeLength; i++) {\n            meleeObject[i].meleeType = \"weapon\";\n        }\n    }\n    currentAutorec.version = 2;\n    return currentAutorec;\n}\n\nexport {mergeVersion02}","async function mergeVersion03(data) {\n    let currentAutorec = data;\n    \n    const templateObject = currentAutorec.templates;\n    if (templateObject) {\n        const templateLength = Object.keys(templateObject).length;\n        for (var i = 0; i < templateLength; i++) {\n            templateObject[i].scaleX = templateObject[i].scale || 1;\n            templateObject[i].scaleY = templateObject[i].scale || 1;\n        }\n    }\n    const presetObject = currentAutorec.preset;\n    if (presetObject) {\n        const presetLength = Object.keys(presetObject).length;\n        for (var i = 0; i < presetLength; i++) {\n            if (presetObject[i].animation === \"teleportation\") {\n                presetObject[i].measureType = \"alternating\";\n                presetObject[i].custom02 = presetObject[i].custom ? true : false;\n                presetObject[i].customPath02 = presetObject[i].custom ? presetObject[i].customPath : \"\";\n                presetObject[i].subAnimation02 = presetObject[i].subAnimation ?? \"mistystep\";\n                presetObject[i].variant = \"01\";\n                presetObject[i].variant02 = \"02\";\n                presetObject[i].color02 = presetObject[i].color ?? \"blue\";\n                presetObject[i].scale02 = presetObject[i].scale || 1;\n            }\n        }\n    }\n    currentAutorec.version = 3;\n    return currentAutorec;\n}\n\nexport {mergeVersion03}","async function mergeVersion04(data) {\n    let currentAutorec = data;\n    \n    const meleeObject = currentAutorec.melee;\n    const rangeObject = currentAutorec.range;\n    const staticObject = currentAutorec.static;\n    const templateObject = currentAutorec.templates;\n    const auraObject = currentAutorec.auras;\n    const presetObject = currentAutorec.preset;\n\n    if (meleeObject) {\n        const generic = ['1hs', '2hs', '1hp', '2hp', '1hb', '2hb']\n        const meleeLength = Object.keys(meleeObject).length;\n        for (var i = 0; i < meleeLength; i++) {\n            let co = meleeObject[i];\n            if (co.custom) { } else {\n                if (generic.some(el => co.animation === el)) {\n                    co.menuType = 'generic';\n                } else {\n                    co.menuType = co.meleeType;\n                }\n            }\n            if (co.switchType === 'custom') {\n                co.switchMenuType = 'weapon';\n            }\n            if (co.explosion?.enable && !co.explosion.custom) {\n                const fire = ['eruption'];\n                const generic = ['boulderimpact', 'explosion', 'impact', 'outpulse01', 'outpulse02'];\n                const ice = ['snowflake'];\n                const liquid = ['liquidsplash'];\n                const fireball = ['fireballexplode']\n                switch (true) {\n                    case fire.some(el => co.explosion.animation === el):\n                        co.explosion.menuType = 'fire';\n                        break;\n                    case generic.some(el => co.explosion.animation === el):\n                        co.explosion.menuType = 'generic';\n                        if (co.explosion.animation.includes('outpulse')) {\n                            co.explosion.animation = 'outpulse';\n                            co.explosion.variant = co.explosion.variant === 'outpulse02' ? '02' : '01';\n                        }\n                        break;\n                    case ice.some(el => co.explosion.animation === el):\n                        co.explosion.menuType = 'ice';\n                        break;\n                    case liquid.some(el => co.explosion.animation === el):\n                        co.explosion.menuType = 'liquid';\n                        co.explosion.animation = 'splash';\n                        break;\n                    case fireball.some(el => co.explosion.animation === el):\n                        co.explosion.menuType = 'spell';\n                        co.explosion.animation = 'fireball';\n                        co.explosion.variant = 'explode';\n                        break;\n                    default:\n                        co.explosion.menuType = 'spell';\n                }\n            }\n        }\n    }\n    if (rangeObject) {\n        const generic = ['energyconduitsquare', 'energyconduitcircle', 'energybeam', 'heart', 'iceshard', 'musicnote', 'skull', 'energystrand'];\n        const rangeLength = Object.keys(rangeObject).length;\n        for (var i = 0; i < rangeLength; i++) {\n            let ro = rangeObject[i]\n            if (generic.some(el => ro.animation === el)) {\n                ro.menuType = 'generic';\n                if (ro.animation === \"energyconduitcircle\") {\n                    ro.animation = 'conduit';\n                    ro.variant = 'circle';\n                }\n                if (ro.animation === \"energyconduitsquare\") {\n                    ro.animation = 'conduit';\n                    ro.variant = 'square';\n                }\n            } else {\n                ro.menuType = ro.type;\n            }\n            if (ro.explosion?.enable && !ro.explosion.custom) {\n                const fire = ['eruption'];\n                const generic = ['boulderimpact', 'explosion', 'impact', 'outpulse01', 'outpulse02'];\n                const ice = ['snowflake'];\n                const liquid = ['liquidsplash'];\n                const fireball = ['fireballexplode']\n                switch (true) {\n                    case fire.some(el => ro.explosion.animation === el):\n                        ro.explosion.menuType = 'fire';\n                        break;\n                    case generic.some(el => ro.explosion.animation === el):\n                        ro.explosion.menuType = 'generic';\n                        if (ro.explosion.animation.includes('outpulse')) {\n                            ro.explosion.animation = 'outpulse';\n                            ro.explosion.variant = ro.explosion.variant === 'outpulse02' ? '02' : '01';\n                        }\n                        break;\n                    case ice.some(el => ro.explosion.animation === el):\n                        ro.explosion.menuType = 'ice';\n                        break;\n                    case liquid.some(el => ro.explosion.animation === el):\n                        ro.explosion.menuType = 'liquid';\n                        ro.explosion.animation = 'splash';\n                        break;\n                    case fireball.some(el => ro.explosion.animation === el):\n                        ro.explosion.menuType = 'spell';\n                        ro.explosion.animation = 'fireball';\n                        ro.explosion.variant = 'explode';\n                        break;\n                    default:\n                        ro.explosion.menuType = 'spell';\n                }\n            }\n        }\n    }\n    if (staticObject) {\n        const conditions = ['drop', 'fear', 'heart', 'horror', 'light', 'poison', 'runes', 'shields', 'crackedshield', 'skull', 'snowflakes', 'stun', 'dizzystars'];\n        const creature = ['bite', 'claw'];\n        const energy = ['energyfield', 'dodecahedron', 'shimmer', 'sparkles'];\n        const fire = ['eruption', 'groundcrack', 'fireworks'];\n        const generic = ['boulderimpact', 'explosion', 'impact', 'outpulse01', 'outpulse02', 'vortex', 'whirl'];\n        const ice = ['icespikes', 'snowflake'];\n        const lightning = ['lightningball', 'staticelectricity'];\n        const liquid = ['liquidsplash'];\n        const magicsign = ['magicSign'];\n        const marker = ['marker', 'circleofstars', 'energystrand'];\n        const shieldfx = ['energyfieldtop', 'shieldfiretop', 'shieldicetop', 'shieldearthtop', 'shieldeldritchwebtop'];\n        const tokenborder = ['staticborder', 'spinningborder'];\n        const fireball = ['fireballexplode']\n\n        const staticLength = Object.keys(staticObject).length;\n        for (var i = 0; i < staticLength; i++) {\n            let so = staticObject[i];\n            switch (true) {\n                case conditions.some(el => so.animation === el):\n                    so.menuType = 'conditions';\n                    break;\n                case creature.some(el => so.animation === el):\n                    so.menuType = 'creature';\n                    break;\n                case energy.some(el => so.animation === el):\n                    so.menuType = 'energy';\n                    break;\n                case fire.some(el => so.animation === el):\n                    so.menuType = 'fire';\n                    break;\n                case generic.some(el => so.animation === el):\n                    so.menuType = 'generic';\n                    if (so.animation.includes('outpulse')) {\n                        so.variant = so.animation === 'outpulse02' ? '02' : '01';\n                        so.animation = 'outpulse';\n                    }\n                    break;\n                    break;\n                case ice.some(el => so.animation === el):\n                    so.menuType = 'ice';\n                    break;\n                case lightning.some(el => so.animation === el):\n                    so.menuType = 'lightning';\n                    break;\n                case liquid.some(el => so.animation === el):\n                    so.menuType = 'liquid';\n                    so.animation = 'splash';\n                    break;\n                case magicsign.some(el => so.animation === el):\n                    so.menuType = 'magicsign';\n                    break;\n                case marker.some(el => so.animation === el):\n                    so.menuType = 'marker';\n                    if (so.animation === 'circleofstars') { }\n                    else if (so.animation === 'energystrand') {\n                        so.animation = 'energystrand'\n                    }\n                    else {\n                        switch (so.variant) {\n                            case '03':\n                                so.animation = 'music';\n                                so.variant = '01';\n                                break;\n                            case 'bubble':\n                                so.animation = 'bubble';\n                                so.variant = '01';\n                                break;\n                            case 'energystrand':\n                                so.animation = 'energystrands';\n                                so.variant = '01'\n                                break;\n                            default:\n                                so.animation = 'standard';\n                                so.variant = '01';\n                        }\n                    }\n                    break;\n                case shieldfx.some(el => so.animation === el):\n                    so.menuType = 'shieldfx';\n                    switch (so.animation) {\n                        case 'energyfieldtop':\n                            so.animation = 'energyfield';\n                            break;\n                        case 'shieldfiretop':\n                            so.animation = 'fire';\n                            break;\n                        case 'shieldicetop':\n                            so.animation = 'ice';\n                            break;\n                        case 'shieldearthtop':\n                            so.animation = 'earth';\n                            break;\n                        case 'shieldeldritchwebtop':\n                            so.animation = 'eldritchweb';\n                            break;\n                    }\n                    break;\n                case tokenborder.some(el => so.animation === el):\n                    so.menuType = 'tokenborder';\n                    if (so.animation === 'staticborder') {\n                        so.animation = 'static';\n                    } else {\n                        so.animation = 'spinning';\n                    }\n                    break;\n                case fireball.some(el => so.animation === el):\n                    so.menuType = 'spell';\n                    so.animation = 'fireball';\n                    so.variant = 'explode';\n                    break;\n                default:\n                    so.menuType = 'spell';\n            }\n            if (so.explosion?.enable && !so.explosion.custom) {\n                const fire = ['eruption'];\n                const generic = ['boulderimpact', 'explosion', 'impact', 'outpulse01', 'outpulse02'];\n                const ice = ['snowflake'];\n                const liquid = ['liquidsplash'];\n                const fireball = ['fireballexplode']\n                switch (true) {\n                    case fire.some(el => so.explosion.animation === el):\n                        so.explosion.menuType = 'fire';\n                        break;\n                    case generic.some(el => so.explosion.animation === el):\n                        so.explosion.menuType = 'generic';\n                        if (so.explosion.animation.includes('outpulse')) {\n                            so.explosion.animation = 'outpulse';\n                            so.explosion.variant = so.explosion.variant === 'outpulse02' ? '02' : '01';\n                        }\n                        break;\n                    case ice.some(el => so.explosion.animation === el):\n                        so.explosion.menuType = 'ice';\n                        break;\n                    case liquid.some(el => so.explosion.animation === el):\n                        so.explosion.menuType = 'liquid';\n                        so.explosion.animation = 'splash';\n                        break;\n                    case fireball.some(el => so.explosion.animation === el):\n                        so.explosion.menuType = 'spell';\n                        so.explosion.animation = 'fireball';\n                        so.explosion.variant = 'explode';\n                        break;\n                    default:\n                        so.explosion.menuType = 'spell';\n                }\n            }\n        }\n    }\n    if (templateObject) {\n        const templateLength = Object.keys(templateObject).length;\n        for (var i = 0; i < templateLength; i++) {\n            let to = templateObject[i];\n            to.menuType = to.type === 'rect' ? 'square' : to.type\n            switch (to.menuType) {\n                case \"cone\":\n                    if (to.animation === 'breathweaponcone') {\n                        to.animation = 'breathweapon';\n                    }\n                    break;\n                case \"circle\":\n                    const circleTypes = ['dropct', 'fearct', 'heartct', 'horrorct', 'poisonct', 'runesct', 'shieldsct', 'crackedshieldct', 'skullct', 'snowflakesct', 'musicnotect'];\n                    if (circleTypes.some(el => to.animation === el)) {\n                        to.animation = to.animation.replace('ct', '')\n                    }\n                    switch (to.animation) {\n                        case 'outpulse01':\n                            to.animation = 'outpulse';\n                            to.variant = '01';\n                            break;\n                        case 'outpulse02':\n                            to.animation = 'outpulse';\n                            to.variant = '02';\n                            break;\n                        case 'fireballloop':\n                            to.animation = 'fireball';\n                            to.variant = to.variant === 'nodebris' ? 'nodebris' : 'loop';\n                            break;\n                        case 'fireballexplode':\n                            to.animation = 'fireball';\n                            to.variant = 'explode';\n                            break;\n                    }\n                    break;\n                case \"square\":\n                    const squareTypes = ['dropct', 'fearct', 'heartct', 'horrorct', 'poisonct', 'runesct', 'shieldsct', 'crackedshieldct', 'skullct', 'snowflakesct']\n                    if (squareTypes.some(el => to.animation === el)) {\n                        to.animation = to.animation.replace('ct', '')\n                    } else if (to.animation === 'musicnotest') {\n                        to.animation = 'musicnote';\n                    }\n                    break;\n                case \"ray\":\n                    if (to.animation === 'breathweaponline') {\n                        to.animation = 'breathweapon';\n                    }\n                    break;\n            }\n        }\n    }\n    if (auraObject) {\n        const auraLength = Object.keys(auraObject).length;\n        for (var i = 0; i < auraLength; i++) {\n            let ao = auraObject[i];\n            switch (ao.animation) {\n                case \"energystrand\":\n                    ao.menuType = 'marker';\n                    break;\n                case 'dodecahedron':\n                    ao.menuType = 'energy';\n                    break;\n                case 'staticelectricity':\n                    ao.menuType = 'lightning';\n                    break;\n                default:\n                    ao.menuType = 'spell';\n            }\n        }\n\n    }\n    if (presetObject) {\n        const presetLength = Object.keys(presetObject).length;\n        for (var i = 0; i < presetLength; i++) {\n            let po = presetObject[i];\n            switch (po.animation) {\n                case 'teleportation':\n                    po.menuType = 'spell';\n                    po.menuType02 = 'spell';\n                    break;\n                case \"dualattach\":\n                    switch (po.subAnimation) {\n                        case 'energystrand':\n                        case 'energybeam':\n                            po.menuType = 'generic';\n                            break;\n                        default:\n                            po.menuType = 'spell'\n                    }\n                    break;\n                case 'fireball':\n                    const fire = ['eruption'];\n                    const generic = ['boulderimpact', 'explosion', 'impact', 'outpulse01', 'outpulse02'];\n                    const ice = ['snowflake'];\n                    const liquid = ['liquidsplash'];\n                    const fireball = ['fireballexplode']\n                    switch (po.projectile) {\n                        case 'energystrand':\n                        case 'energybeam':\n                            po.rangeType = 'generic';\n                            break;\n                        default:\n                            po.rangeType = 'spell'\n                    }\n                    if (po.explosion01) {\n                        switch (true) {\n                            case fire.some(el => po.explosion01 === el):\n                                po.ex01Type = 'fire';\n                                break;\n                            case generic.some(el => po.explosion01 === el):\n                                po.ex01Type = 'generic';\n                                if (po.explosion01.includes('outpulse')) {\n                                    po.explosion01 = 'outpulse';\n                                    po.explosion01Variant = po.explosion01Variant === 'outpulse02' ? '02' : '01';\n                                }\n                                break;\n                            case ice.some(el => po.explosion01 === el):\n                                po.ex01Type = 'ice';\n                                break;\n                            case liquid.some(el => po.explosion01 === el):\n                                po.ex01Type = 'liquid';\n                                po.explosion01 = 'splash';\n                                break;\n                            case fireball.some(el => po.explosion01 === el):\n                                po.ex01Type = 'spell';\n                                po.explosion01 = 'fireball';\n                                po.explosion01Variant = 'explode';\n                                break;\n                            default:\n                                po.ex01Type = 'spell';\n                        }\n                    }\n                    if (po.explosion02) {\n                        switch (true) {\n                            case fire.some(el => po.explosion02 === el):\n                                po.ex02Type = 'fire';\n                                break;\n                            case generic.some(el => po.explosion02 === el):\n                                po.ex02Type = 'generic';\n                                if (po.explosion01.includes('outpulse')) {\n                                    po.explosion01 = 'outpulse';\n                                    po.explosion01Variant = po.explosion01Variant === 'outpulse02' ? '02' : '01';\n                                }\n                                break;\n                            case ice.some(el => po.explosion02 === el):\n                                po.ex02Type = 'ice';\n                                break;\n                            case liquid.some(el => po.explosion02 === el):\n                                po.ex02Type = 'liquid';\n                                po.explosion02 = 'splash';\n                                break;\n                            case fireball.some(el => po.explosion02 === el):\n                                po.ex02Type = 'spell';\n                                po.explosion02 = 'fireball';\n                                po.explosion02Variant = 'explode';\n                                break;\n                            default:\n                                po.ex02Type = 'spell';\n                        }\n                    }\n                    break;\n\n            }\n        }\n    }\n    currentAutorec.version = 4;\n    return currentAutorec;\n}\n\nexport {mergeVersion04}","import { Hashing } from \"#runtime/util\";\n\nasync function mergeVersion05(data) {\n    let currentAutorec = data;\n\n    const meleeObject = currentAutorec.melee;\n    const rangeObject = currentAutorec.range;\n    const staticObject = currentAutorec.static;\n    const templateObject = currentAutorec.templates;\n    const auraObject = currentAutorec.auras;\n    const presetObject = currentAutorec.preset;\n    const aefxObject = currentAutorec.aefx;\n\n    const newMenu = {\n        melee: [],\n        range: [],\n        ontoken: [],\n        templatefx: [],\n        aura: [],\n        preset: [],\n        aefx: [],\n        version: 5,\n    };\n\n    if (meleeObject) {\n        const dataLength = Object.keys(meleeObject).length;\n        for (var i = 0; i < dataLength; i++) {\n            const oldMO = meleeObject[i]\n            let newMO = {};\n            let current = await convertV6(oldMO, newMO, \"melee\")\n            newMenu.melee.push(current)\n        }\n    }\n    if (rangeObject) {\n        const dataLength = Object.keys(rangeObject).length;\n        for (var i = 0; i < dataLength; i++) {\n            const oldMO = rangeObject[i]\n            let newMO = {};\n            let current = await convertV6(oldMO, newMO, \"range\")\n            newMenu.range.push(current)\n        }\n    }\n    if (staticObject) {\n        const dataLength = Object.keys(staticObject).length;\n        for (var i = 0; i < dataLength; i++) {\n            const oldMO = staticObject[i]\n            let newMO = {};\n            let current = await convertV6(oldMO, newMO, \"ontoken\")\n            newMenu.ontoken.push(current)\n        }\n    }\n    if (templateObject) {\n        const dataLength = Object.keys(templateObject).length;\n        for (var i = 0; i < dataLength; i++) {\n            const oldMO = templateObject[i]\n            let newMO = {};\n            let current = await convertV6(oldMO, newMO, \"templatefx\");\n            let thunderwaveVariants = ['left', 'mid', 'center'];\n            if (current.primary.video.animation === \"thunderwave\") {\n                if (thunderwaveVariants.some(el => !current.primary.video.variant.includes(el))) {\n                    current.primary.video.variant = 'center'\n                }\n            }\n            if (current.primary.options?.persistent && current.primary.options?.persistType === \"attachtemplate\" && current.primary.options?.removeTemplate) {\n                current.primary.options.removeTemplate = false;\n            }\n            newMenu.templatefx.push(current)\n        }\n    }\n    if (auraObject) {\n        const dataLength = Object.keys(auraObject).length;\n        for (var i = 0; i < dataLength; i++) {\n            const oldMO = auraObject[i]\n            let newMO = {};\n            let current = await convertV6(oldMO, newMO, \"aura\");\n            newMenu.aura.push(current)\n        }\n    }\n\n    if (presetObject) {\n        const presetLength = Object.keys(presetObject).length;\n        for (var i = 0; i < presetLength; i++) {\n            const oldMO = presetObject[i]\n            let newMO = {};\n            let current;\n            switch (oldMO.animation) {\n                case \"bardicinspiration\":\n                case \"bless\":\n                case \"shieldspell\":\n                case \"huntersmark\":\n                case \"sneakattack\":\n                    break;\n                case \"teleportation\":\n                    current = await updateTele(oldMO, newMO);\n                    current.menu = \"preset\";\n                    newMenu.preset.push(current);\n                    break;\n                case \"dualattach\":\n                    current = await updateDAttach(oldMO, newMO);\n                    current.menu = \"preset\";\n                    newMenu.preset.push(current);\n                    break;\n                case \"fireball\":\n                    current = await updateFireball(oldMO, newMO);\n                    current.menu = \"preset\";\n                    newMenu.preset.push(current);\n                    break;\n                default:\n                    current = await updateThunderwave(oldMO, newMO);\n                    current.menu = \"preset\";\n                    newMenu.preset.push(current);\n            }\n        }\n    }\n\n    if (aefxObject) {\n        const aefxLength = Object.keys(aefxObject).length;\n\n        for (var i = 0; i < aefxLength; i++) {\n            const oldMO = aefxObject[i]\n            let newMO = {};\n            let current;\n            switch (oldMO.aeType) {\n                case \"auras\":\n                    current = await convertAEAura(oldMO, newMO)\n                    current.activeEffectType = \"aura\";\n                    newMenu.aefx.push(current);\n                    break;\n                case \"preset\":\n                    switch (oldMO.menuType) {\n                        case \"bless\":\n                            current = await convertAEBless(oldMO, newMO)\n                            current.activeEffectType = \"ontoken\";\n                            newMenu.aefx.push(current);\n                            break;\n                        case \"shieldspell\":\n                            current = await convertAEShield(oldMO, newMO)\n                            current.activeEffectType = \"ontoken\";\n                            newMenu.aefx.push(current);\n                            break;\n                    }\n                    break;\n                default:\n                    current = await convertAEOnToken(oldMO, newMO)\n                    current.activeEffectType = \"ontoken\";\n                    newMenu.aefx.push(current);\n            }\n        }\n    }\n\n    async function new3d(oldData) {\n        let newData = oldData || {};\n        let {type, addExplosion, ...rest} = newData;\n        const data3d = {\n            enable: type ? true : false,\n            type: type || \"\",\n            data: rest || {},\n            secondary: {\n                enable: addExplosion?.enable ?? false,\n                data: addExplosion || {}\n            },\n            sound: setSound({}, \"a01\", true),\n        };\n        return data3d;\n    }\n\n    function setSound(audio = {}, section = \"a01\", rebase = false) {\n        if (rebase) {\n            return {\n                delay: 0,\n                enable: false,\n                file: \"\",\n                startTime: 0,\n                repeat: 1,\n                repeatDelay: 250,\n                volume: 1,\n            }\n        } else {\n            return {\n                delay: audio?.[section]?.delay ?? 0,\n                enable: audio?.[section]?.enable ?? false,\n                file: audio?.[section]?.file ?? \"\",\n                startTime: audio?.[section]?.startTime ?? 0,\n                volume: audio?.[section]?.volume ?? 1,\n                repeat: 1,\n                repeatDelay: 250,\n            }\n        }\n    }\n\n    async function convertExplosionV6(exp, audio, oldMO) {\n\n        let data = {\n            enable: exp?.enable ?? false,\n            options: {\n                addTokenWidth: false,\n                anchor: \"0.5\",\n                delay: exp?.delay ?? 250,\n                elevation: exp?.below ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isMasked: exp?.isMasked ?? false,\n                isRadius: true,\n                isWait: false,\n                opacity: exp?.opacity ?? 1,\n                repeat: oldMO.repeat ?? 1,\n                repeatDelay: oldMO.delay ?? 0,\n                size: exp?.radius ?? 1.5,\n                zIndex: exp?.zIndex ?? 1,\n            },\n            sound: setSound(audio, \"e01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: exp?.menuType,\n                animation: exp?.animation,\n                variant: exp?.variant,\n                color: exp?.color,\n                enableCustom: exp?.enableCustom ?? false,\n                customPath: exp?.customPath ?? \"\",\n            }\n        };\n        const video = data.video;\n        if (!video.menuType || !video.animation || !video.variant || !video.color) {\n            data.video.menuType = \"spell\";\n            data.video.animation = \"curewounds\";\n            data.video.variant = \"01\";\n            data.video.color = \"blue\";\n        }\n\n        return data;\n    }\n\n    async function convertV6(oldMO, newMO, type) {\n        let { menuType, variant, custom, customPath, name, animation, color, audio, macro,\n            soundOnly, explosion, levels3d, meleeSwitch, ...rest } = oldMO;\n\n            newMO.id = Hashing.uuidv4();\n        newMO.label = name;\n\n        if (type !== \"aura\" && type !== \"templatefx\") {\n            newMO.levels3d = await new3d(levels3d);\n        }\n\n        newMO.macro = macro || {};\n\n        if (type === \"melee\") {\n            newMO.meleeSwitch = compileMeleeSwitch(oldMO);\n        }\n\n        newMO.menu = type;\n\n        newMO.primary = {\n            options: convertOptionsV6(oldMO, type),\n            sound: setSound(audio, \"a01\"),\n            video: {\n                dbSection: setDBSection(type),\n                menuType,\n                animation,\n                variant,\n                color,\n                enableCustom: custom,\n                customPath,\n            },\n        }\n\n        newMO.secondary = await convertExplosionV6(explosion, audio, oldMO)\n\n        const primaryVideo = newMO.primary.video;\n        if (!primaryVideo.menuType || !primaryVideo.animation || !primaryVideo.variant || !primaryVideo.color) {\n            resetVideo(newMO.primary.video, type)\n        }\n\n        newMO.soundOnly = {\n            sound: {\n                enable: soundOnly?.enable || false,\n                delay: oldMO.audio?.a01?.delay ?? 0,\n                startTime: oldMO.audio?.a01?.startTime ?? 0,\n                volume: oldMO.audio?.a01?.volume ?? 1,\n                file: oldMO.audio?.a01?.file,\n                repeat: 1,\n                repeatDelay: 250,\n            }\n        }\n\n        newMO.source = newExtraFX();\n        newMO.target = newExtraFX(true);\n        return newMO;\n    }\n\n    function compileMeleeSwitch(oldMO) {\n        let oldData = oldMO || {};\n        const data = {\n            video: {\n                dbSection: \"range\",\n                menuType: oldData.switchMenuType,\n                animation: oldData.switchAnimation,\n                variant: oldData.switchVariant,\n                color: oldData.switchColor,\n                enableCustom: false,\n                customPath: \"\",\n            },\n            sound:  setSound(oldMO?.audio, \"a02\"),\n            options: {\n                detect: oldData.detect || \"automatic\",\n                range: oldData.range || 2,\n                isReturning: oldData.return ?? false,\n                switchType: oldData.switchType || \"on\",\n            }\n        }\n        const switchVideo = data.video;\n        if (!switchVideo.menuType || !switchVideo.animation || !switchVideo.variant || !switchVideo.color) {\n            resetVideo(data.video, \"range\")\n        }\n        return data;\n    }\n\n    function resetVideo(data, type) {\n        switch (type) {\n            case \"melee\":\n                data.menuType = \"weapon\";\n                data.animation = \"dagger\";\n                data.variant = \"01\";\n                data.color = \"white\";\n                break;\n            case \"range\":\n                data.menuType = \"weapon\";\n                data.animation = \"arrow\";\n                data.variant = \"regular\";\n                data.color = \"regular\";\n                break;\n            case \"templatefx\":\n                data.menuType = \"circle\";\n                data.animation = \"calllightning\";\n                data.variant = \"01\";\n                data.color = \"blue\";\n                break;\n            default:\n                data.menuType = \"spell\";\n                data.animation = \"curewounds\";\n                data.variant = \"01\";\n                data.color = \"blue\";\n            }\n    }\n\n    function convertOptionsV6(oldMO, type) {\n        const data = {};\n\n        switch (type) {\n            case \"melee\":\n                data.delay = 0;\n                data.elevation = oldMO.below ? 0 : 1000;\n                data.isWait = false;\n                data.opacity = oldMO.opacity ?? 1;\n                data.repeat = oldMO.repeat ?? 1;\n                data.repeatDelay = oldMO.delay ?? 0;\n                data.size = oldMO.scale ?? 1;\n                data.zIndex = oldMO.zIndex ?? 1;\n                break;\n            case \"range\":\n                data.delay = 0;\n                data.elevation = oldMO.below ? 0 : 1000;\n                data.isReturning = false;\n                data.isWait = false;\n                data.onlyX = oldMO.onlyX ?? false;\n                data.opacity = oldMO.opacity ?? 1;\n                data.repeat = oldMO.repeat ?? 1;\n                data.repeatDelay = oldMO.delay ?? 0;\n                data.zIndex = oldMO.zIndex ?? 1;\n                break;\n            case \"ontoken\":\n                data.addTokenWidth = false;\n                data.anchor = \"0.5\";\n                data.delay = 0;\n                data.elevation = oldMO.below ? 0 : 1000;\n                data.fadeIn = 250;\n                data.fadeOut = 500;\n                data.isMasked = oldMO.isMasked ?? false;\n                data.isRadius = false;\n                data.isWait = false;\n                data.opacity = oldMO.opacity ?? 1;\n                data.persistent = oldMO.persistent ?? false;\n                data.playOn = oldMO.type === \"targetDefault\" ? \"default\" : oldMO.type === \"sourceTarget\" ? \"both\" : !oldMO.type ? \"default\" : oldMO.type;\n                data.repeat = oldMO.repeat ?? 1;\n                data.repeatDelay = oldMO.delay ?? 0;\n                data.size = oldMO.scale ?? 1;\n                data.unbindAlpha = oldMO.unbindAlpha ?? false;\n                data.unbindVisibility = oldMO.unbindVisibility ?? false;\n                data.zIndex = oldMO.zIndex ?? 1;\n                break;\n            case \"templatefx\":\n                data.delay = 0;\n                data.elevation = oldMO.below ? 0 : 1000;\n                data.isMasked = oldMO.isMasked ?? false;\n                data.isWait = false;\n                data.occlusionAlpha = oldMO.occlusionAlpha ?? 0;\n                data.occlusionMode = oldMO.occlusionMode ?? 0;\n                data.opacity = oldMO.opacity ?? 1;\n                data.persistent = oldMO.persist ?? false;\n                data.persistType = oldMO.persistType || \"sequencerground\";\n                data.removeTemplate = oldMO.removeTemplate ?? 1;\n                data.repeat = oldMO.repeat ?? 1;\n                data.repeatDelay = oldMO.delay ?? 0;\n                data.rotate = 0;\n                data.scale = `${oldMO.scaleX ?? 1}, ${oldMO.scaleY ?? 1}`\n                //data.scaleX = oldMO.scaleX ?? 1;\n                //data.scaleY = oldMO.scaleY ?? 1;\n                data.zIndex = oldMO.zIndex ?? 1;\n                break;\n            case \"aura\":\n                data.addTokenWidth = oldMO.addTokenWidth ?? false;\n                data.alpha = false,\n                data.alphaMax = 0.5,\n                data.alphaMin = -0.5,\n                data.alphaDuration = 1000,\n                data.breath = false,\n                data.breathMax = 1.05,\n                data.breathMin = 0.95,\n                data.breathDuration = 1000,\n                data.delay = 0;\n                data.elevation = oldMO.below ? 0 : 1000;\n                data.fadeIn = 250;\n                data.fadeOut = 500;\n                data.playOn = oldMO.ignoretargets ? \"source\" : \"default\";\n                data.isRadius = true;\n                data.isWait = false;\n                data.opacity = oldMO.opacity ?? 1;\n                data.size = oldMO.scale ?? 3;\n                data.tint = false,\n                data.tintColor = \"#FFFFFF\",\n                data.tintSaturate = 0,\n                data.unbindAlpha = oldMO.unbindAlpha ?? false;\n                data.unbindVisibility = oldMO.unbindVisibility ?? false;\n                data.zIndex = oldMO.zIndex ?? 1;\n                break;\n        }\n        return data;\n    }\n\n    function newExtraFX(target = false) {\n        if (target) {\n            return {\n                enable: false,\n                options: {\n                    addTokenWidth: false,\n                    anchor: \"0.5\",\n                    delay: 0,\n                    elevation: 1000,\n                    fadeIn: 250,\n                    fadeOut: 500,\n                    isMasked: false,\n                    isWait: false,\n                    isRadius: false,\n                    opacity: 1,\n                    persistent: false,\n                    repeat: 1,\n                    repeatDelay: 250,\n                    size: 1,\n                    unbindAlpha: false,\n                    unbindVisibility: false,\n                    zIndex: 1,\n                },\n                sound:  setSound({}, \"t01\", true),\n                video: {\n                    dbSection: \"static\",\n                    menuType: \"spell\",\n                    animation: \"curewounds\",\n                    variant: \"01\",\n                    color: \"blue\",\n                    enableCustom: false,\n                    customPath: \"\",\n                }\n            }\n        } else {\n            return {\n                enable: false,\n                options: {\n                    addTokenWidth: false,\n                    anchor: \"0.5\",\n                    delay: 0,\n                    elevation: 1000,\n                    fadeIn: 250,\n                    fadeOut: 500,\n                    isMasked: false,\n                    isRadius: false,\n                    isWait: true,\n                    opacity: 1,\n                    repeat: 1,\n                    repeatDelay: 250,\n                    size: 1,\n                    zIndex: 1,\n                },\n                sound:  setSound({}, \"s01\", true),\n                video: {\n                    dbSection: \"static\",\n                    menuType: \"spell\",\n                    animation: \"curewounds\",\n                    variant: \"01\",\n                    color: \"blue\",\n                    enableCustom: false,\n                    customPath: \"\",\n                }\n            }\n        }\n    }\n\n    function setDBSection(type) {\n        return type === \"aura\" || type === \"ontoken\" ? \"static\" : type;\n    }\n\n    async function updateTele(oldData, newData) {\n        newData.id = Hashing.uuidv4();\n        newData.data = {};\n        const root = newData.data;\n        let { menuType, subAnimation, variant, color, below, custom, customPath,\n            hideTemplate, name, range, measureType, scale,\n            menuType02, subAnimation02, variant02, color02, scale02, custom02, customPath02,\n            macro, delay, audio, soundOnly } = oldData;\n        newData.macro = macro || {};\n        newData.presetType = \"teleportation\";\n        newData.label = name;\n        //newData.hidden = true;\n        root.options = {\n            alpha: 0,\n            delayFade: 750,\n            delayMove: 1000,\n            delayReturn: delay ?? 250,\n            hideFromPlayers: hideTemplate ?? false,\n            measureType: measureType ?? \"alternating\",\n            range: range ?? 30,\n            speed: 120,\n            teleport: true,\n        }\n        root.sound =  setSound(audio, \"a01\");\n        root.start = {\n            enable: true,\n            dbSection: \"static\",\n            menuType,\n            animation: subAnimation,\n            variant,\n            color,\n            enableCustom: custom || false,\n            customPath,\n            options: {\n                delay: 0,\n                elevation: below ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 250,\n                isMasked: false,\n                opacity: 1,\n                isRadius: false,\n                size: scale || 1.5,\n            }\n        }\n        root.between = {\n            dbSection: \"range\",\n            enable: false,\n            menuType: \"weapon\",\n            animation: \"arrow\",\n            variant: \"regular\",\n            color: \"regular\",\n            options: {\n                delay: 0,\n                elevation: 1000,\n                opacity: 1,\n                playbackRate: 1,\n            }\n        }\n        root.end = {\n            enable: true,\n            dbSection: \"static\",\n            menuType: menuType02,\n            animation: subAnimation02,\n            variant: variant02,\n            color: color02,\n            enableCustom: custom02 || false,\n            customPath: customPath02,\n            options: {\n                delay: 500,\n                elevation: below ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 250,\n                isMasked: false,\n                isRadius: false,\n                opacity: 1,\n                size: scale02 ?? 1,\n            }\n        }\n        if (!root.start.menuType || !root.start.animation || !root.start.variant || !root.start.color) {\n            resetVideo(root.start, \"static\")\n        }\n        if (!root.end.menuType || !root.end.animation || !root.end.variant || !root.end.color) {\n            resetVideo(root.end, \"static\")\n        }\n        newData.soundOnly = {\n            sound: {\n                enable: soundOnly?.enable || false,\n                delay: oldData.audio?.a01?.delay ?? 0,\n                startTime: oldData.audio?.a01?.startTime ?? 0,\n                volume: oldData.audio?.a01?.volume ?? 1,\n                file: oldData.audio?.a01?.file,\n            }\n        }\n        return newData;\n    }\n    async function updateDAttach(oldData, newData) {\n        newData.id = Hashing.uuidv4();\n\n        let { name, below, macro, audio, menuType, subAnimation, variant, color, custom, customPath, playbackRate, onlyX, soundOnly } = oldData;\n        newData.macro = macro || {};\n        newData.presetType = \"dualattach\";\n        newData.label = name;\n        newData.data = {\n            video: {\n                dbSection: \"range\",\n                menuType,\n                animation: subAnimation,\n                variant,\n                color,\n                enableCustom: custom || false,\n                customPath: customPath || \"\",\n            },\n            options: {\n                playbackRate,\n                onlyX,\n                opacity: 1,\n                elevation: below ? 0 : 1000,\n            },\n            sound: setSound(audio, \"a01\"),\n        };\n        if (!newData.data.video.menuType || !newData.data.video.animation || !newData.data.video.variant || !newData.data.video.color) {\n            resetVideo(newData.data.video, \"range\")\n        }\n        newData.soundOnly = {\n            sound: {\n                enable: soundOnly?.enable || false,\n                delay: oldData.audio?.a01?.delay ?? 0,\n                startTime: oldData.audio?.a01?.startTime ?? 0,\n                volume: oldData.audio?.a01?.volume ?? 1,\n                file: oldData.audio?.a01?.file,\n            }\n        }\n        return newData;\n    }\n    async function updateFireball(oldData, newData) {\n        newData.id = Hashing.uuidv4();\n        newData.data = {};\n        const root = newData.data;\n        let { audio, macro, name, below, animation, rangeType, projectile, projectilVariant, projectileColor, projectileRepeat, projectileDelay, wait01, removeTemplate,\n            ex01Type, explosion01, explosion01Variant, explosion01Color, explosion01Repeat, explosion01Delay, explosion01Scale, wait02,\n            ex02Type, explosion02, explosion02Variant, explosion02Color, explosion02Repeat, explosion02Delay, explosion02Scale,\n            afterEffect, afterEffectPath, wait03, soundOnly } = oldData;\n        //root.audio = audio || {};\n        newData.macro = macro || {};\n        newData.presetType = \"proToTemp\";\n        newData.label = name;\n        //root.removeTemplate = removeTemplate;\n        root.projectile = {\n            dbSection: \"range\",\n            menuType: rangeType,\n            animation: projectile,\n            variant: projectilVariant,\n            color: projectileColor,\n            options: {\n                repeat: projectileRepeat,\n                repeatDelay: projectileDelay,\n                wait: wait01,\n                elevation: below ? 0 : 1000,\n                removeTemplate: removeTemplate,\n            },\n            sound: setSound(audio, \"a01\"),\n        }\n        if (!root.projectile.menuType || !root.projectile.animation || !root.projectile.variant || !root.projectile.color) {\n            resetVideo(root.projectile, \"range\")\n        }\n        root.preExplosion = {\n            dbSection: \"static\",\n            menuType: ex01Type,\n            animation: explosion01,\n            variant: explosion01Variant,\n            color: explosion01Color,\n            options: {\n                repeat: explosion01Repeat,\n                repeatDelay: explosion01Delay,\n                scale: explosion01Scale,\n                wait: wait02,\n                elevation: below ? 0 : 1000,\n            },\n            sound:  setSound(audio, \"e01\"),\n        }\n        if (!root.preExplosion.menuType || !root.preExplosion.animation || !root.preExplosion.variant || !root.preExplosion.color) {\n            root.preExplosion.enable = false;\n            resetVideo(root.preExplosion, \"static\")\n        } else { root.preExplosion.enable = true }\n        root.explosion = {\n            dbSection: \"static\",\n            menuType: ex02Type,\n            animation: explosion02,\n            variant: explosion02Variant,\n            color: explosion02Color,\n            options: {\n                elevation: below ? 0 : 1000,\n                repeat: explosion02Repeat,\n                repeatDelay: explosion02Delay,\n                scale: explosion02Scale,\n                wait: wait03,\n            },\n            sound: setSound(audio, \"e01\"),\n        }\n        if (!root.explosion.menuType || !root.explosion.animation || !root.explosion.variant || !root.explosion.color) {\n            resetVideo(root.explosion, \"range\")\n        }\n        root.afterImage = {\n            enable: afterEffect,\n            customPath: afterEffectPath,\n            options: {\n                elevation: 0,\n                persistent: false,\n                scale: 1,\n            }\n        }\n        newData.soundOnly = {\n            sound: {\n                enable: soundOnly?.enable || false,\n                delay: oldData.audio?.a01?.delay ?? 0,\n                startTime: oldData.audio?.a01?.startTime ?? 0,\n                volume: oldData.audio?.a01?.volume ?? 1,\n                file: oldData.audio?.a01?.file,\n            }\n        }\n        newData.secondary = {\n            enable: false,\n            options: {\n                addTokenWidth: false,\n                delay: 250,\n                elevation: 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isMasked: false,\n                isRadius: true,\n                isWait: false,\n                opacity: 1,\n                repeat: 1,\n                repeatDelay: 0,\n                size: 1.5,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"e01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"curewounds\",\n                variant: \"01\",\n                color: \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        };\n\n        newData.target = newExtraFX(true);\n\n        return newData;\n    }\n\n    async function updateThunderwave(oldData, newData) {\n        newData.id = Hashing.uuidv4();\n        //newData.data = {};\n        //const root = newData.data;\n        let { audio, macro, name, below, color, repeat, delay, scaleX, scaleY, opacity, removeTemplate, persist: persistent, persistType, occlusionMode, occlusionAlpha, soundOnly } = oldData;\n        newData.macro = macro || {};\n        newData.label = name;\n        newData.presetType = \"thunderwave\";\n        //newData.hidden = true;\n        newData.data = {\n            video: {\n                dbSection: \"templatefx\",\n                menuType: \"square\",\n                animation: \"thunderwave\",\n                variant: \"mid\",\n                color: color || \"blue\",\n            },\n            options: {\n                elevation: below ? 0 : 1000,\n                repeat: repeat || 1,\n                repeatDelay: delay ?? 250,\n                opacity: opacity ?? 1,\n                removeTemplate: removeTemplate ?? false,\n            },\n            sound: setSound(audio, \"a01\"),\n        };\n        newData.soundOnly = {\n            sound: {\n                enable: soundOnly?.enable || false,\n                delay: oldData.audio?.a01?.delay ?? 0,\n                startTime: oldData.audio?.a01?.startTime ?? 0,\n                volume: oldData.audio?.a01?.volume ?? 1,\n                file: oldData.audio?.a01?.file,\n            }\n        }\n        return newData;\n    }\n\n    async function convertAEOnToken(oldMO, newMO) {\n\n        let { aeDelay, aeType, animation, audio, below, color, custom, customPath, delay, explosion, macro, menuType, name,\n            opacity, persistent, repeat, scale, soundOnly, type, unbindAlpha, unbindVisibility, variant } = oldMO;\n\n        newMO.id = Hashing.uuidv4();\n        newMO.label = name;\n        newMO.menu = \"aefx\";\n        newMO.secondary = await convertExplosionV6(explosion, audio, oldMO)\n\n        newMO.primary = {\n            options: {\n                addTokenWidth: false,\n                elevation: below ? 0 : 1000,\n                delay: delay || 250,\n                isMasked: false,\n                isRadius: false,\n                isWait: false,\n                opacity: opacity || 1,\n                persistent: persistent || false,\n                playOn: \"source\",\n                repeat: repeat || 1,\n                size: scale || 1,\n                unbindAlpha: unbindAlpha || false,\n                unbindVisibility: unbindVisibility || false,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"a01\"),\n            video: {\n                animation: animation,\n                color: color,\n                customPath: customPath || \"\",\n                dbSection: \"static\",\n                enableCustom: custom || false,\n                menuType: menuType,\n                variant: variant,\n            }\n        }\n\n        const newVideo = newMO.primary.video;\n        if (!newVideo.menuType || !newVideo.animation || !newVideo.variant || !newVideo.color) {\n            resetVideo(newMO.primary.video)\n        }\n\n        newMO.macro = macro || {};\n\n        newMO.soundOnly = {\n            sound: {\n                delay: audio?.a01?.delay ?? 0,\n                enable: soundOnly?.enable ?? false,\n                file: audio?.a01?.file ?? \"\",\n                startTime: audio?.a01?.startTime ?? 0,\n                volume: audio?.a01?.volume ?? 1,\n            }\n        }\n\n        newMO.source = newExtraFX();\n\n        return newMO;\n    }\n\n    async function convertAEAura(oldMO, newMO) {\n\n        let { aeDelay, aeType, animation, audio, below, color, custom, customPath, macro, menuType, name,\n            opacity, scale, soundOnly, type, unbindAlpha, unbindVisibility, variant } = oldMO;\n\n        newMO.id = Hashing.uuidv4();\n        newMO.label = name;\n        newMO.menu = \"aefx\";\n\n        newMO.secondary = {\n            enable: false,\n            options: {},\n            sound:setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"curewounds\",\n                variant: \"01\",\n                color: \"blue\",\n            }\n        }\n\n        newMO.primary = {\n            options: {\n                addTokenWidth: false,\n                alpha: false,\n                alphaMax: 0.5,\n                alphaMin: -0.5,\n                alphaDuration: 1000,\n                breath: false,\n                breathMax: 1.05,\n                breathMin: 0.95,\n                breathDuration: 1000,\n                delay: 0,\n                elevation: below ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isRadius: true,\n                isWait: true,\n                opacity: opacity || 1,\n                playOn: \"source\",\n                size: scale || 1,\n                tint: false,\n                tintColor: \"#FFFFFF\",\n                tintSaturate: 0,\n                unbindAlpha: unbindAlpha || false,\n                unbindVisibility: unbindVisibility || false,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"a01\"),\n            video: {\n                animation: animation,\n                color: color,\n                customPath: customPath || \"\",\n                dbSection: \"static\",\n                enableCustom: custom || false,\n                menuType: menuType,\n                variant: variant,\n            }\n        }\n\n        const newVideo = newMO.primary.video;\n        if (!newVideo.menuType || !newVideo.animation || !newVideo.variant || !newVideo.color) {\n            resetVideo(newMO.primary.video)\n        }\n\n        newMO.macro = macro || {};\n\n        newMO.soundOnly = {\n            sound: {\n                delay: audio?.a01?.delay ?? 0,\n                enable: soundOnly?.enable ?? false,\n                file: audio?.a01?.file ?? \"\",\n                startTime: audio?.a01?.startTime ?? 0,\n                volume: audio?.a01?.volume ?? 1,\n            }\n        }\n\n        newMO.source = newExtraFX();\n        return newMO;\n    }\n\n    async function convertAEBless(oldMO, newMO) {\n\n        let { addCTA, aeType, animation, audio, below, color, custom, macro, menuType, name,\n            scale, soundOnly, type, unbindAlpha, unbindVisibility, variant } = oldMO;\n\n        newMO.id = Hashing.uuidv4();\n        newMO.label = name;\n        newMO.menu = \"aefx\";\n\n        newMO.macro = macro || {};\n\n        newMO.primary = {\n            options: {\n                addTokenWidth: false,\n                delay: 0,\n                elevation: below ? 0 : 1000,\n                fadeIn: 0,\n                fadeOut: 500,\n                isMasked: false,\n                isRadius: false,\n                isWait: true,\n                opacity: 1,\n                persistent: addCTA || false,\n                playOn: \"source\",\n                repeat: 1,\n                repeatDelay: 250,\n                size: scale || 1,\n                unbindAlpha: unbindAlpha || false,\n                unbindVisibility: unbindVisibility || false,\n                zIndex: 1,\n\n            },\n            sound: setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"bless\",\n                variant: \"intro\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            },\n        }\n\n        newMO.secondary = {\n            enable: false,\n            options: {},\n            sound: setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"curewounds\",\n                variant: \"01\",\n                color: \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            },\n        }\n\n        newMO.soundOnly = {\n            sound: {\n                enable: soundOnly?.enable || false,\n                delay: oldMO.audio?.a01?.delay ?? 0,\n                startTime: oldMO.audio?.a01?.startTime ?? 0,\n                volume: oldMO.audio?.a01?.volume ?? 1,\n                file: oldMO.audio?.a01?.file,\n            }\n        }\n\n        newMO.source = {\n            enable: true,\n            options: {\n                addTokenWidth: false,\n                delay: -500,\n                elevation: below ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 500,\n                isMasked: false,\n                isRadius: false,\n                isWait: true,\n                opacity: 1,\n                repeat: 1,\n                repeatDelay: 250,\n                size: scale || 1,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"a01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: \"spell\",\n                animation: \"bless\",\n                variant: \"intro\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n\n        return newMO;\n    }\n\n    async function convertAEShield(oldMO, newMO) {\n\n        let { addCTA, aeType, animation, audio, below, color, custom, endEffect, macro, menuType, name,\n            scale, soundOnly, type, unbindAlpha, unbindVisibility, variant } = oldMO;\n\n        newMO.id = Hashing.uuidv4();\n        newMO.label = name;\n        newMO.menu = \"aefx\";\n\n        newMO.primary = {\n            options:{\n                isWait: true,\n                delay: -1000,\n                elevation: below ? 0 : 1000,\n                fadeIn: 250,\n                fadeOut: 0,\n                isMasked: false,\n                isRadius: false,\n                opacity: 1,\n                persistent: addCTA || false,\n                repeat: 1,\n                repeatDelay: 250,\n                size: scale ?? 1,\n                playOn: \"source\",\n                unbindAlpha: unbindAlpha ?? false,\n                unbindVisibility: unbindVisibility ?? false,\n                zIndex: 1,\n            },\n            sound: setSound({}, \"a01\", true),\n            video: {\n                dbSection: \"static\",\n                menuType: \"shieldspell\",\n                animation: \"loop\",\n                variant: variant || \"01\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n        newMO.source = {\n            enable: true,\n            options: {\n                addTokenWidth: false,\n                delay: -500,\n                elevation: below ? 0 : 1000,\n                fadeIn: 500,\n                fadeOut: 0,\n                isMasked: false,\n                isRadius: false,\n                isWait: true,\n                opacity: 1,\n                repeat: 1,\n                repeatDelay: 250,\n                size: scale || 1,\n                zIndex: 1,\n            },\n            sound: setSound(audio, \"a01\"),\n            video: {\n                dbSection: \"static\",\n                menuType: \"shieldspell\",\n                animation: \"intro\",\n                variant: variant || \"01\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n\n        newMO.secondary = {\n            options: {\n                delay: 0,\n                elevation: below ? 0 : 1000,\n                isMasked: false,\n                isRadius: false,\n                isWait: false,\n                repeat: 1,\n                repeatDelay: 250,\n                size: scale || 1,\n                opacity: 1,\n                zIndex: 1,\n            },\n            sound: setSound({}, \"a01\", true),\n            video:{\n                dbSection: \"static\",\n                menuType: \"shieldspell\",\n                animation: endEffect || \"outro_explode\",\n                variant: variant || \"01\",\n                color: color || \"blue\",\n                enableCustom: false,\n                customPath: \"\",\n            }\n        }\n\n        newMO.macro = macro || {};\n\n        newMO.soundOnly = {\n            sound: {\n                delay: audio?.a01?.delay ?? 0,\n                enable: soundOnly?.enable ?? false,\n                file: audio?.a01?.file ?? \"\",\n                startTime: audio?.a01?.startTime ?? 0,\n                volume: audio?.a01?.volume ?? 1,\n            }\n        }\n\n        return newMO;\n    }\n    return newMenu;\n}\n\n\nexport { mergeVersion05 }\n","import { AAAutorecManager }     from \"../formApps/_AutorecMenu/components/category/menuManager/AAAutorecManager\";\nimport { custom_error }       from \"../constants/constants\";\nimport { Hashing }               from \"#runtime/util\";\n\nexport class AutorecSanitizer\n{\n    static getMenu () {\n        let menu = AAAutorecManager.getAutorecEntries();\n        delete menu.version;\n        return menu;\n    }\n\n    static async checkForDuplicates() {\n        let menu = this.getMenu();\n        let menuKeys = Object.keys(menu);\n        for (let i = 0; i < menuKeys.length; i++) {\n            var valueArr = menu[menuKeys[i]].map(function(item){ return item.id });\n            var isDuplicate = valueArr.some(function(item, idx){\n                return valueArr.indexOf(item) != idx\n            });\n            if (isDuplicate) {\n                custom_error(`The ${game.i18n.localize(`autoanimations.animTypes.${menuKeys[i]}`)} Global Menu contains Duplicate ID's, commencing Sanitization`);\n                await this.cleanIds(menuKeys[i], menu);\n            }\n        }\n    }\n\n    static async cleanIds(menuId, menu) {\n        let sanitizedMenu = menu[menuId];\n        sanitizedMenu.forEach(section => section.id = Hashing.uuidv4());\n        game.settings.set('autoanimations', `aaAutorec-${menuId}`, sanitizedMenu)\n        custom_error(`The ${game.i18n.localize(`autoanimations.animTypes.${menuId}`)} Global Menu has been corrected from catastrophic errors. Please refresh your game world`)\n        //autoRecStores[menuId]?._data?.forEach(animation => animation._data.id = Hashing.uuidv4())\n    }\n\n    static newSectionIds (menu) {\n        menu.forEach(section => section.id = Hashing.uuidv4());\n        return menu;\n    }\n\n}\n","import * as autorecMerge    from \"./merges/versionIndex.js\";\nimport { AutorecSanitizer } from \"../../aa-classes/autorecSanityCheck.js\";\n\nexport function currentAutorecVersion() {\n    return Object.keys(autoRecMigration.migrations).map(n => Number(n)).reverse()[0];\n}\n\nexport const autoRecMigration = {\n\n    /**\n     *\n     * @param {*} autoObject\n     * @param {\n     * shouldSubmit: Boolean (Merges should be submitted),\n     * newSchema: Boolean (Is a new data Schema?),\n     * submitAll: Boolean (A-A ONLY override to submit ALL merged Menus)\n     * } options\n     * @returns\n     */\n    async handle(autoObject, options = {}) {\n\n        if (options.newSchema) {\n            ui.notifications.info(\"Automated Animations | Exporting your Global Automatic Recognition Menu before running Migration\")\n            const data = (game.settings.get('autoanimations', 'aaAutorec'))\n            const filename = `Autorec-Menu-Backup`;\n            foundry.utils.saveDataToFile(JSON.stringify(data, null, 2), \"text/json\", filename);\n            autoObject = {\n                melee: game.settings.get('autoanimations', 'aaAutorec-melee'),\n                range: game.settings.get('autoanimations', 'aaAutorec-range'),\n                ontoken: game.settings.get('autoanimations', 'aaAutorec-ontoken'),\n                templatefx: game.settings.get('autoanimations', 'aaAutorec-templatefx'),\n                aura: game.settings.get('autoanimations', 'aaAutorec-aura'),\n                preset: game.settings.get('autoanimations', 'aaAutorec-preset'),\n                aefx: game.settings.get('autoanimations', 'aaAutorec-aefx'),\n                version: game.settings.get('autoanimations', 'aaAutorec').version,\n            }\n        }\n\n        if (!autoObject) { return; }\n\n        if (this.upToDate(autoObject) && !options.isOverwrite) {\n            return autoObject;\n        }\n\n        ui.notifications.info(\"Automated Animations: Updating the Automatic Recognition Menu\")\n        let currentAutorec = autoObject;\n        for (let [version, migration] of Object.entries(this.migrations)) {\n            let flagVersion = currentAutorec.version;\n\n            if (flagVersion >= Number(version)) continue;\n\n            currentAutorec = await migration(currentAutorec)\n        }\n        if (!options.shouldSubmit) {\n            return currentAutorec;\n        } else {\n            if (options.melee || options.submitAll) {\n                let newMelee = AutorecSanitizer.newSectionIds( currentAutorec.melee )\n                await game.settings.set('autoanimations', 'aaAutorec-melee', newMelee)\n            }\n            if (options.range || options.submitAll) {\n                let newRange = AutorecSanitizer.newSectionIds( currentAutorec.range )\n                await game.settings.set('autoanimations', 'aaAutorec-range', newRange)\n            }\n            if (options.ontoken || options.submitAll) {\n                let newOnToken = AutorecSanitizer.newSectionIds( currentAutorec.ontoken )\n                await game.settings.set('autoanimations', 'aaAutorec-ontoken', newOnToken)\n            }\n            if (options.templatefx || options.submitAll) {\n                let newTemplateFx = AutorecSanitizer.newSectionIds( currentAutorec.templatefx )\n                await game.settings.set('autoanimations', 'aaAutorec-templatefx', newTemplateFx)\n            }\n            if (options.aura || options.submitAll) {\n                let newAura = AutorecSanitizer.newSectionIds( currentAutorec.aura )\n                await game.settings.set('autoanimations', 'aaAutorec-aura', newAura)\n            }\n            if (options.preset || options.submitAll) {\n                let newPreset = AutorecSanitizer.newSectionIds( currentAutorec.preset )\n                await game.settings.set('autoanimations', 'aaAutorec-preset', newPreset)\n            }\n            if (options.aefx || options.submitAll) {\n                let newAefx = AutorecSanitizer.newSectionIds( currentAutorec.aefx )\n                await game.settings.set('autoanimations', 'aaAutorec-aefx', newAefx)\n            }\n            if (Object.keys(this.migrations).map(n => Number(n)).reverse()[0] === 5) {\n                await game.settings.set('autoanimations', 'aaAutorec', {version: 5});\n            } else {\n                let versionHandler = game.settings.get('autoanimations', 'aaAutorec');\n                versionHandler.version = Object.keys(this.migrations).map(n => Number(n)).reverse()[0];\n                await game.settings.set('autoanimations', 'aaAutorec', versionHandler)\n            }\n        }\n        ui.notifications.info(\"Automatic Recognition Menu update is Complete!\")\n    },\n\n    upToDate(autoObject) {\n        const currentFlagVersion = Object.keys(this.migrations).map(n => Number(n)).reverse()[0];\n        return autoObject.version >= currentFlagVersion;\n    },\n\n    migrations: {\n        \"1\": async (currentAutorec) => {\n            return await autorecMerge.mergeVersion01(currentAutorec)\n        },\n        \"2\": async (currentAutorec) => {\n            return await autorecMerge.mergeVersion02(currentAutorec)\n        },\n        \"3\": async (currentAutorec) => {\n            return await autorecMerge.mergeVersion03(currentAutorec)\n        },\n        \"4\": async (currentAutorec) => {\n            return await autorecMerge.mergeVersion04(currentAutorec)\n        },\n        \"5\": async (currentAutorec) => {\n            return await autorecMerge.mergeVersion05(currentAutorec)\n        },\n    }\n}\n","function set(obj, key, val) {\n\tif (typeof val.value === 'object') val.value = klona(val.value);\n\tif (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n\t\tObject.defineProperty(obj, key, val);\n\t} else obj[key] = val.value;\n}\n\nfunction klona(x) {\n\tif (typeof x !== 'object') return x;\n\n\tvar i=0, k, list, tmp, str=Object.prototype.toString.call(x);\n\n\tif (str === '[object Object]') {\n\t\ttmp = Object.create(x.__proto__ || null);\n\t} else if (str === '[object Array]') {\n\t\ttmp = Array(x.length);\n\t} else if (str === '[object Set]') {\n\t\ttmp = new Set;\n\t\tx.forEach(function (val) {\n\t\t\ttmp.add(klona(val));\n\t\t});\n\t} else if (str === '[object Map]') {\n\t\ttmp = new Map;\n\t\tx.forEach(function (val, key) {\n\t\t\ttmp.set(klona(key), klona(val));\n\t\t});\n\t} else if (str === '[object Date]') {\n\t\ttmp = new Date(+x);\n\t} else if (str === '[object RegExp]') {\n\t\ttmp = new RegExp(x.source, x.flags);\n\t} else if (str === '[object DataView]') {\n\t\ttmp = new x.constructor( klona(x.buffer) );\n\t} else if (str === '[object ArrayBuffer]') {\n\t\ttmp = x.slice(0);\n\t} else if (str.slice(-6) === 'Array]') {\n\t\t// ArrayBuffer.isView(x)\n\t\t// ~> `new` bcuz `Buffer.slice` => ref\n\t\ttmp = new x.constructor(x);\n\t}\n\n\tif (tmp) {\n\t\tfor (list=Object.getOwnPropertySymbols(x); i < list.length; i++) {\n\t\t\tset(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n\t\t}\n\n\t\tfor (i=0, list=Object.getOwnPropertyNames(x); i < list.length; i++) {\n\t\t\tif (Object.hasOwnProperty.call(tmp, k=list[i]) && tmp[k] === x[k]) continue;\n\t\t\tset(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n\t\t}\n\t}\n\n\treturn tmp || x;\n}\n\n/**\n * Provides common object manipulation utility functions and TypeScript type guards.\n *\n * @packageDocumentation\n */\n/**\n * Freezes all entries traversed that are objects including entries in arrays.\n *\n * @param data - An object or array.\n *\n * @param [options] - Options\n *\n * @param [options.skipKeys] - A Set of strings indicating keys of objects to not freeze.\n *\n * @returns The frozen object.\n *\n * @typeParam T - Type of data.\n */\nfunction deepFreeze(data, { skipKeys } = {}) {\n    if (typeof data !== 'object' || data === null) {\n        throw new TypeError(`deepFreeze error: 'data' is not an object or array.`);\n    }\n    if (skipKeys !== void 0 && Object.prototype.toString.call(skipKeys) !== '[object Set]') {\n        throw new TypeError(`deepFreeze error: 'options.skipKeys' is not a Set.`);\n    }\n    const stack = [data];\n    while (stack.length > 0) {\n        const obj = stack.pop();\n        if (typeof obj !== 'object' || obj === null || Object.isFrozen(obj)) {\n            continue;\n        }\n        // Collect nested properties before freezing.\n        const children = [];\n        if (Array.isArray(obj)) {\n            for (let cntr = 0; cntr < obj.length; cntr++) {\n                children.push(obj[cntr]);\n            }\n        }\n        else {\n            for (const key in obj) {\n                if (Object.hasOwn(obj, key) && !skipKeys?.has?.(key)) {\n                    children.push(obj[key]);\n                }\n            }\n        }\n        // Freeze after collecting children to avoid modifying a frozen object.\n        Object.freeze(obj);\n        // Push collected children onto the stack for further processing.\n        stack.push(...children);\n    }\n    return data;\n}\nfunction deepMerge(target, ...sourceObj) {\n    if (Object.prototype.toString.call(target) !== '[object Object]') {\n        throw new TypeError(`deepMerge error: 'target' is not an object.`);\n    }\n    if (sourceObj.length === 0) {\n        throw new TypeError(`deepMerge error: 'sourceObj' is not an object.`);\n    }\n    for (let cntr = 0; cntr < sourceObj.length; cntr++) {\n        if (Object.prototype.toString.call(sourceObj[cntr]) !== '[object Object]') {\n            throw new TypeError(`deepMerge error: 'sourceObj[${cntr}]' is not an object.`);\n        }\n    }\n    // When merging a single source object there is an implementation that is twice as fast as multiple source objects.\n    if (sourceObj.length === 1) {\n        const stack = [];\n        for (const obj of sourceObj) {\n            stack.push({ target, source: obj });\n        }\n        while (stack.length > 0) {\n            const { target, source } = stack.pop(); // LIFO but maintains correct merge order.\n            for (const prop in source) {\n                if (Object.hasOwn(source, prop)) {\n                    const sourceValue = source[prop];\n                    const targetValue = target[prop];\n                    // If both values are plain objects, enqueue for further merging.\n                    if (Object.hasOwn(target, prop) && targetValue?.constructor === Object &&\n                        sourceValue?.constructor === Object) {\n                        stack.push({ target: targetValue, source: sourceValue });\n                    }\n                    else {\n                        target[prop] = sourceValue;\n                    }\n                }\n            }\n        }\n    }\n    else // Stack implementation for multiple source objects.\n     {\n        const stack = [{ target, sources: sourceObj }];\n        while (stack.length > 0) {\n            const { target, sources } = stack.pop();\n            for (const source of sources) {\n                for (const prop in source) {\n                    if (Object.hasOwn(source, prop)) {\n                        const sourceValue = source[prop];\n                        const targetValue = target[prop];\n                        // If both values are plain objects, push for further merging with a new object.\n                        if (Object.hasOwn(target, prop) && targetValue?.constructor === Object &&\n                            sourceValue?.constructor === Object) {\n                            target[prop] = Object.assign({}, targetValue); // Copy existing target data.\n                            stack.push({ target: target[prop], sources: [sourceValue] });\n                        }\n                        else {\n                            target[prop] = sourceValue;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    return target;\n}\n/**\n * Seals all entries traversed that are objects including entries in arrays.\n *\n * @param data - An object or array.\n *\n * @param [options] - Options\n *\n * @param [options.skipKeys] - A Set of strings indicating keys of objects to not seal.\n *\n * @returns The sealed object.\n *\n * @typeParam T - Type of data.\n */\nfunction deepSeal(data, { skipKeys } = {}) {\n    if (typeof data !== 'object' || data === null) {\n        throw new TypeError(`deepSeal error: 'data' is not an object or array.`);\n    }\n    if (skipKeys !== void 0 && Object.prototype.toString.call(skipKeys) !== '[object Set]') {\n        throw new TypeError(`deepSeal error: 'options.skipKeys' is not a Set.`);\n    }\n    const stack = [data];\n    while (stack.length > 0) {\n        const obj = stack.pop();\n        if (typeof obj !== 'object' || obj === null || Object.isSealed(obj)) {\n            continue;\n        }\n        // Collect nested properties before freezing.\n        const children = [];\n        if (Array.isArray(obj)) {\n            for (let cntr = 0; cntr < obj.length; cntr++) {\n                children.push(obj[cntr]);\n            }\n        }\n        else {\n            for (const key in obj) {\n                if (Object.hasOwn(obj, key) && !skipKeys?.has?.(key)) {\n                    children.push(obj[key]);\n                }\n            }\n        }\n        // Freeze after collecting children to avoid modifying a frozen object.\n        Object.seal(obj);\n        // Push collected children onto the stack for further processing.\n        stack.push(...children);\n    }\n    return data;\n}\n/**\n * Determine if the given object has a getter & setter accessor.\n *\n * @param object - An object.\n *\n * @param accessor - Accessor to test.\n *\n * @returns Whether the given object has the getter and setter for accessor.\n *\n * @typeParam T - Type of data.\n * @typeParam K - Accessor key.\n */\nfunction hasAccessor(object, accessor) {\n    if (typeof object !== 'object' || object === null || object === void 0) {\n        return false;\n    }\n    // Check for instance accessor.\n    const iDescriptor = Object.getOwnPropertyDescriptor(object, accessor);\n    if (iDescriptor !== void 0 && iDescriptor.get !== void 0 && iDescriptor.set !== void 0) {\n        return true;\n    }\n    // Walk parent prototype chain. Check for descriptor at each prototype level.\n    for (let o = Object.getPrototypeOf(object); o; o = Object.getPrototypeOf(o)) {\n        const descriptor = Object.getOwnPropertyDescriptor(o, accessor);\n        if (descriptor !== void 0 && descriptor.get !== void 0 && descriptor.set !== void 0) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Determine if the given object has a getter accessor.\n *\n * @param object - An object.\n *\n * @param accessor - Accessor to test.\n *\n * @returns Whether the given object has the getter for accessor.\n *\n * @typeParam T - Type of data.\n * @typeParam K - Accessor key.\n */\nfunction hasGetter(object, accessor) {\n    if (typeof object !== 'object' || object === null || object === void 0) {\n        return false;\n    }\n    // Check for instance accessor.\n    const iDescriptor = Object.getOwnPropertyDescriptor(object, accessor);\n    if (iDescriptor !== void 0 && iDescriptor.get !== void 0) {\n        return true;\n    }\n    // Walk parent prototype chain. Check for descriptor at each prototype level.\n    for (let o = Object.getPrototypeOf(object); o; o = Object.getPrototypeOf(o)) {\n        const descriptor = Object.getOwnPropertyDescriptor(o, accessor);\n        if (descriptor !== void 0 && descriptor.get !== void 0) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Returns whether the target is or has the given prototype walking up the prototype chain.\n *\n * @param target - Any target class / constructor function to test.\n *\n * @param Prototype - Class / constructor function to find.\n *\n * @returns Target matches prototype.\n *\n * @typeParam T - Prototype class / constructor.\n */\nfunction hasPrototype(target, Prototype) {\n    if (typeof target !== 'function') {\n        return false;\n    }\n    if (target === Prototype) {\n        return true;\n    }\n    // Walk parent prototype chain. Check for descriptor at each prototype level.\n    for (let proto = Object.getPrototypeOf(target); proto; proto = Object.getPrototypeOf(proto)) {\n        if (proto === Prototype) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Determine if the given object has a setter accessor.\n *\n * @param object - An object.\n *\n * @param accessor - Accessor to test.\n *\n * @returns Whether the given object has the setter for accessor.\n *\n * @typeParam T - Type of data.\n * @typeParam K - Accessor key.\n */\nfunction hasSetter(object, accessor) {\n    if (typeof object !== 'object' || object === null || object === void 0) {\n        return false;\n    }\n    // Check for instance accessor.\n    const iDescriptor = Object.getOwnPropertyDescriptor(object, accessor);\n    if (iDescriptor !== void 0 && iDescriptor.set !== void 0) {\n        return true;\n    }\n    // Walk parent prototype chain. Check for descriptor at each prototype level.\n    for (let o = Object.getPrototypeOf(object); o; o = Object.getPrototypeOf(o)) {\n        const descriptor = Object.getOwnPropertyDescriptor(o, accessor);\n        if (descriptor !== void 0 && descriptor.set !== void 0) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Tests for whether an object is async iterable.\n *\n * @param value - Any value.\n *\n * @returns Whether value is async iterable.\n */\nfunction isAsyncIterable(value) {\n    if (typeof value !== 'object' || value === null || value === void 0) {\n        return false;\n    }\n    return Symbol.asyncIterator in value;\n}\n/**\n * Tests for whether an object is iterable.\n *\n * @param value - Any value.\n *\n * @returns Whether object is iterable.\n */\nfunction isIterable(value) {\n    if (value === null || value === void 0 || typeof value !== 'object') {\n        return false;\n    }\n    return Symbol.iterator in value;\n}\n/**\n * Tests for whether object is not null, typeof object, and not an array.\n *\n * @param value - Any value.\n *\n * @returns Is it an object.\n */\nfunction isObject(value) {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n/**\n * Tests for whether the given value is a plain object.\n *\n * An object is plain if it is created by either: `{}`, `new Object()` or `Object.create(null)`.\n *\n * @param value - Any value\n *\n * @returns Is it a plain object.\n */\nfunction isPlainObject(value) {\n    if (Object.prototype.toString.call(value) !== '[object Object]') {\n        return false;\n    }\n    const prototype = Object.getPrototypeOf(value);\n    return prototype === null || prototype === Object.prototype;\n}\n/**\n * Safely returns keys on an object or an empty array if not an object.\n *\n * @param object - An object.\n *\n * @returns Object keys or empty array.\n */\nfunction objectKeys(object) {\n    return typeof object === 'object' && object !== null ? Object.keys(object) : [];\n}\n/**\n * Safely returns an objects size. Note for String objects Unicode is not taken into consideration.\n *\n * @param object - Any value, but size returned for object / Map / Set / arrays / strings.\n *\n * @returns Size of object.\n */\nfunction objectSize(object) {\n    if (object === void 0 || object === null || typeof object !== 'object') {\n        return 0;\n    }\n    const tag = Object.prototype.toString.call(object);\n    if (tag === '[object Map]' || tag === '[object Set]') {\n        return object.size;\n    }\n    if (tag === '[object String]') {\n        return object.length;\n    }\n    return Object.keys(object).length;\n}\n/**\n * Provides a way to safely access an objects data / entries given an accessor string which describes the\n * entries to walk. To access deeper entries into the object format the accessor string with `.` between entries\n * to walk.\n *\n * @param data - An object to access entry data.\n *\n * @param accessor - A string describing the entries to access with keys separated by `.`.\n *\n * @param [defaultValue] - (Optional) A default value to return if an entry for accessor is not found.\n *\n * @returns The value referenced by the accessor.\n *\n * @typeParam T - Type of data.\n * @typeParam P - Accessor type.\n * @typeParam R - Return value / Inferred deep access type or any provided default value type.\n */\nfunction safeAccess(data, accessor, defaultValue) {\n    if (typeof data !== 'object' || data === null) {\n        return defaultValue;\n    }\n    if (typeof accessor !== 'string') {\n        return defaultValue;\n    }\n    const keys = accessor.split('.');\n    let result = data;\n    // Walk through the given object by the accessor indexes.\n    for (let cntr = 0; cntr < keys.length; cntr++) {\n        // If the next level of object access is undefined or null then return the default value.\n        if (result[keys[cntr]] === void 0 || result[keys[cntr]] === null) {\n            return defaultValue;\n        }\n        result = result[keys[cntr]];\n    }\n    return result;\n}\n/**\n * Compares a source object and values of entries against a target object. If the entries in the source object match\n * the target object then `true` is returned otherwise `false`. If either object is undefined or null then false\n * is returned.\n *\n * Note: The source and target should be JSON objects.\n *\n * @param source - Source object.\n *\n * @param target - Target object.\n *\n * @param [options] - Options.\n *\n * @param [options.arrayIndex] - Set to `false` to exclude equality testing for array contents; default: `true`.\n *\n * @param [options.hasOwnOnly] - Set to `false` to include enumerable prototype properties; default: `true`.\n *\n * @returns True if equal.\n */\nfunction safeEqual(source, target, options) {\n    if (typeof source !== 'object' || source === null || typeof target !== 'object' || target === null) {\n        return false;\n    }\n    for (const accessor of safeKeyIterator(source, options)) {\n        const sourceObjectValue = safeAccess(source, accessor);\n        const targetObjectValue = safeAccess(target, accessor);\n        if (sourceObjectValue !== targetObjectValue) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Returns an iterator of safe keys useful with {@link safeAccess} and {@link safeSet} by traversing the given object.\n *\n * Note: Keys are only generated for JSON objects; {@link Map} and {@link Set} are not indexed.\n *\n * @param data - An object to traverse for accessor keys.\n *\n * @param [options] - Options.\n *\n * @param [options.arrayIndex] - Set to `false` to exclude safe keys for array indexing; default: `true`.\n *\n * @param [options.hasOwnOnly] - Set to `false` to include enumerable prototype properties; default: `true`.\n *\n * @returns Safe key iterator.\n */\nfunction* safeKeyIterator(data, { arrayIndex = true, hasOwnOnly = true } = {}) {\n    if (typeof data !== 'object' || data === null) {\n        throw new TypeError(`safeKeyIterator error: 'data' is not an object.`);\n    }\n    if (typeof arrayIndex !== 'boolean') {\n        throw new TypeError(`safeKeyIterator error: 'options.arrayIndex' is not a boolean.`);\n    }\n    if (typeof hasOwnOnly !== 'boolean') {\n        throw new TypeError(`safeKeyIterator error: 'options.hasOwnOnly' is not a boolean.`);\n    }\n    const stack = [{ obj: data, prefix: '' }];\n    while (stack.length > 0) {\n        const { obj, prefix } = stack.pop();\n        for (const key in obj) {\n            if (hasOwnOnly && !Object.hasOwn(obj, key)) {\n                continue;\n            }\n            const fullKey = prefix ? `${prefix}.${key}` : key;\n            const value = obj[key];\n            if (Array.isArray(value)) {\n                if (!arrayIndex) {\n                    continue;\n                }\n                for (let cntr = 0; cntr < value.length; cntr++) {\n                    yield `${fullKey}.${cntr}`;\n                }\n            }\n            else if (typeof value === 'object' && value !== null) {\n                stack.push({ obj: value, prefix: fullKey }); // Push to stack for DFS traversal.\n            }\n            else if (typeof value !== 'function') {\n                yield fullKey;\n            }\n        }\n    }\n}\n/**\n * Provides a way to safely set an objects data / entries given an accessor string which describes the\n * entries to walk. To access deeper entries into the object format the accessor string with `.` between entries\n * to walk.\n *\n * @param data - An object to access entry data.\n *\n * @param accessor - A string describing the entries to access.\n *\n * @param value - A new value to set if an entry for accessor is found.\n *\n * @param [options] - Options.\n *\n * @param [options.operation] - Operation to perform including: `add`, `div`, `mult`, `set`, `set-undefined`, `sub`;\n *        default: `set`.\n *\n * @param [options.createMissing] - If `true` missing accessor entries will be created as objects automatically;\n *        default: `false`.\n *\n * @returns True if successful.\n */\nfunction safeSet(data, accessor, value, { operation = 'set', createMissing = false } = {}) {\n    if (typeof data !== 'object' || data === null) {\n        throw new TypeError(`safeSet error: 'data' is not an object.`);\n    }\n    if (typeof accessor !== 'string') {\n        throw new TypeError(`safeSet error: 'accessor' is not a string.`);\n    }\n    if (typeof operation !== 'string') {\n        throw new TypeError(`safeSet error: 'options.operation' is not a string.`);\n    }\n    if (operation !== 'add' && operation !== 'div' && operation !== 'mult' && operation !== 'set' &&\n        operation !== 'set-undefined' && operation !== 'sub') {\n        throw new Error(`safeSet error: Unknown 'options.operation'.`);\n    }\n    if (typeof createMissing !== 'boolean') {\n        throw new TypeError(`safeSet error: 'options.createMissing' is not a boolean.`);\n    }\n    const access = accessor.split('.');\n    let result = false;\n    // Verify first level missing property.\n    if (access.length === 1 && !createMissing && !(access[0] in data)) {\n        return false;\n    }\n    // Walk through the given object by the accessor indexes.\n    for (let cntr = 0; cntr < access.length; cntr++) {\n        // If data is an array perform validation that the accessor is a positive integer otherwise quit.\n        if (Array.isArray(data)) {\n            const number = (+access[cntr]);\n            if (!Number.isInteger(number) || number < 0) {\n                return false;\n            }\n        }\n        if (cntr === access.length - 1) {\n            switch (operation) {\n                case 'add':\n                    data[access[cntr]] += value;\n                    result = true;\n                    break;\n                case 'div':\n                    data[access[cntr]] /= value;\n                    result = true;\n                    break;\n                case 'mult':\n                    data[access[cntr]] *= value;\n                    result = true;\n                    break;\n                case 'set':\n                    data[access[cntr]] = value;\n                    result = true;\n                    break;\n                case 'set-undefined':\n                    if (data[access[cntr]] === void 0) {\n                        data[access[cntr]] = value;\n                    }\n                    result = true;\n                    break;\n                case 'sub':\n                    data[access[cntr]] -= value;\n                    result = true;\n                    break;\n            }\n        }\n        else {\n            // If createMissing is true and the next level of object access is undefined then create a new object entry.\n            if (createMissing && data[access[cntr]] === void 0) {\n                data[access[cntr]] = {};\n            }\n            // Abort if the next level is null or not an object and containing a value.\n            if (data[access[cntr]] === null || typeof data[access[cntr]] !== 'object') {\n                return false;\n            }\n            data = data[access[cntr]];\n        }\n    }\n    return result;\n}\n\nexport { deepFreeze, deepMerge, deepSeal, hasAccessor, hasGetter, hasPrototype, hasSetter, isAsyncIterable, isIterable, isObject, isPlainObject, klona, objectKeys, objectSize, safeAccess, safeEqual, safeKeyIterator, safeSet };\n//# sourceMappingURL=index.js.map\n","import { isObject } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\n * Localize a string including variable formatting for input arguments. Provide a string ID which defines the localized\n * template. Variables can be included in the template enclosed in braces and will be substituted using those named\n * keys.\n *\n * @param {string}   stringId - The string ID to translate.\n *\n * @param {object}   [data] - Provided input data.\n *\n * @returns {string} The translated and formatted string\n */\nfunction localize(stringId, data)\n{\n   const result = !isObject(data) ? globalThis.game.i18n.localize(stringId) :\n    globalThis.game.i18n.format(stringId, data);\n\n   return result !== void 0 ? result : '';\n}\n\nexport { localize };\n//# sourceMappingURL=index.js.map\n","/**\n * Creates default audio data.\n *\n * @param {DataSound}   [opts] - Optional parameters.\n *\n * @returns {DataSound}\n */\nexport function sound({ enable = false, delay = 0, file = void 0, startTime = 0, volume = 0.75, repeat = 1, repeatDelay = 250 } = {}) {\n   return {\n      enable,\n      delay,\n      file,\n      repeat,\n      repeatDelay,\n      startTime,\n      volume\n   }\n}\n\n/**\n * @typedef {object} DataSound\n *\n * @property {boolean}     enable - Enabled state.\n *\n * @property {number}      delay - Positive delay time in milliseconds.\n *\n * @property {string|void} file - File path.\n *\n * @property {number}      startTime - Positive delay time in milliseconds.\n *\n * @property {number}      volume - Volume range from 0 - 1.\n */\n","import { sound } from \"./sound.js\";\n//import { video } from \"./video.js\";\n\n/**\n * Creates default secondary data.\n *\n * @returns {DataSecondary}\n */\nexport function secondary() {\n   return {\n      enable: false,\n      video: { dbSection: \"static\", menuType: 'spell', animation: 'curewounds', variant: '01', color: 'blue', enableCustom: false, customPath: \"\" },\n      sound: sound(),\n      options: {\n         addTokenWidth: false,\n         anchor: \"0.5\",\n         contrast: 0,\n         delay: 0,\n         elevation: 1000,\n         fadeIn: 250,\n         fadeOut: 500,\n         isMasked: false,\n         isRadius: true,\n         isWait: false,\n         opacity: 1,\n         repeat: 1,\n         repeatDelay: 250,\n         saturate: 0,\n         size: 1.5,\n         tint: false,\n         tintColor: \"#FFFFFF\",\n         zIndex: 1,\n      }\n   }\n}\n/**\n * @typedef {object} DataSecondary\n *\n * @property {boolean=false}        enable -\n *\n * @property {DataVideo}            video -\n *\n * @property {DataSound}            sound -\n *\n * @property {DataSecondaryOptions} options -\n */\n\n/**\n * @typedef DataSecondaryOptions\n *\n * @property {boolean}     below -\n *\n * @property {number}      delay -\n *\n * @property {boolean}     isMasked -\n *\n * @property {number}      opacity -\n *\n * @property {number}      radius -\n *\n * @property {number}      zIndex -\n */\n","/**\n * Creates default levels3d data.\n *\n * @returns {DataLevels3D}\n */\nexport function levels3d() {\n   return {\n      type: \"explosion\",\n      data: {\n         alpha: void 0,\n         arc: void 0,\n         color01: \"#FFFFFF\",\n         color02: \"#FFFFFF\",\n         delay: void 0,\n         emittersize: void 0,\n         gravity: void 0,\n         life: void 0,\n         mass: void 0,\n         rate: void 0,\n         repeat: void 0,\n         scale: void 0,\n         speed: void 0,\n         spritePath: \"modules/levels-3d-preview/assets/particles/dust.png\",\n      },\n      sound: {enable: false},\n      secondary: {\n         enable: false,\n         data: {\n            alpha: void 0,\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            emittersize: void 0,\n            gravity: void 0,\n            life: void 0,\n            mass: void 0,\n            rate: void 0,\n            scale: void 0,\n            speed: void 0,\n            spritePath: \"modules/levels-3d-preview/assets/particles/dust.png\",\n         }\n      }\n   }\n}\n\n/**\n * @typedef DataLevels3D\n *\n * @property {string}   type -\n *\n * @property {object}   data -\n *\n * @property {number}   [data.alpha] -\n *\n * @property {number}   [data.arc] -\n *\n * @property {number}   [data.color0] -\n *\n * @property {number}   [data.color01] -\n *\n * @property {number}   [data.delay] -\n *\n * @property {number}   [data.emittersize] -\n *\n * @property {number}   [data.gravity] -\n *\n * @property {number}   [data.life] -\n *\n * @property {number}   [data.mass] -\n *\n * @property {number}   [data.rate] -\n *\n * @property {number}   [data.repeat] -\n *\n * @property {number}   [data.scale] -\n *\n * @property {number}   [data.speed] -\n *\n * @property {number}   [data.sprite] -\n */\n","/**\n * Creates default macro data.\n *\n * @returns {DataMacro}\n */\nexport function macro() {\n   return {\n      enable: false,\n      name: void 0,\n      args: void 0,\n      playWhen: void 0\n   }\n}\n\n/**\n * @typedef DataMacro\n *\n * @property {boolean}  enable - Enabled state.\n *\n * @property {string}   name - Macro name.\n *\n * @property {string}   args - Macro arguments.\n *\n * @property {string}   playWhen - When to invoke macro.\n */\n","import { Hashing } from \"#runtime/util\";\n\n/**\n * Creates the main properties that all animations share.\n *\n * @returns {DataMain}\n */\nexport function main({ label, soundOnly}) {\n   if (typeof label !== 'string') { throw new TypeError(`'label' is not a string.`); }\n   //if (typeof soundOnly !== 'boolean') { throw new TypeError(`'soundOnly' is not a boolean.`); }\n\n   return {\n      id: Hashing.uuidv4(),\n      label: `autoanimations.animations.${label}`,\n      soundOnly: {\n         sound: {\n            delay: 0,\n            enable: false,\n            startTime: 0,\n            volume: 0.75,\n         }\n      }\n   }\n}\n\n/**\n * @typedef {object} DataMain\n *\n * @property {string}   id - UUIDv4.\n *\n * @property {string}   label - Name of animation from i18n prepended with `autoanimations.animations.`.\n *\n * @property {boolean}  soundOnly - Show only primary sound options.\n */\n","/**\n * Creates default video data.\n *\n * @returns {DataVideo}\n */\nexport function video({ menuType, animation, variant, color, enableCustom = false, customPath = \"\", dbSection} = {}) {\n   if (menuType !== void 0 && typeof menuType !== 'string') { throw new TypeError(`'menuType' is not a string.`); }\n   if (animation !== void 0 && typeof animation !== 'string') { throw new TypeError(`'animation' is not a string.`); }\n   if (variant !== void 0 && typeof variant !== 'string') { throw new TypeError(`'variant' is not a string.`); }\n   if (color !== void 0 && typeof color !== 'string') { throw new TypeError(`'color' is not a string.`); }\n   if (typeof enableCustom !== 'boolean') { throw new TypeError(`'enableCustom' is not a boolean.`); }\n   if (typeof customPath !== 'string') { throw new TypeError(`'customPath' is not a string.`); }\n\n   return {\n      dbSection,\n      menuType,\n      animation,\n      variant,\n      color,\n      enableCustom,\n      customPath,\n   }\n}\n\n/**\n * @typedef {object} DataVideo\n *\n * @property {string} dbSection -\n * \n * @property {string}   menuType -\n *\n * @property {string}   animation -\n *\n * @property {string}   variant -\n *\n * @property {string}   color -\n *\n * @property {boolean}  enableCustom -\n *\n * @property {string}   customPath -\n */\n","import { sound as createSound } from \"./sound.js\";\nimport { video as createVideo } from \"./video.js\";\n\n/**\n * Creates default primary data.\n *\n * @returns {DataPrimary}\n */\nexport function primary({ video = {}, sound = {}, options = {}, dbSection = \"\" } = {}) {\n   return {\n      video: createVideo(video),\n      sound: createSound(sound),\n      options,\n   }\n}\n\n/**\n * @typedef {object} DataPrimary\n *\n * @property {DataVideo}   video -\n *\n * @property {DataSound}   sound -\n *\n * @property {object}      options -\n */\n","import { sound } from \"./sound.js\";\nimport { video } from \"./video.js\";\n\n/**\n * Creates default source data.\n *\n * @returns {DataSource}\n */\nexport function source() {\n   return {\n      enable: false,\n      video: { dbSection: \"static\", menuType: 'spell', animation: 'curewounds', variant: '01', color: 'blue', enableCustom: false, customPath: \"\" },\n      sound: sound(),\n      options: {\n         addTokenWidth: false,\n         anchor: \"0.5\",\n         contrast: 0,\n         delay: 0,\n         elevation: 1000,\n         fadeIn: 250,\n         fadeOut: 500,\n         isMasked: false,\n         isRadius: false,\n         isWait: true,\n         opacity: 1,\n         repeat: 1,\n         repeatDelay: 250,\n         saturate: 0,\n         size: 1,\n         tint: false,\n         tintColor: \"#FFFFFF\",\n         zIndex: 1,\n      },\n   };\n}\n\n/**\n * @typedef {object} DataSource\n *\n * @property {boolean=false}     enable -\n *\n * @property {DataVideo}         video -\n *\n * @property {DataSound}         sound -\n *\n * @property {DataSourceOptions} options -\n */\n\n/**\n * @typedef {object} DataSourceOptions\n * \n * @property {boolean}     addTokenWidth -\n * \n * @property {number}      delay -\n *\n * @property {number}      elevation -\n *\n * @property {number}      fadeIn -\n *\n * @property {number}      fadeOut -\n *\n * @property {boolean}     isMasked -\n *\n * @property {boolean}     isRadius -\n *\n * @property {boolean}     isWait -\n *\n * @property {number}      opacity -\n *\n * @property {number}      repeat -\n *\n * @property {number}      repeatDelay -\n *\n * @property {number}      size -\n *\n * @property {number}      zIndex -\n */\n","import { sound } from \"./sound.js\";\nimport { video } from \"./video.js\";\n\n/**\n * Creates default target data.\n *\n * @returns {DataTarget}\n */\nexport function target() {\n   return {\n      enable: false,\n      video: { dbSection: \"static\", menuType: 'spell', animation: 'curewounds', variant: '01', color: 'blue', enableCustom: false, customPath: \"\" },\n      sound: sound(),\n      options: {\n         addTokenWidth: false,\n         anchor: \"0.5\",\n         contrast: 0,\n         delay: 0,\n         elevation: 1000,\n         fadeIn: 250,\n         fadeOut: 500,\n         isMasked: false,\n         //isWait: false,\n         isRadius: false,\n         opacity: 1,\n         persistent: false,\n         repeat: 1,\n         repeatDelay: 250,\n         saturate: 0,\n         size: 1,\n         tint: false,\n         tintColor: \"#FFFFFF\",\n         unbindAlpha: false,\n         unbindVisibility: false,\n         zIndex: 1,\n      }\n   };\n}\n\n/**\n * @typedef {object} DataTarget\n *\n * @property {boolean=false}     enable -\n *\n * @property {DataVideo}         video -\n *\n * @property {DataSound}         sound -\n *\n * @property {DataTargetOptions} options -\n */\n\n/**\n * @typedef {object} DataTargetOptions\n *\n * @property {boolean}     addTokenWidth -\n * \n * @property {number}      delay -\n *\n * @property {number}      elevation -\n *\n * @property {number}      fadeIn -\n *\n * @property {number}      fadeOut -\n *\n * @property {boolean}     isMasked -\n *\n * @property {boolean}     isRadius -\n *\n * @property {number}      opacity -\n *\n * @property {boolean}     persistent -\n *\n * @property {number}      repeat -\n *\n * @property {number}      repeatDelay -\n *\n * @property {number}      size -\n *\n * @property {boolean}     unbindAlpha -\n *\n * @property {boolean}     unbindVisibility -\n *\n * @property {number}      zIndex -\n */\n","import { sound } from \"./sound.js\";\n\nexport function meleeSwitch() {\n    return {\n       video: {\n          dbSection: \"range\",\n          menuType: \"weapon\",\n          animation: \"arrow\",\n          variant: \"regular\",\n          color: \"regular\",\n       },\n       sound: sound(),\n       options: {\n          detect: \"automatic\",\n          range: 2,\n          returning: false,\n          switchType: \"on\",\n       }\n    }\n }","import * as common from \"./common\";\n\nexport const aefx = [\n   {\n      ...common.main({ label: \"frightened\" }),\n      menu: \"aefx\",\n      metaData: {default: true},\n      activeEffectType: \"ontoken\",\n      primary: {\n         options: {\n            addTokenWidth: true,\n            delay: 0,\n            elevation: 1000,\n            isMasked: false,\n            isRadius: true,\n            isWait : false,\n            opacity : 0.75,\n            persistent : true,\n            playOn : \"source\",\n            repeat : 1,\n            size : 0.75,\n            unbindAlpha : false,\n            unbindVisibility : false,\n            zIndex : 1,\n         },\n         sound: {enable: false},\n         video: { dbSection: \"static\", menuType: \"conditions\", animation: \"horror\", variant: \"01\", color: \"purple\" },\n      },\n      source: common.source(),\n      macro: common.macro(),\n      secondary: common.secondary(),\n   }\n];\n","import * as common from \"./common\";\n\nexport const aura = [\n   {\n      ...common.main({ label: \"spiritguardians\" }),\n      menu: \"aura\",\n      metaData: {default: true},\n      macro: common.macro(),\n      primary: common.primary({\n         video: { dbSection: \"static\", menuType: \"spell\", animation: \"spiritguardians\", variant: '01', color: 'yellowblue' },\n         options: {\n            addTokenWidth: true,\n            alpha: false,\n            alphaMax: 0.5,\n            alphaMin: -0.5,\n            alphaDuration: 1000,\n            breath: false,\n            breathMax: 1.05,\n            breathMin: 0.95,\n            breathDuration: 1000,\n            delay: 0,\n            elevation: 0,\n            fadeIn: 250,\n            fadeOut: 500,\n            isRadius: true,\n            isWait: false,\n            opacity: 0.75,\n            playOn: \"source\",\n            size: 3,\n            tint: false,\n            tintColor: \"#FFFFFF\",\n            tintSaturate: 0,    \n            unbindAlpha: false,\n            unbindVisbility: false,\n            zIndex: 1,\n         },\n      }),\n      secondary: common.secondary(),\n      source: common.source(),\n      target: common.target()\n   }\n];\n","import * as common from \"./common\";\n\nexport const melee = [\n   {\n      ...common.main({ label: \"dagger\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'dagger', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1,\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Dagger.glb\",\n            animationType: \"swipe\",\n            playOn: \"source\",\n            repeat: 1,\n            rotationX: 0,\n            rotateTowards: true,\n            speed: 2,\n            scale: 0.4,\n            delay: 0,\n            rotationZ: 0,\n            rotationY: 270\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"swipe\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target(),\n   },\n\n   {\n      ...common.main({ label: \"flurryofblows\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'flurryofblows', variant: 'physical', color: 'blue' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1,\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"token\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            animationType: \"slash\",\n            playOn: \"source\",\n            repeat: 4,\n            resetTime: null\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: false,\n            source: false,\n            target: false,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"greataxe\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'greataxe', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1,\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Axe_Double.glb\",\n            rotateTowards: true,\n            rotationY: 90,\n            speed: 2\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"bow\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"greatclub\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'greatclub', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Hammer_Double.glb\",\n            rotationY: 90,\n            rotateTowards: true,\n            speed: 2,\n            scale: 0.5\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"greatsword\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'greatsword', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Sword_big.glb\",\n            speed: 2,\n            rotationY: 90,\n            rotateTowards: true,\n            scale: 0.6\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"handaxe\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'handaxe', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Axe_small.glb\",\n            rotationX: null,\n            rotationY: 270,\n            rotateTowards: true,\n            scale: 0.4,\n            speed: 2\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"sword\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'sword', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Sword.glb\",\n            rotateTowards: true,\n            speed: 2,\n            scale: 0.4,\n            rotationY: 90\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"mace\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'mace', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Hammer_Double.glb\",\n            speed: 2,\n            scale: 0.4,\n            rotateTowards: true,\n            rotationY: 90\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"maul\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'maul', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Hammer_Double.glb\",\n            speed: 2,\n            rotationY: 90,\n            rotateTowards: true,\n            scale: 0.4\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"spear\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'spear', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/Kenney/Food/chopstick.glb\",\n            rotationX: 180,\n            scale: 3,\n            speed: 2\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"rapier\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'rapier', variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Dagger.glb\",\n            rotateTowards: true,\n            rotationX: null,\n            rotationY: 270\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"unarmedstrike\" }),\n      menu: \"melee\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"melee\", menuType: \"weapon\", animation: 'unarmedstrike', variant: 'physical', color: 'blue' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"token\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            animationType: \"swipe\",\n            playOn: \"source\"\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: false,\n            source: false,\n            target: false,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      meleeSwitch: common.meleeSwitch(),\n      source: common.source(),\n      target: common.target()\n   }\n];\n","import * as common from \"./common\";\n\nexport const ontoken = [\n   {\n      ...common.main({ label: \"curewounds\" }),\n      menu: \"ontoken\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"static\", menuType: \"spell\", animation: 'curewounds', variant: '01', color: 'blue' },\n         options: {\n            addTokenWidth: false,\n            anchor: \"0.5\",\n            contrast: 0,\n            delay: 0,\n            elevation: 0,\n            fadeIn: 250,\n            fadeOut: 500,\n            isMasked: false,\n            isRadius: false,\n            isWait: false,\n            opacity: 1,\n            persistent: false,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1.5,\n            playOn: \"default\",\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            unbindAlpha: false,\n            unbindVisibility: false,\n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"explosion\",\n         data: {\n            color01: \"#00ff08\",\n            color02: \"#00ffaa\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/symbol_01.png\",\n            life: 2000,\n            rate: 1,\n            gravity: -50,\n            mass: 20000,\n            scale: 0.7,\n            speed: 1\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: false,\n            source: false,\n            target: false,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"itemHealingWord\" }),\n      menu: \"ontoken\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"static\", menuType: \"spell\", animation: 'generichealing', variant: '01', color: 'blue' },\n         options: {\n            addTokenWidth: false,\n            anchor: \"0.5\",\n            contrast: 0,\n            delay: 0,\n            elevation: 0,\n            fadeIn: 250,\n            fadeOut: 500,\n            isMasked: false,\n            isRadius: false,\n            isWait: false,\n            opacity: 1,\n            persistent: false,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1.5,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            playOn: \"default\",\n            unbindAlpha: false,\n            unbindVisibility: false,\n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"explosion\",\n         data: {\n            color01: \"#0091ff\",\n            color02: \"#00fbff\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/symbol_01.png\",\n            speed: 1,\n            gravity: -50,\n            mass: 20000,\n            life: 2000,\n            rate: 1,\n            scale: 0.1,\n            alpha: 1\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: false,\n            source: false,\n            target: false,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"tollthedead\" }),\n      menu: \"ontoken\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"static\", menuType: \"spell\", animation: 'tollthedead', variant: 'complete', color: 'green' },\n         options: {\n            addTokenWidth: false,\n            anchor: \"0.5\",\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            fadeIn: 250,\n            fadeOut: 500,\n            isMasked: false,\n            isRadius: false,\n            isWait: false,\n            opacity: 1,\n            persistent: false,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            playOn: \"target\",\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            unbindAlpha: false,\n            unbindVisibility: false,\n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"explosion\",\n         data: {\n            color01: \"#9900ff\",\n            color02: \"#4400ff\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/magic_02.png\",\n            rate: 1,\n            life: 2000,\n            gravity: 0,\n            mass: 20000,\n            scale: 0.6,\n            alpha: 1\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: false,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"debuff\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"bite\" }),\n      menu: \"ontoken\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"static\", menuType: \"creature\", animation: \"bite\", variant: \"01\", color: \"red\" },\n         options: {\n            addTokenWidth: false,\n            anchor: \"0.5\",\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            fadeIn: 250,\n            fadeOut: 500,\n            isMasked: false,\n            isRadius: false,\n            isWait: false,\n            opacity: 1,\n            persistent: false,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            playOn: \"target\",\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            unbindAlpha: false,\n            unbindVisibility: false,\n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"token\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            animationType: \"charge\",\n            playOn: \"source\"\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: false,\n            source: false,\n            target: false,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"claw\" }),\n      menu: \"ontoken\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"static\", menuType: \"creature\", animation: \"claw\", variant: \"01\", color: \"red\" },\n         options: {\n            addTokenWidth: false,\n            anchor: \"0.5\",\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            fadeIn: 250,\n            fadeOut: 500,\n            isMasked: false,\n            isRadius: false,\n            isWait: false,\n            opacity: 1,\n            persistent: false,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            size: 1,\n            playOn: \"target\",\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            unbindAlpha: false,\n            unbindVisibility: false,\n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"token\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            animationType: \"swipe\",\n            playOn: \"source\"\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: false,\n            source: false,\n            target: false,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   }\n];\n","import * as common from \"./common\";\n\nexport const preset = [\n   {\n      ...common.main({ label: \"mistystep\" }),\n      menu: \"preset\",\n      metaData: {default: true},\n      presetType: \"teleportation\",\n      macro: common.macro(),\n      data: {\n         options: {\n            range: 30,\n            hideFromPlayers: false,\n            measureType: \"alternating\",\n            teleport: true,\n            speed: 120,\n            delayMove: 1000,\n            alpha: 0,\n            delayFade: 750,\n            delayReturn: 250,\n            checkCollision: true,\n         },   \n         start: {\n            dbSection: \"static\",\n            enable: true,\n            menuType: \"spell\",\n            animation: \"mistystep\",\n            variant: \"01\",   \n            color: \"blue\",\n            customPath: \"\",\n            enableCustom: false,\n            options: {\n               delay: 0,\n               elevation: 1000,\n               fadeIn: 250,\n               fadeOut: 250,\n               isMasked: false,\n               opacity: 1,\n               isRadius: false,\n               size: 1.5,\n            },\n         },\n         end: {\n            dbSection: \"static\",\n            enable: true,\n            menuType: \"spell\",\n            animation: \"mistystep\",\n            variant: \"02\",\n            color: \"blue\",\n            customPath: \"\",\n            enableCustom: false,\n            options: {\n               delay: 500,\n               elevation: 1000,\n               fadeIn: 250,\n               fadeOut: 250,\n               isMasked: false,\n               isRadius: false,\n               opacity: 1,\n               size: 1.5,\n            },\n         },\n         between: {\n            dbSection: \"range\",\n            enable: false,\n            menuType: \"spell\",\n            animation: \"chainlightning\",\n            variant: \"primary\",\n            color: \"blue\",\n            enableCustom: false,\n            customPath: \"\",\n            options: {\n               delay: 0,\n               elevation: 1000,\n               opacity: 1,\n               playbackRate: 1,\n            },\n         },\n         sound: common.sound(),\n      },\n   },\n   {\n      ...common.main({ label: \"fireball\" }),\n      menu: \"preset\",\n      metaData: {default: true},\n      presetType: \"proToTemp\",\n      macro: common.macro(),\n      data: {\n         projectile: {\n            dbSection: \"range\",\n            menuType: \"spell\",\n            animation: \"fireballbeam\",\n            variant: \"01\",\n            color: \"orange\",\n            customPath: \"\",\n            enableCustom: false,\n            options: {\n               elevation: 1000,\n               opacity: 1,\n               removeTemplate: false,\n               repeat: 1,\n               repeatDelay: 250,\n               wait: -1800,\n            },\n            sound: common.sound(),\n         },\n         preExplosion: {\n            enable: false,\n            dbSection: \"static\",\n            menuType: \"spell\",\n            animation: \"curewounds\",\n            variant: \"01\",\n            color: \"blue\",\n            customPath: \"\",\n            enableCustom: false,\n            options: {\n               elevation: 1000,\n               opacity: 1,\n               repeat: 1,\n               repeatDelay: 250,\n               scale: 1.5,\n               wait: 0,\n         },\n            sound: common.sound(),\n         },\n         explosion: {\n            dbSection: \"static\",\n            menuType: \"spell\",\n            animation: \"fireball\",\n            variant: \"explode\",\n            color: \"orange\",\n            enableCustom: false,\n            customPath: \"\",\n            options: {\n               elevation: 1000,\n               opacity: 1,\n               repeat: 1,\n               repeatDelay: 250,\n               scale: 1.25,\n               wait: -1000,\n         },\n            sound: common.sound(),\n         },\n         afterImage: {\n            enable: false,\n            customPath: \"\",\n            options: {\n               elevation: 0,\n               persistent: false,\n               scale: 1,\n            }\n        }    \n      },\n      secondary: common.secondary(),\n      target: common.target()\n   }\n];\n","import * as common from \"./common\";\n\nexport const range = [\n   {\n      ...common.main({ label: \"crossbow\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"weapon\", animation: 'bolt', variant: 'physical', color: 'orange' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Arrow.glb\",\n            rotationY: 0,\n            rotationX: 90,\n            speed: 10,\n            scale: 0.5\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"bow\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"bow\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"weapon\", animation: 'arrow', variant: 'regular', color: 'regular' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"sprite\",\n         data: {\n            color01: \"#FFFFFF\",\n            color02: \"#FFFFFF\",\n            spritePath: \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Arrow.glb\",\n            speed: 10,\n            rotationX: 90,\n            scale: 0.5\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"bow\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"disintegrate\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"spell\", animation: 'disintegrate', variant: '01', color: 'green' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"ray\",\n         data: {\n            color01: \"#00ff08\",\n            color02: \"#d4ff00\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            speed: 1,\n            life: 2000,\n            rate: 50\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"debuff\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"eldritchblast\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"spell\", animation: 'eldritchblast', variant: '01', color: 'purple' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"ray\",\n         data: {\n            color01: \"#4e16a2\",\n            color02: \"#1e00ff\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            life: 2000,\n            rate: 50\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"firebolt\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"spell\", animation: 'firebolt', variant: '01', color: 'orange' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"projectile\",\n         data: {\n            color01: \"#ff0000\",\n            color02: \"#fff70a\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            arc: 1\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: true,\n            data: {\n               color01: \"#ff0000\",\n               color02: \"#ffda24\",\n               life: 400,\n               speed: 0.1,\n               mass: 1000,\n               scale: 1,\n               rate: 1\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"guidingbolt\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"spell\", animation: 'guidingbolt', variant: '01', color: 'yellowblue' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"projectile\",\n         data: {\n            color01: \"#eeff00\",\n            color02: \"#00d9ff\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            speed: 5,\n            arc: 1,\n            life: 2000\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: true,\n            data: {\n               color01: \"#fff700\",\n               color02: \"#0adaff\",\n               mass: 1000,\n               life: 300,\n               gravity: -10,\n               speed: 1,\n               alpha: 0.2,\n               rate: 30\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"magicmissile\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"spell\", animation: 'magicmissile', variant: '01', color: 'purple' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"projectile\",\n         data: {\n            color01: \"#002aff\",\n            color02: \"#aabacf\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            repeat: 3,\n            scale: 0.5,\n            life: 800\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"rayoffrost\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"spell\", animation: 'rayoffrost', variant: '01', color: 'blue' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"ray\",\n         data: {\n            color01: \"#002aff\",\n            color02: \"#0400ff\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/star_07.png\",\n            life: 2000,\n            rate: 60,\n            scale: 0.6\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"scorchingray\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"spell\", animation: 'scorchingray', variant: '01', color: 'orange' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"ray\",\n         data: {\n            color01: \"#ff0000\",\n            color02: \"#ff9500\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/scorch_01.png\",\n            life: 2000,\n            rate: 60,\n            scale: 0.7\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   },\n\n   {\n      ...common.main({ label: \"witchbolt\" }),\n      menu: \"range\",\n      metaData: { default: true },\n      primary: common.primary({\n         video: { dbSection: \"range\", menuType: \"spell\", animation: 'witchbolt', variant: '01', color: 'blue' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isReturning: false,\n            isWait: false,\n            onlyX: false,\n            opacity: 1,\n            repeat: 1,\n            repeatDelay: 500,\n            saturate: 0,\n            tint: false,\n            tintColor: \"#FFFFFF\",   \n            zIndex: 1\n         }\n      }),\n      secondary: common.secondary(),\n      levels3d: {\n         type: \"ray\",\n         data: {\n            color01: \"#00e1ff\",\n            color02: \"#4138c2\",\n            spritePath: \"modules/levels-3d-preview/assets/particles/emberssmall.png\",\n            life: 2000,\n            rate: 60,\n            scale: 0.6\n         },\n         sound: {\n            enable: false\n         },\n         secondary: {\n            enable: false,\n            data: {\n               color01: \"#FFFFFF\",\n               color02: \"#FFFFFF\"\n            }\n         },\n         tokens: {\n            enable: true,\n            source: true,\n            target: true,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n         },\n         enable: true\n      },\n      macro: common.macro(),\n      source: common.source(),\n      target: common.target()\n   }\n];\n","import * as common from \"./common\";\n\nexport const templatefx = [\n   {\n      ...common.main({ label: \"calllightning\" }),\n      menu: \"templatefx\",\n      metaData: {default: true},\n      primary: common.primary({\n         video: { dbSection: \"templatefx\", menuType: \"circle\", animation: \"calllightning\", variant: '01', color: 'blueorange' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isMasked: false,\n            isWait: false,\n            occlusionAlpha: 0.7,\n            occlusionMode: \"3\",\n            opacity: 0.75,\n            persistType: \"overheadtile\",\n            persistent: true,\n            removeTemplate: true,\n            repeat: 1,\n            repeatDelay: 500,\n            rotate: 0,\n            saturate: 0,\n            scale: \"1\",\n            tint: false,\n            tintColor: \"#FFFFFF\",\n            zIndex: 1\n         }\n      }),\n      macro: common.macro(),\n      secondary: common.secondary(),\n      source: common.source(),\n      target: common.target(),\n   },\n\n   {\n      ...common.main({ label: \"fogcloud\" }),\n      menu: \"templatefx\",\n      metaData: {default: true},\n      primary: common.primary({\n         video: { dbSection: \"templatefx\", menuType: \"circle\", animation: \"fogcloud\", variant: '01', color: 'white' },\n         options: {\n            contrast: 0,\n            delay: 0,\n            elevation: 1000,\n            isWait: false,\n            isMasked: false,\n            occlusionAlpha: 0.65,\n            occlusionMode: \"3\",\n            opacity: 0.75,\n            persistType: \"overheadtile\",\n            persistent: true,\n            removeTemplate: true,\n            repeat: 1,\n            repeatDelay: 500,\n            rotate: 0,\n            saturate: 0,\n            scale: \"1\",\n            tint: false,\n            tintColor: \"#FFFFFF\",\n            zIndex: 1\n         }\n      }),\n      macro: common.macro(),\n      secondary: common.secondary(),\n      source: common.source(),\n      target: common.target(),\n   }\n];\n","import { localize }     from \"#runtime/util/i18n\";\n\nimport { aefx }         from \"./aefx.js\";\nimport { aura }         from \"./aura.js\";\nimport { melee }        from \"./melee.js\";\nimport { ontoken }      from \"./ontoken.js\";\nimport { preset }       from \"./preset.js\";\nimport { range }        from \"./range.js\";\nimport { templatefx }   from \"./templatefx.js\";\n\n/**\n * Loads the default data and localizes the 'label' from raw default data.\n *\n * @param {\"aefx\"|\"aura\"|\"melee\"|\"ontoken\"|\"preset\"|\"range\"|\"templatefx\"} type - Category type of data to load.\n */\nexport function loadDefault(type) {\n   let data;\n\n   switch (type) {\n      case \"aefx\":\n         data = aefx;\n         break;\n\n      case \"aura\":\n         data = aura;\n         break;\n\n      case \"melee\":\n         data = melee;\n         break;\n\n      case \"ontoken\":\n         data = ontoken;\n         break;\n\n      case \"preset\":\n         data = preset;\n         break;\n\n      case \"range\":\n         data = range;\n         break;\n\n      case \"templatefx\":\n         data = templatefx;\n         break;\n\n      default: throw new Error(`Unknown type: '${type}'.`);\n   }\n\n   return data.reduce((array, entry) => {\n      entry.label = localize(entry.label);\n      array.push(entry);\n      return array;\n   }, []);\n}\n","import { loadDefault }      from \"../../../store/default-data/index.js\";\nimport { AutorecSanitizer } from \"../../../../../aa-classes/autorecSanityCheck.js\"\n\nexport function defaultData() {\n    let defaultMenu = {\n        melee: loadDefault('melee'),\n        range: loadDefault('range'),\n        ontoken: loadDefault('ontoken'),\n        templatefx: loadDefault('templatefx'),\n        aura: loadDefault('aura'),\n        preset: loadDefault('preset'),\n        aefx: loadDefault('aefx')\n    }\n     \n    return {\n        melee: newMenuIDs(foundry.utils.deepClone(defaultMenu.melee)),\n        range: newMenuIDs(foundry.utils.deepClone(defaultMenu.range)),\n        ontoken: newMenuIDs(foundry.utils.deepClone(defaultMenu.ontoken)),\n        templatefx: newMenuIDs(foundry.utils.deepClone(defaultMenu.templatefx)),\n        aura: newMenuIDs(foundry.utils.deepClone(defaultMenu.aura)),\n        preset: newMenuIDs(foundry.utils.deepClone(defaultMenu.preset)),\n        aefx: newMenuIDs(foundry.utils.deepClone(defaultMenu.aefx)),\n    }\n\n    /*\n    return {\n        melee: newMenuIDs(foundry.utils.deepClone(melee)),\n        range: newMenuIDs(foundry.utils.deepClone(range)),\n        ontoken: newMenuIDs(foundry.utils.deepClone(ontoken)),\n        templatefx: newMenuIDs(foundry.utils.deepClone(templatefx)),\n        aura: newMenuIDs(foundry.utils.deepClone(aura)),\n        preset: newMenuIDs(foundry.utils.deepClone(preset)),\n        aefx: newMenuIDs(foundry.utils.deepClone(aefx)),\n    }\n    */\n}\n\nfunction newMenuIDs(menu) {\n    let newMenu = AutorecSanitizer.newSectionIds(menu)\n    //let newMenu = menu.forEach(section => section.id = uuidv4());\n    return newMenu;\n}","import { autoRecMigration }                 from \"../../../../../mergeScripts/autorec/autoRecMerge\";\nimport { currentAutorecVersion }            from \"../../../../../mergeScripts/autorec/autoRecMerge.js\";\nimport { custom_warning, custom_error, custom_notify }     from \"../../../../../constants/constants\";\nimport { Hashing }                          from \"#runtime/util\";\nimport { AutorecSanitizer }                 from \"../../../../../aa-classes/autorecSanityCheck\";\nimport { defaultData }                      from \"./defaultIndex\";\n\nexport class AAAutorecManager\n{\n    static async restoreDefault() {\n        let restoredMenu = defaultData();\n\n        await game.settings.set(\"autoanimations\", \"aaAutorec\", void 0);\n        await game.settings.set(\"autoanimations\", \"aaAutorec-aefx\", restoredMenu.aefx);\n        await game.settings.set(\"autoanimations\", \"aaAutorec-aura\", restoredMenu.aura);\n        await game.settings.set(\"autoanimations\", \"aaAutorec-melee\", restoredMenu.melee);\n        await game.settings.set(\"autoanimations\", \"aaAutorec-preset\", restoredMenu.preset);\n        await game.settings.set(\"autoanimations\", \"aaAutorec-range\", restoredMenu.range);\n        await game.settings.set(\"autoanimations\", \"aaAutorec-ontoken\", restoredMenu.ontoken);\n        await game.settings.set(\"autoanimations\", \"aaAutorec-templatefx\", restoredMenu.templatefx);\n    }\n\n    // Returns the current Global Automatic Recognition Menus with Version\n    static getAutorecEntries() {\n        let menu = {\n            melee: game.settings.get('autoanimations', 'aaAutorec-melee'),\n            range: game.settings.get('autoanimations', 'aaAutorec-range'),\n            ontoken: game.settings.get('autoanimations', 'aaAutorec-ontoken'),\n            templatefx: game.settings.get('autoanimations', 'aaAutorec-templatefx'),\n            aura: game.settings.get('autoanimations', 'aaAutorec-aura'),\n            preset: game.settings.get('autoanimations', 'aaAutorec-preset'),\n            aefx: game.settings.get('autoanimations', 'aaAutorec-aefx'),\n            version: game.settings.get('autoanimations', 'aaAutorec').version,\n        }\n        return menu;\n    }\n\n    /**\n     *\n     * @param {Object} data // Expects an Object containing all MetaData to tag on the Menu Entries\n     * @param {Object} options // Limit the Menus in which to tag with MetaData. Ex: {melee: true} will ONLY tag the Melee Menu entries with MetaData\n     * @returns\n     */\n    static async addMetaData(data, options) {\n\n        if (!data) { return; }\n        let addAll = false;\n        if (!options) { addAll = true; }\n\n        let metaData = data || {};\n\n        let exportData = {\n            melee: await game.settings.get(\"autoanimations\", \"aaAutorec-melee\"),\n            range: await game.settings.get(\"autoanimations\", \"aaAutorec-range\"),\n            ontoken: await game.settings.get(\"autoanimations\", \"aaAutorec-ontoken\"),\n            templatefx: await game.settings.get(\"autoanimations\", \"aaAutorec-templatefx\"),\n            aura: await game.settings.get(\"autoanimations\", \"aaAutorec-aura\"),\n            preset: await game.settings.get(\"autoanimations\", \"aaAutorec-preset\"),\n            aefx: await game.settings.get(\"autoanimations\", \"aaAutorec-aefx\"),\n            version: await game.settings.get('autoanimations', 'aaAutorec').version,\n        };\n\n        if (exportData.melee.length && (options?.melee || addAll)) {\n            let newMelee = setMeta(exportData.melee)\n            await game.settings.set(\"autoanimations\", \"aaAutorec-melee\", newMelee);\n        }\n        if (exportData.range.length && (options?.range || addAll)) {\n            let newRange = setMeta(exportData.range)\n            await game.settings.set(\"autoanimations\", \"aaAutorec-range\", newRange);\n        }\n        if (exportData.ontoken.length && (options?.ontoken || addAll)) {\n            let newOnToken = setMeta(exportData.ontoken)\n            await game.settings.set(\"autoanimations\", \"aaAutorec-ontoken\", newOnToken);\n        }\n        if (exportData.templatefx.length && (options?.templatefx || addAll)) {\n            let newTemplateFx = setMeta(exportData.templatefx)\n            await game.settings.set(\"autoanimations\", \"aaAutorec-templatefx\", newTemplateFx);\n        }\n        if (exportData.aura.length && (options?.aura || addAll)) {\n            let newAura = setMeta(exportData.aura)\n            await game.settings.set(\"autoanimations\", \"aaAutorec-aura\", newAura);\n        }\n        if (exportData.preset.length && (options?.preset || addAll)) {\n            let newPreset = setMeta(exportData.preset)\n            await game.settings.set(\"autoanimations\", \"aaAutorec-preset\", newPreset);\n        }\n        if (exportData.aefx.length && (options?.aefx || addAll)) {\n            let newAefx = setMeta(exportData.aefx)\n            await game.settings.set(\"autoanimations\", \"aaAutorec-aefx\", newAefx);\n        }\n\n        function setMeta(menu) {\n            let newMenu = foundry.utils.deepClone(menu);\n            newMenu = AutorecSanitizer.newSectionIds(newMenu);\n            newMenu.forEach((a) => a.metaData = metaData);\n            return newMenu;\n        }\n\n    }\n\n    // Exports ALL Global Automatic Recognition Menus\n    static async exportMenu(string = \"\") {\n\n        const exportData = {\n            melee: await game.settings.get(\"autoanimations\", \"aaAutorec-melee\"),\n            range: await game.settings.get(\"autoanimations\", \"aaAutorec-range\"),\n            ontoken: await game.settings.get(\"autoanimations\", \"aaAutorec-ontoken\"),\n            templatefx: await game.settings.get(\"autoanimations\", \"aaAutorec-templatefx\"),\n            aura: await game.settings.get(\"autoanimations\", \"aaAutorec-aura\"),\n            preset: await game.settings.get(\"autoanimations\", \"aaAutorec-preset\"),\n            aefx: await game.settings.get(\"autoanimations\", \"aaAutorec-aefx\"),\n            version: await game.settings.get('autoanimations', 'aaAutorec').version,\n        };\n\n        const filename = `fvtt-AutomatedAnimations-GlobalMenu${string}.json`;\n\n       foundry.utils.saveDataToFile(JSON.stringify(exportData, null, 2), \"text/json\", filename);\n    }\n\n    /**\n     *\n     * @param {Object} menu // Expects a valid  Global Automatic Recognition Menu export\n     * @param {*} options // Limit the Menus in which to perform the Merge. Ex: {melee: true} will ONLY merge the Melee Menus\n     */\n    static async mergeMenus(menu, options = {}) {\n        const currentVersion = currentAutorecVersion();\n        if (menu.version > currentVersion) {\n            custom_error(\"You are attempting to import a menu that is from a newer version of Automated Animations. Please update your module and try again\", true);\n            return;\n        }\n        custom_warning(\"Merging the requested Menus\", false, menu, options)\n        const updatedImport = await autoRecMigration.handle(menu, {...options})\n\n        let currentMenu = {\n            melee:await game.settings.get('autoanimations', 'aaAutorec-melee'),\n            range: await game.settings.get('autoanimations', 'aaAutorec-range'),\n            ontoken: await game.settings.get('autoanimations', 'aaAutorec-ontoken'),\n            templatefx: await game.settings.get('autoanimations', 'aaAutorec-templatefx'),\n            aura: await game.settings.get('autoanimations', 'aaAutorec-aura'),\n            preset: await game.settings.get('autoanimations', 'aaAutorec-preset'),\n            aefx: await game.settings.get('autoanimations', 'aaAutorec-aefx'),\n        }\n\n        let mergeMenu = updatedImport;\n\n        let mergeList = []\n        if (options.melee || options.submitAll) { mergeList.push(\"melee\")};\n        if (options.range || options.submitAll) { mergeList.push(\"range\")};\n        if (options.ontoken || options.submitAll) { mergeList.push(\"ontoken\")};\n        if (options.templatefx || options.submitAll) { mergeList.push(\"templatefx\")};\n        if (options.aura || options.submitAll) { mergeList.push(\"aura\")};\n        if (options.preset || options.submitAll) { mergeList.push(\"preset\")};\n        if (options.aefx || options.submitAll) { mergeList.push(\"aefx\")};\n\n        for (var i = 0; i < mergeList.length; i++) {\n            let existingMenu = currentMenu[mergeList[i]];\n            let incomingMenu = mergeMenu[mergeList[i]];\n\n            for (var a = 0; a < incomingMenu.length; a++) {\n                let incomingSectionLabel = incomingMenu[a].label.replace(/\\s+/g, '').toLowerCase();\n                let newSection = existingMenu.find(section => {\n                    return section.label?.replace(/\\s+/g, '')?.toLowerCase() === incomingSectionLabel;\n                })\n                if (!newSection) {\n                    incomingMenu[a].id = Hashing.uuidv4();\n                    currentMenu[mergeList[i]].push(incomingMenu[a]);\n                }\n            }\n            custom_notify(`${game.i18n.localize(`autoanimations.animTypes.${mergeList[i]}`)} Menu has been successfully merged`);\n            game.settings.set('autoanimations', `aaAutorec-${mergeList[i]}`, currentMenu[mergeList[i]])\n        }\n    }\n\n    /**\n     *\n     * @param {Object} menu // Expects a valid  Global Automatic Recognition Menu export\n     * @param {*} options // Limit the Menus in which to perform the Overwrite. Ex: {melee: true} will ONLY overwrite the Melee Menus\n     */\n    static async overwriteMenus(menu, options = {}) {\n        let isValid = this._validateJson(menu);\n        if (!isValid) {\n            custom_error(\"You did not provide a valid JSON!\");\n            return;\n        }\n        const menuData = JSON.parse(menu)\n\n        const currentVersion = currentAutorecVersion();\n        if (menuData.version > currentVersion) {\n            custom_error(\"You are attempting to import a menu that is from a newer version of Automated Animations. Please update your module and try again\", true);\n            return;\n        }\n\n        await autoRecMigration.handle(menuData, {isOverwrite: true, shouldSubmit: true, ...options})\n    }\n\n    static _validateJson(json) {\n        try {\n            JSON.parse(json);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n}\n","import { trafficCop }       from \"../router/traffic-cop.js\";\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { debug }            from \"../constants/constants.js\";\nimport { socketlibSocket }  from \"../socketset.js\";\nimport { AnimationState }   from \"../AnimationState.js\";\nimport { DataSanitizer }    from \"../aa-classes/DataSanitizer.js\";\n\n/**\n *\n * @param {*} // The Active Effect being applied\n *\n */\nexport async function createActiveEffects(effect) {\n\n    if (effect.disabled) { return; }\n\n    if (!AnimationState.enabled) { return; }\n\n    // Gets the Token that the Active Effect is applied to (which can also be from an actor's embedded item)\n    const actor = effect.parent instanceof Item ? effect.parent.actor : effect.parent;\n    const aeToken = actor.token ?? actor.getActiveTokens()[0];\n    if (!aeToken) {\n        debug(\"Failed to find the Token for the Active Effect\")\n        return;\n    }\n    const aeNameField = (effect.name ?? effect.label) + `${aeToken.id}`\n    const checkAnim = Sequencer.EffectManager.getEffects({ object: aeToken, name: aeNameField }).length > 0\n    if (checkAnim) {\n        debug(\"Animation is already present on the Token, returning.\")\n        return;\n    }\n\n    const data = {\n        token: aeToken,\n        targets: [aeToken],\n        item: effect,\n        activeEffect: true,\n        tieToDocuments: true,\n    }\n\n    let handler = await AAHandler.make(data);\n    if (!handler) { return; }\n    // Exits early if Item or Source Token returns null. Total Failure\n    if (!handler.item || !handler.sourceToken) {\n        debug(\"Failed to find the Item or Source Token\", handler)\n        return;\n    }\n    // Sends the data to begin the animation Sequence\n    trafficCop(handler);\n}\n\nexport async function deleteActiveEffects(effect, shouldDelete = false) {\n    //let aaEffects = Sequencer.EffectManager.getEffects({ origin: effect.uuid })\n\n    const actor = effect.parent instanceof Item ? effect.parent.actor : effect.parent;\n    const token = actor.token ?? actor.getActiveTokens()[0];\n\n    const data = {\n        token: token,\n        targets: [],\n        item: effect,\n        activeEffect: true,\n    };\n\n    // Compile data for the system handler\n    const handler = await AAHandler.make(data);\n    if (!handler) { return; }\n\n    const flagData = handler.animationData\n    //? foundry.utils.deepClone(handler.flags)\n    //: foundry.utils.deepClone(handler.autorecObject);\n\n    const macro = await DataSanitizer.compileMacro(handler, flagData);\n    if (macro) {\n        if (foundry.utils.isNewerVersion(game.version, 11)) {\n            new Sequence()\n            .macro(macro.name, {args: [\"off\", handler, macro.args]})\n            .play()\n        } else {\n            if (game.modules.get(\"advanced-macros\")?.active) {\n                new Sequence()\n                    .macro(macro.name, \"off\", handler, macro.args)\n                    .play()\n            } else {\n                new Sequence()\n                    .macro(macro.name)\n                    .play()\n            }\n        }\n    }\n\n    if (shouldDelete) {\n        let aaEffects = Sequencer.EffectManager.getEffects({ origin: effect.uuid });\n        if (aaEffects.length > 0) {\n            // Filters the active Animations to isolate the ones active on the Token\n            let currentEffect = aaEffects.filter(i => effect.uuid.includes(i.source?.actor?.id));\n            currentEffect = currentEffect.length < 1 ? aaEffects.filter(i => effect.uuid.includes(i.source?.id)) : currentEffect;\n            if (currentEffect.length < 0) { return; }\n\n            // Fallback for the Source Token\n            if (!handler.sourceToken) {\n                handler.sourceToken = currentEffect[0].source;\n            }\n\n            // End all Animations on the token with .origin(effect.uuid)\n            Sequencer.EffectManager.endEffects({ origin: effect.uuid, object: handler.sourceToken })\n        }\n    }\n}\n\n/**\n *\n * @param {Active Effect being updated} effect\n * @param {Toggle Check On/Off for Effect} toggle\n */\nexport async function toggleActiveEffects(effect, toggle) {\n\n    if (toggle.disabled === true) {\n        deleteActiveEffects(effect, true)\n    } else if (toggle.disabled === false) {\n        createActiveEffects(effect);\n    }\n}\n\n// Used to delete Tile effects when Midi-QOL Concentration is lost\nexport async function checkConcentration(effect) {\n\n    // Check effect label and return if it is not equal to \"concentrating\"\n    const label = (effect.name ?? effect.label) || \"\";\n    if (label.toLowerCase() !== \"concentrating\") { return; }\n\n    // Get Originating Item. If no Origin, return\n    const origin = effect.origin\n    if (!origin) {\n        debug(\"Failed to find an Origin for Concentration\")\n        return;\n    }\n\n    // Get arrays of Background and Foreground Tiles with the A-A Origin flag UUID matching the Effect Origin\n    const tiles = canvas.tiles.placeables.filter(i => i.document.flags?.autoanimations?.origin === origin)\n    if (tiles.length < 1) {\n        debug(\"Failed to find any Tiles tied to Concentration\")\n        return;\n    }\n    let tileIdArray = []\n    if (tiles.length) {\n        for (let tile of tiles) {\n            tileIdArray.push(tile.id)\n        }\n        socketlibSocket.executeAsGM(\"removeTile\", tileIdArray)\n    }\n}\n","import { debug }            from \"../../constants/constants.js\";\nimport { trafficCop }       from \"../../router/traffic-cop.js\";\nimport AAHandler            from \"../../system-handlers/workflow-data.js\";\nimport { AnimationState }   from \"../../AnimationState.js\";\nimport { DataSanitizer }    from \"../../aa-classes/DataSanitizer.js\";\n\n\nexport async function createRuleElementPF2e(item) {\n    const aePF2eTypes = ['condition', 'effect']\n    if (!aePF2eTypes.includes(item.type)) { return; }\n\n    if (!AnimationState.enabled) { return; }\n\n    // Get the Item ID and Token it is on\n    const itemId = item.id;\n    const aeToken = canvas.tokens.placeables.find(token => token.actor?.items?.get(itemId) != null)\n    if (!aeToken) {\n        debug(\"Failed to find the Token for the Active Effect\")\n        return;\n    }\n\n    if (game.settings.get(\"autoanimations\", \"disableGrantedAuraEffects\")) {\n        let tactorId = aeToken.actor.id;\n        let origin = item.flags?.system?.aura?.origin;\n        if (origin) {\n            let idSplit = origin.split('.');\n            let id = idSplit[idSplit.length - 1];\n            if (tactorId !== id) {\n                debug(\"This is a Granted Ruleset, exiting early\")\n                return;\n            }\n        }\n    }\n\n    const aeNameField = item.name.replace(/[^A-Za-z0-9 .*_-]/g, \"\") + `${aeToken.id}`\n    const checkAnim = await Sequencer.EffectManager.getEffects({ object: aeToken, name: aeNameField }).length > 0\n    if (checkAnim) {\n        debug(\"Animation is already present on the Token, returning.\")\n        return;\n    }\n\n    const data = {\n        token: aeToken,\n        targets: [],\n        item: item,\n        activeEffect: true,\n        tieToDocuments: true,\n    }\n    let handler = await AAHandler.make(data);\n    if (!handler) { return; }\n    /*\n    if (!handler.isEnabled || (!handler.autorecObject && !handler.isCustomized)) {\n        debug(\"Active Effect has no animation defined, exiting early\", handler)\n        return;\n    }\n    */\n    // Exits early if Item or Source Token returns null. Total Failure\n    if (!handler.item || !handler.sourceToken) {\n        debug(\"Failed to find the Item or Source Token\", handler)\n        return;\n    }\n\n    // Sends the data to begin the animation Sequence\n    trafficCop(handler);\n\n}\n\nexport async function deleteRuleElementPF2e(itemData = {}) {\n\n    const data = {\n        token: itemData.token,\n        targets: [],\n        item: itemData.item,\n        activeEffect: true,\n    };\n\n    const handler = await AAHandler.make(data);\n    if (!handler) { return; }\n\n    const flagData = handler.animationData\n        //? foundry.utils.deepClone(handler.flags)\n        //: foundry.utils.deepClone(handler.autorecObject);\n\n    const macro = await DataSanitizer.compileMacro(handler, flagData);\n    if (macro) {\n        if (foundry.utils.isNewerVersion(game.version, 11)) {\n            new Sequence()\n            .macro(macro.name, {args: [\"off\", handler, macro.args]})\n            .play()\n        } else {\n            if (game.modules.get(\"advanced-macros\")?.active) {\n                new Sequence()\n                    .macro(macro.name, \"off\", handler, macro.args)\n                    .play()\n            } else {\n                new Sequence()\n                    .macro(macro.name)\n                    .play()\n            }\n        }\n    }\n}\n","import { trafficCop }       from \"../../router/traffic-cop.js\";\nimport AAHandler            from \"../../system-handlers/workflow-data.js\";\nimport { debug }            from \"../../constants/constants.js\";\nimport { AnimationState }   from \"../../AnimationState.js\";\nimport { DataSanitizer }    from \"../../aa-classes/DataSanitizer.js\";\n\n/**\n *\n * @param {*} // The Active Effect being applied\n *\n */\nexport async function createActiveEffectsWfrp(effect) {\n\n    if (effect.disabled) { return; }\n\n    if (!AnimationState.enabled) { return; }\n\n    // Gets the Token that the Active Effect is applied to (which can also be from an actor's embedded item)\n    const actor = effect.parent instanceof Item ? effect.parent.actor : effect.parent;\n    if (!actor) { return; }\n    const aeToken = actor.token ?? actor.getActiveTokens()[0];\n    if (!aeToken) {\n        debug(\"Failed to find the Token for the Active Effect\")\n        return;\n    }\n    const aeNameField = (effect.name ?? effect.label) + `${aeToken.id}`\n    const checkAnim = Sequencer.EffectManager.getEffects({ object: aeToken, name: aeNameField }).length > 0\n    if (checkAnim) {\n        debug(\"Animation is already present on the Token, returning.\")\n        return;\n    }\n\n    const data = {\n        token: aeToken,\n        targets: [aeToken],\n        item: effect,\n        activeEffect: true,\n        tieToDocuments: true,\n    }\n\n    let handler = await AAHandler.make(data);\n    if (!handler) { return; }\n    // Exits early if Item or Source Token returns null. Total Failure\n    if (!handler.item || !handler.sourceToken) {\n        debug(\"Failed to find the Item or Source Token\", handler)\n        return;\n    }\n    if (handler.animationData?.activeEffectType == 'aura' && effect.system.transferData?.type != \"aura\") return;\n\n    if (handler.animationData?.activeEffectType == 'aura') {\n        handler.animationData.primary.options.size = handler.item.radius / 2;\n    }\n    // Sends the data to begin the animation Sequence\n    trafficCop(handler);\n}\n\nexport async function deleteActiveEffectsWfrp(effect, shouldDelete = false) {\n    //let aaEffects = Sequencer.EffectManager.getEffects({ origin: effect.uuid })\n\n    const actor = effect.parent instanceof Item ? effect.parent.actor : effect.parent;\n    if (!actor) { return; }\n    const token = actor.token ?? actor.getActiveTokens()[0];\n\n    const data = {\n        token: token,\n        targets: [],\n        item: effect,\n        activeEffect: true,\n    };\n\n    // Compile data for the system handler\n    const handler = await AAHandler.make(data);\n    if (!handler) { return; }\n\n    const flagData = handler.animationData\n    //? foundry.utils.deepClone(handler.flags)\n    //: foundry.utils.deepClone(handler.autorecObject);\n\n    const macro = await DataSanitizer.compileMacro(handler, flagData);\n    if (macro) {\n        if (isNewerVersion(game.version, 11)) {\n            new Sequence()\n            .macro(macro.name, {args: [\"off\", handler, macro.args]})\n            .play()\n        } else {\n            if (game.modules.get(\"advanced-macros\")?.active) {\n                new Sequence()\n                    .macro(macro.name, \"off\", handler, macro.args)\n                    .play()\n            } else {\n                new Sequence()\n                    .macro(macro.name)\n                    .play()\n            }    \n        }\n    }\n\n    if (shouldDelete) {\n        let aaEffects = Sequencer.EffectManager.getEffects({ origin: effect.uuid });\n        if (aaEffects.length > 0) {  \n            // Filters the active Animations to isolate the ones active on the Token\n            let currentEffect = aaEffects.filter(i => effect.uuid.includes(i.source?.actor?.id));\n            currentEffect = currentEffect.length < 1 ? aaEffects.filter(i => effect.uuid.includes(i.source?.id)) : currentEffect;\n            if (currentEffect.length < 0) { return; }\n    \n            // Fallback for the Source Token\n            if (!handler.sourceToken) {\n                handler.sourceToken = currentEffect[0].source;\n            }\n    \n            // End all Animations on the token with .origin(effect.uuid)\n            Sequencer.EffectManager.endEffects({ origin: effect.uuid, object: handler.sourceToken })\n        }    \n    }\n}\n\n/**\n *\n * @param {Active Effect being updated} effect\n * @param {Toggle Check On/Off for Effect} toggle\n */\nexport async function toggleActiveEffectsWfrp(effect, toggle) {\n\n    if (toggle.disabled === true) {\n        deleteActiveEffectsWfrp(effect, true)\n    } else if (toggle.disabled === false) {\n        createActiveEffectsWfrp(effect);\n    }\n}","import { debug }            from \"../../constants/constants.js\";\nimport { trafficCop }       from \"../../router/traffic-cop.js\";\nimport AAHandler            from \"../../system-handlers/workflow-data.js\";\nimport { AnimationState }   from \"../../AnimationState.js\";\nimport { DataSanitizer }    from \"../../aa-classes/DataSanitizer.js\";\n\n\nexport async function createRuleElementPtu(item) {\n    if (!AnimationState.enabled) { return; }\n\n    // Get the Item ID and Token it is on\n    const itemId = item.id;\n    const aeToken = canvas.tokens.placeables.find(token => token.actor?.items?.get(itemId) != null)\n    if (!aeToken) {\n        debug(\"Failed to find the Token for the Active Effect\")\n        return;\n    }\n\n    if (game.settings.get(\"autoanimations\", \"disableGrantedAuraEffects\")) {\n        let tactorId = aeToken.actor.id;\n        let origin = item.flags?.ptu?.aura?.origin;\n        if (origin) {\n            let idSplit = origin.split('.');\n            let id = idSplit[idSplit.length - 1];\n            if (tactorId !== id) {\n                debug(\"This is a Granted Ruleset, exiting early\")\n                return;\n            }\n        }\n    }\n\n    const aeNameField = item.name.replace(/[^A-Za-z0-9 .*_-]/g, \"\") + `${aeToken.id}`\n    const checkAnim = await Sequencer.EffectManager.getEffects({ object: aeToken, name: aeNameField }).length > 0\n    if (checkAnim) {\n        debug(\"Animation is already present on the Token, returning.\")\n        return;\n    }\n\n    const data = {\n        token: aeToken,\n        targets: [],\n        item: item,\n        activeEffect: true,\n        tieToDocuments: true,\n    }\n    let handler = await AAHandler.make(data);\n    if (!handler) { return; }\n    /*\n    if (!handler.isEnabled || (!handler.autorecObject && !handler.isCustomized)) {\n        debug(\"Active Effect has no animation defined, exiting early\", handler)\n        return;\n    }\n    */\n    // Exits early if Item or Source Token returns null. Total Failure\n    if (!handler.item || !handler.sourceToken) {\n        debug(\"Failed to find the Item or Source Token\", handler)\n        return;\n    }\n\n    // Sends the data to begin the animation Sequence\n    trafficCop(handler);\n\n}\n\nexport async function deleteRuleElementPtu(itemData = {}) {\n\n    const data = {\n        token: itemData.token,\n        targets: [],\n        item: itemData.item,\n        activeEffect: true,\n    };\n\n    const handler = await AAHandler.make(data);\n    if (!handler) { return; }\n\n    const flagData = handler.animationData\n        //? foundry.utils.deepClone(handler.flags)\n        //: foundry.utils.deepClone(handler.autorecObject);\n\n    const macro = await DataSanitizer.compileMacro(handler, flagData);\n    if (macro) {\n        if (foundry.utils.isNewerVersion(game.version, 11)) {\n            new Sequence()\n            .macro(macro.name, {args: [\"off\", handler, macro.args]})\n            .play()\n        } else {\n            if (game.modules.get(\"advanced-macros\")?.active) {\n                new Sequence()\n                    .macro(macro.name, \"off\", handler, macro.args)\n                    .play()\n            } else {\n                new Sequence()\n                    .macro(macro.name)\n                    .play()\n            }\n        }\n    }\n}\n","import { createActiveEffects, deleteActiveEffects, checkConcentration, toggleActiveEffects } from \"./handleActiveEffects.js\";\nimport { createRuleElementPF2e, deleteRuleElementPF2e } from \"./pf2e/handlePF2eRuleElements.js\";\nimport { createActiveEffectsWfrp, deleteActiveEffectsWfrp, toggleActiveEffectsWfrp } from \"./wfrp4e/handleWfrp4eActiveEffects.js\";\nimport AAHandler from \"../system-handlers/workflow-data.js\";\nimport { debug } from \"../constants/constants.js\";\nimport { createRuleElementPtu, deleteRuleElementPtu } from \"./ptu/handlePtuRuleElements.js\";\n\nconst pf2eDeletedItems = new Map();\nconst ptuDeletedItems = new Map();\n\nexport function registerActiveEffectHooks() {\n    switch (game.system.id) {\n        case 'pf2e':\n        case 'sf2e':\n            Hooks.on(\"createItem\", (item, data, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }    \n                if (game.user.id !== userId) { return; }\n                const aePF2eTypes = ['condition', 'effect', 'feat']\n                if (!aePF2eTypes.includes(item.type)) {\n                    debug(\"This is not a PF2e Ruleset, exiting early\")\n                    return;\n                }\n                if (item.system?.references?.parent && game.settings.get(\"autoanimations\", \"disableNestedEffects\")) {\n                    debug(\"This is a nested Ruleset, exiting early\")\n                    return;\n                }            \n                createRuleElementPF2e(item);\n            })\n            Hooks.on(\"preDeleteItem\", (item, data, userId) => {\n                if (shouldContinue(item, userId)) {\n                    pf2eDeletedItems.set(item.id, {\n                        item, \n                        token: item.parent?.token || canvas.tokens.placeables.find(token => token.actor?.items?.get(item.id) != null)\n                    })    \n                }\n            })\n            Hooks.on(\"deleteItem\", (item, data, userId) => {\n                if (shouldContinue(item, userId)) {\n                    let itemData = pf2eDeletedItems.get(item.id);\n                    if (!itemData) { return; }\n                    deleteRuleElementPF2e(itemData)\n                }\n            })\n            function shouldContinue(item, userId) {\n                if (game.user.id !== userId) { return false; }\n                if (!['condition', 'effect', 'feat'].includes(item.type)) { return false; }\n                return true;\n            }\n            break;\n        // SFRPG, DND5e and WFRP4e are all missing switch breaks on purpose. DON\"T CHANGE THESE SECTIONS\n        case \"sfrpg\":\n            Hooks.on(\"updateItem\", (item, diff, action, userId) => {\n                if (game.user.id !== userId) { return; }\n                Hooks.once(\"updateToken\", async (token, actor, updates, userId) => {\n                    if (game.user.id !== userId) { return; }\n                    if (item.type !== 'feat') { return; }\n\n                    if (!diff.isActive) {\n                        deleteActiveEffects(item, token)\n                    } else {\n                        const sfrpgData = {\n                            item,\n                            token,\n                            targets: game.user.targets\n                        }\n                        const handler = await AAHandler.make(sfrpgData)\n                        trafficCop(handler);\n                    }\n                })\n            })\n        case \"dnd5e\":\n            Hooks.on(\"updateActiveEffect\", (data, toggle, other, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }\n                if (game.user.id !== userId) { return; }\n                toggleActiveEffects(data, toggle)\n            });\n        case \"pf1\":\n            Hooks.on(\"createActiveEffect\", async (effect, data, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }\n                if (game.user.id !== userId) { return; }\n\n                if (effect.parent instanceof Item) {\n                    const flagData = effect.parent.flags['autoanimations'];\n                    if (flagData) {\n                        await effect.update({ 'flags.autoanimations': flagData });\n                    }\n                }\n                createActiveEffects(effect);\n            });\n            Hooks.on(\"preDeleteActiveEffect\", (effect, data, userId) => {\n                if (game.user.id !== userId) { return; }\n\n                deleteActiveEffects(effect);\n            });\n            break;\n        case 'ptu':\n            Hooks.on(\"createItem\", (item, data, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }    \n                if (game.user.id !== userId) { return; }\n                const aePtuTypes = ['condition', 'effect']\n                if (!aePtuTypes.includes(item.type)) {\n                    debug(\"This is not a PTU Ruleset, exiting early\")\n                    return;\n                }\n                if (item.system?.references?.parent && game.settings.get(\"autoanimations\", \"disableNestedEffects\")) {\n                    debug(\"This is a nested Ruleset, exiting early\")\n                    return;\n                }            \n                createRuleElementPtu(item);\n            })\n            Hooks.on(\"preDeleteItem\", (item, data, userId) => {\n                if (ptuShouldContinue(item, userId)) {\n                    ptuDeletedItems.set(item.id, {\n                        item, \n                        token: item.parent?.token || canvas.tokens.placeables.find(token => token.actor?.items?.get(item.id) != null)\n                    })    \n                }\n            })\n            Hooks.on(\"deleteItem\", (item, data, userId) => {\n                if (ptuShouldContinue(item, userId)) {\n                    let itemData = ptuDeletedItems.get(item.id);\n                    if (!itemData) { return; }\n                    deleteRuleElementPtu(itemData)\n                }\n            })\n            function ptuShouldContinue(item, userId) {\n                if (game.user.id !== userId) { return false; }\n                if (!['condition', 'effect'].includes(item.type)) { return false; }\n                return true;\n            }\n        case 'wfrp4e':\n            Hooks.on(\"updateActiveEffect\", (data, toggle, other, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }\n                if (game.user.id !== userId) { return; }\n                toggleActiveEffectsWfrp(data, toggle)\n            });\n            Hooks.on(\"createActiveEffect\", (effect, data, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }\n                if (game.user.id !== userId) { return; }\n                createActiveEffectsWfrp(effect)\n            });\n            Hooks.on(\"deleteActiveEffect\", (effect, data, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }\n                if (game.user.id !== userId) { return; }\n                deleteActiveEffectsWfrp(effect, userId)\n            });\n            break;\n        default:\n            Hooks.on(\"updateActiveEffect\", (data, toggle, other, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }\n                if (game.user.id !== userId) { return; }\n                toggleActiveEffects(data, toggle)\n            });\n            Hooks.on(\"createActiveEffect\", (effect, data, userId) => {\n                if (game.settings.get(\"autoanimations\", \"disableAEAnimations\")) {\n                    debug(`Active Effect Animations are Disabled`);\n                    return;\n                }\n                if (game.user.id !== userId) { return; }\n                createActiveEffects(effect)\n            });\n            Hooks.on(\"preDeleteActiveEffect\", (effect, data, userId) => {\n                if (game.user.id !== userId) { return; }\n\n                deleteActiveEffects(effect)\n                if (game.modules.get('midi-qol')?.active) {\n                    checkConcentration(effect)\n                }\n            });\n\n    }\n}\n","import { Frozen } from '@typhonjs-fvtt/runtime/util';\nimport { isObject } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\n * Provides cross-realm checks for DOM nodes / elements, events, and essential duck typing for any class-based object\n * with a constructor name. The impetus is that certain browsers such as Chrome and Firefox behave differently when\n * performing `instanceof` checks when elements are moved between browser windows. With Firefox in particular, the\n * entire JS runtime cannot use `instanceof` checks as the instances of fundamental DOM elements differ between\n * windows.\n *\n * TRL supports moving applications from a main central browser window and popping them out into separate standalone\n * app instances in a separate browser window. In this case, for essential DOM element and event checks, it is necessary\n * to employ the workarounds found in `CrossWindow`.\n */\nclass CrossWindow {\n    /**\n     * @private\n     */\n    constructor() {\n        throw new Error('CrossWindow constructor: This is a static class and should not be constructed.');\n    }\n    /**\n     * Class names for all focusable element types.\n     */\n    static #FocusableElementClassNames = ['HTMLAnchorElement', 'HTMLButtonElement', 'HTMLDetailsElement',\n        'HTMLEmbedElement', 'HTMLIFrameElement', 'HTMLInputElement', 'HTMLObjectElement', 'HTMLSelectElement',\n        'HTMLTextAreaElement'];\n    /**\n     * DOM nodes with defined `ownerDocument` property.\n     */\n    static #NodesWithOwnerDocument = new Set([Node.ELEMENT_NODE, Node.TEXT_NODE, Node.COMMENT_NODE,\n        Node.DOCUMENT_FRAGMENT_NODE]);\n    // Various UIEvent sets for duck typing by constructor name.\n    /**\n     * Duck typing class names for pointer events.\n     */\n    static #PointerEventSet = new Set(['MouseEvent', 'PointerEvent']);\n    /**\n     * Duck typing class names for all UIEvents.\n     */\n    static #UIEventSet = new Set(['UIEvent', 'FocusEvent', 'MouseEvent', 'WheelEvent', 'KeyboardEvent', 'PointerEvent',\n        'TouchEvent', 'InputEvent', 'CompositionEvent', 'DragEvent']);\n    /**\n     * Duck typing class names for events considered as user input.\n     */\n    static #UserInputEventSet = new Set(['KeyboardEvent', 'MouseEvent', 'PointerEvent']);\n    /**\n     * Internal options used by `#checkDOMInstanceType` when retrieving the Window reference from a Node that doesn't\n     * define `ownerDocument`.\n     */\n    static #optionsInternalCheckDOM = { throws: false };\n    // DOM Querying ---------------------------------------------------------------------------------------------------\n    /**\n     * Convenience method to test if the given target element is the current active element.\n     *\n     * @param target - Element to test as current active element.\n     */\n    static isActiveElement(target) {\n        // Duck type if target has known defined `ownerDocument` property.\n        if (this.#hasOwnerDocument(target)) {\n            return target?.ownerDocument?.activeElement === target;\n        }\n        return false;\n    }\n    /**\n     * Convenience method to retrieve the `document.activeElement` value in the current Window context of a DOM Node /\n     * Element, EventTarget, Document, or Window.\n     *\n     * @param target - DOM Node / Element, EventTarget, Document, UIEvent or Window to query.\n     *\n     * @param [options] - Options.\n     *\n     * @returns Active element or `undefined` when `throws` option is `false` and the target is invalid.\n     *\n     * @throws {@link TypeError} Target must be a DOM Node / Element, Document, UIEvent, or Window.\n     */\n    static getActiveElement(target, { throws = true } = {}) {\n        // Duck type if target has known defined `ownerDocument` property.\n        if (this.#hasOwnerDocument(target)) {\n            return target?.ownerDocument?.activeElement ?? null;\n        }\n        // Duck type if target is a UIEvent.\n        if (this.isUIEvent(target) && isObject(target?.view)) {\n            return target?.view?.document?.activeElement ?? null;\n        }\n        // Duck type if target is a Document.\n        if (this.isDocument(target)) {\n            return target?.activeElement ?? null;\n        }\n        // Duck type if target is a Window.\n        if (this.isWindow(target)) {\n            return target?.document?.activeElement ?? null;\n        }\n        if (throws) {\n            throw new TypeError(`'target' must be a DOM Node / Element, Document, UIEvent, or Window.`);\n        }\n        return void 0;\n    }\n    /**\n     * Convenience method to retrieve the `Document` value in the current context of a DOM Node / Element, EventTarget,\n     * Document, UIEvent, or Window.\n     *\n     * @param target - DOM Node / Element, EventTarget, Document, UIEvent or Window to query.\n     *\n     * @param [options] - Options.\n     *\n     * @returns {Document} Active document or `undefined` when `throws` option is `false` and the target is invalid.\n     *\n     * @throws {@link TypeError} Target must be a DOM Node / Element, Document, UIEvent, or Window.\n     */\n    static getDocument(target, { throws = true } = {}) {\n        // Duck type if target has known defined `ownerDocument` property.\n        if (this.#hasOwnerDocument(target)) {\n            return target?.ownerDocument;\n        }\n        // Duck type if target is a UIEvent.\n        if (this.isUIEvent(target) && isObject(target?.view)) {\n            return target?.view?.document;\n        }\n        // Duck type if target is a Document.\n        if (this.isDocument(target)) {\n            return target;\n        }\n        // Duck type if target is a Window.\n        if (this.isWindow(target)) {\n            return target?.document;\n        }\n        if (throws) {\n            throw new TypeError(`'target' must be a DOM Node / Element, Document, UIEvent, or Window.`);\n        }\n        return void 0;\n    }\n    /**\n     * Convenience method to retrieve the `Window` value in the current context of a DOM Node / Element, EventTarget,\n     * Document, or Window.\n     *\n     * @param target - DOM Node / Element, EventTarget, Document, UIEvent or Window to query.\n     *\n     * @param [options] - Options.\n     *\n     * @returns Active window or `undefined` when `throws` option is `false` and the target is invalid.\n     *\n     * @throws {@link TypeError} Target must be a DOM Node / Element, Document, UIEvent, or Window.\n     */\n    static getWindow(target, { throws = true } = {}) {\n        // Duck type if target has known defined `ownerDocument` property.\n        if (this.#hasOwnerDocument(target)) {\n            return target.ownerDocument?.defaultView ?? globalThis;\n        }\n        // Duck type if target is a UIEvent.\n        if (this.isUIEvent(target) && isObject(target?.view)) {\n            return target.view ?? globalThis;\n        }\n        // Duck type if target is a Document.\n        if (this.isDocument(target)) {\n            return target.defaultView ?? globalThis;\n        }\n        // Duck type if target is a Window.\n        if (this.isWindow(target)) {\n            return target;\n        }\n        if (throws) {\n            throw new TypeError(`'target' must be a DOM Node / Element, Document, UIEvent, or Window.`);\n        }\n        return void 0;\n    }\n    // ES / Browser API basic prototype tests -------------------------------------------------------------------------\n    /**\n     * Provides basic prototype string type checking if `target` is a CSSImportRule.\n     *\n     * @param target - A potential CSSImportRule to test.\n     *\n     * @returns Is `target` a CSSImportRule.\n     */\n    static isCSSImportRule(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object CSSImportRule]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a CSSLayerBlockRule.\n     *\n     * @param target - A potential CSSLayerBlockRule to test.\n     *\n     * @returns Is `target` a CSSLayerBlockRule.\n     */\n    static isCSSLayerBlockRule(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object CSSLayerBlockRule]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a CSSStyleRule.\n     *\n     * @param target - A potential CSSStyleRule to test.\n     *\n     * @returns Is `target` a CSSStyleRule.\n     */\n    static isCSSStyleRule(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object CSSStyleRule]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a CSSStyleSheet.\n     *\n     * @param target - A potential CSSStyleSheet to test.\n     *\n     * @returns Is `target` a CSSStyleSheet.\n     */\n    static isCSSStyleSheet(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object CSSStyleSheet]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a Document.\n     *\n     * @param target - A potential Document to test.\n     *\n     * @returns Is `target` a Document.\n     */\n    static isDocument(target) {\n        // Match any DOM Document object by its default @@toStringTag.\n        // - HTMLDocument (`[object HTMLDocument]` in modern browsers & JSDOM)\n        // - generic Document (`[object Document]` in older or XML contexts)\n        return isObject(target) && /^\\[object (HTML)?Document]$/.test(Object.prototype.toString.call(target));\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a Map.\n     *\n     * @param target - A potential Map to test.\n     *\n     * @returns Is `target` a Map.\n     */\n    static isMap(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object Map]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a Promise.\n     *\n     * @param target - A potential Promise to test.\n     *\n     * @returns Is `target` a Promise.\n     */\n    static isPromise(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object Promise]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a RegExp.\n     *\n     * @param target - A potential RegExp to test.\n     *\n     * @returns Is `target` a RegExp.\n     */\n    static isRegExp(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object RegExp]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a Set.\n     *\n     * @param target - A potential Set to test.\n     *\n     * @returns Is `target` a Set.\n     */\n    static isSet(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object Set]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a URL.\n     *\n     * @param target - A potential URL to test.\n     *\n     * @returns Is `target` a URL.\n     */\n    static isURL(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object URL]';\n    }\n    /**\n     * Provides basic prototype string type checking if `target` is a Window.\n     *\n     * @param target - A potential Window to test.\n     *\n     * @returns Is `target` a Window.\n     */\n    static isWindow(target) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object Window]';\n    }\n    // DOM Element typing ---------------------------------------------------------------------------------------------\n    /**\n     * Ensures that the given target is an `instanceof` all known DOM elements that are focusable. Please note that\n     * additional checks are required regarding focusable state; use {@link A11yHelper.isFocusable} for a complete check.\n     *\n     * @param target - Target to test for `instanceof` focusable HTML element.\n     *\n     * @returns Is target an `instanceof` a focusable DOM element.\n     */\n    static isFocusableHTMLElement(target) {\n        for (let cntr = this.#FocusableElementClassNames.length; --cntr >= 0;) {\n            if (this.#checkDOMInstanceType(target, Node.ELEMENT_NODE, this.#FocusableElementClassNames[cntr])) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Provides precise type checking if `target` is a DocumentFragment.\n     *\n     * @param target - A potential DocumentFragment to test.\n     *\n     * @returns Is `target` a DocumentFragment.\n     */\n    static isDocumentFragment(target) {\n        return this.#checkDOMInstanceType(target, Node.DOCUMENT_FRAGMENT_NODE, 'DocumentFragment');\n    }\n    /**\n     * Provides precise type checking if `target` is an Element.\n     *\n     * @param target - A potential Element to test.\n     *\n     * @returns Is `target` an Element.\n     */\n    static isElement(target) {\n        return this.#checkDOMInstanceType(target, Node.ELEMENT_NODE, 'Element');\n    }\n    /**\n     * Provides precise type checking if `target` is a HTMLAnchorElement.\n     *\n     * @param target - A potential HTMLAnchorElement to test.\n     *\n     * @returns Is `target` a HTMLAnchorElement.\n     */\n    static isHTMLAnchorElement(target) {\n        return this.#checkDOMInstanceType(target, Node.ELEMENT_NODE, 'HTMLAnchorElement');\n    }\n    /**\n     * Provides precise type checking if `target` is an HTMLElement.\n     *\n     * @param target - A potential HTMLElement to test.\n     *\n     * @returns Is `target` a HTMLElement.\n     */\n    static isHTMLElement(target) {\n        return this.#checkDOMInstanceType(target, Node.ELEMENT_NODE, 'HTMLElement');\n    }\n    /**\n     * Provides precise type checking if `target` is a Node.\n     *\n     * @param target - A potential Node to test.\n     *\n     * @returns Is `target` a DOM Node.\n     */\n    static isNode(target) {\n        if (typeof target?.nodeType !== 'number') {\n            return false;\n        }\n        if (target instanceof globalThis.Node) {\n            return true;\n        }\n        // Must retrieve the window by a more thorough duck type via `getWindow` as not all Nodes have `ownerDocument`\n        // defined.\n        const activeWindow = this.getWindow(target, this.#optionsInternalCheckDOM);\n        const TargetNode = activeWindow?.Node;\n        return TargetNode && target instanceof TargetNode;\n    }\n    /**\n     * Provides precise type checking if `target` is a ShadowRoot.\n     *\n     * @param target - A potential ShadowRoot to test.\n     *\n     * @returns Is `target` a ShadowRoot.\n     */\n    static isShadowRoot(target) {\n        // ShadowRoot is a specialized type of DocumentFragment.\n        return this.#checkDOMInstanceType(target, Node.DOCUMENT_FRAGMENT_NODE, 'ShadowRoot');\n    }\n    /**\n     * Provides precise type checking if `target` is a SVGElement.\n     *\n     * @param target - A potential SVGElement to test.\n     *\n     * @returns Is `target` a SVGElement.\n     */\n    static isSVGElement(target) {\n        return this.#checkDOMInstanceType(target, Node.ELEMENT_NODE, 'SVGElement');\n    }\n    // Event typing ---------------------------------------------------------------------------------------------------\n    /**\n     * Provides basic duck type checking for `Event` signature and optional constructor name(s).\n     *\n     * @param target - A potential DOM event to test.\n     *\n     * @param [types] Specific constructor name or Set of constructor names to match.\n     *\n     * @returns Is `target` an Event with optional constructor name check.\n     */\n    static isEvent(target, types) {\n        if (typeof target?.type !== 'string' || typeof target?.defaultPrevented !== 'boolean' ||\n            typeof target?.stopPropagation !== 'function') {\n            return false;\n        }\n        return types !== void 0 ? this.isCtorName(target, types) : true;\n    }\n    /**\n     * Provides basic duck type checking for `Event` signature for standard mouse / pointer events including\n     * `MouseEvent` and `PointerEvent`.\n     *\n     * @param target - A potential DOM event to test.\n     *\n     * @returns Is `target` a MouseEvent or PointerEvent.\n     */\n    static isPointerEvent(target) {\n        return this.isEvent(target, this.#PointerEventSet);\n    }\n    /**\n     * Provides basic duck type checking for `Event` signature for all UI events.\n     *\n     * @param target - A potential DOM event to test.\n     *\n     * @returns Is `target` a UIEvent.\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/UIEvent\n     */\n    static isUIEvent(target) {\n        return this.isEvent(target, this.#UIEventSet);\n    }\n    /**\n     * Provides basic duck type checking for `Event` signature for standard user input events including `KeyboardEvent`,\n     * `MouseEvent`, and `PointerEvent`.\n     *\n     * @param target - A potential DOM event to test.\n     *\n     * @returns Is `target` a Keyboard, MouseEvent, or PointerEvent.\n     */\n    static isUserInputEvent(target) {\n        return this.isEvent(target, this.#UserInputEventSet);\n    }\n    // Generic typing -------------------------------------------------------------------------------------------------\n    /**\n     * Provides basic type checking by constructor name(s) for objects. This can be useful when checking multiple\n     * constructor names against a provided Set.\n     *\n     * @param target - Object to test for constructor name.\n     *\n     * @param types Specific constructor name or Set of constructor names to match.\n     *\n     * @returns Does the provided object constructor name match the types provided.\n     */\n    static isCtorName(target, types) {\n        if (!isObject(target)) {\n            return false;\n        }\n        if (typeof types === 'string' && target?.constructor?.name === types) {\n            return true;\n        }\n        return !!types?.has(target?.constructor?.name);\n    }\n    // Errors ---------------------------------------------------------------------------------------------------------\n    /**\n     * Provides basic duck type checking and error name for {@link DOMException}.\n     *\n     * @param target - Error to duck type test.\n     *\n     * @param name - Specific error name.\n     *\n     * @returns Is target a DOMException matching the error name.\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMException#error_names\n     */\n    static isDOMException(target, name) {\n        return isObject(target) && Object.prototype.toString.call(target) === '[object DOMException]' &&\n            target.name === name;\n    }\n    // Internal implementation ----------------------------------------------------------------------------------------\n    /**\n     * Internal generic DOM `instanceof` check. First will attempt to find the class name by `globalThis` falling back\n     * to the {@link Window} associated with the DOM node.\n     *\n     * @param target - Target to test.\n     *\n     * @param nodeType - Node type constant.\n     *\n     * @param className - DOM classname for instanceof check.\n     *\n     * @returns Is the target the given nodeType and instance of class name.\n     */\n    static #checkDOMInstanceType(target, nodeType, className) {\n        if (!isObject(target)) {\n            return false;\n        }\n        if (target.nodeType !== nodeType) {\n            return false;\n        }\n        const GlobalClass = window[className];\n        if (GlobalClass && target instanceof GlobalClass) {\n            return true;\n        }\n        const activeWindow = this.#hasOwnerDocument(target) ?\n            target?.ownerDocument?.defaultView :\n            // @ts-ignore: Safe in this context.\n            this.getWindow(target, this.#optionsInternalCheckDOM);\n        const TargetClass = activeWindow?.[className];\n        return TargetClass && target instanceof TargetClass;\n    }\n    static #hasOwnerDocument(target) {\n        return typeof target === 'object' && target !== null &&\n            this.#NodesWithOwnerDocument.has(target?.nodeType);\n    }\n}\n\n/**\n * Provides a utility function to parse / construct fully qualified URL instances from a URL string.\n */\nclass URLParser {\n    /**\n     * @private\n     */\n    constructor() {\n        throw new Error('URLParser constructor: This is a static class and should not be constructed.');\n    }\n    /**\n     * Parses a URL string converting it to a fully qualified URL. If URL is an existing URL instance, it is returned\n     * immediately. Optionally, you may construct a fully qualified URL from a relative base origin / path or with a\n     * route prefix added to the current location origin.\n     *\n     * @param options - Options.\n     *\n     * @param options.url - URL string to convert to a URL.\n     *\n     * @param [options.base] - Optional fully qualified base path for relative URL construction.\n     *\n     * @param [options.routePrefix] - Optional route prefix to add to location origin for absolute URL strings\n     *        when `base` is not defined.\n     *\n     * @returns Parsed URL or null if `url` is not parsed.\n     */\n    static parse({ url, base, routePrefix }) {\n        if (CrossWindow.isURL(url)) {\n            return url;\n        }\n        if (typeof url !== 'string') {\n            return null;\n        }\n        if (base !== void 0 && typeof base !== 'string') {\n            return null;\n        }\n        if (routePrefix !== void 0 && typeof routePrefix !== 'string') {\n            return null;\n        }\n        const targetURL = this.#createURL(url);\n        // Parse and return already fully qualified `url` string.\n        if (targetURL) {\n            return targetURL;\n        }\n        let targetBase;\n        // Parse relative url string.\n        if (url.startsWith('./') || url.startsWith('../')) {\n            // Relative from provided `base` or current path.\n            targetBase = base ? base : `${globalThis.location.origin}${globalThis.location.pathname}`;\n        }\n        else {\n            let targetRoutePrefix = '';\n            // Relative to current origin, but include any defined route prefix.\n            if (routePrefix) {\n                // Ensure route prefix starts and ends with `/` for proper URL parsing.\n                targetRoutePrefix = routePrefix.startsWith('/') ? routePrefix : `/${routePrefix}`;\n                targetRoutePrefix = targetRoutePrefix.endsWith('/') ? targetRoutePrefix : `${targetRoutePrefix}/`;\n            }\n            targetBase = `${globalThis.location.origin}${targetRoutePrefix}`;\n        }\n        return this.#createURL(url, targetBase);\n    }\n    // Internal implementation ----------------------------------------------------------------------------------------\n    /**\n     * Helper to create a URL and catch any exception. Useful until `URL.parse` and `URL.canParse` are more widespread.\n     *\n     * @param url - URL string.\n     *\n     * @param base - Base origin / path.\n     *\n     * @returns Valid URL or null.\n     */\n    static #createURL(url, base = '') {\n        try {\n            return new URL(url, base);\n        }\n        catch (err) {\n            return null;\n        }\n    }\n}\n\n/**\n * Provides a utility to validate media file types and determine the appropriate HTML element type for rendering.\n */\nclass AssetValidator {\n    /** Default media types. */\n    static #mediaTypes = Object.freeze({\n        all: Frozen.Set(['audio', 'img', 'svg', 'video']),\n        audio: Frozen.Set(['audio']),\n        img: Frozen.Set(['img']),\n        img_svg: Frozen.Set(['img', 'svg']),\n        img_svg_video: Frozen.Set(['img', 'svg', 'video']),\n        video: Frozen.Set(['video']),\n    });\n    /** Supported audio extensions. */\n    static #audioExtensions = new Set(['mp3', 'wav', 'ogg', 'aac', 'flac', 'webm']);\n    /** Supported image extensions. */\n    static #imageExtensions = new Set(['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp']);\n    /** Supported SVG extensions. */\n    static #svgExtensions = new Set(['svg']);\n    /** Supported video extensions. */\n    static #videoExtensions = new Set(['mp4', 'webm', 'ogg']);\n    /**\n     * @private\n     */\n    constructor() {\n        throw new Error('AssetValidator constructor: This is a static class and should not be constructed.');\n    }\n    /**\n     * Provides several readonly default media type Sets useful for the `mediaTypes` option.\n     */\n    static get MediaTypes() {\n        return this.#mediaTypes;\n    }\n    /**\n     * Parses the provided file path to determine the media type and validity based on the file extension. Certain\n     * extensions can be excluded in addition to filtering by specified media types.\n     *\n     * @param options - Options.\n     *\n     * @returns The parsed asset information containing the file path, extension, element type, and whether the parsing\n     *          is valid for the file extension is supported and not excluded.\n     *\n     * @throws {TypeError} If the provided `url` is not a string or URL, `routePrefix` is not a string,\n     *         `exclude` is not a Set, or `mediaTypes` is not a Set.\n     */\n    static parseMedia({ url, routePrefix, exclude, mediaTypes = this.#mediaTypes.all, raiseException = false }) {\n        const throws = typeof raiseException === 'boolean' ? raiseException : true;\n        if (typeof url !== 'string' && !CrossWindow.isURL(url)) {\n            if (throws) {\n                throw new TypeError(`'url' is not a string or URL instance.`);\n            }\n            else {\n                return { url, valid: false };\n            }\n        }\n        if (routePrefix !== void 0 && typeof routePrefix !== 'string') {\n            if (throws) {\n                throw new TypeError(`'routePrefix' is not a string.`);\n            }\n            else {\n                return { url, valid: false };\n            }\n        }\n        if (exclude !== void 0 && !CrossWindow.isSet(exclude)) {\n            if (throws) {\n                throw new TypeError(`'exclude' is not a Set.`);\n            }\n            else {\n                return { url, valid: false };\n            }\n        }\n        if (!CrossWindow.isSet(mediaTypes)) {\n            if (throws) {\n                throw new TypeError(`'mediaTypes' is not a Set.`);\n            }\n            else {\n                return { url, valid: false };\n            }\n        }\n        const targetURL = typeof url === 'string' ? URLParser.parse({ url, routePrefix }) : url;\n        if (!targetURL) {\n            if (throws) {\n                throw new TypeError(`'url' is invalid.`);\n            }\n            else {\n                return { url, valid: false };\n            }\n        }\n        const extensionMatch = targetURL.pathname.match(/\\.([a-zA-Z0-9]+)$/);\n        const extension = extensionMatch ? extensionMatch[1].toLowerCase() : void 0;\n        const isExcluded = extension && CrossWindow.isSet(exclude) ? exclude.has(extension) : false;\n        let elementType = void 0;\n        let valid = false;\n        if (extension && !isExcluded) {\n            if (this.#svgExtensions.has(extension) && mediaTypes.has('svg')) {\n                elementType = 'svg';\n                valid = true;\n            }\n            else if (this.#imageExtensions.has(extension) && mediaTypes.has('img')) {\n                elementType = 'img';\n                valid = true;\n            }\n            else if (this.#videoExtensions.has(extension) && mediaTypes.has('video')) {\n                elementType = 'video';\n                valid = true;\n            }\n            else if (this.#audioExtensions.has(extension) && mediaTypes.has('audio')) {\n                elementType = 'audio';\n                valid = true;\n            }\n        }\n        return valid ? {\n            src: url,\n            url: targetURL,\n            extension,\n            elementType,\n            valid\n        } : { url, valid: false };\n    }\n}\nObject.freeze(AssetValidator);\n\n/**\n * Provides utility methods for checking browser capabilities.\n *\n * @see https://kilianvalkhof.com/2021/web/detecting-media-query-support-in-css-and-javascript/\n *\n * @privateRemarks\n * TODO: perhaps add support for various standard media query checks for level 4 & 5.\n */\nclass BrowserSupports {\n    /**\n     * @private\n     */\n    constructor() {\n        throw new Error('BrowserSupports constructor: This is a static class and should not be constructed.');\n    }\n    /**\n     * Check for container query support.\n     *\n     * @returns True if container queries supported.\n     */\n    static get containerQueries() {\n        return 'container' in document.documentElement.style;\n    }\n}\n\n/**\n * Provides access to the Clipboard API for reading / writing text strings. This requires a secure context.\n *\n * Note: `writeText` will attempt to use the older `execCommand` if available when `navigator.clipboard` is not\n * available.\n */\nclass ClipboardAccess {\n    /**\n     * @private\n     */\n    constructor() {\n        throw new Error('ClipboardAccess constructor: This is a static class and should not be constructed.');\n    }\n    /**\n     * Uses `navigator.clipboard` if available to read text from the clipboard.\n     *\n     * Note: Always returns `undefined` when `navigator.clipboard` is not available or the clipboard contains the\n     * empty string.\n     *\n     * @param [activeWindow=window] Optional active current window.\n     *\n     * @returns {Promise<string|undefined>} The current clipboard text or undefined.\n     */\n    static async readText(activeWindow = window) {\n        let result = '';\n        if (!CrossWindow.isWindow(activeWindow)) {\n            throw new TypeError(`ClipboardAccess.readText error: 'activeWindow' is not a Window.`);\n        }\n        if (activeWindow?.navigator?.clipboard) {\n            try {\n                result = await activeWindow.navigator.clipboard.readText();\n            }\n            catch (err) { /**/ }\n        }\n        return result === '' ? void 0 : result;\n    }\n    /**\n     * Uses `navigator.clipboard` if available then falls back to `document.execCommand('copy')` if available to copy\n     * the given text to the clipboard.\n     *\n     * @param text - Text to copy to the browser clipboard.\n     *\n     * @param [activeWindow=window] Optional active current window.\n     *\n     * @returns Copy successful.\n     */\n    static async writeText(text, activeWindow = window) {\n        if (typeof text !== 'string') {\n            throw new TypeError(`ClipboardAccess.writeText error: 'text' is not a string.`);\n        }\n        if (!CrossWindow.isWindow(activeWindow)) {\n            throw new TypeError(`ClipboardAccess.writeText error: 'activeWindow' is not a Window.`);\n        }\n        let success = false;\n        if (activeWindow?.navigator?.clipboard) {\n            try {\n                await activeWindow.navigator.clipboard.writeText(text);\n                success = true;\n            }\n            catch (err) { /**/ }\n        }\n        else if (typeof activeWindow?.document?.execCommand === 'function') {\n            const textArea = activeWindow.document.createElement('textarea');\n            // Place in the top-left corner of the screen regardless of scroll position.\n            textArea.style.position = 'fixed';\n            textArea.style.top = '0';\n            textArea.style.left = '0';\n            // Ensure it has a small width and height. Setting to 1px / 1em\n            // doesn't work as this gives a negative w/h on some browsers.\n            textArea.style.width = '2em';\n            textArea.style.height = '2em';\n            // We don't need padding, reducing the size if it does flash render.\n            textArea.style.padding = '0';\n            // Clean up any borders.\n            textArea.style.border = 'none';\n            textArea.style.outline = 'none';\n            textArea.style.boxShadow = 'none';\n            // Avoid the flash of the white box if rendered for any reason.\n            textArea.style.background = 'transparent';\n            textArea.value = text;\n            activeWindow.document.body.appendChild(textArea);\n            textArea.focus();\n            textArea.select();\n            try {\n                success = activeWindow.document.execCommand('copy');\n            }\n            catch (err) { /**/ }\n            activeWindow.document.body.removeChild(textArea);\n        }\n        return success;\n    }\n}\n\nexport { AssetValidator, BrowserSupports, ClipboardAccess, CrossWindow, URLParser };\n//# sourceMappingURL=index.js.map\n","import {\n\trun_all,\n\tsubscribe,\n\tnoop,\n\tsafe_not_equal,\n\tis_function,\n\tget_store_value\n} from '../internal/index.js';\n\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#readable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#writable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {import('./public.js').Unsubscriber} */\n\tlet stop;\n\t/** @type {Set<import('./private.js').SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\t/** @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {import('./public.js').Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(value));\n\t}\n\n\t/**\n\t * @param {import('./public.js').Subscriber<T>} run\n\t * @param {import('./private.js').Invalidator<T>} [invalidate]\n\t * @returns {import('./public.js').Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {import('./private.js').SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(value);\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>, set: (value: T) => void, update: (fn: import('./public.js').Updater<T>) => void) => import('./public.js').Unsubscriber | void} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>) => T} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * @template {import('./private.js').Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<import('./public.js').Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = is_function(result) ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * https://svelte.dev/docs/svelte-store#readonly\n * @template T\n * @param {import('./public.js').Readable<T>} store  - store to make readonly\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\nexport { get_store_value as get };\n","import { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { isIterable } from '@typhonjs-fvtt/runtime/util/object';\nimport { writable } from 'svelte/store';\n\n/**\n * Provides reactive observation of the Foundry core theme applied to `document.body`. There are several stores\n * available to receive updates when the theme changes.\n */\nclass ThemeObserver\n{\n   /**\n    * All readable theme stores.\n    *\n    * @type {Readonly<({\n    *    themeName: Readonly<import('svelte/store').Readable<string>>\n    *    themeToken: Readonly<import('svelte/store').Readable<string>>\n    * })>}\n    */\n   static #stores;\n\n   /**\n    * Internal setter for theme stores.\n    *\n    * @type {{ themeName: Function, themeToken: Function }}\n    */\n   static #storeSet;\n\n   /**\n    * Current theme name.\n    *\n    * @type {string}\n    */\n   static #themeName = '';\n\n   /**\n    * Current theme token.\n    *\n    * @type {string}\n    */\n   static #themeToken = '';\n\n   /**\n    * @hideconstructor\n    */\n   constructor()\n   {\n      throw new Error('ThemeObserver constructor: This is a static class and should not be constructed.');\n   }\n\n   /**\n    * @returns {Readonly<({\n    *    themeName: Readonly<import('svelte/store').Readable<string>>\n    *    themeToken: Readonly<import('svelte/store').Readable<string>>\n    * })>} Current platform theme stores.\n    */\n   static get stores() { return this.#stores; }\n\n   /**\n    * @returns {string} Current theme name; may be different from the theme token.\n    */\n   static get themeName()\n   {\n      return this.#themeName;\n   }\n\n   /**\n    * @returns {string} Current theme token - CSS class.\n    */\n   static get themeToken()\n   {\n      return this.#themeToken;\n   }\n\n   /**\n    * Verify that the given `theme` name or token (CSS class) is the current platform theme.\n    *\n    * @param {string} theme - A theme name or token to verify.\n    *\n    * @returns {boolean} If the requested theme matches the current platform theme.\n    */\n   static isTheme(theme)\n   {\n      return typeof theme === 'string' && (this.#themeName === theme || this.#themeToken === theme);\n   }\n\n   /**\n    * Detect if theming tokens (CSS classes) are present in the given iterable list.\n    *\n    * @param {Iterable<string>}  tokens - a token list to verify if any theming tokens are included.\n    *\n    * @param {object} [options] - Optional parameters.\n    *\n    * @param {boolean} [options.strict=false] - When true, all theming tokens required if multiple are verified.\n    *\n    * @returns {boolean} True if theming tokens present.\n    */\n   static hasThemedTokens(tokens, { strict = false } = {})\n   {\n      if (!isIterable(tokens)) { return false; }\n\n      let strictFound = !strict;\n      let themeFound = false;\n\n      for (const entry of tokens)\n      {\n         if (typeof entry !== 'string') { continue; }\n\n         if (entry.startsWith('theme-')) { themeFound = true; }\n         if (entry === 'themed') { strictFound = true; }\n      }\n\n      return themeFound && strictFound;\n   }\n\n   /**\n    * Initialize `document.body` theme observation.\n    *\n    * @internal\n    */\n   static initialize()\n   {\n      if (this.#stores !== void 0) { return; }\n\n      const themeName = writable(this.#themeName);\n      const themeToken = writable(this.#themeToken);\n\n      this.#stores = Object.freeze({\n         themeName: Object.freeze({ subscribe: themeName.subscribe }),\n         themeToken: Object.freeze({ subscribe: themeToken.subscribe }),\n      });\n\n      this.#storeSet = {\n         themeName: themeName.set,\n         themeToken: themeToken.set,\n      };\n\n      // TODO More dynamic detection\n      const observer = new MutationObserver(() =>\n      {\n         if (document.body.classList.contains('theme-light'))\n         {\n            this.#themeName = 'light';\n            this.#themeToken = 'theme-light';\n         }\n         else if (document.body.classList.contains('theme-dark'))\n         {\n            this.#themeName = 'dark';\n            this.#themeToken = 'theme-dark';\n         }\n\n         this.#storeSet.themeName(this.#themeName);\n         this.#storeSet.themeToken(this.#themeToken);\n      });\n\n      // Only listen for class changes.\n      observer.observe(document.body, { attributes: true, attributeFilter: ['class'] });\n   }\n\n   /**\n    * Determine the nearest theme tokens (CSS classes) from the given element.\n    *\n    * @param {object} options - Required options.\n    *\n    * @param {Element | EventTarget} options.element - A DOM element.\n    *\n    * @param {Set<string>} [options.output] - An optional source Set of existing tokens.\n    *\n    * @param {boolean} [options.override=true] - When true, override any existing theme tokens.\n    *\n    * @param {boolean} [options.strict=false] - When true, ensure all required theming tokens in output.\n    *\n    * @returns {Iterable<string>} Any theming tokens found from the given element.\n    */\n   static nearestThemedTokens({ element, output = new Set(), override = true, strict = false })\n   {\n      if (!CrossWindow.isSet(output)) { throw new TypeError(`'output' is not a Set.`); }\n\n      if (!CrossWindow.isElement(element)) { return output; }\n\n      // When override is false and theme classes are already present in result return early.\n      if (!override && ThemeObserver.hasThemedTokens(output))\n      {\n         if (strict) { output.add('themed'); }\n\n         return output;\n      }\n\n      const nearestThemed = element.closest('.themed') ?? CrossWindow.getDocument(element).body;\n      const match = nearestThemed.className.match(/(?:^|\\s)(theme-\\w+)/);\n      if (match)\n      {\n         output.add('themed');\n         output.add(match[1]);\n      }\n\n      return output;\n   }\n}\n\nexport { ThemeObserver };\n//# sourceMappingURL=index.js.map\n","/**\n * Provides a basic test for a given variable to test if it has the shape of a readable store by having a `subscribe`\n * function.\n *\n * Note: functions are also objects, so test that the variable might be a function w/ a `subscribe` function.\n *\n * @param {*}  store - variable to test that might be a store.\n *\n * @returns {store is import('svelte/store').Readable<unknown>} Whether the variable tested has the shape of a store.\n */\nfunction isReadableStore(store)\n{\n   if (store === null || store === void 0) { return false; }\n\n   switch (typeof store)\n   {\n      case 'function':\n      case 'object':\n         return typeof store.subscribe === 'function';\n   }\n\n   return false;\n}\n\n/**\n * Provides a basic test for a given variable to test if it has the shape of a minimal writable store by having a\n * `subscribe` and `set` functions.\n *\n * Note: functions are also objects, so test that the variable might be a function w/ `subscribe` & `set` functions.\n *\n * @param {*}  store - variable to test that might be a store.\n *\n * @returns {store is import('./types').MinimalWritable<unknown>} Whether the variable tested has the shape of a\n *          {@link MinimalWritable} store.\n */\nfunction isMinimalWritableStore(store)\n{\n   if (store === null || store === void 0) { return false; }\n\n   switch (typeof store)\n   {\n      case 'function':\n      case 'object':\n         return typeof store.subscribe === 'function' && typeof store.set === 'function';\n   }\n\n   return false;\n}\n\n/**\n * Provides a basic test for a given variable to test if it has the shape of a writable store by having a `subscribe`\n * `set`, and `update` functions.\n *\n * Note: functions are also objects, so test that the variable might be a function w/ `subscribe`, `set, and `update`\n * functions.\n *\n * @param {*}  store - variable to test that might be a store.\n *\n * @returns {store is import('svelte/store').Writable<unknown>} Whether the variable tested has the shape of a writable\n *          store.\n */\nfunction isWritableStore(store)\n{\n   if (store === null || store === void 0) { return false; }\n\n   switch (typeof store)\n   {\n      case 'function':\n      case 'object':\n         return typeof store.subscribe === 'function' && typeof store.set === 'function' &&\n          typeof store.update === 'function';\n   }\n\n   return false;\n}\n\n/**\n * Subscribes to the given store with the update function provided and ignores the first automatic\n * update. All future updates are dispatched to the update function.\n *\n * @param {import('svelte/store').Readable | import('svelte/store').Writable} store -\n *  Store to subscribe to...\n *\n * @param {import('svelte/store').Updater} update - function to receive future updates.\n *\n * @returns {import('svelte/store').Unsubscriber} Store unsubscribe function.\n */\nfunction subscribeIgnoreFirst(store, update)\n{\n   let firedFirst = false;\n\n   return store.subscribe((value) =>\n   {\n      if (!firedFirst)\n      {\n         firedFirst = true;\n      }\n      else\n      {\n         update(value);\n      }\n   });\n}\n\n/**\n * Subscribes to the given store with two update functions provided. The first function is invoked on the initial\n * subscription. All future updates are dispatched to the update function.\n *\n * @param {import('svelte/store').Readable | import('svelte/store').Writable} store -\n *  Store to subscribe to...\n *\n * @param {import('svelte/store').Updater} first - Function to receive first update.\n *\n * @param {import('svelte/store').Updater} update - Function to receive future updates.\n *\n * @returns {import('svelte/store').Unsubscriber} Store unsubscribe function.\n */\nfunction subscribeFirstRest(store, first, update)\n{\n   let firedFirst = false;\n\n   return store.subscribe((value) =>\n   {\n      if (!firedFirst)\n      {\n         firedFirst = true;\n         first(value);\n      }\n      else\n      {\n         update(value);\n      }\n   });\n}\n\nexport { isMinimalWritableStore, isReadableStore, isWritableStore, subscribeFirstRest, subscribeIgnoreFirst };\n//# sourceMappingURL=index.js.map\n","import { subscribeIgnoreFirst } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { isIterable } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\n * Provides a Svelte 4 Readable store based Set implementation.\n *\n * Note: This implementation will be removed in transition to Svelte 5.\n */\nclass SvelteSet extends Set {\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    constructor(entries) {\n        super();\n        if (entries !== void 0 && !isIterable(entries)) {\n            throw new TypeError(`'entries' must be an iterable list.`);\n        }\n        if (entries) {\n            for (const entry of entries) {\n                super.add(entry);\n            }\n        }\n    }\n    /**\n     * Appends a new element with a specified value to the end of the Set.\n     *\n     * @param value - Value to add.\n     *\n     * @returns This instance.\n     */\n    add(value) {\n        const hasValue = super.has(value);\n        super.add(value);\n        if (!hasValue) {\n            this.#updateSubscribers();\n        }\n        return this;\n    }\n    /**\n     * Clears this set.\n     */\n    clear() {\n        if (this.size === 0) {\n            return;\n        }\n        super.clear();\n        this.#updateSubscribers();\n    }\n    /**\n     * Removes a specified value from the Set.\n     *\n     * @param value - Value to delete.\n     *\n     * @returns Returns true if an element in the Set existed and has been removed, or false if the element\n     *          does not exist.\n     */\n    delete(value) {\n        const result = super.delete(value);\n        if (result) {\n            this.#updateSubscribers();\n        }\n        return result;\n    }\n    // Store subscriber implementation --------------------------------------------------------------------------------\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((sub) => sub === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            handler(this);\n        }\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index >= 0) {\n                this.#subscribers.splice(index, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers.\n     */\n    #updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this);\n        }\n    }\n}\n\n/**\n * Provides a readonly variant of SvelteSet wrapping an instance of SvelteSet as the source.\n */\nclass ReadonlySvelteSet {\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     * The backing wrapped SvelteSet implementation.\n     */\n    #svelteSet;\n    /**\n     * Unsubscriber when subscribed to backing SvelteSet.\n     */\n    #unsubscribe;\n    /**\n     * Creates a readonly variant of SvelteSet.\n     *\n     * @param svelteSet - Backing wrapped SvelteSet implementation.\n     */\n    constructor(svelteSet) {\n        if (!(svelteSet instanceof SvelteSet)) {\n            throw new TypeError(`'svelteSet' is not an instance of SvelteSet.`);\n        }\n        this.#svelteSet = svelteSet;\n    }\n    /**\n     * Iterates over values in the set.\n     */\n    [Symbol.iterator]() {\n        return this.#svelteSet.values();\n    }\n    /**\n     * Returns the number of unique elements in this set.\n     */\n    get size() {\n        return this.#svelteSet.size;\n    }\n    /**\n     * Returns an iterable of [v,v] pairs for every value `v` in the set.\n     */\n    entries() {\n        return this.#svelteSet.entries();\n    }\n    /**\n     * Executes a provided function once for each value in this set, in insertion order.\n     *\n     * @param callbackfn - Callback function.\n     *\n     * @param thisArg - Optional this reference for callback function.\n     */\n    forEach(callbackfn, thisArg) {\n        for (const v of this.#svelteSet.values()) {\n            callbackfn.call(thisArg, v, v, this);\n        }\n    }\n    /**\n     * Returns a boolean indicating whether an element with the specified value exists in this set or not.\n     *\n     * @param value - Value to test.\n     */\n    has(value) {\n        return this.#svelteSet.has(value);\n    }\n    /**\n     * Despite its name, returns an iterable of the values in the set.\n     */\n    keys() {\n        return this.#svelteSet.keys();\n    }\n    /**\n     * Returns an iterable of values in the set.\n     */\n    values() {\n        return this.#svelteSet.values();\n    }\n    // Store subscriber implementation --------------------------------------------------------------------------------\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((sub) => sub === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            if (this.#subscribers.length === 1) {\n                this.#unsubscribe = subscribeIgnoreFirst(this.#svelteSet, this.#updateSubscribers.bind(this));\n            }\n            handler(this);\n        }\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index >= 0) {\n                this.#subscribers.splice(index, 1);\n                if (this.#subscribers.length === 0) {\n                    this.#unsubscribe?.();\n                    this.#unsubscribe = void 0;\n                }\n            }\n        };\n    }\n    /**\n     * Updates subscribers.\n     */\n    #updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this);\n        }\n    }\n}\n\nexport { ReadonlySvelteSet, SvelteSet };\n//# sourceMappingURL=index.js.map\n","import { writable, get } from 'svelte/store';\nimport { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\n\n/**\n * Generates derived, readable, writable helper functions wrapping the given Storage API provided with any additional\n * customization for data serialization. By default, JSON serialization is used.\n *\n * @param {object}   opts - Generator options.\n *\n * @param {Storage}  opts.storage - The web storage source.\n *\n * @param {(value: any, ...rest: any[]) => string}  [opts.serialize] - Replace with custom serialization;\n *        default: `JSON.stringify`.\n *\n * @param {(value: string, ...rest: any[]) => any}  [opts.deserialize] - Replace with custom deserialization;\n *        default: `JSON.parse`.\n *\n * @returns {StorageStores} A complete set of store helper functions and associated storage API instance and\n *          serialization strategy.\n */\nfunction storeGenerator({ storage, serialize = JSON.stringify, deserialize = JSON.parse }) {\n    function isSimpleDeriver(deriver) {\n        return deriver.length < 2;\n    }\n    function storageReadable(key, value, start) {\n        return {\n            subscribe: storageWritable(key, value, start).subscribe\n        };\n    }\n    function storageWritable(key, value, start) {\n        function wrap_start(ogSet) {\n            return start(function wrap_set(new_value) {\n                if (storage) {\n                    storage.setItem(key, serialize(new_value));\n                }\n                return ogSet(new_value);\n            }, function wrap_update(fn) {\n                set(fn(get(ogStore)));\n            });\n        }\n        if (storage) {\n            const storageValue = storage.getItem(key);\n            try {\n                if (storageValue) {\n                    value = deserialize(storageValue);\n                }\n            }\n            catch (err) { /**/ }\n            storage.setItem(key, serialize(value));\n        }\n        const ogStore = writable(value, start ? wrap_start : void 0);\n        function set(new_value) {\n            if (storage) {\n                storage.setItem(key, serialize(new_value));\n            }\n            ogStore.set(new_value);\n        }\n        function update(fn) {\n            set(fn(get(ogStore)));\n        }\n        function subscribe(run, invalidate) {\n            return ogStore.subscribe(run, invalidate);\n        }\n        return { set, update, subscribe };\n    }\n    function storageDerived(key, stores, fn, initial_value) {\n        const single = !Array.isArray(stores);\n        const stores_array = single ? [stores] : stores;\n        if (storage && storage.getItem(key)) {\n            try {\n                initial_value = deserialize(storage.getItem(key));\n            }\n            catch (err) { /**/ }\n        }\n        return storageReadable(key, initial_value, (set, update) => {\n            let inited = false;\n            const values = [];\n            let pending = 0;\n            let cleanup;\n            const sync = () => {\n                if (pending) {\n                    return;\n                }\n                cleanup?.();\n                const input = single ? values[0] : values;\n                if (isSimpleDeriver(fn)) {\n                    set(fn(input));\n                }\n                else {\n                    const result = fn(input, set, update);\n                    if (typeof result === 'function') {\n                        cleanup = result;\n                    }\n                }\n            };\n            const unsubscribers = stores_array.map((store, i) => store.subscribe((value) => {\n                values[i] = value;\n                pending &= ~(1 << i);\n                if (inited) {\n                    sync();\n                }\n            }, () => { pending |= (1 << i); }));\n            inited = true;\n            sync();\n            return function stop() {\n                // Equivalent to run_all from Svelte internals.\n                unsubscribers.forEach((unsubscriber) => unsubscriber());\n                cleanup?.();\n            };\n        });\n    }\n    return {\n        readable: storageReadable,\n        writable: storageWritable,\n        derived: storageDerived,\n        storage,\n        serialize,\n        deserialize\n    };\n}\n\n/**\n * Provides all Storage API enabled `localStorage` store helper functions. Data is serialized as JSON.\n */\nconst localStores = storeGenerator({ storage: globalThis?.localStorage });\n/**\n * Provides the Storage API enabled derived `localStorage` store helper function. Data is serialized as JSON.\n */\nlocalStores.derived;\n/**\n * Provides the Storage API enabled readable `localStorage` store helper function. Data is serialized as JSON.\n */\nlocalStores.readable;\n/**\n * Provides the Storage API enabled writable `localStorage` store helper function. Data is serialized as JSON.\n */\nlocalStores.writable;\n\n/**\n * Provides all Storage API enabled `sessionStorage` store helper functions. Data is serialized as JSON.\n */\nconst sessionStores = storeGenerator({ storage: globalThis?.sessionStorage });\n/**\n * Provides the Storage API enabled derived `sessionStorage` store helper function. Data is serialized as JSON.\n */\nsessionStores.derived;\n/**\n * Provides the Storage API enabled readable `sessionStorage` store helper function. Data is serialized as JSON.\n */\nsessionStores.readable;\n/**\n * Provides the Storage API enabled writable `sessionStorage` store helper function. Data is serialized as JSON.\n */\nsessionStores.writable;\n\n/**\r\n * Provides the base Storage API store manager. It is recommended to use {@link TJSLocalStorage} &\r\n * {@link TJSSessionStorage} for standard browser local and session storage use cases. TJSWebStorage exists\r\n * to provide additional customization options for custom Storage API compatible storage instances and custom\r\n * serialization configuration.\r\n *\r\n * @implements {import('./types').WebStorage}\r\n */\r\nclass TJSWebStorage\r\n{\r\n   /** @type {import('./').StorageStores} */\r\n   #storageStores;\r\n\r\n   /**\r\n    * @type {(Map<string, {\r\n    *    store: import('svelte/store').Writable,\r\n    *    deserialize?: (value: string, ...rest: any[]) => any,\r\n    *    serialize?: (value: any, ...rest: any[]) => string\r\n    * }>)}\r\n    */\r\n   #stores = new Map();\r\n\r\n   /**\r\n    * @param {import('./').StorageStores} storageStores - Provides a complete set of\r\n    *        storage API store helper functions and the associated storage API instance and serializations strategy.\r\n    */\r\n   constructor(storageStores)\r\n   {\r\n      this.#storageStores = storageStores;\r\n   }\r\n\r\n   /**\r\n    * Creates a new store for the given key.\r\n    *\r\n    * @template T\r\n    *\r\n    * @param {string}   key - Key to lookup in stores map.\r\n    *\r\n    * @param {T}        [defaultValue] - A default value to set for the store.\r\n    *\r\n    * @param {import('./').StorageStores} [storageStores] - Additional store creation options.\r\n    *\r\n    * @returns {import('svelte/store').Writable<T>} The new store.\r\n    */\r\n   #createStore(key, defaultValue = void 0, storageStores)\r\n   {\r\n      try\r\n      {\r\n         const value = this.#storageStores.storage.getItem(key);\r\n         if (value !== null)\r\n         {\r\n            const deserialize = storageStores?.deserialize ?? this.#storageStores.deserialize;\r\n            defaultValue = deserialize(value);\r\n         }\r\n      }\r\n      catch (err) { /**/ }\r\n\r\n      const writable = storageStores?.writable ?? this.#storageStores.writable;\r\n\r\n      return writable(key, defaultValue);\r\n   }\r\n\r\n   /**\r\n    * @param {string}   key - Storage key.\r\n    *\r\n    * @returns {(value: string, ...rest: any[]) => any} Deserialize function.\r\n    */\r\n   #getDeserialize(key)\r\n   {\r\n      return this.#stores.get(key)?.deserialize ?? this.#storageStores.deserialize;\r\n   }\r\n\r\n   /**\r\n    * @param {string}   key - Storage key.\r\n    *\r\n    * @returns {(value: any, ...rest: any[]) => string} Serialize function.\r\n    */\r\n   #getSerialize(key)\r\n   {\r\n      return this.#stores.get(key)?.serialize ?? this.#storageStores.serialize;\r\n   }\r\n\r\n   /**\r\n    * Gets a store from the `stores` Map or creates a new store for the key and a given default value.\r\n    *\r\n    * @template T\r\n    *\r\n    * @param {string}   key - Key to lookup in stores map.\r\n    *\r\n    * @param {T}        [defaultValue] - A default value to set for the store.\r\n    *\r\n    * @param {import('./').StorageStores} [storageStores] - Additional store creation options.\r\n    *\r\n    * @returns {import('svelte/store').Writable<T>} The store for the given key.\r\n    */\r\n   #getStore(key, defaultValue = void 0, storageStores)\r\n   {\r\n      const storeEntry = this.#stores.get(key);\r\n      if (storeEntry) { return storeEntry.store; }\r\n\r\n      const store = this.#createStore(key, defaultValue, storageStores);\r\n\r\n      // Set any key specific storage helper details.\r\n      this.#stores.set(key, {\r\n         store,\r\n         deserialize: storageStores?.deserialize,\r\n         serialize: storageStores?.serialize\r\n      });\r\n\r\n      return store;\r\n   }\r\n\r\n   /**\r\n    * Get value from the storage API.\r\n    *\r\n    * @param {string}   key - Key to lookup in storage API.\r\n    *\r\n    * @param {*}        [defaultValue] - A default value to return if key not present in session storage.\r\n    *\r\n    * @returns {*} Value from session storage or if not defined any default value provided.\r\n    */\r\n   getItem(key, defaultValue)\r\n   {\r\n      let value = defaultValue;\r\n\r\n      const storageValue = this.#storageStores.storage.getItem(key);\r\n\r\n      if (storageValue !== null)\r\n      {\r\n         try\r\n         {\r\n            value = this.#getDeserialize(key)(storageValue);\r\n         }\r\n         catch (err)\r\n         {\r\n            value = defaultValue;\r\n         }\r\n      }\r\n      else if (defaultValue !== void 0)\r\n      {\r\n         try\r\n         {\r\n            const newValue = this.#getSerialize(key)(defaultValue);\r\n\r\n            // If there is no existing storage value and defaultValue is defined the storage value needs to be set.\r\n            this.#storageStores.storage.setItem(key, newValue);\r\n         }\r\n         catch (err) { /* */ }\r\n      }\r\n\r\n      return value;\r\n   }\r\n\r\n   /**\r\n    * Returns the backing Svelte store for the given key; potentially sets a default value if the key\r\n    * is not already set.\r\n    *\r\n    * @template T\r\n    *\r\n    * @param {string}   key - Key to lookup in storage API.\r\n    *\r\n    * @param {T}        [defaultValue] - A default value to return if key not present in session storage.\r\n    *\r\n    * @param {import('./').StorageStores} [storageStores] - Additional store creation options.\r\n    *\r\n    * @returns {import('svelte/store').Writable<T>} The Svelte store for this key.\r\n    */\r\n   getStore(key, defaultValue, storageStores)\r\n   {\r\n      return this.#getStore(key, defaultValue, storageStores);\r\n   }\r\n\r\n   /**\r\n    * Returns whether a store has already been created for the given key.\r\n    *\r\n    * @param {string}   key - Key to lookup in storage API.\r\n    */\r\n   hasStore(key)\r\n   {\r\n      return this.#stores.has(key);\r\n   }\r\n\r\n   /**\r\n    * Sets the value for the given key in storage API.\r\n    *\r\n    * @param {string}   key - Key to lookup in storage API.\r\n    *\r\n    * @param {*}        value - A value to set for this key.\r\n    */\r\n   setItem(key, value)\r\n   {\r\n      const store = this.#getStore(key);\r\n      store.set(value);\r\n   }\r\n\r\n   /**\r\n    * Convenience method to swap a boolean value stored in storage API updating the associated store value.\r\n    *\r\n    * @param {string}   key - Key to lookup in storage API.\r\n    *\r\n    * @param {boolean}  [defaultValue] - A default value to return if key not present in session storage.\r\n    *\r\n    * @returns {boolean} The boolean swap for the given key.\r\n    */\r\n   swapItemBoolean(key, defaultValue)\r\n   {\r\n      const store = this.#getStore(key, defaultValue);\r\n\r\n      let currentValue = false;\r\n\r\n      try\r\n      {\r\n         currentValue = !!this.#getDeserialize(key)(this.#storageStores.storage.getItem(key));\r\n      }\r\n      catch (err) { /**/ }\r\n\r\n      const newValue = typeof currentValue === 'boolean' ? !currentValue : false;\r\n\r\n      store.set(newValue);\r\n      return newValue;\r\n   }\r\n\r\n   // Iterators ------------------------------------------------------------------------------------------------------\r\n\r\n   /**\r\n    * @template T\r\n    *\r\n    * Returns an iterable for the session storage keys and stores.\r\n    *\r\n    * @param {RegExp} [regex] - Optional regular expression to filter by storage keys.\r\n    *\r\n    * @returns {IterableIterator<[string, import('svelte/store').Writable<T>]>} Iterable iterator of keys and stores.\r\n    * @yields {import('svelte/store').Writable<[string, Writable<T>]>}\r\n    */\r\n   *entries(regex = void 0)\r\n   {\r\n      if (regex !== void 0 && !CrossWindow.isRegExp(regex)) { throw new TypeError(`'regex' is not a RegExp`); }\r\n\r\n      if (!this.#stores.size) { return void 0; }\r\n\r\n      if (regex)\r\n      {\r\n         for (const key of this.#stores.keys())\r\n         {\r\n            if (regex.test(key)) { yield [key, this.getStore(key)]; }\r\n         }\r\n      }\r\n      else\r\n      {\r\n         for (const key of this.#stores.keys()) { yield [key, this.getStore(key)]; }\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Returns an iterable for the session storage keys from existing stores.\r\n    *\r\n    * @param {RegExp} [regex] - Optional regular expression to filter by storage keys.\r\n    *\r\n    * @returns {IterableIterator<string>} Iterable iterator of session storage keys.\r\n    * @yields {string}\r\n    */\r\n   *keys(regex = void 0)\r\n   {\r\n      if (regex !== void 0 && !CrossWindow.isRegExp(regex)) { throw new TypeError(`'regex' is not a RegExp`); }\r\n\r\n      if (!this.#stores.size) { return void 0; }\r\n\r\n      if (regex)\r\n      {\r\n         for (const key of this.#stores.keys())\r\n         {\r\n            if (regex.test(key)) { yield key; }\r\n         }\r\n      }\r\n      else\r\n      {\r\n         for (const key of this.#stores.keys()) { yield key; }\r\n      }\r\n   }\r\n\r\n   /**\r\n    * @template T\r\n    *\r\n    * Returns an iterable for the session storage stores.\r\n    *\r\n    * @param {RegExp} [regex] - Optional regular expression to filter by storage keys.\r\n    *\r\n    * @returns {IterableIterator<import('svelte/store').Writable<T>>} Iterable iterator of stores.\r\n    * @yields {import('svelte/store').Writable<T>}\r\n    */\r\n   *stores(regex = void 0)\r\n   {\r\n      if (regex !== void 0 && !CrossWindow.isRegExp(regex)) { throw new TypeError(`'regex' is not a RegExp`); }\r\n\r\n      if (!this.#stores.size) { return void 0; }\r\n\r\n      if (regex)\r\n      {\r\n         for (const key of this.#stores.keys())\r\n         {\r\n            if (regex.test(key)) { yield this.getStore(key); }\r\n         }\r\n      }\r\n      else\r\n      {\r\n         for (const key of this.#stores.keys()) { yield this.getStore(key); }\r\n      }\r\n   }\r\n}\n\n/**\r\n * Provides a {@link TJSWebStorage} instance for standard browser local storage use cases.\r\n */\r\nclass TJSLocalStorage extends TJSWebStorage\r\n{\r\n   constructor()\r\n   {\r\n      super(localStores);\r\n   }\r\n}\n\n/**\r\n * Provides a {@link TJSWebStorage} instance for standard browser session storage use cases.\r\n */\r\nclass TJSSessionStorage extends TJSWebStorage\r\n{\r\n   constructor()\r\n   {\r\n      super(sessionStores);\r\n   }\r\n}\n\nexport { TJSLocalStorage, TJSSessionStorage, TJSWebStorage, localStores, sessionStores, storeGenerator };\n//# sourceMappingURL=index.js.map\n","import { derived, get } from 'svelte/store';\n\n/**\n * @external Store\n * @see [Svelte stores](https://svelte.dev/docs#component-format-script-4-prefix-stores-with-$-to-access-their-values-store-contract)\n */\n\n/**\n * Create a store similar to [Svelte's `derived`](https://svelte.dev/docs#run-time-svelte-store-writable),\n * but which has its own `set` and `update` methods and can send values back to the origin stores.\n * [Read more...](https://github.com/PixievoltNo1/svelte-writable-derived#default-export-writablederived)\n * \n * @param {Store|Store[]} origins One or more stores to derive from. Same as\n * [`derived`](https://svelte.dev/docs#run-time-svelte-store-writable)'s 1st parameter.\n * @param {!Function} derive The callback to determine the derived value. Same as\n * [`derived`](https://svelte.dev/docs#run-time-svelte-store-writable)'s 2nd parameter.\n * @param {!Function} reflect Called when the derived store gets a new value via its `set` or\n * `update` methods, and determines new values for the origin stores.\n * [Read more...](https://github.com/PixievoltNo1/svelte-writable-derived#new-parameter-reflect)\n * @param [initial] The new store's initial value. Same as\n * [`derived`](https://svelte.dev/docs#run-time-svelte-store-writable)'s 3rd parameter.\n * \n * @returns {Store} A writable store.\n */\nfunction writableDerived(origins, derive, reflect, initial) {\n\tvar childDerivedSetter, originValues, blockNextDerive = false;\n\tvar reflectOldValues = reflect.length >= 2;\n\tvar wrappedDerive = (got, set, update) => {\n\t\tchildDerivedSetter = set;\n\t\tif (reflectOldValues) {\n\t\t\toriginValues = got;\n\t\t}\n\t\tif (!blockNextDerive) {\n\t\t\tlet returned = derive(got, set, update);\n\t\t\tif (derive.length < 2) {\n\t\t\t\tset(returned);\n\t\t\t} else {\n\t\t\t\treturn returned;\n\t\t\t}\n\t\t}\n\t\tblockNextDerive = false;\n\t};\n\tvar childDerived = derived(origins, wrappedDerive, initial);\n\t\n\tvar singleOrigin = !Array.isArray(origins);\n\tfunction doReflect(reflecting) {\n\t\tvar setWith = reflect(reflecting, originValues);\n\t\tif (singleOrigin) {\n\t\t\tblockNextDerive = true;\n\t\t\torigins.set(setWith);\n\t\t} else {\n\t\t\tsetWith.forEach( (value, i) => {\n\t\t\t\tblockNextDerive = true;\n\t\t\t\torigins[i].set(value);\n\t\t\t} );\n\t\t}\n\t\tblockNextDerive = false;\n\t}\n\t\n\tvar tryingSet = false;\n\tfunction update(fn) {\n\t\tvar isUpdated, mutatedBySubscriptions, oldValue, newValue;\n\t\tif (tryingSet) {\n\t\t\tnewValue = fn( get(childDerived) );\n\t\t\tchildDerivedSetter(newValue);\n\t\t\treturn;\n\t\t}\n\t\tvar unsubscribe = childDerived.subscribe( (value) => {\n\t\t\tif (!tryingSet) {\n\t\t\t\toldValue = value;\n\t\t\t} else if (!isUpdated) {\n\t\t\t\tisUpdated = true;\n\t\t\t} else {\n\t\t\t\tmutatedBySubscriptions = true;\n\t\t\t}\n\t\t} );\n\t\tnewValue = fn(oldValue);\n\t\ttryingSet = true;\n\t\tchildDerivedSetter(newValue);\n\t\tunsubscribe();\n\t\ttryingSet = false;\n\t\tif (mutatedBySubscriptions) {\n\t\t\tnewValue = get(childDerived);\n\t\t}\n\t\tif (isUpdated) {\n\t\t\tdoReflect(newValue);\n\t\t}\n\t}\n\treturn {\n\t\tsubscribe: childDerived.subscribe,\n\t\tset(value) { update( () => value ); },\n\t\tupdate,\n\t};\n}\n\n/**\n * Create a store for a property value in an object contained in another store.\n * [Read more...](https://github.com/PixievoltNo1/svelte-writable-derived#named-export-propertystore)\n * \n * @param {Store} origin The store containing the object to get/set from.\n * @param {string|number|symbol|Array<string|number|symbol>} propName The property to get/set, or a path of\n * properties in nested objects.\n *\n * @returns {Store} A writable store.\n */\nfunction propertyStore(origin, propName) {\n\tif (!Array.isArray(propName)) {\n\t\treturn writableDerived(\n\t\t\torigin,\n\t\t\t(object) => object[propName],\n\t\t\t(reflecting, object) => {\n\t\t\t\tobject[propName] = reflecting;\n\t\t\t\treturn object;\n\t\t\t},\n\t\t);\n\t} else {\n\t\tlet props = propName.concat();\n\t\treturn writableDerived(\n\t\t\torigin,\n\t\t\t(value) => {\n\t\t\t\tfor (let i = 0; i < props.length; ++i) {\n\t\t\t\t\tvalue = value[ props[i] ];\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reflecting, object) => {\n\t\t\t\tlet target = object;\n\t\t\t\tfor (let i = 0; i < props.length - 1; ++i) {\n\t\t\t\t\ttarget = target[ props[i] ];\n\t\t\t\t}\n\t\t\t\ttarget[ props[props.length - 1] ] = reflecting;\n\t\t\t\treturn object;\n\t\t\t},\n\t\t);\n\t}\n}\n\nexport { propertyStore, writableDerived };\n//# sourceMappingURL=index.js.map\n","import { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { isObject } from '@typhonjs-fvtt/runtime/util/object';\nimport { group_outros, transition_out, check_outros } from 'svelte/internal';\n\n/**\n * Provides utilities to verify and parse {@link TJSSvelte.Config} configuration objects.\n */\nclass APIConfig {\n    constructor() { }\n    /**\n     * Validates `config` argument whether it is a valid {@link TJSSvelte.Config.Dynamic} or\n     * {@link TJSSvelte.Config.Standard} configuration object suitable for parsing by\n     * {@link TJSSvelte.API.Config.parseConfig}.\n     *\n     * @param config - The potential config object to validate.\n     *\n     * @param [options] - Options.\n     *\n     * @param [options.raiseException=false] - If validation fails raise an exception.\n     *\n     * @returns Is the config a valid TJSSvelte.Config.Dynamic or TJSSvelte.Config.Standard configuration object.\n     *\n     * @throws {TypeError}  Any validation error when `raiseException` is enabled.\n     */\n    static isConfig(config, { raiseException = false } = {}) {\n        if (!isObject(config)) {\n            if (raiseException) {\n                throw new TypeError(`TJSSvelte.config.isConfig error: 'config' is not an object.`);\n            }\n            return false;\n        }\n        if (!TJSSvelte.util.isComponent(config.class)) {\n            if (raiseException) {\n                throw new TypeError(`TJSSvelte.config.isConfig error: 'config.class' is not a Svelte component constructor.`);\n            }\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Validates `config` argument whether it is a valid {@link TJSSvelte.Config.Embed} configuration object\n     * suitable for directly mounting via the `<svelte:component>` directive.\n     *\n     * @param config - The potential config object to validate.\n     *\n     * @param [options] - Options.\n     *\n     * @param [options.raiseException=false] - If validation fails raise an exception.\n     *\n     * @returns Is the config a valid TJSSvelte.Config.Embed configuration object.\n     *\n     * @throws {TypeError}  Any validation error when `raiseException` is enabled.\n     */\n    static isConfigEmbed(config, { raiseException = false } = {}) {\n        if (!isObject(config)) {\n            if (raiseException) {\n                throw new TypeError(`TJSSvelte.config.isConfigEmbed error: 'config' is not an object.`);\n            }\n            return false;\n        }\n        if (!TJSSvelte.util.isComponent(config.class)) {\n            if (raiseException) {\n                throw new TypeError(`TJSSvelte.config.isConfigEmbed error: 'config.class' is not a Svelte component constructor.`);\n            }\n            return false;\n        }\n        if (config.props !== void 0 && !isObject(config.props)) {\n            if (raiseException) {\n                throw new TypeError(`TJSSvelte.config.isConfigEmbed error: 'config.props' is not an object.`);\n            }\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Parses a TyphonJS Svelte dynamic or standard config object ensuring that the class specified is a Svelte\n     * component, loads any dynamic defined `context` or `props` preparing the config object for loading into the\n     * Svelte component.\n     *\n     * @param config - Svelte config object.\n     *\n     * @param [options] - Options.\n     *\n     * @param [options.contextExternal] - When true any context data provided will be loaded into `#external`\n     *        context separating it from any internal context created by the component.\n     *\n     * @param [options.thisArg] - `This` reference to set for invoking any `context` or `props` defined as\n     *        functions for {@link Config.Dynamic} configuration objects.\n     *\n     * @returns The processed Svelte config object turned with parsed `props` & `context` converted into the format\n     *          supported by Svelte.\n     */\n    static parseConfig(config, { contextExternal = false, thisArg = void 0 } = {}) {\n        if (!isObject(config)) {\n            throw new TypeError(`TJSSvelte.config.parseConfig - 'config' is not an object:\\n${JSON.stringify(config)}.`);\n        }\n        if (!TJSSvelte.util.isComponent(config.class)) {\n            throw new TypeError(`TJSSvelte.config.parseConfig - 'class' is not a Svelte component constructor for config:\\n${JSON.stringify(config)}.`);\n        }\n        if (config.hydrate !== void 0 && typeof config.hydrate !== 'boolean') {\n            throw new TypeError(`TJSSvelte.config.parseConfig - 'hydrate' is not a boolean for config:\\n${JSON.stringify(config)}.`);\n        }\n        if (config.intro !== void 0 && typeof config.intro !== 'boolean') {\n            throw new TypeError(`TJSSvelte.config.parseConfig - 'intro' is not a boolean for config:\\n${JSON.stringify(config)}.`);\n        }\n        if (config.target !== void 0 && !CrossWindow.isElement(config.target) &&\n            !CrossWindow.isShadowRoot(config.target) && !CrossWindow.isDocumentFragment(config.target)) {\n            throw new TypeError(`TJSSvelte.config.parseConfig - 'target' is not a Element, ShadowRoot, or DocumentFragment for config:\\n${JSON.stringify(config)}.`);\n        }\n        if (config.anchor !== void 0 && !CrossWindow.isElement(config.anchor) &&\n            !CrossWindow.isShadowRoot(config.anchor) && !CrossWindow.isDocumentFragment(config.anchor)) {\n            throw new TypeError(`TJSSvelte.config.parseConfig - 'anchor' is not a string, Element for config:\\n${JSON.stringify(config)}.`);\n        }\n        if (config.context !== void 0 && typeof config.context !== 'function' && !isObject(config.context)) {\n            throw new TypeError(`TJSSvelte.config.parseConfig - 'context' is not a function or object for config:\\n${JSON.stringify(config)}.`);\n        }\n        const svelteConfig = { ...config };\n        let context = {};\n        // If a context callback function is provided then invoke it with `this` being the Foundry app.\n        // If an object is returned it adds the entries to external context.\n        if (typeof svelteConfig.context === 'function') {\n            const contextFunc = svelteConfig.context;\n            delete svelteConfig.context;\n            const result = contextFunc.call(thisArg);\n            if (isObject(result)) {\n                context = { ...result };\n            }\n            else {\n                throw new Error(`TJSSvelte.config.parseConfig - 'context' is a function that did not return an object for config:\\n${JSON.stringify(config)}`);\n            }\n        }\n        else if (isObject(svelteConfig.context)) {\n            context = svelteConfig.context;\n            delete svelteConfig.context;\n        }\n        // If a props is a function then invoke it with `this` being the Foundry app.\n        // If an object is returned set it as the props.\n        svelteConfig.props = this.#processProps(svelteConfig.props, thisArg, config);\n        if (contextExternal) {\n            svelteConfig.context = new Map();\n            svelteConfig.context.set('#external', context);\n        }\n        else {\n            svelteConfig.context = new Map(Object.entries(context));\n        }\n        return svelteConfig;\n    }\n    // Internal implementation ----------------------------------------------------------------------------------------\n    /**\n     * Processes Svelte props. Potentially props can be a function to invoke with `thisArg`.\n     *\n     * @param props - Svelte props.\n     *\n     * @param thisArg - `This` reference to set for invoking any props function.\n     *\n     * @param config - Svelte config\n     *\n     * @returns Svelte props.\n     */\n    static #processProps(props, thisArg, config) {\n        // If a props is a function then invoke it with `this` being the Foundry app.\n        // If an object is returned set it as the props.\n        if (typeof props === 'function') {\n            const result = props.call(thisArg);\n            if (isObject(result)) {\n                return result;\n            }\n            else {\n                throw new Error(`TJSSvelte.config.parseConfig - 'props' is a function that did not return an object for config:\\n${JSON.stringify(config)}`);\n            }\n        }\n        else if (isObject(props)) {\n            return props;\n        }\n        else if (props !== void 0) {\n            throw new Error(`TJSSvelte.config.parseConfig - 'props' is not a function or an object for config:\\n${JSON.stringify(config)}`);\n        }\n        return {};\n    }\n}\nObject.seal(APIConfig);\n\n// @ts-ignore\n/**\n * Various utilities to duck type / detect Svelte components and run outro transition while destroying a component\n * externally.\n */\nclass APIUtil {\n    constructor() { }\n    /**\n     * Provides basic duck typing to determine if the provided function is a constructor function for a Svelte\n     * component.\n     *\n     * @param comp - Data to check as a Svelte component.\n     *\n     * @returns Whether basic duck typing succeeds.\n     */\n    static isComponent(comp) {\n        if (comp === null || comp === void 0 || typeof comp !== 'function') {\n            return false;\n        }\n        // When using Vite in a developer build the SvelteComponent is wrapped in a ProxyComponent class.\n        // This class doesn't define methods on the prototype, so we must check if the constructor name\n        // starts with `Proxy<` as it provides the wrapped component as `Proxy<_wrapped component name_>`.\n        const prototypeName = comp?.prototype?.constructor?.name;\n        if (typeof prototypeName === 'string' && (prototypeName.startsWith('Proxy<') ||\n            prototypeName === 'ProxyComponent')) {\n            return true;\n        }\n        return typeof window !== 'undefined' ?\n            typeof comp?.prototype?.$destroy === 'function' && typeof comp?.prototype?.$on === 'function' : // client-side\n            typeof comp?.prototype?.render === 'function'; // server-side\n    }\n    /**\n     * Provides basic duck typing to determine if the provided object is a HMR ProxyComponent instance or class.\n     *\n     * @param {unknown}  comp - Data to check as a HMR proxy component.\n     *\n     * @returns {boolean} Whether basic duck typing succeeds.\n     */\n    static isHMRProxy(comp) {\n        const instanceName = comp?.constructor?.name;\n        if (typeof instanceName === 'string' && (instanceName.startsWith('Proxy<') || instanceName === 'ProxyComponent')) {\n            return true;\n        }\n        // @ts-ignore\n        const prototypeName = comp?.prototype?.constructor?.name;\n        return typeof prototypeName === 'string' && (prototypeName.startsWith('Proxy<') ||\n            prototypeName === 'ProxyComponent');\n    }\n    /**\n     * Runs outro transition then destroys Svelte component.\n     *\n     * Workaround for https://github.com/sveltejs/svelte/issues/4056\n     *\n     * @param instance - A Svelte component.\n     *\n     * @returns Promise returned after outro transition completed and component destroyed.\n     */\n    static async outroAndDestroy(instance) {\n        if (instance === void 0 || instance === null) {\n            return Promise.resolve();\n        }\n        return new Promise((resolve) => {\n            if (instance?.$$?.fragment && instance?.$$?.fragment?.o) {\n                group_outros();\n                transition_out(instance.$$.fragment, 0, 0, () => {\n                    instance?.$destroy?.();\n                    resolve();\n                });\n                check_outros();\n            }\n            else {\n                instance?.$destroy?.();\n                resolve();\n            }\n        });\n    }\n}\nObject.seal(APIUtil);\n\n/**\n * Provides utilities to verify and parse {@link TJSSvelte.Config} configuration objects and general verification of\n * Svelte components.\n */\nclass TJSSvelte {\n    constructor() { }\n    static get config() { return APIConfig; }\n    /**\n     * @returns The utility API.\n     */\n    static get util() { return APIUtil; }\n}\nObject.seal(TJSSvelte);\n\nexport { TJSSvelte };\n//# sourceMappingURL=index.js.map\n","const semver = /^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i;\nconst validateAndParse = (version) => {\n    if (typeof version !== 'string') {\n        throw new TypeError('Invalid argument expected string');\n    }\n    const match = version.match(semver);\n    if (!match) {\n        throw new Error(`Invalid argument not valid semver ('${version}' received)`);\n    }\n    match.shift();\n    return match;\n};\nconst isWildcard = (s) => s === '*' || s === 'x' || s === 'X';\nconst tryParse = (v) => {\n    const n = parseInt(v, 10);\n    return isNaN(n) ? v : n;\n};\nconst forceType = (a, b) => typeof a !== typeof b ? [String(a), String(b)] : [a, b];\nconst compareStrings = (a, b) => {\n    if (isWildcard(a) || isWildcard(b))\n        return 0;\n    const [ap, bp] = forceType(tryParse(a), tryParse(b));\n    if (ap > bp)\n        return 1;\n    if (ap < bp)\n        return -1;\n    return 0;\n};\nconst compareSegments = (a, b) => {\n    for (let i = 0; i < Math.max(a.length, b.length); i++) {\n        const r = compareStrings(a[i] || '0', b[i] || '0');\n        if (r !== 0)\n            return r;\n    }\n    return 0;\n};\n\n/**\n * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.\n * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.\n * @param v1 - First version to compare\n * @param v2 - Second version to compare\n * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).\n */\nconst compareVersions = (v1, v2) => {\n    // validate input and split into segments\n    const n1 = validateAndParse(v1);\n    const n2 = validateAndParse(v2);\n    // pop off the patch\n    const p1 = n1.pop();\n    const p2 = n2.pop();\n    // validate numbers\n    const r = compareSegments(n1, n2);\n    if (r !== 0)\n        return r;\n    // validate pre-release\n    if (p1 && p2) {\n        return compareSegments(p1.split('.'), p2.split('.'));\n    }\n    else if (p1 || p2) {\n        return p1 ? -1 : 1;\n    }\n    return 0;\n};\n\n/**\n * Compare [semver](https://semver.org/) version strings using the specified operator.\n *\n * @param v1 First version to compare\n * @param v2 Second version to compare\n * @param operator Allowed arithmetic operator to use\n * @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.\n *\n * @example\n * ```\n * compare('10.1.8', '10.0.4', '>'); // return true\n * compare('10.0.1', '10.0.1', '='); // return true\n * compare('10.1.1', '10.2.2', '<'); // return true\n * compare('10.1.1', '10.2.2', '<='); // return true\n * compare('10.1.1', '10.2.2', '>='); // return false\n * ```\n */\nconst compare = (v1, v2, operator) => {\n    // validate input operator\n    assertValidOperator(operator);\n    // since result of compareVersions can only be -1 or 0 or 1\n    // a simple map can be used to replace switch\n    const res = compareVersions(v1, v2);\n    return operatorResMap[operator].includes(res);\n};\nconst operatorResMap = {\n    '>': [1],\n    '>=': [0, 1],\n    '=': [0],\n    '<=': [-1, 0],\n    '<': [-1],\n    '!=': [-1, 1],\n};\nconst allowedOperators = Object.keys(operatorResMap);\nconst assertValidOperator = (op) => {\n    if (typeof op !== 'string') {\n        throw new TypeError(`Invalid operator type, expected string but got ${typeof op}`);\n    }\n    if (allowedOperators.indexOf(op) === -1) {\n        throw new Error(`Invalid operator, expected one of ${allowedOperators.join('|')}`);\n    }\n};\n\n/**\n * Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.\n *\n * @param version Version number to match\n * @param range Range pattern for version\n * @returns `true` if the version number is within the range, `false` otherwise.\n *\n * @example\n * ```\n * satisfies('1.1.0', '^1.0.0'); // return true\n * satisfies('1.1.0', '~1.0.0'); // return false\n * ```\n */\nconst satisfies = (version, range) => {\n    // clean input\n    range = range.replace(/([><=]+)\\s+/g, '$1');\n    // handle multiple comparators\n    if (range.includes('||')) {\n        return range.split('||').some((r) => satisfies(version, r));\n    }\n    else if (range.includes(' - ')) {\n        const [a, b] = range.split(' - ', 2);\n        return satisfies(version, `>=${a} <=${b}`);\n    }\n    else if (range.includes(' ')) {\n        return range\n            .trim()\n            .replace(/\\s{2,}/g, ' ')\n            .split(' ')\n            .every((r) => satisfies(version, r));\n    }\n    // if no range operator then \"=\"\n    const m = range.match(/^([<>=~^]+)/);\n    const op = m ? m[1] : '=';\n    // if gt/lt/eq then operator compare\n    if (op !== '^' && op !== '~')\n        return compare(version, range, op);\n    // else range of either \"~\" or \"^\" is assumed\n    const [v1, v2, v3, , vp] = validateAndParse(version);\n    const [r1, r2, r3, , rp] = validateAndParse(range);\n    const v = [v1, v2, v3];\n    const r = [r1, r2 !== null && r2 !== void 0 ? r2 : 'x', r3 !== null && r3 !== void 0 ? r3 : 'x'];\n    // validate pre-release\n    if (rp) {\n        if (!vp)\n            return false;\n        if (compareSegments(v, r) !== 0)\n            return false;\n        if (compareSegments(vp.split('.'), rp.split('.')) === -1)\n            return false;\n    }\n    // first non-zero number\n    const nonZero = r.findIndex((v) => v !== '0') + 1;\n    // pointer to where segments can be >=\n    const i = op === '~' ? 2 : nonZero > 1 ? nonZero : 1;\n    // before pointer must be equal\n    if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0)\n        return false;\n    // after pointer must be >=\n    if (compareSegments(v.slice(i), r.slice(i)) === -1)\n        return false;\n    return true;\n};\n\n/**\n * Validate [semver](https://semver.org/) version strings.\n *\n * @param version Version number to validate\n * @returns `true` if the version number is a valid semver version number, `false` otherwise.\n *\n * @example\n * ```\n * validate('1.0.0-rc.1'); // return true\n * validate('1.0-rc.1'); // return false\n * validate('foo'); // return false\n * ```\n */\nconst validate = (version) => typeof version === 'string' && /^[v\\d]/.test(version) && semver.test(version);\n/**\n * Validate [semver](https://semver.org/) version strings strictly. Will not accept wildcards and version ranges.\n *\n * @param version Version number to validate\n * @returns `true` if the version number is a valid semver version number `false` otherwise\n *\n * @example\n * ```\n * validate('1.0.0-rc.1'); // return true\n * validate('1.0-rc.1'); // return false\n * validate('foo'); // return false\n * ```\n */\nconst validateStrict = (version) => typeof version === 'string' &&\n    /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/.test(version);\n\nexport { compare, compareVersions, satisfies, validate, validateStrict };\n//# sourceMappingURL=index.js.map\n","import { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { isObject, isIterable } from '@typhonjs-fvtt/runtime/util/object';\nimport { validateStrict, compare, satisfies } from '@typhonjs-fvtt/runtime/util/semver';\n\n/**\n * Provides resources for parsing style strings.\n */\nclass StyleParse {\n    static #regexPixels = /(\\d+)\\s*px/;\n    /**\n     * @private\n     */\n    constructor() {\n        throw new Error('StyleParse constructor: This is a static class and should not be constructed.');\n    }\n    /**\n     * Parse a CSS declaration block / {@link CSSDeclarationBlock} (IE `color: red; font-size: 14px;`) into an object of\n     * property / value pairs.\n     *\n     * This implementation is optimized for parsing the output of `CSSStyleRule.style.cssText`, which is always\n     * well-formed according to the CSSOM spec. It is designed to be:\n     * ```\n     * - **Fast**: minimal allocations, no regex in the hot loop.\n     * - **Accurate**: ignores `;` inside quotes or parentheses.\n     * - **Flexible**: supports optional camel case conversion.\n     * - **CSS variable safe**: leaves `--*` properties untouched.\n     *```\n     *\n     * @param cssText - A valid CSS declaration block (no selectors).\n     *\n     * @param [options] - Optional parser settings.\n     *\n     * @param [options.camelCase=false] - Convert hyphen-case property names to camel case.\n     *\n     * @returns An object mapping property names to their CSS values.\n     */\n    static cssText(cssText, { camelCase = false } = {}) {\n        // Reject non-strings or empty input quickly.\n        if (typeof cssText !== 'string' || cssText.length === 0) {\n            return {};\n        }\n        // Quick reject: if there's no `:` there are no declarations.\n        if (cssText.indexOf(':') === -1) {\n            return {};\n        }\n        const out = {};\n        // Index where the current declaration starts.\n        let segStart = 0;\n        // Tracks whether we are inside parentheses (url(), calc(), var(), etc.).\n        let parens = 0;\n        // Tracks whether we are inside single or double quotes.\n        let inSQ = false;\n        let inDQ = false;\n        // Walk through every character in the string.\n        for (let i = 0; i < cssText.length; i++) {\n            const ch = cssText[i];\n            if (ch === '\"' && !inSQ) {\n                // Toggle double-quote mode if not in single quotes.\n                inDQ = !inDQ;\n            }\n            else if (ch === '\\'' && !inDQ) {\n                // Toggle single-quote mode if not in double quotes.\n                inSQ = !inSQ;\n            }\n            else if (!inSQ && !inDQ) {\n                // Only count parentheses when outside of quotes.\n                if (ch === '(') {\n                    parens++;\n                }\n                else if (ch === ')') {\n                    if (parens > 0) {\n                        parens--;\n                    }\n                }\n                // Only treat `;` as a declaration terminator if not inside parentheses.\n                else if (ch === ';' && parens === 0) {\n                    // Extract the substring for this declaration.\n                    if (i > segStart) {\n                        const chunk = cssText.slice(segStart, i).trim();\n                        if (chunk) {\n                            this.#cssTextFlushDecl(chunk, out, camelCase);\n                        }\n                    }\n                    // Move start index to the character after the semicolon.\n                    segStart = i + 1;\n                }\n            }\n        }\n        // Process the last declaration after the loop ends.\n        if (segStart < cssText.length) {\n            const chunk = cssText.slice(segStart).trim();\n            if (chunk) {\n                this.#cssTextFlushDecl(chunk, out, camelCase);\n            }\n        }\n        return out;\n    }\n    /**\n     * Parses a pixel string / computed styles. Ex. `100px` returns `100`.\n     *\n     * @param   value - Value to parse.\n     *\n     * @returns The integer component of a pixel string.\n     */\n    static pixels(value) {\n        if (typeof value !== 'string') {\n            return void 0;\n        }\n        const isPixels = this.#regexPixels.test(value);\n        const number = parseInt(value);\n        return isPixels && Number.isFinite(number) ? number : void 0;\n    }\n    /**\n     * Returns the pixel value for `1rem` based on the root document element. You may apply an optional multiplier.\n     *\n     * @param [multiplier=1] - Optional multiplier to apply to `rem` pixel value; default: 1.\n     *\n     * @param [options] - Optional parameters.\n     *\n     * @param [options.targetDocument=document] The target DOM {@link Document} if different from the main\n     *        browser global `document`.\n     *\n     * @returns The pixel value for `1rem` with or without a multiplier based on the root document element.\n     */\n    static remPixels(multiplier = 1, { targetDocument = window.document } = {}) {\n        return targetDocument?.documentElement ?\n            multiplier * parseFloat(window.getComputedStyle(targetDocument.documentElement).fontSize) : void 0;\n    }\n    /**\n     * Split a CSS selector list into individual selectors, honoring commas that appear only at the top level\n     * (IE not inside (), [], or quotes). Additional options provide inclusion / exclusion filtering of selector parts.\n     *\n     * Examples:\n     *   '.a, .b'                                  → ['.a', '.b']\n     *   ':is(.a, .b):not([data-x=\",\"]) .c, .d'    → [':is(.a, .b):not([data-x=\",\"]) .c', '.d']\n     *\n     * @param selectorText - `CSSStyleRule.selectorText` to parse.\n     *\n     * @param [options] - Optional filtering options.\n     *\n     * @param [options.excludeSelectorParts] - An array of RegExp instances to filter by exclusion.\n     *\n     * @param [options.includeSelectorPartSet] - A Set of strings to filter by inclusion.\n     *\n     * @returns Array of trimmed selector strings w/ optional filtering of parts.\n     */\n    static selectorText(selectorText, { excludeSelectorParts, includeSelectorPartSet } = {}) {\n        const parts = [];\n        if (typeof selectorText !== 'string' || selectorText.length === 0) {\n            return parts;\n        }\n        const hasExclude = Array.isArray(excludeSelectorParts) && excludeSelectorParts.length > 0;\n        const hasInclude = CrossWindow.isSet(includeSelectorPartSet) && includeSelectorPartSet.size > 0;\n        let start = 0;\n        let inSQ = false; // '\n        let inDQ = false; // \"\n        let paren = 0; // ()\n        let bracket = 0; // []\n        for (let i = 0; i < selectorText.length; i++) {\n            const ch = selectorText[i];\n            // Toggle quote states; don’t nest the other quote type.\n            if (ch === '\"' && !inSQ) {\n                inDQ = !inDQ;\n                continue;\n            }\n            if (ch === '\\'' && !inDQ) {\n                inSQ = !inSQ;\n                continue;\n            }\n            if (inSQ || inDQ) {\n                continue;\n            }\n            // Only track bracket / paren nesting outside quotes.\n            if (ch === '(') {\n                paren++;\n                continue;\n            }\n            if (ch === ')') {\n                if (paren > 0) {\n                    paren--;\n                }\n                continue;\n            }\n            if (ch === '[') {\n                bracket++;\n                continue;\n            }\n            if (ch === ']') {\n                if (bracket > 0) {\n                    bracket--;\n                }\n                continue;\n            }\n            // Top-level comma separates selectors.\n            if (ch === ',' && paren === 0 && bracket === 0) {\n                const piece = selectorText.slice(start, i).trim();\n                if (piece && (!hasInclude || includeSelectorPartSet.has(piece)) &&\n                    (!hasExclude || !excludeSelectorParts.some((rx) => rx.test(piece)))) {\n                    parts.push(piece);\n                }\n                start = i + 1;\n            }\n        }\n        // Final segment.\n        const last = selectorText.slice(start).trim();\n        if (last && (!hasInclude || includeSelectorPartSet.has(last)) &&\n            (!hasExclude || !excludeSelectorParts.some((rx) => rx.test(last)))) {\n            parts.push(last);\n        }\n        return parts;\n    }\n    // Internal Implementation ----------------------------------------------------------------------------------------\n    /**\n     * Parse a single CSS declaration string into a property / value pair and store it in the output object.\n     *\n     * Note: Used by {@link StyleParse.cssText}.\n     *\n     * This method:\n     * ```\n     * - Splits on the first `:` into property and value parts\n     * - Trims whitespace from both\n     * - Optionally converts hyphen-case to camelCase\n     * - Ignores empty or malformed declarations\n     * ```\n     *\n     * @param chunk - The raw CSS declaration string (IE `\"color: red\"`).\n     *\n     * @param out - The object to store the parsed property / value pair.\n     *\n     * @param camelCase - Whether to convert hyphen-case keys to camel case.\n     */\n    static #cssTextFlushDecl(chunk, out, camelCase) {\n        // Find the first colon — separates property from value.\n        const idx = chunk.indexOf(':');\n        if (idx < 0) {\n            return;\n        }\n        // Extract and trim the property name.\n        let key = chunk.slice(0, idx).trim();\n        if (!key) {\n            return;\n        }\n        // Extract and trim the value (keep empty string if explicitly set).\n        const value = chunk.slice(idx + 1).trim();\n        // Convert to camelCase if requested and not a CSS variable.\n        if (camelCase && !key.startsWith('--')) {\n            let s = '';\n            for (let i = 0; i < key.length; i++) {\n                const code = key.charCodeAt(i);\n                if (code === 45 /* '-' */ && i + 1 < key.length) {\n                    i++;\n                    s += key[i].toUpperCase();\n                }\n                else {\n                    s += key[i];\n                }\n            }\n            key = s;\n        }\n        // Store in the output object.\n        out[key] = value;\n    }\n}\n\n/**\n * Provides the ability to `get` and `set` bulk or single CSS properties to a specific {@link CSSStyleRule}.\n */\nclass RuleManager {\n    /**\n     * The specific rule instance in the association HTMLStyleElement.\n     */\n    #cssRule;\n    /**\n     * The CSS selector for this rule manager.\n     */\n    #selector;\n    /**\n     * The name that this rule manager is indexed by in the associated `StyleManager` instance.\n     */\n    #name;\n    /**\n     * @param   cssRule -\n     *\n     * @param   name -\n     *\n     * @param   selector -\n     */\n    constructor(cssRule, name, selector) {\n        if (!CrossWindow.isCSSStyleRule(cssRule)) {\n            throw new TypeError(`RuleManager error: 'cssRule' is not a CSSStyleRule instance..`);\n        }\n        if (typeof name !== 'string') {\n            throw new TypeError(`RuleManager error: 'name' is not a string.`);\n        }\n        if (typeof selector !== 'string') {\n            throw new TypeError(`RuleManager error: 'selector' is not a string.`);\n        }\n        this.#cssRule = cssRule;\n        this.#name = name;\n        this.#selector = selector;\n    }\n    // Accessors ------------------------------------------------------------------------------------------------------\n    /**\n     * @returns Provides an accessor to get the `cssText` for the style rule or undefined if not connected.\n     */\n    get cssText() {\n        return this.isConnected ? this.#cssRule.style.cssText : void 0;\n    }\n    /**\n     * Determines if this RuleManager is still connected / available.\n     *\n     * @returns Is RuleManager connected.\n     */\n    get isConnected() {\n        const sheet = this.#cssRule?.parentStyleSheet;\n        const owner = sheet?.ownerNode;\n        return !!(sheet && owner && owner.isConnected);\n    }\n    /**\n     * @returns Name of this RuleManager indexed by associated StyleManager.\n     */\n    get name() {\n        return this.#name;\n    }\n    /**\n     * @returns The associated selector for this CSS rule.\n     */\n    get selector() {\n        return this.#selector;\n    }\n    /**\n     * @param   cssText - Provides an accessor to set the `cssText` for the style rule.\n     */\n    set cssText(cssText) {\n        if (!this.isConnected) {\n            return;\n        }\n        this.#cssRule.style.cssText = typeof cssText === 'string' ? cssText : '';\n    }\n    // Iterator -------------------------------------------------------------------------------------------------------\n    /**\n     * Allows usage in `for of` loops directly.\n     *\n     * @returns Entries Map iterator.\n     */\n    [Symbol.iterator]() {\n        return this.entries();\n    }\n    // Methods --------------------------------------------------------------------------------------------------------\n    /**\n     * @returns Iterator of CSS property entries in hyphen-case.\n     */\n    entries() {\n        return Object.entries(this.get() ?? {})[Symbol.iterator]();\n    }\n    /**\n     * Retrieves an object with the current CSS rule data.\n     *\n     * @param [options] - Optional settings.\n     *\n     * @param [options.camelCase=false] - Whether to convert property names to camel case.\n     *\n     * @returns Current CSS style data or undefined if not connected.\n     */\n    get(options = {}) {\n        return this.isConnected ? StyleParse.cssText(this.#cssRule.style.cssText, options) : void 0;\n    }\n    /**\n     * Gets a particular CSS property value.\n     *\n     * @param key - CSS property key; must be in hyphen-case (IE `background-color`).\n     *\n     * @returns Returns CSS property value or undefined if non-existent.\n     */\n    getProperty(key) {\n        if (!this.isConnected) {\n            return void 0;\n        }\n        if (typeof key !== 'string') {\n            throw new TypeError(`RuleManager error: 'key' is not a string.`);\n        }\n        const result = this.#cssRule.style.getPropertyValue(key);\n        return result !== '' ? result : void 0;\n    }\n    /**\n     * Returns whether this CSS rule manager has a given property key.\n     *\n     * @param key - CSS property key; must be in hyphen-case (IE `background-color`).\n     *\n     * @returns Property key exists / is defined.\n     */\n    hasProperty(key) {\n        if (!this.isConnected) {\n            return false;\n        }\n        if (typeof key !== 'string') {\n            throw new TypeError(`RuleManager error: 'key' is not a string.`);\n        }\n        return this.#cssRule.style.getPropertyValue(key) !== '';\n    }\n    /**\n     * @returns Iterator of CSS property keys in hyphen-case.\n     */\n    keys() {\n        return Object.keys(this.get() ?? {})[Symbol.iterator]();\n    }\n    /**\n     * Set CSS properties in bulk by property / value. Must use hyphen-case.\n     *\n     * @param styles - CSS styles object.\n     *\n     * @param [options] - Options.\n     *\n     * @param [override=true] - When true overrides any existing values; default: `true`.\n     */\n    setProperties(styles, { override = true } = {}) {\n        if (!this.isConnected) {\n            return;\n        }\n        if (!isObject(styles)) {\n            throw new TypeError(`RuleManager error: 'styles' is not an object.`);\n        }\n        if (typeof override !== 'boolean') {\n            throw new TypeError(`RuleManager error: 'override' is not a boolean.`);\n        }\n        if (override) {\n            for (const [key, value] of Object.entries(styles)) {\n                this.#cssRule.style.setProperty(key, value);\n            }\n        }\n        else {\n            // Only set property keys for entries that don't have an existing rule set.\n            for (const [key, value] of Object.entries(styles)) {\n                if (this.#cssRule.style.getPropertyValue(key) === '') {\n                    this.#cssRule.style.setProperty(key, value);\n                }\n            }\n        }\n    }\n    /**\n     * Sets a particular property.\n     *\n     * @param key - CSS property key; must be in hyphen-case (IE `background-color`).\n     *\n     * @param value - CSS property value.\n     *\n     * @param [options] - Options.\n     *\n     * @param [options.override=true] - When true overrides any existing value; default: `true`.\n     */\n    setProperty(key, value, { override = true } = {}) {\n        if (!this.isConnected) {\n            return;\n        }\n        if (typeof key !== 'string') {\n            throw new TypeError(`RuleManager error: 'key' is not a string.`);\n        }\n        if (typeof value !== 'string') {\n            throw new TypeError(`RuleManager error: 'value' is not a string.`);\n        }\n        if (typeof override !== 'boolean') {\n            throw new TypeError(`RuleManager error: 'override' is not a boolean.`);\n        }\n        if (override) {\n            this.#cssRule.style.setProperty(key, value);\n        }\n        else {\n            if (this.#cssRule.style.getPropertyValue(key) === '') {\n                this.#cssRule.style.setProperty(key, value);\n            }\n        }\n    }\n    /**\n     * Removes the property keys specified. If `keys` is an iterable list then all property keys in the list are\n     * removed. The keys must be in hyphen-case (IE `background-color`).\n     *\n     * @param keys - The property keys to remove.\n     */\n    removeProperties(keys) {\n        if (!this.isConnected) {\n            return;\n        }\n        if (!isIterable(keys)) {\n            throw new TypeError(`RuleManager error: 'keys' is not an iterable list.`);\n        }\n        for (const key of keys) {\n            if (typeof key === 'string') {\n                this.#cssRule.style.removeProperty(key);\n            }\n        }\n    }\n    /**\n     * Removes a particular CSS property.\n     *\n     * @param key - CSS property key; must be in hyphen-case (IE `background-color`).\n     *\n     * @returns CSS value when removed or undefined if non-existent.\n     */\n    removeProperty(key) {\n        if (!this.isConnected) {\n            return void 0;\n        }\n        if (typeof key !== 'string') {\n            throw new TypeError(`RuleManager error: 'key' is not a string.`);\n        }\n        const result = this.#cssRule.style.removeProperty(key);\n        return result !== '' ? result : void 0;\n    }\n}\n\n/**\n * Provides a managed dynamic style sheet / element useful in configuring global CSS variables. When creating an\n * instance of StyleManager, you must provide a CSS ID for the style element.\n *\n * Instances of StyleManager must be versioned by supplying a semver version string via the 'version' option. This\n * version is assigned to the associated style element. When a StyleManager instance is created and there is an\n * existing instance with a version that is lower than the current new instance, all CSS rules are removed, letting\n * the higher version take precedence. This isn't a perfect system and requires thoughtful construction of CSS\n * variables exposed, but allows multiple independently compiled TRL packages to load the latest CSS variables..\n */\nclass StyleManager {\n    /**\n     * Provides a token allowing internal instance construction.\n     */\n    static #CTOR_TOKEN = Symbol('StyleManager.CTOR_TOKEN');\n    /**\n     * Stores configured RuleManager instance by name.\n     */\n    #cssRuleMap;\n    /**\n     * CSS ID associated with style element.\n     */\n    #id;\n    /**\n     * Any associated CSS layer name.\n     */\n    #layerName;\n    /**\n     * The target style element.\n     */\n    #styleElement;\n    /**\n     * The version of this style manager.\n     */\n    #version;\n    /**\n     * @private\n     */\n    constructor({ cssRuleMap, id, styleElement, version, layerName, token }) {\n        if (token !== StyleManager.#CTOR_TOKEN) {\n            throw new Error('StyleManager constructor: Please use the static `create` or `connect` methods.');\n        }\n        this.#cssRuleMap = cssRuleMap;\n        this.#id = id;\n        this.#layerName = layerName;\n        this.#styleElement = styleElement;\n        this.#version = version;\n    }\n    // Static Methods -------------------------------------------------------------------------------------------------\n    /**\n     * Connect to an existing dynamic styles managed element by CSS ID with semver check on version range compatibility.\n     *\n     * @param   options - Options.\n     */\n    static connect({ id, range, document = window.document, warn = false }) {\n        if (typeof id !== 'string') {\n            throw new TypeError(`'id' is not a string.`);\n        }\n        if (typeof range !== 'string') {\n            throw new TypeError(`'range' is not a string.`);\n        }\n        if (!CrossWindow.isDocument(document)) {\n            throw new TypeError(`'document' is not an instance of HTMLDocument.`);\n        }\n        return this.#initializeConnect(document, id, range, warn);\n    }\n    /**\n     * @param   options - Options.\n     *\n     * @returns Created style manager instance or undefined if already exists with a higher version.\n     */\n    static create(options) {\n        return this.#createImpl(options);\n    }\n    /**\n     * Query and check for an existing dynamic style manager element / instance given a CSS ID.\n     *\n     * @param   options - Options.\n     *\n     * @returns Undefined if no style manager is configured for the given CSS ID otherwise an object containing the\n     *          current version and HTMLStyleElement associated with the CSS ID.\n     */\n    static exists({ id, document = window.document }) {\n        if (typeof id !== 'string') {\n            throw new TypeError(`'id' is not a string.`);\n        }\n        if (!CrossWindow.isDocument(document)) {\n            throw new TypeError(`'document' is not an instance of HTMLDocument.`);\n        }\n        const existingStyleEl = document.querySelector(`head style#${id}`);\n        if (existingStyleEl) {\n            const existingVersion = existingStyleEl.getAttribute('data-version') ?? '';\n            if (validateStrict(existingVersion)) {\n                return {\n                    id,\n                    version: existingVersion,\n                    element: existingStyleEl\n                };\n            }\n        }\n        return void 0;\n    }\n    // Accessors ------------------------------------------------------------------------------------------------------\n    /**\n     * Determines if this StyleManager style element is still connected / available.\n     *\n     * @returns Is StyleManager connected.\n     */\n    get isConnected() {\n        return !!this.#styleElement?.isConnected;\n    }\n    /**\n     * @returns Provides an accessor to get the `textContent` for the style sheet.\n     */\n    get textContent() {\n        return this.#styleElement?.textContent;\n    }\n    /**\n     * @returns Returns the version of this instance.\n     */\n    get version() {\n        return this.#version;\n    }\n    // Iterator -------------------------------------------------------------------------------------------------------\n    /**\n     * Allows usage in `for of` loops directly.\n     *\n     * @returns Entries Map iterator.\n     */\n    [Symbol.iterator]() {\n        return this.entries();\n    }\n    // Methods --------------------------------------------------------------------------------------------------------\n    /**\n     * Provides a copy constructor to duplicate an existing StyleManager instance into a new document.\n     *\n     * @param   options - Required clone options.\n     *\n     * @returns New style manager instance or undefined if not connected.\n     */\n    clone({ document, force = false, warn = false }) {\n        if (!this.isConnected) {\n            StyleManager.#log(warn, 'clone', `This style manager instance is not connected for id: ${this.#id}`);\n            return void 0;\n        }\n        if (!CrossWindow.isDocument(document)) {\n            throw new TypeError(`'document' is not an instance of HTMLDocument.`);\n        }\n        const rules = {};\n        for (const key of this.#cssRuleMap.keys()) {\n            const selector = this.#cssRuleMap.get(key)?.selector;\n            if (selector) {\n                rules[key] = selector;\n            }\n        }\n        const newStyleManager = StyleManager.#createImpl({\n            id: this.#id,\n            version: this.#version,\n            layerName: this.#layerName,\n            rules,\n            document,\n            force,\n            warn\n        });\n        if (newStyleManager) {\n            for (const key of this.#cssRuleMap.keys()) {\n                if (newStyleManager.#cssRuleMap.has(key)) {\n                    const value = this.#cssRuleMap.get(key)?.cssText;\n                    const targetRuleManager = newStyleManager.#cssRuleMap.get(key);\n                    if (value && targetRuleManager) {\n                        targetRuleManager.cssText = value;\n                    }\n                }\n            }\n            return newStyleManager;\n        }\n        return void 0;\n    }\n    /**\n     * @returns RuleManager entries iterator.\n     */\n    entries() {\n        return this.#cssRuleMap.entries();\n    }\n    /**\n     * Retrieves an associated {@link RuleManager} by name.\n     *\n     * @param   ruleName - Rule name.\n     *\n     * @returns Associated rule manager for given name or undefined if the rule name is not defined or manager is\n     *          unconnected.\n     */\n    get(ruleName) {\n        if (!this.isConnected) {\n            return;\n        }\n        return this.#cssRuleMap.get(ruleName);\n    }\n    /**\n     * Returns whether a {@link StyleManager.CSSRuleManger} exists for the given name.\n     *\n     * @param ruleName - Rule name.\n     *\n     * @returns Is there a CSS rule manager with the given name.\n     */\n    has(ruleName) {\n        return this.#cssRuleMap.has(ruleName);\n    }\n    /**\n     * @returns {MapIterator<string>} RuleManager keys iterator.\n     */\n    keys() {\n        return this.#cssRuleMap.keys();\n    }\n    /**\n     * @returns Iterator of all RuleManager instances.\n     */\n    values() {\n        return this.#cssRuleMap.values();\n    }\n    // Internal Implementation ----------------------------------------------------------------------------------------\n    /**\n     * Internal `create` implementation with additional `force` option to override any version check.\n     *\n     * @param   options - Options.\n     *\n     * @returns Created style manager instance or undefined if already exists with a higher version.\n     */\n    static #createImpl({ id, rules, version, layerName, document = window.document, force = false, warn = false }) {\n        if (typeof id !== 'string') {\n            throw new TypeError(`'id' is not a string.`);\n        }\n        if (!isObject(rules)) {\n            throw new TypeError(`'rules' is not an object.`);\n        }\n        if (!CrossWindow.isDocument(document)) {\n            throw new TypeError(`'document' is not an instance of HTMLDocument.`);\n        }\n        if (!validateStrict(version)) {\n            throw new TypeError(`'version' is not a valid semver string.`);\n        }\n        if (typeof force !== 'boolean') {\n            throw new TypeError(`'force' is not a boolean.`);\n        }\n        if (typeof warn !== 'boolean') {\n            throw new TypeError(`'warn' is not a boolean.`);\n        }\n        if (layerName !== void 0 && typeof layerName !== 'string') {\n            throw new TypeError(`'layerName' is not a string.`);\n        }\n        const current = this.exists({ id, document });\n        if (isObject(current)) {\n            // Remove all existing CSS rules / text if the version is greater than the existing version or `force` is true.\n            if (force || compare(version, current.version, '>')) {\n                current.element?.remove?.();\n                return this.#initializeCreate(document, id, rules, version, layerName);\n            }\n            else {\n                this.#log(warn, 'create', `Could not create instance as one already exists with a higher version for ID: ${id}.`);\n                // A style manager already exists that is a greater version than requested.\n                return void 0;\n            }\n        }\n        else {\n            return this.#initializeCreate(document, id, rules, version, layerName);\n        }\n    }\n    /**\n     * @param document - Target Document.\n     *\n     * @param id - Associated CSS ID\n     *\n     * @param range - SemVer version or version range.\n     *\n     * @param warn - When true, log warnings.\n     *\n     * @returns Style manager connected to existing element / style rules or undefined if no connection possible.\n     */\n    static #initializeConnect(document, id, range, warn = false) {\n        const styleElement = document.querySelector(`head style#${id}`);\n        if (!styleElement || styleElement?.sheet === null) {\n            this.#log(warn, 'connect', `Could not find existing style element for id: ${id}`);\n            return void 0;\n        }\n        const existingRules = styleElement._tjsRules;\n        const existingVersion = styleElement._tjsVersion;\n        const existingLayerName = styleElement._tjsLayerName;\n        let targetSheet = styleElement.sheet;\n        if (!isObject(existingRules)) {\n            this.#log(warn, 'connect', `Could not find rules configuration on existing style element for id: ${id}`);\n            return void 0;\n        }\n        if (!validateStrict(existingVersion)) {\n            this.#log(warn, 'connect', `Could not find version on existing style element for id: ${id}`);\n            return void 0;\n        }\n        if (existingLayerName !== void 0 && typeof existingLayerName !== 'string') {\n            this.#log(warn, 'connect', `Could not find layer name on existing style element for id: ${id}`);\n            return void 0;\n        }\n        if (!satisfies(existingVersion, range)) {\n            this.#log(warn, 'connect', `Requested range (${range}) does not satisfy existing version: ${existingVersion}`);\n            return void 0;\n        }\n        // TS type guard.\n        if (!CrossWindow.isCSSStyleSheet(targetSheet)) {\n            return void 0;\n        }\n        const cssRuleMap = new Map();\n        // Reverse the rule object to find the actual CSS rules below.\n        const reverseRuleMap = new Map(Object.entries(existingRules).map(([key, value]) => [value, key]));\n        try {\n            if (typeof existingLayerName) {\n                let foundLayer = false;\n                for (const rule of Array.from(targetSheet.cssRules)) {\n                    if (CrossWindow.isCSSLayerBlockRule(rule) && rule.name === existingLayerName) {\n                        targetSheet = rule;\n                        foundLayer = true;\n                    }\n                }\n                if (!foundLayer) {\n                    this.#log(warn, 'connect', `Could not find CSSLayerBlockRule for existing layer name: ${existingLayerName}`);\n                    return void 0;\n                }\n            }\n            for (const cssRule of Array.from(targetSheet.cssRules)) {\n                if (!CrossWindow.isCSSStyleRule(cssRule)) {\n                    continue;\n                }\n                const selector = cssRule?.selectorText;\n                if (reverseRuleMap.has(selector)) {\n                    const ruleName = reverseRuleMap.get(selector);\n                    cssRuleMap.set(ruleName, new RuleManager(cssRule, ruleName, selector));\n                    reverseRuleMap.delete(selector);\n                }\n            }\n            // Check if all registered rules have been found.\n            if (reverseRuleMap.size > 0) {\n                this.#log(warn, 'connect', `Could not find CSSStyleRules for these rule configurations: ${JSON.stringify([...reverseRuleMap])}`);\n                return void 0;\n            }\n            return new StyleManager({\n                cssRuleMap,\n                id,\n                version: existingVersion,\n                layerName: existingLayerName,\n                styleElement,\n                token: StyleManager.#CTOR_TOKEN\n            });\n        }\n        catch (error) {\n            console.error(`TyphonJS Runtime [StyleManager error]: Please update your browser to the latest version.`, error);\n        }\n        return void 0;\n    }\n    /**\n     * @param document - Target Document.\n     *\n     * @param id - Associated CSS ID\n     *\n     * @param rules -\n     *\n     * @param version -\n     *\n     * @param layerName -\n     *\n     * @returns New StyleManager instance.\n     */\n    static #initializeCreate(document, id, rules, version, layerName) {\n        const styleElement = document.createElement('style');\n        styleElement.id = id;\n        styleElement.setAttribute('data-version', String(version));\n        styleElement._tjsRules = rules;\n        styleElement._tjsVersion = version;\n        styleElement._tjsLayerName = layerName;\n        document.head.append(styleElement);\n        let targetSheet;\n        // Type guard for TS.\n        if (styleElement.sheet === null) {\n            return void 0;\n        }\n        const cssRuleMap = new Map();\n        try {\n            if (layerName) {\n                const index = styleElement.sheet.insertRule(`@layer ${layerName} {}`);\n                targetSheet = styleElement.sheet.cssRules[index];\n            }\n            else {\n                targetSheet = styleElement.sheet;\n            }\n            if (rules) {\n                for (const ruleName in rules) {\n                    const selector = rules[ruleName];\n                    const index = targetSheet.insertRule(`${selector} {}`);\n                    const cssRule = targetSheet.cssRules[index];\n                    cssRuleMap.set(ruleName, new RuleManager(cssRule, ruleName, selector));\n                }\n            }\n            return new StyleManager({\n                cssRuleMap,\n                id,\n                version,\n                layerName,\n                styleElement,\n                token: StyleManager.#CTOR_TOKEN\n            });\n        }\n        catch (error) {\n            console.error(`TyphonJS Runtime [StyleManager error]: Please update your browser to the latest version.`, error);\n            // Clean up: remove the <style> from the DOM.\n            if (styleElement && styleElement.parentNode) {\n                styleElement.remove();\n            }\n        }\n        return void 0;\n    }\n    /**\n     * @param   warn - When true, log warnings.\n     *\n     * @param   path - Particular interaction path for warning.\n     *\n     * @param   message - Message to log.\n     */\n    static #log(warn, path, message) {\n        if (warn) {\n            console.warn(`[TRL StyleManager] ${path} warning: ${message}`);\n        }\n    }\n}\n\nvar _a, _b;\n/**\n * Dynamically parses and indexes a `CSSStyleSheet` at runtime, exposing a selector-to-style mapping by\n * individual selector parts. CSS variable resolution is also possible which enables the ability to flatten and\n * resolve complex nested `var(--...)` chains defined across multiple selectors and layers.\n *\n * When retrieving specific selector styles via {@link StyleSheetResolve.get} and {@link StyleSheetResolve.getProperty}\n * it is possible to provide additional parent selectors that may define scoped CSS variables. These parent variable\n * definitions will be substituted in the target selector data allowing specific element scoping of CSS variables to be\n * flattened.\n *\n * Current fallback support includes recursive var(--a, var(--b, ...)) chains with graceful partial substitution if\n * some variables are undefined. This maintains correctness without introducing ambiguity or needing a complete AST\n * based parser.\n *\n * By default, when parsing CSSStyleSheet instances relative URL rewriting occurs converting `url(...)` references to\n * absolute paths based on the `CSSStyleSheet.href` or the `baseHref` parse option for inline / synthetic\n * CSSStyleSheets. You may turn off relative URL rewriting via setting the `urlRewrite` parse option to `false`.\n *\n * By default, simple media queries / `@media` rules are parsed when all conditions are `prefers-*` features and the\n * media query matches at runtime via `window.matchMedia(...)`. Mixed conditions (IE with screen, width, etc.) are\n * ignored by design. Only direct style rules under a media query are parsed. You may turn off media query parsing via\n * setting the `mediaQuery` parse option to false.\n *\n * --------\n *\n * The goal of this implementation is to realize a regex-based parser with small code size, minimal memory footprint,\n * speed, and reasonable accuracy.\n *\n * Core features:\n * - Parses all or specific relevant `@layer` blocks.\n * - Provides both direct and resolved access to styles via `.get()` and `.getProperty()`.\n * - Automatically rewrites relative URLs / `url(...)` references to absolute paths.\n *\n * Parse Options:\n * - Can set a base `href` for inline / synthetic CSSStyleSheets being processed via `baseHref` option.\n * - Can filter out and exclude undesired CSS selector parts for parsing via `excludeSelectorParts` option.\n * - Can filter out and include just desired CSS layers via `includeCSSLayers` option.\n * - Can filter out and include just desired CSS selector parts via `includeSelectorPartSet` option.\n * - Can disable relative URL rewriting by setting `urlRewrite` option to `false`.\n *\n * Access Options:\n * - Can return style property keys in camel case via `camelCase` option.\n * - Can limit the depth of resolved CSS variables across parent-selector fallback chains via `depth` option.\n * - Enables resolution of scoped CSS variables using a parent-selector fallback chain via `resolve` option.\n * - Can enable cyclic dependency detection warnings when resolving CSS variables via `warnCycles` option.\n * - Can enable warnings for non-existent parent-selector fallback lookup via `warnResolve` option.\n *\n * @example\n * ```js\n * import { StyleSheetResolve } from '#runtime/util/dom/style';\n *\n * // Parse first stylesheet in the browser `document`.\n * const parsedStyles = StyleSheetResolve.parse(document.styleSheets[0]);\n *\n * // The `props` object has styles w/ CSS variables resolved from `input[type=\"text\"]` for the dark theme.\n * const props = parsedStyles.get('input[type=\"text\"]', { resolve: '.themed.theme-dark input' });\n * ```\n *\n * @privateRemarks\n * This implementation avoids a full AST parser for `var(--...)` fallback expressions to keep the codebase compact. If\n * future requirements include resolving deeply nested fallbacks, debug tracing, or custom resolution behavior, I'll\n * consider replacing this logic with a dedicated AST parser and visitor pattern. An AST-based approach would offer more\n * flexibility and maintainability at the cost of slightly increased complexity and larger runtime memory footprint.\n */\nclass StyleSheetResolve {\n    /**\n     * Detects hyphen-case separator for camel case property key conversion.\n     */\n    static #HYPHEN_CASE_REGEX = /-([a-z])/g;\n    /**\n     * Detects just a single `(prefers-*)` CSSMediaRule condition.\n     */\n    static #MEDIA_RULE_PREFERS = /^\\s*\\(?\\s*prefers-[^)]+(?:\\s*:\\s*[^)]+)?\\)?\\s*$/i;\n    /**\n     * Detects relative `url()` references in CSSStyleRule `cssText`.\n     */\n    static #URL_DETECTION_REGEX = /\\burl\\(\\s*(['\"]?)(?!data:|https?:|\\/|#)/i;\n    /**\n     * Captures contents of `url()` references.\n     */\n    static #URL_REGEX = /url\\((['\"]?)([^'\")]+)\\1\\)/g;\n    /**\n     * Internal tracking of frozen state; once frozen, no more modifications are possible.\n     */\n    #frozen = false;\n    /**\n     * Parsed selector to associated style properties.\n     */\n    #sheetMap = new Map();\n    /**\n     * Parse a CSSStyleSheet instance with the given options or accept a pre-filled Map generating a new\n     * `StyleSheetResolve` instance.\n     *\n     * @param styleSheetOrMap - The stylesheet instance to parse or an existing parsed stylesheet Map.\n     *\n     * @param [options] - Options for parsing stylesheet.\n     *\n     * @returns {StyleSheetResolve} New instance with the given parsed data.\n     */\n    static parse(styleSheetOrMap, options = {}) {\n        return new _a().parse(styleSheetOrMap, options);\n    }\n    /**\n     * Instantiate an empty `StyleSheetResolve` instance.\n     */\n    constructor() { }\n    // Accessors ------------------------------------------------------------------------------------------------------\n    /**\n     * @returns Current frozen state; when true no more modifications are possible.\n     */\n    get frozen() {\n        return this.#frozen;\n    }\n    /**\n     * @returns Returns the size / count of selector properties tracked.\n     */\n    get size() {\n        return this.#sheetMap.size;\n    }\n    // Iterator -------------------------------------------------------------------------------------------------------\n    /**\n     * Allows usage in `for of` loops directly.\n     *\n     * @returns Entries Map iterator.\n     */\n    *[Symbol.iterator]() {\n        // Use `entries()` to make a shallow copy of data.\n        yield* this.entries();\n    }\n    // Methods --------------------------------------------------------------------------------------------------------\n    /**\n     * Clears any existing parsed styles.\n     */\n    clear() {\n        if (this.#frozen) {\n            throw new Error('Cannot modify a frozen StyleSheetResolve instance.');\n        }\n        this.#sheetMap.clear();\n    }\n    /**\n     * Clones this instance returning a new `StyleSheetResolve` instance with a copy of the data.\n     *\n     * @returns Cloned instance.\n     */\n    clone() {\n        return _a.parse(this.#clone(this.#sheetMap));\n    }\n    /**\n     * Deletes an entry in the parsed stylesheet Map.\n     *\n     * @param   selector - Selector key to delete.\n     *\n     * @returns Success state.\n     */\n    delete(selector) {\n        if (this.#frozen) {\n            throw new Error('Cannot modify a frozen StyleSheetResolve instance.');\n        }\n        return this.#sheetMap.delete(selector);\n    }\n    /**\n     * Entries iterator of selector / style properties objects.\n     *\n     * @returns {MapIterator<[string, { [key: string]: string }]>} Tracked CSS selector key / value iterator.\n     * @yields\n     */\n    *entries() {\n        // Ensure a shallow copy of style properties.\n        for (const key of this.#sheetMap.keys()) {\n            yield [key, { ...this.#sheetMap.get(key) }];\n        }\n    }\n    /**\n     * Freezes this instance disallowing further modifications to the stylesheet data.\n     *\n     * @returns This instance.\n     */\n    freeze() {\n        /* c8 ignore next 1 */\n        if (this.#frozen) {\n            return this;\n        }\n        this.#frozen = true;\n        for (const props of this.#sheetMap.values()) {\n            Object.freeze(props);\n        }\n        Object.freeze(this.#sheetMap);\n        return this;\n    }\n    /**\n     * Gets all properties associated with the given selector(s). You may combine multiple selectors for a\n     * combined result. You may also provide additional selectors as the `resolve` option to substitute any CSS variables\n     * in the target selector(s).\n     *\n     * @param selector - A selector or list of selectors to retrieve.\n     *\n     * @param [options] - Options.\n     *\n     * @returns Style properties object or undefined.\n     */\n    get(selector, { camelCase = false, depth, resolve, warnCycles = false, warnResolve = false } = {}) {\n        if (typeof selector !== 'string' && !isIterable(selector)) {\n            throw new TypeError(`'selector' must be a string or an iterable list of strings.`);\n        }\n        if (typeof camelCase !== 'boolean') {\n            throw new TypeError(`'camelCase' must be a boolean.`);\n        }\n        if (depth !== void 0 && (!Number.isInteger(depth) || depth < 1)) {\n            throw new TypeError(`'depth' must be a positive integer >= 1.`);\n        }\n        if (resolve !== void 0 && typeof resolve !== 'string' && !isIterable(resolve)) {\n            throw new TypeError(`'resolve' must be a string or an iterable list of strings.`);\n        }\n        if (typeof warnCycles !== 'boolean') {\n            throw new TypeError(`'warnCycles' must be a boolean.`);\n        }\n        if (typeof warnResolve !== 'boolean') {\n            throw new TypeError(`'warnResolve' must be a boolean.`);\n        }\n        let result = void 0;\n        if (isIterable(selector)) {\n            for (const entry of selector) {\n                // If there is a direct selector match, then return a value immediately.\n                if (this.#sheetMap.has(entry)) {\n                    result = Object.assign(result ?? {}, this.#sheetMap.get(entry));\n                }\n            }\n        }\n        else {\n            // If there is a direct selector match, then return a value immediately.\n            if (this.#sheetMap.has(selector)) {\n                result = Object.assign(result ?? {}, this.#sheetMap.get(selector));\n            }\n        }\n        if (result && (typeof resolve === 'string' || isIterable(resolve))) {\n            const resolveList = typeof resolve === 'string' ? [resolve] : Array.from(resolve);\n            depth = typeof depth === 'number' ? depth : Math.max(1, resolveList.length);\n            const resolveData = {\n                parentNotFound: new Set(),\n                seenCycles: new Set(),\n                warnCycles\n            };\n            // Progressively resolve CSS variables up to the requested depth.\n            for (let cntr = 0; cntr < depth && cntr < resolveList.length; cntr++) {\n                this.#resolve(result, resolveList, resolveData);\n            }\n            if (resolveData.parentNotFound.size > 0) {\n                console.warn(`[TyphonJS Runtime] StyleSheetResolve - resolve - Could not locate parent selector(s) for resolution: '${[...resolveData.parentNotFound].join(', ')}'`);\n            }\n        }\n        // Potentially convert property keys to camel case.\n        if (result && camelCase) {\n            const remapped = {};\n            const toUpper = (_, str) => str.toUpperCase();\n            for (const key in result) {\n                const mappedKey = key.startsWith('--') ? key : key.replace(_a.#HYPHEN_CASE_REGEX, toUpper);\n                remapped[mappedKey] = result[key];\n            }\n            result = remapped;\n        }\n        return result;\n    }\n    /**\n     * Gets a specific property value from the given `selector` and `property` key.\n     *\n     * @param   selector - A selector or list of selectors to retrieve.\n     *\n     * @param   property - Specific property to locate.\n     *\n     * @param   [options] - Options.\n     *\n     * @returns Style property value.\n     */\n    getProperty(selector, property, options) {\n        const data = this.get(selector, options);\n        return isObject(data) && property in data ? data[property] : void 0;\n    }\n    /**\n     * Test if `StyleSheetResolve` tracks the given selector.\n     *\n     * @param   selector - CSS selector to check.\n     *\n     * @returns StyleSheetResolve tracks the given selector.\n     */\n    has(selector) {\n        return this.#sheetMap.has(selector);\n    }\n    /**\n     * @returns Tracked CSS selector keys iterator.\n     */\n    keys() {\n        return this.#sheetMap.keys();\n    }\n    /**\n     * Merges selectors and style properties from another StyleSheetResolve instance into this one. By default, the\n     * source of the merge overrides existing properties. You may choose to preserve existing values along with\n     * specifying exact selector matches.\n     *\n     * @param   source - Another instance to merge from.\n     *\n     * @param   [options] - Options.\n     *\n     * @returns This instance.\n     */\n    merge(source, { exactMatch = false, strategy = 'override' } = {}) {\n        if (this.#frozen) {\n            throw new Error('Cannot modify a frozen StyleSheetResolve instance.');\n        }\n        if (!(source instanceof _a)) {\n            throw new TypeError(`'source' is not a StyleSheetResolve instance.`);\n        }\n        for (const selectorPart of source.keys()) {\n            if (exactMatch && !this.#sheetMap.has(selectorPart)) {\n                continue;\n            }\n            // Directly retrieve the stored object.\n            const incoming = source.#sheetMap.get(selectorPart);\n            /* c8 ignore next 1 */ // Sanity check.\n            if (!incoming) {\n                continue;\n            }\n            /* c8 ignore next 1 */ // `?? {}` is for sanity.\n            const current = this.#sheetMap.get(selectorPart) ?? {};\n            // For preserve strategy, make a copy of the incoming data in the case that the source is frozen.\n            const merged = strategy === 'preserve' ? Object.assign({}, { ...incoming }, current) :\n                Object.assign({}, current, incoming);\n            this.#sheetMap.set(selectorPart, merged);\n        }\n        return this;\n    }\n    /**\n     * Clears existing stylesheet mapping and parses the given stylesheet or Map.\n     *\n     * @param   styleSheetOrMap - The stylesheet element to parse or an existing parsed stylesheet Map.\n     *\n     * @param   [options] - Options for parsing stylesheet.\n     *\n     * @returns This instance.\n     */\n    parse(styleSheetOrMap, options = {}) {\n        if (this.#frozen) {\n            throw new Error('Cannot modify a frozen StyleSheetResolve instance.');\n        }\n        this.#sheetMap.clear();\n        if (!CrossWindow.isCSSStyleSheet(styleSheetOrMap) && !CrossWindow.isMap(styleSheetOrMap)) {\n            throw new TypeError(`'styleSheetOrMap' must be a 'CSSStyleSheet' instance or a parsed Map of stylesheet entries.`);\n        }\n        if (!isObject(options)) {\n            throw new TypeError(`'options' is not an object.`);\n        }\n        if (options.baseHref !== void 0 && typeof options.baseHref !== 'string') {\n            throw new TypeError(`'baseHref' must be a string.`);\n        }\n        if (options.excludeSelectorParts !== void 0 && !isIterable(options.excludeSelectorParts)) {\n            throw new TypeError(`'excludeSelectorParts' must be a list of RegExp instances.`);\n        }\n        if (options.includeCSSLayers !== void 0 && !isIterable(options.includeCSSLayers)) {\n            throw new TypeError(`'includeCSSLayers' must be a list of RegExp instances.`);\n        }\n        if (options.includeSelectorPartSet !== void 0 && !CrossWindow.isSet(options.includeSelectorPartSet)) {\n            throw new TypeError(`'includeSelectorPartSet' must be a Set of strings.`);\n        }\n        if (options.mediaQuery !== void 0 && typeof options.mediaQuery !== 'boolean') {\n            throw new TypeError(`'mediaQuery' must be a boolean.`);\n        }\n        if (options.urlRewrite !== void 0 && typeof options.urlRewrite !== 'boolean') {\n            throw new TypeError(`'urlRewrite' must be a boolean.`);\n        }\n        if (CrossWindow.isCSSStyleSheet(styleSheetOrMap)) {\n            this.#parse(styleSheetOrMap, options);\n        }\n        else if (CrossWindow.isMap(styleSheetOrMap)) {\n            this.#sheetMap = this.#clone(styleSheetOrMap);\n        }\n        return this;\n    }\n    /**\n     * Directly sets a selector key with the given style properties object.\n     *\n     * @param   selector - A single selector key to set.\n     *\n     * @param   styleObj - Style data object of property / value pairs.\n     */\n    set(selector, styleObj) {\n        if (this.#frozen) {\n            throw new Error('Cannot modify a frozen StyleSheetResolve instance.');\n        }\n        if (typeof selector !== 'string') {\n            throw new TypeError(`'selector' must be a string.`);\n        }\n        if (!isObject(styleObj)) {\n            throw new TypeError(`'styleObj' must be an object.`);\n        }\n        this.#sheetMap.set(selector, styleObj);\n    }\n    // Internal Implementation ----------------------------------------------------------------------------------------\n    /**\n     * Shallow clone of source Map into target Map.\n     *\n     * @param   sourceMap - Source Map.\n     *\n     * @param   [targetMap] - Target Map.\n     *\n     * @returns Shallow copy cloned Map.\n     */\n    #clone(sourceMap, targetMap = new Map()) {\n        // Shallow copy.\n        for (const [selector, props] of sourceMap.entries()) {\n            targetMap.set(selector, { ...props });\n        }\n        return targetMap;\n    }\n    /**\n     * Parses the given CSSStyleSheet instance.\n     *\n     * @param styleSheet - The stylesheet to parse.\n     *\n     * @param [opts] - Options for parsing stylesheet.\n     */\n    #parse(styleSheet, opts) {\n        // Convert to consistent sanitized options data data.\n        const options = {\n            baseHref: styleSheet.href ?? opts.baseHref,\n            excludeSelectorParts: isIterable(opts.excludeSelectorParts) ? Array.from(opts.excludeSelectorParts) : [],\n            includeCSSLayers: isIterable(opts.includeCSSLayers) ? Array.from(opts.includeCSSLayers) : [],\n            includeSelectorPartSet: CrossWindow.isSet(opts.includeSelectorPartSet) ? opts.includeSelectorPartSet :\n                new Set(),\n            mediaQuery: opts.mediaQuery ?? true,\n            urlRewrite: opts.urlRewrite ?? true\n        };\n        const rules = styleSheet.cssRules;\n        const allStyleRules = [];\n        // Collect all CSSStyleRules.\n        for (let i = 0; i < rules.length; i++) {\n            const rule = rules[i];\n            switch (rule.constructor.name) {\n                case 'CSSLayerBlockRule':\n                    this.#processLayerBlockRule(rule, void 0, allStyleRules, options);\n                    break;\n                case 'CSSMediaRule':\n                    this.#processMediaRule(rule, allStyleRules, options);\n                    break;\n                case 'CSSStyleRule':\n                    allStyleRules.push(rule);\n                    break;\n            }\n        }\n        // Bulk process all CSSStyleRules and build the map of selectors to properties.\n        this.#processStyleRules(allStyleRules, options);\n    }\n    /**\n     * Recursively parses / processes a CSSLayerBlockRule and encountered CSSStyleRule entries.\n     *\n     * @param   blockRule - The `CSSLayerBlockRule` to parse.\n     *\n     * @param   parentLayerName - Name of parent CSS layer.\n     *\n     * @param   allStyleRules - All style rules to process.\n     *\n     * @param   opts - Sanitized process options.\n     */\n    #processLayerBlockRule(blockRule, parentLayerName, allStyleRules, opts) {\n        const fullname = typeof parentLayerName === 'string' ? `${parentLayerName}.${blockRule.name}` : blockRule.name;\n        const includeLayer = opts.includeCSSLayers.length === 0 ||\n            opts.includeCSSLayers.some((regex) => regex.test(fullname));\n        const layerBlockRules = [];\n        const rules = blockRule.cssRules;\n        for (let i = 0; i < rules.length; i++) {\n            const rule = rules[i];\n            switch (rule.constructor.name) {\n                case 'CSSLayerBlockRule':\n                    layerBlockRules.push(rule);\n                    break;\n                case 'CSSMediaRule':\n                    this.#processMediaRule(rule, allStyleRules, opts);\n                    break;\n                case 'CSSStyleRule':\n                    if (includeLayer) {\n                        allStyleRules.push(rule);\n                    }\n                    break;\n            }\n        }\n        for (let i = 0; i < layerBlockRules.length; i++) {\n            this.#processLayerBlockRule(layerBlockRules[i], fullname, allStyleRules, opts);\n        }\n    }\n    /**\n     * Simple processing of a CSSMediaRule and directly nested CSSStyleRule entries.\n     *\n     * @param   mediaRule - The `CSSMediaRule` to parse.\n     *\n     * @param   allStyleRules - All style rules to process.\n     *\n     * @param   opts - Sanitized process options.\n     */\n    #processMediaRule(mediaRule, allStyleRules, opts) {\n        if (!opts.mediaQuery) {\n            return;\n        }\n        // Skip if the media rule does not match the current environment.\n        if (!window.matchMedia(mediaRule.media.mediaText).matches) {\n            return;\n        }\n        // Currently just singular `(prefers-*)` conditions are allowed.\n        if (!_a.#MEDIA_RULE_PREFERS.test(mediaRule.media.mediaText)) {\n            return;\n        }\n        const rules = mediaRule.cssRules;\n        for (let i = 0; i < rules.length; i++) {\n            const rule = rules[i];\n            switch (rule.constructor.name) {\n                case 'CSSStyleRule':\n                    allStyleRules.push(rule);\n                    break;\n            }\n        }\n    }\n    /**\n     * Processes all collected `CSSStyleRules`.\n     *\n     * @param   allStyleRules - Style rules to parse.\n     *\n     * @param   opts - ProcessOptions.\n     */\n    #processStyleRules(allStyleRules, opts) {\n        for (let i = 0; i < allStyleRules.length; i++) {\n            const styleRule = allStyleRules[i];\n            // Split selector parts and remove disallowed selector parts and empty strings.\n            const selectorParts = StyleParse.selectorText(styleRule.selectorText, opts);\n            if (selectorParts.length) {\n                // Parse CSSStyleDeclaration.\n                const result = StyleParse.cssText(styleRule.style.cssText);\n                // Only convert `url()` references if `urlRewrite` is true, baseHref` is defined, and relative `url()`\n                // detected in `cssText`.\n                if (opts.urlRewrite && opts.baseHref &&\n                    _a.#URL_DETECTION_REGEX.test(styleRule.style.cssText)) {\n                    this.#processStyleRuleUrls(result, opts);\n                }\n                for (let j = selectorParts.length; --j >= 0;) {\n                    const part = selectorParts[j];\n                    if (this.#sheetMap.has(part)) {\n                        Object.assign(this.#sheetMap.get(part), result);\n                    }\n                    else {\n                        this.#sheetMap.set(part, result);\n                    }\n                }\n            }\n        }\n    }\n    /**\n     * Resolve relative `url(...)` references in CSS property values based on the stylesheet origin.\n     *\n     * This method rewrites relative paths in `url(...)` to absolute paths (IE `/assets/img.png`) using the\n     * CSSStyleSheet `href` when available or falling back to the provided `baseHref` for inline stylesheets.\n     *\n     * @param result - Parsed CSS property key-value map.\n     *\n     * @param opts - Processing options.\n     */\n    #processStyleRuleUrls(result, opts) {\n        const baseHref = opts.baseHref;\n        for (const key in result) {\n            let value = result[key];\n            // Fast skip if there's no 'url(' substring.\n            if (value.indexOf('url(') === -1) {\n                continue;\n            }\n            // Avoid regex test if no reason to rewrite (IE relative URLs)\n            if (!_a.#URL_DETECTION_REGEX.test(value)) {\n                continue;\n            }\n            // Only assign back to result if value changes.\n            let modified = false;\n            value = value.replace(_a.#URL_REGEX, (match, quote, relPath) => {\n                try {\n                    // Convert the relative path to an absolute pathname using the resolved baseHref.\n                    const absPath = new URL(relPath, baseHref).pathname;\n                    modified = true;\n                    return `url(${quote}${absPath}${quote})`;\n                    /* c8 ignore next 6 */\n                }\n                catch {\n                    // If resolution fails return the original value unchanged.\n                    return match;\n                }\n            });\n            if (modified) {\n                result[key] = value;\n            }\n        }\n    }\n    /**\n     * Resolves intermediate CSS variables defined in the `result` style properties object with data from the given\n     * `resolve` selector(s).\n     *\n     * @param   result - Copy of source selector style properties to resolve.\n     *\n     * @param   resolve - Parent CSS variable resolution selectors.\n     *\n     * @param   resolveData - Resolution data.\n     */\n    #resolve(result, resolve, resolveData) {\n        // Collect all parent-defined CSS variables.\n        const parentVars = {};\n        for (let i = 0; i < resolve.length; i++) {\n            const entry = resolve[i];\n            const parent = this.get(entry);\n            // Verify that the parent lookup is available otherwise add selector to `not found` Set.\n            if (!isObject(parent)) {\n                resolveData.parentNotFound.add(entry);\n                continue;\n            }\n            for (const key in parent) {\n                if (key.startsWith('--')) {\n                    parentVars[key] = parent[key];\n                }\n            }\n        }\n        // Track and resolve variables used in the result.\n        const cssVars = new ResolveVars(result, parentVars, resolveData);\n        /* c8 ignore next 1 */\n        if (!cssVars.unresolvedCount) {\n            return;\n        }\n        for (const key in parentVars) {\n            cssVars.set(key, parentVars[key]);\n        }\n        Object.assign(result, cssVars.resolved);\n    }\n}\n_a = StyleSheetResolve;\n/**\n * Encapsulates CSS variable resolution logic and data.\n */\nclass ResolveVars {\n    /**\n     * Detect CSS variable.\n     */\n    static #DETECT_CSS_VAR_REGEX = /--[\\w-]+/g;\n    /**\n     * Capture CSS variable fallbacks.\n     */\n    static #CSS_VAR_FALLBACK_REGEX = /^var\\((?<varName>--[\\w-]+)\\s*,\\s*(?<fallback>.+?)\\)$/;\n    /**\n     * Replace CSS variable fallbacks.\n     */\n    static #CSS_VAR_FALLBACK_REPLACE_REGEX = /var\\((--[\\w-]+)(?:\\s*,\\s*[^()]*?)?\\)/g;\n    /**\n     * Closed CSS variable.\n     */\n    static #CSS_VAR_REGEX = /^var\\((--[\\w-]+)\\)$/;\n    /**\n     * Open CSS variable.\n     */\n    static #CSS_VAR_PARTIAL_REGEX = /^var\\((--[\\w-]+)/;\n    /**\n     * Prevent deep fallback recursion.\n     */\n    static #MAX_FALLBACK_DEPTH = 10;\n    /**\n     * Initial style properties w/ CSS variables to track.\n     */\n    #propMap = new Map();\n    /**\n     * Reverse lookup for CSS variable name to associated property.\n     */\n    #varToProp = new Map();\n    /**\n     * Resolved CSS variable from parent selector properties.\n     */\n    #varResolved = new Map();\n    #parentVars;\n    #resolveData;\n    /**\n     * @param initial - Initial style entry to resolve.\n     *\n     * @param parentVars - All parent resolution vars.\n     *\n     * @param resolveData - Resolution data.\n     */\n    constructor(initial, parentVars, resolveData) {\n        this.#parentVars = parentVars;\n        this.#resolveData = resolveData;\n        // Build the reverse dependency map of which CSS variables (--x) are referenced by each style property.\n        // This enables efficient tracking of what properties depend on what variables.\n        for (const prop in initial) {\n            const value = initial[prop];\n            let match;\n            _b.#DETECT_CSS_VAR_REGEX.lastIndex = 0; // Reset if reused\n            let found = false;\n            while ((match = _b.#DETECT_CSS_VAR_REGEX.exec(value))) {\n                const entry = match[0];\n                if (!this.#varToProp.has(entry))\n                    this.#varToProp.set(entry, new Set());\n                this.#varToProp.get(entry).add(prop);\n                found = true;\n            }\n            if (found)\n                this.#propMap.set(prop, value);\n        }\n    }\n    /**\n     * Resolves properties in `#propMap` by substituting var(...) expressions using resolved values in #varResolved. If\n     * no resolution is available, attempts to preserve fallback expressions in their original var(...) form.\n     *\n     * Supports chained fallbacks like: var(--a, var(--b, var(--c, red))) and resolving variables in statements like\n     * `calc(1rem + var(--x))`.\n     *\n     * @returns All fields that have been resolved.\n     */\n    get resolved() {\n        const result = {};\n        // Attempt to resolve each CSS variable found in style properties. If resolution is known, then substitute it\n        // otherwise check for fallback chains.\n        for (const entry of this.#varToProp.keys()) {\n            const props = this.#varToProp.get(entry);\n            const varResolved = this.#varResolved.get(entry);\n            /* c8 ignore next 1 */\n            if (!props) {\n                continue;\n            }\n            // Direct resolution: replace all `var(--x)` forms in all dependent properties with the resolved value.\n            if (varResolved) {\n                for (const prop of props) {\n                    let value = this.#propMap.get(prop);\n                    if (value.indexOf(`var(${entry}`) !== -1) {\n                        // Replace each `var(--x[, fallback])` with its resolved value (if available).\n                        // Fallbacks are preserved unless fully resolvable, enabling partial resolution of chained vars.\n                        value = value.replace(_b.#CSS_VAR_FALLBACK_REPLACE_REGEX, (match) => {\n                            // Extract the CSS variable name (`--x`) from the matched `var(--x[, fallback])` expression.\n                            const varName = match.match(_b.#CSS_VAR_PARTIAL_REGEX)?.[1];\n                            const resolved = this.#varResolved.get(varName);\n                            /* c8 ignore next 1 */ // `?? match` is a sanity fallback.\n                            return resolved ?? match;\n                        });\n                    }\n                    this.#propMap.set(prop, value);\n                    result[prop] = value;\n                }\n            }\n            // Unresolved var: check if fallback exists (`var(--x, red)`), and resolve nested fallback chains if present.\n            else {\n                for (const prop of props) {\n                    const value = this.#propMap.get(prop);\n                    // Early out if no fallback to resolve.\n                    if (value.indexOf(`var(${entry}`) === -1) {\n                        continue;\n                    }\n                    const fallback = this.#resolveNestedFallback(value);\n                    this.#propMap.set(prop, fallback);\n                    result[prop] = fallback;\n                }\n            }\n        }\n        return result;\n    }\n    /**\n     * @returns Unresolved field count.\n     */\n    get unresolvedCount() {\n        let count = 0;\n        for (const entry of this.#varToProp.keys()) {\n            if (!this.#varResolved.has(entry)) {\n                count++;\n            }\n        }\n        return count;\n    }\n    /**\n     * Sets the parent selector defined CSS variable for resolution.\n     *\n     * @param name - CSS variable name\n     *\n     * @param value - Value of target CSS variable.\n     */\n    set(name, value) {\n        /* c8 ignore next 1 */\n        if (typeof value !== 'string' || value.length === 0) {\n            return;\n        }\n        if (this.#resolveData.warnCycles) {\n            this.#setCycleWarn(name, value);\n        }\n        else {\n            if (this.#varToProp.has(name) && !this.#varResolved.has(name)) {\n                this.#varResolved.set(name, value);\n            }\n        }\n    }\n    // Internal Implementation ----------------------------------------------------------------------------------------\n    /**\n     * Performs DFS traversal to detect cycles in CSS variable resolution. Tracks the resolution path and emits a\n     * warning if a cycle is found. Each affected property is reported once with its originating chain.\n     *\n     * @param   value - Value of target CSS variable.\n     *\n     * @param   visited - Visited CSS variables.\n     *\n     * @param   seenCycles - Dedupe cyclic dependency warnings.\n     *\n     * @returns Resolution result or undefined.\n     */\n    #resolveCycleWarn(value, visited, seenCycles) {\n        const match = value.match(_b.#CSS_VAR_REGEX);\n        if (!match) {\n            return value;\n        }\n        const next = match[1];\n        // Cycle detection: if var is already seen in traversal, then record and warn.\n        if (visited.has(next)) {\n            // Format cycle signature for deduping.\n            const cycleChain = [...visited, next];\n            const cycleKey = cycleChain.join('→');\n            if (!seenCycles.has(cycleKey)) {\n                // Record and deduplicate cycle chains to avoid redundant logs.\n                seenCycles.add(cycleKey);\n                const affected = cycleChain.flatMap((varName) => Array.from(this.#varToProp.get(varName) ?? []).map((prop) => `- ${prop} (via ${varName})`));\n                if (affected.length > 0) {\n                    console.warn(`[TyphonJS Runtime] StyleSheetResolve - CSS variable cyclic dependency detected: ${cycleChain.join(' → ')}\\nAffected properties:\\n${affected.join('\\n')}`);\n                }\n            }\n            return void 0;\n        }\n        visited.add(next);\n        // Look up the next variable in the chain to continue DFS. Prefer already-resolved entries.\n        const nextValue = this.#varResolved.get(next) ?? this.#parentVars[next];\n        /* c8 ignore next 1 */\n        if (typeof nextValue !== 'string') {\n            return void 0;\n        }\n        return this.#resolveCycleWarn(nextValue, visited, seenCycles);\n    }\n    /**\n     * Resolve fallback chains of the form: var(--a, var(--b, ...))\n     * - Only replaces the top-level var if it is resolved.\n     * - Leaves fallback intact if unresolved.\n     * - Recursively evaluates nested fallbacks if they are var(...).\n     * - Limits recursion depth to prevent cycles or stack overflow.\n     *\n     * @param   expr - CSS var expression to resolve.\n     *\n     * @param   depth - Recursion guard\n     *\n     * @returns Nested fallback resolution result.\n     */\n    #resolveNestedFallback(expr, depth = 0) {\n        /* c8 ignore next 1 */ // Prevent runaway recursion or malformed fallback chains.\n        if (depth > _b.#MAX_FALLBACK_DEPTH) {\n            return expr;\n        }\n        // Match top-level var(--x, fallback) expression. Non-greedy match on fallback to avoid trailing garbage.\n        const match = expr.match(_b.#CSS_VAR_FALLBACK_REGEX);\n        if (!match?.groups) {\n            return expr;\n        }\n        const { varName, fallback } = match.groups;\n        const resolved = this.#varResolved.get(varName);\n        // If the primary variable is resolved, return the substitution directly ignoring fallback.\n        if (resolved !== void 0) {\n            return resolved;\n        }\n        const fallbackTrimmed = fallback.trim();\n        // If fallback itself is a var(...) expression, recurse to evaluate it.\n        // The result is substituted in-place unless final resolution is still a var(...) chain.\n        if (fallbackTrimmed.startsWith('var(')) {\n            let nested = this.#resolveNestedFallback(fallbackTrimmed, depth + 1);\n            // If the nested result itself is a var(...) with a resolved variable, then resolve again.\n            const innerMatch = nested.match(_b.#CSS_VAR_REGEX);\n            if (innerMatch) {\n                const innerResolved = this.#varResolved.get(innerMatch[1]);\n                // If the result of recursion itself is a var(--x) with a known resolution, resolve it again.\n                if (innerResolved !== void 0) {\n                    nested = innerResolved;\n                }\n            }\n            return `var(${varName}, ${nested})`;\n        }\n        // Literal fallback: preserve the full var(...) expression with untouched fallback if not further resolvable.\n        return `var(${varName}, ${fallbackTrimmed})`;\n    }\n    /**\n     * Sets the parent selector defined CSS variable for resolution with additional cyclic dependency metrics.\n     *\n     * @param   name - CSS variable name\n     *\n     * @param   value - Value of target CSS variable.\n     */\n    #setCycleWarn(name, value) {\n        const resolved = this.#resolveCycleWarn(value, new Set([name]), this.#resolveData.seenCycles);\n        if (resolved !== void 0 && this.#varToProp.has(name) && !this.#varResolved.has(name)) {\n            this.#varResolved.set(name, resolved);\n        }\n    }\n}\n_b = ResolveVars;\n\nexport { StyleManager, StyleParse, StyleSheetResolve };\n//# sourceMappingURL=index.js.map\n","/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nexport { identity as linear } from '../internal/index.js';\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backInOut(t) {\n\tconst s = 1.70158 * 1.525;\n\tif ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s));\n\treturn 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backIn(t) {\n\tconst s = 1.70158;\n\treturn t * t * ((s + 1) * t - s);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backOut(t) {\n\tconst s = 1.70158;\n\treturn --t * t * ((s + 1) * t + s) + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceOut(t) {\n\tconst a = 4.0 / 11.0;\n\tconst b = 8.0 / 11.0;\n\tconst c = 9.0 / 10.0;\n\tconst ca = 4356.0 / 361.0;\n\tconst cb = 35442.0 / 1805.0;\n\tconst cc = 16061.0 / 1805.0;\n\tconst t2 = t * t;\n\treturn t < a\n\t\t? 7.5625 * t2\n\t\t: t < b\n\t\t? 9.075 * t2 - 9.9 * t + 3.4\n\t\t: t < c\n\t\t? ca * t2 - cb * t + cc\n\t\t: 10.8 * t * t - 20.52 * t + 10.72;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceInOut(t) {\n\treturn t < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0)) : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceIn(t) {\n\treturn 1.0 - bounceOut(1.0 - t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circInOut(t) {\n\tif ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\n\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circIn(t) {\n\treturn 1.0 - Math.sqrt(1.0 - t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circOut(t) {\n\treturn Math.sqrt(1 - --t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicInOut(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicIn(t) {\n\treturn t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicOut(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticInOut(t) {\n\treturn t < 0.5\n\t\t? 0.5 * Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n\t\t: 0.5 *\n\t\t\t\tMath.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n\t\t\t\tMath.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n\t\t\t\t1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticIn(t) {\n\treturn Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticOut(t) {\n\treturn Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoInOut(t) {\n\treturn t === 0.0 || t === 1.0\n\t\t? t\n\t\t: t < 0.5\n\t\t? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n\t\t: -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoIn(t) {\n\treturn t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoOut(t) {\n\treturn t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadInOut(t) {\n\tt /= 0.5;\n\tif (t < 1) return 0.5 * t * t;\n\tt--;\n\treturn -0.5 * (t * (t - 2) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadIn(t) {\n\treturn t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadOut(t) {\n\treturn -t * (t - 2.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartInOut(t) {\n\treturn t < 0.5 ? +8.0 * Math.pow(t, 4.0) : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartIn(t) {\n\treturn Math.pow(t, 4.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartOut(t) {\n\treturn Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintInOut(t) {\n\tif ((t *= 2) < 1) return 0.5 * t * t * t * t * t;\n\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintIn(t) {\n\treturn t * t * t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintOut(t) {\n\treturn --t * t * t * t * t + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineInOut(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineIn(t) {\n\tconst v = Math.cos(t * Math.PI * 0.5);\n\tif (Math.abs(v) < 1e-14) return 1;\n\telse return 1 - v;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineOut(t) {\n\treturn Math.sin((t * Math.PI) / 2);\n}\n","import * as svelteEasingFunc from 'svelte/easing';\n\n/**\r\n * Defines a read-only list of Svelte easing function names.\r\n *\r\n * @type {Readonly<import('./types').EasingFunctionName[]>}\r\n */\r\nconst easingList = Object.freeze([\r\n   'backIn',\r\n   'backInOut',\r\n   'backOut',\r\n   'bounceIn',\r\n   'bounceInOut',\r\n   'bounceOut',\r\n   'circIn',\r\n   'circInOut',\r\n   'circOut',\r\n   'cubicIn',\r\n   'cubicInOut',\r\n   'cubicOut',\r\n   'elasticIn',\r\n   'elasticInOut',\r\n   'elasticOut',\r\n   'expoIn',\r\n   'expoInOut',\r\n   'expoOut',\r\n   'linear',\r\n   'quadIn',\r\n   'quadInOut',\r\n   'quadOut',\r\n   'quartIn',\r\n   'quartInOut',\r\n   'quartOut',\r\n   'quintIn',\r\n   'quintInOut',\r\n   'quintOut',\r\n   'sineIn',\r\n   'sineInOut',\r\n   'sineOut'\r\n]);\n\n/**\r\n * @type {Readonly<{ [key in import('./types').EasingFunctionName]: import('#runtime/svelte/easing').EasingFunction }>}\r\n */\r\nconst easingFunc = svelteEasingFunc;\n\n/**\r\n * Performs a lookup for standard Svelte easing functions by name. For convenience if passing in a function it is\r\n * returned verbatim.\r\n *\r\n * @param {import('./types').EasingReference} easingRef - The name of a standard Svelte easing function or a supplied\r\n *        easing function.\r\n *\r\n * @param {object}   [options] - Optional parameters.\r\n *\r\n * @param {import('./types').EasingFunctionName | false} [options.default='linear'] - A default easing function by\r\n *        name to return. When specified as `false` no default fallback easing function is selected. The default value\r\n *        is `linear`.\r\n *\r\n * @returns {import('#runtime/svelte/easing').EasingFunction} The requested easing function.\r\n */\r\nfunction getEasingFunc(easingRef, options)\r\n{\r\n   if (typeof easingRef === 'function') { return easingRef; }\r\n\r\n   const easingFn = easingFunc[easingRef];\r\n\r\n   return easingFn ? easingFn : easingFunc[options?.default ?? 'linear'];\r\n}\n\nexport { easingFunc, easingList, getEasingFunc };\n//# sourceMappingURL=index.js.map\n","import { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { isObject, isIterable } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\r\n * Provides several helpful utility methods for accessibility and keyboard navigation.\r\n *\r\n * Note: Global debugging can be enabled by setting `A11yHelper.debug = true`.\r\n */\r\nclass A11yHelper\r\n{\r\n   /**\r\n    * You can set global focus debugging enabled by setting `A11yHelper.debug = true`.\r\n    *\r\n    * @type {boolean}\r\n    */\r\n   static #globalDebug = false;\r\n\r\n   /**\r\n    * @private\r\n    */\r\n   constructor()\r\n   {\r\n      throw new Error('A11yHelper constructor: This is a static class and should not be constructed.');\r\n   }\r\n\r\n   /**\r\n    * @returns {boolean} Global debugging enabled.\r\n    */\r\n   static get debug() { return this.#globalDebug; }\r\n\r\n   /**\r\n    * @param {boolean}  debug - Global debug enabled\r\n    */\r\n   static set debug(debug)\r\n   {\r\n      if (typeof debug !== 'boolean') { throw new TypeError(`'debug' is not a boolean.`); }\r\n\r\n      this.#globalDebug = debug;\r\n   }\r\n\r\n   /**\r\n    * Runs a media query to determine if the user / OS configuration is set up for reduced motion / animation.\r\n    *\r\n    * @returns {boolean} User prefers reduced motion.\r\n    */\r\n   static get prefersReducedMotion()\r\n   {\r\n      return globalThis?.matchMedia('(prefers-reduced-motion: reduce)')?.matches ?? false;\r\n   }\r\n\r\n   /**\r\n    * Apply focus to the HTMLElement / SVGElement targets in a given A11yFocusSource data object. An iterable list\r\n    * `options.focusEl` can contain HTMLElement / SVGElements or selector strings. If multiple focus targets are\r\n    * provided in a list then the first valid target found will be focused. If focus target is a string then a lookup\r\n    * via `document.querySelector` is performed. In this case you should provide a unique selector for the desired\r\n    * focus target.\r\n    *\r\n    * Note: The body of this method is postponed to the next clock tick to allow any changes in the DOM to occur that\r\n    * might alter focus targets before applying.\r\n    *\r\n    * @param {A11yFocusSource | { focusSource: A11yFocusSource }}   options - The focus options instance to apply.\r\n    */\r\n   static applyFocusSource(options)\r\n   {\r\n      if (!isObject(options))\r\n      {\r\n         if (this.debug) { console.debug(`A11yHelper.applyFocusSource debug - options is not an object: `, options); }\r\n\r\n         return;\r\n      }\r\n\r\n      // Handle the case of receiving an object with embedded `focusSource`.\r\n      const focusOpts = isObject(options?.focusSource) ? options.focusSource : options;\r\n\r\n      setTimeout(() =>\r\n      {\r\n         const debug = typeof focusOpts.debug === 'boolean' ? this.debug || focusOpts.debug : this.debug;\r\n\r\n         if (isIterable(focusOpts.focusEl))\r\n         {\r\n            if (debug)\r\n            {\r\n               console.debug(`A11yHelper.applyFocusSource debug - Attempting to apply focus target: `,\r\n                focusOpts.focusEl);\r\n            }\r\n\r\n            for (const target of focusOpts.focusEl)\r\n            {\r\n               if (target?.nodeType === Node.ELEMENT_NODE && target?.isConnected)\r\n               {\r\n                  target?.focus();\r\n                  if (debug)\r\n                  {\r\n                     console.debug(`A11yHelper.applyFocusSource debug - Applied focus to target: `, target);\r\n                  }\r\n                  break;\r\n               }\r\n               else if (typeof target === 'string')\r\n               {\r\n                  const element = document.querySelector(target);\r\n                  if (element?.nodeType === Node.ELEMENT_NODE && element?.isConnected)\r\n                  {\r\n                     element?.focus();\r\n                     if (debug)\r\n                     {\r\n                        console.debug(`A11yHelper.applyFocusSource debug - Applied focus to target: `, element);\r\n                     }\r\n                     break;\r\n                  }\r\n                  else if (debug)\r\n                  {\r\n                     console.debug(`A11yHelper.applyFocusSource debug - Could not query selector: `, target);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         else if (debug)\r\n         {\r\n            console.debug(`A11yHelper.applyFocusSource debug - No focus targets defined.`);\r\n         }\r\n      }, 0);\r\n   }\r\n\r\n   /**\r\n    * Returns first focusable element within a specified element.\r\n    *\r\n    * @param {Element | Document} [element=document] - Optional element to start query.\r\n    *\r\n    * @param {FocusableElementOptions} [options] - Optional parameters.\r\n    *\r\n    * @returns {FocusableElement} First focusable child element.\r\n    */\r\n   static getFirstFocusableElement(element = document, options)\r\n   {\r\n      const focusableElements = this.getFocusableElements(element, options);\r\n\r\n      return focusableElements.length > 0 ? focusableElements[0] : void 0;\r\n   }\r\n\r\n   /**\r\n    * Returns all focusable elements within a specified element.\r\n    *\r\n    * @param {Element | Document} [element=document] Optional element to start query.\r\n    *\r\n    * @param {FocusableElementOptions} [options] - Optional parameters.\r\n    *\r\n    * @returns {Array<FocusableElement>} Child keyboard focusable elements.\r\n    */\r\n   static getFocusableElements(element = document, { anchorHref = true, ignoreClasses, ignoreElements,\r\n    parentHidden = false, selectors } = {})\r\n   {\r\n      if (element?.nodeType !== Node.ELEMENT_NODE && element?.nodeType !== Node.DOCUMENT_NODE)\r\n      {\r\n         throw new TypeError(`'element' is not a HTMLElement, SVGElement, or Document instance.`);\r\n      }\r\n\r\n      if (typeof anchorHref !== 'boolean')\r\n      {\r\n         throw new TypeError(`'anchorHref' is not a boolean.`);\r\n      }\r\n\r\n      if (ignoreClasses !== void 0 && !isIterable(ignoreClasses))\r\n      {\r\n         throw new TypeError(`'ignoreClasses' is not an iterable list.`);\r\n      }\r\n\r\n      if (ignoreElements !== void 0 && !CrossWindow.isSet(ignoreElements))\r\n      {\r\n         throw new TypeError(`'ignoreElements' is not a Set.`);\r\n      }\r\n\r\n      if (selectors !== void 0 && typeof selectors !== 'string')\r\n      {\r\n         throw new TypeError(`'selectors' is not a string.`);\r\n      }\r\n\r\n      const selectorQuery = selectors ?? this.#getFocusableSelectors(anchorHref);\r\n\r\n      let allElements = [...element.querySelectorAll(selectorQuery)];\r\n\r\n      if (ignoreElements && ignoreClasses)\r\n      {\r\n         allElements = allElements.filter((el) =>\r\n         {\r\n            let hasIgnoreClass = false;\r\n            for (const ignoreClass of ignoreClasses)\r\n            {\r\n               if (el.classList.contains(ignoreClass))\r\n               {\r\n                  hasIgnoreClass = true;\r\n                  break;\r\n               }\r\n            }\r\n\r\n            return !hasIgnoreClass && !ignoreElements.has(el) && el.style.display !== 'none' &&\r\n             el.style.visibility !== 'hidden' && !el.hasAttribute('disabled') && !el.hasAttribute('inert') &&\r\n              el.getAttribute('aria-hidden') !== 'true';\r\n         });\r\n      }\r\n      else if (ignoreClasses)\r\n      {\r\n         allElements = allElements.filter((el) =>\r\n         {\r\n            let hasIgnoreClass = false;\r\n            for (const ignoreClass of ignoreClasses)\r\n            {\r\n               if (el.classList.contains(ignoreClass))\r\n               {\r\n                  hasIgnoreClass = true;\r\n                  break;\r\n               }\r\n            }\r\n\r\n            return !hasIgnoreClass && el.style.display !== 'none' && el.style.visibility !== 'hidden' &&\r\n             !el.hasAttribute('disabled') && !el.hasAttribute('inert') && el.getAttribute('aria-hidden') !== 'true';\r\n         });\r\n      }\r\n      else if (ignoreElements)\r\n      {\r\n         allElements = allElements.filter((el) =>\r\n         {\r\n            return !ignoreElements.has(el) && el.style.display !== 'none' && el.style.visibility !== 'hidden' &&\r\n             !el.hasAttribute('disabled') && !el.hasAttribute('inert') && el.getAttribute('aria-hidden') !== 'true';\r\n         });\r\n      }\r\n      else\r\n      {\r\n         allElements = allElements.filter((el) =>\r\n         {\r\n            return el.style.display !== 'none' && el.style.visibility !== 'hidden' && !el.hasAttribute('disabled') &&\r\n             !el.hasAttribute('inert') && el.getAttribute('aria-hidden') !== 'true';\r\n         });\r\n      }\r\n\r\n      if (parentHidden)\r\n      {\r\n         allElements = allElements.filter((el) =>\r\n         {\r\n            return !this.isParentHidden(el, element);\r\n         });\r\n      }\r\n\r\n      return allElements;\r\n   }\r\n\r\n   /**\r\n    * Returns the default focusable selectors query.\r\n    *\r\n    * @param {boolean}  [anchorHref=true] - When true anchors must have an HREF.\r\n    *\r\n    * @returns {string} Focusable selectors for `querySelectorAll`.\r\n    */\r\n   static #getFocusableSelectors(anchorHref = true)\r\n   {\r\n      return `button, [contenteditable=\"\"], [contenteditable=\"true\"], details summary:not([tabindex=\"-1\"]), embed, a${\r\n       anchorHref ? '[href]' : ''}, iframe, object, input:not([type=hidden]), select, textarea, ` +\r\n        `[tabindex]:not([tabindex=\"-1\"])`;\r\n   }\r\n\r\n   /**\r\n    * Gets a A11yFocusSource object from the given DOM event allowing for optional X / Y screen space overrides.\r\n    * Browsers (Firefox / Chrome) forwards a mouse event for the context menu keyboard button. Provides detection of\r\n    * when the context menu event is from the keyboard. Firefox as of (1/23) does not provide the correct screen space\r\n    * coordinates, so for keyboard context menu presses coordinates are generated from the centroid point of the\r\n    * element.\r\n    *\r\n    * A default fallback element or selector string may be provided to provide the focus target. If the event comes from\r\n    * the keyboard however the source focused element is inserted as the target with the fallback value appended to the\r\n    * list of focus targets. When A11yFocusSource is applied by {@link A11yHelper.applyFocusSource} the target focus\r\n    * list is iterated through until a connected target is found and focus applied.\r\n    *\r\n    * @param {object} options - Options\r\n    *\r\n    * @param {KeyboardEvent | MouseEvent}   [options.event] - The source DOM event.\r\n    *\r\n    * @param {boolean} [options.debug] - When true {@link A11yHelper.applyFocusSource} logs focus target data.\r\n    *\r\n    * @param {FocusableElement | string} [options.focusEl] - A specific HTMLElement / SVGElement or selector\r\n    *        string as the focus target.\r\n    *\r\n    * @param {number}   [options.x] - Used when an event isn't provided; integer of event source in screen space.\r\n    *\r\n    * @param {number}   [options.y] - Used when an event isn't provided; integer of event source in screen space.\r\n    *\r\n    * @returns {A11yFocusSource} A A11yFocusSource object.\r\n    *\r\n    * @see https://bugzilla.mozilla.org/show_bug.cgi?id=1426671\r\n    * @see https://bugzilla.mozilla.org/show_bug.cgi?id=314314\r\n    *\r\n    * @privateRemarks\r\n    * TODO: Evaluate / test against touch input devices.\r\n    */\r\n   static getFocusSource({ event, x, y, focusEl, debug = false })\r\n   {\r\n      if (focusEl !== void 0 && !this.isFocusSource(focusEl))\r\n      {\r\n         throw new TypeError(\r\n          `A11yHelper.getFocusSource error: 'focusEl' is not a HTMLElement, SVGElement, or string.`);\r\n      }\r\n\r\n      if (debug !== void 0 && typeof debug !== 'boolean')\r\n      {\r\n         throw new TypeError(`A11yHelper.getFocusSource error: 'debug' is not a boolean.`);\r\n      }\r\n\r\n      const debugEnabled = typeof debug === 'boolean' ? this.debug || debug : this.debug;\r\n\r\n      // Handle the case when no event is provided and x, y, or focusEl is explicitly defined.\r\n      if (event === void 0)\r\n      {\r\n         if (typeof x !== 'number')\r\n         {\r\n            throw new TypeError(`A11yHelper.getFocusSource error: 'event' not defined and 'x' is not a number.`);\r\n         }\r\n\r\n         if (typeof y !== 'number')\r\n         {\r\n            throw new TypeError(`A11yHelper.getFocusSource error: 'event' not defined and 'y' is not a number.`);\r\n         }\r\n\r\n         const result = {\r\n            debug,\r\n            focusEl: focusEl !== void 0 ? [focusEl] : void 0,\r\n            x,\r\n            y,\r\n         };\r\n\r\n         if (debugEnabled)\r\n         {\r\n            console.debug(`A11yHelper.getFocusSource debug: generated 'focusSource' without event: `, result);\r\n         }\r\n\r\n         return result;\r\n      }\r\n\r\n      // Perform duck typing on event constructor name.\r\n      if (event !== void 0 && !CrossWindow.isUserInputEvent(event))\r\n      {\r\n         throw new TypeError(\r\n          `A11yHelper.getFocusSource error: 'event' is not a KeyboardEvent, MouseEvent, or PointerEvent.`);\r\n      }\r\n\r\n      if (x !== void 0 && !Number.isFinite(x))\r\n      {\r\n         throw new TypeError(`A11yHelper.getFocusSource error: 'x' is not a number.`);\r\n      }\r\n\r\n      if (y !== void 0 && !Number.isFinite(y))\r\n      {\r\n         throw new TypeError(`A11yHelper.getFocusSource error: 'y' is not a number.`);\r\n      }\r\n\r\n      /** @type {Element} */\r\n      let targetEl;\r\n\r\n      if (event)\r\n      {\r\n         if (A11yHelper.isFocusable(event.target))\r\n         {\r\n            targetEl = event.target;\r\n            if (debugEnabled)\r\n            {\r\n               console.debug(`A11yHelper.getFocusSource debug: 'targetEl' set to event.target: `, targetEl);\r\n            }\r\n         }\r\n         else if (A11yHelper.isFocusable(event.currentTarget))\r\n         {\r\n            targetEl = event.currentTarget;\r\n            if (debugEnabled)\r\n            {\r\n               console.debug(`A11yHelper.getFocusSource debug: 'targetEl' set to event.currentTarget: `, targetEl);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            if (debugEnabled)\r\n            {\r\n               console.debug(\r\n                `A11yHelper.getFocusSource debug: 'event.target' / 'event.currentTarget' are not focusable.`);\r\n               console.debug(`A11yHelper.getFocusSource debug: 'event.target': `, event.target);\r\n               console.debug(`A11yHelper.getFocusSource debug: 'event.currentTarget': `, event.currentTarget);\r\n            }\r\n         }\r\n\r\n         if (targetEl)\r\n         {\r\n            if (targetEl?.nodeType !== Node.ELEMENT_NODE && typeof targetEl?.focus !== 'function')\r\n            {\r\n               throw new TypeError(`A11yHelper.getFocusSource error: 'targetEl' is not an HTMLElement or SVGElement.`);\r\n            }\r\n         }\r\n      }\r\n\r\n      const result = { debug };\r\n\r\n      // Perform duck typing on event constructor name.\r\n      if (CrossWindow.isPointerEvent(event))\r\n      {\r\n         // Firefox currently (11/24) does not correctly determine the location of a keyboard originated\r\n         // context menu location, so calculate position from middle of the event target.\r\n         // Firefox fires a mouse event for the context menu key.\r\n         if (event?.button !== 2 && event.type === 'contextmenu')\r\n         {\r\n            // Always include x / y coordinates and targetEl may not be defined.\r\n            const rectTarget = targetEl ?? event.target;\r\n\r\n            const rect = rectTarget.getBoundingClientRect();\r\n            result.source = 'keyboard';\r\n            result.x = x ?? rect.left + (rect.width / 2);\r\n            result.y = y ?? rect.top + (rect.height / 2);\r\n            result.focusEl = targetEl ? [targetEl] : [];\r\n\r\n            if (focusEl) { result.focusEl.push(focusEl); }\r\n         }\r\n         else\r\n         {\r\n            result.source = 'pointer';\r\n            result.x = x ?? event.pageX;\r\n            result.y = y ?? event.pageY;\r\n            result.focusEl = targetEl ? [targetEl] : [];\r\n\r\n            if (focusEl) { result.focusEl.push(focusEl); }\r\n         }\r\n      }\r\n      else\r\n      {\r\n         // Always include x / y coordinates and targetEl may not be defined.\r\n         const rectTarget = targetEl ?? event?.target;\r\n\r\n         if (rectTarget)\r\n         {\r\n            const rect = rectTarget.getBoundingClientRect();\r\n            result.source = 'keyboard';\r\n            result.x = x ?? rect.left + (rect.width / 2);\r\n            result.y = y ?? rect.top + (rect.height / 2);\r\n            result.focusEl = targetEl ? [targetEl] : [];\r\n         }\r\n\r\n         if (focusEl) { result.focusEl.push(focusEl); }\r\n      }\r\n\r\n      if (debugEnabled)\r\n      {\r\n         console.debug(`A11yHelper.getFocusSource debug: generated 'focusSource' with event: `, result);\r\n      }\r\n\r\n      return result;\r\n   }\r\n\r\n   /**\r\n    * Returns first focusable element within a specified element.\r\n    *\r\n    * @param {Element | Document} [element=document] - Optional element to start query.\r\n    *\r\n    * @param {FocusableElementOptions} [options] - Optional parameters.\r\n    *\r\n    * @returns {FocusableElement} Last focusable child element.\r\n    */\r\n   static getLastFocusableElement(element = document, options)\r\n   {\r\n      const focusableElements = this.getFocusableElements(element, options);\r\n\r\n      return focusableElements.length > 0 ? focusableElements[focusableElements.length - 1] : void 0;\r\n   }\r\n\r\n   /**\r\n    * Tests if the given element is focusable.\r\n    *\r\n    * Note: A special case for focus testing occurs when an element has `tabindex` of `-1` _and_ the\r\n    * `tjs-a11y-focusable` class.\r\n    *\r\n    * @param {unknown} el - Element to test.\r\n    *\r\n    * @param {object} [options] - Optional parameters.\r\n    *\r\n    * @param {boolean} [options.anchorHref=true] - When true anchors must have an HREF.\r\n    *\r\n    * @param {Iterable<string>} [options.ignoreClasses] - Iterable list of classes to ignore elements.\r\n    *\r\n    * @returns {boolean} Element is focusable.\r\n    */\r\n   static isFocusable(el, { anchorHref = true, ignoreClasses } = {})\r\n   {\r\n      if (el === void 0 || el === null || el?.hidden || !el?.isConnected || el?.nodeType !== Node.ELEMENT_NODE ||\r\n       typeof el?.focus !== 'function')\r\n      {\r\n         return false;\r\n      }\r\n\r\n      if (typeof anchorHref !== 'boolean')\r\n      {\r\n         throw new TypeError(`'anchorHref' is not a boolean.`);\r\n      }\r\n\r\n      if (ignoreClasses !== void 0 && !isIterable(ignoreClasses))\r\n      {\r\n         throw new TypeError(`'ignoreClasses' is not an iterable list.`);\r\n      }\r\n\r\n      const contenteditableAttr = el.getAttribute('contenteditable');\r\n      const contenteditableFocusable = typeof contenteditableAttr === 'string' &&\r\n       (contenteditableAttr === '' || contenteditableAttr === 'true');\r\n\r\n      const tabindexAttr = globalThis.parseInt(el.getAttribute('tabindex'));\r\n\r\n      // Focusable when `tabindex` is >= 0 or when `tabindex` is `-1` and the `tjs-a11y-focusable` class is present.\r\n      const tabindexFocusable = Number.isInteger(tabindexAttr) && (tabindexAttr >= 0 ||\r\n       (tabindexAttr === -1 && el.classList.contains('tjs-a11y-focusable')));\r\n\r\n      if (contenteditableFocusable || tabindexFocusable || CrossWindow.isFocusableHTMLElement(el))\r\n      {\r\n         // Ensure that an anchor element has an `href` attribute.\r\n         if (anchorHref && !tabindexFocusable && CrossWindow.isHTMLAnchorElement(el) &&\r\n          typeof el.getAttribute('href') !== 'string')\r\n         {\r\n            return false;\r\n         }\r\n\r\n         return el.style.display !== 'none' && el.style.visibility !== 'hidden' && !el.hasAttribute('disabled') &&\r\n          !el.hasAttribute('inert') && el.getAttribute('aria-hidden') !== 'true';\r\n      }\r\n\r\n      return false;\r\n   }\r\n\r\n   /**\r\n    * Convenience method to check if the given data is a valid focus source.\r\n    *\r\n    * @param {Element | EventTarget | string}   data - Either an HTMLElement, SVGElement, or selector string.\r\n    *\r\n    * @returns {boolean} Is valid focus source.\r\n    */\r\n   static isFocusSource(data)\r\n   {\r\n      return typeof data === 'string' || (data?.nodeType === Node.ELEMENT_NODE && typeof data?.focus === 'function');\r\n   }\r\n\r\n   /**\r\n    * Tests if the given `element` is a Element node and has a `focus` method.\r\n    *\r\n    * @param {unknown}  element - Element to test for focus method.\r\n    *\r\n    * @returns {element is FocusableElement} Whether the element has a focus method.\r\n    */\r\n   static isFocusTarget(element)\r\n   {\r\n      return element !== void 0 && element !== null && element?.nodeType === Node.ELEMENT_NODE &&\r\n       typeof element?.focus === 'function';\r\n   }\r\n\r\n   /**\r\n    * Perform a parent traversal from the current active element attempting to match the given element to test whether\r\n    * current active element is within that element.\r\n    *\r\n    * @param {Element}  element - An element to match in parent traversal from the active element.\r\n    *\r\n    * @returns {boolean} Whether there is focus within the given element.\r\n    */\r\n   static isFocusWithin(element)\r\n   {\r\n      if (!isObject(element) || element?.hidden || !element?.isConnected) { return false; }\r\n\r\n      let active = CrossWindow.getActiveElement(element);\r\n\r\n      if (!active) { return false; }\r\n\r\n      while (active)\r\n      {\r\n         if (active === element) { return true; }\r\n\r\n         active = active.parentElement;\r\n      }\r\n\r\n      return false;\r\n   }\r\n\r\n   /**\r\n    * Traverses the given element's parent elements to check if any parent has `offsetWidth` and `offsetHeight` of 0,\r\n    * indicating that a parent element is hidden. If a parent element is hidden, the given element is also considered\r\n    * hidden. This is a reasonably efficient check and can be enabled as a filter step in conjunction with focusable\r\n    * element detection methods like {@link A11yHelper.getFocusableElements}.\r\n    *\r\n    * @param {Element}  element - The starting element to check.\r\n    *\r\n    * @param {Element}  [stopElement] - The stopping parent element for traversal. If not defined, `document.body` is\r\n    *        used as the stopping element.\r\n    *\r\n    * @returns {boolean} `true` if a parent element of the given element is hidden; otherwise, `false`.\r\n    */\r\n   static isParentHidden(element, stopElement)\r\n   {\r\n      if (!CrossWindow.isElement(element)) { throw new TypeError(`'element' is not an Element.`); }\r\n\r\n      // Set `stopElement` to `document.body` if undefined.\r\n      stopElement = stopElement ?? CrossWindow.getDocument(element)?.body;\r\n\r\n      if (!CrossWindow.isElement(stopElement)) { throw new TypeError(`'stopElement' must be an Element.`); }\r\n\r\n      let current = element.parentElement;\r\n\r\n      while (current)\r\n      {\r\n         // Stop traversal if `stopElement` is reached.\r\n         if (current === stopElement) { break; }\r\n\r\n         // Check if the current parent is hidden by its size.\r\n         if (current.offsetWidth === 0 && current.offsetHeight === 0) { return true; }\r\n\r\n         current = current.parentElement;\r\n      }\r\n\r\n      // No parent is hidden.\r\n      return false;\r\n   }\r\n}\n\nexport { A11yHelper };\n//# sourceMappingURL=index.js.map\n","/**\r\n * Clamps a value between min / max values.\r\n *\r\n * @param {number}   value - Value to clamp.\r\n *\r\n * @param {number}   min - Minimum value.\r\n *\r\n * @param {number}   max - Maximum value.\r\n *\r\n * @returns {number} Clamped value.\r\n */\r\nfunction clamp(value = 0, min = 0, max = 0)\r\n{\r\n   return Math.min(Math.max(value, min), max);\r\n}\n\n/**\r\n * Converts the given number from degrees to radians.\r\n *\r\n * @param {number}   deg - Degree number to convert\r\n *\r\n * @returns {number} Degree as radians.\r\n */\r\nfunction degToRad(deg)\r\n{\r\n   return deg * (Math.PI / 180.0);\r\n}\n\n/**\r\n * Provides methods for retrieving pseudorandom values and other utilities using {@link Math.random}.\r\n */\r\nclass MathRandom\r\n{\r\n   /**\r\n    * Private constructor to prevent instantiation.\r\n    *\r\n    * @private\r\n    */\r\n   constructor()\r\n   {\r\n      throw new Error('This class should not be instantiated.');\r\n   }\r\n\r\n   /**\r\n    * Returns a random inclusive integer.\r\n    *\r\n    * @param {number}   min - Minimum value.\r\n    *\r\n    * @param {number}   max - Maximum value.\r\n    *\r\n    * @returns {number} Random inclusive integer.\r\n    */\r\n   static getInt(min, max)\r\n   {\r\n      min = Math.ceil(min);\r\n      max = Math.floor(max);\r\n\r\n      return Math.floor(Math.random() * (max - min + 1)) + min;\r\n   }\r\n\r\n   /**\r\n    * Returns a random floating point number between min (inclusive) and max (exclusive).\r\n    *\r\n    * @param {number}   min - Minimum value\r\n    *\r\n    * @param {number}   max - Maximum value.\r\n    *\r\n    * @returns {number} Random float.\r\n    */\r\n   static getFloat(min, max)\r\n   {\r\n      return Math.random() * (max - min) + min;\r\n   }\r\n\r\n   /**\r\n    * Returns a random boolean.\r\n    *\r\n    * @returns {boolean} Random boolean.\r\n    */\r\n   static getBoolean()\r\n   {\r\n      return Math.random() > 0.5;\r\n   }\r\n\r\n   /**\r\n    * Shuffles an array using the Fisher-Yates shuffle algorithm. Modifies the input array in place and returns it.\r\n    *\r\n    * @template T\r\n    *\r\n    * @param {T[]} arr - The array to shuffle.\r\n    *\r\n    * @returns {T[]} The shuffled array.\r\n    */\r\n   static shuffleArray(arr)\r\n   {\r\n      for (let i = arr.length - 1; i > 0; i--)\r\n      {\r\n         const j = MathRandom.getInt(0, i);\r\n         [arr[i], arr[j]] = [arr[j], arr[i]];\r\n      }\r\n\r\n      return arr;\r\n   }\r\n}\n\n/**\r\n * Converts the given number from radians to degrees.\r\n *\r\n * @param {number}   rad - Radian number to convert.\r\n *\r\n * @returns {number} Degree as radians.\r\n */\r\nfunction radToDeg(rad)\r\n{\r\n   return rad * (180.0 / Math.PI);\r\n}\n\nexport { MathRandom, clamp, degToRad, radToDeg };\n//# sourceMappingURL=index.js.map\n","/**\r\n * Performs linear interpolation between a start & end value by given amount between 0 - 1 inclusive.\r\n *\r\n * @param {number}   start - Start value.\r\n *\r\n * @param {number}   end - End value.\r\n *\r\n * @param {number}   amount - Current amount between 0 - 1 inclusive.\r\n *\r\n * @returns {number} Linear interpolated value between start & end.\r\n */\r\nfunction lerp(start, end, amount)\r\n{\r\n   return (1 - amount) * start + amount * end;\r\n}\n\nexport { lerp };\n//# sourceMappingURL=index.js.map\n","// gl-matrix - v4.0.0-beta.3 - A high performance matrix and vector library.\n// @author Brandon Jones\n// @author Colin MacKenzie IV\n// @license MIT (https://github.com/toji/gl-matrix/blob/master/LICENSE.md)\n\n// src/common/index.ts\nvar GLM_EPSILON = 1e-6;\n\n// gl-matrix - v4.0.0-beta.3 - A high performance matrix and vector library.\n// @author Brandon Jones\n// @author Colin MacKenzie IV\n// @license MIT (https://github.com/toji/gl-matrix/blob/master/LICENSE.md)\n\nvar Mat2 = class _Mat2 extends Float32Array {\n  static #IDENTITY_2X2 = new Float32Array([\n    1,\n    0,\n    0,\n    1\n  ]);\n  /**\n   * Create a {@link Mat2}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 4:\n        super(values);\n        break;\n      case 2:\n        super(values[0], values[1], 4);\n        break;\n      case 1:\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([\n            v,\n            v,\n            v,\n            v\n          ]);\n        } else {\n          super(v, 0, 4);\n        }\n        break;\n      default:\n        super(_Mat2.#IDENTITY_2X2);\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  /**\n   * A string representation of `this`\n   * Equivalent to `Mat2.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Mat2.str(this);\n  }\n  // ===================\n  // Instance methods\n  // ===================\n  /**\n   * Copy the values from another {@link Mat2} into `this`.\n   *\n   * @param a the source vector\n   * @returns `this`\n   * @category Methods\n   */\n  copy(a) {\n    this.set(a);\n    return this;\n  }\n  /**\n   * Set `this` to the identity matrix\n   * Equivalent to Mat2.identity(this)\n   *\n   * @returns `this`\n   * @category Methods\n   */\n  identity() {\n    this.set(_Mat2.#IDENTITY_2X2);\n    return this;\n  }\n  /**\n   * Multiplies this {@link Mat2} against another one\n   * Equivalent to `Mat2.multiply(this, this, b);`\n   *\n   * @param b - The second operand\n   * @returns `this`\n   * @category Methods\n   */\n  multiply(b) {\n    return _Mat2.multiply(this, this, b);\n  }\n  /**\n   * Alias for {@link Mat2.multiply}\n   * @category Methods\n   */\n  mul(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Transpose this {@link Mat2}\n   * Equivalent to `Mat2.transpose(this, this);`\n   *\n   * @returns `this`\n   * @category Methods\n   */\n  transpose() {\n    return _Mat2.transpose(this, this);\n  }\n  /**\n   * Inverts this {@link Mat2}\n   * Equivalent to `Mat4.invert(this, this);`\n   *\n   * @returns `this`\n   * @category Methods\n   */\n  invert() {\n    return _Mat2.invert(this, this);\n  }\n  /**\n   * Scales this {@link Mat2} by the dimensions in the given vec3 not using vectorization\n   * Equivalent to `Mat2.scale(this, this, v);`\n   *\n   * @param v - The {@link Vec2} to scale the matrix by\n   * @returns `this`\n   * @category Methods\n   */\n  scale(v) {\n    return _Mat2.scale(this, this, v);\n  }\n  /**\n   * Rotates this {@link Mat2} by the given angle around the given axis\n   * Equivalent to `Mat2.rotate(this, this, rad);`\n   *\n   * @param rad - the angle to rotate the matrix by\n   * @returns `this`\n   * @category Methods\n   */\n  rotate(rad) {\n    return _Mat2.rotate(this, this, rad);\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Mat2}.\n   */\n  static get BYTE_LENGTH() {\n    return 4 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new, identity {@link Mat2}\n   * @category Static\n   *\n   * @returns A new {@link Mat2}\n   */\n  static create() {\n    return new _Mat2();\n  }\n  /**\n   * Creates a new {@link Mat2} initialized with values from an existing matrix\n   * @category Static\n   *\n   * @param a - Matrix to clone\n   * @returns A new {@link Mat2}\n   */\n  static clone(a) {\n    return new _Mat2(a);\n  }\n  /**\n   * Copy the values from one {@link Mat2} to another\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @param a - Matrix to copy\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    return out;\n  }\n  /**\n   * Create a new {@link Mat2} with the given values\n   * @category Static\n   *\n   * @param values - Matrix components\n   * @returns A new {@link Mat2}\n   */\n  static fromValues(...values) {\n    return new _Mat2(...values);\n  }\n  /**\n   * Set the components of a {@link Mat2} to the given values\n   * @category Static\n   *\n   * @param out - The receiving matrix\n   * @param values - Matrix components\n   * @returns `out`\n   */\n  static set(out, ...values) {\n    out[0] = values[0];\n    out[1] = values[1];\n    out[2] = values[2];\n    out[3] = values[3];\n    return out;\n  }\n  /**\n   * Set a {@link Mat2} to the identity matrix\n   * @category Static\n   *\n   * @param out - The receiving matrix\n   * @returns `out`\n   */\n  static identity(out) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    return out;\n  }\n  /**\n   * Transpose the values of a {@link Mat2}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out`\n   */\n  static transpose(out, a) {\n    if (out === a) {\n      const a1 = a[1];\n      out[1] = a[2];\n      out[2] = a1;\n    } else {\n      out[0] = a[0];\n      out[1] = a[2];\n      out[2] = a[1];\n      out[3] = a[3];\n    }\n    return out;\n  }\n  /**\n   * Inverts a {@link Mat2}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out` or `null` if the matrix is not invertible\n   */\n  static invert(out, a) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    let det = a0 * a3 - a2 * a1;\n    if (!det) {\n      return null;\n    }\n    det = 1 / det;\n    out[0] = a3 * det;\n    out[1] = -a1 * det;\n    out[2] = -a2 * det;\n    out[3] = a0 * det;\n    return out;\n  }\n  /**\n   * Calculates the adjugate of a {@link Mat2}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out`\n   */\n  static adjoint(out, a) {\n    const a0 = a[0];\n    out[0] = a[3];\n    out[1] = -a[1];\n    out[2] = -a[2];\n    out[3] = a0;\n    return out;\n  }\n  /**\n   * Calculates the determinant of a {@link Mat2}\n   * @category Static\n   *\n   * @param a - the source matrix\n   * @returns determinant of a\n   */\n  static determinant(a) {\n    return a[0] * a[3] - a[2] * a[1];\n  }\n  /**\n   * Adds two {@link Mat2}'s\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static add(out, a, b) {\n    out[0] = a[0] + b[0];\n    out[1] = a[1] + b[1];\n    out[2] = a[2] + b[2];\n    out[3] = a[3] + b[3];\n    return out;\n  }\n  /**\n   * Subtracts matrix b from matrix a\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static subtract(out, a, b) {\n    out[0] = a[0] - b[0];\n    out[1] = a[1] - b[1];\n    out[2] = a[2] - b[2];\n    out[3] = a[3] - b[3];\n    return out;\n  }\n  /**\n   * Alias for {@link Mat2.subtract}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sub(out, a, b) {\n    return out;\n  }\n  /**\n   * Multiplies two {@link Mat2}s\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static multiply(out, a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    const b3 = b[3];\n    out[0] = a0 * b0 + a2 * b1;\n    out[1] = a1 * b0 + a3 * b1;\n    out[2] = a0 * b2 + a2 * b3;\n    out[3] = a1 * b2 + a3 * b3;\n    return out;\n  }\n  /**\n   * Alias for {@link Mat2.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return out;\n  }\n  /**\n   * Rotates a {@link Mat2} by the given angle\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to rotate\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static rotate(out, a, rad) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = a0 * c + a2 * s;\n    out[1] = a1 * c + a3 * s;\n    out[2] = a0 * -s + a2 * c;\n    out[3] = a1 * -s + a3 * c;\n    return out;\n  }\n  /**\n   * Scales the {@link Mat2} by the dimensions in the given {@link Vec2}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to scale\n   * @param v - the {@link Vec2} to scale the matrix by\n   * @returns `out`\n   **/\n  static scale(out, a, v) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const v0 = v[0];\n    const v1 = v[1];\n    out[0] = a0 * v0;\n    out[1] = a1 * v0;\n    out[2] = a2 * v1;\n    out[3] = a3 * v1;\n    return out;\n  }\n  /**\n   * Creates a {@link Mat2} from a given angle around a given axis\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat2.identity(dest);\n   *   mat2.rotate(dest, dest, rad);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat2} receiving operation result\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static fromRotation(out, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = c;\n    out[1] = s;\n    out[2] = -s;\n    out[3] = c;\n    return out;\n  }\n  /**\n   * Creates a {@link Mat2} from a vector scaling\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat2.identity(dest);\n   *   mat2.scale(dest, dest, vec);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat2} receiving operation result\n   * @param v - Scaling vector\n   * @returns `out`\n   */\n  static fromScaling(out, v) {\n    out[0] = v[0];\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = v[1];\n    return out;\n  }\n  /**\n   * Returns Frobenius norm of a {@link Mat2}\n   * @category Static\n   *\n   * @param a - the matrix to calculate Frobenius norm of\n   * @returns Frobenius norm\n   */\n  static frob(a) {\n    return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]);\n  }\n  /**\n   * Multiply each element of a {@link Mat2} by a scalar.\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to scale\n   * @param b - amount to scale the matrix's elements by\n   * @returns `out`\n   */\n  static multiplyScalar(out, a, b) {\n    out[0] = a[0] * b;\n    out[1] = a[1] * b;\n    out[2] = a[2] * b;\n    out[3] = a[3] * b;\n    return out;\n  }\n  /**\n   * Adds two {@link Mat2}'s after multiplying each element of the second operand by a scalar value.\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param scale - the amount to scale b's elements by before adding\n   * @returns `out`\n   */\n  static multiplyScalarAndAdd(out, a, b, scale) {\n    out[0] = a[0] + b[0] * scale;\n    out[1] = a[1] + b[1] * scale;\n    out[2] = a[2] + b[2] * scale;\n    out[3] = a[3] + b[3] * scale;\n    return out;\n  }\n  /**\n   * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix\n   * @category Static\n   *\n   * @param L - the lower triangular matrix\n   * @param D - the diagonal matrix\n   * @param U - the upper triangular matrix\n   * @param a - the input matrix to factorize\n   */\n  static LDU(L, D, U, a) {\n    L[2] = a[2] / a[0];\n    U[0] = a[0];\n    U[1] = a[1];\n    U[3] = a[3] - L[2] * U[1];\n    return [L, D, U];\n  }\n  /**\n   * Returns whether two {@link Mat2}s have exactly the same elements in the same position (when compared with ===)\n   * @category Static\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns True if the matrices are equal, false otherwise.\n   */\n  static exactEquals(a, b) {\n    return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n  }\n  /**\n   * Returns whether two {@link Mat2}s have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns True if the matrices are equal, false otherwise.\n   */\n  static equals(a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    const b3 = b[3];\n    return Math.abs(a0 - b0) <= GLM_EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= GLM_EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= GLM_EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= GLM_EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3));\n  }\n  /**\n   * Returns a string representation of a {@link Mat2}\n   * @category Static\n   *\n   * @param a - matrix to represent as a string\n   * @returns string representation of the matrix\n   */\n  static str(a) {\n    return `Mat2(${a.join(\", \")})`;\n  }\n};\nMat2.prototype.mul = Mat2.prototype.multiply;\nMat2.mul = Mat2.multiply;\nMat2.sub = Mat2.subtract;\nvar Mat2d = class _Mat2d extends Float32Array {\n  static #IDENTITY_2X3 = new Float32Array([\n    1,\n    0,\n    0,\n    1,\n    0,\n    0\n  ]);\n  /**\n   * Create a {@link Mat2}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 6:\n        super(values);\n        break;\n      case 2:\n        super(values[0], values[1], 6);\n        break;\n      case 1:\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([\n            v,\n            v,\n            v,\n            v,\n            v,\n            v\n          ]);\n        } else {\n          super(v, 0, 6);\n        }\n        break;\n      default:\n        super(_Mat2d.#IDENTITY_2X3);\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  /**\n   * A string representation of `this`\n   * Equivalent to `Mat2d.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Mat2d.str(this);\n  }\n  // ===================\n  // Instances methods\n  // ===================\n  /**\n   * Copy the values from another {@link Mat2d} into `this`.\n   * @category Methods\n   *\n   * @param a the source vector\n   * @returns `this`\n   */\n  copy(a) {\n    this.set(a);\n    return this;\n  }\n  /**\n   * Set `this` to the identity matrix\n   * Equivalent to Mat2d.identity(this)\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  identity() {\n    this.set(_Mat2d.#IDENTITY_2X3);\n    return this;\n  }\n  /**\n   * Multiplies this {@link Mat2d} against another one\n   * Equivalent to `Mat2d.multiply(this, this, b);`\n   * @category Methods\n   *\n   * @param out - The receiving Matrix\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `this`\n   */\n  multiply(b) {\n    return _Mat2d.multiply(this, this, b);\n  }\n  /**\n   * Alias for {@link Mat2d.multiply}\n   * @category Methods\n   */\n  mul(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Translate this {@link Mat2d} by the given vector\n   * Equivalent to `Mat2d.translate(this, this, v);`\n   * @category Methods\n   *\n   * @param v - The {@link Vec2} to translate by\n   * @returns `this`\n   */\n  translate(v) {\n    return _Mat2d.translate(this, this, v);\n  }\n  /**\n   * Rotates this {@link Mat2d} by the given angle around the given axis\n   * Equivalent to `Mat2d.rotate(this, this, rad);`\n   * @category Methods\n   *\n   * @param rad - the angle to rotate the matrix by\n   * @returns `this`\n   */\n  rotate(rad) {\n    return _Mat2d.rotate(this, this, rad);\n  }\n  /**\n   * Scales this {@link Mat2d} by the dimensions in the given vec3 not using vectorization\n   * Equivalent to `Mat2d.scale(this, this, v);`\n   * @category Methods\n   *\n   * @param v - The {@link Vec2} to scale the matrix by\n   * @returns `this`\n   */\n  scale(v) {\n    return _Mat2d.scale(this, this, v);\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Mat2d}.\n   */\n  static get BYTE_LENGTH() {\n    return 6 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new, identity {@link Mat2d}\n   * @category Static\n   *\n   * @returns A new {@link Mat2d}\n   */\n  static create() {\n    return new _Mat2d();\n  }\n  /**\n   * Creates a new {@link Mat2d} initialized with values from an existing matrix\n   * @category Static\n   *\n   * @param a - Matrix to clone\n   * @returns A new {@link Mat2d}\n   */\n  static clone(a) {\n    return new _Mat2d(a);\n  }\n  /**\n   * Copy the values from one {@link Mat2d} to another\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @param a - Matrix to copy\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[4] = a[4];\n    out[5] = a[5];\n    return out;\n  }\n  /**\n   * Create a new {@link Mat2d} with the given values\n   * @category Static\n   *\n   * @param values - Matrix components\n   * @returns A new {@link Mat2d}\n   */\n  static fromValues(...values) {\n    return new _Mat2d(...values);\n  }\n  /**\n   * Set the components of a {@link Mat2d} to the given values\n   * @category Static\n   *\n   * @param out - The receiving matrix\n   * @param values - Matrix components\n   * @returns `out`\n   */\n  static set(out, ...values) {\n    out[0] = values[0];\n    out[1] = values[1];\n    out[2] = values[2];\n    out[3] = values[3];\n    out[4] = values[4];\n    out[5] = values[5];\n    return out;\n  }\n  /**\n   * Set a {@link Mat2d} to the identity matrix\n   * @category Static\n   *\n   * @param out - The receiving matrix\n   * @returns `out`\n   */\n  static identity(out) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    out[4] = 0;\n    out[5] = 0;\n    return out;\n  }\n  /**\n   * Inverts a {@link Mat2d}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out` or `null` if the matrix is not invertible\n   */\n  static invert(out, a) {\n    const aa = a[0];\n    const ab = a[1];\n    const ac = a[2];\n    const ad = a[3];\n    const atx = a[4];\n    const aty = a[5];\n    let det = aa * ad - ab * ac;\n    if (!det) {\n      return null;\n    }\n    det = 1 / det;\n    out[0] = ad * det;\n    out[1] = -ab * det;\n    out[2] = -ac * det;\n    out[3] = aa * det;\n    out[4] = (ac * aty - ad * atx) * det;\n    out[5] = (ab * atx - aa * aty) * det;\n    return out;\n  }\n  /**\n   * Calculates the determinant of a {@link Mat2d}\n   * @category Static\n   *\n   * @param a - the source matrix\n   * @returns determinant of a\n   */\n  static determinant(a) {\n    return a[0] * a[3] - a[1] * a[2];\n  }\n  /**\n   * Adds two {@link Mat2d}'s\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static add(out, a, b) {\n    out[0] = a[0] + b[0];\n    out[1] = a[1] + b[1];\n    out[2] = a[2] + b[2];\n    out[3] = a[3] + b[3];\n    out[4] = a[4] + b[4];\n    out[5] = a[5] + b[5];\n    return out;\n  }\n  /**\n   * Subtracts matrix b from matrix a\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static subtract(out, a, b) {\n    out[0] = a[0] - b[0];\n    out[1] = a[1] - b[1];\n    out[2] = a[2] - b[2];\n    out[3] = a[3] - b[3];\n    out[4] = a[4] - b[4];\n    out[5] = a[5] - b[5];\n    return out;\n  }\n  /**\n   * Alias for {@link Mat2d.subtract}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sub(out, a, b) {\n    return out;\n  }\n  /**\n   * Multiplies two {@link Mat2d}s\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static multiply(out, a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const a4 = a[4];\n    const a5 = a[5];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    const b3 = b[3];\n    const b4 = b[4];\n    const b5 = b[5];\n    out[0] = a0 * b0 + a2 * b1;\n    out[1] = a1 * b0 + a3 * b1;\n    out[2] = a0 * b2 + a2 * b3;\n    out[3] = a1 * b2 + a3 * b3;\n    out[4] = a0 * b4 + a2 * b5 + a4;\n    out[5] = a1 * b4 + a3 * b5 + a5;\n    return out;\n  }\n  /**\n   * Alias for {@link Mat2d.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return out;\n  }\n  /**\n   * Translate a {@link Mat2d} by the given vector\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to translate\n   * @param v - vector to translate by\n   * @returns `out`\n   */\n  static translate(out, a, v) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const a4 = a[4];\n    const a5 = a[5];\n    const v0 = v[0];\n    const v1 = v[1];\n    out[0] = a0;\n    out[1] = a1;\n    out[2] = a2;\n    out[3] = a3;\n    out[4] = a0 * v0 + a2 * v1 + a4;\n    out[5] = a1 * v0 + a3 * v1 + a5;\n    return out;\n  }\n  /**\n   * Rotates a {@link Mat2d} by the given angle\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to rotate\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static rotate(out, a, rad) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const a4 = a[4];\n    const a5 = a[5];\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = a0 * c + a2 * s;\n    out[1] = a1 * c + a3 * s;\n    out[2] = a0 * -s + a2 * c;\n    out[3] = a1 * -s + a3 * c;\n    out[4] = a4;\n    out[5] = a5;\n    return out;\n  }\n  /**\n   * Scales the {@link Mat2d} by the dimensions in the given {@link Vec2}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to scale\n   * @param v - the {@link Vec2} to scale the matrix by\n   * @returns `out`\n   **/\n  static scale(out, a, v) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const a4 = a[4];\n    const a5 = a[5];\n    const v0 = v[0];\n    const v1 = v[1];\n    out[0] = a0 * v0;\n    out[1] = a1 * v0;\n    out[2] = a2 * v1;\n    out[3] = a3 * v1;\n    out[4] = a4;\n    out[5] = a5;\n    return out;\n  }\n  // TODO: Got to fromRotation\n  /**\n   * Creates a {@link Mat2d} from a vector translation\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   Mat2d.identity(dest);\n   *   Mat2d.translate(dest, dest, vec);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat2d} receiving operation result\n   * @param v - Translation vector\n   * @returns `out`\n   */\n  static fromTranslation(out, v) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    out[4] = v[0];\n    out[5] = v[1];\n    return out;\n  }\n  /**\n   * Creates a {@link Mat2d} from a given angle around a given axis\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   Mat2d.identity(dest);\n   *   Mat2d.rotate(dest, dest, rad);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat2d} receiving operation result\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static fromRotation(out, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = c;\n    out[1] = s;\n    out[2] = -s;\n    out[3] = c;\n    out[4] = 0;\n    out[5] = 0;\n    return out;\n  }\n  /**\n   * Creates a {@link Mat2d} from a vector scaling\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   Mat2d.identity(dest);\n   *   Mat2d.scale(dest, dest, vec);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat2d} receiving operation result\n   * @param v - Scaling vector\n   * @returns `out`\n   */\n  static fromScaling(out, v) {\n    out[0] = v[0];\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = v[1];\n    out[4] = 0;\n    out[5] = 0;\n    return out;\n  }\n  /**\n   * Returns Frobenius norm of a {@link Mat2d}\n   * @category Static\n   *\n   * @param a - the matrix to calculate Frobenius norm of\n   * @returns Frobenius norm\n   */\n  static frob(a) {\n    return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + 1);\n  }\n  /**\n   * Multiply each element of a {@link Mat2d} by a scalar.\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to scale\n   * @param b - amount to scale the matrix's elements by\n   * @returns `out`\n   */\n  static multiplyScalar(out, a, b) {\n    out[0] = a[0] * b;\n    out[1] = a[1] * b;\n    out[2] = a[2] * b;\n    out[3] = a[3] * b;\n    out[4] = a[4] * b;\n    out[5] = a[5] * b;\n    return out;\n  }\n  /**\n   * Adds two {@link Mat2d}'s after multiplying each element of the second operand by a scalar value.\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param scale - the amount to scale b's elements by before adding\n   * @returns `out`\n   */\n  static multiplyScalarAndAdd(out, a, b, scale) {\n    out[0] = a[0] + b[0] * scale;\n    out[1] = a[1] + b[1] * scale;\n    out[2] = a[2] + b[2] * scale;\n    out[3] = a[3] + b[3] * scale;\n    out[4] = a[4] + b[4] * scale;\n    out[5] = a[5] + b[5] * scale;\n    return out;\n  }\n  /**\n   * Returns whether two {@link Mat2d}s have exactly the same elements in the same position (when compared with ===).\n   * @category Static\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns True if the matrices are equal, false otherwise.\n   */\n  static exactEquals(a, b) {\n    return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5];\n  }\n  /**\n   * Returns whether two {@link Mat2d}s have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns True if the matrices are equal, false otherwise.\n   */\n  static equals(a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const a4 = a[4];\n    const a5 = a[5];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    const b3 = b[3];\n    const b4 = b[4];\n    const b5 = b[5];\n    return Math.abs(a0 - b0) <= GLM_EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= GLM_EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= GLM_EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= GLM_EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= GLM_EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= GLM_EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5));\n  }\n  /**\n   * Returns a string representation of a {@link Mat2d}\n   * @category Static\n   *\n   * @param a - matrix to represent as a string\n   * @returns string representation of the matrix\n   */\n  static str(a) {\n    return `Mat2d(${a.join(\", \")})`;\n  }\n};\nMat2d.mul = Mat2d.multiply;\nMat2d.sub = Mat2d.subtract;\nvar Mat3 = class _Mat3 extends Float32Array {\n  static #IDENTITY_3X3 = new Float32Array([\n    1,\n    0,\n    0,\n    0,\n    1,\n    0,\n    0,\n    0,\n    1\n  ]);\n  /**\n   * Create a {@link Mat3}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 9:\n        super(values);\n        break;\n      case 2:\n        super(values[0], values[1], 9);\n        break;\n      case 1:\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v\n          ]);\n        } else {\n          super(v, 0, 9);\n        }\n        break;\n      default:\n        super(_Mat3.#IDENTITY_3X3);\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  /**\n   * A string representation of `this`\n   * Equivalent to `Mat3.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Mat3.str(this);\n  }\n  // ===================\n  // Instance methods\n  // ===================\n  /**\n   * Copy the values from another {@link Mat3} into `this`.\n   * @category Methods\n   *\n   * @param a the source vector\n   * @returns `this`\n   */\n  copy(a) {\n    this.set(a);\n    return this;\n  }\n  /**\n   * Set `this` to the identity matrix\n   * Equivalent to Mat3.identity(this)\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  identity() {\n    this.set(_Mat3.#IDENTITY_3X3);\n    return this;\n  }\n  /**\n   * Multiplies this {@link Mat3} against another one\n   * Equivalent to `Mat3.multiply(this, this, b);`\n   * @category Methods\n   *\n   * @param out - The receiving Matrix\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `this`\n   */\n  multiply(b) {\n    return _Mat3.multiply(this, this, b);\n  }\n  /**\n   * Alias for {@link Mat3.multiply}\n   * @category Methods\n   */\n  mul(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Transpose this {@link Mat3}\n   * Equivalent to `Mat3.transpose(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  transpose() {\n    return _Mat3.transpose(this, this);\n  }\n  /**\n   * Inverts this {@link Mat3}\n   * Equivalent to `Mat4.invert(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  invert() {\n    return _Mat3.invert(this, this);\n  }\n  /**\n   * Translate this {@link Mat3} by the given vector\n   * Equivalent to `Mat3.translate(this, this, v);`\n   * @category Methods\n   *\n   * @param v - The {@link Vec2} to translate by\n   * @returns `this`\n   */\n  translate(v) {\n    return _Mat3.translate(this, this, v);\n  }\n  /**\n   * Rotates this {@link Mat3} by the given angle around the given axis\n   * Equivalent to `Mat3.rotate(this, this, rad);`\n   * @category Methods\n   *\n   * @param rad - the angle to rotate the matrix by\n   * @returns `this`\n   */\n  rotate(rad) {\n    return _Mat3.rotate(this, this, rad);\n  }\n  /**\n   * Scales this {@link Mat3} by the dimensions in the given vec3 not using vectorization\n   * Equivalent to `Mat3.scale(this, this, v);`\n   * @category Methods\n   *\n   * @param v - The {@link Vec2} to scale the matrix by\n   * @returns `this`\n   */\n  scale(v) {\n    return _Mat3.scale(this, this, v);\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Mat3}.\n   */\n  static get BYTE_LENGTH() {\n    return 9 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new, identity {@link Mat3}\n   * @category Static\n   *\n   * @returns A new {@link Mat3}\n   */\n  static create() {\n    return new _Mat3();\n  }\n  /**\n   * Creates a new {@link Mat3} initialized with values from an existing matrix\n   * @category Static\n   *\n   * @param a - Matrix to clone\n   * @returns A new {@link Mat3}\n   */\n  static clone(a) {\n    return new _Mat3(a);\n  }\n  /**\n   * Copy the values from one {@link Mat3} to another\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @param a - Matrix to copy\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[4] = a[4];\n    out[5] = a[5];\n    out[6] = a[6];\n    out[7] = a[7];\n    out[8] = a[8];\n    return out;\n  }\n  /**\n   * Create a new {@link Mat3} with the given values\n   * @category Static\n   *\n   * @param values - Matrix components\n   * @returns A new {@link Mat3}\n   */\n  static fromValues(...values) {\n    return new _Mat3(...values);\n  }\n  /**\n   * Set the components of a {@link Mat3} to the given values\n   * @category Static\n   *\n   * @param out - The receiving matrix\n   * @param values - Matrix components\n   * @returns `out`\n   */\n  static set(out, ...values) {\n    out[0] = values[0];\n    out[1] = values[1];\n    out[2] = values[2];\n    out[3] = values[3];\n    out[4] = values[4];\n    out[5] = values[5];\n    out[6] = values[6];\n    out[7] = values[7];\n    out[8] = values[8];\n    return out;\n  }\n  /**\n   * Set a {@link Mat3} to the identity matrix\n   * @category Static\n   *\n   * @param out - The receiving matrix\n   * @returns `out`\n   */\n  static identity(out) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 1;\n    out[5] = 0;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 1;\n    return out;\n  }\n  /**\n   * Transpose the values of a {@link Mat3}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out`\n   */\n  static transpose(out, a) {\n    if (out === a) {\n      const a01 = a[1], a02 = a[2], a12 = a[5];\n      out[1] = a[3];\n      out[2] = a[6];\n      out[3] = a01;\n      out[5] = a[7];\n      out[6] = a02;\n      out[7] = a12;\n    } else {\n      out[0] = a[0];\n      out[1] = a[3];\n      out[2] = a[6];\n      out[3] = a[1];\n      out[4] = a[4];\n      out[5] = a[7];\n      out[6] = a[2];\n      out[7] = a[5];\n      out[8] = a[8];\n    }\n    return out;\n  }\n  /**\n   * Inverts a {@link Mat3}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out` or `null` if the matrix is not invertible\n   */\n  static invert(out, a) {\n    const a00 = a[0], a01 = a[1], a02 = a[2];\n    const a10 = a[3], a11 = a[4], a12 = a[5];\n    const a20 = a[6], a21 = a[7], a22 = a[8];\n    const b01 = a22 * a11 - a12 * a21;\n    const b11 = -a22 * a10 + a12 * a20;\n    const b21 = a21 * a10 - a11 * a20;\n    let det = a00 * b01 + a01 * b11 + a02 * b21;\n    if (!det) {\n      return null;\n    }\n    det = 1 / det;\n    out[0] = b01 * det;\n    out[1] = (-a22 * a01 + a02 * a21) * det;\n    out[2] = (a12 * a01 - a02 * a11) * det;\n    out[3] = b11 * det;\n    out[4] = (a22 * a00 - a02 * a20) * det;\n    out[5] = (-a12 * a00 + a02 * a10) * det;\n    out[6] = b21 * det;\n    out[7] = (-a21 * a00 + a01 * a20) * det;\n    out[8] = (a11 * a00 - a01 * a10) * det;\n    return out;\n  }\n  /**\n   * Calculates the adjugate of a {@link Mat3}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out`\n   */\n  static adjoint(out, a) {\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a10 = a[3];\n    const a11 = a[4];\n    const a12 = a[5];\n    const a20 = a[6];\n    const a21 = a[7];\n    const a22 = a[8];\n    out[0] = a11 * a22 - a12 * a21;\n    out[1] = a02 * a21 - a01 * a22;\n    out[2] = a01 * a12 - a02 * a11;\n    out[3] = a12 * a20 - a10 * a22;\n    out[4] = a00 * a22 - a02 * a20;\n    out[5] = a02 * a10 - a00 * a12;\n    out[6] = a10 * a21 - a11 * a20;\n    out[7] = a01 * a20 - a00 * a21;\n    out[8] = a00 * a11 - a01 * a10;\n    return out;\n  }\n  /**\n   * Calculates the determinant of a {@link Mat3}\n   * @category Static\n   *\n   * @param a - the source matrix\n   * @returns determinant of a\n   */\n  static determinant(a) {\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a10 = a[3];\n    const a11 = a[4];\n    const a12 = a[5];\n    const a20 = a[6];\n    const a21 = a[7];\n    const a22 = a[8];\n    return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n  }\n  /**\n   * Adds two {@link Mat3}'s\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static add(out, a, b) {\n    out[0] = a[0] + b[0];\n    out[1] = a[1] + b[1];\n    out[2] = a[2] + b[2];\n    out[3] = a[3] + b[3];\n    out[4] = a[4] + b[4];\n    out[5] = a[5] + b[5];\n    out[6] = a[6] + b[6];\n    out[7] = a[7] + b[7];\n    out[8] = a[8] + b[8];\n    return out;\n  }\n  /**\n   * Subtracts matrix b from matrix a\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static subtract(out, a, b) {\n    out[0] = a[0] - b[0];\n    out[1] = a[1] - b[1];\n    out[2] = a[2] - b[2];\n    out[3] = a[3] - b[3];\n    out[4] = a[4] - b[4];\n    out[5] = a[5] - b[5];\n    out[6] = a[6] - b[6];\n    out[7] = a[7] - b[7];\n    out[8] = a[8] - b[8];\n    return out;\n  }\n  /**\n   * Alias for {@link Mat3.subtract}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sub(out, a, b) {\n    return out;\n  }\n  /**\n   * Multiplies two {@link Mat3}s\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static multiply(out, a, b) {\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a10 = a[3];\n    const a11 = a[4];\n    const a12 = a[5];\n    const a20 = a[6];\n    const a21 = a[7];\n    const a22 = a[8];\n    let b0 = b[0];\n    let b1 = b[1];\n    let b2 = b[2];\n    out[0] = b0 * a00 + b1 * a10 + b2 * a20;\n    out[1] = b0 * a01 + b1 * a11 + b2 * a21;\n    out[2] = b0 * a02 + b1 * a12 + b2 * a22;\n    b0 = b[3];\n    b1 = b[4];\n    b2 = b[5];\n    out[3] = b0 * a00 + b1 * a10 + b2 * a20;\n    out[4] = b0 * a01 + b1 * a11 + b2 * a21;\n    out[5] = b0 * a02 + b1 * a12 + b2 * a22;\n    b0 = b[6];\n    b1 = b[7];\n    b2 = b[8];\n    out[6] = b0 * a00 + b1 * a10 + b2 * a20;\n    out[7] = b0 * a01 + b1 * a11 + b2 * a21;\n    out[8] = b0 * a02 + b1 * a12 + b2 * a22;\n    return out;\n  }\n  /**\n   * Alias for {@link Mat3.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return out;\n  }\n  /**\n   * Translate a {@link Mat3} by the given vector\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to translate\n   * @param v - vector to translate by\n   * @returns `out`\n   */\n  static translate(out, a, v) {\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a10 = a[3];\n    const a11 = a[4];\n    const a12 = a[5];\n    const a20 = a[6];\n    const a21 = a[7];\n    const a22 = a[8];\n    const x = v[0];\n    const y = v[1];\n    out[0] = a00;\n    out[1] = a01;\n    out[2] = a02;\n    out[3] = a10;\n    out[4] = a11;\n    out[5] = a12;\n    out[6] = x * a00 + y * a10 + a20;\n    out[7] = x * a01 + y * a11 + a21;\n    out[8] = x * a02 + y * a12 + a22;\n    return out;\n  }\n  /**\n   * Rotates a {@link Mat3} by the given angle\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to rotate\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static rotate(out, a, rad) {\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a10 = a[3];\n    const a11 = a[4];\n    const a12 = a[5];\n    const a20 = a[6];\n    const a21 = a[7];\n    const a22 = a[8];\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = c * a00 + s * a10;\n    out[1] = c * a01 + s * a11;\n    out[2] = c * a02 + s * a12;\n    out[3] = c * a10 - s * a00;\n    out[4] = c * a11 - s * a01;\n    out[5] = c * a12 - s * a02;\n    out[6] = a20;\n    out[7] = a21;\n    out[8] = a22;\n    return out;\n  }\n  /**\n   * Scales the {@link Mat3} by the dimensions in the given {@link Vec2}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to scale\n   * @param v - the {@link Vec2} to scale the matrix by\n   * @returns `out`\n   **/\n  static scale(out, a, v) {\n    const x = v[0];\n    const y = v[1];\n    out[0] = x * a[0];\n    out[1] = x * a[1];\n    out[2] = x * a[2];\n    out[3] = y * a[3];\n    out[4] = y * a[4];\n    out[5] = y * a[5];\n    out[6] = a[6];\n    out[7] = a[7];\n    out[8] = a[8];\n    return out;\n  }\n  /**\n   * Creates a {@link Mat3} from a vector translation\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat3.identity(dest);\n   *   mat3.translate(dest, dest, vec);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat3} receiving operation result\n   * @param v - Translation vector\n   * @returns `out`\n   */\n  static fromTranslation(out, v) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 1;\n    out[5] = 0;\n    out[6] = v[0];\n    out[7] = v[1];\n    out[8] = 1;\n    return out;\n  }\n  /**\n   * Creates a {@link Mat3} from a given angle around a given axis\n   * This is equivalent to (but much faster than):\n   *\n   *     mat3.identity(dest);\n   *     mat3.rotate(dest, dest, rad);\n   * @category Static\n   *\n   * @param out - {@link Mat3} receiving operation result\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static fromRotation(out, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = c;\n    out[1] = s;\n    out[2] = 0;\n    out[3] = -s;\n    out[4] = c;\n    out[5] = 0;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 1;\n    return out;\n  }\n  /**\n   * Creates a {@link Mat3} from a vector scaling\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat3.identity(dest);\n   *   mat3.scale(dest, dest, vec);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat3} receiving operation result\n   * @param v - Scaling vector\n   * @returns `out`\n   */\n  static fromScaling(out, v) {\n    out[0] = v[0];\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = v[1];\n    out[5] = 0;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 1;\n    return out;\n  }\n  /**\n   * Copies the upper-left 3x3 values of a {@link Mat2d} into the given\n   * {@link Mat3}.\n   * @category Static\n   *\n   * @param out - the receiving 3x3 matrix\n   * @param a - the source 2x3 matrix\n   * @returns `out`\n   */\n  static fromMat2d(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = 0;\n    out[3] = a[2];\n    out[4] = a[3];\n    out[5] = 0;\n    out[6] = a[4];\n    out[7] = a[5];\n    out[8] = 1;\n    return out;\n  }\n  /**\n   * Calculates a {@link Mat3} from the given quaternion\n   * @category Static\n   *\n   * @param out - {@link Mat3} receiving operation result\n   * @param q - {@link Quat} to create matrix from\n   * @returns `out`\n   */\n  static fromQuat(out, q) {\n    const x = q[0];\n    const y = q[1];\n    const z = q[2];\n    const w = q[3];\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const yx = y * x2;\n    const yy = y * y2;\n    const zx = z * x2;\n    const zy = z * y2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n    out[0] = 1 - yy - zz;\n    out[3] = yx - wz;\n    out[6] = zx + wy;\n    out[1] = yx + wz;\n    out[4] = 1 - xx - zz;\n    out[7] = zy - wx;\n    out[2] = zx - wy;\n    out[5] = zy + wx;\n    out[8] = 1 - xx - yy;\n    return out;\n  }\n  /**\n   * Copies the upper-left 3x3 values of a {@link Mat4} into the given\n   * {@link Mat3}.\n   * @category Static\n   *\n   * @param out - the receiving 3x3 matrix\n   * @param a - the source 4x4 matrix\n   * @returns `out`\n   */\n  static fromMat4(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[4];\n    out[4] = a[5];\n    out[5] = a[6];\n    out[6] = a[8];\n    out[7] = a[9];\n    out[8] = a[10];\n    return out;\n  }\n  /**\n   * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n   * @category Static\n   *\n   * @param {mat3} out mat3 receiving operation result\n   * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n   * @returns `out` or `null` if the matrix is not invertible\n   */\n  static normalFromMat4(out, a) {\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a03 = a[3];\n    const a10 = a[4];\n    const a11 = a[5];\n    const a12 = a[6];\n    const a13 = a[7];\n    const a20 = a[8];\n    const a21 = a[9];\n    const a22 = a[10];\n    const a23 = a[11];\n    const a30 = a[12];\n    const a31 = a[13];\n    const a32 = a[14];\n    const a33 = a[15];\n    const b00 = a00 * a11 - a01 * a10;\n    const b01 = a00 * a12 - a02 * a10;\n    const b02 = a00 * a13 - a03 * a10;\n    const b03 = a01 * a12 - a02 * a11;\n    const b04 = a01 * a13 - a03 * a11;\n    const b05 = a02 * a13 - a03 * a12;\n    const b06 = a20 * a31 - a21 * a30;\n    const b07 = a20 * a32 - a22 * a30;\n    const b08 = a20 * a33 - a23 * a30;\n    const b09 = a21 * a32 - a22 * a31;\n    const b10 = a21 * a33 - a23 * a31;\n    const b11 = a22 * a33 - a23 * a32;\n    let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n    if (!det) {\n      return null;\n    }\n    det = 1 / det;\n    out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n    out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n    out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n    out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n    out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n    out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n    out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n    out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n    out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n    return out;\n  }\n  /**\n   * Calculates a {@link Mat3} normal matrix (transpose inverse) from a {@link Mat4}\n   * This version omits the calculation of the constant factor (1/determinant), so\n   * any normals transformed with it will need to be renormalized.\n   * From https://stackoverflow.com/a/27616419/25968\n   * @category Static\n   *\n   * @param out - Matrix receiving operation result\n   * @param a - Mat4 to derive the normal matrix from\n   * @returns `out`\n   */\n  static normalFromMat4Fast(out, a) {\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    const bx = a[4];\n    const by = a[5];\n    const bz = a[6];\n    const cx = a[8];\n    const cy = a[9];\n    const cz = a[10];\n    out[0] = by * cz - cz * cy;\n    out[1] = bz * cx - cx * cz;\n    out[2] = bx * cy - cy * cx;\n    out[3] = cy * az - cz * ay;\n    out[4] = cz * ax - cx * az;\n    out[5] = cx * ay - cy * ax;\n    out[6] = ay * bz - az * by;\n    out[7] = az * bx - ax * bz;\n    out[8] = ax * by - ay * bx;\n    return out;\n  }\n  /**\n   * Generates a 2D projection matrix with the given bounds\n   * @category Static\n   *\n   * @param out mat3 frustum matrix will be written into\n   * @param width Width of your gl context\n   * @param height Height of gl context\n   * @returns `out`\n   */\n  static projection(out, width, height) {\n    out[0] = 2 / width;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = -2 / height;\n    out[5] = 0;\n    out[6] = -1;\n    out[7] = 1;\n    out[8] = 1;\n    return out;\n  }\n  /**\n   * Returns Frobenius norm of a {@link Mat3}\n   * @category Static\n   *\n   * @param a - the matrix to calculate Frobenius norm of\n   * @returns Frobenius norm\n   */\n  static frob(a) {\n    return Math.sqrt(\n      a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + a[6] * a[6] + a[7] * a[7] + a[8] * a[8]\n    );\n  }\n  /**\n   * Multiply each element of a {@link Mat3} by a scalar.\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to scale\n   * @param b - amount to scale the matrix's elements by\n   * @returns `out`\n   */\n  static multiplyScalar(out, a, b) {\n    out[0] = a[0] * b;\n    out[1] = a[1] * b;\n    out[2] = a[2] * b;\n    out[3] = a[3] * b;\n    out[4] = a[4] * b;\n    out[5] = a[5] * b;\n    out[6] = a[6] * b;\n    out[7] = a[7] * b;\n    out[8] = a[8] * b;\n    return out;\n  }\n  /**\n   * Adds two {@link Mat3}'s after multiplying each element of the second operand by a scalar value.\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param scale - the amount to scale b's elements by before adding\n   * @returns `out`\n   */\n  static multiplyScalarAndAdd(out, a, b, scale) {\n    out[0] = a[0] + b[0] * scale;\n    out[1] = a[1] + b[1] * scale;\n    out[2] = a[2] + b[2] * scale;\n    out[3] = a[3] + b[3] * scale;\n    out[4] = a[4] + b[4] * scale;\n    out[5] = a[5] + b[5] * scale;\n    out[6] = a[6] + b[6] * scale;\n    out[7] = a[7] + b[7] * scale;\n    out[8] = a[8] + b[8] * scale;\n    return out;\n  }\n  /**\n   * Returns whether two {@link Mat3}s have exactly the same elements in the same position (when compared with ===).\n   * @category Static\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns True if the matrices are equal, false otherwise.\n   */\n  static exactEquals(a, b) {\n    return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n  }\n  /**\n   * Returns whether two {@link Mat3}s have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns True if the matrices are equal, false otherwise.\n   */\n  static equals(a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const a4 = a[4];\n    const a5 = a[5];\n    const a6 = a[6];\n    const a7 = a[7];\n    const a8 = a[8];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    const b3 = b[3];\n    const b4 = b[4];\n    const b5 = b[5];\n    const b6 = b[6];\n    const b7 = b[7];\n    const b8 = b[8];\n    return Math.abs(a0 - b0) <= GLM_EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= GLM_EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= GLM_EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= GLM_EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= GLM_EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= GLM_EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= GLM_EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= GLM_EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= GLM_EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8));\n  }\n  /**\n   * Returns a string representation of a {@link Mat3}\n   * @category Static\n   *\n   * @param a - matrix to represent as a string\n   * @returns string representation of the matrix\n   */\n  static str(a) {\n    return `Mat3(${a.join(\", \")})`;\n  }\n};\nMat3.prototype.mul = Mat3.prototype.multiply;\nMat3.mul = Mat3.multiply;\nMat3.sub = Mat3.subtract;\nvar Mat4 = class _Mat4 extends Float32Array {\n  static #IDENTITY_4X4 = new Float32Array([\n    1,\n    0,\n    0,\n    0,\n    0,\n    1,\n    0,\n    0,\n    0,\n    0,\n    1,\n    0,\n    0,\n    0,\n    0,\n    1\n  ]);\n  /**\n   * Temporary variable to prevent repeated allocations in the algorithms within Mat4.\n   * These are declared as TypedArrays to aid in tree-shaking.\n   */\n  static #TMP_VEC3 = new Float32Array(3);\n  /**\n   * Create a {@link Mat4}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 16:\n        super(values);\n        break;\n      case 2:\n        super(values[0], values[1], 16);\n        break;\n      case 1:\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v,\n            v\n          ]);\n        } else {\n          super(v, 0, 16);\n        }\n        break;\n      default:\n        super(_Mat4.#IDENTITY_4X4);\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  /**\n   * A string representation of `this`\n   * Equivalent to `Mat4.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Mat4.str(this);\n  }\n  // ===================\n  // Instance methods\n  // ===================\n  /**\n   * Copy the values from another {@link Mat4} into `this`.\n   * @category Methods\n   *\n   * @param a the source vector\n   * @returns `this`\n   */\n  copy(a) {\n    this.set(a);\n    return this;\n  }\n  /**\n   * Set `this` to the identity matrix\n   * Equivalent to Mat4.identity(this)\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  identity() {\n    this.set(_Mat4.#IDENTITY_4X4);\n    return this;\n  }\n  /**\n   * Multiplies this {@link Mat4} against another one\n   * Equivalent to `Mat4.multiply(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The second operand\n   * @returns `this`\n   */\n  multiply(b) {\n    return _Mat4.multiply(this, this, b);\n  }\n  /**\n   * Alias for {@link Mat4.multiply}\n   * @category Methods\n   */\n  mul(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Transpose this {@link Mat4}\n   * Equivalent to `Mat4.transpose(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  transpose() {\n    return _Mat4.transpose(this, this);\n  }\n  /**\n   * Inverts this {@link Mat4}\n   * Equivalent to `Mat4.invert(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  invert() {\n    return _Mat4.invert(this, this);\n  }\n  /**\n   * Translate this {@link Mat4} by the given vector\n   * Equivalent to `Mat4.translate(this, this, v);`\n   * @category Methods\n   *\n   * @param v - The {@link Vec3} to translate by\n   * @returns `this`\n   */\n  translate(v) {\n    return _Mat4.translate(this, this, v);\n  }\n  /**\n   * Rotates this {@link Mat4} by the given angle around the given axis\n   * Equivalent to `Mat4.rotate(this, this, rad, axis);`\n   * @category Methods\n   *\n   * @param rad - the angle to rotate the matrix by\n   * @param axis - the axis to rotate around\n   * @returns `this`\n   */\n  rotate(rad, axis) {\n    return _Mat4.rotate(this, this, rad, axis);\n  }\n  /**\n   * Scales this {@link Mat4} by the dimensions in the given vec3 not using vectorization\n   * Equivalent to `Mat4.scale(this, this, v);`\n   * @category Methods\n   *\n   * @param v - The {@link Vec3} to scale the matrix by\n   * @returns `this`\n   */\n  scale(v) {\n    return _Mat4.scale(this, this, v);\n  }\n  /**\n   * Rotates this {@link Mat4} by the given angle around the X axis\n   * Equivalent to `Mat4.rotateX(this, this, rad);`\n   * @category Methods\n   *\n   * @param rad - the angle to rotate the matrix by\n   * @returns `this`\n   */\n  rotateX(rad) {\n    return _Mat4.rotateX(this, this, rad);\n  }\n  /**\n   * Rotates this {@link Mat4} by the given angle around the Y axis\n   * Equivalent to `Mat4.rotateY(this, this, rad);`\n   * @category Methods\n   *\n   * @param rad - the angle to rotate the matrix by\n   * @returns `this`\n   */\n  rotateY(rad) {\n    return _Mat4.rotateY(this, this, rad);\n  }\n  /**\n   * Rotates this {@link Mat4} by the given angle around the Z axis\n   * Equivalent to `Mat4.rotateZ(this, this, rad);`\n   * @category Methods\n   *\n   * @param rad - the angle to rotate the matrix by\n   * @returns `this`\n   */\n  rotateZ(rad) {\n    return _Mat4.rotateZ(this, this, rad);\n  }\n  /**\n   * Generates a perspective projection matrix with the given bounds.\n   * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n   * which matches WebGL/OpenGL's clip volume.\n   * Passing null/undefined/no value for far will generate infinite projection matrix.\n   * Equivalent to `Mat4.perspectiveNO(this, fovy, aspect, near, far);`\n   * @category Methods\n   *\n   * @param fovy - Vertical field of view in radians\n   * @param aspect - Aspect ratio. typically viewport width/height\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum, can be null or Infinity\n   * @returns `this`\n   */\n  perspectiveNO(fovy, aspect, near, far) {\n    return _Mat4.perspectiveNO(this, fovy, aspect, near, far);\n  }\n  /**\n   * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n   * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n   * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n   * Passing null/undefined/no value for far will generate infinite projection matrix.\n   * Equivalent to `Mat4.perspectiveZO(this, fovy, aspect, near, far);`\n   * @category Methods\n   *\n   * @param fovy - Vertical field of view in radians\n   * @param aspect - Aspect ratio. typically viewport width/height\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum, can be null or Infinity\n   * @returns `this`\n   */\n  perspectiveZO(fovy, aspect, near, far) {\n    return _Mat4.perspectiveZO(this, fovy, aspect, near, far);\n  }\n  /**\n   * Generates a orthogonal projection matrix with the given bounds.\n   * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n   * which matches WebGL/OpenGL's clip volume.\n   * Equivalent to `Mat4.orthoNO(this, left, right, bottom, top, near, far);`\n   * @category Methods\n   *\n   * @param left - Left bound of the frustum\n   * @param right - Right bound of the frustum\n   * @param bottom - Bottom bound of the frustum\n   * @param top - Top bound of the frustum\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum\n   * @returns `this`\n   */\n  orthoNO(left, right, bottom, top, near, far) {\n    return _Mat4.orthoNO(this, left, right, bottom, top, near, far);\n  }\n  /**\n   * Generates a orthogonal projection matrix with the given bounds.\n   * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n   * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n   * Equivalent to `Mat4.orthoZO(this, left, right, bottom, top, near, far);`\n   * @category Methods\n   *\n   * @param left - Left bound of the frustum\n   * @param right - Right bound of the frustum\n   * @param bottom - Bottom bound of the frustum\n   * @param top - Top bound of the frustum\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum\n   * @returns `this`\n   */\n  orthoZO(left, right, bottom, top, near, far) {\n    return _Mat4.orthoZO(this, left, right, bottom, top, near, far);\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Mat4}.\n   */\n  static get BYTE_LENGTH() {\n    return 16 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new, identity {@link Mat4}\n   * @category Static\n   *\n   * @returns A new {@link Mat4}\n   */\n  static create() {\n    return new _Mat4();\n  }\n  /**\n   * Creates a new {@link Mat4} initialized with values from an existing matrix\n   * @category Static\n   *\n   * @param a - Matrix to clone\n   * @returns A new {@link Mat4}\n   */\n  static clone(a) {\n    return new _Mat4(a);\n  }\n  /**\n   * Copy the values from one {@link Mat4} to another\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @param a - Matrix to copy\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[4] = a[4];\n    out[5] = a[5];\n    out[6] = a[6];\n    out[7] = a[7];\n    out[8] = a[8];\n    out[9] = a[9];\n    out[10] = a[10];\n    out[11] = a[11];\n    out[12] = a[12];\n    out[13] = a[13];\n    out[14] = a[14];\n    out[15] = a[15];\n    return out;\n  }\n  /**\n   * Create a new mat4 with the given values\n   * @category Static\n   *\n   * @param values - Matrix components\n   * @returns A new {@link Mat4}\n   */\n  static fromValues(...values) {\n    return new _Mat4(...values);\n  }\n  /**\n   * Set the components of a mat4 to the given values\n   * @category Static\n   *\n   * @param out - The receiving matrix\n   * @param values - Matrix components\n   * @returns `out`\n   */\n  static set(out, ...values) {\n    out[0] = values[0];\n    out[1] = values[1];\n    out[2] = values[2];\n    out[3] = values[3];\n    out[4] = values[4];\n    out[5] = values[5];\n    out[6] = values[6];\n    out[7] = values[7];\n    out[8] = values[8];\n    out[9] = values[9];\n    out[10] = values[10];\n    out[11] = values[11];\n    out[12] = values[12];\n    out[13] = values[13];\n    out[14] = values[14];\n    out[15] = values[15];\n    return out;\n  }\n  /**\n   * Set a {@link Mat4} to the identity matrix\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @returns `out`\n   */\n  static identity(out) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = 1;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[10] = 1;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Transpose the values of a {@link Mat4}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out`\n   */\n  static transpose(out, a) {\n    if (out === a) {\n      const a01 = a[1], a02 = a[2], a03 = a[3];\n      const a12 = a[6], a13 = a[7];\n      const a23 = a[11];\n      out[1] = a[4];\n      out[2] = a[8];\n      out[3] = a[12];\n      out[4] = a01;\n      out[6] = a[9];\n      out[7] = a[13];\n      out[8] = a02;\n      out[9] = a12;\n      out[11] = a[14];\n      out[12] = a03;\n      out[13] = a13;\n      out[14] = a23;\n    } else {\n      out[0] = a[0];\n      out[1] = a[4];\n      out[2] = a[8];\n      out[3] = a[12];\n      out[4] = a[1];\n      out[5] = a[5];\n      out[6] = a[9];\n      out[7] = a[13];\n      out[8] = a[2];\n      out[9] = a[6];\n      out[10] = a[10];\n      out[11] = a[14];\n      out[12] = a[3];\n      out[13] = a[7];\n      out[14] = a[11];\n      out[15] = a[15];\n    }\n    return out;\n  }\n  /**\n   * Inverts a {@link Mat4}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out` or `null` if the matrix is not invertible\n   */\n  static invert(out, a) {\n    const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n    const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n    const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n    const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n    const b00 = a00 * a11 - a01 * a10;\n    const b01 = a00 * a12 - a02 * a10;\n    const b02 = a00 * a13 - a03 * a10;\n    const b03 = a01 * a12 - a02 * a11;\n    const b04 = a01 * a13 - a03 * a11;\n    const b05 = a02 * a13 - a03 * a12;\n    const b06 = a20 * a31 - a21 * a30;\n    const b07 = a20 * a32 - a22 * a30;\n    const b08 = a20 * a33 - a23 * a30;\n    const b09 = a21 * a32 - a22 * a31;\n    const b10 = a21 * a33 - a23 * a31;\n    const b11 = a22 * a33 - a23 * a32;\n    let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n    if (!det) {\n      return null;\n    }\n    det = 1 / det;\n    out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n    out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n    out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n    out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n    out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n    out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n    out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n    out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n    out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n    out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n    out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n    out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n    out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n    out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n    out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n    out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n    return out;\n  }\n  /**\n   * Calculates the adjugate of a {@link Mat4}\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the source matrix\n   * @returns `out`\n   */\n  static adjoint(out, a) {\n    const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n    const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n    const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n    const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n    const b00 = a00 * a11 - a01 * a10;\n    const b01 = a00 * a12 - a02 * a10;\n    const b02 = a00 * a13 - a03 * a10;\n    const b03 = a01 * a12 - a02 * a11;\n    const b04 = a01 * a13 - a03 * a11;\n    const b05 = a02 * a13 - a03 * a12;\n    const b06 = a20 * a31 - a21 * a30;\n    const b07 = a20 * a32 - a22 * a30;\n    const b08 = a20 * a33 - a23 * a30;\n    const b09 = a21 * a32 - a22 * a31;\n    const b10 = a21 * a33 - a23 * a31;\n    const b11 = a22 * a33 - a23 * a32;\n    out[0] = a11 * b11 - a12 * b10 + a13 * b09;\n    out[1] = a02 * b10 - a01 * b11 - a03 * b09;\n    out[2] = a31 * b05 - a32 * b04 + a33 * b03;\n    out[3] = a22 * b04 - a21 * b05 - a23 * b03;\n    out[4] = a12 * b08 - a10 * b11 - a13 * b07;\n    out[5] = a00 * b11 - a02 * b08 + a03 * b07;\n    out[6] = a32 * b02 - a30 * b05 - a33 * b01;\n    out[7] = a20 * b05 - a22 * b02 + a23 * b01;\n    out[8] = a10 * b10 - a11 * b08 + a13 * b06;\n    out[9] = a01 * b08 - a00 * b10 - a03 * b06;\n    out[10] = a30 * b04 - a31 * b02 + a33 * b00;\n    out[11] = a21 * b02 - a20 * b04 - a23 * b00;\n    out[12] = a11 * b07 - a10 * b09 - a12 * b06;\n    out[13] = a00 * b09 - a01 * b07 + a02 * b06;\n    out[14] = a31 * b01 - a30 * b03 - a32 * b00;\n    out[15] = a20 * b03 - a21 * b01 + a22 * b00;\n    return out;\n  }\n  /**\n   * Calculates the determinant of a {@link Mat4}\n   * @category Static\n   *\n   * @param a - the source matrix\n   * @returns determinant of a\n   */\n  static determinant(a) {\n    const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n    const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n    const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n    const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n    const b0 = a00 * a11 - a01 * a10;\n    const b1 = a00 * a12 - a02 * a10;\n    const b2 = a01 * a12 - a02 * a11;\n    const b3 = a20 * a31 - a21 * a30;\n    const b4 = a20 * a32 - a22 * a30;\n    const b5 = a21 * a32 - a22 * a31;\n    const b6 = a00 * b5 - a01 * b4 + a02 * b3;\n    const b7 = a10 * b5 - a11 * b4 + a12 * b3;\n    const b8 = a20 * b2 - a21 * b1 + a22 * b0;\n    const b9 = a30 * b2 - a31 * b1 + a32 * b0;\n    return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;\n  }\n  /**\n   * Multiplies two {@link Mat4}s\n   * @category Static\n   *\n   * @param out - The receiving Matrix\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static multiply(out, a, b) {\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a03 = a[3];\n    const a10 = a[4];\n    const a11 = a[5];\n    const a12 = a[6];\n    const a13 = a[7];\n    const a20 = a[8];\n    const a21 = a[9];\n    const a22 = a[10];\n    const a23 = a[11];\n    const a30 = a[12];\n    const a31 = a[13];\n    const a32 = a[14];\n    const a33 = a[15];\n    let b0 = b[0];\n    let b1 = b[1];\n    let b2 = b[2];\n    let b3 = b[3];\n    out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n    out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n    out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n    out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n    b0 = b[4];\n    b1 = b[5];\n    b2 = b[6];\n    b3 = b[7];\n    out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n    out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n    out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n    out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n    b0 = b[8];\n    b1 = b[9];\n    b2 = b[10];\n    b3 = b[11];\n    out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n    out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n    out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n    out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n    b0 = b[12];\n    b1 = b[13];\n    b2 = b[14];\n    b3 = b[15];\n    out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n    out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n    out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n    out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n    return out;\n  }\n  /**\n   * Alias for {@link Mat4.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return out;\n  }\n  /**\n   * Translate a {@link Mat4} by the given vector\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to translate\n   * @param v - vector to translate by\n   * @returns `out`\n   */\n  static translate(out, a, v) {\n    const x = v[0];\n    const y = v[1];\n    const z = v[2];\n    if (a === out) {\n      out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n      out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n      out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n      out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n    } else {\n      const a00 = a[0];\n      const a01 = a[1];\n      const a02 = a[2];\n      const a03 = a[3];\n      const a10 = a[4];\n      const a11 = a[5];\n      const a12 = a[6];\n      const a13 = a[7];\n      const a20 = a[8];\n      const a21 = a[9];\n      const a22 = a[10];\n      const a23 = a[11];\n      out[0] = a00;\n      out[1] = a01;\n      out[2] = a02;\n      out[3] = a03;\n      out[4] = a10;\n      out[5] = a11;\n      out[6] = a12;\n      out[7] = a13;\n      out[8] = a20;\n      out[9] = a21;\n      out[10] = a22;\n      out[11] = a23;\n      out[12] = a00 * x + a10 * y + a20 * z + a[12];\n      out[13] = a01 * x + a11 * y + a21 * z + a[13];\n      out[14] = a02 * x + a12 * y + a22 * z + a[14];\n      out[15] = a03 * x + a13 * y + a23 * z + a[15];\n    }\n    return out;\n  }\n  /**\n   * Scales the {@link Mat4} by the dimensions in the given {@link Vec3} not using vectorization\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to scale\n   * @param v - the {@link Vec3} to scale the matrix by\n   * @returns `out`\n   **/\n  static scale(out, a, v) {\n    const x = v[0];\n    const y = v[1];\n    const z = v[2];\n    out[0] = a[0] * x;\n    out[1] = a[1] * x;\n    out[2] = a[2] * x;\n    out[3] = a[3] * x;\n    out[4] = a[4] * y;\n    out[5] = a[5] * y;\n    out[6] = a[6] * y;\n    out[7] = a[7] * y;\n    out[8] = a[8] * z;\n    out[9] = a[9] * z;\n    out[10] = a[10] * z;\n    out[11] = a[11] * z;\n    out[12] = a[12];\n    out[13] = a[13];\n    out[14] = a[14];\n    out[15] = a[15];\n    return out;\n  }\n  /**\n   * Rotates a {@link Mat4} by the given angle around the given axis\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to rotate\n   * @param rad - the angle to rotate the matrix by\n   * @param axis - the axis to rotate around\n   * @returns `out` or `null` if axis has a length of 0\n   */\n  static rotate(out, a, rad, axis) {\n    let x = axis[0];\n    let y = axis[1];\n    let z = axis[2];\n    let len = Math.sqrt(x * x + y * y + z * z);\n    if (len < GLM_EPSILON) {\n      return null;\n    }\n    len = 1 / len;\n    x *= len;\n    y *= len;\n    z *= len;\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    const t = 1 - c;\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a03 = a[3];\n    const a10 = a[4];\n    const a11 = a[5];\n    const a12 = a[6];\n    const a13 = a[7];\n    const a20 = a[8];\n    const a21 = a[9];\n    const a22 = a[10];\n    const a23 = a[11];\n    const b00 = x * x * t + c;\n    const b01 = y * x * t + z * s;\n    const b02 = z * x * t - y * s;\n    const b10 = x * y * t - z * s;\n    const b11 = y * y * t + c;\n    const b12 = z * y * t + x * s;\n    const b20 = x * z * t + y * s;\n    const b21 = y * z * t - x * s;\n    const b22 = z * z * t + c;\n    out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n    out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n    out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n    out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n    out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n    out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n    out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n    out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n    out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n    out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n    out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n    out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n    if (a !== out) {\n      out[12] = a[12];\n      out[13] = a[13];\n      out[14] = a[14];\n      out[15] = a[15];\n    }\n    return out;\n  }\n  /**\n   * Rotates a matrix by the given angle around the X axis\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to rotate\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static rotateX(out, a, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    const a10 = a[4];\n    const a11 = a[5];\n    const a12 = a[6];\n    const a13 = a[7];\n    const a20 = a[8];\n    const a21 = a[9];\n    const a22 = a[10];\n    const a23 = a[11];\n    if (a !== out) {\n      out[0] = a[0];\n      out[1] = a[1];\n      out[2] = a[2];\n      out[3] = a[3];\n      out[12] = a[12];\n      out[13] = a[13];\n      out[14] = a[14];\n      out[15] = a[15];\n    }\n    out[4] = a10 * c + a20 * s;\n    out[5] = a11 * c + a21 * s;\n    out[6] = a12 * c + a22 * s;\n    out[7] = a13 * c + a23 * s;\n    out[8] = a20 * c - a10 * s;\n    out[9] = a21 * c - a11 * s;\n    out[10] = a22 * c - a12 * s;\n    out[11] = a23 * c - a13 * s;\n    return out;\n  }\n  /**\n   * Rotates a matrix by the given angle around the Y axis\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to rotate\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static rotateY(out, a, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a03 = a[3];\n    const a20 = a[8];\n    const a21 = a[9];\n    const a22 = a[10];\n    const a23 = a[11];\n    if (a !== out) {\n      out[4] = a[4];\n      out[5] = a[5];\n      out[6] = a[6];\n      out[7] = a[7];\n      out[12] = a[12];\n      out[13] = a[13];\n      out[14] = a[14];\n      out[15] = a[15];\n    }\n    out[0] = a00 * c - a20 * s;\n    out[1] = a01 * c - a21 * s;\n    out[2] = a02 * c - a22 * s;\n    out[3] = a03 * c - a23 * s;\n    out[8] = a00 * s + a20 * c;\n    out[9] = a01 * s + a21 * c;\n    out[10] = a02 * s + a22 * c;\n    out[11] = a03 * s + a23 * c;\n    return out;\n  }\n  /**\n   * Rotates a matrix by the given angle around the Z axis\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to rotate\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static rotateZ(out, a, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a03 = a[3];\n    const a10 = a[4];\n    const a11 = a[5];\n    const a12 = a[6];\n    const a13 = a[7];\n    if (a !== out) {\n      out[8] = a[8];\n      out[9] = a[9];\n      out[10] = a[10];\n      out[11] = a[11];\n      out[12] = a[12];\n      out[13] = a[13];\n      out[14] = a[14];\n      out[15] = a[15];\n    }\n    out[0] = a00 * c + a10 * s;\n    out[1] = a01 * c + a11 * s;\n    out[2] = a02 * c + a12 * s;\n    out[3] = a03 * c + a13 * s;\n    out[4] = a10 * c - a00 * s;\n    out[5] = a11 * c - a01 * s;\n    out[6] = a12 * c - a02 * s;\n    out[7] = a13 * c - a03 * s;\n    return out;\n  }\n  /**\n   * Creates a {@link Mat4} from a vector translation\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.translate(dest, dest, vec);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat4} receiving operation result\n   * @param v - Translation vector\n   * @returns `out`\n   */\n  static fromTranslation(out, v) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = 1;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[10] = 1;\n    out[11] = 0;\n    out[12] = v[0];\n    out[13] = v[1];\n    out[14] = v[2];\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Creates a {@link Mat4} from a vector scaling\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.scale(dest, dest, vec);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat4} receiving operation result\n   * @param v - Scaling vector\n   * @returns `out`\n   */\n  static fromScaling(out, v) {\n    out[0] = v[0];\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = v[1];\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[10] = v[2];\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Creates a {@link Mat4} from a given angle around a given axis\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.rotate(dest, dest, rad, axis);\n   * ```\n   * @category Static\n   *\n   * @param out - {@link Mat4} receiving operation result\n   * @param rad - the angle to rotate the matrix by\n   * @param axis - the axis to rotate around\n   * @returns `out` or `null` if `axis` has a length of 0\n   */\n  static fromRotation(out, rad, axis) {\n    let x = axis[0];\n    let y = axis[1];\n    let z = axis[2];\n    let len = Math.sqrt(x * x + y * y + z * z);\n    if (len < GLM_EPSILON) {\n      return null;\n    }\n    len = 1 / len;\n    x *= len;\n    y *= len;\n    z *= len;\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    const t = 1 - c;\n    out[0] = x * x * t + c;\n    out[1] = y * x * t + z * s;\n    out[2] = z * x * t - y * s;\n    out[3] = 0;\n    out[4] = x * y * t - z * s;\n    out[5] = y * y * t + c;\n    out[6] = z * y * t + x * s;\n    out[7] = 0;\n    out[8] = x * z * t + y * s;\n    out[9] = y * z * t - x * s;\n    out[10] = z * z * t + c;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Creates a matrix from the given angle around the X axis\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.rotateX(dest, dest, rad);\n   * ```\n   * @category Static\n   *\n   * @param out - mat4 receiving operation result\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static fromXRotation(out, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = c;\n    out[6] = s;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = -s;\n    out[10] = c;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Creates a matrix from the given angle around the Y axis\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.rotateY(dest, dest, rad);\n   * ```\n   * @category Static\n   *\n   * @param out - mat4 receiving operation result\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static fromYRotation(out, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = c;\n    out[1] = 0;\n    out[2] = -s;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = 1;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = s;\n    out[9] = 0;\n    out[10] = c;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Creates a matrix from the given angle around the Z axis\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.rotateZ(dest, dest, rad);\n   * ```\n   * @category Static\n   *\n   * @param out - mat4 receiving operation result\n   * @param rad - the angle to rotate the matrix by\n   * @returns `out`\n   */\n  static fromZRotation(out, rad) {\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n    out[0] = c;\n    out[1] = s;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = -s;\n    out[5] = c;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[10] = 1;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Creates a matrix from a quaternion rotation and vector translation\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.translate(dest, vec);\n   *   let quatMat = mat4.create();\n   *   quat4.toMat4(quat, quatMat);\n   *   mat4.multiply(dest, quatMat);\n   * ```\n   * @category Static\n   *\n   * @param out - mat4 receiving operation result\n   * @param q - Rotation quaternion\n   * @param v - Translation vector\n   * @returns `out`\n   */\n  static fromRotationTranslation(out, q, v) {\n    const x = q[0];\n    const y = q[1];\n    const z = q[2];\n    const w = q[3];\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const xy = x * y2;\n    const xz = x * z2;\n    const yy = y * y2;\n    const yz = y * z2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n    out[0] = 1 - (yy + zz);\n    out[1] = xy + wz;\n    out[2] = xz - wy;\n    out[3] = 0;\n    out[4] = xy - wz;\n    out[5] = 1 - (xx + zz);\n    out[6] = yz + wx;\n    out[7] = 0;\n    out[8] = xz + wy;\n    out[9] = yz - wx;\n    out[10] = 1 - (xx + yy);\n    out[11] = 0;\n    out[12] = v[0];\n    out[13] = v[1];\n    out[14] = v[2];\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Sets a {@link Mat4} from a {@link Quat2}.\n   * @category Static\n   *\n   * @param out - Matrix\n   * @param a - Dual Quaternion\n   * @returns `out`\n   */\n  static fromQuat2(out, a) {\n    const bx = -a[0];\n    const by = -a[1];\n    const bz = -a[2];\n    const bw = a[3];\n    const ax = a[4];\n    const ay = a[5];\n    const az = a[6];\n    const aw = a[7];\n    const magnitude = bx * bx + by * by + bz * bz + bw * bw;\n    if (magnitude > 0) {\n      _Mat4.#TMP_VEC3[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n      _Mat4.#TMP_VEC3[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n      _Mat4.#TMP_VEC3[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n    } else {\n      _Mat4.#TMP_VEC3[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n      _Mat4.#TMP_VEC3[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n      _Mat4.#TMP_VEC3[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n    }\n    _Mat4.fromRotationTranslation(out, a, _Mat4.#TMP_VEC3);\n    return out;\n  }\n  /**\n   * Calculates a {@link Mat4} normal matrix (transpose inverse) from a {@link Mat4}\n   * @category Static\n   *\n   * @param out - Matrix receiving operation result\n   * @param a - Mat4 to derive the normal matrix from\n   * @returns `out` or `null` if the matrix is not invertible\n   */\n  static normalFromMat4(out, a) {\n    const a00 = a[0];\n    const a01 = a[1];\n    const a02 = a[2];\n    const a03 = a[3];\n    const a10 = a[4];\n    const a11 = a[5];\n    const a12 = a[6];\n    const a13 = a[7];\n    const a20 = a[8];\n    const a21 = a[9];\n    const a22 = a[10];\n    const a23 = a[11];\n    const a30 = a[12];\n    const a31 = a[13];\n    const a32 = a[14];\n    const a33 = a[15];\n    const b00 = a00 * a11 - a01 * a10;\n    const b01 = a00 * a12 - a02 * a10;\n    const b02 = a00 * a13 - a03 * a10;\n    const b03 = a01 * a12 - a02 * a11;\n    const b04 = a01 * a13 - a03 * a11;\n    const b05 = a02 * a13 - a03 * a12;\n    const b06 = a20 * a31 - a21 * a30;\n    const b07 = a20 * a32 - a22 * a30;\n    const b08 = a20 * a33 - a23 * a30;\n    const b09 = a21 * a32 - a22 * a31;\n    const b10 = a21 * a33 - a23 * a31;\n    const b11 = a22 * a33 - a23 * a32;\n    let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n    if (!det) {\n      return null;\n    }\n    det = 1 / det;\n    out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n    out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n    out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n    out[3] = 0;\n    out[4] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n    out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n    out[6] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n    out[7] = 0;\n    out[8] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n    out[9] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n    out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Calculates a {@link Mat4} normal matrix (transpose inverse) from a {@link Mat4}\n   * This version omits the calculation of the constant factor (1/determinant), so\n   * any normals transformed with it will need to be renormalized.\n   * From https://stackoverflow.com/a/27616419/25968\n   * @category Static\n   *\n   * @param out - Matrix receiving operation result\n   * @param a - Mat4 to derive the normal matrix from\n   * @returns `out`\n   */\n  static normalFromMat4Fast(out, a) {\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    const bx = a[4];\n    const by = a[5];\n    const bz = a[6];\n    const cx = a[8];\n    const cy = a[9];\n    const cz = a[10];\n    out[0] = by * cz - cz * cy;\n    out[1] = bz * cx - cx * cz;\n    out[2] = bx * cy - cy * cx;\n    out[3] = 0;\n    out[4] = cy * az - cz * ay;\n    out[5] = cz * ax - cx * az;\n    out[6] = cx * ay - cy * ax;\n    out[7] = 0;\n    out[8] = ay * bz - az * by;\n    out[9] = az * bx - ax * bz;\n    out[10] = ax * by - ay * bx;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Returns the translation vector component of a transformation\n   * matrix. If a matrix is built with fromRotationTranslation,\n   * the returned vector will be the same as the translation vector\n   * originally supplied.\n   * @category Static\n   *\n   * @param  {vec3} out Vector to receive translation component\n   * @param  {ReadonlyMat4} mat Matrix to be decomposed (input)\n   * @return {vec3} out\n   */\n  static getTranslation(out, mat) {\n    out[0] = mat[12];\n    out[1] = mat[13];\n    out[2] = mat[14];\n    return out;\n  }\n  /**\n   * Returns the scaling factor component of a transformation\n   * matrix. If a matrix is built with fromRotationTranslationScale\n   * with a normalized Quaternion parameter, the returned vector will be\n   * the same as the scaling vector\n   * originally supplied.\n   * @category Static\n   *\n   * @param  {vec3} out Vector to receive scaling factor component\n   * @param  {ReadonlyMat4} mat Matrix to be decomposed (input)\n   * @return {vec3} out\n   */\n  static getScaling(out, mat) {\n    const m11 = mat[0];\n    const m12 = mat[1];\n    const m13 = mat[2];\n    const m21 = mat[4];\n    const m22 = mat[5];\n    const m23 = mat[6];\n    const m31 = mat[8];\n    const m32 = mat[9];\n    const m33 = mat[10];\n    out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n    out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n    out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n    return out;\n  }\n  /**\n   * Returns a quaternion representing the rotational component\n   * of a transformation matrix. If a matrix is built with\n   * fromRotationTranslation, the returned quaternion will be the\n   * same as the quaternion originally supplied.\n   * @category Static\n   *\n   * @param out - Quaternion to receive the rotation component\n   * @param mat - Matrix to be decomposed (input)\n   * @return `out`\n   */\n  static getRotation(out, mat) {\n    _Mat4.getScaling(_Mat4.#TMP_VEC3, mat);\n    const is1 = 1 / _Mat4.#TMP_VEC3[0];\n    const is2 = 1 / _Mat4.#TMP_VEC3[1];\n    const is3 = 1 / _Mat4.#TMP_VEC3[2];\n    const sm11 = mat[0] * is1;\n    const sm12 = mat[1] * is2;\n    const sm13 = mat[2] * is3;\n    const sm21 = mat[4] * is1;\n    const sm22 = mat[5] * is2;\n    const sm23 = mat[6] * is3;\n    const sm31 = mat[8] * is1;\n    const sm32 = mat[9] * is2;\n    const sm33 = mat[10] * is3;\n    const trace = sm11 + sm22 + sm33;\n    let S = 0;\n    if (trace > 0) {\n      S = Math.sqrt(trace + 1) * 2;\n      out[3] = 0.25 * S;\n      out[0] = (sm23 - sm32) / S;\n      out[1] = (sm31 - sm13) / S;\n      out[2] = (sm12 - sm21) / S;\n    } else if (sm11 > sm22 && sm11 > sm33) {\n      S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;\n      out[3] = (sm23 - sm32) / S;\n      out[0] = 0.25 * S;\n      out[1] = (sm12 + sm21) / S;\n      out[2] = (sm31 + sm13) / S;\n    } else if (sm22 > sm33) {\n      S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;\n      out[3] = (sm31 - sm13) / S;\n      out[0] = (sm12 + sm21) / S;\n      out[1] = 0.25 * S;\n      out[2] = (sm23 + sm32) / S;\n    } else {\n      S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;\n      out[3] = (sm12 - sm21) / S;\n      out[0] = (sm31 + sm13) / S;\n      out[1] = (sm23 + sm32) / S;\n      out[2] = 0.25 * S;\n    }\n    return out;\n  }\n  /**\n   * Decomposes a transformation matrix into its rotation, translation\n   * and scale components. Returns only the rotation component\n   * @category Static\n   *\n   * @param out_r - Quaternion to receive the rotation component\n   * @param out_t - Vector to receive the translation vector\n   * @param out_s - Vector to receive the scaling factor\n   * @param mat - Matrix to be decomposed (input)\n   * @returns `out_r`\n   */\n  static decompose(out_r, out_t, out_s, mat) {\n    out_t[0] = mat[12];\n    out_t[1] = mat[13];\n    out_t[2] = mat[14];\n    const m11 = mat[0];\n    const m12 = mat[1];\n    const m13 = mat[2];\n    const m21 = mat[4];\n    const m22 = mat[5];\n    const m23 = mat[6];\n    const m31 = mat[8];\n    const m32 = mat[9];\n    const m33 = mat[10];\n    out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n    out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n    out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n    const is1 = 1 / out_s[0];\n    const is2 = 1 / out_s[1];\n    const is3 = 1 / out_s[2];\n    const sm11 = m11 * is1;\n    const sm12 = m12 * is2;\n    const sm13 = m13 * is3;\n    const sm21 = m21 * is1;\n    const sm22 = m22 * is2;\n    const sm23 = m23 * is3;\n    const sm31 = m31 * is1;\n    const sm32 = m32 * is2;\n    const sm33 = m33 * is3;\n    const trace = sm11 + sm22 + sm33;\n    let S = 0;\n    if (trace > 0) {\n      S = Math.sqrt(trace + 1) * 2;\n      out_r[3] = 0.25 * S;\n      out_r[0] = (sm23 - sm32) / S;\n      out_r[1] = (sm31 - sm13) / S;\n      out_r[2] = (sm12 - sm21) / S;\n    } else if (sm11 > sm22 && sm11 > sm33) {\n      S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;\n      out_r[3] = (sm23 - sm32) / S;\n      out_r[0] = 0.25 * S;\n      out_r[1] = (sm12 + sm21) / S;\n      out_r[2] = (sm31 + sm13) / S;\n    } else if (sm22 > sm33) {\n      S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;\n      out_r[3] = (sm31 - sm13) / S;\n      out_r[0] = (sm12 + sm21) / S;\n      out_r[1] = 0.25 * S;\n      out_r[2] = (sm23 + sm32) / S;\n    } else {\n      S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;\n      out_r[3] = (sm12 - sm21) / S;\n      out_r[0] = (sm31 + sm13) / S;\n      out_r[1] = (sm23 + sm32) / S;\n      out_r[2] = 0.25 * S;\n    }\n    return out_r;\n  }\n  /**\n   * Creates a matrix from a quaternion rotation, vector translation and vector scale\n   * This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.translate(dest, vec);\n   *   let quatMat = mat4.create();\n   *   quat4.toMat4(quat, quatMat);\n   *   mat4.multiply(dest, quatMat);\n   *   mat4.scale(dest, scale);\n   * ```\n   * @category Static\n   *\n   * @param out - mat4 receiving operation result\n   * @param q - Rotation quaternion\n   * @param v - Translation vector\n   * @param s - Scaling vector\n   * @returns `out`\n   */\n  static fromRotationTranslationScale(out, q, v, s) {\n    const x = q[0];\n    const y = q[1];\n    const z = q[2];\n    const w = q[3];\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const xy = x * y2;\n    const xz = x * z2;\n    const yy = y * y2;\n    const yz = y * z2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n    const sx = s[0];\n    const sy = s[1];\n    const sz = s[2];\n    out[0] = (1 - (yy + zz)) * sx;\n    out[1] = (xy + wz) * sx;\n    out[2] = (xz - wy) * sx;\n    out[3] = 0;\n    out[4] = (xy - wz) * sy;\n    out[5] = (1 - (xx + zz)) * sy;\n    out[6] = (yz + wx) * sy;\n    out[7] = 0;\n    out[8] = (xz + wy) * sz;\n    out[9] = (yz - wx) * sz;\n    out[10] = (1 - (xx + yy)) * sz;\n    out[11] = 0;\n    out[12] = v[0];\n    out[13] = v[1];\n    out[14] = v[2];\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the\n   * given origin. This is equivalent to (but much faster than):\n   * ```js\n   *   mat4.identity(dest);\n   *   mat4.translate(dest, vec);\n   *   mat4.translate(dest, origin);\n   *   let quatMat = mat4.create();\n   *   quat4.toMat4(quat, quatMat);\n   *   mat4.multiply(dest, quatMat);\n   *   mat4.scale(dest, scale)\n   *   mat4.translate(dest, negativeOrigin);\n   * ```\n   * @category Static\n   *\n   * @param out - mat4 receiving operation result\n   * @param q - Rotation quaternion\n   * @param v - Translation vector\n   * @param s - Scaling vector\n   * @param o - The origin vector around which to scale and rotate\n   * @returns `out`\n   */\n  static fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n    const x = q[0];\n    const y = q[1];\n    const z = q[2];\n    const w = q[3];\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const xy = x * y2;\n    const xz = x * z2;\n    const yy = y * y2;\n    const yz = y * z2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n    const sx = s[0];\n    const sy = s[1];\n    const sz = s[2];\n    const ox = o[0];\n    const oy = o[1];\n    const oz = o[2];\n    const out0 = (1 - (yy + zz)) * sx;\n    const out1 = (xy + wz) * sx;\n    const out2 = (xz - wy) * sx;\n    const out4 = (xy - wz) * sy;\n    const out5 = (1 - (xx + zz)) * sy;\n    const out6 = (yz + wx) * sy;\n    const out8 = (xz + wy) * sz;\n    const out9 = (yz - wx) * sz;\n    const out10 = (1 - (xx + yy)) * sz;\n    out[0] = out0;\n    out[1] = out1;\n    out[2] = out2;\n    out[3] = 0;\n    out[4] = out4;\n    out[5] = out5;\n    out[6] = out6;\n    out[7] = 0;\n    out[8] = out8;\n    out[9] = out9;\n    out[10] = out10;\n    out[11] = 0;\n    out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n    out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n    out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Calculates a 4x4 matrix from the given quaternion\n   * @category Static\n   *\n   * @param out - mat4 receiving operation result\n   * @param q - Quaternion to create matrix from\n   * @returns `out`\n   */\n  static fromQuat(out, q) {\n    const x = q[0];\n    const y = q[1];\n    const z = q[2];\n    const w = q[3];\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const yx = y * x2;\n    const yy = y * y2;\n    const zx = z * x2;\n    const zy = z * y2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n    out[0] = 1 - yy - zz;\n    out[1] = yx + wz;\n    out[2] = zx - wy;\n    out[3] = 0;\n    out[4] = yx - wz;\n    out[5] = 1 - xx - zz;\n    out[6] = zy + wx;\n    out[7] = 0;\n    out[8] = zx + wy;\n    out[9] = zy - wx;\n    out[10] = 1 - xx - yy;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Generates a frustum matrix with the given bounds\n   * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n   * which matches WebGL/OpenGL's clip volume.\n   * Passing null/undefined/no value for far will generate infinite projection matrix.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param left - Left bound of the frustum\n   * @param right - Right bound of the frustum\n   * @param bottom - Bottom bound of the frustum\n   * @param top - Top bound of the frustum\n   * @param near - Near bound of the frustum\n   * @param far -  Far bound of the frustum, can be null or Infinity\n   * @returns `out`\n   */\n  static frustumNO(out, left, right, bottom, top, near, far = Infinity) {\n    const rl = 1 / (right - left);\n    const tb = 1 / (top - bottom);\n    out[0] = near * 2 * rl;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = near * 2 * tb;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = (right + left) * rl;\n    out[9] = (top + bottom) * tb;\n    out[11] = -1;\n    out[12] = 0;\n    out[13] = 0;\n    out[15] = 0;\n    if (far != null && far !== Infinity) {\n      const nf = 1 / (near - far);\n      out[10] = (far + near) * nf;\n      out[14] = 2 * far * near * nf;\n    } else {\n      out[10] = -1;\n      out[14] = -2 * near;\n    }\n    return out;\n  }\n  /**\n   * Alias for {@link Mat4.frustumNO}\n   * @category Static\n   * @deprecated Use {@link Mat4.frustumNO} or {@link Mat4.frustumZO} explicitly\n   */\n  static frustum(out, left, right, bottom, top, near, far = Infinity) {\n    return out;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Generates a frustum matrix with the given bounds\n   * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n   * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n   * Passing null/undefined/no value for far will generate infinite projection matrix.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param left - Left bound of the frustum\n   * @param right - Right bound of the frustum\n   * @param bottom - Bottom bound of the frustum\n   * @param top - Top bound of the frustum\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum, can be null or Infinity\n   * @returns `out`\n   */\n  static frustumZO(out, left, right, bottom, top, near, far = Infinity) {\n    const rl = 1 / (right - left);\n    const tb = 1 / (top - bottom);\n    out[0] = near * 2 * rl;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = near * 2 * tb;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = (right + left) * rl;\n    out[9] = (top + bottom) * tb;\n    out[11] = -1;\n    out[12] = 0;\n    out[13] = 0;\n    out[15] = 0;\n    if (far != null && far !== Infinity) {\n      const nf = 1 / (near - far);\n      out[10] = far * nf;\n      out[14] = far * near * nf;\n    } else {\n      out[10] = -1;\n      out[14] = -near;\n    }\n    return out;\n  }\n  /**\n   * Generates a perspective projection matrix with the given bounds.\n   * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n   * which matches WebGL/OpenGL's clip volume.\n   * Passing null/undefined/no value for far will generate infinite projection matrix.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param fovy - Vertical field of view in radians\n   * @param aspect - Aspect ratio. typically viewport width/height\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum, can be null or Infinity\n   * @returns `out`\n   */\n  static perspectiveNO(out, fovy, aspect, near, far = Infinity) {\n    const f = 1 / Math.tan(fovy / 2);\n    out[0] = f / aspect;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = f;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[11] = -1;\n    out[12] = 0;\n    out[13] = 0;\n    out[15] = 0;\n    if (far != null && far !== Infinity) {\n      const nf = 1 / (near - far);\n      out[10] = (far + near) * nf;\n      out[14] = 2 * far * near * nf;\n    } else {\n      out[10] = -1;\n      out[14] = -2 * near;\n    }\n    return out;\n  }\n  /**\n   * Alias for {@link Mat4.perspectiveNO}\n   * @category Static\n   * @deprecated Use {@link Mat4.perspectiveNO} or {@link Mat4.perspectiveZO} explicitly\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static perspective(out, fovy, aspect, near, far = Infinity) {\n    return out;\n  }\n  /**\n   * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n   * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n   * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n   * Passing null/undefined/no value for far will generate infinite projection matrix.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param fovy - Vertical field of view in radians\n   * @param aspect - Aspect ratio. typically viewport width/height\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum, can be null or Infinity\n   * @returns `out`\n   */\n  static perspectiveZO(out, fovy, aspect, near, far = Infinity) {\n    const f = 1 / Math.tan(fovy / 2);\n    out[0] = f / aspect;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = f;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[11] = -1;\n    out[12] = 0;\n    out[13] = 0;\n    out[15] = 0;\n    if (far != null && far !== Infinity) {\n      const nf = 1 / (near - far);\n      out[10] = far * nf;\n      out[14] = far * near * nf;\n    } else {\n      out[10] = -1;\n      out[14] = -near;\n    }\n    return out;\n  }\n  /**\n   * Generates a perspective projection matrix with the given field of view. This is primarily useful for generating\n   * projection matrices to be used with the still experimental WebVR API.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param fov - Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum\n   * @returns `out`\n   * @deprecated\n   */\n  static perspectiveFromFieldOfView(out, fov, near, far) {\n    const upTan = Math.tan(fov.upDegrees * Math.PI / 180);\n    const downTan = Math.tan(fov.downDegrees * Math.PI / 180);\n    const leftTan = Math.tan(fov.leftDegrees * Math.PI / 180);\n    const rightTan = Math.tan(fov.rightDegrees * Math.PI / 180);\n    const xScale = 2 / (leftTan + rightTan);\n    const yScale = 2 / (upTan + downTan);\n    out[0] = xScale;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = yScale;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = -((leftTan - rightTan) * xScale * 0.5);\n    out[9] = (upTan - downTan) * yScale * 0.5;\n    out[10] = far / (near - far);\n    out[11] = -1;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = far * near / (near - far);\n    out[15] = 0;\n    return out;\n  }\n  /**\n   * Generates an orthogonal projection matrix with the given bounds. The near / far clip planes correspond to a\n   * normalized device coordinate Z range of [-1, 1], which matches WebGL / OpenGLs clip volume.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param left - Left bound of the frustum\n   * @param right - Right bound of the frustum\n   * @param bottom - Bottom bound of the frustum\n   * @param top - Top bound of the frustum\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum\n   * @returns `out`\n   */\n  static orthoNO(out, left, right, bottom, top, near, far) {\n    const lr = 1 / (left - right);\n    const bt = 1 / (bottom - top);\n    const nf = 1 / (near - far);\n    out[0] = -2 * lr;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = -2 * bt;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[10] = 2 * nf;\n    out[11] = 0;\n    out[12] = (left + right) * lr;\n    out[13] = (top + bottom) * bt;\n    out[14] = (far + near) * nf;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Alias for {@link Mat4.orthoNO}\n   * @category Static\n   * @deprecated Use {@link Mat4.orthoNO} or {@link Mat4.orthoZO} explicitly\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static ortho(out, left, right, bottom, top, near, far) {\n    return out;\n  }\n  /**\n   * Generates a orthogonal projection matrix with the given bounds. The near / far clip planes correspond to a\n   * normalized device coordinate Z range of [0, 1], which matches WebGPU / Vulkan / DirectX / Metal's clip volume.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param left - Left bound of the frustum\n   * @param right - Right bound of the frustum\n   * @param bottom - Bottom bound of the frustum\n   * @param top - Top bound of the frustum\n   * @param near - Near bound of the frustum\n   * @param far - Far bound of the frustum\n   * @returns `out`\n   */\n  static orthoZO(out, left, right, bottom, top, near, far) {\n    const lr = 1 / (left - right);\n    const bt = 1 / (bottom - top);\n    const nf = 1 / (near - far);\n    out[0] = -2 * lr;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = -2 * bt;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[10] = nf;\n    out[11] = 0;\n    out[12] = (left + right) * lr;\n    out[13] = (top + bottom) * bt;\n    out[14] = near * nf;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Generates a look-at matrix with the given eye position, focal point, and up axis. If you want a matrix that\n   * actually makes an object look at another object, you should use targetTo instead.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param eye - Position of the viewer\n   * @param center - Point the viewer is looking at\n   * @param up - vec3 pointing up\n   * @returns `out`\n   */\n  static lookAt(out, eye, center, up) {\n    const eyex = eye[0];\n    const eyey = eye[1];\n    const eyez = eye[2];\n    const upx = up[0];\n    const upy = up[1];\n    const upz = up[2];\n    const centerx = center[0];\n    const centery = center[1];\n    const centerz = center[2];\n    if (Math.abs(eyex - centerx) < GLM_EPSILON && Math.abs(eyey - centery) < GLM_EPSILON && Math.abs(eyez - centerz) < GLM_EPSILON) {\n      return _Mat4.identity(out);\n    }\n    let z0 = eyex - centerx;\n    let z1 = eyey - centery;\n    let z2 = eyez - centerz;\n    let len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n    z0 *= len;\n    z1 *= len;\n    z2 *= len;\n    let x0 = upy * z2 - upz * z1;\n    let x1 = upz * z0 - upx * z2;\n    let x2 = upx * z1 - upy * z0;\n    len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n    if (!len) {\n      x0 = 0;\n      x1 = 0;\n      x2 = 0;\n    } else {\n      len = 1 / len;\n      x0 *= len;\n      x1 *= len;\n      x2 *= len;\n    }\n    let y0 = z1 * x2 - z2 * x1;\n    let y1 = z2 * x0 - z0 * x2;\n    let y2 = z0 * x1 - z1 * x0;\n    len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n    if (!len) {\n      y0 = 0;\n      y1 = 0;\n      y2 = 0;\n    } else {\n      len = 1 / len;\n      y0 *= len;\n      y1 *= len;\n      y2 *= len;\n    }\n    out[0] = x0;\n    out[1] = y0;\n    out[2] = z0;\n    out[3] = 0;\n    out[4] = x1;\n    out[5] = y1;\n    out[6] = z1;\n    out[7] = 0;\n    out[8] = x2;\n    out[9] = y2;\n    out[10] = z2;\n    out[11] = 0;\n    out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n    out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n    out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Generates a matrix that makes something look at something else.\n   * @category Static\n   *\n   * @param out - mat4 frustum matrix will be written into\n   * @param eye - Position of the viewer\n   * @param target - Point the viewer is looking at\n   * @param up - vec3 pointing up\n   * @returns `out`\n   */\n  static targetTo(out, eye, target, up) {\n    const eyex = eye[0];\n    const eyey = eye[1];\n    const eyez = eye[2];\n    const upx = up[0];\n    const upy = up[1];\n    const upz = up[2];\n    let z0 = eyex - target[0];\n    let z1 = eyey - target[1];\n    let z2 = eyez - target[2];\n    let len = z0 * z0 + z1 * z1 + z2 * z2;\n    if (len > 0) {\n      len = 1 / Math.sqrt(len);\n      z0 *= len;\n      z1 *= len;\n      z2 *= len;\n    }\n    let x0 = upy * z2 - upz * z1;\n    let x1 = upz * z0 - upx * z2;\n    let x2 = upx * z1 - upy * z0;\n    len = x0 * x0 + x1 * x1 + x2 * x2;\n    if (len > 0) {\n      len = 1 / Math.sqrt(len);\n      x0 *= len;\n      x1 *= len;\n      x2 *= len;\n    }\n    out[0] = x0;\n    out[1] = x1;\n    out[2] = x2;\n    out[3] = 0;\n    out[4] = z1 * x2 - z2 * x1;\n    out[5] = z2 * x0 - z0 * x2;\n    out[6] = z0 * x1 - z1 * x0;\n    out[7] = 0;\n    out[8] = z0;\n    out[9] = z1;\n    out[10] = z2;\n    out[11] = 0;\n    out[12] = eyex;\n    out[13] = eyey;\n    out[14] = eyez;\n    out[15] = 1;\n    return out;\n  }\n  /**\n   * Returns Frobenius norm of a {@link Mat4}\n   * @category Static\n   *\n   * @param a - the matrix to calculate Frobenius norm of\n   * @returns Frobenius norm\n   */\n  static frob(a) {\n    return Math.sqrt(\n      a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + a[6] * a[6] + a[7] * a[7] + a[8] * a[8] + a[9] * a[9] + a[10] * a[10] + a[11] * a[11] + a[12] * a[12] + a[13] * a[13] + a[14] * a[14] + a[15] * a[15]\n    );\n  }\n  /**\n   * Adds two {@link Mat4}'s\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static add(out, a, b) {\n    out[0] = a[0] + b[0];\n    out[1] = a[1] + b[1];\n    out[2] = a[2] + b[2];\n    out[3] = a[3] + b[3];\n    out[4] = a[4] + b[4];\n    out[5] = a[5] + b[5];\n    out[6] = a[6] + b[6];\n    out[7] = a[7] + b[7];\n    out[8] = a[8] + b[8];\n    out[9] = a[9] + b[9];\n    out[10] = a[10] + b[10];\n    out[11] = a[11] + b[11];\n    out[12] = a[12] + b[12];\n    out[13] = a[13] + b[13];\n    out[14] = a[14] + b[14];\n    out[15] = a[15] + b[15];\n    return out;\n  }\n  /**\n   * Subtracts matrix b from matrix a\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static subtract(out, a, b) {\n    out[0] = a[0] - b[0];\n    out[1] = a[1] - b[1];\n    out[2] = a[2] - b[2];\n    out[3] = a[3] - b[3];\n    out[4] = a[4] - b[4];\n    out[5] = a[5] - b[5];\n    out[6] = a[6] - b[6];\n    out[7] = a[7] - b[7];\n    out[8] = a[8] - b[8];\n    out[9] = a[9] - b[9];\n    out[10] = a[10] - b[10];\n    out[11] = a[11] - b[11];\n    out[12] = a[12] - b[12];\n    out[13] = a[13] - b[13];\n    out[14] = a[14] - b[14];\n    out[15] = a[15] - b[15];\n    return out;\n  }\n  /**\n   * Alias for {@link Mat4.subtract}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sub(out, a, b) {\n    return out;\n  }\n  /**\n   * Multiply each element of the matrix by a scalar.\n   * @category Static\n   *\n   * @param out - the receiving matrix\n   * @param a - the matrix to scale\n   * @param b - amount to scale the matrix's elements by\n   * @returns `out`\n   */\n  static multiplyScalar(out, a, b) {\n    out[0] = a[0] * b;\n    out[1] = a[1] * b;\n    out[2] = a[2] * b;\n    out[3] = a[3] * b;\n    out[4] = a[4] * b;\n    out[5] = a[5] * b;\n    out[6] = a[6] * b;\n    out[7] = a[7] * b;\n    out[8] = a[8] * b;\n    out[9] = a[9] * b;\n    out[10] = a[10] * b;\n    out[11] = a[11] * b;\n    out[12] = a[12] * b;\n    out[13] = a[13] * b;\n    out[14] = a[14] * b;\n    out[15] = a[15] * b;\n    return out;\n  }\n  /**\n   * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param scale - the amount to scale b's elements by before adding\n   * @returns `out`\n   */\n  static multiplyScalarAndAdd(out, a, b, scale) {\n    out[0] = a[0] + b[0] * scale;\n    out[1] = a[1] + b[1] * scale;\n    out[2] = a[2] + b[2] * scale;\n    out[3] = a[3] + b[3] * scale;\n    out[4] = a[4] + b[4] * scale;\n    out[5] = a[5] + b[5] * scale;\n    out[6] = a[6] + b[6] * scale;\n    out[7] = a[7] + b[7] * scale;\n    out[8] = a[8] + b[8] * scale;\n    out[9] = a[9] + b[9] * scale;\n    out[10] = a[10] + b[10] * scale;\n    out[11] = a[11] + b[11] * scale;\n    out[12] = a[12] + b[12] * scale;\n    out[13] = a[13] + b[13] * scale;\n    out[14] = a[14] + b[14] * scale;\n    out[15] = a[15] + b[15] * scale;\n    return out;\n  }\n  /**\n   * Returns whether two {@link Mat4}s have exactly the same elements in the same position (when compared with ===).\n   * @category Static\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns True if the matrices are equal, false otherwise.\n   */\n  static exactEquals(a, b) {\n    return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n  }\n  /**\n   * Returns whether two {@link Mat4}s have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns True if the matrices are equal, false otherwise.\n   */\n  static equals(a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const a4 = a[4];\n    const a5 = a[5];\n    const a6 = a[6];\n    const a7 = a[7];\n    const a8 = a[8];\n    const a9 = a[9];\n    const a10 = a[10];\n    const a11 = a[11];\n    const a12 = a[12];\n    const a13 = a[13];\n    const a14 = a[14];\n    const a15 = a[15];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    const b3 = b[3];\n    const b4 = b[4];\n    const b5 = b[5];\n    const b6 = b[6];\n    const b7 = b[7];\n    const b8 = b[8];\n    const b9 = b[9];\n    const b10 = b[10];\n    const b11 = b[11];\n    const b12 = b[12];\n    const b13 = b[13];\n    const b14 = b[14];\n    const b15 = b[15];\n    return Math.abs(a0 - b0) <= GLM_EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= GLM_EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= GLM_EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= GLM_EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= GLM_EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= GLM_EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= GLM_EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= GLM_EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= GLM_EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= GLM_EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= GLM_EPSILON * Math.max(1, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= GLM_EPSILON * Math.max(1, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= GLM_EPSILON * Math.max(1, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= GLM_EPSILON * Math.max(1, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= GLM_EPSILON * Math.max(1, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= GLM_EPSILON * Math.max(1, Math.abs(a15), Math.abs(b15));\n  }\n  /**\n   * Returns a string representation of a {@link Mat4}\n   * @category Static\n   *\n   * @param a - matrix to represent as a string\n   * @returns string representation of the matrix\n   */\n  static str(a) {\n    return `Mat4(${a.join(\", \")})`;\n  }\n};\nMat4.prototype.mul = Mat4.prototype.multiply;\nMat4.sub = Mat4.subtract;\nMat4.mul = Mat4.multiply;\nMat4.frustum = Mat4.frustumNO;\nMat4.perspective = Mat4.perspectiveNO;\nMat4.ortho = Mat4.orthoNO;\nvar Vec3 = class _Vec3 extends Float32Array {\n  /**\n   * Create a {@link Vec3}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 3:\n        super(values);\n        break;\n      case 2:\n        super(values[0], values[1], 3);\n        break;\n      case 1: {\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([v, v, v]);\n        } else {\n          super(v, 0, 3);\n        }\n        break;\n      }\n      default:\n        super(3);\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  // Getters and setters to make component access read better.\n  // These are likely to be a little bit slower than direct array access.\n  /**\n   * The x component of the vector. Equivalent to `this[0];`\n   * @category Vector Components\n   */\n  get x() {\n    return this[0];\n  }\n  set x(value) {\n    this[0] = value;\n  }\n  /**\n   * The y component of the vector. Equivalent to `this[1];`\n   * @category Vector Components\n   */\n  get y() {\n    return this[1];\n  }\n  set y(value) {\n    this[1] = value;\n  }\n  /**\n   * The z component of the vector. Equivalent to `this[2];`\n   * @category Vector Components\n   */\n  get z() {\n    return this[2];\n  }\n  set z(value) {\n    this[2] = value;\n  }\n  // Alternate set of getters and setters in case this is being used to define\n  // a color.\n  /**\n   * The r component of the vector. Equivalent to `this[0];`\n   * @category Color Components\n   */\n  get r() {\n    return this[0];\n  }\n  set r(value) {\n    this[0] = value;\n  }\n  /**\n   * The g component of the vector. Equivalent to `this[1];`\n   * @category Color Components\n   */\n  get g() {\n    return this[1];\n  }\n  set g(value) {\n    this[1] = value;\n  }\n  /**\n   * The b component of the vector. Equivalent to `this[2];`\n   * @category Color Components\n   */\n  get b() {\n    return this[2];\n  }\n  set b(value) {\n    this[2] = value;\n  }\n  /**\n   * The magnitude (length) of this.\n   * Equivalent to `Vec3.magnitude(this);`\n   *\n   * Magnitude is used because the `length` attribute is already defined by\n   * TypedArrays to mean the number of elements in the array.\n   *\n   * @category Accessors\n   */\n  get magnitude() {\n    const x = this[0];\n    const y = this[1];\n    const z = this[2];\n    return Math.sqrt(x * x + y * y + z * z);\n  }\n  /**\n   * Alias for {@link Vec3.magnitude}\n   *\n   * @category Accessors\n   */\n  get mag() {\n    return this.magnitude;\n  }\n  /**\n   * The squared magnitude (length) of `this`.\n   * Equivalent to `Vec3.squaredMagnitude(this);`\n   *\n   * @category Accessors\n   */\n  get squaredMagnitude() {\n    const x = this[0];\n    const y = this[1];\n    const z = this[2];\n    return x * x + y * y + z * z;\n  }\n  /**\n   * Alias for {@link Vec3.squaredMagnitude}\n   *\n   * @category Accessors\n   */\n  get sqrMag() {\n    return this.squaredMagnitude;\n  }\n  /**\n   * A string representation of `this`\n   * Equivalent to `Vec3.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Vec3.str(this);\n  }\n  // ===================\n  // Instances methods\n  // ===================\n  /**\n   * Copy the values from another {@link Vec3} into `this`.\n   * @category Methods\n   *\n   * @param a the source vector\n   * @returns `this`\n   */\n  copy(a) {\n    this.set(a);\n    return this;\n  }\n  /**\n   * Adds a {@link Vec3} to `this`.\n   * Equivalent to `Vec3.add(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to add to `this`\n   * @returns `this`\n   */\n  add(b) {\n    this[0] += b[0];\n    this[1] += b[1];\n    this[2] += b[2];\n    return this;\n  }\n  /**\n   * Subtracts a {@link Vec3} from `this`.\n   * Equivalent to `Vec3.subtract(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to subtract from `this`\n   * @returns `this`\n   */\n  subtract(b) {\n    this[0] -= b[0];\n    this[1] -= b[1];\n    this[2] -= b[2];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec3.subtract}\n   * @category Methods\n   */\n  sub(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Multiplies `this` by a {@link Vec3}.\n   * Equivalent to `Vec3.multiply(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to multiply `this` by\n   * @returns `this`\n   */\n  multiply(b) {\n    this[0] *= b[0];\n    this[1] *= b[1];\n    this[2] *= b[2];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec3.multiply}\n   * @category Methods\n   */\n  mul(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Divides `this` by a {@link Vec3}.\n   * Equivalent to `Vec3.divide(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to divide `this` by\n   * @returns `this`\n   */\n  divide(b) {\n    this[0] /= b[0];\n    this[1] /= b[1];\n    this[2] /= b[2];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec3.divide}\n   * @category Methods\n   */\n  div(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Scales `this` by a scalar number.\n   * Equivalent to `Vec3.scale(this, this, b);`\n   * @category Methods\n   *\n   * @param b - Amount to scale `this` by\n   * @returns `this`\n   */\n  scale(b) {\n    this[0] *= b;\n    this[1] *= b;\n    this[2] *= b;\n    return this;\n  }\n  /**\n   * Calculates `this` scaled by a scalar value then adds the result to `this`.\n   * Equivalent to `Vec3.scaleAndAdd(this, this, b, scale);`\n   * @category Methods\n   *\n   * @param b - The vector to add to `this`\n   * @param scale - The amount to scale `b` by before adding\n   * @returns `this`\n   */\n  scaleAndAdd(b, scale) {\n    this[0] += b[0] * scale;\n    this[1] += b[1] * scale;\n    this[2] += b[2] * scale;\n    return this;\n  }\n  /**\n   * Calculates the Euclidean distance between another {@link Vec3} and `this`.\n   * Equivalent to `Vec3.distance(this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to calculate the distance to\n   * @returns Distance between `this` and `b`\n   */\n  distance(b) {\n    return _Vec3.distance(this, b);\n  }\n  /**\n   * Alias for {@link Vec3.distance}\n   * @category Methods\n   */\n  dist(b) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Calculates the squared Euclidean distance between another {@link Vec3} and `this`.\n   * Equivalent to `Vec3.squaredDistance(this, b);`\n   * @category Methods\n   *\n   * @param b The vector to calculate the squared distance to\n   * @returns Squared distance between `this` and `b`\n   */\n  squaredDistance(b) {\n    return _Vec3.squaredDistance(this, b);\n  }\n  /**\n   * Alias for {@link Vec3.squaredDistance}\n   * @category Methods\n   */\n  sqrDist(b) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Negates the components of `this`.\n   * Equivalent to `Vec3.negate(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  negate() {\n    this[0] *= -1;\n    this[1] *= -1;\n    this[2] *= -1;\n    return this;\n  }\n  /**\n   * Inverts the components of `this`.\n   * Equivalent to `Vec3.inverse(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  invert() {\n    this[0] = 1 / this[0];\n    this[1] = 1 / this[1];\n    this[2] = 1 / this[2];\n    return this;\n  }\n  /**\n   * Sets each component of `this` to its absolute value.\n   * Equivalent to `Vec3.abs(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  abs() {\n    this[0] = Math.abs(this[0]);\n    this[1] = Math.abs(this[1]);\n    this[2] = Math.abs(this[2]);\n    return this;\n  }\n  /**\n   * Calculates the dot product of this and another {@link Vec3}.\n   * Equivalent to `Vec3.dot(this, b);`\n   * @category Methods\n   *\n   * @param b - The second operand\n   * @returns Dot product of `this` and `b`\n   */\n  dot(b) {\n    return this[0] * b[0] + this[1] * b[1] + this[2] * b[2];\n  }\n  /**\n   * Normalize `this`.\n   * Equivalent to `Vec3.normalize(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  normalize() {\n    return _Vec3.normalize(this, this);\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Vec3}.\n   */\n  static get BYTE_LENGTH() {\n    return 3 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new, empty vec3\n   * @category Static\n   *\n   * @returns a new 3D vector\n   */\n  static create() {\n    return new _Vec3();\n  }\n  /**\n   * Creates a new vec3 initialized with values from an existing vector\n   * @category Static\n   *\n   * @param a - vector to clone\n   * @returns a new 3D vector\n   */\n  static clone(a) {\n    return new _Vec3(a);\n  }\n  /**\n   * Calculates the magnitude (length) of a {@link Vec3}\n   * @category Static\n   *\n   * @param a - Vector to calculate magnitude of\n   * @returns Magnitude of a\n   */\n  static magnitude(a) {\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    return Math.sqrt(x * x + y * y + z * z);\n  }\n  /**\n   * Alias for {@link Vec3.magnitude}\n   * @category Static\n   */\n  static mag(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Vec3.magnitude}\n   * @category Static\n   * @deprecated Use {@link Vec3.magnitude} to avoid conflicts with builtin `length` methods/attribs\n   *\n   * @param a - vector to calculate length of\n   * @returns length of a\n   */\n  // Length conflicts with Function.length\n  static length(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Vec3.magnitude}\n   * @category Static\n   * @deprecated Use {@link Vec3.mag}\n   */\n  static len(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Creates a new vec3 initialized with the given values\n   * @category Static\n   *\n   * @param x - X component\n   * @param y - Y component\n   * @param z - Z component\n   * @returns a new 3D vector\n   */\n  static fromValues(x, y, z) {\n    return new _Vec3(x, y, z);\n  }\n  /**\n   * Copy the values from one vec3 to another\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the source vector\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    return out;\n  }\n  /**\n   * Set the components of a vec3 to the given values\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param x - X component\n   * @param y - Y component\n   * @param z - Z component\n   * @returns `out`\n   */\n  static set(out, x, y, z) {\n    out[0] = x;\n    out[1] = y;\n    out[2] = z;\n    return out;\n  }\n  /**\n   * Adds two {@link Vec3}s\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static add(out, a, b) {\n    out[0] = a[0] + b[0];\n    out[1] = a[1] + b[1];\n    out[2] = a[2] + b[2];\n    return out;\n  }\n  /**\n   * Subtracts vector b from vector a\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static subtract(out, a, b) {\n    out[0] = a[0] - b[0];\n    out[1] = a[1] - b[1];\n    out[2] = a[2] - b[2];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec3.subtract}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sub(out, a, b) {\n    return [0, 0, 0];\n  }\n  /**\n   * Multiplies two vec3's\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static multiply(out, a, b) {\n    out[0] = a[0] * b[0];\n    out[1] = a[1] * b[1];\n    out[2] = a[2] * b[2];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec3.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return [0, 0, 0];\n  }\n  /**\n   * Divides two vec3's\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static divide(out, a, b) {\n    out[0] = a[0] / b[0];\n    out[1] = a[1] / b[1];\n    out[2] = a[2] / b[2];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec3.divide}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static div(out, a, b) {\n    return [0, 0, 0];\n  }\n  /**\n   * Math.ceil the components of a vec3\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to ceil\n   * @returns `out`\n   */\n  static ceil(out, a) {\n    out[0] = Math.ceil(a[0]);\n    out[1] = Math.ceil(a[1]);\n    out[2] = Math.ceil(a[2]);\n    return out;\n  }\n  /**\n   * Math.floor the components of a vec3\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to floor\n   * @returns `out`\n   */\n  static floor(out, a) {\n    out[0] = Math.floor(a[0]);\n    out[1] = Math.floor(a[1]);\n    out[2] = Math.floor(a[2]);\n    return out;\n  }\n  /**\n   * Returns the minimum of two vec3's\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static min(out, a, b) {\n    out[0] = Math.min(a[0], b[0]);\n    out[1] = Math.min(a[1], b[1]);\n    out[2] = Math.min(a[2], b[2]);\n    return out;\n  }\n  /**\n   * Returns the maximum of two vec3's\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static max(out, a, b) {\n    out[0] = Math.max(a[0], b[0]);\n    out[1] = Math.max(a[1], b[1]);\n    out[2] = Math.max(a[2], b[2]);\n    return out;\n  }\n  /**\n   * symmetric round the components of a vec3\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to round\n   * @returns `out`\n   */\n  /*\n    static round(out: Vec3Like, a: Readonly<Vec3Like>): Vec3Like {\n    out[0] = glMatrix.round(a[0]);\n    out[1] = glMatrix.round(a[1]);\n    out[2] = glMatrix.round(a[2]);\n    return out;\n  }*/\n  /**\n   * Scales a vec3 by a scalar number\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the vector to scale\n   * @param scale - amount to scale the vector by\n   * @returns `out`\n   */\n  static scale(out, a, scale) {\n    out[0] = a[0] * scale;\n    out[1] = a[1] * scale;\n    out[2] = a[2] * scale;\n    return out;\n  }\n  /**\n   * Adds two vec3's after scaling the second operand by a scalar value\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param scale - the amount to scale b by before adding\n   * @returns `out`\n   */\n  static scaleAndAdd(out, a, b, scale) {\n    out[0] = a[0] + b[0] * scale;\n    out[1] = a[1] + b[1] * scale;\n    out[2] = a[2] + b[2] * scale;\n    return out;\n  }\n  /**\n   * Calculates the Euclidean distance between two vec3's\n   * @category Static\n   *\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns distance between a and b\n   */\n  static distance(a, b) {\n    const x = b[0] - a[0];\n    const y = b[1] - a[1];\n    const z = b[2] - a[2];\n    return Math.sqrt(x * x + y * y + z * z);\n  }\n  /**\n   * Alias for {@link Vec3.distance}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static dist(a, b) {\n    return 0;\n  }\n  /**\n   * Calculates the squared Euclidean distance between two vec3's\n   * @category Static\n   *\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns squared distance between a and b\n   */\n  static squaredDistance(a, b) {\n    const x = b[0] - a[0];\n    const y = b[1] - a[1];\n    const z = b[2] - a[2];\n    return x * x + y * y + z * z;\n  }\n  /**\n   * Alias for {@link Vec3.squaredDistance}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sqrDist(a, b) {\n    return 0;\n  }\n  /**\n   * Calculates the squared length of a vec3\n   * @category Static\n   *\n   * @param a - vector to calculate squared length of\n   * @returns squared length of a\n   */\n  static squaredLength(a) {\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    return x * x + y * y + z * z;\n  }\n  /**\n   * Alias for {@link Vec3.squaredLength}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sqrLen(a, b) {\n    return 0;\n  }\n  /**\n   * Negates the components of a vec3\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to negate\n   * @returns `out`\n   */\n  static negate(out, a) {\n    out[0] = -a[0];\n    out[1] = -a[1];\n    out[2] = -a[2];\n    return out;\n  }\n  /**\n   * Returns the inverse of the components of a vec3\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to invert\n   * @returns `out`\n   */\n  static inverse(out, a) {\n    out[0] = 1 / a[0];\n    out[1] = 1 / a[1];\n    out[2] = 1 / a[2];\n    return out;\n  }\n  /**\n   * Returns the absolute value of the components of a {@link Vec3}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to compute the absolute values of\n   * @returns `out`\n   */\n  static abs(out, a) {\n    out[0] = Math.abs(a[0]);\n    out[1] = Math.abs(a[1]);\n    out[2] = Math.abs(a[2]);\n    return out;\n  }\n  /**\n   * Normalize a vec3\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to normalize\n   * @returns `out`\n   */\n  static normalize(out, a) {\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    let len = x * x + y * y + z * z;\n    if (len > 0) {\n      len = 1 / Math.sqrt(len);\n    }\n    out[0] = a[0] * len;\n    out[1] = a[1] * len;\n    out[2] = a[2] * len;\n    return out;\n  }\n  /**\n   * Calculates the dot product of two vec3's\n   * @category Static\n   *\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns dot product of a and b\n   */\n  static dot(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n  }\n  /**\n   * Computes the cross product of two vec3's\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static cross(out, a, b) {\n    const ax = a[0], ay = a[1], az = a[2];\n    const bx = b[0], by = b[1], bz = b[2];\n    out[0] = ay * bz - az * by;\n    out[1] = az * bx - ax * bz;\n    out[2] = ax * by - ay * bx;\n    return out;\n  }\n  /**\n   * Performs a linear interpolation between two vec3's\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static lerp(out, a, b, t) {\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    out[0] = ax + t * (b[0] - ax);\n    out[1] = ay + t * (b[1] - ay);\n    out[2] = az + t * (b[2] - az);\n    return out;\n  }\n  /**\n   * Performs a spherical linear interpolation between two vec3's\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static slerp(out, a, b, t) {\n    const angle = Math.acos(Math.min(Math.max(_Vec3.dot(a, b), -1), 1));\n    const sinTotal = Math.sin(angle);\n    const ratioA = Math.sin((1 - t) * angle) / sinTotal;\n    const ratioB = Math.sin(t * angle) / sinTotal;\n    out[0] = ratioA * a[0] + ratioB * b[0];\n    out[1] = ratioA * a[1] + ratioB * b[1];\n    out[2] = ratioA * a[2] + ratioB * b[2];\n    return out;\n  }\n  /**\n   * Performs a hermite interpolation with two control points\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param c - the third operand\n   * @param d - the fourth operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static hermite(out, a, b, c, d, t) {\n    const factorTimes2 = t * t;\n    const factor1 = factorTimes2 * (2 * t - 3) + 1;\n    const factor2 = factorTimes2 * (t - 2) + t;\n    const factor3 = factorTimes2 * (t - 1);\n    const factor4 = factorTimes2 * (3 - 2 * t);\n    out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n    out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n    out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n    return out;\n  }\n  /**\n   * Performs a bezier interpolation with two control points\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param c - the third operand\n   * @param d - the fourth operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static bezier(out, a, b, c, d, t) {\n    const inverseFactor = 1 - t;\n    const inverseFactorTimesTwo = inverseFactor * inverseFactor;\n    const factorTimes2 = t * t;\n    const factor1 = inverseFactorTimesTwo * inverseFactor;\n    const factor2 = 3 * t * inverseFactorTimesTwo;\n    const factor3 = 3 * factorTimes2 * inverseFactor;\n    const factor4 = factorTimes2 * t;\n    out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n    out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n    out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n    return out;\n  }\n  /**\n   * Generates a random vector with the given scale\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n   * @returns `out`\n   */\n  /*\n      static random(out: Vec3Like, scale) {\n      scale = scale === undefined ? 1.0 : scale;\n  \n      let r = glMatrix.RANDOM() * 2.0 * Math.PI;\n      let z = glMatrix.RANDOM() * 2.0 - 1.0;\n      let zScale = Math.sqrt(1.0 - z * z) * scale;\n  \n      out[0] = Math.cos(r) * zScale;\n      out[1] = Math.sin(r) * zScale;\n      out[2] = z * scale;\n      return out;\n    }*/\n  /**\n   * Transforms the vec3 with a mat4.\n   * 4th vector component is implicitly '1'\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the vector to transform\n   * @param m - matrix to transform with\n   * @returns `out`\n   */\n  static transformMat4(out, a, m) {\n    const x = a[0], y = a[1], z = a[2];\n    const w = m[3] * x + m[7] * y + m[11] * z + m[15] || 1;\n    out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n    out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n    out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n    return out;\n  }\n  /**\n   * Transforms the vec3 with a mat3.\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the vector to transform\n   * @param m - the 3x3 matrix to transform with\n   * @returns `out`\n   */\n  static transformMat3(out, a, m) {\n    const x = a[0], y = a[1], z = a[2];\n    out[0] = x * m[0] + y * m[3] + z * m[6];\n    out[1] = x * m[1] + y * m[4] + z * m[7];\n    out[2] = x * m[2] + y * m[5] + z * m[8];\n    return out;\n  }\n  /**\n   * Transforms the vec3 with a quat\n   * Can also be used for dual quaternions. (Multiply it with the real part)\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the vector to transform\n   * @param q - quaternion to transform with\n   * @returns `out`\n   */\n  static transformQuat(out, a, q) {\n    const qx = q[0];\n    const qy = q[1];\n    const qz = q[2];\n    const w2 = q[3] * 2;\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    const uvx = qy * z - qz * y;\n    const uvy = qz * x - qx * z;\n    const uvz = qx * y - qy * x;\n    const uuvx = (qy * uvz - qz * uvy) * 2;\n    const uuvy = (qz * uvx - qx * uvz) * 2;\n    const uuvz = (qx * uvy - qy * uvx) * 2;\n    out[0] = x + uvx * w2 + uuvx;\n    out[1] = y + uvy * w2 + uuvy;\n    out[2] = z + uvz * w2 + uuvz;\n    return out;\n  }\n  /**\n   * Rotate a 3D vector around the x-axis\n   * @category Static\n   *\n   * @param out - The receiving vec3\n   * @param a - The vec3 point to rotate\n   * @param b - The origin of the rotation\n   * @param rad - The angle of rotation in radians\n   * @returns `out`\n   */\n  static rotateX(out, a, b, rad) {\n    const by = b[1];\n    const bz = b[2];\n    const py = a[1] - by;\n    const pz = a[2] - bz;\n    out[0] = a[0];\n    out[1] = py * Math.cos(rad) - pz * Math.sin(rad) + by;\n    out[2] = py * Math.sin(rad) + pz * Math.cos(rad) + bz;\n    return out;\n  }\n  /**\n   * Rotate a 3D vector around the y-axis\n   * @category Static\n   *\n   * @param out - The receiving vec3\n   * @param a - The vec3 point to rotate\n   * @param b - The origin of the rotation\n   * @param rad - The angle of rotation in radians\n   * @returns `out`\n   */\n  static rotateY(out, a, b, rad) {\n    const bx = b[0];\n    const bz = b[2];\n    const px = a[0] - bx;\n    const pz = a[2] - bz;\n    out[0] = pz * Math.sin(rad) + px * Math.cos(rad) + bx;\n    out[1] = a[1];\n    out[2] = pz * Math.cos(rad) - px * Math.sin(rad) + bz;\n    return out;\n  }\n  /**\n   * Rotate a 3D vector around the z-axis\n   * @category Static\n   *\n   * @param out - The receiving vec3\n   * @param a - The vec3 point to rotate\n   * @param b - The origin of the rotation\n   * @param rad - The angle of rotation in radians\n   * @returns `out`\n   */\n  static rotateZ(out, a, b, rad) {\n    const bx = b[0];\n    const by = b[1];\n    const px = a[0] - bx;\n    const py = a[1] - by;\n    out[0] = px * Math.cos(rad) - py * Math.sin(rad) + bx;\n    out[1] = px * Math.sin(rad) + py * Math.cos(rad) + by;\n    out[2] = b[2];\n    return out;\n  }\n  /**\n   * Get the angle between two 3D vectors\n   * @category Static\n   *\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns The angle in radians\n   */\n  static angle(a, b) {\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    const bx = b[0];\n    const by = b[1];\n    const bz = b[2];\n    const mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz));\n    const cosine = mag && _Vec3.dot(a, b) / mag;\n    return Math.acos(Math.min(Math.max(cosine, -1), 1));\n  }\n  /**\n   * Set the components of a vec3 to zero\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @returns `out`\n   */\n  static zero(out) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    return out;\n  }\n  /**\n   * Returns a string representation of a vector\n   * @category Static\n   *\n   * @param a - vector to represent as a string\n   * @returns string representation of the vector\n   */\n  static str(a) {\n    return `Vec3(${a.join(\", \")})`;\n  }\n  /**\n   * Returns whether the vectors have exactly the same elements in the same position (when compared with ===)\n   * @category Static\n   *\n   * @param a - The first vector.\n   * @param b - The second vector.\n   * @returns True if the vectors are equal, false otherwise.\n   */\n  static exactEquals(a, b) {\n    return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n  }\n  /**\n   * Returns whether the vectors have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first vector.\n   * @param b - The second vector.\n   * @returns True if the vectors are equal, false otherwise.\n   */\n  static equals(a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    return Math.abs(a0 - b0) <= GLM_EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= GLM_EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= GLM_EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2));\n  }\n};\nVec3.prototype.sub = Vec3.prototype.subtract;\nVec3.prototype.mul = Vec3.prototype.multiply;\nVec3.prototype.div = Vec3.prototype.divide;\nVec3.prototype.dist = Vec3.prototype.distance;\nVec3.prototype.sqrDist = Vec3.prototype.squaredDistance;\nVec3.sub = Vec3.subtract;\nVec3.mul = Vec3.multiply;\nVec3.div = Vec3.divide;\nVec3.dist = Vec3.distance;\nVec3.sqrDist = Vec3.squaredDistance;\nVec3.sqrLen = Vec3.squaredLength;\nVec3.mag = Vec3.magnitude;\nVec3.length = Vec3.magnitude;\nVec3.len = Vec3.magnitude;\nvar Vec4 = class _Vec4 extends Float32Array {\n  /**\n   * Create a {@link Vec4}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 4:\n        super(values);\n        break;\n      case 2:\n        super(values[0], values[1], 4);\n        break;\n      case 1: {\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([v, v, v, v]);\n        } else {\n          super(v, 0, 4);\n        }\n        break;\n      }\n      default:\n        super(4);\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  // Getters and setters to make component access read better.\n  // These are likely to be a little bit slower than direct array access.\n  /**\n   * The x component of the vector. Equivalent to `this[0];`\n   * @category Vector Components\n   */\n  get x() {\n    return this[0];\n  }\n  set x(value) {\n    this[0] = value;\n  }\n  /**\n   * The y component of the vector. Equivalent to `this[1];`\n   * @category Vector Components\n   */\n  get y() {\n    return this[1];\n  }\n  set y(value) {\n    this[1] = value;\n  }\n  /**\n   * The z component of the vector. Equivalent to `this[2];`\n   * @category Vector Components\n   */\n  get z() {\n    return this[2];\n  }\n  set z(value) {\n    this[2] = value;\n  }\n  /**\n   * The w component of the vector. Equivalent to `this[3];`\n   * @category Vector Components\n   */\n  get w() {\n    return this[3];\n  }\n  set w(value) {\n    this[3] = value;\n  }\n  // Alternate set of getters and setters in case this is being used to define\n  // a color.\n  /**\n   * The r component of the vector. Equivalent to `this[0];`\n   * @category Color Components\n   */\n  get r() {\n    return this[0];\n  }\n  set r(value) {\n    this[0] = value;\n  }\n  /**\n   * The g component of the vector. Equivalent to `this[1];`\n   * @category Color Components\n   */\n  get g() {\n    return this[1];\n  }\n  set g(value) {\n    this[1] = value;\n  }\n  /**\n   * The b component of the vector. Equivalent to `this[2];`\n   * @category Color Components\n   */\n  get b() {\n    return this[2];\n  }\n  set b(value) {\n    this[2] = value;\n  }\n  /**\n   * The a component of the vector. Equivalent to `this[3];`\n   * @category Color Components\n   */\n  get a() {\n    return this[3];\n  }\n  set a(value) {\n    this[3] = value;\n  }\n  /**\n   * The magnitude (length) of this.\n   * Equivalent to `Vec4.magnitude(this);`\n   *\n   * Magnitude is used because the `length` attribute is already defined by\n   * TypedArrays to mean the number of elements in the array.\n   *\n   * @category Accessors\n   */\n  get magnitude() {\n    const x = this[0];\n    const y = this[1];\n    const z = this[2];\n    const w = this[3];\n    return Math.sqrt(x * x + y * y + z * z + w * w);\n  }\n  /**\n   * Alias for {@link Vec4.magnitude}\n   *\n   * @category Accessors\n   */\n  get mag() {\n    return this.magnitude;\n  }\n  /**\n   * A string representation of `this`\n   * Equivalent to `Vec4.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Vec4.str(this);\n  }\n  // ===================\n  // Instances methods\n  // ===================\n  /**\n   * Copy the values from another {@link Vec4} into `this`.\n   * @category Methods\n   *\n   * @param a the source vector\n   * @returns `this`\n   */\n  copy(a) {\n    super.set(a);\n    return this;\n  }\n  /**\n   * Adds a {@link Vec4} to `this`.\n   * Equivalent to `Vec4.add(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to add to `this`\n   * @returns `this`\n   */\n  add(b) {\n    this[0] += b[0];\n    this[1] += b[1];\n    this[2] += b[2];\n    this[3] += b[3];\n    return this;\n  }\n  /**\n   * Subtracts a {@link Vec4} from `this`.\n   * Equivalent to `Vec4.subtract(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to subtract from `this`\n   * @returns `this`\n   */\n  subtract(b) {\n    this[0] -= b[0];\n    this[1] -= b[1];\n    this[2] -= b[2];\n    this[3] -= b[3];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec4.subtract}\n   * @category Methods\n   */\n  sub(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Multiplies `this` by a {@link Vec4}.\n   * Equivalent to `Vec4.multiply(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to multiply `this` by\n   * @returns `this`\n   */\n  multiply(b) {\n    this[0] *= b[0];\n    this[1] *= b[1];\n    this[2] *= b[2];\n    this[3] *= b[3];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec4.multiply}\n   * @category Methods\n   */\n  mul(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Divides `this` by a {@link Vec4}.\n   * Equivalent to `Vec4.divide(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to divide `this` by\n   * @returns `this`\n   */\n  divide(b) {\n    this[0] /= b[0];\n    this[1] /= b[1];\n    this[2] /= b[2];\n    this[3] /= b[3];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec4.divide}\n   * @category Methods\n   */\n  div(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Scales `this` by a scalar number.\n   * Equivalent to `Vec4.scale(this, this, b);`\n   * @category Methods\n   *\n   * @param b - Amount to scale `this` by\n   * @returns `this`\n   */\n  scale(b) {\n    this[0] *= b;\n    this[1] *= b;\n    this[2] *= b;\n    this[3] *= b;\n    return this;\n  }\n  /**\n   * Calculates `this` scaled by a scalar value then adds the result to `this`.\n   * Equivalent to `Vec4.scaleAndAdd(this, this, b, scale);`\n   * @category Methods\n   *\n   * @param b - The vector to add to `this`\n   * @param scale - The amount to scale `b` by before adding\n   * @returns `this`\n   */\n  scaleAndAdd(b, scale) {\n    this[0] += b[0] * scale;\n    this[1] += b[1] * scale;\n    this[2] += b[2] * scale;\n    this[3] += b[3] * scale;\n    return this;\n  }\n  /**\n   * Calculates the Euclidean distance between another {@link Vec4} and `this`.\n   * Equivalent to `Vec4.distance(this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to calculate the distance to\n   * @returns Distance between `this` and `b`\n   */\n  distance(b) {\n    return _Vec4.distance(this, b);\n  }\n  /**\n   * Alias for {@link Vec4.distance}\n   * @category Methods\n   */\n  dist(b) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Calculates the squared Euclidean distance between another {@link Vec4} and `this`.\n   * Equivalent to `Vec4.squaredDistance(this, b);`\n   * @category Methods\n   *\n   * @param b The vector to calculate the squared distance to\n   * @returns Squared distance between `this` and `b`\n   */\n  squaredDistance(b) {\n    return _Vec4.squaredDistance(this, b);\n  }\n  /**\n   * Alias for {@link Vec4.squaredDistance}\n   * @category Methods\n   */\n  sqrDist(b) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Negates the components of `this`.\n   * Equivalent to `Vec4.negate(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  negate() {\n    this[0] *= -1;\n    this[1] *= -1;\n    this[2] *= -1;\n    this[3] *= -1;\n    return this;\n  }\n  /**\n   * Inverts the components of `this`.\n   * Equivalent to `Vec4.inverse(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  invert() {\n    this[0] = 1 / this[0];\n    this[1] = 1 / this[1];\n    this[2] = 1 / this[2];\n    this[3] = 1 / this[3];\n    return this;\n  }\n  /**\n   * Sets each component of `this` to it's absolute value.\n   * Equivalent to `Vec4.abs(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  abs() {\n    this[0] = Math.abs(this[0]);\n    this[1] = Math.abs(this[1]);\n    this[2] = Math.abs(this[2]);\n    this[3] = Math.abs(this[3]);\n    return this;\n  }\n  /**\n   * Calculates the dot product of this and another {@link Vec4}.\n   * Equivalent to `Vec4.dot(this, b);`\n   * @category Methods\n   *\n   * @param b - The second operand\n   * @returns Dot product of `this` and `b`\n   */\n  dot(b) {\n    return this[0] * b[0] + this[1] * b[1] + this[2] * b[2] + this[3] * b[3];\n  }\n  /**\n   * Normalize `this`.\n   * Equivalent to `Vec4.normalize(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  normalize() {\n    return _Vec4.normalize(this, this);\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Vec4}.\n   */\n  static get BYTE_LENGTH() {\n    return 4 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new, empty {@link Vec4}\n   * @category Static\n   *\n   * @returns a new 4D vector\n   */\n  static create() {\n    return new _Vec4();\n  }\n  /**\n   * Creates a new {@link Vec4} initialized with values from an existing vector\n   * @category Static\n   *\n   * @param a - vector to clone\n   * @returns a new 4D vector\n   */\n  static clone(a) {\n    return new _Vec4(a);\n  }\n  /**\n   * Creates a new {@link Vec4} initialized with the given values\n   * @category Static\n   *\n   * @param x - X component\n   * @param y - Y component\n   * @param z - Z component\n   * @param w - W component\n   * @returns a new 4D vector\n   */\n  static fromValues(x, y, z, w) {\n    return new _Vec4(x, y, z, w);\n  }\n  /**\n   * Copy the values from one {@link Vec4} to another\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the source vector\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    return out;\n  }\n  /**\n   * Set the components of a {@link Vec4} to the given values\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param x - X component\n   * @param y - Y component\n   * @param z - Z component\n   * @param w - W component\n   * @returns `out`\n   */\n  static set(out, x, y, z, w) {\n    out[0] = x;\n    out[1] = y;\n    out[2] = z;\n    out[3] = w;\n    return out;\n  }\n  /**\n   * Adds two {@link Vec4}s\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static add(out, a, b) {\n    out[0] = a[0] + b[0];\n    out[1] = a[1] + b[1];\n    out[2] = a[2] + b[2];\n    out[3] = a[3] + b[3];\n    return out;\n  }\n  /**\n   * Subtracts vector b from vector a\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static subtract(out, a, b) {\n    out[0] = a[0] - b[0];\n    out[1] = a[1] - b[1];\n    out[2] = a[2] - b[2];\n    out[3] = a[3] - b[3];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec4.subtract}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sub(out, a, b) {\n    return out;\n  }\n  /**\n   * Multiplies two {@link Vec4}'s\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static multiply(out, a, b) {\n    out[0] = a[0] * b[0];\n    out[1] = a[1] * b[1];\n    out[2] = a[2] * b[2];\n    out[3] = a[3] * b[3];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec4.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return out;\n  }\n  /**\n   * Divides two {@link Vec4}'s\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static divide(out, a, b) {\n    out[0] = a[0] / b[0];\n    out[1] = a[1] / b[1];\n    out[2] = a[2] / b[2];\n    out[3] = a[3] / b[3];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec4.divide}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static div(out, a, b) {\n    return out;\n  }\n  /**\n   * Math.ceil the components of a {@link Vec4}\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to ceil\n   * @returns `out`\n   */\n  static ceil(out, a) {\n    out[0] = Math.ceil(a[0]);\n    out[1] = Math.ceil(a[1]);\n    out[2] = Math.ceil(a[2]);\n    out[3] = Math.ceil(a[3]);\n    return out;\n  }\n  /**\n   * Math.floor the components of a {@link Vec4}\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to floor\n   * @returns `out`\n   */\n  static floor(out, a) {\n    out[0] = Math.floor(a[0]);\n    out[1] = Math.floor(a[1]);\n    out[2] = Math.floor(a[2]);\n    out[3] = Math.floor(a[3]);\n    return out;\n  }\n  /**\n   * Returns the minimum of two {@link Vec4}'s\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static min(out, a, b) {\n    out[0] = Math.min(a[0], b[0]);\n    out[1] = Math.min(a[1], b[1]);\n    out[2] = Math.min(a[2], b[2]);\n    out[3] = Math.min(a[3], b[3]);\n    return out;\n  }\n  /**\n   * Returns the maximum of two {@link Vec4}'s\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static max(out, a, b) {\n    out[0] = Math.max(a[0], b[0]);\n    out[1] = Math.max(a[1], b[1]);\n    out[2] = Math.max(a[2], b[2]);\n    out[3] = Math.max(a[3], b[3]);\n    return out;\n  }\n  /**\n   * Math.round the components of a {@link Vec4}\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to round\n   * @returns `out`\n   */\n  static round(out, a) {\n    out[0] = Math.round(a[0]);\n    out[1] = Math.round(a[1]);\n    out[2] = Math.round(a[2]);\n    out[3] = Math.round(a[3]);\n    return out;\n  }\n  /**\n   * Scales a {@link Vec4} by a scalar number\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the vector to scale\n   * @param scale - amount to scale the vector by\n   * @returns `out`\n   */\n  static scale(out, a, scale) {\n    out[0] = a[0] * scale;\n    out[1] = a[1] * scale;\n    out[2] = a[2] * scale;\n    out[3] = a[3] * scale;\n    return out;\n  }\n  /**\n   * Adds two {@link Vec4}'s after scaling the second operand by a scalar value\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param scale - the amount to scale b by before adding\n   * @returns `out`\n   */\n  static scaleAndAdd(out, a, b, scale) {\n    out[0] = a[0] + b[0] * scale;\n    out[1] = a[1] + b[1] * scale;\n    out[2] = a[2] + b[2] * scale;\n    out[3] = a[3] + b[3] * scale;\n    return out;\n  }\n  /**\n   * Calculates the Euclidean distance between two {@link Vec4}'s\n   * @category Static\n   *\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns distance between a and b\n   */\n  static distance(a, b) {\n    const x = b[0] - a[0];\n    const y = b[1] - a[1];\n    const z = b[2] - a[2];\n    const w = b[3] - a[3];\n    return Math.hypot(x, y, z, w);\n  }\n  /**\n   * Alias for {@link Vec4.distance}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static dist(a, b) {\n    return 0;\n  }\n  /**\n   * Calculates the squared Euclidean distance between two {@link Vec4}'s\n   * @category Static\n   *\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns squared distance between a and b\n   */\n  static squaredDistance(a, b) {\n    const x = b[0] - a[0];\n    const y = b[1] - a[1];\n    const z = b[2] - a[2];\n    const w = b[3] - a[3];\n    return x * x + y * y + z * z + w * w;\n  }\n  /**\n   * Alias for {@link Vec4.squaredDistance}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sqrDist(a, b) {\n    return 0;\n  }\n  /**\n   * Calculates the magnitude (length) of a {@link Vec4}\n   * @category Static\n   *\n   * @param a - vector to calculate length of\n   * @returns length of `a`\n   */\n  static magnitude(a) {\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    const w = a[3];\n    return Math.sqrt(x * x + y * y + z * z + w * w);\n  }\n  /**\n   * Alias for {@link Vec4.magnitude}\n   * @category Static\n   */\n  static mag(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Vec4.magnitude}\n   * @category Static\n   * @deprecated Use {@link Vec4.magnitude} to avoid conflicts with builtin `length` methods/attribs\n   */\n  // Length conflicts with Function.length\n  static length(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Vec4.magnitude}\n   * @category Static\n   * @deprecated Use {@link Vec4.mag}\n   */\n  static len(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Calculates the squared length of a {@link Vec4}\n   * @category Static\n   *\n   * @param a - vector to calculate squared length of\n   * @returns squared length of a\n   */\n  static squaredLength(a) {\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    const w = a[3];\n    return x * x + y * y + z * z + w * w;\n  }\n  /**\n   * Alias for {@link Vec4.squaredLength}\n   * @category Static\n   */\n  static sqrLen(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Negates the components of a {@link Vec4}\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to negate\n   * @returns `out`\n   */\n  static negate(out, a) {\n    out[0] = -a[0];\n    out[1] = -a[1];\n    out[2] = -a[2];\n    out[3] = -a[3];\n    return out;\n  }\n  /**\n   * Returns the inverse of the components of a {@link Vec4}\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to invert\n   * @returns `out`\n   */\n  static inverse(out, a) {\n    out[0] = 1 / a[0];\n    out[1] = 1 / a[1];\n    out[2] = 1 / a[2];\n    out[3] = 1 / a[3];\n    return out;\n  }\n  /**\n   * Returns the absolute value of the components of a {@link Vec4}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to compute the absolute values of\n   * @returns `out`\n   */\n  static abs(out, a) {\n    out[0] = Math.abs(a[0]);\n    out[1] = Math.abs(a[1]);\n    out[2] = Math.abs(a[2]);\n    out[3] = Math.abs(a[3]);\n    return out;\n  }\n  /**\n   * Normalize a {@link Vec4}\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - vector to normalize\n   * @returns `out`\n   */\n  static normalize(out, a) {\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    const w = a[3];\n    let len = x * x + y * y + z * z + w * w;\n    if (len > 0) {\n      len = 1 / Math.sqrt(len);\n    }\n    out[0] = x * len;\n    out[1] = y * len;\n    out[2] = z * len;\n    out[3] = w * len;\n    return out;\n  }\n  /**\n   * Calculates the dot product of two {@link Vec4}'s\n   * @category Static\n   *\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns dot product of a and b\n   */\n  static dot(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n  }\n  /**\n   * Returns the cross-product of three vectors in a 4-dimensional space\n   * @category Static\n   *\n   * @param out the receiving vector\n   * @param u - the first vector\n   * @param v - the second vector\n   * @param w - the third vector\n   * @returns result\n   */\n  static cross(out, u, v, w) {\n    const a = v[0] * w[1] - v[1] * w[0];\n    const b = v[0] * w[2] - v[2] * w[0];\n    const c = v[0] * w[3] - v[3] * w[0];\n    const d = v[1] * w[2] - v[2] * w[1];\n    const e = v[1] * w[3] - v[3] * w[1];\n    const f = v[2] * w[3] - v[3] * w[2];\n    const g = u[0];\n    const h = u[1];\n    const i = u[2];\n    const j = u[3];\n    out[0] = h * f - i * e + j * d;\n    out[1] = -(g * f) + i * c - j * b;\n    out[2] = g * e - h * c + j * a;\n    out[3] = -(g * d) + h * b - i * a;\n    return out;\n  }\n  /**\n   * Performs a linear interpolation between two {@link Vec4}'s\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static lerp(out, a, b, t) {\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    const aw = a[3];\n    out[0] = ax + t * (b[0] - ax);\n    out[1] = ay + t * (b[1] - ay);\n    out[2] = az + t * (b[2] - az);\n    out[3] = aw + t * (b[3] - aw);\n    return out;\n  }\n  /**\n   * Generates a random vector with the given scale\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param [scale] - Length of the resulting vector. If ommitted, a unit vector will be returned\n   * @returns `out`\n   */\n  /*\n      static random(out: Vec4Like, scale): Vec4Like {\n      scale = scale || 1.0;\n  \n      // Marsaglia, George. Choosing a Point from the Surface of a\n      // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n      // http://projecteuclid.org/euclid.aoms/1177692644;\n      var v1, v2, v3, v4;\n      var s1, s2;\n      do {\n        v1 = glMatrix.RANDOM() * 2 - 1;\n        v2 = glMatrix.RANDOM() * 2 - 1;\n        s1 = v1 * v1 + v2 * v2;\n      } while (s1 >= 1);\n      do {\n        v3 = glMatrix.RANDOM() * 2 - 1;\n        v4 = glMatrix.RANDOM() * 2 - 1;\n        s2 = v3 * v3 + v4 * v4;\n      } while (s2 >= 1);\n  \n      var d = Math.sqrt((1 - s1) / s2);\n      out[0] = scale * v1;\n      out[1] = scale * v2;\n      out[2] = scale * v3 * d;\n      out[3] = scale * v4 * d;\n      return out;\n    }*/\n  /**\n   * Transforms the {@link Vec4} with a {@link Mat4}.\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the vector to transform\n   * @param m - matrix to transform with\n   * @returns `out`\n   */\n  static transformMat4(out, a, m) {\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    const w = a[3];\n    out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n    out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n    out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n    out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n    return out;\n  }\n  /**\n   * Transforms the {@link Vec4} with a {@link Quat}\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the vector to transform\n   * @param q - quaternion to transform with\n   * @returns `out`\n   */\n  static transformQuat(out, a, q) {\n    const x = a[0];\n    const y = a[1];\n    const z = a[2];\n    const qx = q[0];\n    const qy = q[1];\n    const qz = q[2];\n    const qw = q[3];\n    const ix = qw * x + qy * z - qz * y;\n    const iy = qw * y + qz * x - qx * z;\n    const iz = qw * z + qx * y - qy * x;\n    const iw = -qx * x - qy * y - qz * z;\n    out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n    out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n    out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n    out[3] = a[3];\n    return out;\n  }\n  /**\n   * Set the components of a {@link Vec4} to zero\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @returns `out`\n   */\n  static zero(out) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    return out;\n  }\n  /**\n   * Returns a string representation of a {@link Vec4}\n   * @category Static\n   *\n   * @param a - vector to represent as a string\n   * @returns string representation of the vector\n   */\n  static str(a) {\n    return `Vec4(${a.join(\", \")})`;\n  }\n  /**\n   * Returns whether the vectors have exactly the same elements in the same position (when compared with ===)\n   * @category Static\n   *\n   * @param a - The first vector.\n   * @param b - The second vector.\n   * @returns True if the vectors are equal, false otherwise.\n   */\n  static exactEquals(a, b) {\n    return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n  }\n  /**\n   * Returns whether the vectors have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first vector.\n   * @param b - The second vector.\n   * @returns True if the vectors are equal, false otherwise.\n   */\n  static equals(a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    const b3 = b[3];\n    return Math.abs(a0 - b0) <= GLM_EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= GLM_EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= GLM_EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= GLM_EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3));\n  }\n};\nVec4.prototype.sub = Vec4.prototype.subtract;\nVec4.prototype.mul = Vec4.prototype.multiply;\nVec4.prototype.div = Vec4.prototype.divide;\nVec4.prototype.dist = Vec4.prototype.distance;\nVec4.prototype.sqrDist = Vec4.prototype.squaredDistance;\nVec4.sub = Vec4.subtract;\nVec4.mul = Vec4.multiply;\nVec4.div = Vec4.divide;\nVec4.dist = Vec4.distance;\nVec4.sqrDist = Vec4.squaredDistance;\nVec4.sqrLen = Vec4.squaredLength;\nVec4.mag = Vec4.magnitude;\nVec4.length = Vec4.magnitude;\nVec4.len = Vec4.magnitude;\nvar Quat = class _Quat extends Float32Array {\n  static #DEFAULT_ANGLE_ORDER = \"zyx\";\n  // Temporary variables to prevent repeated allocations in the algorithms within Quat.\n  // These are declared as TypedArrays to aid in tree-shaking.\n  static #TMP_QUAT1 = new Float32Array(4);\n  static #TMP_QUAT2 = new Float32Array(4);\n  static #TMP_MAT3 = new Float32Array(9);\n  static #TMP_VEC3 = new Float32Array(3);\n  static #X_UNIT_VEC3 = new Float32Array([1, 0, 0]);\n  static #Y_UNIT_VEC3 = new Float32Array([0, 1, 0]);\n  /**\n   * Create a {@link Quat}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 4:\n        super(values);\n        break;\n      case 2:\n        super(values[0], values[1], 4);\n        break;\n      case 1: {\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([v, v, v, v]);\n        } else {\n          super(v, 0, 4);\n        }\n        break;\n      }\n      default:\n        super(4);\n        this[3] = 1;\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  // Getters and setters to make component access read better.\n  // These are likely to be a little bit slower than direct array access.\n  /**\n   * The x component of the quaternion. Equivalent to `this[0];`\n   * @category Quaternion Components\n   */\n  get x() {\n    return this[0];\n  }\n  set x(value) {\n    this[0] = value;\n  }\n  /**\n   * The y component of the quaternion. Equivalent to `this[1];`\n   * @category Quaternion Components\n   */\n  get y() {\n    return this[1];\n  }\n  set y(value) {\n    this[1] = value;\n  }\n  /**\n   * The z component of the quaternion. Equivalent to `this[2];`\n   * @category Quaternion Components\n   */\n  get z() {\n    return this[2];\n  }\n  set z(value) {\n    this[2] = value;\n  }\n  /**\n   * The w component of the quaternion. Equivalent to `this[3];`\n   * @category Quaternion Components\n   */\n  get w() {\n    return this[3];\n  }\n  set w(value) {\n    this[3] = value;\n  }\n  /**\n   * The magnitude (length) of this.\n   * Equivalent to `Quat.magnitude(this);`\n   *\n   * Magnitude is used because the `length` attribute is already defined by\n   * TypedArrays to mean the number of elements in the array.\n   *\n   * @category Accessors\n   */\n  get magnitude() {\n    const x = this[0];\n    const y = this[1];\n    const z = this[2];\n    const w = this[3];\n    return Math.sqrt(x * x + y * y + z * z + w * w);\n  }\n  /**\n   * Alias for {@link Quat.magnitude}\n   *\n   * @category Accessors\n   */\n  get mag() {\n    return this.magnitude;\n  }\n  /**\n   * A string representation of `this`\n   * Equivalent to `Quat.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Quat.str(this);\n  }\n  // ===================\n  // Instances methods\n  // ===================\n  /**\n   * Copy the values from another {@link Quat} into `this`.\n   * @category Methods\n   *\n   * @param a the source quaternion\n   * @returns `this`\n   */\n  copy(a) {\n    super.set(a);\n    return this;\n  }\n  /**\n   * Set `this` to the identity quaternion\n   * Equivalent to Quat.identity(this)\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  identity() {\n    this[0] = 0;\n    this[1] = 0;\n    this[2] = 0;\n    this[3] = 1;\n    return this;\n  }\n  /**\n   * Multiplies `this` by a {@link Quat}.\n   * Equivalent to `Quat.multiply(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to multiply `this` by\n   * @returns `this`\n   */\n  multiply(b) {\n    return _Quat.multiply(this, this, b);\n  }\n  /**\n   * Alias for {@link Quat.multiply}\n   * @category Methods\n   */\n  mul(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Rotates `this` by the given angle about the X axis\n   * Equivalent to `Quat.rotateX(this, this, rad);`\n   * @category Methods\n   *\n   * @param rad - angle (in radians) to rotate\n   * @returns `this`\n   */\n  rotateX(rad) {\n    return _Quat.rotateX(this, this, rad);\n  }\n  /**\n   * Rotates `this` by the given angle about the Y axis\n   * Equivalent to `Quat.rotateY(this, this, rad);`\n   * @category Methods\n   *\n   * @param rad - angle (in radians) to rotate\n   * @returns `this`\n   */\n  rotateY(rad) {\n    return _Quat.rotateY(this, this, rad);\n  }\n  /**\n   * Rotates `this` by the given angle about the Z axis\n   * Equivalent to `Quat.rotateZ(this, this, rad);`\n   * @category Methods\n   *\n   * @param rad - angle (in radians) to rotate\n   * @returns `this`\n   */\n  rotateZ(rad) {\n    return _Quat.rotateZ(this, this, rad);\n  }\n  /**\n   * Inverts `this`\n   * Equivalent to `Quat.invert(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  invert() {\n    return _Quat.invert(this, this);\n  }\n  /**\n   * Scales `this` by a scalar number\n   * Equivalent to `Quat.scale(this, this, scale);`\n   * @category Methods\n   *\n   * @param scale - amount to scale the vector by\n   * @returns `this`\n   */\n  scale(scale) {\n    this[0] *= scale;\n    this[1] *= scale;\n    this[2] *= scale;\n    this[3] *= scale;\n    return this;\n  }\n  /**\n   * Calculates the dot product of `this` and another {@link Quat}\n   * Equivalent to `Quat.dot(this, b);`\n   * @category Methods\n   *\n   * @param b - the second operand\n   * @returns dot product of `this` and b\n   */\n  dot(b) {\n    return _Quat.dot(this, b);\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Quat}.\n   */\n  static get BYTE_LENGTH() {\n    return 4 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new identity quat\n   * @category Static\n   *\n   * @returns a new quaternion\n   */\n  static create() {\n    return new _Quat();\n  }\n  /**\n   * Set a quat to the identity quaternion\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @returns `out`\n   */\n  static identity(out) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    return out;\n  }\n  /**\n   * Sets a quat from the given angle and rotation axis,\n   * then returns it.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param axis - the axis around which to rotate\n   * @param rad - the angle in radians\n   * @returns `out`\n   **/\n  static setAxisAngle(out, axis, rad) {\n    rad *= 0.5;\n    const s = Math.sin(rad);\n    out[0] = s * axis[0];\n    out[1] = s * axis[1];\n    out[2] = s * axis[2];\n    out[3] = Math.cos(rad);\n    return out;\n  }\n  /**\n   * Gets the rotation axis and angle for a given\n   *  quaternion. If a quaternion is created with\n   *  setAxisAngle, this method will return the same\n   *  values as provided in the original parameter list\n   *  OR functionally equivalent values.\n   * Example: The quaternion formed by axis [0, 0, 1] and\n   *  angle -90 is the same as the quaternion formed by\n   *  [0, 0, 1] and 270. This method favors the latter.\n   * @category Static\n   *\n   * @param out_axis - Vector receiving the axis of rotation\n   * @param q - Quaternion to be decomposed\n   * @return Angle, in radians, of the rotation\n   */\n  static getAxisAngle(out_axis, q) {\n    const rad = Math.acos(q[3]) * 2;\n    const s = Math.sin(rad / 2);\n    if (s > GLM_EPSILON) {\n      out_axis[0] = q[0] / s;\n      out_axis[1] = q[1] / s;\n      out_axis[2] = q[2] / s;\n    } else {\n      out_axis[0] = 1;\n      out_axis[1] = 0;\n      out_axis[2] = 0;\n    }\n    return rad;\n  }\n  /**\n   * Gets the angular distance between two unit quaternions\n   * @category Static\n   *\n   * @param  {ReadonlyQuat} a     Origin unit quaternion\n   * @param  {ReadonlyQuat} b     Destination unit quaternion\n   * @return {Number}     Angle, in radians, between the two quaternions\n   */\n  static getAngle(a, b) {\n    const dotproduct = _Quat.dot(a, b);\n    return Math.acos(2 * dotproduct * dotproduct - 1);\n  }\n  /**\n   * Multiplies two quaternions.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static multiply(out, a, b) {\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    const aw = a[3];\n    const bx = b[0];\n    const by = b[1];\n    const bz = b[2];\n    const bw = b[3];\n    out[0] = ax * bw + aw * bx + ay * bz - az * by;\n    out[1] = ay * bw + aw * by + az * bx - ax * bz;\n    out[2] = az * bw + aw * bz + ax * by - ay * bx;\n    out[3] = aw * bw - ax * bx - ay * by - az * bz;\n    return out;\n  }\n  /**\n   * Rotates a quaternion by the given angle about the X axis\n   * @category Static\n   *\n   * @param out - quat receiving operation result\n   * @param a - quat to rotate\n   * @param rad - angle (in radians) to rotate\n   * @returns `out`\n   */\n  static rotateX(out, a, rad) {\n    rad *= 0.5;\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    const aw = a[3];\n    const bx = Math.sin(rad);\n    const bw = Math.cos(rad);\n    out[0] = ax * bw + aw * bx;\n    out[1] = ay * bw + az * bx;\n    out[2] = az * bw - ay * bx;\n    out[3] = aw * bw - ax * bx;\n    return out;\n  }\n  /**\n   * Rotates a quaternion by the given angle about the Y axis\n   * @category Static\n   *\n   * @param out - quat receiving operation result\n   * @param a - quat to rotate\n   * @param rad - angle (in radians) to rotate\n   * @returns `out`\n   */\n  static rotateY(out, a, rad) {\n    rad *= 0.5;\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    const aw = a[3];\n    const by = Math.sin(rad);\n    const bw = Math.cos(rad);\n    out[0] = ax * bw - az * by;\n    out[1] = ay * bw + aw * by;\n    out[2] = az * bw + ax * by;\n    out[3] = aw * bw - ay * by;\n    return out;\n  }\n  /**\n   * Rotates a quaternion by the given angle about the Z axis\n   * @category Static\n   *\n   * @param out - quat receiving operation result\n   * @param a - quat to rotate\n   * @param rad - angle (in radians) to rotate\n   * @returns `out`\n   */\n  static rotateZ(out, a, rad) {\n    rad *= 0.5;\n    const ax = a[0];\n    const ay = a[1];\n    const az = a[2];\n    const aw = a[3];\n    const bz = Math.sin(rad);\n    const bw = Math.cos(rad);\n    out[0] = ax * bw + ay * bz;\n    out[1] = ay * bw - ax * bz;\n    out[2] = az * bw + aw * bz;\n    out[3] = aw * bw - az * bz;\n    return out;\n  }\n  /**\n   * Calculates the W component of a quat from the X, Y, and Z components.\n   * Assumes that quaternion is 1 unit in length.\n   * Any existing W component will be ignored.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - quat to calculate W component of\n   * @returns `out`\n   */\n  static calculateW(out, a) {\n    const x = a[0], y = a[1], z = a[2];\n    out[0] = x;\n    out[1] = y;\n    out[2] = z;\n    out[3] = Math.sqrt(Math.abs(1 - x * x - y * y - z * z));\n    return out;\n  }\n  /**\n   * Calculate the exponential of a unit quaternion.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - quat to calculate the exponential of\n   * @returns `out`\n   */\n  static exp(out, a) {\n    const x = a[0], y = a[1], z = a[2], w = a[3];\n    const r = Math.sqrt(x * x + y * y + z * z);\n    const et = Math.exp(w);\n    const s = r > 0 ? et * Math.sin(r) / r : 0;\n    out[0] = x * s;\n    out[1] = y * s;\n    out[2] = z * s;\n    out[3] = et * Math.cos(r);\n    return out;\n  }\n  /**\n   * Calculate the natural logarithm of a unit quaternion.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - quat to calculate the exponential of\n   * @returns `out`\n   */\n  static ln(out, a) {\n    const x = a[0], y = a[1], z = a[2], w = a[3];\n    const r = Math.sqrt(x * x + y * y + z * z);\n    const t = r > 0 ? Math.atan2(r, w) / r : 0;\n    out[0] = x * t;\n    out[1] = y * t;\n    out[2] = z * t;\n    out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);\n    return out;\n  }\n  /**\n   * Calculate the scalar power of a unit quaternion.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - quat to calculate the exponential of\n   * @param b - amount to scale the quaternion by\n   * @returns `out`\n   */\n  static pow(out, a, b) {\n    _Quat.ln(out, a);\n    _Quat.scale(out, out, b);\n    _Quat.exp(out, out);\n    return out;\n  }\n  /**\n   * Performs a spherical linear interpolation between two quat\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static slerp(out, a, b, t) {\n    const ax = a[0], ay = a[1], az = a[2], aw = a[3];\n    let bx = b[0], by = b[1], bz = b[2], bw = b[3];\n    let scale0;\n    let scale1;\n    let cosom = ax * bx + ay * by + az * bz + aw * bw;\n    if (cosom < 0) {\n      cosom = -cosom;\n      bx = -bx;\n      by = -by;\n      bz = -bz;\n      bw = -bw;\n    }\n    if (1 - cosom > GLM_EPSILON) {\n      const omega = Math.acos(cosom);\n      const sinom = Math.sin(omega);\n      scale0 = Math.sin((1 - t) * omega) / sinom;\n      scale1 = Math.sin(t * omega) / sinom;\n    } else {\n      scale0 = 1 - t;\n      scale1 = t;\n    }\n    out[0] = scale0 * ax + scale1 * bx;\n    out[1] = scale0 * ay + scale1 * by;\n    out[2] = scale0 * az + scale1 * bz;\n    out[3] = scale0 * aw + scale1 * bw;\n    return out;\n  }\n  /**\n   * Generates a random unit quaternion\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @returns `out`\n   */\n  /* static random(out: QuatLike): QuatLike {\n      // Implementation of http://planning.cs.uiuc.edu/node198.html\n      // TODO: Calling random 3 times is probably not the fastest solution\n      let u1 = glMatrix.RANDOM();\n      let u2 = glMatrix.RANDOM();\n      let u3 = glMatrix.RANDOM();\n  \n      let sqrt1MinusU1 = Math.sqrt(1 - u1);\n      let sqrtU1 = Math.sqrt(u1);\n  \n      out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\n      out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\n      out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\n      out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\n      return out;\n    }*/\n  /**\n   * Calculates the inverse of a quat\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - quat to calculate inverse of\n   * @returns `out`\n   */\n  static invert(out, a) {\n    const a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];\n    const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n    const invDot = dot ? 1 / dot : 0;\n    out[0] = -a0 * invDot;\n    out[1] = -a1 * invDot;\n    out[2] = -a2 * invDot;\n    out[3] = a3 * invDot;\n    return out;\n  }\n  /**\n   * Calculates the conjugate of a quat\n   * If the quaternion is normalized, this function is faster than `quat.inverse` and produces the same result.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - quat to calculate conjugate of\n   * @returns `out`\n   */\n  static conjugate(out, a) {\n    out[0] = -a[0];\n    out[1] = -a[1];\n    out[2] = -a[2];\n    out[3] = a[3];\n    return out;\n  }\n  /**\n   * Creates a quaternion from the given 3x3 rotation matrix.\n   *\n   * NOTE: The resultant quaternion is not normalized, so you should be sure\n   * to re-normalize the quaternion yourself where necessary.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param m - rotation matrix\n   * @returns `out`\n   */\n  static fromMat3(out, m) {\n    const fTrace = m[0] + m[4] + m[8];\n    let fRoot;\n    if (fTrace > 0) {\n      fRoot = Math.sqrt(fTrace + 1);\n      out[3] = 0.5 * fRoot;\n      fRoot = 0.5 / fRoot;\n      out[0] = (m[5] - m[7]) * fRoot;\n      out[1] = (m[6] - m[2]) * fRoot;\n      out[2] = (m[1] - m[3]) * fRoot;\n    } else {\n      let i = 0;\n      if (m[4] > m[0]) {\n        i = 1;\n      }\n      if (m[8] > m[i * 3 + i]) {\n        i = 2;\n      }\n      const j = (i + 1) % 3;\n      const k = (i + 2) % 3;\n      fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1);\n      out[i] = 0.5 * fRoot;\n      fRoot = 0.5 / fRoot;\n      out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n      out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n      out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n    }\n    return out;\n  }\n  /**\n   * Creates a quaternion from the given euler angle x, y, z.\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param x - Angle to rotate around X axis in degrees.\n   * @param y - Angle to rotate around Y axis in degrees.\n   * @param z - Angle to rotate around Z axis in degrees.\n   * @param {'xyz'|'xzy'|'yxz'|'yzx'|'zxy'|'zyx'} order - Intrinsic order for conversion, default is zyx.\n   * @returns `out`\n   */\n  static fromEuler(out, x, y, z, order = _Quat.#DEFAULT_ANGLE_ORDER) {\n    const halfToRad = 0.5 * Math.PI / 180;\n    x *= halfToRad;\n    y *= halfToRad;\n    z *= halfToRad;\n    const sx = Math.sin(x);\n    const cx = Math.cos(x);\n    const sy = Math.sin(y);\n    const cy = Math.cos(y);\n    const sz = Math.sin(z);\n    const cz = Math.cos(z);\n    switch (order) {\n      case \"xyz\":\n        out[0] = sx * cy * cz + cx * sy * sz;\n        out[1] = cx * sy * cz - sx * cy * sz;\n        out[2] = cx * cy * sz + sx * sy * cz;\n        out[3] = cx * cy * cz - sx * sy * sz;\n        break;\n      case \"xzy\":\n        out[0] = sx * cy * cz - cx * sy * sz;\n        out[1] = cx * sy * cz - sx * cy * sz;\n        out[2] = cx * cy * sz + sx * sy * cz;\n        out[3] = cx * cy * cz + sx * sy * sz;\n        break;\n      case \"yxz\":\n        out[0] = sx * cy * cz + cx * sy * sz;\n        out[1] = cx * sy * cz - sx * cy * sz;\n        out[2] = cx * cy * sz - sx * sy * cz;\n        out[3] = cx * cy * cz + sx * sy * sz;\n        break;\n      case \"yzx\":\n        out[0] = sx * cy * cz + cx * sy * sz;\n        out[1] = cx * sy * cz + sx * cy * sz;\n        out[2] = cx * cy * sz - sx * sy * cz;\n        out[3] = cx * cy * cz - sx * sy * sz;\n        break;\n      case \"zxy\":\n        out[0] = sx * cy * cz - cx * sy * sz;\n        out[1] = cx * sy * cz + sx * cy * sz;\n        out[2] = cx * cy * sz + sx * sy * cz;\n        out[3] = cx * cy * cz - sx * sy * sz;\n        break;\n      case \"zyx\":\n        out[0] = sx * cy * cz - cx * sy * sz;\n        out[1] = cx * sy * cz + sx * cy * sz;\n        out[2] = cx * cy * sz - sx * sy * cz;\n        out[3] = cx * cy * cz + sx * sy * sz;\n        break;\n      default:\n        throw new Error(`Unknown angle order ${order}`);\n    }\n    return out;\n  }\n  /**\n   * Returns a string representation of a quatenion\n   * @category Static\n   *\n   * @param a - vector to represent as a string\n   * @returns string representation of the vector\n   */\n  static str(a) {\n    return `Quat(${a.join(\", \")})`;\n  }\n  /**\n   * Creates a new quat initialized with values from an existing quaternion\n   * @category Static\n   *\n   * @param a - quaternion to clone\n   * @returns a new quaternion\n   */\n  static clone(a) {\n    return new _Quat(a);\n  }\n  /**\n   * Creates a new quat initialized with the given values\n   * @category Static\n   *\n   * @param x - X component\n   * @param y - Y component\n   * @param z - Z component\n   * @param w - W component\n   * @returns a new quaternion\n   */\n  static fromValues(x, y, z, w) {\n    return new _Quat(x, y, z, w);\n  }\n  /**\n   * Copy the values from one quat to another\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - the source quaternion\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    return out;\n  }\n  /**\n   * Set the components of a {@link Quat} to the given values\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param x - X component\n   * @param y - Y component\n   * @param z - Z component\n   * @param w - W component\n   * @returns `out`\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static set(out, x, y, z, w) {\n    return out;\n  }\n  /**\n   * Adds two {@link Quat}'s\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static add(out, a, b) {\n    return out;\n  }\n  /**\n   * Alias for {@link Quat.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return out;\n  }\n  /**\n   * Scales a quat by a scalar number\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - the vector to scale\n   * @param b - amount to scale the vector by\n   * @returns `out`\n   */\n  static scale(out, a, scale) {\n    out[0] = a[0] * scale;\n    out[1] = a[1] * scale;\n    out[2] = a[2] * scale;\n    out[3] = a[3] * scale;\n    return out;\n  }\n  /**\n   * Calculates the dot product of two quat's\n   * @category Static\n   *\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns dot product of a and b\n   */\n  static dot(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n  }\n  /**\n   * Performs a linear interpolation between two quat's\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static lerp(out, a, b, t) {\n    return out;\n  }\n  /**\n   * Calculates the magnitude (length) of a {@link Quat}\n   * @category Static\n   *\n   * @param a - quaternion to calculate length of\n   * @returns length of `a`\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static magnitude(a) {\n    return 0;\n  }\n  /**\n   * Alias for {@link Quat.magnitude}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mag(a) {\n    return 0;\n  }\n  /**\n   * Alias for {@link Quat.magnitude}\n   * @category Static\n   * @deprecated Use {@link Quat.magnitude} to avoid conflicts with builtin `length` methods/attribs\n   */\n  // Length conflicts with Function.length\n  static length(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Quat.magnitude}\n   * @category Static\n   * @deprecated Use {@link Quat.mag}\n   */\n  static len(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Calculates the squared length of a {@link Quat}\n   * @category Static\n   *\n   * @param a - quaternion to calculate squared length of\n   * @returns squared length of a\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static squaredLength(a) {\n    return 0;\n  }\n  /**\n   * Alias for {@link Quat.squaredLength}\n   * @category Static\n   */\n  static sqrLen(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Normalize a {@link Quat}\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - quaternion to normalize\n   * @returns `out`\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static normalize(out, a) {\n    return out;\n  }\n  /**\n   * Returns whether the quaternions have exactly the same elements in the same position (when compared with ===)\n   * @category Static\n   *\n   * @param a - The first quaternion.\n   * @param b - The second quaternion.\n   * @returns True if the vectors are equal, false otherwise.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static exactEquals(a, b) {\n    return false;\n  }\n  /**\n   * Returns whether the quaternions have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first vector.\n   * @param b - The second vector.\n   * @returns True if the vectors are equal, false otherwise.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static equals(a, b) {\n    return false;\n  }\n  /**\n   * Sets a quaternion to represent the shortest rotation from one\n   * vector to another.\n   *\n   * Both vectors are assumed to be unit length.\n   * @category Static\n   *\n   * @param out - the receiving quaternion.\n   * @param a - the initial vector\n   * @param b - the destination vector\n   * @returns `out`\n   */\n  static rotationTo(out, a, b) {\n    const dot = Vec3.dot(a, b);\n    if (dot < -0.999999) {\n      Vec3.cross(_Quat.#TMP_VEC3, _Quat.#X_UNIT_VEC3, a);\n      if (Vec3.mag(_Quat.#TMP_VEC3) < 1e-6) {\n        Vec3.cross(_Quat.#TMP_VEC3, _Quat.#Y_UNIT_VEC3, a);\n      }\n      Vec3.normalize(_Quat.#TMP_VEC3, _Quat.#TMP_VEC3);\n      _Quat.setAxisAngle(out, _Quat.#TMP_VEC3, Math.PI);\n      return out;\n    } else if (dot > 0.999999) {\n      out[0] = 0;\n      out[1] = 0;\n      out[2] = 0;\n      out[3] = 1;\n      return out;\n    } else {\n      Vec3.cross(_Quat.#TMP_VEC3, a, b);\n      out[0] = _Quat.#TMP_VEC3[0];\n      out[1] = _Quat.#TMP_VEC3[1];\n      out[2] = _Quat.#TMP_VEC3[2];\n      out[3] = 1 + dot;\n      return _Quat.normalize(out, out);\n    }\n  }\n  /**\n   * Performs a spherical linear interpolation with two control points\n   * @category Static\n   *\n   * @param out - the receiving quaternion\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param c - the third operand\n   * @param d - the fourth operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static sqlerp(out, a, b, c, d, t) {\n    _Quat.slerp(_Quat.#TMP_QUAT1, a, d, t);\n    _Quat.slerp(_Quat.#TMP_QUAT2, b, c, t);\n    _Quat.slerp(out, _Quat.#TMP_QUAT1, _Quat.#TMP_QUAT2, 2 * t * (1 - t));\n    return out;\n  }\n  /**\n   * Sets the specified quaternion with values corresponding to the given\n   * axes. Each axis is a vec3 and is expected to be unit length and\n   * perpendicular to all other specified axes.\n   * @category Static\n   *\n   * @param out - The receiving quaternion\n   * @param view - the vector representing the viewing direction\n   * @param right - the vector representing the local `right` direction\n   * @param up - the vector representing the local `up` direction\n   * @returns `out`\n   */\n  static setAxes(out, view, right, up) {\n    _Quat.#TMP_MAT3[0] = right[0];\n    _Quat.#TMP_MAT3[3] = right[1];\n    _Quat.#TMP_MAT3[6] = right[2];\n    _Quat.#TMP_MAT3[1] = up[0];\n    _Quat.#TMP_MAT3[4] = up[1];\n    _Quat.#TMP_MAT3[7] = up[2];\n    _Quat.#TMP_MAT3[2] = -view[0];\n    _Quat.#TMP_MAT3[5] = -view[1];\n    _Quat.#TMP_MAT3[8] = -view[2];\n    return _Quat.normalize(out, _Quat.fromMat3(out, _Quat.#TMP_MAT3));\n  }\n};\nQuat.set = Vec4.set;\nQuat.add = Vec4.add;\nQuat.lerp = Vec4.lerp;\nQuat.normalize = Vec4.normalize;\nQuat.squaredLength = Vec4.squaredLength;\nQuat.sqrLen = Vec4.squaredLength;\nQuat.exactEquals = Vec4.exactEquals;\nQuat.equals = Vec4.equals;\nQuat.magnitude = Vec4.magnitude;\nQuat.prototype.mul = Quat.prototype.multiply;\nQuat.mul = Quat.multiply;\nQuat.mag = Quat.magnitude;\nQuat.length = Quat.magnitude;\nQuat.len = Quat.magnitude;\nvar Quat2 = class _Quat2 extends Float32Array {\n  // Temporary variables to prevent repeated allocations in the algorithms within Quat2.\n  // These are declared as TypedArrays to aid in tree-shaking.\n  static #TMP_QUAT = new Float32Array(4);\n  static #TMP_VEC3 = new Float32Array(3);\n  /**\n   * Create a {@link Quat2}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 8:\n        super(values);\n        break;\n      case 2:\n        super(values[0], values[1], 8);\n        break;\n      case 1: {\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([v, v, v, v, v, v, v, v]);\n        } else {\n          super(v, 0, 8);\n        }\n        break;\n      }\n      default:\n        super(8);\n        this[3] = 1;\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  /**\n   * A string representation of `this`\n   * Equivalent to `Quat2.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Quat2.str(this);\n  }\n  // ===================\n  // Instances methods\n  // ===================\n  /**\n   * Copy the values from another {@link Quat2} into `this`.\n   * @category Methods\n   *\n   * @param a the source dual quaternion\n   * @returns `this`\n   */\n  copy(a) {\n    super.set(a);\n    return this;\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Quat2}.\n   */\n  static get BYTE_LENGTH() {\n    return 8 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new identity {@link Quat2}\n   * @category Static\n   *\n   * @returns a new dual quaternion [real -> rotation, dual -> translation]\n   */\n  static create() {\n    return new _Quat2();\n  }\n  /**\n   * Creates a {@link Quat2} quat initialized with values from an existing quaternion\n   * @category Static\n   *\n   * @param a - dual quaternion to clone\n   * @returns a new dual quaternion\n   */\n  static clone(a) {\n    return new _Quat2(a);\n  }\n  /**\n   * Creates a new {@link Quat2}  initialized with the given values\n   * @category Static\n   *\n   * @param x1 - 1st X component\n   * @param y1 - 1st Y component\n   * @param z1 - 1st Z component\n   * @param w1 - 1st W component\n   * @param x2 - 2nd X component\n   * @param y2 - 2nd Y component\n   * @param z2 - 2nd Z component\n   * @param w2 - 2nd W component\n   * @returns a new dual quaternion\n   */\n  static fromValues(x1, y1, z1, w1, x2, y2, z2, w2) {\n    return new _Quat2(x1, y1, z1, w1, x2, y2, z2, w2);\n  }\n  /**\n   * Creates a new {@link Quat2} from the given values (quat and translation)\n   * @category Static\n   *\n   * @param x1 - X component (rotation)\n   * @param y1 - Y component (rotation)\n   * @param z1 - Z component (rotation)\n   * @param w1 - W component (rotation)\n   * @param x2 - X component (translation)\n   * @param y2 - Y component (translation)\n   * @param z2 - Z component (translation)\n   * @returns a new dual quaternion\n   */\n  static fromRotationTranslationValues(x1, y1, z1, w1, x2, y2, z2) {\n    const ax = x2 * 0.5;\n    const ay = y2 * 0.5;\n    const az = z2 * 0.5;\n    return new _Quat2(\n      x1,\n      y1,\n      z1,\n      w1,\n      ax * w1 + ay * z1 - az * y1,\n      ay * w1 + az * x1 - ax * z1,\n      az * w1 + ax * y1 - ay * x1,\n      -ax * x1 - ay * y1 - az * z1\n    );\n  }\n  /**\n   * Sets a {@link Quat2} from a quaternion and a translation\n   * @category Static\n   *\n   * @param out - dual quaternion receiving operation result\n   * @param q - a normalized quaternion\n   * @param t - translation vector\n   * @returns `out`\n   */\n  static fromRotationTranslation(out, q, t) {\n    const ax = t[0] * 0.5;\n    const ay = t[1] * 0.5;\n    const az = t[2] * 0.5;\n    const bx = q[0];\n    const by = q[1];\n    const bz = q[2];\n    const bw = q[3];\n    out[0] = bx;\n    out[1] = by;\n    out[2] = bz;\n    out[3] = bw;\n    out[4] = ax * bw + ay * bz - az * by;\n    out[5] = ay * bw + az * bx - ax * bz;\n    out[6] = az * bw + ax * by - ay * bx;\n    out[7] = -ax * bx - ay * by - az * bz;\n    return out;\n  }\n  /**\n   * Sets a {@link Quat2} from a translation\n   * @category Static\n   *\n   * @param out - dual quaternion receiving operation result\n   * @param t - translation vector\n   * @returns `out`\n   */\n  static fromTranslation(out, t) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    out[4] = t[0] * 0.5;\n    out[5] = t[1] * 0.5;\n    out[6] = t[2] * 0.5;\n    out[7] = 0;\n    return out;\n  }\n  /**\n   * Sets a {@link Quat2} from a quaternion\n   * @category Static\n   *\n   * @param out - dual quaternion receiving operation result\n   * @param q - a normalized quaternion\n   * @returns `out`\n   */\n  static fromRotation(out, q) {\n    out[0] = q[0];\n    out[1] = q[1];\n    out[2] = q[2];\n    out[3] = q[3];\n    out[4] = 0;\n    out[5] = 0;\n    out[6] = 0;\n    out[7] = 0;\n    return out;\n  }\n  /**\n   * Sets a {@link Quat2} from a quaternion\n   * @category Static\n   *\n   * @param out - dual quaternion receiving operation result\n   * @param a - the matrix\n   * @returns `out`\n   */\n  static fromMat4(out, a) {\n    Mat4.getRotation(_Quat2.#TMP_QUAT, a);\n    Mat4.getTranslation(_Quat2.#TMP_VEC3, a);\n    return _Quat2.fromRotationTranslation(out, _Quat2.#TMP_QUAT, _Quat2.#TMP_VEC3);\n  }\n  /**\n   * Copy the values from one {@link Quat2} to another\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the source dual quaternion\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[4] = a[4];\n    out[5] = a[5];\n    out[6] = a[6];\n    out[7] = a[7];\n    return out;\n  }\n  /**\n   * Set a {@link Quat2} to the identity dual quaternion\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @returns `out`\n   */\n  static identity(out) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    out[4] = 0;\n    out[5] = 0;\n    out[6] = 0;\n    out[7] = 0;\n    return out;\n  }\n  /**\n   * Set the components of a {@link Quat2} to the given values\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param x1 - 1st X component\n   * @param y1 - 1st Y component\n   * @param z1 - 1st Z component\n   * @param w1 - 1st W component\n   * @param x2 - 2nd X component\n   * @param y2 - 2nd Y component\n   * @param z2 - 2nd Z component\n   * @param w2 - 2nd W component\n   * @returns `out`\n   */\n  static set(out, x1, y1, z1, w1, x2, y2, z2, w2) {\n    out[0] = x1;\n    out[1] = y1;\n    out[2] = z1;\n    out[3] = w1;\n    out[4] = x2;\n    out[5] = y2;\n    out[6] = z2;\n    out[7] = w2;\n    return out;\n  }\n  /**\n   * Gets the real part of a dual quat\n   * @category Static\n   *\n   * @param out - real part\n   * @param a - Dual Quaternion\n   * @return `out`\n   */\n  static getReal(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    return out;\n  }\n  /**\n   * Gets the dual part of a dual quat\n   * @category Static\n   *\n   * @param out - dual part\n   * @param a - Dual Quaternion\n   * @return `out`\n   */\n  static getDual(out, a) {\n    out[0] = a[4];\n    out[1] = a[5];\n    out[2] = a[6];\n    out[3] = a[7];\n    return out;\n  }\n  /**\n   * Set the real component of a {@link Quat2} to the given quaternion\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - a quaternion representing the real part\n   * @return `out`\n   */\n  static setReal(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    return out;\n  }\n  /**\n   * Set the dual component of a {@link Quat2} to the given quaternion\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - a quaternion representing the dual part\n   * @return `out`\n   */\n  static setDual(out, a) {\n    out[4] = a[0];\n    out[5] = a[1];\n    out[6] = a[2];\n    out[7] = a[3];\n    return out;\n  }\n  /**\n   * Gets the translation of a normalized {@link Quat2}\n   * @category Static\n   *\n   * @param out - the receiving translation vector\n   * @param a - Dual Quaternion to be decomposed\n   * @return `out`\n   */\n  static getTranslation(out, a) {\n    const ax = a[4];\n    const ay = a[5];\n    const az = a[6];\n    const aw = a[7];\n    const bx = -a[0];\n    const by = -a[1];\n    const bz = -a[2];\n    const bw = a[3];\n    out[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n    out[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n    out[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n    return out;\n  }\n  /**\n   * Translates a {@link Quat2} by the given vector\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the dual quaternion to translate\n   * @param v - vector to translate by\n   * @returns `out`\n   */\n  static translate(out, a, v) {\n    const ax1 = a[0];\n    const ay1 = a[1];\n    const az1 = a[2];\n    const aw1 = a[3];\n    const bx1 = v[0] * 0.5;\n    const by1 = v[1] * 0.5;\n    const bz1 = v[2] * 0.5;\n    const ax2 = a[4];\n    const ay2 = a[5];\n    const az2 = a[6];\n    const aw2 = a[7];\n    out[0] = ax1;\n    out[1] = ay1;\n    out[2] = az1;\n    out[3] = aw1;\n    out[4] = aw1 * bx1 + ay1 * bz1 - az1 * by1 + ax2;\n    out[5] = aw1 * by1 + az1 * bx1 - ax1 * bz1 + ay2;\n    out[6] = aw1 * bz1 + ax1 * by1 - ay1 * bx1 + az2;\n    out[7] = -ax1 * bx1 - ay1 * by1 - az1 * bz1 + aw2;\n    return out;\n  }\n  /**\n   * Rotates a {@link Quat2} around the X axis\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the dual quaternion to rotate\n   * @param rad - angle (in radians) to rotate\n   * @returns `out`\n   */\n  static rotateX(out, a, rad) {\n    let bx = -a[0];\n    let by = -a[1];\n    let bz = -a[2];\n    let bw = a[3];\n    const ax = a[4];\n    const ay = a[5];\n    const az = a[6];\n    const aw = a[7];\n    const ax1 = ax * bw + aw * bx + ay * bz - az * by;\n    const ay1 = ay * bw + aw * by + az * bx - ax * bz;\n    const az1 = az * bw + aw * bz + ax * by - ay * bx;\n    const aw1 = aw * bw - ax * bx - ay * by - az * bz;\n    Quat.rotateX(out, a, rad);\n    bx = out[0];\n    by = out[1];\n    bz = out[2];\n    bw = out[3];\n    out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\n    out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\n    out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\n    out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\n    return out;\n  }\n  /**\n   * Rotates a {@link Quat2} around the Y axis\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the dual quaternion to rotate\n   * @param rad - angle (in radians) to rotate\n   * @returns `out`\n   */\n  static rotateY(out, a, rad) {\n    let bx = -a[0];\n    let by = -a[1];\n    let bz = -a[2];\n    let bw = a[3];\n    const ax = a[4];\n    const ay = a[5];\n    const az = a[6];\n    const aw = a[7];\n    const ax1 = ax * bw + aw * bx + ay * bz - az * by;\n    const ay1 = ay * bw + aw * by + az * bx - ax * bz;\n    const az1 = az * bw + aw * bz + ax * by - ay * bx;\n    const aw1 = aw * bw - ax * bx - ay * by - az * bz;\n    Quat.rotateY(out, a, rad);\n    bx = out[0];\n    by = out[1];\n    bz = out[2];\n    bw = out[3];\n    out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\n    out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\n    out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\n    out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\n    return out;\n  }\n  /**\n   * Rotates a {@link Quat2} around the Z axis\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the dual quaternion to rotate\n   * @param rad - angle (in radians) to rotate\n   * @returns `out`\n   */\n  static rotateZ(out, a, rad) {\n    let bx = -a[0];\n    let by = -a[1];\n    let bz = -a[2];\n    let bw = a[3];\n    const ax = a[4];\n    const ay = a[5];\n    const az = a[6];\n    const aw = a[7];\n    const ax1 = ax * bw + aw * bx + ay * bz - az * by;\n    const ay1 = ay * bw + aw * by + az * bx - ax * bz;\n    const az1 = az * bw + aw * bz + ax * by - ay * bx;\n    const aw1 = aw * bw - ax * bx - ay * by - az * bz;\n    Quat.rotateZ(out, a, rad);\n    bx = out[0];\n    by = out[1];\n    bz = out[2];\n    bw = out[3];\n    out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\n    out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\n    out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\n    out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\n    return out;\n  }\n  /**\n   * Rotates a {@link Quat2} by a given quaternion (a * q)\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the dual quaternion to rotate\n   * @param q - quaternion to rotate by\n   * @returns `out`\n   */\n  static rotateByQuatAppend(out, a, q) {\n    const qx = q[0];\n    const qy = q[1];\n    const qz = q[2];\n    const qw = q[3];\n    let ax = a[0];\n    let ay = a[1];\n    let az = a[2];\n    let aw = a[3];\n    out[0] = ax * qw + aw * qx + ay * qz - az * qy;\n    out[1] = ay * qw + aw * qy + az * qx - ax * qz;\n    out[2] = az * qw + aw * qz + ax * qy - ay * qx;\n    out[3] = aw * qw - ax * qx - ay * qy - az * qz;\n    ax = a[4];\n    ay = a[5];\n    az = a[6];\n    aw = a[7];\n    out[4] = ax * qw + aw * qx + ay * qz - az * qy;\n    out[5] = ay * qw + aw * qy + az * qx - ax * qz;\n    out[6] = az * qw + aw * qz + ax * qy - ay * qx;\n    out[7] = aw * qw - ax * qx - ay * qy - az * qz;\n    return out;\n  }\n  /**\n   * Rotates a {@link Quat2} by a given quaternion (q * a)\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param q - quaternion to rotate by\n   * @param a - the dual quaternion to rotate\n   * @returns `out`\n   */\n  static rotateByQuatPrepend(out, q, a) {\n    const qx = q[0];\n    const qy = q[1];\n    const qz = q[2];\n    const qw = q[3];\n    let bx = a[0];\n    let by = a[1];\n    let bz = a[2];\n    let bw = a[3];\n    out[0] = qx * bw + qw * bx + qy * bz - qz * by;\n    out[1] = qy * bw + qw * by + qz * bx - qx * bz;\n    out[2] = qz * bw + qw * bz + qx * by - qy * bx;\n    out[3] = qw * bw - qx * bx - qy * by - qz * bz;\n    bx = a[4];\n    by = a[5];\n    bz = a[6];\n    bw = a[7];\n    out[4] = qx * bw + qw * bx + qy * bz - qz * by;\n    out[5] = qy * bw + qw * by + qz * bx - qx * bz;\n    out[6] = qz * bw + qw * bz + qx * by - qy * bx;\n    out[7] = qw * bw - qx * bx - qy * by - qz * bz;\n    return out;\n  }\n  /**\n   * Rotates a {@link Quat2} around a given axis. Does the normalization automatically\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the dual quaternion to rotate\n   * @param axis - the axis to rotate around\n   * @param rad - how far the rotation should be\n   * @returns `out`\n   */\n  static rotateAroundAxis(out, a, axis, rad) {\n    if (Math.abs(rad) < GLM_EPSILON) {\n      return _Quat2.copy(out, a);\n    }\n    const axisLength = Math.sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);\n    rad *= 0.5;\n    const s = Math.sin(rad);\n    const bx = s * axis[0] / axisLength;\n    const by = s * axis[1] / axisLength;\n    const bz = s * axis[2] / axisLength;\n    const bw = Math.cos(rad);\n    const ax1 = a[0];\n    const ay1 = a[1];\n    const az1 = a[2];\n    const aw1 = a[3];\n    out[0] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\n    out[1] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\n    out[2] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\n    out[3] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\n    const ax = a[4];\n    const ay = a[5];\n    const az = a[6];\n    const aw = a[7];\n    out[4] = ax * bw + aw * bx + ay * bz - az * by;\n    out[5] = ay * bw + aw * by + az * bx - ax * bz;\n    out[6] = az * bw + aw * bz + ax * by - ay * bx;\n    out[7] = aw * bw - ax * bx - ay * by - az * bz;\n    return out;\n  }\n  /**\n   * Adds two {@link Quat2}s\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns `out`\n   */\n  static add(out, a, b) {\n    out[0] = a[0] + b[0];\n    out[1] = a[1] + b[1];\n    out[2] = a[2] + b[2];\n    out[3] = a[3] + b[3];\n    out[4] = a[4] + b[4];\n    out[5] = a[5] + b[5];\n    out[6] = a[6] + b[6];\n    out[7] = a[7] + b[7];\n    return out;\n  }\n  /**\n   * Multiplies two {@link Quat2}s\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns {quat2} out\n   */\n  static multiply(out, a, b) {\n    const ax0 = a[0];\n    const ay0 = a[1];\n    const az0 = a[2];\n    const aw0 = a[3];\n    const bx1 = b[4];\n    const by1 = b[5];\n    const bz1 = b[6];\n    const bw1 = b[7];\n    const ax1 = a[4];\n    const ay1 = a[5];\n    const az1 = a[6];\n    const aw1 = a[7];\n    const bx0 = b[0];\n    const by0 = b[1];\n    const bz0 = b[2];\n    const bw0 = b[3];\n    out[0] = ax0 * bw0 + aw0 * bx0 + ay0 * bz0 - az0 * by0;\n    out[1] = ay0 * bw0 + aw0 * by0 + az0 * bx0 - ax0 * bz0;\n    out[2] = az0 * bw0 + aw0 * bz0 + ax0 * by0 - ay0 * bx0;\n    out[3] = aw0 * bw0 - ax0 * bx0 - ay0 * by0 - az0 * bz0;\n    out[4] = ax0 * bw1 + aw0 * bx1 + ay0 * bz1 - az0 * by1 + ax1 * bw0 + aw1 * bx0 + ay1 * bz0 - az1 * by0;\n    out[5] = ay0 * bw1 + aw0 * by1 + az0 * bx1 - ax0 * bz1 + ay1 * bw0 + aw1 * by0 + az1 * bx0 - ax1 * bz0;\n    out[6] = az0 * bw1 + aw0 * bz1 + ax0 * by1 - ay0 * bx1 + az1 * bw0 + aw1 * bz0 + ax1 * by0 - ay1 * bx0;\n    out[7] = aw0 * bw1 - ax0 * bx1 - ay0 * by1 - az0 * bz1 + aw1 * bw0 - ax1 * bx0 - ay1 * by0 - az1 * bz0;\n    return out;\n  }\n  /**\n   * Alias for {@link Quat2.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return out;\n  }\n  /**\n   * Scales a {@link Quat2} by a scalar value\n   * @category Static\n   *\n   * @param out - the receiving dual quaterion\n   * @param a - the dual quaternion to scale\n   * @param b - scalar value to scale the dual quaterion by\n   * @returns `out`\n   */\n  static scale(out, a, b) {\n    out[0] = a[0] * b;\n    out[1] = a[1] * b;\n    out[2] = a[2] * b;\n    out[3] = a[3] * b;\n    out[4] = a[4] * b;\n    out[5] = a[5] * b;\n    out[6] = a[6] * b;\n    out[7] = a[7] * b;\n    return out;\n  }\n  /**\n   * Calculates the dot product of two {@link Quat2}s (The dot product of the real parts)\n   * @category Static\n   *\n   * @param a - the first operand\n   * @param b - the second operand\n   * @returns dot product of a and b\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static dot(a, b) {\n    return 0;\n  }\n  /**\n   * Performs a linear interpolation between two {@link Quat2}s\n   * NOTE: The resulting dual quaternions won't always be normalized (The error is most noticeable when `t = 0.5`)\n   * @category Static\n   *\n   * @param out - the receiving dual quat\n   * @param a - the first operand\n   * @param b - the second operand\n   * @param t - interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static lerp(out, a, b, t) {\n    const mt = 1 - t;\n    if (_Quat2.dot(a, b) < 0) {\n      t = -t;\n    }\n    out[0] = a[0] * mt + b[0] * t;\n    out[1] = a[1] * mt + b[1] * t;\n    out[2] = a[2] * mt + b[2] * t;\n    out[3] = a[3] * mt + b[3] * t;\n    out[4] = a[4] * mt + b[4] * t;\n    out[5] = a[5] * mt + b[5] * t;\n    out[6] = a[6] * mt + b[6] * t;\n    out[7] = a[7] * mt + b[7] * t;\n    return out;\n  }\n  /**\n   * Calculates the inverse of a {@link Quat2}. If they are normalized, conjugate is cheaper\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - dual quat to calculate inverse of\n   * @returns `out`\n   */\n  static invert(out, a) {\n    const sqlen = _Quat2.squaredLength(a);\n    out[0] = -a[0] / sqlen;\n    out[1] = -a[1] / sqlen;\n    out[2] = -a[2] / sqlen;\n    out[3] = a[3] / sqlen;\n    out[4] = -a[4] / sqlen;\n    out[5] = -a[5] / sqlen;\n    out[6] = -a[6] / sqlen;\n    out[7] = a[7] / sqlen;\n    return out;\n  }\n  /**\n   * Calculates the conjugate of a {@link Quat2}. If the dual quaternion is normalized, this function is faster than\n   * {@link Quat2.invert} and produces the same result.\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - dual quaternion to calculate conjugate of\n   * @returns `out`\n   */\n  static conjugate(out, a) {\n    out[0] = -a[0];\n    out[1] = -a[1];\n    out[2] = -a[2];\n    out[3] = a[3];\n    out[4] = -a[4];\n    out[5] = -a[5];\n    out[6] = -a[6];\n    out[7] = a[7];\n    return out;\n  }\n  /**\n   * Calculates the magnitude (length) of a {@link Quat2}\n   * @category Static\n   *\n   * @param a - dual quaternion to calculate length of\n   * @returns length of `a`\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static magnitude(a) {\n    return 0;\n  }\n  /**\n   * Alias for {@link Quat2.magnitude}\n   * @category Static\n   */\n  static mag(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Quat2.magnitude}\n   * @category Static\n   * @deprecated Use {@link Quat2.magnitude} to avoid conflicts with builtin `length` methods/attribs\n   */\n  // Length conflicts with Function.length\n  static length(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Quat2.magnitude}\n   * @category Static\n   * @deprecated Use {@link Quat2.mag}\n   */\n  static len(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Calculates the squared length of a {@link Quat2}\n   * @category Static\n   *\n   * @param a - dual quaternion to calculate squared length of\n   * @returns squared length of a\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static squaredLength(a) {\n    return 0;\n  }\n  /**\n   * Alias for {@link Quat2.squaredLength}\n   * @category Static\n   */\n  static sqrLen(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Normalize a {@link Quat2}\n   * @category Static\n   *\n   * @param out - the receiving dual quaternion\n   * @param a - dual quaternion to normalize\n   * @returns `out`\n   */\n  static normalize(out, a) {\n    let magnitude = _Quat2.squaredLength(a);\n    if (magnitude > 0) {\n      magnitude = Math.sqrt(magnitude);\n      const a0 = a[0] / magnitude;\n      const a1 = a[1] / magnitude;\n      const a2 = a[2] / magnitude;\n      const a3 = a[3] / magnitude;\n      const b0 = a[4];\n      const b1 = a[5];\n      const b2 = a[6];\n      const b3 = a[7];\n      const a_dot_b = a0 * b0 + a1 * b1 + a2 * b2 + a3 * b3;\n      out[0] = a0;\n      out[1] = a1;\n      out[2] = a2;\n      out[3] = a3;\n      out[4] = (b0 - a0 * a_dot_b) / magnitude;\n      out[5] = (b1 - a1 * a_dot_b) / magnitude;\n      out[6] = (b2 - a2 * a_dot_b) / magnitude;\n      out[7] = (b3 - a3 * a_dot_b) / magnitude;\n    }\n    return out;\n  }\n  /**\n   * Returns a string representation of a {@link Quat2}\n   * @category Static\n   *\n   * @param a - dual quaternion to represent as a string\n   * @returns string representation of the vector\n   */\n  static str(a) {\n    return `Quat2(${a.join(\", \")})`;\n  }\n  /**\n   * Returns whether the {@link Quat2}s have exactly the same elements in the same position (when compared with ===)\n   * @category Static\n   *\n   * @param a - The first dual quaternion.\n   * @param b - The second dual quaternion.\n   * @returns True if the dual quaternions are equal, false otherwise.\n   */\n  static exactEquals(a, b) {\n    return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7];\n  }\n  /**\n   * Returns whether the {@link Quat2}s have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first dual quaternion.\n   * @param b - The second dual quaternion.\n   * @returns True if the dual quaternions are equal, false otherwise.\n   */\n  static equals(a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const a2 = a[2];\n    const a3 = a[3];\n    const a4 = a[4];\n    const a5 = a[5];\n    const a6 = a[6];\n    const a7 = a[7];\n    const b0 = b[0];\n    const b1 = b[1];\n    const b2 = b[2];\n    const b3 = b[3];\n    const b4 = b[4];\n    const b5 = b[5];\n    const b6 = b[6];\n    const b7 = b[7];\n    return Math.abs(a0 - b0) <= GLM_EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= GLM_EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= GLM_EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= GLM_EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= GLM_EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= GLM_EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= GLM_EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= GLM_EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7));\n  }\n};\nQuat2.dot = Quat.dot;\nQuat2.squaredLength = Quat.squaredLength;\nQuat2.sqrLen = Quat.squaredLength;\nQuat2.mag = Quat.magnitude;\nQuat2.length = Quat.magnitude;\nQuat2.len = Quat.magnitude;\nQuat2.mul = Quat2.multiply;\nvar Vec2 = class _Vec2 extends Float32Array {\n  /**\n   * Create a {@link Vec2}.\n   *\n   * @category Constructor\n   */\n  constructor(...values) {\n    switch (values.length) {\n      case 2: {\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([v, values[1]]);\n        } else {\n          super(v, values[1], 2);\n        }\n        break;\n      }\n      case 1: {\n        const v = values[0];\n        if (typeof v === \"number\") {\n          super([v, v]);\n        } else {\n          super(v, 0, 2);\n        }\n        break;\n      }\n      default:\n        super(2);\n        break;\n    }\n  }\n  // ============\n  // Accessors\n  // ============\n  // Getters and setters to make component access read better.\n  // These are likely to be a little bit slower than direct array access.\n  /**\n   * The x component of the vector. Equivalent to `this[0];`\n   * @category Vector Components\n   */\n  get x() {\n    return this[0];\n  }\n  set x(value) {\n    this[0] = value;\n  }\n  /**\n   * The y component of the vector. Equivalent to `this[1];`\n   * @category Vector Components\n   */\n  get y() {\n    return this[1];\n  }\n  set y(value) {\n    this[1] = value;\n  }\n  // Alternate set of getters and setters in case this is being used to define\n  // a color.\n  /**\n   * The r component of the vector. Equivalent to `this[0];`\n   * @category Color Components\n   */\n  get r() {\n    return this[0];\n  }\n  set r(value) {\n    this[0] = value;\n  }\n  /**\n   * The g component of the vector. Equivalent to `this[1];`\n   * @category Color Components\n   */\n  get g() {\n    return this[1];\n  }\n  set g(value) {\n    this[1] = value;\n  }\n  /**\n   * The magnitude (length) of this.\n   * Equivalent to `Vec2.magnitude(this);`\n   *\n   * Magnitude is used because the `length` attribute is already defined by\n   * TypedArrays to mean the number of elements in the array.\n   *\n   * @category Accessors\n   */\n  get magnitude() {\n    return Math.hypot(this[0], this[1]);\n  }\n  /**\n   * Alias for {@link Vec2.magnitude}\n   *\n   * @category Accessors\n   */\n  get mag() {\n    return this.magnitude;\n  }\n  /**\n   * The squared magnitude (length) of `this`.\n   * Equivalent to `Vec2.squaredMagnitude(this);`\n   *\n   * @category Accessors\n   */\n  get squaredMagnitude() {\n    const x = this[0];\n    const y = this[1];\n    return x * x + y * y;\n  }\n  /**\n   * Alias for {@link Vec2.squaredMagnitude}\n   *\n   * @category Accessors\n   */\n  get sqrMag() {\n    return this.squaredMagnitude;\n  }\n  /**\n   * A string representation of `this`\n   * Equivalent to `Vec2.str(this);`\n   *\n   * @category Accessors\n   */\n  get str() {\n    return _Vec2.str(this);\n  }\n  // ===================\n  // Instances methods\n  // ===================\n  /**\n   * Copy the values from another {@link Vec2} into `this`.\n   * @category Methods\n   *\n   * @param a the source vector\n   * @returns `this`\n   */\n  copy(a) {\n    this.set(a);\n    return this;\n  }\n  // Instead of zero(), use a.fill(0) for instances;\n  /**\n   * Adds a {@link Vec2} to `this`.\n   * Equivalent to `Vec2.add(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to add to `this`\n   * @returns `this`\n   */\n  add(b) {\n    this[0] += b[0];\n    this[1] += b[1];\n    return this;\n  }\n  /**\n   * Subtracts a {@link Vec2} from `this`.\n   * Equivalent to `Vec2.subtract(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to subtract from `this`\n   * @returns `this`\n   */\n  subtract(b) {\n    this[0] -= b[0];\n    this[1] -= b[1];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec2.subtract}\n   * @category Methods\n   */\n  sub(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Multiplies `this` by a {@link Vec2}.\n   * Equivalent to `Vec2.multiply(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to multiply `this` by\n   * @returns `this`\n   */\n  multiply(b) {\n    this[0] *= b[0];\n    this[1] *= b[1];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec2.multiply}\n   * @category Methods\n   */\n  mul(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Divides `this` by a {@link Vec2}.\n   * Equivalent to `Vec2.divide(this, this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to divide `this` by\n   * @returns `this`\n   */\n  divide(b) {\n    this[0] /= b[0];\n    this[1] /= b[1];\n    return this;\n  }\n  /**\n   * Alias for {@link Vec2.divide}\n   * @category Methods\n   */\n  div(b) {\n    return this;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Scales `this` by a scalar number.\n   * Equivalent to `Vec2.scale(this, this, b);`\n   * @category Methods\n   *\n   * @param b - Amount to scale `this` by\n   * @returns `this`\n   */\n  scale(b) {\n    this[0] *= b;\n    this[1] *= b;\n    return this;\n  }\n  /**\n   * Calculates `this` scaled by a scalar value then adds the result to `this`.\n   * Equivalent to `Vec2.scaleAndAdd(this, this, b, scale);`\n   * @category Methods\n   *\n   * @param b - The vector to add to `this`\n   * @param scale - The amount to scale `b` by before adding\n   * @returns `this`\n   */\n  scaleAndAdd(b, scale) {\n    this[0] += b[0] * scale;\n    this[1] += b[1] * scale;\n    return this;\n  }\n  /**\n   * Calculates the Euclidean distance between another {@link Vec2} and `this`.\n   * Equivalent to `Vec2.distance(this, b);`\n   * @category Methods\n   *\n   * @param b - The vector to calculate the distance to\n   * @returns Distance between `this` and `b`\n   */\n  distance(b) {\n    return _Vec2.distance(this, b);\n  }\n  /**\n   * Alias for {@link Vec2.distance}\n   * @category Methods\n   */\n  dist(b) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Calculates the squared Euclidean distance between another {@link Vec2} and `this`.\n   * Equivalent to `Vec2.squaredDistance(this, b);`\n   * @category Methods\n   *\n   * @param b The vector to calculate the squared distance to\n   * @returns Squared distance between `this` and `b`\n   */\n  squaredDistance(b) {\n    return _Vec2.squaredDistance(this, b);\n  }\n  /**\n   * Alias for {@link Vec2.squaredDistance}\n   * @category Methods\n   */\n  sqrDist(b) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Negates the components of `this`.\n   * Equivalent to `Vec2.negate(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  negate() {\n    this[0] *= -1;\n    this[1] *= -1;\n    return this;\n  }\n  /**\n   * Inverts the components of `this`.\n   * Equivalent to `Vec2.inverse(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  invert() {\n    this[0] = 1 / this[0];\n    this[1] = 1 / this[1];\n    return this;\n  }\n  /**\n   * Sets each component of `this` to it's absolute value.\n   * Equivalent to `Vec2.abs(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  abs() {\n    this[0] = Math.abs(this[0]);\n    this[1] = Math.abs(this[1]);\n    return this;\n  }\n  /**\n   * Calculates the dot product of this and another {@link Vec2}.\n   * Equivalent to `Vec2.dot(this, b);`\n   * @category Methods\n   *\n   * @param b - The second operand\n   * @returns Dot product of `this` and `b`\n   */\n  dot(b) {\n    return this[0] * b[0] + this[1] * b[1];\n  }\n  /**\n   * Normalize `this`.\n   * Equivalent to `Vec2.normalize(this, this);`\n   * @category Methods\n   *\n   * @returns `this`\n   */\n  normalize() {\n    return _Vec2.normalize(this, this);\n  }\n  // ===================\n  // Static accessors\n  // ===================\n  /**\n   * @category Static\n   *\n   * @returns The number of bytes in a {@link Vec2}.\n   */\n  static get BYTE_LENGTH() {\n    return 2 * Float32Array.BYTES_PER_ELEMENT;\n  }\n  // ===================\n  // Static methods\n  // ===================\n  /**\n   * Creates a new, empty {@link Vec2}\n   * @category Static\n   *\n   * @returns A new 2D vector\n   */\n  static create() {\n    return new _Vec2();\n  }\n  /**\n   * Creates a new {@link Vec2} initialized with values from an existing vector\n   * @category Static\n   *\n   * @param a - Vector to clone\n   * @returns A new 2D vector\n   */\n  static clone(a) {\n    return new _Vec2(a);\n  }\n  /**\n   * Creates a new {@link Vec2} initialized with the given values\n   * @category Static\n   *\n   * @param x - X component\n   * @param y - Y component\n   * @returns A new 2D vector\n   */\n  static fromValues(x, y) {\n    return new _Vec2(x, y);\n  }\n  /**\n   * Copy the values from one {@link Vec2} to another\n   * @category Static\n   *\n   * @param out - the receiving vector\n   * @param a - The source vector\n   * @returns `out`\n   */\n  static copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    return out;\n  }\n  /**\n   * Set the components of a {@link Vec2} to the given values\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param x - X component\n   * @param y - Y component\n   * @returns `out`\n   */\n  static set(out, x, y) {\n    out[0] = x;\n    out[1] = y;\n    return out;\n  }\n  /**\n   * Adds two {@link Vec2}s\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static add(out, a, b) {\n    out[0] = a[0] + b[0];\n    out[1] = a[1] + b[1];\n    return out;\n  }\n  /**\n   * Subtracts vector b from vector a\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static subtract(out, a, b) {\n    out[0] = a[0] - b[0];\n    out[1] = a[1] - b[1];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec2.subtract}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sub(out, a, b) {\n    return [0, 0];\n  }\n  /**\n   * Multiplies two {@link Vec2}s\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static multiply(out, a, b) {\n    out[0] = a[0] * b[0];\n    out[1] = a[1] * b[1];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec2.multiply}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static mul(out, a, b) {\n    return [0, 0];\n  }\n  /**\n   * Divides two {@link Vec2}s\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static divide(out, a, b) {\n    out[0] = a[0] / b[0];\n    out[1] = a[1] / b[1];\n    return out;\n  }\n  /**\n   * Alias for {@link Vec2.divide}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static div(out, a, b) {\n    return [0, 0];\n  }\n  /**\n   * Math.ceil the components of a {@link Vec2}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to ceil\n   * @returns `out`\n   */\n  static ceil(out, a) {\n    out[0] = Math.ceil(a[0]);\n    out[1] = Math.ceil(a[1]);\n    return out;\n  }\n  /**\n   * Math.floor the components of a {@link Vec2}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to floor\n   * @returns `out`\n   */\n  static floor(out, a) {\n    out[0] = Math.floor(a[0]);\n    out[1] = Math.floor(a[1]);\n    return out;\n  }\n  /**\n   * Returns the minimum of two {@link Vec2}s\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static min(out, a, b) {\n    out[0] = Math.min(a[0], b[0]);\n    out[1] = Math.min(a[1], b[1]);\n    return out;\n  }\n  /**\n   * Returns the maximum of two {@link Vec2}s\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static max(out, a, b) {\n    out[0] = Math.max(a[0], b[0]);\n    out[1] = Math.max(a[1], b[1]);\n    return out;\n  }\n  /**\n   * Math.round the components of a {@link Vec2}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to round\n   * @returns `out`\n   */\n  static round(out, a) {\n    out[0] = Math.round(a[0]);\n    out[1] = Math.round(a[1]);\n    return out;\n  }\n  /**\n   * Scales a {@link Vec2} by a scalar number\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The vector to scale\n   * @param b - Amount to scale the vector by\n   * @returns `out`\n   */\n  static scale(out, a, b) {\n    out[0] = a[0] * b;\n    out[1] = a[1] * b;\n    return out;\n  }\n  /**\n   * Adds two Vec2's after scaling the second operand by a scalar value\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @param scale - The amount to scale b by before adding\n   * @returns `out`\n   */\n  static scaleAndAdd(out, a, b, scale) {\n    out[0] = a[0] + b[0] * scale;\n    out[1] = a[1] + b[1] * scale;\n    return out;\n  }\n  /**\n   * Calculates the Euclidean distance between two {@link Vec2}s\n   * @category Static\n   *\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns distance between `a` and `b`\n   */\n  static distance(a, b) {\n    return Math.hypot(b[0] - a[0], b[1] - a[1]);\n  }\n  /**\n   * Alias for {@link Vec2.distance}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static dist(a, b) {\n    return 0;\n  }\n  /**\n   * Calculates the squared Euclidean distance between two {@link Vec2}s\n   * @category Static\n   *\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns Squared distance between `a` and `b`\n   */\n  static squaredDistance(a, b) {\n    const x = b[0] - a[0];\n    const y = b[1] - a[1];\n    return x * x + y * y;\n  }\n  /**\n   * Alias for {@link Vec2.distance}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sqrDist(a, b) {\n    return 0;\n  }\n  /**\n   * Calculates the magnitude (length) of a {@link Vec2}\n   * @category Static\n   *\n   * @param a - Vector to calculate magnitude of\n   * @returns Magnitude of a\n   */\n  static magnitude(a) {\n    const x = a[0];\n    const y = a[1];\n    return Math.sqrt(x * x + y * y);\n  }\n  /**\n   * Alias for {@link Vec2.magnitude}\n   * @category Static\n   */\n  static mag(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Vec2.magnitude}\n   * @category Static\n   * @deprecated Use {@link Vec2.magnitude} to avoid conflicts with builtin `length` methods/attribs\n   *\n   * @param a - vector to calculate length of\n   * @returns length of a\n   */\n  // Length conflicts with Function.length\n  static length(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Alias for {@link Vec2.magnitude}\n   * @category Static\n   * @deprecated Use {@link Vec2.mag}\n   */\n  static len(a) {\n    return 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Calculates the squared length of a {@link Vec2}\n   * @category Static\n   *\n   * @param a - Vector to calculate squared length of\n   * @returns Squared length of a\n   */\n  static squaredLength(a) {\n    const x = a[0];\n    const y = a[1];\n    return x * x + y * y;\n  }\n  /**\n   * Alias for {@link Vec2.squaredLength}\n   * @category Static\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static sqrLen(a, b) {\n    return 0;\n  }\n  /**\n   * Negates the components of a {@link Vec2}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to negate\n   * @returns `out`\n   */\n  static negate(out, a) {\n    out[0] = -a[0];\n    out[1] = -a[1];\n    return out;\n  }\n  /**\n   * Returns the inverse of the components of a {@link Vec2}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to invert\n   * @returns `out`\n   */\n  static inverse(out, a) {\n    out[0] = 1 / a[0];\n    out[1] = 1 / a[1];\n    return out;\n  }\n  /**\n   * Returns the absolute value of the components of a {@link Vec2}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to compute the absolute values of\n   * @returns `out`\n   */\n  static abs(out, a) {\n    out[0] = Math.abs(a[0]);\n    out[1] = Math.abs(a[1]);\n    return out;\n  }\n  /**\n   * Normalize a {@link Vec2}\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - Vector to normalize\n   * @returns `out`\n   */\n  static normalize(out, a) {\n    const x = a[0];\n    const y = a[1];\n    let len = x * x + y * y;\n    if (len > 0) {\n      len = 1 / Math.sqrt(len);\n    }\n    out[0] = a[0] * len;\n    out[1] = a[1] * len;\n    return out;\n  }\n  /**\n   * Calculates the dot product of two {@link Vec2}s\n   * @category Static\n   *\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns Dot product of `a` and `b`\n   */\n  static dot(a, b) {\n    return a[0] * b[0] + a[1] * b[1];\n  }\n  /**\n   * Computes the cross product of two {@link Vec2}s\n   * Note that the cross product must by definition produce a 3D vector.\n   * For this reason there is also not instance equivalent for this function.\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns `out`\n   */\n  static cross(out, a, b) {\n    const z = a[0] * b[1] - a[1] * b[0];\n    out[0] = out[1] = 0;\n    out[2] = z;\n    return out;\n  }\n  /**\n   * Performs a linear interpolation between two {@link Vec2}s\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @param a - The first operand\n   * @param b - The second operand\n   * @param t - Interpolation amount, in the range [0-1], between the two inputs\n   * @returns `out`\n   */\n  static lerp(out, a, b, t) {\n    const ax = a[0];\n    const ay = a[1];\n    out[0] = ax + t * (b[0] - ax);\n    out[1] = ay + t * (b[1] - ay);\n    return out;\n  }\n  /**\n   * Transforms the {@link Vec2} with a {@link Mat2}\n   *\n   * @param out - The receiving vector\n   * @param a - The vector to transform\n   * @param m - Matrix to transform with\n   * @returns `out`\n   * @category Static\n   */\n  static transformMat2(out, a, m) {\n    const x = a[0];\n    const y = a[1];\n    out[0] = m[0] * x + m[2] * y;\n    out[1] = m[1] * x + m[3] * y;\n    return out;\n  }\n  /**\n   * Transforms the {@link Vec2} with a {@link Mat2d}\n   *\n   * @param out - The receiving vector\n   * @param a - The vector to transform\n   * @param m - Matrix to transform with\n   * @returns `out`\n   * @category Static\n   */\n  static transformMat2d(out, a, m) {\n    const x = a[0];\n    const y = a[1];\n    out[0] = m[0] * x + m[2] * y + m[4];\n    out[1] = m[1] * x + m[3] * y + m[5];\n    return out;\n  }\n  /**\n   * Transforms the {@link Vec2} with a {@link Mat3}\n   * 3rd vector component is implicitly '1'\n   *\n   * @param out - The receiving vector\n   * @param a - The vector to transform\n   * @param m - Matrix to transform with\n   * @returns `out`\n   * @category Static\n   */\n  static transformMat3(out, a, m) {\n    const x = a[0];\n    const y = a[1];\n    out[0] = m[0] * x + m[3] * y + m[6];\n    out[1] = m[1] * x + m[4] * y + m[7];\n    return out;\n  }\n  /**\n   * Transforms the {@link Vec2} with a {@link Mat4}\n   * 3rd vector component is implicitly '0'\n   * 4th vector component is implicitly '1'\n   *\n   * @param out - The receiving vector\n   * @param a - The vector to transform\n   * @param m - Matrix to transform with\n   * @returns `out`\n   * @category Static\n   */\n  static transformMat4(out, a, m) {\n    const x = a[0];\n    const y = a[1];\n    out[0] = m[0] * x + m[4] * y + m[12];\n    out[1] = m[1] * x + m[5] * y + m[13];\n    return out;\n  }\n  /**\n   * Rotate a 2D vector\n   * @category Static\n   *\n   * @param out - The receiving {@link Vec2}\n   * @param a - The {@link Vec2} point to rotate\n   * @param b - The origin of the rotation\n   * @param rad - The angle of rotation in radians\n   * @returns `out`\n   */\n  static rotate(out, a, b, rad) {\n    const p0 = a[0] - b[0];\n    const p1 = a[1] - b[1];\n    const sinC = Math.sin(rad);\n    const cosC = Math.cos(rad);\n    out[0] = p0 * cosC - p1 * sinC + b[0];\n    out[1] = p0 * sinC + p1 * cosC + b[1];\n    return out;\n  }\n  /**\n   * Get the angle between two 2D vectors\n   * @category Static\n   *\n   * @param a - The first operand\n   * @param b - The second operand\n   * @returns The angle in radians\n   */\n  static angle(a, b) {\n    const x1 = a[0];\n    const y1 = a[1];\n    const x2 = b[0];\n    const y2 = b[1];\n    const mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2);\n    const cosine = mag && (x1 * x2 + y1 * y2) / mag;\n    return Math.acos(Math.min(Math.max(cosine, -1), 1));\n  }\n  /**\n   * Set the components of a {@link Vec2} to zero\n   * @category Static\n   *\n   * @param out - The receiving vector\n   * @returns `out`\n   */\n  static zero(out) {\n    out[0] = 0;\n    out[1] = 0;\n    return out;\n  }\n  /**\n   * Returns whether the vectors have exactly the same elements in the same position (when compared with ===)\n   * @category Static\n   *\n   * @param a - The first vector.\n   * @param b - The second vector.\n   * @returns `true` if the vectors components are ===, `false` otherwise.\n   */\n  static exactEquals(a, b) {\n    return a[0] === b[0] && a[1] === b[1];\n  }\n  /**\n   * Returns whether the vectors have approximately the same elements in the same position.\n   * @category Static\n   *\n   * @param a - The first vector.\n   * @param b - The second vector.\n   * @returns `true` if the vectors are approximately equal, `false` otherwise.\n   */\n  static equals(a, b) {\n    const a0 = a[0];\n    const a1 = a[1];\n    const b0 = b[0];\n    const b1 = b[1];\n    return Math.abs(a0 - b0) <= GLM_EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= GLM_EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1));\n  }\n  /**\n   * Returns a string representation of a vector\n   * @category Static\n   *\n   * @param a - Vector to represent as a string\n   * @returns String representation of the vector\n   */\n  static str(a) {\n    return `Vec2(${a.join(\", \")})`;\n  }\n};\nVec2.prototype.sub = Vec2.prototype.subtract;\nVec2.prototype.mul = Vec2.prototype.multiply;\nVec2.prototype.div = Vec2.prototype.divide;\nVec2.prototype.dist = Vec2.prototype.distance;\nVec2.prototype.sqrDist = Vec2.prototype.squaredDistance;\nVec2.sub = Vec2.subtract;\nVec2.mul = Vec2.multiply;\nVec2.div = Vec2.divide;\nVec2.dist = Vec2.distance;\nVec2.sqrDist = Vec2.squaredDistance;\nVec2.sqrLen = Vec2.squaredLength;\nVec2.mag = Vec2.magnitude;\nVec2.length = Vec2.magnitude;\nVec2.len = Vec2.magnitude;\n\nexport { Mat2, Mat2d, Mat3, Mat4, Quat, Quat2, Vec2, Vec3, Vec4 };\n//# sourceMappingURL=index.js.map\n","/**\r\n * Awaits `requestAnimationFrame` calls by the counter specified. This allows asynchronous applications for direct /\r\n * inline style modification amongst other direct animation techniques.\r\n *\r\n * @param {number}   [cntr=1] - A positive integer greater than 0 for amount of requestAnimationFrames to wait.\r\n *\r\n * @returns {Promise<number>} Returns time of last `requestAnimationFrame` callback.\r\n */\r\nasync function nextAnimationFrame(cntr = 1)\r\n{\r\n   if (!Number.isInteger(cntr) || cntr < 1)\r\n   {\r\n      throw new TypeError(`nextAnimationFrame error: 'cntr' must be a positive integer greater than 0.`);\r\n   }\r\n\r\n   let currentTime;\r\n\r\n   // Await count of `rAF` callbacks.\r\n   for (;--cntr >= 0;) { currentTime = await new Promise((resolve) => requestAnimationFrame(resolve)); }\r\n\r\n   return currentTime;\r\n}\n\nexport { nextAnimationFrame };\n//# sourceMappingURL=index.js.map\n","import { hasSetter, isIterable, isObject, isPlainObject } from '@typhonjs-fvtt/runtime/util/object';\nimport { getEasingFunc } from '@typhonjs-fvtt/runtime/svelte/easing';\nimport { A11yHelper } from '@typhonjs-fvtt/runtime/util/a11y';\nimport { CrossWindow, BrowserSupports } from '@typhonjs-fvtt/runtime/util/browser';\nimport { radToDeg, degToRad, clamp } from '@typhonjs-fvtt/runtime/math/util';\nimport { subscribeIgnoreFirst } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { propertyStore } from '@typhonjs-fvtt/runtime/svelte/store/writable-derived';\nimport { lerp } from '@typhonjs-fvtt/runtime/math/interpolate';\nimport { Mat4, Vec3 } from '@typhonjs-fvtt/runtime/math/gl-matrix';\nimport { writable } from 'svelte/store';\nimport { StyleParse } from '@typhonjs-fvtt/runtime/util/dom/style';\nimport { nextAnimationFrame } from '@typhonjs-fvtt/runtime/util/animate';\n\n/**\n * Provides an action to apply a TJSPosition instance to a HTMLElement and invoke `position.parent`\n *\n * @param node - The node associated with the action.\n *\n * @param position - A position or positionable instance.\n *\n * @returns The action lifecycle methods.\n */\nfunction applyPosition(node, position) {\n    /**\n     * Find actual position instance checking for a Positionable instance.\n     */\n    let actualPosition = (position?.position ?? position);\n    if (hasSetter(actualPosition, 'parent')) {\n        actualPosition.parent = node;\n    }\n    return {\n        update: (newPosition) => {\n            const newActualPosition = (newPosition?.position ?? position);\n            // Sanity case to short circuit update if positions are the same instance.\n            if (newActualPosition === actualPosition && newActualPosition.parent === actualPosition.parent) {\n                return;\n            }\n            if (hasSetter(actualPosition, 'parent')) {\n                actualPosition.parent = void 0;\n            }\n            actualPosition = newActualPosition;\n            if (hasSetter(actualPosition, 'parent')) {\n                actualPosition.parent = node;\n            }\n        },\n        destroy: () => { if (hasSetter(actualPosition, 'parent')) {\n            actualPosition.parent = void 0;\n        } }\n    };\n}\n\n/**\n * Provides an action to enable pointer dragging of an HTMLElement and invoke `position.set` on a given\n * {@link TJSPosition} instance provided. When the attached boolean store state changes the draggable action is enabled\n * or disabled.\n *\n * @param node - The node associated with the action.\n *\n * @param options - Draggable action options.\n *\n * @returns Action lifecycle functions.\n */\nfunction draggable(node, { position, enabled = true, button = 0, storeDragging = void 0, tween = false, tweenOptions = { duration: 1, ease: 'cubicOut' }, hasTargetClassList, ignoreTargetClassList }) {\n    if (hasTargetClassList !== void 0 && !isIterable(hasTargetClassList)) {\n        throw new TypeError(`'hasTargetClassList' is not iterable.`);\n    }\n    if (ignoreTargetClassList !== void 0 && !isIterable(ignoreTargetClassList)) {\n        throw new TypeError(`'ignoreTargetClassList' is not iterable.`);\n    }\n    /**\n     * Used for direct call to `position.set`.\n     */\n    const positionData = { left: 0, top: 0 };\n    /**\n     * Find actual position instance checking for a Positionable instance.\n     */\n    let actualPosition = (position?.position ?? position);\n    /**\n     * Duplicate the app / Positionable starting position to track differences.\n     */\n    let initialPosition = null;\n    /**\n     * Stores the initial X / Y on drag down.\n     */\n    let initialDragPoint = { x: 0, y: 0 };\n    /**\n     * Stores the current dragging state and gates the move pointer as the dragging store is not set until the first\n     * pointer move.\n     */\n    let dragging = false;\n    /**\n     * Stores the quickTo callback to use for optimized tweening when easing is enabled.\n     */\n    let quickTo = actualPosition.animate.quickTo(['top', 'left'], tweenOptions);\n    /**\n     * Event handlers associated with this action, so they may be later unregistered.\n     */\n    const handlers = {\n        dragDown: ['pointerdown', onDragPointerDown, false],\n        dragMove: ['pointermove', onDragPointerChange, false],\n        dragUp: ['pointerup', onDragPointerUp, false]\n    };\n    /**\n     * Activates listeners.\n     */\n    function activateListeners() {\n        // Drag handlers\n        node.addEventListener(...handlers.dragDown);\n        node.classList.add('tjs-draggable');\n    }\n    /**\n     * Removes listeners.\n     */\n    function removeListeners() {\n        if (typeof storeDragging?.set === 'function') {\n            storeDragging.set(false);\n        }\n        // Drag handlers\n        node.removeEventListener(...handlers.dragDown);\n        node.removeEventListener(...handlers.dragMove);\n        node.removeEventListener(...handlers.dragUp);\n        node.classList.remove('tjs-draggable');\n    }\n    if (enabled) {\n        activateListeners();\n    }\n    /**\n     * Handle the initial pointer down that activates dragging behavior for the positionable.\n     *\n     * @param event - The pointer down event.\n     */\n    function onDragPointerDown(event) {\n        if (event.button !== button || !event.isPrimary) {\n            return;\n        }\n        // Do not process if the position system is not enabled.\n        if (!actualPosition.enabled) {\n            return;\n        }\n        // Potentially ignore this event if `ignoreTargetClassList` is defined and the `event.target` has a matching\n        // class.\n        if (ignoreTargetClassList !== void 0 && A11yHelper.isFocusTarget(event.target)) {\n            for (const targetClass of ignoreTargetClassList) {\n                if (event.target.classList.contains(targetClass)) {\n                    return;\n                }\n            }\n        }\n        // Potentially ignore this event if `hasTargetClassList` is defined and the `event.target` does not have any\n        // matching class from the list.\n        if (hasTargetClassList !== void 0 && A11yHelper.isFocusTarget(event.target)) {\n            let foundTarget = false;\n            for (const targetClass of hasTargetClassList) {\n                if (event.target.classList.contains(targetClass)) {\n                    foundTarget = true;\n                    break;\n                }\n            }\n            if (!foundTarget) {\n                return;\n            }\n        }\n        event.preventDefault();\n        dragging = false;\n        // Record initial position.\n        initialPosition = actualPosition.get();\n        initialDragPoint = { x: event.clientX, y: event.clientY };\n        // Add move and pointer up handlers.\n        node.addEventListener(...handlers.dragMove);\n        node.addEventListener(...handlers.dragUp);\n        node.setPointerCapture(event.pointerId);\n    }\n    /**\n     * Move the positionable.\n     *\n     * @param event - The pointer move event.\n     */\n    function onDragPointerChange(event) {\n        // See chorded button presses for pointer events:\n        // https://www.w3.org/TR/pointerevents3/#chorded-button-interactions\n        // TODO: Support different button configurations for PointerEvents.\n        if ((event.buttons & 1) === 0) {\n            onDragPointerUp(event);\n            return;\n        }\n        if (event.button !== -1 || !event.isPrimary) {\n            return;\n        }\n        event.preventDefault();\n        // Only set store dragging on first move event.\n        if (!dragging && typeof storeDragging?.set === 'function') {\n            dragging = true;\n            storeDragging.set(true);\n        }\n        const newLeft = initialPosition?.left + (event.clientX - initialDragPoint.x);\n        const newTop = initialPosition?.top + (event.clientY - initialDragPoint.y);\n        if (tween) {\n            quickTo(newTop, newLeft);\n        }\n        else {\n            positionData.left = newLeft;\n            positionData.top = newTop;\n            actualPosition.set(positionData);\n        }\n    }\n    /**\n     * Finish dragging and set the final position and removing listeners.\n     *\n     * @param event - The pointer up event.\n     */\n    function onDragPointerUp(event) {\n        event.preventDefault();\n        dragging = false;\n        if (typeof storeDragging?.set === 'function') {\n            storeDragging.set(false);\n        }\n        node.removeEventListener(...handlers.dragMove);\n        node.removeEventListener(...handlers.dragUp);\n    }\n    return {\n        // The default of enabled being true won't automatically add listeners twice.\n        update: (options) => {\n            if (options.position !== void 0) {\n                // Find actual position instance checking for a Positionable instance.\n                const newPosition = (options.position?.position ?? options.position);\n                if (newPosition !== actualPosition) {\n                    actualPosition = newPosition;\n                    quickTo = actualPosition.animate.quickTo(['top', 'left'], tweenOptions);\n                }\n            }\n            if (typeof options.enabled === 'boolean') {\n                enabled = options.enabled;\n                if (enabled) {\n                    activateListeners();\n                }\n                else {\n                    removeListeners();\n                }\n            }\n            if (typeof options.button === 'number') {\n                button = options.button;\n            }\n            if (typeof options.tween === 'boolean') {\n                tween = options.tween;\n            }\n            if (isObject(options.tweenOptions)) {\n                tweenOptions = options.tweenOptions;\n                quickTo.options(tweenOptions);\n            }\n            if (options.hasTargetClassList !== void 0) {\n                if (!isIterable(options.hasTargetClassList)) {\n                    throw new TypeError(`'hasTargetClassList' is not iterable.`);\n                }\n                else {\n                    hasTargetClassList = options.hasTargetClassList;\n                }\n            }\n            if (options.ignoreTargetClassList !== void 0) {\n                if (!isIterable(options.ignoreTargetClassList)) {\n                    throw new TypeError(`'ignoreTargetClassList' is not iterable.`);\n                }\n                else {\n                    ignoreTargetClassList = options.ignoreTargetClassList;\n                }\n            }\n        },\n        destroy: () => removeListeners()\n    };\n}\n/**\n * Provides an instance of the {@link draggable} action options support / Readable store to make updating / setting\n * draggable options much easier. When subscribing to the options instance returned by {@link draggable.options} the\n * Subscriber handler receives the entire instance.\n */\nclass DraggableOptionsStore {\n    tween;\n    tweenOptions;\n    #initialTween;\n    /**\n     */\n    #initialTweenOptions;\n    #tween = false;\n    /**\n     */\n    #tweenOptions = { duration: 1, ease: 'cubicOut' };\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     * @param [opts] - Optional parameters.\n     *\n     * @param [opts.tween = false] - Tween enabled.\n     *\n     * @param [opts.tweenOptions] - Quick tween options.\n     */\n    constructor({ tween = false, tweenOptions } = {}) {\n        // Define the following getters directly on this instance and make them enumerable. This allows them to be\n        // picked up w/ `Object.assign`.\n        Object.defineProperty(this, 'tween', {\n            get: () => { return this.#tween; },\n            set: (newTween) => {\n                if (typeof newTween !== 'boolean') {\n                    throw new TypeError(`'tween' is not a boolean.`);\n                }\n                this.#tween = newTween;\n                this.#updateSubscribers();\n            },\n            enumerable: true\n        });\n        Object.defineProperty(this, 'tweenOptions', {\n            get: () => { return this.#tweenOptions; },\n            set: (newTweenOptions) => {\n                if (!isObject(newTweenOptions)) {\n                    throw new TypeError(`'tweenOptions' is not an object.`);\n                }\n                if (newTweenOptions.duration !== void 0) {\n                    if (!Number.isFinite(newTweenOptions.duration)) {\n                        throw new TypeError(`'tweenOptions.duration' is not a finite number.`);\n                    }\n                    if (newTweenOptions.duration < 0) {\n                        this.#tweenOptions.duration = 0;\n                    }\n                    else {\n                        this.#tweenOptions.duration = newTweenOptions.duration;\n                    }\n                }\n                if (newTweenOptions.ease !== void 0) {\n                    const easeFn = getEasingFunc(newTweenOptions.ease);\n                    if (typeof easeFn !== 'function') {\n                        throw new TypeError(`'tweenOptions.ease' is not a function or Svelte easing function name.`);\n                    }\n                    this.#tweenOptions.ease = newTweenOptions.ease;\n                }\n                this.#updateSubscribers();\n            },\n            enumerable: true\n        });\n        // Set default options.\n        if (tween !== void 0) {\n            this.tween = tween;\n        }\n        if (tweenOptions !== void 0) {\n            this.tweenOptions = tweenOptions;\n        }\n        this.#initialTween = this.#tween;\n        this.#initialTweenOptions = Object.assign({}, this.#tweenOptions);\n    }\n    /**\n     * @returns Get tween duration.\n     */\n    get tweenDuration() { return this.#tweenOptions.duration; }\n    /**\n     * @returns Get easing function or easing function name.\n     */\n    get tweenEase() { return this.#tweenOptions.ease; }\n    /**\n     * @param duration - Set tween duration.\n     */\n    set tweenDuration(duration) {\n        if (!Number.isFinite(duration)) {\n            throw new TypeError(`'duration' is not a finite number.`);\n        }\n        if (duration < 0) {\n            duration = 0;\n        }\n        this.#tweenOptions.duration = duration;\n        this.#updateSubscribers();\n    }\n    /**\n     * @param ease - Set easing function by name or direct function.\n     */\n    set tweenEase(ease) {\n        const easeFn = getEasingFunc(ease);\n        if (typeof easeFn !== 'function') {\n            throw new TypeError(`'ease' is not a function or Svelte easing function name.`);\n        }\n        this.#tweenOptions.ease = ease;\n        this.#updateSubscribers();\n    }\n    /**\n     * Resets all options data to initial values.\n     */\n    reset() {\n        this.#tween = this.#initialTween;\n        this.#tweenOptions = Object.assign({}, this.#initialTweenOptions);\n        this.#updateSubscribers();\n    }\n    /**\n     * Resets tween enabled state to initial value.\n     */\n    resetTween() {\n        this.#tween = this.#initialTween;\n        this.#updateSubscribers();\n    }\n    /**\n     * Resets tween options to initial values.\n     */\n    resetTweenOptions() {\n        this.#tweenOptions = Object.assign({}, this.#initialTweenOptions);\n        this.#updateSubscribers();\n    }\n    /**\n     * Store subscribe method.\n     *\n     * @param handler - Callback function that is invoked on update / changes. Receives the DraggableOptionsStore\n     *        instance.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler); // add handler to the array of subscribers\n            handler(this); // call handler with current value\n        }\n        // Return unsubscribe function.\n        return () => {\n            const existingIdx = this.#subscribers.findIndex((entry) => entry === handler);\n            if (existingIdx !== -1) {\n                this.#subscribers.splice(existingIdx, 1);\n            }\n        };\n    }\n    #updateSubscribers() {\n        const subscriptions = this.#subscribers;\n        // Early out if there are no subscribers.\n        if (subscriptions.length > 0) {\n            for (let cntr = 0; cntr < subscriptions.length; cntr++) {\n                subscriptions[cntr](this);\n            }\n        }\n    }\n}\n/**\n * Define a function to get a DraggableOptionsStore instance.\n *\n * @param options - Initial options for DraggableOptionsStore.\n *\n * @returns A new options instance.\n */\ndraggable.options = (options) => new DraggableOptionsStore(options);\n\n/**\n * Provides a basic animation implementation for TJSPosition animation.\n */\nclass AnimationControl {\n    /**\n     */\n    #animationData;\n    /**\n     */\n    #finishedPromise;\n    /**\n     */\n    #willFinish;\n    /**\n     * Defines a static empty / void animation control.\n     */\n    static #voidControl = new AnimationControl(null);\n    /**\n     * Provides a static void / undefined AnimationControl that is automatically resolved.\n     */\n    static get voidControl() { return this.#voidControl; }\n    /**\n     * @param [animationData] - Animation data.\n     *\n     * @param [willFinish] - Promise that tracks animation finished state.\n     */\n    constructor(animationData, willFinish = false) {\n        this.#animationData = animationData;\n        this.#willFinish = willFinish;\n        // Set this control to animation data.\n        if (isObject(animationData)) {\n            animationData.control = this;\n        }\n    }\n    /**\n     * Get a promise that resolves when animation is finished.\n     *\n     * @returns Animation finished Promise.\n     */\n    get finished() {\n        if (!CrossWindow.isPromise(this.#finishedPromise)) {\n            this.#finishedPromise = this.#willFinish ? new Promise((resolve) => this.#animationData.resolve = resolve) :\n                Promise.resolve({ cancelled: false });\n        }\n        return this.#finishedPromise;\n    }\n    /**\n     * Returns whether this animation is currently active / animating.\n     *\n     * Note: a delayed animation may not be started / active yet. Use {@link AnimationControl.isFinished} to determine\n     * if an animation is actually finished.\n     *\n     * @returns Animation active state.\n     */\n    get isActive() { return this.#animationData?.active ?? false; }\n    /**\n     * Returns whether this animation is completely finished.\n     *\n     * @returns Animation finished state.\n     */\n    get isFinished() { return this.#animationData?.finished ?? true; }\n    /**\n     * Cancels the animation.\n     */\n    cancel() {\n        const animationData = this.#animationData;\n        if (animationData === null || animationData === void 0) {\n            return;\n        }\n        // Set cancelled state to true and this animation data instance will be removed from AnimationManager on next\n        // update.\n        animationData.cancelled = true;\n    }\n}\n\n/**\n * Provides animation management and scheduling allowing all TJSPosition instances to utilize one micro-task.\n */\nclass AnimationManager {\n    /**\n     * Cancels all animations except `quickTo` animations.\n     */\n    static cancelFn = (data) => data?.quickTo !== true;\n    /**\n     * Cancels all animations.\n     */\n    static cancelAllFn = () => true;\n    /**\n     * Defines the options used for {@link TJSPosition.set}.\n     */\n    static #tjsPositionSetOptions = Object.freeze({ immediateElementUpdate: true });\n    /**\n     */\n    static #activeList = [];\n    /**\n     * Provides the `this` context for {@link AnimationManager.animate} to be scheduled on rAF.\n     */\n    static #animateBound = AnimationManager.animate.bind(AnimationManager);\n    /**\n     */\n    static #pendingList = [];\n    /**\n     * Tracks whether a requestAnimationFrame callback is pending via {@link AnimationManager.add};\n     */\n    static #rafPending = false;\n    /**\n     * Time of last `rAF` callback.\n     */\n    static #timeFrame;\n    /**\n     * Time of `performance.now()` at last `rAF` callback.\n     */\n    static #timeNow;\n    /**\n     * @returns Time of last `rAF` callback.\n     */\n    static get timeFrame() {\n        return this.#timeFrame;\n    }\n    /**\n     * @returns Time of `performance.now()` at last `rAF` callback.\n     */\n    static get timeNow() {\n        return this.#timeNow;\n    }\n    /**\n     * Add animation data.\n     *\n     * @param data -\n     */\n    static add(data) {\n        if (data.cancelled) {\n            this.#cleanupData(data);\n            return;\n        }\n        AnimationManager.#pendingList.push(data);\n        // If there is no rAF pending schedule one now.\n        if (!AnimationManager.#rafPending) {\n            AnimationManager.#rafPending = true;\n            globalThis.requestAnimationFrame(this.#animateBound);\n        }\n    }\n    /**\n     * Manage all animation.\n     *\n     * @param timeFrame - rAF callback time.\n     */\n    static animate(timeFrame) {\n        AnimationManager.#rafPending = false;\n        AnimationManager.#timeNow = globalThis.performance.now();\n        AnimationManager.#timeFrame = timeFrame;\n        // Early out of the continual rAF callback when there are no current animations scheduled.\n        if (AnimationManager.#activeList.length === 0 && AnimationManager.#pendingList.length === 0) {\n            return;\n        }\n        if (AnimationManager.#pendingList.length) {\n            // Process new data\n            for (let cntr = AnimationManager.#pendingList.length; --cntr >= 0;) {\n                const data = AnimationManager.#pendingList[cntr];\n                // If animation instance has been cancelled before start then remove it from new list and cleanup.\n                if (data.cancelled || (data.el !== void 0 && !data.el.isConnected)) {\n                    AnimationManager.#pendingList.splice(cntr, 1);\n                    this.#cleanupData(data);\n                }\n                // If data is active then process it now. Delayed animations start with `active` false.\n                if (data.active) {\n                    // Set any transform origin for the animation.\n                    if (data.transformOrigin) {\n                        data.position.set({ transformOrigin: data.transformOrigin });\n                    }\n                    data.start = AnimationManager.#timeFrame;\n                    // Remove from new list and add to active list.\n                    AnimationManager.#pendingList.splice(cntr, 1);\n                    AnimationManager.#activeList.push(data);\n                }\n            }\n        }\n        // Process active animations.\n        for (let cntr = AnimationManager.#activeList.length; --cntr >= 0;) {\n            const data = AnimationManager.#activeList[cntr];\n            // Remove any animations that have been canceled.\n            if (data.cancelled) {\n                AnimationManager.#activeList.splice(cntr, 1);\n                this.#cleanupData(data);\n                continue;\n            }\n            data.current = timeFrame - data.start;\n            // Remove this animation instance if current animating time exceeds duration.\n            if (data.current >= data.duration) {\n                // Prepare final update with end position data.\n                for (let dataCntr = data.keys.length; --dataCntr >= 0;) {\n                    const key = data.keys[dataCntr];\n                    data.newData[key] = data.destination[key];\n                }\n                data.position.set(data.newData, AnimationManager.#tjsPositionSetOptions);\n                AnimationManager.#activeList.splice(cntr, 1);\n                this.#cleanupData(data);\n                continue;\n            }\n            // Apply easing to create an eased time.\n            const easedTime = data.ease(data.current / data.duration);\n            for (let dataCntr = data.keys.length; --dataCntr >= 0;) {\n                const key = data.keys[dataCntr];\n                data.newData[key] = data.interpolate(data.initial[key], data.destination[key], easedTime);\n            }\n            data.position.set(data.newData, AnimationManager.#tjsPositionSetOptions);\n        }\n        globalThis.requestAnimationFrame(this.#animateBound);\n    }\n    /**\n     * Cancels all animations for given TJSPosition instance.\n     *\n     * @param position - TJSPosition instance.\n     *\n     * @param [cancelFn] - An optional function to control cancelling animations.\n     */\n    static cancel(position, cancelFn = AnimationManager.cancelFn) {\n        for (let cntr = AnimationManager.#activeList.length; --cntr >= 0;) {\n            const data = AnimationManager.#activeList[cntr];\n            if (data.cancelable && data.position === position && cancelFn(data)) {\n                AnimationManager.#activeList.splice(cntr, 1);\n                data.cancelled = true;\n                this.#cleanupData(data);\n            }\n        }\n        for (let cntr = AnimationManager.#pendingList.length; --cntr >= 0;) {\n            const data = AnimationManager.#pendingList[cntr];\n            if (data.cancelable && data.position === position && cancelFn(data)) {\n                AnimationManager.#pendingList.splice(cntr, 1);\n                data.cancelled = true;\n                this.#cleanupData(data);\n            }\n        }\n    }\n    /**\n     * Cancels all active and delayed animations.\n     */\n    static cancelAll() {\n        for (let cntr = AnimationManager.#activeList.length; --cntr >= 0;) {\n            const data = AnimationManager.#activeList[cntr];\n            data.cancelled = true;\n            this.#cleanupData(data);\n        }\n        for (let cntr = AnimationManager.#pendingList.length; --cntr >= 0;) {\n            const data = AnimationManager.#pendingList[cntr];\n            data.cancelled = true;\n            this.#cleanupData(data);\n        }\n        AnimationManager.#activeList.length = 0;\n        AnimationManager.#pendingList.length = 0;\n    }\n    /**\n     * @param data - Animation data to cleanup.\n     */\n    static #cleanupData(data) {\n        // Update state.\n        data.active = false;\n        data.finished = true;\n        // Reset any transform origin for the animation to initial value.\n        if (data.transformOriginInitial) {\n            data.position.set({ transformOrigin: data.transformOriginInitial });\n        }\n        if (typeof data.cleanup === 'function') {\n            data.cleanup(data);\n        }\n        if (typeof data.resolve === 'function') {\n            data.resolve({ cancelled: data.cancelled });\n        }\n        // Remove retained data if not a `quickTo` animation.\n        if (!data.quickTo) {\n            data.cleanup = void 0;\n            data.control = void 0;\n            data.destination = void 0;\n            data.el = void 0;\n            data.ease = void 0;\n            data.initial = void 0;\n            data.interpolate = void 0;\n            data.keys = void 0;\n            data.newData = void 0;\n            data.position = void 0;\n            data.resolve = void 0;\n        }\n    }\n    /**\n     * Gets all {@link AnimationControl} instances for a given TJSPosition instance.\n     *\n     * @param position - TJSPosition instance.\n     *\n     * @returns All scheduled AnimationControl instances for the given TJSPosition instance.\n     */\n    static getScheduled(position) {\n        const results = [];\n        for (let cntr = AnimationManager.#activeList.length; --cntr >= 0;) {\n            const data = AnimationManager.#activeList[cntr];\n            if (data.position === position && data.control) {\n                results.push(data.control);\n            }\n        }\n        for (let cntr = AnimationManager.#pendingList.length; --cntr >= 0;) {\n            const data = AnimationManager.#pendingList[cntr];\n            if (data.position === position && data.control) {\n                results.push(data.control);\n            }\n        }\n        return results;\n    }\n    /**\n     * Returns the status of any scheduled or pending animations for the given {@link TJSPosition} instance.\n     *\n     * @param position - TJSPosition instance.\n     *\n     * @param [options] - Scheduling options.\n     *\n     * @returns True if scheduled / false if not.\n     */\n    static isScheduled(position, { active = true, pending = true } = {}) {\n        if (active) {\n            for (let cntr = AnimationManager.#activeList.length; --cntr >= 0;) {\n                if (AnimationManager.#activeList[cntr].position === position) {\n                    return true;\n                }\n            }\n        }\n        if (pending) {\n            for (let cntr = AnimationManager.#pendingList.length; --cntr >= 0;) {\n                if (AnimationManager.#pendingList[cntr].position === position) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n}\n\n/**\n * Defines stored positional data.\n */\nclass TJSPositionData {\n    height;\n    left;\n    maxHeight;\n    maxWidth;\n    minHeight;\n    minWidth;\n    rotateX;\n    rotateY;\n    rotateZ;\n    scale;\n    top;\n    transformOrigin;\n    translateX;\n    translateY;\n    translateZ;\n    width;\n    zIndex;\n    /**\n     * @param [opts] - Options.\n     *\n     * @param [opts.height] -\n     *\n     * @param [opts.left] -\n     *\n     * @param [opts.maxHeight] -\n     *\n     * @param [opts.maxWidth] -\n     *\n     * @param [opts.minHeight] -\n     *\n     * @param [opts.minWidth] -\n     *\n     * @param [opts.rotateX] -\n     *\n     * @param [opts.rotateY] -\n     *\n     * @param [opts.rotateZ] -\n     *\n     * @param [opts.scale] -\n     *\n     * @param [opts.translateX] -\n     *\n     * @param [opts.translateY] -\n     *\n     * @param [opts.translateZ] -\n     *\n     * @param [opts.top] -\n     *\n     * @param [opts.transformOrigin] -\n     *\n     * @param [opts.width] -\n     *\n     * @param [opts.zIndex] -\n     */\n    constructor({ height = null, left = null, maxHeight = null, maxWidth = null, minHeight = null, minWidth = null, rotateX = null, rotateY = null, rotateZ = null, scale = null, translateX = null, translateY = null, translateZ = null, top = null, transformOrigin = null, width = null, zIndex = null } = {}) {\n        this.height = height;\n        this.left = left;\n        this.maxHeight = maxHeight;\n        this.maxWidth = maxWidth;\n        this.minHeight = minHeight;\n        this.minWidth = minWidth;\n        this.rotateX = rotateX;\n        this.rotateY = rotateY;\n        this.rotateZ = rotateZ;\n        this.scale = scale;\n        this.top = top;\n        this.transformOrigin = transformOrigin;\n        this.translateX = translateX;\n        this.translateY = translateY;\n        this.translateZ = translateZ;\n        this.width = width;\n        this.zIndex = zIndex;\n    }\n}\n\n/**\n * Various internal utilities to work with {@link TJSPositionData}.\n */\nclass TJSPositionDataUtil {\n    /**\n     * Stores the TJSPositionData properties that can be animated.\n     */\n    static #animateKeys = Object.freeze(new Set([\n        // Main keys\n        'left', 'top', 'maxWidth', 'maxHeight', 'minWidth', 'minHeight', 'width', 'height',\n        'rotateX', 'rotateY', 'rotateZ', 'scale', 'translateX', 'translateY', 'translateZ', 'zIndex',\n        // Aliases\n        'rotation'\n    ]));\n    /**\n     * Stores the TJSPositionData property aliases that can be animated.\n     */\n    static #animateKeyAliases = Object.freeze(new Map([['rotation', 'rotateZ']]));\n    /**\n     * Provides numeric defaults for all parameters. This is used by {@link TJSPosition.get} to optionally provide\n     * numeric defaults.\n     */\n    static #numericDefaults = Object.freeze({\n        // Other keys\n        height: 0,\n        left: 0,\n        maxHeight: null,\n        maxWidth: null,\n        minHeight: null,\n        minWidth: null,\n        top: 0,\n        transformOrigin: null,\n        width: 0,\n        zIndex: null,\n        rotateX: 0,\n        rotateY: 0,\n        rotateZ: 0,\n        scale: 1,\n        translateX: 0,\n        translateY: 0,\n        translateZ: 0\n    });\n    /**\n     * Convenience to copy from source to target of two TJSPositionData like objects. If a target is not supplied a new\n     * {@link TJSPositionData} instance is created.\n     *\n     * @param source - The source instance to copy from.\n     *\n     * @param [target] - Target TJSPositionData like object; if one is not provided a new instance is created.\n     *\n     * @returns The target instance with all TJSPositionData fields.\n     */\n    static copyData(source, target = new TJSPositionData()) {\n        target.height = source.height ?? null;\n        target.left = source.left ?? null;\n        target.maxHeight = source.maxHeight ?? null;\n        target.maxWidth = source.maxWidth ?? null;\n        target.minHeight = source.minHeight ?? null;\n        target.minWidth = source.minWidth ?? null;\n        target.rotateX = source.rotateX ?? null;\n        target.rotateY = source.rotateY ?? null;\n        target.rotateZ = source.rotateZ ?? null;\n        target.scale = source.scale ?? null;\n        target.top = source.top ?? null;\n        target.transformOrigin = source.transformOrigin ?? null;\n        target.translateX = source.translateX ?? null;\n        target.translateY = source.translateY ?? null;\n        target.translateZ = source.translateZ ?? null;\n        target.width = source.width ?? null;\n        target.zIndex = source.zIndex ?? null;\n        return target;\n    }\n    /**\n     * Returns the non-aliased animation key.\n     *\n     * @param key - Animation key / possibly aliased key.\n     *\n     * @returns Actual non-aliased animation key.\n     */\n    static getAnimationKey(key) {\n        return this.#animateKeyAliases.get(key) ?? key;\n    }\n    /**\n     * Queries an object by the given key or otherwise returns any numeric default.\n     *\n     * @param data - An object to query for the given animation key.\n     *\n     * @param key - Animation key.\n     *\n     * @returns Data at key or numeric default.\n     */\n    static getDataOrDefault(data, key) {\n        key = this.#animateKeyAliases.get(key) ?? key;\n        return data[key] ?? this.#numericDefaults[key];\n    }\n    /**\n     * Tests if the given key is an animation key.\n     *\n     * @param key - A potential animation key.\n     *\n     * @returns Is animation key.\n     */\n    static isAnimationKey(key) {\n        return this.#animateKeys.has(key);\n    }\n    /**\n     * Sets numeric defaults for a {@link TJSPositionData} like object.\n     *\n     * @param data - A TJSPositionData like object.\n     */\n    static setNumericDefaults(data) {\n        // Transform keys\n        if (data.rotateX === null) {\n            data.rotateX = 0;\n        }\n        if (data.rotateY === null) {\n            data.rotateY = 0;\n        }\n        if (data.rotateZ === null) {\n            data.rotateZ = 0;\n        }\n        if (data.translateX === null) {\n            data.translateX = 0;\n        }\n        if (data.translateY === null) {\n            data.translateY = 0;\n        }\n        if (data.translateZ === null) {\n            data.translateZ = 0;\n        }\n        if (data.scale === null) {\n            data.scale = 1;\n        }\n    }\n}\n\n/**\n * Converts {@link TJSPositionData} properties defined as strings to number values. The string values can be defined\n * as relative adjustments with a leading operator. Various unit formats are supported as well.\n */\nclass ConvertStringData {\n    /**\n     * Animation keys for different processing categories.\n     */\n    static #animKeyTypes = {\n        // Animation keys that can be specified in `px` converted to a number.\n        numPx: Object.freeze(new Set(['left', 'top', 'maxWidth', 'maxHeight', 'minWidth', 'minHeight', 'width', 'height',\n            'translateX', 'translateY', 'translateZ'])),\n        // Animation keys that can be specified in percentage of parent element constraint.\n        percentParent: Object.freeze(new Set(['left', 'top', 'maxWidth', 'maxHeight', 'minWidth', 'minHeight', 'width',\n            'height'])),\n        // Only rotation animation keys can be specified in `rad` / `turn` converted to a number.\n        rotationRadTurn: Object.freeze(new Set(['rotateX', 'rotateY', 'rotateZ', 'rotation']))\n    };\n    /**\n     * Parses string data values. Relative values must start with leading values '+=', '-=', or '*=' followed by a\n     * float / numeric value. IE `+=45` or for percentage '+=10%'. Also handles exact percent value such as `10` or\n     * `10%`. Percentage values are based on the current value, parent element constraints, or constraints of the type\n     * of value like rotation being bound by 360 degrees.\n     *\n     * @privateRemarks\n     * TODO: In the future support more specific CSS unit types.\n     */\n    static #regexStringData = /^(?<operation>[-+*]=)?(?<value>-?\\d*\\.?\\d+)(?<unit>%|%~|px|rad|turn)?$/;\n    /**\n     * Stores the results for match groups from `regexStringData`;\n     */\n    static #matchResults = Object.seal({\n        operation: void 0,\n        value: 0,\n        unit: void 0\n    });\n    /**\n     * Converts any relative string values for animatable keys to actual updates performed against current data.\n     *\n     * @param data - position data.\n     *\n     * @param position - The source position data.\n     *\n     * @param el - Target positioned element.\n     *\n     * @returns Converted data.\n     */\n    static process(data, position, el) {\n        // Used in `%` calculations. The first `%` conversion that requires parent element height and width will attempt\n        // to cache the parent element client height & width of the given element.\n        let parentClientHeight = Number.NaN;\n        let parentClientWidth = Number.NaN;\n        for (const key in data) {\n            // Key is animatable / numeric.\n            if (TJSPositionDataUtil.isAnimationKey(key)) {\n                const value = data[key];\n                if (typeof value !== 'string') {\n                    continue;\n                }\n                // Ignore 'auto' and 'inherit' string values.\n                if (value === 'auto' || value === 'inherit') {\n                    continue;\n                }\n                const animKey = key;\n                const regexResults = this.#regexStringData.exec(value);\n                // Additional state indicating a particular key is handled.\n                let handled = false;\n                if (regexResults && regexResults.groups) {\n                    const results = this.#matchResults;\n                    results.operation = regexResults.groups.operation;\n                    results.value = parseFloat(regexResults.groups.value);\n                    results.unit = regexResults.groups.unit;\n                    // Retrieve current value, but if null use the numeric default.\n                    const current = TJSPositionDataUtil.getDataOrDefault(position, key);\n                    switch (results.unit) {\n                        // Animation keys that support percentage changes including constraints against the parent element.\n                        case '%':\n                            {\n                                // Cache parent client width / height on first parent percent based key.\n                                if (this.#animKeyTypes.percentParent.has(key) && (Number.isNaN(parentClientHeight) ||\n                                    Number.isNaN(parentClientWidth))) {\n                                    if (el?.parentElement?.isConnected) {\n                                        parentClientHeight = el.parentElement.clientHeight;\n                                        parentClientWidth = el.parentElement.clientWidth;\n                                    }\n                                    else {\n                                        parentClientHeight = 0;\n                                        parentClientWidth = 0;\n                                        console.warn(`TJSPosition - ConvertStringData warning: could not determine parent constraints for key '${key}' with value '${value}'.`);\n                                        data[key] = void 0;\n                                        continue;\n                                    }\n                                }\n                                handled = this.#handlePercent(animKey, current, data, results, parentClientHeight, parentClientWidth);\n                                break;\n                            }\n                        // Animation keys that support percentage changes from current values.\n                        case '%~':\n                            handled = this.#handleRelativePercent(animKey, current, data, results);\n                            break;\n                        // Animation keys that support `px` / treat as raw number.\n                        case 'px':\n                            handled = this.#animKeyTypes.numPx.has(key) ?\n                                this.#applyResultsValue(animKey, current, data, results) : false;\n                            break;\n                        // Only rotation animation keys support `rad` / `turn`.\n                        case 'rad':\n                        case 'turn':\n                            handled = this.#animKeyTypes.rotationRadTurn.has(key) ?\n                                this.#handleRotationRadTurn(animKey, current, data, results) : false;\n                            break;\n                        // No units / treat as raw number.\n                        default:\n                            handled = this.#applyResultsValue(animKey, current, data, results);\n                            break;\n                    }\n                }\n                if (!regexResults || !handled) {\n                    console.warn(`TJSPosition - ConvertStringData warning: malformed key '${key}' with value '${value}'.`);\n                    data[key] = void 0;\n                }\n            }\n        }\n        return data;\n    }\n    // Internal implementation ----------------------------------------------------------------------------------------\n    /**\n     * Provides the common update to source data after `results.value` has been converted to the proper value\n     * respectively.\n     *\n     * @param key - Animation key.\n     *\n     * @param current - Current value\n     *\n     * @param data - Source data to convert.\n     *\n     * @param results - Match results.\n     *\n     * @returns Adjustment successful.\n     */\n    static #applyResultsValue(key, current, data, results) {\n        if (!results.operation) {\n            data[key] = results.value;\n            return true;\n        }\n        switch (results.operation) {\n            case '-=':\n                data[key] = current - results.value;\n                break;\n            case '+=':\n                data[key] = current + results.value;\n                break;\n            case '*=':\n                data[key] = current * results.value;\n                break;\n            default:\n                return false;\n        }\n        return true;\n    }\n    /**\n     * Handles the `%` unit type where values are adjusted against the parent element client width / height or in the\n     * case of rotation the percentage of 360 degrees.\n     *\n     * @param key - Animation key.\n     *\n     * @param current - Current value\n     *\n     * @param data - Source data to convert.\n     *\n     * @param results - Match results.\n     *\n     * @param parentClientHeight - Parent element client height.\n     *\n     * @param parentClientWidth - Parent element client width.\n     *\n     * @returns Adjustment successful.\n     */\n    static #handlePercent(key, current, data, results, parentClientHeight, parentClientWidth) {\n        switch (key) {\n            // Calculate value; take into account keys that calculate parent client width.\n            case 'left':\n            case 'maxWidth':\n            case 'minWidth':\n            case 'width':\n            case 'translateX':\n                results.value = parentClientWidth * (results.value / 100);\n                break;\n            // Calculate value; take into account keys that calculate parent client height.\n            case 'top':\n            case 'maxHeight':\n            case 'minHeight':\n            case 'height':\n            case 'translateY':\n                results.value = parentClientHeight * (results.value / 100);\n                break;\n            // Calculate value; convert percentage into degrees\n            case 'rotateX':\n            case 'rotateY':\n            case 'rotateZ':\n            case 'rotation':\n                results.value = 360 * (results.value / 100);\n                break;\n            default:\n                return false;\n        }\n        return this.#applyResultsValue(key, current, data, results);\n    }\n    /**\n     * Handles the `%~` unit type where values are adjusted against the current value for the given key.\n     *\n     * @param key - Animation key.\n     *\n     * @param current - Current value\n     *\n     * @param data - Source data to convert.\n     *\n     * @param results - Match results.\n     *\n     * @returns Adjustment successful.\n     */\n    static #handleRelativePercent(key, current, data, results) {\n        // Normalize percentage.\n        results.value = results.value / 100;\n        if (!results.operation) {\n            data[key] = current * results.value;\n            return true;\n        }\n        switch (results.operation) {\n            case '-=':\n                data[key] = current - (current * results.value);\n                break;\n            case '+=':\n                data[key] = current + (current * results.value);\n                break;\n            case '*=':\n                data[key] = current * (current * results.value);\n                break;\n            default:\n                return false;\n        }\n        return true;\n    }\n    /**\n     * Handles the `rad` / `turn` unit types for rotation animation keys.\n     *\n     * @param key - Animation key.\n     *\n     * @param current - Current value\n     *\n     * @param data - Source data to convert.\n     *\n     * @param results - Match results.\n     *\n     * @returns Adjustment successful.\n     */\n    static #handleRotationRadTurn(key, current, data, results) {\n        // Convert radians / turn into degrees.\n        switch (results.unit) {\n            case 'rad':\n                results.value = radToDeg(results.value);\n                break;\n            case 'turn':\n                results.value = 360 * results.value;\n                break;\n        }\n        return this.#applyResultsValue(key, current, data, results);\n    }\n}\n\n/**\n * Provides the output data for {@link TransformAPI.getData}.\n */\nclass TJSTransformData {\n    constructor() {\n        Object.seal(this);\n    }\n    /**\n     * Stores the calculated bounding rectangle.\n     */\n    #boundingRect = new DOMRect();\n    /**\n     * Stores the individual transformed corner points of the window in screen space clockwise from:\n     * top left -> top right -> bottom right -> bottom left.\n     */\n    #corners = [new Vec3(), new Vec3(), new Vec3(), new Vec3()];\n    /**\n     * Stores the current gl-matrix Mat4 data.\n     */\n    #mat4 = new Mat4();\n    /**\n     * Stores the pre-origin & post-origin translations to apply to matrix transforms.\n     */\n    #originTranslations = [new Mat4(), new Mat4()];\n    /**\n     * @returns The bounding rectangle.\n     */\n    get boundingRect() { return this.#boundingRect; }\n    /**\n     * @returns The transformed corner points as Vec3 in screen space.\n     */\n    get corners() { return this.#corners; }\n    /**\n     * @returns Returns the CSS style string for the transform matrix.\n     */\n    get css() { return `matrix3d(${this.mat4.join(',')})`; }\n    /**\n     * @returns The transform matrix.\n     */\n    get mat4() { return this.#mat4; }\n    /**\n     * @returns The pre / post translation matrices for origin translation.\n     */\n    get originTranslations() { return this.#originTranslations; }\n}\n\n/**\n * Provides type guards for `Number`.\n */\nclass NumberGuard {\n    constructor() { }\n    static isFinite(value) {\n        return typeof value === 'number' && Number.isFinite(value);\n    }\n    static isFiniteOrNull(value) {\n        return value === null || (typeof value === 'number' && Number.isFinite(value));\n    }\n}\n\n/**\n * Caches computed styles of a {@link TJSPosition} target element.\n */\nclass TJSPositionStyleCache {\n    el;\n    computed;\n    marginLeft;\n    marginTop;\n    maxHeight;\n    maxWidth;\n    minHeight;\n    minWidth;\n    hasWillChange;\n    stores;\n    resizeObserved;\n    constructor() {\n        this.el = void 0;\n        this.computed = void 0;\n        this.marginLeft = void 0;\n        this.marginTop = void 0;\n        this.maxHeight = void 0;\n        this.maxWidth = void 0;\n        this.minHeight = void 0;\n        this.minWidth = void 0;\n        this.hasWillChange = false;\n        this.resizeObserved = Object.seal({\n            contentHeight: void 0,\n            contentWidth: void 0,\n            offsetHeight: void 0,\n            offsetWidth: void 0\n        });\n        /**\n         * Provides a writable store to track offset & content width / height from an associated `resizeObserver` action.\n         */\n        const storeResizeObserved = writable(this.resizeObserved);\n        this.stores = {\n            element: writable(this.el),\n            resizeContentHeight: propertyStore(storeResizeObserved, 'contentHeight'),\n            resizeContentWidth: propertyStore(storeResizeObserved, 'contentWidth'),\n            resizeObserved: storeResizeObserved,\n            resizeObservable: writable(false),\n            resizeObservableHeight: writable(false),\n            resizeObservableWidth: writable(false),\n            resizeOffsetHeight: propertyStore(storeResizeObserved, 'offsetHeight'),\n            resizeOffsetWidth: propertyStore(storeResizeObserved, 'offsetWidth')\n        };\n    }\n    /**\n     * Returns the cached offsetHeight from any attached `resizeObserver` action otherwise gets the offsetHeight from\n     * the element directly. The more optimized path is using `resizeObserver` as getting it from the element\n     * directly is more expensive and alters the execution order of an animation frame.\n     *\n     * @returns The element offsetHeight.\n     */\n    get offsetHeight() {\n        if (this.el !== void 0 && A11yHelper.isFocusTarget(this.el)) {\n            return this.resizeObserved.offsetHeight !== void 0 ? this.resizeObserved.offsetHeight : this.el.offsetHeight;\n        }\n        throw new Error(`TJSPositionStyleCache - get offsetHeight error: no element assigned.`);\n    }\n    /**\n     * Returns the cached offsetWidth from any attached `resizeObserver` action otherwise gets the offsetWidth from\n     * the element directly. The more optimized path is using `resizeObserver` as getting it from the element\n     * directly is more expensive and alters the execution order of an animation frame.\n     *\n     * @returns The element offsetHeight.\n     */\n    get offsetWidth() {\n        if (this.el !== void 0 && A11yHelper.isFocusTarget(this.el)) {\n            return this.resizeObserved.offsetWidth !== void 0 ? this.resizeObserved.offsetWidth : this.el.offsetWidth;\n        }\n        throw new Error(`TJSPositionStyleCache - get offsetWidth error: no element assigned.`);\n    }\n    /**\n     * @param el -\n     *\n     * @returns Does element match cached element.\n     */\n    hasData(el) { return this.el === el; }\n    /**\n     * Resets the style cache.\n     */\n    reset() {\n        // Remove will-change inline style from previous element if it is still connected.\n        if (this.el !== void 0 && A11yHelper.isFocusTarget(this.el) && this.el.isConnected && !this.hasWillChange) {\n            this.el.style.willChange = '';\n        }\n        this.el = void 0;\n        this.computed = void 0;\n        this.marginLeft = void 0;\n        this.marginTop = void 0;\n        this.maxHeight = void 0;\n        this.maxWidth = void 0;\n        this.minHeight = void 0;\n        this.minWidth = void 0;\n        this.hasWillChange = false;\n        // Silently reset `resizedObserved`; With proper usage the `resizeObserver` action issues an update on removal.\n        this.resizeObserved.contentHeight = void 0;\n        this.resizeObserved.contentWidth = void 0;\n        this.resizeObserved.offsetHeight = void 0;\n        this.resizeObserved.offsetWidth = void 0;\n        // Reset the tracked element this TJSPosition instance is modifying.\n        this.stores.element.set(void 0);\n    }\n    /**\n     * Updates the style cache with new data from the given element.\n     *\n     * @param el - An HTML element.\n     */\n    update(el) {\n        this.el = el;\n        this.computed = globalThis.getComputedStyle(el);\n        this.marginLeft = StyleParse.pixels(el.style.marginLeft) ?? StyleParse.pixels(this.computed.marginLeft);\n        this.marginTop = StyleParse.pixels(el.style.marginTop) ?? StyleParse.pixels(this.computed.marginTop);\n        this.maxHeight = StyleParse.pixels(el.style.maxHeight) ?? StyleParse.pixels(this.computed.maxHeight);\n        this.maxWidth = StyleParse.pixels(el.style.maxWidth) ?? StyleParse.pixels(this.computed.maxWidth);\n        // Note that the computed styles for below will always be 0px / 0 when no style is active.\n        this.minHeight = StyleParse.pixels(el.style.minHeight) ?? StyleParse.pixels(this.computed.minHeight);\n        this.minWidth = StyleParse.pixels(el.style.minWidth) ?? StyleParse.pixels(this.computed.minWidth);\n        // Tracks if there already is a will-change property on the inline or computed styles.\n        const willChange = el.style.willChange !== '' ? el.style.willChange : this.computed.willChange ?? '';\n        this.hasWillChange = willChange !== '' && willChange !== 'auto';\n        // Update the tracked element this TJSPosition instance is modifying.\n        this.stores.element.set(el);\n    }\n}\n\n/**\n *\n */\nclass TJSTransforms {\n    /**\n     * Stores transform data.\n     */\n    #data = {};\n    /**\n     * Stores the transform keys in the order added.\n     */\n    #orderList = [];\n    /**\n     * Defines the keys of TJSPositionData that are transform keys.\n     *\n     * Note: `rotateZ` is the most likely transform applied in 2D context. Putting it first makes `hasTransform` slightly\n     * quicker.\n     */\n    static #transformKeys = Object.freeze([\n        'rotateZ', 'scale', 'rotateX', 'rotateY', 'translateX', 'translateY', 'translateZ'\n    ]);\n    /**\n     * Validates that a given key is a transform key.\n     *\n     * @param key - A potential transform key.\n     */\n    static #isTransformKey(key) {\n        return this.#transformKeys.includes(key);\n    }\n    /**\n     * Defines bitwise keys for transforms used in {@link TJSTransforms.getMat4}.\n     */\n    static #transformKeysBitwise = Object.freeze({\n        rotateX: 1,\n        rotateY: 2,\n        rotateZ: 4,\n        scale: 8,\n        translateX: 16,\n        translateY: 32,\n        translateZ: 64\n    });\n    /**\n     * Defines the default transform origin.\n     */\n    static #transformOriginDefault = 'top left';\n    /**\n     * Defines the valid transform origins.\n     */\n    static #transformOrigins = Object.freeze([\n        'top left', 'top center', 'top right', 'center left', 'center', 'center right', 'bottom left', 'bottom center',\n        'bottom right'\n    ]);\n    /**\n     * Defines a valid Set of transform origins.\n     */\n    static #transformOriginsSet = Object.freeze(new Set(this.#transformOrigins));\n    // Temporary variables --------------------------------------------------------------------------------------------\n    /**\n     */\n    static #mat4Result = new Mat4();\n    /**\n     */\n    static #mat4Temp = new Mat4();\n    /**\n     */\n    static #vec3Temp = new Vec3();\n    /**\n     */\n    static #vectorScale = [1, 1, 1];\n    /**\n     */\n    static #vectorTranslate = [0, 0, 0];\n    /**\n     * Returns a list of supported transform origins.\n     *\n     * @returns The supported transform origin strings.\n     */\n    static get transformOrigins() {\n        return this.#transformOrigins;\n    }\n    /**\n     * Returns whether the given string is a {@link TransformAPI.TransformOrigin}.\n     *\n     * @param origin - A potential transform origin string.\n     *\n     * @returns True if origin is a TransformOrigin string.\n     */\n    static isTransformOrigin(origin) {\n        return this.#transformOriginsSet.has(origin);\n    }\n    /**\n     * @returns Whether there are active transforms in local data.\n     */\n    get isActive() { return this.#orderList.length > 0; }\n    /**\n     * @returns Any local rotateX data.\n     */\n    get rotateX() { return this.#data.rotateX; }\n    /**\n     * @returns Any local rotateY data.\n     */\n    get rotateY() { return this.#data.rotateY; }\n    /**\n     * @returns Any local rotateZ data.\n     */\n    get rotateZ() { return this.#data.rotateZ; }\n    /**\n     * @returns Any local rotateZ scale.\n     */\n    get scale() { return this.#data.scale; }\n    /**\n     * @returns Any local translateZ data.\n     */\n    get translateX() { return this.#data.translateX; }\n    /**\n     * @returns Any local translateZ data.\n     */\n    get translateY() { return this.#data.translateY; }\n    /**\n     * @returns Any local translateZ data.\n     */\n    get translateZ() { return this.#data.translateZ; }\n    /**\n     * Sets the local rotateX data if the value is a finite number otherwise removes the local data.\n     *\n     * @param value - A value to set.\n     */\n    set rotateX(value) {\n        if (Number.isFinite(value)) {\n            if (this.#data.rotateX === void 0) {\n                this.#orderList.push('rotateX');\n            }\n            this.#data.rotateX = value;\n        }\n        else {\n            if (this.#data.rotateX !== void 0) {\n                const index = this.#orderList.findIndex((entry) => entry === 'rotateX');\n                if (index >= 0) {\n                    this.#orderList.splice(index, 1);\n                }\n            }\n            delete this.#data.rotateX;\n        }\n    }\n    /**\n     * Sets the local rotateY data if the value is a finite number otherwise removes the local data.\n     *\n     * @param value - A value to set.\n     */\n    set rotateY(value) {\n        if (Number.isFinite(value)) {\n            if (this.#data.rotateY === void 0) {\n                this.#orderList.push('rotateY');\n            }\n            this.#data.rotateY = value;\n        }\n        else {\n            if (this.#data.rotateY !== void 0) {\n                const index = this.#orderList.findIndex((entry) => entry === 'rotateY');\n                if (index >= 0) {\n                    this.#orderList.splice(index, 1);\n                }\n            }\n            delete this.#data.rotateY;\n        }\n    }\n    /**\n     * Sets the local rotateZ data if the value is a finite number otherwise removes the local data.\n     *\n     * @param value - A value to set.\n     */\n    set rotateZ(value) {\n        if (Number.isFinite(value)) {\n            if (this.#data.rotateZ === void 0) {\n                this.#orderList.push('rotateZ');\n            }\n            this.#data.rotateZ = value;\n        }\n        else {\n            if (this.#data.rotateZ !== void 0) {\n                const index = this.#orderList.findIndex((entry) => entry === 'rotateZ');\n                if (index >= 0) {\n                    this.#orderList.splice(index, 1);\n                }\n            }\n            delete this.#data.rotateZ;\n        }\n    }\n    /**\n     * Sets the local scale data if the value is a finite number otherwise removes the local data.\n     *\n     * @param value - A value to set.\n     */\n    set scale(value) {\n        if (Number.isFinite(value)) {\n            if (this.#data.scale === void 0) {\n                this.#orderList.push('scale');\n            }\n            this.#data.scale = value;\n        }\n        else {\n            if (this.#data.scale !== void 0) {\n                const index = this.#orderList.findIndex((entry) => entry === 'scale');\n                if (index >= 0) {\n                    this.#orderList.splice(index, 1);\n                }\n            }\n            delete this.#data.scale;\n        }\n    }\n    /**\n     * Sets the local translateX data if the value is a finite number otherwise removes the local data.\n     *\n     * @param value - A value to set.\n     */\n    set translateX(value) {\n        if (Number.isFinite(value)) {\n            if (this.#data.translateX === void 0) {\n                this.#orderList.push('translateX');\n            }\n            this.#data.translateX = value;\n        }\n        else {\n            if (this.#data.translateX !== void 0) {\n                const index = this.#orderList.findIndex((entry) => entry === 'translateX');\n                if (index >= 0) {\n                    this.#orderList.splice(index, 1);\n                }\n            }\n            delete this.#data.translateX;\n        }\n    }\n    /**\n     * Sets the local translateY data if the value is a finite number otherwise removes the local data.\n     *\n     * @param value - A value to set.\n     */\n    set translateY(value) {\n        if (Number.isFinite(value)) {\n            if (this.#data.translateY === void 0) {\n                this.#orderList.push('translateY');\n            }\n            this.#data.translateY = value;\n        }\n        else {\n            if (this.#data.translateY !== void 0) {\n                const index = this.#orderList.findIndex((entry) => entry === 'translateY');\n                if (index >= 0) {\n                    this.#orderList.splice(index, 1);\n                }\n            }\n            delete this.#data.translateY;\n        }\n    }\n    /**\n     * Sets the local translateZ data if the value is a finite number otherwise removes the local data.\n     *\n     * @param value - A value to set.\n     */\n    set translateZ(value) {\n        if (Number.isFinite(value)) {\n            if (this.#data.translateZ === void 0) {\n                this.#orderList.push('translateZ');\n            }\n            this.#data.translateZ = value;\n        }\n        else {\n            if (this.#data.translateZ !== void 0) {\n                const index = this.#orderList.findIndex((entry) => entry === 'translateZ');\n                if (index >= 0) {\n                    this.#orderList.splice(index, 1);\n                }\n            }\n            delete this.#data.translateZ;\n        }\n    }\n    /**\n     * Returns the `matrix3d` CSS transform for the given position / transform data.\n     *\n     * @param [data] - Optional position data otherwise use local stored transform data.\n     *\n     * @returns The CSS `matrix3d` string.\n     */\n    getCSS(data = this.#data) {\n        return `matrix3d(${this.getMat4(data, TJSTransforms.#mat4Result).join(',')})`;\n    }\n    /**\n     * Returns the `matrix3d` CSS transform for the given position / transform data.\n     *\n     * @param [data] - Optional position data otherwise use local stored transform data.\n     *\n     * @returns The CSS `matrix3d` string.\n     */\n    getCSSOrtho(data = this.#data) {\n        return `matrix3d(${this.getMat4Ortho(data, TJSTransforms.#mat4Result).join(',')})`;\n    }\n    /**\n     * Collects all data including a bounding rect, transform matrix, and points array of the given\n     * {@link TJSPositionData} instance with the applied local transform data.\n     *\n     * @param position - The position data to process.\n     *\n     * @param [output] - Optional TJSTransformData output instance.\n     *\n     * @param [validationData] - Optional validation data for adjustment parameters.\n     *\n     * @returns The output TJSTransformData instance.\n     */\n    getData(position, output = new TJSTransformData(), validationData) {\n        const valWidth = validationData?.width ?? 0;\n        const valHeight = validationData?.height ?? 0;\n        const valOffsetTop = validationData?.offsetTop ?? validationData?.marginTop ?? 0;\n        const valOffsetLeft = validationData?.offsetLeft ?? validationData?.marginLeft ?? 0;\n        position.top += valOffsetTop;\n        position.left += valOffsetLeft;\n        const width = NumberGuard.isFinite(position.width) ? position.width : valWidth;\n        const height = NumberGuard.isFinite(position.height) ? position.height : valHeight;\n        const rect = output.corners;\n        if (this.hasTransform(position)) {\n            rect[0][0] = rect[0][1] = rect[0][2] = 0;\n            rect[1][0] = width;\n            rect[1][1] = rect[1][2] = 0;\n            rect[2][0] = width;\n            rect[2][1] = height;\n            rect[2][2] = 0;\n            rect[3][0] = 0;\n            rect[3][1] = height;\n            rect[3][2] = 0;\n            const matrix = this.getMat4(position, output.mat4);\n            const translate = TJSTransforms.#getOriginTranslation(position.transformOrigin, width, height, output.originTranslations);\n            if (TJSTransforms.#transformOriginDefault === position.transformOrigin) {\n                Vec3.transformMat4(rect[0], rect[0], matrix);\n                Vec3.transformMat4(rect[1], rect[1], matrix);\n                Vec3.transformMat4(rect[2], rect[2], matrix);\n                Vec3.transformMat4(rect[3], rect[3], matrix);\n            }\n            else {\n                Vec3.transformMat4(rect[0], rect[0], translate[0]);\n                Vec3.transformMat4(rect[0], rect[0], matrix);\n                Vec3.transformMat4(rect[0], rect[0], translate[1]);\n                Vec3.transformMat4(rect[1], rect[1], translate[0]);\n                Vec3.transformMat4(rect[1], rect[1], matrix);\n                Vec3.transformMat4(rect[1], rect[1], translate[1]);\n                Vec3.transformMat4(rect[2], rect[2], translate[0]);\n                Vec3.transformMat4(rect[2], rect[2], matrix);\n                Vec3.transformMat4(rect[2], rect[2], translate[1]);\n                Vec3.transformMat4(rect[3], rect[3], translate[0]);\n                Vec3.transformMat4(rect[3], rect[3], matrix);\n                Vec3.transformMat4(rect[3], rect[3], translate[1]);\n            }\n            rect[0][0] = position.left + rect[0][0];\n            rect[0][1] = position.top + rect[0][1];\n            rect[1][0] = position.left + rect[1][0];\n            rect[1][1] = position.top + rect[1][1];\n            rect[2][0] = position.left + rect[2][0];\n            rect[2][1] = position.top + rect[2][1];\n            rect[3][0] = position.left + rect[3][0];\n            rect[3][1] = position.top + rect[3][1];\n        }\n        else {\n            rect[0][0] = position.left;\n            rect[0][1] = position.top;\n            rect[1][0] = position.left + width;\n            rect[1][1] = position.top;\n            rect[2][0] = position.left + width;\n            rect[2][1] = position.top + height;\n            rect[3][0] = position.left;\n            rect[3][1] = position.top + height;\n            Mat4.identity(output.mat4);\n        }\n        let maxX = Number.MIN_SAFE_INTEGER;\n        let maxY = Number.MIN_SAFE_INTEGER;\n        let minX = Number.MAX_SAFE_INTEGER;\n        let minY = Number.MAX_SAFE_INTEGER;\n        for (let cntr = 4; --cntr >= 0;) {\n            if (rect[cntr][0] > maxX) {\n                maxX = rect[cntr][0];\n            }\n            if (rect[cntr][0] < minX) {\n                minX = rect[cntr][0];\n            }\n            if (rect[cntr][1] > maxY) {\n                maxY = rect[cntr][1];\n            }\n            if (rect[cntr][1] < minY) {\n                minY = rect[cntr][1];\n            }\n        }\n        const boundingRect = output.boundingRect;\n        boundingRect.x = minX;\n        boundingRect.y = minY;\n        boundingRect.width = maxX - minX;\n        boundingRect.height = maxY - minY;\n        position.top -= valOffsetTop;\n        position.left -= valOffsetLeft;\n        return output;\n    }\n    /**\n     * Creates a transform matrix based on local data applied in order it was added.\n     *\n     * If no data object is provided then the source is the local transform data. If another data object is supplied\n     * then the stored local transform order is applied then all remaining transform keys are applied. This allows the\n     * construction of a transform matrix in advance of setting local data and is useful in collision detection.\n     *\n     * @param [data] - TJSPositionData instance or local transform data.\n     *\n     * @param [output] - The output mat4 instance.\n     *\n     * @returns Transform matrix.\n     */\n    getMat4(data = this.#data, output = new Mat4()) {\n        const matrix = Mat4.identity(output);\n        // Bitwise tracks applied transform keys from local transform data.\n        let seenKeys = 0;\n        const orderList = this.#orderList;\n        // First apply ordered transforms from local transform data.\n        for (let cntr = 0; cntr < orderList.length; cntr++) {\n            const key = orderList[cntr];\n            switch (key) {\n                case 'rotateX':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.rotateX;\n                    Mat4.multiply(matrix, matrix, Mat4.fromXRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                    break;\n                case 'rotateY':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.rotateY;\n                    Mat4.multiply(matrix, matrix, Mat4.fromYRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                    break;\n                case 'rotateZ':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.rotateZ;\n                    Mat4.multiply(matrix, matrix, Mat4.fromZRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                    break;\n                case 'scale':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.scale;\n                    TJSTransforms.#vectorScale[0] = TJSTransforms.#vectorScale[1] = data[key] ?? 0;\n                    Mat4.multiply(matrix, matrix, Mat4.fromScaling(TJSTransforms.#mat4Temp, TJSTransforms.#vectorScale));\n                    break;\n                case 'translateX':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.translateX;\n                    TJSTransforms.#vectorTranslate[0] = data.translateX ?? 0;\n                    TJSTransforms.#vectorTranslate[1] = 0;\n                    TJSTransforms.#vectorTranslate[2] = 0;\n                    Mat4.multiply(matrix, matrix, Mat4.fromTranslation(TJSTransforms.#mat4Temp, TJSTransforms.#vectorTranslate));\n                    break;\n                case 'translateY':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.translateY;\n                    TJSTransforms.#vectorTranslate[0] = 0;\n                    TJSTransforms.#vectorTranslate[1] = data.translateY ?? 0;\n                    TJSTransforms.#vectorTranslate[2] = 0;\n                    Mat4.multiply(matrix, matrix, Mat4.fromTranslation(TJSTransforms.#mat4Temp, TJSTransforms.#vectorTranslate));\n                    break;\n                case 'translateZ':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.translateZ;\n                    TJSTransforms.#vectorTranslate[0] = 0;\n                    TJSTransforms.#vectorTranslate[1] = 0;\n                    TJSTransforms.#vectorTranslate[2] = data.translateZ ?? 0;\n                    Mat4.multiply(matrix, matrix, Mat4.fromTranslation(TJSTransforms.#mat4Temp, TJSTransforms.#vectorTranslate));\n                    break;\n            }\n        }\n        // Now apply any new keys not set in local transform data that have not been applied yet.\n        if (data !== this.#data) {\n            for (let cntr = 0; cntr < TJSTransforms.#transformKeys.length; cntr++) {\n                const key = TJSTransforms.#transformKeys[cntr];\n                // Reject bad / no data or if the key has already been applied.\n                if (data[key] === null || (seenKeys & TJSTransforms.#transformKeysBitwise[key]) > 0) {\n                    continue;\n                }\n                const value = data[key];\n                switch (key) {\n                    case 'rotateX':\n                        Mat4.multiply(matrix, matrix, Mat4.fromXRotation(TJSTransforms.#mat4Temp, degToRad(value)));\n                        break;\n                    case 'rotateY':\n                        Mat4.multiply(matrix, matrix, Mat4.fromYRotation(TJSTransforms.#mat4Temp, degToRad(value)));\n                        break;\n                    case 'rotateZ':\n                        Mat4.multiply(matrix, matrix, Mat4.fromZRotation(TJSTransforms.#mat4Temp, degToRad(value)));\n                        break;\n                    case 'scale':\n                        TJSTransforms.#vectorScale[0] = TJSTransforms.#vectorScale[1] = value;\n                        Mat4.multiply(matrix, matrix, Mat4.fromScaling(TJSTransforms.#mat4Temp, TJSTransforms.#vectorScale));\n                        break;\n                    case 'translateX':\n                        TJSTransforms.#vectorTranslate[0] = value;\n                        TJSTransforms.#vectorTranslate[1] = 0;\n                        TJSTransforms.#vectorTranslate[2] = 0;\n                        Mat4.multiply(matrix, matrix, Mat4.fromTranslation(TJSTransforms.#mat4Temp, TJSTransforms.#vectorTranslate));\n                        break;\n                    case 'translateY':\n                        TJSTransforms.#vectorTranslate[0] = 0;\n                        TJSTransforms.#vectorTranslate[1] = value;\n                        TJSTransforms.#vectorTranslate[2] = 0;\n                        Mat4.multiply(matrix, matrix, Mat4.fromTranslation(TJSTransforms.#mat4Temp, TJSTransforms.#vectorTranslate));\n                        break;\n                    case 'translateZ':\n                        TJSTransforms.#vectorTranslate[0] = 0;\n                        TJSTransforms.#vectorTranslate[1] = 0;\n                        TJSTransforms.#vectorTranslate[2] = value;\n                        Mat4.multiply(matrix, matrix, Mat4.fromTranslation(TJSTransforms.#mat4Temp, TJSTransforms.#vectorTranslate));\n                        break;\n                }\n            }\n        }\n        return matrix;\n    }\n    /**\n     * Provides an orthographic enhancement to convert left / top positional data to a translate operation.\n     *\n     * This transform matrix takes into account that the remaining operations are , but adds any left / top attributes\n     * from passed in data to translate X / Y.\n     *\n     * If no data object is provided then the source is the local transform data. If another data object is supplied\n     * then the stored local transform order is applied then all remaining transform keys are applied. This allows the\n     * construction of a transform matrix in advance of setting local data and is useful in collision detection.\n     *\n     * @param [data] - TJSPositionData instance or local transform data.\n     *\n     * @param [output] - The output mat4 instance.\n     *\n     * @returns Transform matrix.\n     */\n    getMat4Ortho(data = this.#data, output = new Mat4()) {\n        const matrix = Mat4.identity(output);\n        // Attempt to retrieve values from passed in data otherwise default to 0.\n        // Always perform the translation last regardless of order added to local transform data.\n        // Add data.left to translateX and data.top to translateY.\n        TJSTransforms.#vectorTranslate[0] = (data.left ?? 0) + (data.translateX ?? 0);\n        TJSTransforms.#vectorTranslate[1] = (data.top ?? 0) + (data.translateY ?? 0);\n        TJSTransforms.#vectorTranslate[2] = data.translateZ ?? 0;\n        Mat4.multiply(matrix, matrix, Mat4.fromTranslation(TJSTransforms.#mat4Temp, TJSTransforms.#vectorTranslate));\n        // Scale can also be applied out of order.\n        if (data.scale !== null && data.scale !== void 0) {\n            TJSTransforms.#vectorScale[0] = TJSTransforms.#vectorScale[1] = data.scale;\n            Mat4.multiply(matrix, matrix, Mat4.fromScaling(TJSTransforms.#mat4Temp, TJSTransforms.#vectorScale));\n        }\n        // Early out if there is no rotation data.\n        if (data.rotateX === null && data.rotateY === null && data.rotateZ === null) {\n            return matrix;\n        }\n        // Rotation transforms must be applied in the order they are added.\n        // Bitwise tracks applied transform keys from local transform data.\n        let seenKeys = 0;\n        const orderList = this.#orderList;\n        // First apply ordered transforms from local transform data.\n        for (let cntr = 0; cntr < orderList.length; cntr++) {\n            const key = orderList[cntr];\n            switch (key) {\n                case 'rotateX':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.rotateX;\n                    Mat4.multiply(matrix, matrix, Mat4.fromXRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                    break;\n                case 'rotateY':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.rotateY;\n                    Mat4.multiply(matrix, matrix, Mat4.fromYRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                    break;\n                case 'rotateZ':\n                    seenKeys |= TJSTransforms.#transformKeysBitwise.rotateZ;\n                    Mat4.multiply(matrix, matrix, Mat4.fromZRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                    break;\n            }\n        }\n        // Now apply any new keys not set in local transform data that have not been applied yet.\n        if (data !== this.#data) {\n            for (let cntr = 0; cntr < TJSTransforms.#transformKeys.length; cntr++) {\n                const key = TJSTransforms.#transformKeys[cntr];\n                // Reject bad / no data or if the key has already been applied.\n                if (data[key] === null || (seenKeys & TJSTransforms.#transformKeysBitwise[key]) > 0) {\n                    continue;\n                }\n                switch (key) {\n                    case 'rotateX':\n                        Mat4.multiply(matrix, matrix, Mat4.fromXRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                        break;\n                    case 'rotateY':\n                        Mat4.multiply(matrix, matrix, Mat4.fromYRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                        break;\n                    case 'rotateZ':\n                        Mat4.multiply(matrix, matrix, Mat4.fromZRotation(TJSTransforms.#mat4Temp, degToRad(data[key] ?? 0)));\n                        break;\n                }\n            }\n        }\n        return matrix;\n    }\n    /**\n     * Tests an object if it contains transform keys and the values are finite numbers.\n     *\n     * @param data - An object to test for transform data.\n     *\n     * @returns Whether the given TJSPositionData has transforms.\n     */\n    hasTransform(data) {\n        for (let cntr = 0; cntr < TJSTransforms.#transformKeys.length; cntr++) {\n            if (Number.isFinite(data[TJSTransforms.#transformKeys[cntr]])) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Resets internal data from the given object containing valid transform keys.\n     *\n     * @param data - An object with transform data.\n     */\n    reset(data) {\n        for (const key in data) {\n            if (TJSTransforms.#isTransformKey(key)) {\n                const value = data[key];\n                if (NumberGuard.isFinite(value)) {\n                    this.#data[key] = value;\n                }\n                else {\n                    const index = this.#orderList.findIndex((entry) => entry === key);\n                    if (index >= 0) {\n                        this.#orderList.splice(index, 1);\n                    }\n                    delete this.#data[key];\n                }\n            }\n        }\n    }\n    // Internal implementation ----------------------------------------------------------------------------------------\n    /**\n     * Returns the translations necessary to translate a matrix operation based on the `transformOrigin` parameter of the\n     * given position instance. The first entry / index 0 is the pre-translation and last entry / index 1 is the post-\n     * translation.\n     *\n     * This method is used internally, but may be useful if you need the origin translation matrices to transform\n     * bespoke points based on any `transformOrigin` set in {@link TJSPositionData}.\n     *\n     * @param transformOrigin - The transform origin attribute from TJSPositionData.\n     *\n     * @param width - The TJSPositionData width or validation data width when 'auto'.\n     *\n     * @param height - The TJSPositionData height or validation data height when 'auto'.\n     *\n     * @param output - Output Mat4 array.\n     *\n     * @returns Output Mat4 array.\n     */\n    static #getOriginTranslation(transformOrigin, width, height, output) {\n        const vector = TJSTransforms.#vec3Temp;\n        switch (transformOrigin) {\n            case 'top left':\n                vector[0] = vector[1] = 0;\n                Mat4.fromTranslation(output[0], vector);\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            case 'top center':\n                vector[0] = -width * 0.5;\n                vector[1] = 0;\n                Mat4.fromTranslation(output[0], vector);\n                vector[0] = width * 0.5;\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            case 'top right':\n                vector[0] = -width;\n                vector[1] = 0;\n                Mat4.fromTranslation(output[0], vector);\n                vector[0] = width;\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            case 'center left':\n                vector[0] = 0;\n                vector[1] = -height * 0.5;\n                Mat4.fromTranslation(output[0], vector);\n                vector[1] = height * 0.5;\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            // By default, null / no transform is 'center'.\n            case null:\n            case 'center':\n                vector[0] = -width * 0.5;\n                vector[1] = -height * 0.5;\n                Mat4.fromTranslation(output[0], vector);\n                vector[0] = width * 0.5;\n                vector[1] = height * 0.5;\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            case 'center right':\n                vector[0] = -width;\n                vector[1] = -height * 0.5;\n                Mat4.fromTranslation(output[0], vector);\n                vector[0] = width;\n                vector[1] = height * 0.5;\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            case 'bottom left':\n                vector[0] = 0;\n                vector[1] = -height;\n                Mat4.fromTranslation(output[0], vector);\n                vector[1] = height;\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            case 'bottom center':\n                vector[0] = -width * 0.5;\n                vector[1] = -height;\n                Mat4.fromTranslation(output[0], vector);\n                vector[0] = width * 0.5;\n                vector[1] = height;\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            case 'bottom right':\n                vector[0] = -width;\n                vector[1] = -height;\n                Mat4.fromTranslation(output[0], vector);\n                vector[0] = width;\n                vector[1] = height;\n                Mat4.fromTranslation(output[1], vector);\n                break;\n            // No valid transform origin parameter; set identity.\n            default:\n                Mat4.identity(output[0]);\n                Mat4.identity(output[1]);\n                break;\n        }\n        return output;\n    }\n}\n\nclass AnimationScheduler {\n    /**\n     * Used to copy data from a TJSPosition instance.\n     */\n    static #data = {};\n    static #getEaseOptions = Object.freeze({ default: false });\n    /**\n     * Adds / schedules an animation w/ the AnimationManager. This contains the final steps common to all tweens.\n     *\n     * @param position -\n     *\n     * @param initial -\n     *\n     * @param destination -\n     *\n     * @param duration -\n     *\n     * @param el -\n     *\n     * @param cancelable -\n     *\n     * @param delay -\n     *\n     * @param ease -\n     *\n     * @param [interpolate=lerp] -\n     *\n     * @param [transformOrigin] -\n     *\n     * @param [transformOriginInitial] -\n     *\n     * @param [cleanup] -\n     *\n     * @returns An AnimationControl instance or null if none created.\n     */\n    static #addAnimation(position, initial, destination, duration, el, cancelable, delay, ease, interpolate = lerp, transformOrigin, transformOriginInitial, cleanup) {\n        // Set initial data for transform values that are often null by default.\n        TJSPositionDataUtil.setNumericDefaults(initial);\n        TJSPositionDataUtil.setNumericDefaults(destination);\n        // Reject all initial data that is not a number.\n        for (const key in initial) {\n            if (!Number.isFinite(initial[key])) {\n                delete initial[key];\n            }\n        }\n        const keys = Object.keys(initial);\n        const newData = Object.assign({}, initial);\n        // Nothing to animate, so return now.\n        // TODO handle in respective animation controls.\n        if (keys.length === 0) {\n            return null;\n        }\n        /**\n         */\n        const animationData = {\n            active: true,\n            cleanup,\n            cancelable,\n            cancelled: false,\n            control: void 0,\n            current: 0,\n            destination,\n            duration: duration * 1000, // Internally the AnimationManager works in ms.\n            ease,\n            el,\n            finished: false,\n            initial,\n            interpolate,\n            keys,\n            newData,\n            position,\n            resolve: void 0,\n            start: void 0,\n            transformOrigin,\n            transformOriginInitial,\n            quickTo: false\n        };\n        if (delay > 0) {\n            animationData.active = false;\n            // Delay w/ setTimeout and make active w/ AnimationManager.\n            setTimeout(() => animationData.active = true, delay * 1000);\n        }\n        // Schedule immediately w/ AnimationManager\n        AnimationManager.add(animationData);\n        // Create animation control\n        return new AnimationControl(animationData, true);\n    }\n    /**\n     * Provides a tween from given position data to the current position.\n     *\n     * @param position - The target position instance.\n     *\n     * @param fromData - The starting position.\n     *\n     * @param options - Tween options.\n     *\n     * @param [cleanup] - Custom animation cleanup function.\n     *\n     * @returns An AnimationControl instance or null if none created.\n     */\n    static from(position, fromData, options = {}, cleanup) {\n        if (!isObject(fromData)) {\n            throw new TypeError(`AnimationAPI.from error: 'fromData' is not an object.`);\n        }\n        // TJSPositionNS.PositionParent\n        const parent = position.parent;\n        // Early out if the application is not positionable.  TODO: THIS IS REFERENCING APPLICATION OPTIONS.\n        if (parent !== void 0 && typeof parent?.options?.positionable === 'boolean' && !parent?.options?.positionable) {\n            return null;\n        }\n        let { cancelable = true, delay = 0, duration = 1, ease = 'cubicOut', strategy, transformOrigin } = options;\n        // Handle any defined scheduling strategy.\n        if (strategy !== void 0) {\n            if (this.#handleStrategy(position, strategy) === null) {\n                return null;\n            }\n        }\n        // Cache any target element allowing AnimationManager to stop animation if it becomes disconnected from DOM.\n        const targetEl = A11yHelper.isFocusTarget(parent) ? parent : parent?.elementTarget;\n        const el = A11yHelper.isFocusTarget(targetEl) && targetEl.isConnected ? targetEl :\n            void 0;\n        if (!Number.isFinite(delay) || delay < 0) {\n            throw new TypeError(`AnimationScheduler.from error: 'delay' is not a positive number.`);\n        }\n        if (!Number.isFinite(duration) || duration < 0) {\n            throw new TypeError(`AnimationScheduler.from error: 'duration' is not a positive number.`);\n        }\n        ease = getEasingFunc(ease, this.#getEaseOptions);\n        if (typeof ease !== 'function') {\n            throw new TypeError(`AnimationScheduler.from error: 'ease' is not a function or valid Svelte easing function name.`);\n        }\n        // TODO: In the future potentially support more interpolation functions besides `lerp`.\n        const initial = {};\n        const destination = {};\n        position.get(this.#data);\n        // Determine if any transform origin for the animation is valid.\n        transformOrigin = TJSTransforms.isTransformOrigin(transformOrigin) ? transformOrigin : void 0;\n        // Given a valid transform origin store the initial transform origin to be restored.\n        const transformOriginInitial = transformOrigin !== void 0 ?\n            this.#data.transformOrigin : void 0;\n        // Set initial data if the key / data is defined and the end position is not equal to current data.\n        for (const key in fromData) {\n            // Must use actual key from any aliases.\n            const animKey = TJSPositionDataUtil.getAnimationKey(key);\n            if (this.#data[animKey] !== void 0 && fromData[key] !== this.#data[animKey]) {\n                initial[key] = fromData[key];\n                destination[key] = this.#data[animKey];\n            }\n        }\n        ConvertStringData.process(initial, this.#data, el);\n        return this.#addAnimation(position, initial, destination, duration, el, cancelable, delay, ease, lerp, transformOrigin, transformOriginInitial, cleanup);\n    }\n    /**\n     * Provides a tween from given position data to the given position.\n     *\n     * @param position - The target position instance.\n     *\n     * @param fromData - The starting position.\n     *\n     * @param toData - The ending position.\n     *\n     * @param options - Tween options.\n     *\n     * @param [cleanup] - Custom animation cleanup function.\n     *\n     * @returns An AnimationControl instance or null if none created.\n     */\n    static fromTo(position, fromData, toData, options = {}, cleanup) {\n        if (!isObject(fromData)) {\n            throw new TypeError(`AnimationScheduler.fromTo error: 'fromData' is not an object.`);\n        }\n        if (!isObject(toData)) {\n            throw new TypeError(`AnimationScheduler.fromTo error: 'toData' is not an object.`);\n        }\n        // TJSPositionNS.PositionParent\n        const parent = position.parent;\n        // Early out if the application is not positionable.  TODO: THIS IS REFERENCING APPLICATION OPTIONS.\n        if (parent !== void 0 && typeof parent?.options?.positionable === 'boolean' && !parent?.options?.positionable) {\n            return null;\n        }\n        let { cancelable = true, delay = 0, duration = 1, ease = 'cubicOut', strategy, transformOrigin } = options;\n        // Handle any defined scheduling strategy.\n        if (strategy !== void 0) {\n            if (this.#handleStrategy(position, strategy) === null) {\n                return null;\n            }\n        }\n        // Cache any target element allowing AnimationManager to stop animation if it becomes disconnected from DOM.\n        const targetEl = A11yHelper.isFocusTarget(parent) ? parent : parent?.elementTarget;\n        const el = A11yHelper.isFocusTarget(targetEl) && targetEl.isConnected ? targetEl :\n            void 0;\n        if (!Number.isFinite(delay) || delay < 0) {\n            throw new TypeError(`AnimationScheduler.fromTo error: 'delay' is not a positive number.`);\n        }\n        if (!Number.isFinite(duration) || duration < 0) {\n            throw new TypeError(`AnimationScheduler.fromTo error: 'duration' is not a positive number.`);\n        }\n        ease = getEasingFunc(ease, this.#getEaseOptions);\n        if (typeof ease !== 'function') {\n            throw new TypeError(`AnimationScheduler.fromTo error: 'ease' is not a function or valid Svelte easing function name.`);\n        }\n        // TODO: In the future potentially support more interpolation functions besides `lerp`.\n        const initial = {};\n        const destination = {};\n        position.get(this.#data);\n        // Determine if any transform origin for the animation is valid.\n        transformOrigin = TJSTransforms.isTransformOrigin(transformOrigin) ? transformOrigin : void 0;\n        // Given a valid transform origin store the initial transform origin to be restored.\n        const transformOriginInitial = transformOrigin !== void 0 ?\n            this.#data.transformOrigin : void 0;\n        // Set initial data if the key / data is defined and the end position is not equal to current data.\n        for (const key in fromData) {\n            if (toData[key] === void 0) {\n                console.warn(`AnimationScheduler.fromTo warning: skipping key ('${key}') from 'fromData' as it is missing in 'toData'.`);\n                continue;\n            }\n            // Must use actual key from any aliases.\n            const animKey = TJSPositionDataUtil.getAnimationKey(key);\n            if (this.#data[animKey] !== void 0) {\n                initial[key] = fromData[key];\n                destination[key] = toData[key];\n            }\n        }\n        ConvertStringData.process(initial, this.#data, el);\n        ConvertStringData.process(destination, this.#data, el);\n        return this.#addAnimation(position, initial, destination, duration, el, cancelable, delay, ease, lerp, transformOrigin, transformOriginInitial, cleanup);\n    }\n    /**\n     * Provides a tween to given position data from the current position.\n     *\n     * @param position - The target position instance.\n     *\n     * @param toData - The destination position.\n     *\n     * @param options - Tween options.\n     *\n     * @param [cleanup] - Custom animation cleanup function.\n     *\n     * @returns An AnimationControl instance or null if none created.\n     */\n    static to(position, toData, options, cleanup) {\n        if (!isObject(toData)) {\n            throw new TypeError(`AnimationScheduler.to error: 'toData' is not an object.`);\n        }\n        // TJSPositionNS.PositionParent\n        const parent = position.parent;\n        // Early out if the application is not positionable.  TODO: THIS IS REFERENCING APPLICATION OPTIONS.\n        if (parent !== void 0 && typeof parent?.options?.positionable === 'boolean' && !parent?.options?.positionable) {\n            return null;\n        }\n        let { cancelable = true, delay = 0, duration = 1, ease = 'cubicOut', strategy, transformOrigin } = options;\n        // Handle any defined scheduling strategy.\n        if (strategy !== void 0) {\n            if (this.#handleStrategy(position, strategy) === null) {\n                return null;\n            }\n        }\n        // Cache any target element allowing AnimationManager to stop animation if it becomes disconnected from DOM.\n        const targetEl = A11yHelper.isFocusTarget(parent) ? parent : parent?.elementTarget;\n        const el = A11yHelper.isFocusTarget(targetEl) && targetEl.isConnected ? targetEl : void 0;\n        if (!Number.isFinite(delay) || delay < 0) {\n            throw new TypeError(`AnimationScheduler.to error: 'delay' is not a positive number.`);\n        }\n        if (!Number.isFinite(duration) || duration < 0) {\n            throw new TypeError(`AnimationScheduler.to error: 'duration' is not a positive number.`);\n        }\n        ease = getEasingFunc(ease, this.#getEaseOptions);\n        if (typeof ease !== 'function') {\n            throw new TypeError(`AnimationScheduler.to error: 'ease' is not a function or valid Svelte easing function name.`);\n        }\n        // TODO: In the future potentially support more interpolation functions besides `lerp`.\n        const initial = {};\n        const destination = {};\n        position.get(this.#data);\n        // Determine if any transform origin for the animation is valid.\n        transformOrigin = TJSTransforms.isTransformOrigin(transformOrigin) ? transformOrigin : void 0;\n        // Given a valid transform origin store the initial transform origin to be restored.\n        const transformOriginInitial = transformOrigin !== void 0 ?\n            this.#data.transformOrigin : void 0;\n        // Set initial data if the key / data is defined and the end position is not equal to current data.\n        for (const key in toData) {\n            // Must use actual key from any aliases.\n            const animKey = TJSPositionDataUtil.getAnimationKey(key);\n            if (this.#data[animKey] !== void 0 && toData[key] !== this.#data[animKey]) {\n                destination[key] = toData[key];\n                initial[key] = this.#data[animKey];\n            }\n        }\n        ConvertStringData.process(destination, this.#data, el);\n        return this.#addAnimation(position, initial, destination, duration, el, cancelable, delay, ease, lerp, transformOrigin, transformOriginInitial, cleanup);\n    }\n    // Internal implementation ----------------------------------------------------------------------------------------\n    /**\n     * Handle any defined scheduling strategy allowing existing scheduled animations for the same position instance\n     * to be controlled.\n     *\n     * @param position - The target position instance.\n     *\n     * @param strategy - A scheduling strategy to apply.\n     *\n     * @returns Returns null to abort scheduling current animation.\n     */\n    static #handleStrategy(position, strategy) {\n        switch (strategy) {\n            case 'cancel':\n                if (AnimationManager.isScheduled(position)) {\n                    AnimationManager.cancel(position);\n                }\n                break;\n            case 'cancelAll':\n                if (AnimationManager.isScheduled(position)) {\n                    AnimationManager.cancel(position, AnimationManager.cancelAllFn);\n                }\n                break;\n            case 'exclusive':\n                if (AnimationManager.isScheduled(position)) {\n                    return null;\n                }\n                break;\n            default:\n                console.warn(`AnimationScheduler error: 'strategy' is not 'cancel', 'cancelAll', or 'exclusive'.`);\n                return null;\n        }\n    }\n}\n\n/**\n */\nclass AnimationAPIImpl {\n    static #getEaseOptions = Object.freeze({ default: false });\n    /**\n     */\n    #data;\n    #position;\n    /**\n     * @param position -\n     *\n     * @param data -\n     */\n    constructor(position, data) {\n        this.#position = position;\n        this.#data = data;\n        Object.seal(this);\n    }\n    /**\n     * Returns if there are scheduled animations whether active or pending for this TJSPosition instance.\n     *\n     * @returns Are there scheduled animations.\n     */\n    get isScheduled() {\n        return AnimationManager.isScheduled(this.#position);\n    }\n    /**\n     * Cancels all animation instances for this TJSPosition instance.\n     */\n    cancel() {\n        AnimationManager.cancel(this.#position, AnimationManager.cancelAllFn);\n    }\n    /**\n     * Returns all currently scheduled AnimationControl instances for this TJSPosition instance.\n     *\n     * @returns All currently scheduled animation controls for this TJSPosition instance.\n     */\n    getScheduled() {\n        return AnimationManager.getScheduled(this.#position);\n    }\n    /**\n     * Provides a tween from given position data to the current position.\n     *\n     * @param fromData - The starting position.\n     *\n     * @param [options] - Optional tween parameters.\n     *\n     * @returns A control object that can cancel animation and provides a `finished` Promise.\n     */\n    from(fromData, options) {\n        const animationControl = AnimationScheduler.from(this.#position, fromData, options);\n        return animationControl ? animationControl : AnimationControl.voidControl;\n    }\n    /**\n     * Provides a tween from given position data to the given position.\n     *\n     * @param fromData - The starting position.\n     *\n     * @param toData - The ending position.\n     *\n     * @param [options] - Optional tween parameters.\n     *\n     * @returns A control object that can cancel animation and provides a `finished` Promise.\n     */\n    fromTo(fromData, toData, options) {\n        const animationControl = AnimationScheduler.fromTo(this.#position, fromData, toData, options);\n        return animationControl ? animationControl : AnimationControl.voidControl;\n    }\n    /**\n     * Provides a tween to given position data from the current position.\n     *\n     * @param toData - The destination position.\n     *\n     * @param [options] - Optional tween parameters.\n     *\n     * @returns A control object that can cancel animation and provides a `finished` Promise.\n     */\n    to(toData, options) {\n        const animationControl = AnimationScheduler.to(this.#position, toData, options);\n        return animationControl ? animationControl : AnimationControl.voidControl;\n    }\n    /**\n     * Returns a function that provides an optimized way to constantly update a to-tween.\n     *\n     * @param keys - The keys for quickTo.\n     *\n     * @param [options] - Optional quick tween parameters.\n     *\n     * @returns quick-to tween function.\n     */\n    quickTo(keys, options = {}) {\n        if (!isIterable(keys)) {\n            throw new TypeError(`AnimationAPI.quickTo error: 'keys' is not an iterable list.`);\n        }\n        // TJSPosition.PositionParent\n        const parent = this.#position.parent;\n        // Early out if the application is not positionable.\n        if (parent !== void 0 && typeof parent?.options?.positionable === 'boolean' && !parent?.options?.positionable) {\n            throw new Error(`AnimationAPI.quickTo error: 'parent' is not positionable.`);\n        }\n        let { duration = 1, ease = 'cubicOut' } = options;\n        if (!Number.isFinite(duration) || duration < 0) {\n            throw new TypeError(`AnimationAPI.quickTo error: 'duration' is not a positive number.`);\n        }\n        ease = getEasingFunc(ease, AnimationAPIImpl.#getEaseOptions);\n        if (typeof ease !== 'function') {\n            throw new TypeError(`AnimationAPI.quickTo error: 'ease' is not a function or valid Svelte easing function name.`);\n        }\n        // TODO: In the future potentially support more interpolation functions besides `lerp`.\n        const initial = {};\n        const destination = {};\n        const data = this.#data;\n        // Set initial data if the key / data is defined and the end position is not equal to current data.\n        for (const key of keys) {\n            if (typeof key !== 'string') {\n                throw new TypeError(`AnimationAPI.quickTo error: key ('${key}') is not a string.`);\n            }\n            if (!TJSPositionDataUtil.isAnimationKey(key)) {\n                throw new Error(`AnimationAPI.quickTo error: key ('${key}') is not animatable.`);\n            }\n            // Must use actual key from any aliases.\n            const value = TJSPositionDataUtil.getDataOrDefault(data, key);\n            if (value !== null) {\n                destination[key] = value;\n                initial[key] = value;\n            }\n        }\n        const keysArray = [...keys];\n        Object.freeze(keysArray);\n        const newData = Object.assign({}, initial);\n        const animationData = {\n            active: true,\n            cancelable: true,\n            cancelled: false,\n            control: void 0,\n            current: 0,\n            destination,\n            duration: duration * 1000, // Internally the AnimationManager works in ms.\n            ease,\n            el: void 0,\n            finished: true, // Note: start in finished state to add to AnimationManager on first callback.\n            initial,\n            interpolate: lerp,\n            keys: keysArray,\n            newData,\n            position: this.#position,\n            resolve: void 0,\n            start: 0,\n            quickTo: true\n        };\n        const quickToCB = (...args) => {\n            const argsLength = args.length;\n            if (argsLength === 0) {\n                return;\n            }\n            for (let cntr = keysArray.length; --cntr >= 0;) {\n                const key = keysArray[cntr];\n                // Must use actual key from any aliases.\n                const animKey = TJSPositionDataUtil.getAnimationKey(key);\n                if (data[animKey] !== void 0) {\n                    initial[key] = data[animKey];\n                }\n            }\n            // Handle case where the first arg is an object. Update all quickTo keys from data contained in the object.\n            if (isObject(args[0])) {\n                const objData = args[0];\n                for (const key in objData) {\n                    if (destination[key] !== void 0) {\n                        destination[key] = objData[key];\n                    }\n                }\n            }\n            else // Assign each variable argument to the key specified in the initial `keys` array above.\n             {\n                for (let cntr = 0; cntr < argsLength && cntr < keysArray.length; cntr++) {\n                    const key = keysArray[cntr];\n                    if (destination[key] !== void 0) {\n                        destination[key] = args[cntr];\n                    }\n                }\n            }\n            // Set initial data for transform values that are often null by default.\n            TJSPositionDataUtil.setNumericDefaults(initial);\n            TJSPositionDataUtil.setNumericDefaults(destination);\n            // Set target element to animation data to track if it is removed from the DOM hence ending the animation.\n            const targetEl = A11yHelper.isFocusTarget(parent) ? parent : parent?.elementTarget;\n            animationData.el = A11yHelper.isFocusTarget(targetEl) && targetEl.isConnected ? targetEl : void 0;\n            ConvertStringData.process(destination, data, animationData.el);\n            // Reschedule the quickTo animation with AnimationManager as it is finished.\n            if (animationData.finished) {\n                animationData.cancelled = false;\n                animationData.finished = false;\n                animationData.active = true;\n                animationData.current = 0;\n                AnimationManager.add(animationData);\n            }\n            else // QuickTo animation is currently scheduled w/ AnimationManager so reset start and current time.\n             {\n                const now = globalThis.performance.now();\n                animationData.cancelled = false;\n                animationData.current = 0;\n                // Offset start time by delta between last rAF time. This allows a delayed tween to start from the\n                // precise delayed time.\n                animationData.start = now + (AnimationManager.timeNow - now);\n            }\n        };\n        Object.defineProperty(quickToCB, 'keys', {\n            value: keysArray,\n            writable: false,\n            configurable: false\n        });\n        Object.defineProperty(quickToCB, 'options', {\n            value: (optionsCB) => {\n                let { duration, ease } = optionsCB;\n                if (duration !== void 0 && (!Number.isFinite(duration) || duration < 0)) {\n                    throw new TypeError(`AnimationAPI.quickTo.options error: 'duration' is not a positive number.`);\n                }\n                ease = getEasingFunc(ease, AnimationAPIImpl.#getEaseOptions);\n                if (ease !== void 0 && typeof ease !== 'function') {\n                    throw new TypeError(`AnimationAPI.quickTo.options error: 'ease' is not a function or valid Svelte easing function name.`);\n                }\n                // TODO: In the future potentially support more interpolation functions besides `lerp`.\n                if (NumberGuard.isFinite(duration) && duration >= 0) {\n                    animationData.duration = duration * 1000;\n                }\n                if (ease) {\n                    animationData.ease = ease;\n                }\n                return quickToCB;\n            },\n            writable: false,\n            configurable: false\n        });\n        return quickToCB;\n    }\n}\n\n/**\n * Provides a implementation for a TJSPosition animation for a group of TJSPosition instances.\n */\nclass AnimationGroupControl {\n    /**\n     */\n    #animationControls;\n    /**\n     */\n    #finishedPromise;\n    /**\n     * Defines a static empty / void animation control.\n     */\n    static #voidControl = new AnimationGroupControl(null);\n    /**\n     * Provides a static void / undefined AnimationGroupControl that is automatically resolved.\n     */\n    static get voidControl() { return this.#voidControl; }\n    /**\n     * @param animationControls - A Set of AnimationControl instances.\n     */\n    constructor(animationControls) {\n        this.#animationControls = animationControls;\n    }\n    /**\n     * Get a promise that resolves when all animations are finished.\n     *\n     * @returns Finished Promise for all animations.\n     */\n    get finished() {\n        const animationControls = this.#animationControls;\n        if (!CrossWindow.isPromise(this.#finishedPromise)) {\n            if (animationControls === null || animationControls === void 0 || animationControls.size === 0) {\n                this.#finishedPromise = Promise.resolve({ cancelled: false });\n            }\n            else {\n                const promises = [];\n                for (const animationControl of animationControls) {\n                    promises.push(animationControl.finished);\n                }\n                this.#finishedPromise = Promise.allSettled(promises).then((results) => {\n                    // Check if any promises were rejected or resolved with `cancelled: true`.\n                    const anyCancelled = results.some((result) => result.status === 'rejected' ||\n                        (result.status === 'fulfilled' && result.value.cancelled));\n                    // Return a single BasicAnimationState based on the aggregation of individual results.\n                    return { cancelled: anyCancelled };\n                });\n            }\n        }\n        return this.#finishedPromise;\n    }\n    /**\n     * Returns whether there are active animation instances for this group.\n     *\n     * Note: a delayed animation may not be started / active yet. Use {@link AnimationGroupControl.isFinished} to\n     * determine if all animations in the group are finished.\n     *\n     * @returns Are there active animation instances.\n     */\n    get isActive() {\n        const animationControls = this.#animationControls;\n        if (animationControls === null || animationControls === void 0 || animationControls.size === 0) {\n            return false;\n        }\n        for (const animationControl of animationControls) {\n            if (animationControl.isActive) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Returns whether all animations in the group are finished.\n     *\n     * @returns Are all animation instances finished.\n     */\n    get isFinished() {\n        const animationControls = this.#animationControls;\n        if (animationControls === null || animationControls === void 0 || animationControls.size === 0) {\n            return true;\n        }\n        for (const animationControl of animationControls) {\n            if (!animationControl.isFinished) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Cancels the all animations.\n     */\n    cancel() {\n        const animationControls = this.#animationControls;\n        if (animationControls === null || animationControls === void 0 || animationControls.size === 0) {\n            return;\n        }\n        for (const animationControl of animationControls) {\n            animationControl.cancel();\n        }\n    }\n}\n\n/**\n * Provides a public API for grouping multiple {@link TJSPosition} animations together with the\n * AnimationManager.\n *\n * Note: To remove cyclic dependencies as this class provides the TJSPosition static / group Animation API `instanceof`\n * checks are not done against TJSPosition. Instead, a check for the animate property being an instanceof\n * {@link AnimationAPI} is performed in {@link AnimationGroupAPI.#getPosition}.\n *\n * Note: This is a static class that conforms to the {@link AnimationGroupAPI} interface.\n *\n * @see AnimationAPI\n */\nclass AnimationGroupAPIImpl {\n    constructor() { }\n    /**\n     * Returns the TJSPosition instance for the possible given positionable by checking the instance by checking for\n     * AnimationAPI.\n     *\n     * @param positionable - Possible position group entry.\n     *\n     * @returns Returns actual TJSPosition instance.\n     */\n    static #getPosition(positionable) {\n        if (!isObject(positionable)) {\n            return null;\n        }\n        if (positionable.animate instanceof AnimationAPIImpl) {\n            return positionable;\n        }\n        if (positionable.position?.animate instanceof AnimationAPIImpl) {\n            return positionable.position;\n        }\n        return null;\n    }\n    /**\n     * Cancels any animation for given TJSPosition.PositionGroup data.\n     *\n     * @param positionGroup - The position group to cancel.\n     */\n    static cancel(positionGroup) {\n        if (isIterable(positionGroup)) {\n            let index = -1;\n            for (const entry of positionGroup) {\n                index++;\n                const actualPosition = this.#getPosition(entry);\n                if (!actualPosition) {\n                    console.warn(`AnimationGroupAPI.cancel warning: No TJSPosition instance found at index: ${index}.`);\n                    continue;\n                }\n                AnimationManager.cancel(actualPosition);\n            }\n        }\n        else {\n            const actualPosition = this.#getPosition(positionGroup);\n            if (!actualPosition) {\n                console.warn(`AnimationGroupAPI.cancel warning: No TJSPosition instance found.`);\n                return;\n            }\n            AnimationManager.cancel(actualPosition);\n        }\n    }\n    /**\n     * Cancels all TJSPosition animation.\n     */\n    static cancelAll() { AnimationManager.cancelAll(); }\n    /**\n     * Gets all animation controls for the given position group data.\n     *\n     * @param positionGroup - A position group.\n     *\n     * @returns Results array.\n     */\n    static getScheduled(positionGroup) {\n        const results = [];\n        if (isIterable(positionGroup)) {\n            let index = -1;\n            for (const entry of positionGroup) {\n                index++;\n                const actualPosition = this.#getPosition(entry);\n                if (!actualPosition) {\n                    console.warn(`AnimationGroupAPI.getScheduled warning: No TJSPosition instance found at index: ${index}.`);\n                    continue;\n                }\n                const controls = AnimationManager.getScheduled(actualPosition);\n                results.push({\n                    position: actualPosition,\n                    entry: actualPosition !== entry ? entry : void 0,\n                    controls\n                });\n            }\n        }\n        else {\n            const actualPosition = this.#getPosition(positionGroup);\n            if (!actualPosition) {\n                console.warn(`AnimationGroupAPI.getScheduled warning: No TJSPosition instance found.`);\n                return results;\n            }\n            const controls = AnimationManager.getScheduled(actualPosition);\n            results.push({\n                position: actualPosition,\n                entry: actualPosition !== positionGroup ? positionGroup : void 0,\n                controls\n            });\n        }\n        return results;\n    }\n    /**\n     * Provides a type guard to test in the given key is an {@link AnimationAPIImpl.AnimationKey}.\n     *\n     * @param key - A key value to test.\n     *\n     * @returns Whether the given key is an animation key.\n     */\n    static isAnimationKey(key) {\n        return TJSPositionDataUtil.isAnimationKey(key);\n    }\n    /**\n     * Returns the status _for the entire position group_ specified if all position instances of the group are scheduled.\n     *\n     * @param positionGroup - A position group.\n     *\n     * @param [options] - Options.\n     *\n     * @returns True if all are scheduled / false if just one position instance in the group is not scheduled.\n     */\n    static isScheduled(positionGroup, options) {\n        if (isIterable(positionGroup)) {\n            let index = -1;\n            for (const entry of positionGroup) {\n                index++;\n                const actualPosition = this.#getPosition(entry);\n                if (!actualPosition) {\n                    console.warn(`AnimationGroupAPI.isScheduled warning: No TJSPosition instance found at index: ${index}.`);\n                    continue;\n                }\n                if (!AnimationManager.isScheduled(actualPosition, options)) {\n                    return false;\n                }\n            }\n        }\n        else {\n            const actualPosition = this.#getPosition(positionGroup);\n            if (!actualPosition) {\n                console.warn(`AnimationGroupAPI.isScheduled warning: No TJSPosition instance found.`);\n                return false;\n            }\n            if (!AnimationManager.isScheduled(actualPosition, options)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Provides the `from` animation tween for one or more positionable instances as a group.\n     *\n     * @param positionGroup - A position group.\n     *\n     * @param fromData - A position data object assigned to all positionable instances or a callback function invoked for\n     *        unique data for each instance.\n     *\n     * @param [options] - Tween options assigned to all positionable instances or a callback function invoked for unique\n     *        options for each instance.\n     *\n     * @returns Basic animation control.\n     */\n    static from(positionGroup, fromData, options) {\n        if (!isObject(fromData) && typeof fromData !== 'function') {\n            throw new TypeError(`AnimationGroupAPI.from error: 'fromData' is not an object or function.`);\n        }\n        if (options !== void 0 && !isObject(options) && typeof options !== 'function') {\n            throw new TypeError(`AnimationGroupAPI.from error: 'options' is not an object or function.`);\n        }\n        /**\n         */\n        const animationControls = new Set();\n        /**\n         */\n        const cleanupFn = (data) => animationControls.delete(data.control);\n        let index = -1;\n        /**\n         */\n        let callbackOptions;\n        const hasDataCallback = typeof fromData === 'function';\n        const hasOptionCallback = typeof options === 'function';\n        const hasCallback = hasDataCallback || hasOptionCallback;\n        if (hasCallback) {\n            callbackOptions = { index, position: void 0, entry: void 0 };\n        }\n        let actualFromData = fromData;\n        let actualOptions = isObject(options) ? options : void 0;\n        if (isIterable(positionGroup)) {\n            for (const entry of positionGroup) {\n                index++;\n                const actualPosition = this.#getPosition(entry);\n                if (!actualPosition) {\n                    console.warn(`AnimationGroupAPI.from warning: No TJSPosition instance found at index: ${index}.`);\n                    continue;\n                }\n                if (hasCallback) {\n                    callbackOptions.index = index;\n                    callbackOptions.position = actualPosition;\n                    callbackOptions.entry = actualPosition !== entry ? entry : void 0;\n                }\n                if (hasDataCallback && typeof fromData === 'function') {\n                    actualFromData = fromData(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (actualFromData === null || actualFromData === void 0) {\n                        continue;\n                    }\n                    if (!isObject(actualFromData)) {\n                        throw new TypeError(`AnimationGroupAPI.from error: 'fromData' callback function iteration(${index}) failed to return an object.`);\n                    }\n                }\n                if (hasOptionCallback && typeof options === 'function') {\n                    actualOptions = options(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (actualOptions === null || actualOptions === void 0) {\n                        continue;\n                    }\n                    if (!isObject(actualOptions)) {\n                        throw new TypeError(`AnimationGroupAPI.from error: 'options' callback function iteration(${index}) failed to return an object.`);\n                    }\n                }\n                const animationControl = AnimationScheduler.from(actualPosition, actualFromData, actualOptions, cleanupFn);\n                if (animationControl) {\n                    animationControls.add(animationControl);\n                }\n            }\n        }\n        else {\n            const actualPosition = this.#getPosition(positionGroup);\n            if (!actualPosition) {\n                console.warn(`AnimationGroupAPI.from warning: No TJSPosition instance found.`);\n                return AnimationGroupControl.voidControl;\n            }\n            if (hasCallback) {\n                callbackOptions.index = 0;\n                callbackOptions.position = actualPosition;\n                callbackOptions.entry = actualPosition !== positionGroup ? positionGroup :\n                    void 0;\n            }\n            if (hasDataCallback && typeof fromData === 'function') {\n                actualFromData = fromData(callbackOptions);\n                // Returned data from callback is null / undefined, so skip this position instance.\n                if (actualFromData === null || actualFromData === void 0) {\n                    return AnimationGroupControl.voidControl;\n                }\n                if (!isObject(actualFromData)) {\n                    throw new TypeError(`AnimationGroupAPI.from error: 'fromData' callback function failed to return an object.`);\n                }\n            }\n            if (hasOptionCallback && typeof options === 'function') {\n                actualOptions = options(callbackOptions);\n                // Returned data from callback is null / undefined, so skip this position instance.\n                if (actualOptions === null || actualOptions === void 0) {\n                    return AnimationGroupControl.voidControl;\n                }\n                if (!isObject(actualOptions)) {\n                    throw new TypeError(`AnimationGroupAPI.from error: 'options' callback function failed to return an object.`);\n                }\n            }\n            const animationControl = AnimationScheduler.from(actualPosition, actualFromData, actualOptions, cleanupFn);\n            if (animationControl) {\n                animationControls.add(animationControl);\n            }\n        }\n        return new AnimationGroupControl(animationControls);\n    }\n    /**\n     * Provides the `fromTo` animation tween for one or more positionable instances as a group.\n     *\n     * @param positionGroup - A position group.\n     *\n     * @param fromData - A position data object assigned to all positionable instances or a callback function invoked for\n     *        unique data for each instance.\n     *\n     * @param toData - A position data object assigned to all positionable instances or a callback function invoked for\n     *        unique data for each instance.\n     *\n     * @param [options] - Tween options assigned to all positionable instances or a callback function invoked for unique\n     *        options for each instance.\n     *\n     * @returns Basic animation control.\n     */\n    static fromTo(positionGroup, fromData, toData, options) {\n        if (!isObject(fromData) && typeof fromData !== 'function') {\n            throw new TypeError(`AnimationGroupAPI.fromTo error: 'fromData' is not an object or function.`);\n        }\n        if (!isObject(toData) && typeof toData !== 'function') {\n            throw new TypeError(`AnimationGroupAPI.fromTo error: 'toData' is not an object or function.`);\n        }\n        if (options !== void 0 && !isObject(options) && typeof options !== 'function') {\n            throw new TypeError(`AnimationGroupAPI.fromTo error: 'options' is not an object or function.`);\n        }\n        const animationControls = new Set();\n        /**\n         */\n        const cleanupFn = (data) => animationControls.delete(data.control);\n        let index = -1;\n        /**\n         */\n        let callbackOptions;\n        const hasFromCallback = typeof fromData === 'function';\n        const hasToCallback = typeof toData === 'function';\n        const hasOptionCallback = typeof options === 'function';\n        const hasCallback = hasFromCallback || hasToCallback || hasOptionCallback;\n        if (hasCallback) {\n            callbackOptions = { index, position: void 0, entry: void 0 };\n        }\n        let actualFromData = fromData;\n        let actualToData = toData;\n        let actualOptions = isObject(options) ? options : void 0;\n        if (isIterable(positionGroup)) {\n            for (const entry of positionGroup) {\n                index++;\n                const actualPosition = this.#getPosition(entry);\n                if (!actualPosition) {\n                    console.warn(`AnimationGroupAPI.fromTo warning: No TJSPosition instance found at index: ${index}.`);\n                    continue;\n                }\n                if (hasCallback) {\n                    callbackOptions.index = index;\n                    callbackOptions.position = actualPosition;\n                    callbackOptions.entry = actualPosition !== entry ? entry : void 0;\n                }\n                if (hasFromCallback && typeof fromData === 'function') {\n                    actualFromData = fromData(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (actualFromData === null || actualFromData === void 0) {\n                        continue;\n                    }\n                    if (!isObject(actualFromData)) {\n                        throw new TypeError(`AnimationGroupAPI.fromTo error: 'fromData' callback function iteration(${index}) failed to return an object.`);\n                    }\n                }\n                if (hasToCallback && typeof toData === 'function') {\n                    actualToData = toData(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (actualToData === null || actualToData === void 0) {\n                        continue;\n                    }\n                    if (!isObject(actualToData)) {\n                        throw new TypeError(`AnimationGroupAPI.fromTo error: 'toData' callback function iteration(${index}) failed to return an object.`);\n                    }\n                }\n                if (hasOptionCallback && typeof options === 'function') {\n                    actualOptions = options(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (actualOptions === null || actualOptions === void 0) {\n                        continue;\n                    }\n                    if (!isObject(actualOptions)) {\n                        throw new TypeError(`AnimationGroupAPI.fromTo error: 'options' callback function iteration(${index}) failed to return an object.`);\n                    }\n                }\n                const animationControl = AnimationScheduler.fromTo(actualPosition, actualFromData, actualToData, actualOptions, cleanupFn);\n                if (animationControl) {\n                    animationControls.add(animationControl);\n                }\n            }\n        }\n        else {\n            const actualPosition = this.#getPosition(positionGroup);\n            if (!actualPosition) {\n                console.warn(`AnimationGroupAPI.fromTo warning: No TJSPosition instance found.`);\n                return AnimationGroupControl.voidControl;\n            }\n            if (hasCallback) {\n                callbackOptions.index = 0;\n                callbackOptions.position = actualPosition;\n                callbackOptions.entry = actualPosition !== positionGroup ? positionGroup :\n                    void 0;\n            }\n            if (hasFromCallback && typeof fromData === 'function') {\n                actualFromData = fromData(callbackOptions);\n                // Returned data from callback is null / undefined, so skip this position instance.\n                if (actualFromData === null || actualFromData === void 0) {\n                    return AnimationGroupControl.voidControl;\n                }\n                if (!isObject(actualFromData)) {\n                    throw new TypeError(`AnimationGroupAPI.fromTo error: 'fromData' callback function failed to return an object.`);\n                }\n            }\n            if (hasToCallback && typeof toData === 'function') {\n                actualToData = toData(callbackOptions);\n                // Returned data from callback is null / undefined, so skip this position instance.\n                if (actualToData === null || actualToData === void 0) {\n                    return AnimationGroupControl.voidControl;\n                }\n                if (!isObject(actualToData)) {\n                    throw new TypeError(`AnimationGroupAPI.fromTo error: 'toData' callback function failed to return an object.`);\n                }\n            }\n            if (hasOptionCallback && typeof options === 'function') {\n                actualOptions = options(callbackOptions);\n                // Returned data from callback is null / undefined, so skip this position instance.\n                if (actualOptions === null || actualOptions === void 0) {\n                    return AnimationGroupControl.voidControl;\n                }\n                if (!isObject(actualOptions)) {\n                    throw new TypeError(`AnimationGroupAPI.fromTo error: 'options' callback function failed to return an object.`);\n                }\n            }\n            const animationControl = AnimationScheduler.fromTo(actualPosition, actualFromData, actualToData, actualOptions, cleanupFn);\n            if (animationControl) {\n                animationControls.add(animationControl);\n            }\n        }\n        return new AnimationGroupControl(animationControls);\n    }\n    /**\n     * Provides the `to` animation tween for one or more positionable instances as a group.\n     *\n     * @param positionGroup - A position group.\n     *\n     * @param toData - A position data object assigned to all positionable instances or a callback function invoked for\n     *        unique data for each instance.\n     *\n     * @param [options] - Tween options assigned to all positionable instances or a callback function invoked for unique\n     *        options for each instance.\n     *\n     * @returns Basic animation control.\n     */\n    static to(positionGroup, toData, options) {\n        if (!isObject(toData) && typeof toData !== 'function') {\n            throw new TypeError(`AnimationGroupAPI.to error: 'toData' is not an object or function.`);\n        }\n        if (options !== void 0 && !isObject(options) && typeof options !== 'function') {\n            throw new TypeError(`AnimationGroupAPI.to error: 'options' is not an object or function.`);\n        }\n        /**\n         */\n        const animationControls = new Set();\n        /**\n         */\n        const cleanupFn = (data) => animationControls.delete(data.control);\n        let index = -1;\n        /**\n         */\n        let callbackOptions;\n        const hasDataCallback = typeof toData === 'function';\n        const hasOptionCallback = typeof options === 'function';\n        const hasCallback = hasDataCallback || hasOptionCallback;\n        if (hasCallback) {\n            callbackOptions = { index, position: void 0, entry: void 0 };\n        }\n        let actualToData = toData;\n        let actualOptions = isObject(options) ? options : void 0;\n        if (isIterable(positionGroup)) {\n            for (const entry of positionGroup) {\n                index++;\n                const actualPosition = this.#getPosition(entry);\n                if (!actualPosition) {\n                    console.warn(`AnimationGroupAPI.to warning: No TJSPosition instance found at index: ${index}.`);\n                    continue;\n                }\n                if (hasCallback) {\n                    callbackOptions.index = index;\n                    callbackOptions.position = actualPosition;\n                    callbackOptions.entry = actualPosition !== entry ? entry : void 0;\n                }\n                if (hasDataCallback && typeof toData === 'function') {\n                    actualToData = toData(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (actualToData === null || actualToData === void 0) {\n                        continue;\n                    }\n                    if (!isObject(actualToData)) {\n                        throw new TypeError(`AnimationGroupAPI.to error: 'toData' callback function iteration(${index}) failed to return an object.`);\n                    }\n                }\n                if (hasOptionCallback && typeof options === 'function') {\n                    actualOptions = options(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (actualOptions === null || actualOptions === void 0) {\n                        continue;\n                    }\n                    if (!isObject(actualOptions)) {\n                        throw new TypeError(`AnimationGroupAPI.to error: 'options' callback function iteration(${index}) failed to return an object.`);\n                    }\n                }\n                const animationControl = AnimationScheduler.to(actualPosition, actualToData, actualOptions, cleanupFn);\n                if (animationControl) {\n                    animationControls.add(animationControl);\n                }\n            }\n        }\n        else {\n            const actualPosition = this.#getPosition(positionGroup);\n            if (!actualPosition) {\n                console.warn(`AnimationGroupAPI.to warning: No TJSPosition instance found.`);\n                return AnimationGroupControl.voidControl;\n            }\n            if (hasCallback) {\n                callbackOptions.index = 0;\n                callbackOptions.position = actualPosition;\n                callbackOptions.entry = actualPosition !== positionGroup ? positionGroup :\n                    void 0;\n            }\n            if (hasDataCallback && typeof toData === 'function') {\n                actualToData = toData(callbackOptions);\n                // Returned data from callback is null / undefined, so skip this position instance.\n                if (actualToData === null || actualToData === void 0) {\n                    return AnimationGroupControl.voidControl;\n                }\n                if (!isObject(actualToData)) {\n                    throw new TypeError(`AnimationGroupAPI.to error: 'toData' callback function failed to return an object.`);\n                }\n            }\n            if (hasOptionCallback && typeof options === 'function') {\n                actualOptions = options(callbackOptions);\n                // Returned data from callback is null / undefined, so skip this position instance.\n                if (actualOptions === null || actualOptions === void 0) {\n                    return AnimationGroupControl.voidControl;\n                }\n                if (!isObject(actualOptions)) {\n                    throw new TypeError(`AnimationGroupAPI.to error: 'options' callback function failed to return an object.`);\n                }\n            }\n            const animationControl = AnimationScheduler.to(actualPosition, actualToData, actualOptions, cleanupFn);\n            if (animationControl) {\n                animationControls.add(animationControl);\n            }\n        }\n        return new AnimationGroupControl(animationControls);\n    }\n    /**\n     * Provides the `quickTo` animation tweening function for one or more positionable instances as a group.\n     *\n     * @param positionGroup - A position group.\n     *\n     * @param keys - Animation keys to target.\n     *\n     * @param [options] - Quick tween options assigned to all positionable instances or a callback function invoked for\n     *        unique options for each instance.\n     *\n     * @returns quick-to tween function.\n     */\n    static quickTo(positionGroup, keys, options) {\n        if (!isIterable(keys)) {\n            throw new TypeError(`AnimationGroupAPI.quickTo error: 'keys' is not an iterable list.`);\n        }\n        if (options !== void 0 && !isObject(options) && typeof options !== 'function') {\n            throw new TypeError(`AnimationGroupAPI.quickTo error: 'options' is not an object or function.`);\n        }\n        /**\n         */\n        const quickToCallbacks = [];\n        let index = -1;\n        const hasOptionCallback = typeof options === 'function';\n        const callbackOptions = { index, position: void 0, entry: void 0 };\n        let actualOptions = isObject(options) ? options : void 0;\n        if (isIterable(positionGroup)) {\n            for (const entry of positionGroup) {\n                index++;\n                const actualPosition = this.#getPosition(entry);\n                if (!actualPosition) {\n                    console.warn(`AnimationGroupAPI.quickTo warning: No TJSPosition instance found at index: ${index}.`);\n                    continue;\n                }\n                callbackOptions.index = index;\n                callbackOptions.position = actualPosition;\n                callbackOptions.entry = actualPosition !== entry ? entry : void 0;\n                if (hasOptionCallback && typeof options === 'function') {\n                    actualOptions = options(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (actualOptions === null || actualOptions === void 0) {\n                        continue;\n                    }\n                    if (!isObject(actualOptions)) {\n                        throw new TypeError(`AnimationGroupAPI.quickTo error: 'options' callback function iteration(${index}) failed to return an object.`);\n                    }\n                }\n                quickToCallbacks.push(actualPosition.animate.quickTo(keys, actualOptions));\n            }\n        }\n        else {\n            const actualPosition = this.#getPosition(positionGroup);\n            if (!actualPosition) {\n                console.warn(`AnimationGroupAPI.quickTo warning: No TJSPosition instance found.`);\n                return;\n            }\n            callbackOptions.index = 0;\n            callbackOptions.position = actualPosition;\n            callbackOptions.entry = actualPosition !== positionGroup ? positionGroup : void 0;\n            if (hasOptionCallback && typeof options === 'function') {\n                actualOptions = options(callbackOptions);\n                // Returned data from callback is null / undefined, so skip this position instance.\n                if (actualOptions === null || actualOptions === void 0) {\n                    return;\n                }\n                if (!isObject(actualOptions)) {\n                    throw new TypeError(`AnimationGroupAPI.quickTo error: 'options' callback function failed to return an object.`);\n                }\n            }\n            quickToCallbacks.push(actualPosition.animate.quickTo(keys, actualOptions));\n        }\n        const keysArray = [...keys];\n        Object.freeze(keysArray);\n        const quickToCB = (...args) => {\n            const argsLength = args.length;\n            if (argsLength === 0) {\n                return;\n            }\n            if (typeof args[0] === 'function') {\n                const dataCallback = args[0];\n                index = -1;\n                let cntr = 0;\n                if (isIterable(positionGroup)) {\n                    for (const entry of positionGroup) {\n                        index++;\n                        const actualPosition = this.#getPosition(entry);\n                        if (!actualPosition) {\n                            continue;\n                        }\n                        callbackOptions.index = index;\n                        callbackOptions.position = actualPosition;\n                        callbackOptions.entry = actualPosition !== entry ? entry : void 0;\n                        const toData = dataCallback(callbackOptions);\n                        // Returned data from callback is null / undefined, so skip this position instance.\n                        if (toData === null || toData === void 0) {\n                            continue;\n                        }\n                        /**\n                         */\n                        const toDataIterable = isIterable(toData);\n                        if (!Number.isFinite(toData) && !toDataIterable && !isObject(toData)) {\n                            throw new TypeError(`AnimationGroupAPI.quickTo error: 'toData' callback function iteration(${index}) failed to return a finite number, iterable list, or object.`);\n                        }\n                        if (toDataIterable) {\n                            quickToCallbacks[cntr++](...toData);\n                        }\n                        else {\n                            quickToCallbacks[cntr++](toData);\n                        }\n                    }\n                }\n                else {\n                    const actualPosition = this.#getPosition(positionGroup);\n                    if (!actualPosition) {\n                        return;\n                    }\n                    callbackOptions.index = 0;\n                    callbackOptions.position = actualPosition;\n                    callbackOptions.entry = actualPosition !== positionGroup ? positionGroup : void 0;\n                    const toData = dataCallback(callbackOptions);\n                    // Returned data from callback is null / undefined, so skip this position instance.\n                    if (toData === null || toData === void 0) {\n                        return;\n                    }\n                    const toDataIterable = isIterable(toData);\n                    if (!Number.isFinite(toData) && !toDataIterable && !isObject(toData)) {\n                        throw new TypeError(`AnimationGroupAPI.quickTo error: 'toData' callback function iteration(${index}) failed to return a finite number, iterable list, or object.`);\n                    }\n                    if (toDataIterable) {\n                        quickToCallbacks[cntr++](...toData);\n                    }\n                    else {\n                        quickToCallbacks[cntr++](toData);\n                    }\n                }\n            }\n            else {\n                for (let cntr = quickToCallbacks.length; --cntr >= 0;) {\n                    quickToCallbacks[cntr](...args);\n                }\n            }\n        };\n        Object.defineProperty(quickToCB, 'keys', {\n            value: keysArray,\n            writable: false,\n            configurable: false\n        });\n        Object.defineProperty(quickToCB, 'options', {\n            /**\n             * Sets options of quickTo tween.\n             * @param options -\n             */\n            value: (options) => {\n                if (options !== void 0 && !isObject(options)) {\n                    throw new TypeError(`AnimationGroupAPI.quickTo error: 'options' is not an object.`);\n                }\n                // Set options object for each quickTo callback.\n                if (isObject(options)) {\n                    for (let cntr = quickToCallbacks.length; --cntr >= 0;) {\n                        quickToCallbacks[cntr].options(options);\n                    }\n                }\n                return quickToCB;\n            },\n            writable: false,\n            configurable: false\n        });\n        return quickToCB;\n    }\n}\nObject.seal(AnimationGroupAPIImpl);\n\n/**\n *\n */\nclass PositionStateAPI {\n    /**\n     */\n    #data;\n    /**\n     */\n    #dataSaved = new Map();\n    /**\n     */\n    #position;\n    /**\n     */\n    #transforms;\n    constructor(position, data, transforms) {\n        this.#position = position;\n        this.#data = data;\n        this.#transforms = transforms;\n        Object.seal(this);\n    }\n    /**\n     * Clears all saved position data except any default state.\n     */\n    clear() {\n        for (const key of this.#dataSaved.keys()) {\n            if (key !== '#defaultData') {\n                this.#dataSaved.delete(key);\n            }\n        }\n    }\n    /**\n     * Returns any stored save state by name.\n     *\n     * @param options - Options.\n     *\n     * @param options.name - Saved data name.\n     *\n     * @returns Any saved position data.\n     */\n    get({ name }) {\n        if (typeof name !== 'string') {\n            throw new TypeError(`TJSPosition - get error: 'name' is not a string.`);\n        }\n        return this.#dataSaved.get(name);\n    }\n    /**\n     * Returns any associated default position data.\n     *\n     * @returns Any saved default position data.\n     */\n    getDefault() {\n        return this.#dataSaved.get('#defaultData');\n    }\n    /**\n     * @returns The saved position data names / keys.\n     */\n    keys() {\n        return this.#dataSaved.keys();\n    }\n    /**\n     * Removes and returns any position data by name.\n     *\n     * @param options - Options.\n     *\n     * @param options.name - Name to remove and retrieve.\n     *\n     * @returns Any saved position data.\n     */\n    remove({ name }) {\n        if (typeof name !== 'string') {\n            throw new TypeError(`TJSPosition - remove: 'name' is not a string.`);\n        }\n        const data = this.#dataSaved.get(name);\n        this.#dataSaved.delete(name);\n        return data;\n    }\n    /**\n     * Resets position instance to default data and invokes set.\n     *\n     * @param [options] - Optional parameters.\n     *\n     * @param [options.keepZIndex=false] - When true keeps current z-index.\n     *\n     * @param [options.invokeSet=true] - When true invokes set method.\n     *\n     * @returns Operation successful.\n     */\n    reset({ keepZIndex = false, invokeSet = true } = {}) {\n        const defaultData = this.#dataSaved.get('#defaultData');\n        // Quit early if there is no saved default data.\n        if (!isObject(defaultData)) {\n            return false;\n        }\n        // Cancel all animations for TJSPosition if there are currently any scheduled.\n        if (this.#position.animate.isScheduled) {\n            this.#position.animate.cancel();\n        }\n        const zIndex = this.#position.zIndex;\n        const data = Object.assign({}, defaultData);\n        if (keepZIndex) {\n            data.zIndex = zIndex;\n        }\n        // Reset the transform data.\n        this.#transforms.reset(data);\n        const parent = this.#position.parent;\n        // If current minimized invoke `maximize`. TODO: REFACTOR FOR APPLICATION DIRECT ACCESS.\n        if (parent?.reactive?.minimized) {\n            parent?.maximize?.({ animate: false, duration: 0 });\n        }\n        // Note next clock tick scheduling.\n        if (invokeSet) {\n            setTimeout(() => this.#position.set(data), 0);\n        }\n        return true;\n    }\n    /**\n     * Restores a saved positional state returning the data. Several optional parameters are available to control\n     * whether the restore action occurs silently (no store / inline styles updates), animates to the stored data, or\n     * simply sets the stored data. Restoring via {@link AnimationAPI.to} allows specification of the duration and\n     * easing along with configuring a Promise to be returned if awaiting the end of the animation.\n     *\n     * @param options - Parameters\n     *\n     * @param options.name - Saved data set name.\n     *\n     * @param [options.remove=false] - Deletes data set.\n     *\n     * @param [options.properties] - Specific properties to set / animate.\n     *\n     * @param [options.silent] - Set position data directly; no store or style updates.\n     *\n     * @param [options.async=false] - If animating return a Promise that resolves with any saved data.\n     *\n     * @param [options.animateTo=false] - Animate to restore data.\n     *\n     * @param [options.cancelable=true] - When false, any animation can not be cancelled.\n     *\n     * @param [options.duration=0.1] - Duration in seconds.\n     *\n     * @param [options.ease='linear'] - Easing function name or function.\n     *\n     * @returns Any saved position data.\n     */\n    restore({ name, remove = false, properties, silent = false, async = false, animateTo = false, cancelable = true, duration = 0.1, ease = 'linear' }) {\n        if (typeof name !== 'string') {\n            throw new TypeError(`TJSPosition - restore error: 'name' is not a string.`);\n        }\n        const dataSaved = this.#dataSaved.get(name);\n        if (dataSaved) {\n            if (remove) {\n                this.#dataSaved.delete(name);\n            }\n            let data = dataSaved;\n            if (isIterable(properties)) {\n                data = {};\n                for (const property of properties) {\n                    data[property] = dataSaved[property];\n                }\n            }\n            // Update data directly with no store or inline style updates.\n            if (silent) {\n                for (const property in data) {\n                    if (property in this.#data) {\n                        this.#data[property] = data[property];\n                    }\n                }\n                return dataSaved;\n            }\n            else if (animateTo) // Animate to saved data.\n             {\n                // Provide special handling to potentially change transform origin as this parameter is not animated.\n                if (data.transformOrigin !== this.#position.transformOrigin) {\n                    this.#position.transformOrigin = data.transformOrigin;\n                }\n                // Return a Promise with saved data that resolves after animation ends.\n                if (async) {\n                    return this.#position.animate.to(data, { cancelable, duration, ease }).finished.then(() => dataSaved);\n                }\n                else // Animate synchronously.\n                 {\n                    this.#position.animate.to(data, { cancelable, duration, ease });\n                }\n            }\n            else {\n                // Default options is to set data for an immediate update.\n                this.#position.set(data);\n            }\n        }\n        // Saved data potentially not found, but must still return a Promise when async is true.\n        return async ? Promise.resolve(dataSaved) : dataSaved;\n    }\n    /**\n     * Saves current position state with the opportunity to add extra data to the saved state. Simply include extra\n     * properties in `options` to save extra data.\n     *\n     * @param options - Options.\n     *\n     * @param options.name - name to index this saved data.\n     *\n     * @param [optionsGet] - Additional options for {@link TJSPosition.get} when serializing position state. By default,\n     *        `nullable` values are included.\n     *\n     * @returns Current position data plus any extra data stored.\n     */\n    save({ name, ...extra }, optionsGet) {\n        if (typeof name !== 'string') {\n            throw new TypeError(`TJSPosition - save error: 'name' is not a string.`);\n        }\n        const data = this.#position.get(extra, optionsGet);\n        this.#dataSaved.set(name, data);\n        return data;\n    }\n    /**\n     * Directly sets a saved position state. Simply include extra properties in `options` to set extra data.\n     *\n     * @param opts - Options.\n     *\n     * @param opts.name - name to index this saved data.\n     */\n    set({ name, ...data }) {\n        if (typeof name !== 'string') {\n            throw new TypeError(`TJSPosition - set error: 'name' is not a string.`);\n        }\n        this.#dataSaved.set(name, data);\n    }\n}\n\n/**\n * Provides a base {@link System.SystemBase} implementation.\n */\nclass SystemBase {\n    /**\n     * When true constrains the min / max width or height to element.\n     */\n    #constrain;\n    /**\n     */\n    #element;\n    /**\n     * When true the validator is active.\n     */\n    #enabled;\n    /**\n     * Provides a manual setting of the element height. As things go `offsetHeight` causes a browser layout and is not\n     * performance oriented. If manually set this height is used instead of `offsetHeight`.\n     */\n    #height;\n    /**\n     * Set from an optional value in the constructor to lock accessors preventing modification.\n     */\n    #lock;\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     * Provides a manual setting of the element width. As things go `offsetWidth` causes a browser layout and is not\n     * performance oriented. If manually set this width is used instead of `offsetWidth`.\n     */\n    #width;\n    /**\n     * @param [options] - Initial options.\n     *\n     * @param [options.constrain=true] - Initial constrained state.\n     *\n     * @param [options.element] - Target element.\n     *\n     * @param [options.enabled=true] - Enabled state.\n     *\n     * @param [options.lock=false] - Lock parameters from being set.\n     *\n     * @param [options.width] - Manual width.\n     *\n     * @param [options.height] - Manual height.\n     */\n    constructor({ constrain = true, element, enabled = true, lock = false, width, height } = {}) {\n        this.#constrain = true;\n        this.#enabled = true;\n        this.constrain = constrain;\n        this.element = element;\n        this.enabled = enabled;\n        this.width = width;\n        this.height = height;\n        this.#lock = typeof lock === 'boolean' ? lock : false;\n    }\n    /**\n     * @returns The current constrain state.\n     */\n    get constrain() { return this.#constrain; }\n    /**\n     * @returns Target element.\n     */\n    get element() { return this.#element; }\n    /**\n     * @returns The current enabled state.\n     */\n    get enabled() { return this.#enabled; }\n    /**\n     * @returns Get manual height.\n     */\n    get height() { return this.#height; }\n    /**\n     * @return Get locked state.\n     */\n    get locked() { return this.#lock; }\n    /**\n     * @returns Get manual width.\n     */\n    get width() { return this.#width; }\n    /**\n     * @param constrain - New constrain state.\n     */\n    set constrain(constrain) {\n        if (this.#lock) {\n            return;\n        }\n        if (typeof constrain !== 'boolean') {\n            throw new TypeError(`'constrain' is not a boolean.`);\n        }\n        this.#constrain = constrain;\n        this.#updateSubscribers();\n    }\n    /**\n     * @param element - Set target element.\n     */\n    set element(element) {\n        if (this.#lock) {\n            return;\n        }\n        if (element === void 0 || element === null || A11yHelper.isFocusTarget(element)) {\n            this.#element = element;\n        }\n        else {\n            throw new TypeError(`'element' is not a HTMLElement, undefined, or null.`);\n        }\n        this.#updateSubscribers();\n    }\n    /**\n     * @param enabled - New enabled state.\n     */\n    set enabled(enabled) {\n        if (this.#lock) {\n            return;\n        }\n        if (typeof enabled !== 'boolean') {\n            throw new TypeError(`'enabled' is not a boolean.`);\n        }\n        this.#enabled = enabled;\n        this.#updateSubscribers();\n    }\n    /**\n     * @param height - Set manual height.\n     */\n    set height(height) {\n        if (this.#lock) {\n            return;\n        }\n        if (height === void 0 || Number.isFinite(height)) {\n            this.#height = height;\n        }\n        else {\n            throw new TypeError(`'height' is not a finite number or undefined.`);\n        }\n        this.#updateSubscribers();\n    }\n    /**\n     * @param width - Set manual width.\n     */\n    set width(width) {\n        if (this.#lock) {\n            return;\n        }\n        if (width === void 0 || Number.isFinite(width)) {\n            this.#width = width;\n        }\n        else {\n            throw new TypeError(`'width' is not a finite number or undefined.`);\n        }\n        this.#updateSubscribers();\n    }\n    /**\n     * Set manual width & height.\n     *\n     * @param width - New manual width.\n     *\n     * @param height - New manual height.\n     */\n    setDimension(width, height) {\n        if (this.#lock) {\n            return;\n        }\n        if (width === void 0 || Number.isFinite(width)) {\n            this.#width = width;\n        }\n        else {\n            throw new TypeError(`'width' is not a finite number or undefined.`);\n        }\n        if (height === void 0 || Number.isFinite(height)) {\n            this.#height = height;\n        }\n        else {\n            throw new TypeError(`'height' is not a finite number or undefined.`);\n        }\n        this.#updateSubscribers();\n    }\n    /**\n     * @param handler - Callback function that is invoked on update / changes. Receives a copy of the TJSPositionData.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler); // add handler to the array of subscribers\n            handler(this); // call handler with current value\n        }\n        // Return unsubscribe function.\n        return () => {\n            const existingIdx = this.#subscribers.findIndex((entry) => entry === handler);\n            if (existingIdx !== -1) {\n                this.#subscribers.splice(existingIdx, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers on changes.\n     */\n    #updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this);\n        }\n    }\n}\n\n/**\n * Provides a {@link System.Initial.InitialSystem} implementation to center an element being positioned.\n */\nclass Centered extends SystemBase {\n    /**\n     * Get the left constraint based on any manual target values or the browser inner width.\n     *\n     * @param width - Target width.\n     *\n     * @returns Calculated left constraint.\n     */\n    getLeft(width) {\n        // Determine containing bounds from manual values; or any element; lastly the browser width / height.\n        const boundsWidth = this.width ?? this.element?.offsetWidth ?? globalThis.innerWidth;\n        return (boundsWidth - width) / 2;\n    }\n    /**\n     * Get the top constraint based on any manual target values or the browser inner height.\n     *\n     * @param height - Target height.\n     *\n     * @returns Calculated top constraint.\n     */\n    getTop(height) {\n        const boundsHeight = this.height ?? this.element?.offsetHeight ?? globalThis.innerHeight;\n        return (boundsHeight - height) / 2;\n    }\n}\n\n/**\n * Provides the storage and sequencing of managed position validators. Each validator added may be a bespoke function or\n * a {@link ValidatorData} object containing an `id`, `validator`, and `weight` attributes; `validator` is the only\n * required attribute.\n *\n * The `id` attribute can be anything that creates a unique ID for the validator; recommended strings or numbers. This\n * allows validators to be removed by ID easily.\n *\n * The `weight` attribute is a number between 0 and 1 inclusive that allows validators to be added in a predictable\n * order which is especially handy if they are manipulated at runtime. A lower weighted validator always runs before a\n * higher weighted validator. If no weight is specified the default of '1' is assigned, and it is appended to the end of\n * the validators list.\n *\n * This class forms the public API which is accessible from the {@link TJSPosition.validators} getter in the main\n * TJSPosition instance.\n * ```\n * const position = new TJSPosition();\n * position.validators.add(...);\n * position.validators.clear();\n * position.validators.length;\n * position.validators.remove(...);\n * position.validators.removeBy(...);\n * position.validators.removeById(...);\n * ```\n */\nclass AdapterValidators {\n    /**\n     */\n    #enabled = true;\n    /**\n     */\n    #validatorData;\n    /**\n     */\n    #mapUnsubscribe = new Map();\n    #updateFn;\n    /**\n     * @returns Returns this and internal storage for validator adapter.\n     */\n    static create(updateFn) {\n        const validatorAPI = new AdapterValidators(updateFn);\n        return [validatorAPI, validatorAPI.#validatorData];\n    }\n    /**\n     */\n    constructor(updateFn) {\n        this.#validatorData = [];\n        this.#updateFn = updateFn;\n        Object.seal(this);\n    }\n    /**\n     * @returns Returns the enabled state.\n     */\n    get enabled() { return this.#enabled; }\n    /**\n     * @returns Returns the length of the validators array.\n     */\n    get length() { return this.#validatorData.length; }\n    /**\n     * @param enabled - Sets enabled state.\n     */\n    set enabled(enabled) {\n        if (typeof enabled !== 'boolean') {\n            throw new TypeError(`'enabled' is not a boolean.`);\n        }\n        this.#enabled = enabled;\n    }\n    /**\n     * Provides an iterator for validators.\n     *\n     * @returns iterator.\n     */\n    *[Symbol.iterator]() {\n        if (this.#validatorData.length === 0) {\n            return;\n        }\n        for (const entry of this.#validatorData) {\n            yield { ...entry };\n        }\n    }\n    /**\n     * Adds the given validators.\n     *\n     * @param validators - Validators to add.\n     */\n    add(...validators) {\n        /**\n         * Tracks the number of validators added that have subscriber functionality.\n         */\n        let subscribeCount = 0;\n        for (const validator of validators) {\n            const validatorType = typeof validator;\n            if ((validatorType !== 'function' && validatorType !== 'object') || validator === null) {\n                throw new TypeError(`AdapterValidator error: 'validator' is not a function or object.`);\n            }\n            /**\n             */\n            let data = void 0;\n            /**\n             */\n            let subscribeFn = void 0;\n            switch (validatorType) {\n                case 'function':\n                    data = {\n                        id: void 0,\n                        validate: validator,\n                        weight: 1\n                    };\n                    subscribeFn = validator.subscribe;\n                    break;\n                case 'object':\n                    if ('validate' in validator) {\n                        if (typeof validator.validate !== 'function') {\n                            throw new TypeError(`AdapterValidator error: 'validate' attribute is not a function.`);\n                        }\n                        if (validator.weight !== void 0 && typeof validator.weight !== 'number' ||\n                            (validator?.weight < 0 || validator?.weight > 1)) {\n                            throw new TypeError(`AdapterValidator error: 'weight' attribute is not a number between '0 - 1' inclusive.`);\n                        }\n                        data = {\n                            id: validator.id !== void 0 ? validator.id : void 0,\n                            validate: validator.validate.bind(validator),\n                            weight: validator.weight || 1\n                        };\n                        subscribeFn = validator.validate.subscribe ?? validator.subscribe;\n                    }\n                    else {\n                        throw new TypeError(`AdapterValidator error: 'validate' attribute is not a function.`);\n                    }\n                    break;\n            }\n            // Find the index to insert where data.weight is less than existing values weight.\n            const index = this.#validatorData.findIndex((value) => data.weight < value.weight);\n            // If an index was found insert at that location.\n            if (index >= 0) {\n                this.#validatorData.splice(index, 0, data);\n            }\n            else // push to end of validators.\n             {\n                this.#validatorData.push(data);\n            }\n            if (typeof subscribeFn === 'function') {\n                const unsubscribe = subscribeFn.call(validator, this.#updateFn);\n                // Ensure that unsubscribe is a function.\n                if (typeof unsubscribe !== 'function') {\n                    throw new TypeError('AdapterValidator error: Validator has subscribe function, but no unsubscribe function is returned.');\n                }\n                // Ensure that the same validator is not subscribed to multiple times.\n                if (this.#mapUnsubscribe.has(data.validate)) {\n                    throw new Error('AdapterValidator error: Validator added already has an unsubscribe function registered.');\n                }\n                this.#mapUnsubscribe.set(data.validate, unsubscribe);\n                subscribeCount++;\n            }\n        }\n        // Validators with subscriber functionality are assumed to immediately invoke the `subscribe` callback. If the\n        // subscriber count is less than the amount of validators added then automatically trigger an update manually.\n        if (subscribeCount < validators.length) {\n            this.#updateFn();\n        }\n    }\n    /**\n     * Clears / removes all validators.\n     */\n    clear() {\n        this.#validatorData.length = 0;\n        // Unsubscribe from all validators with subscription support.\n        for (const unsubscribe of this.#mapUnsubscribe.values()) {\n            unsubscribe();\n        }\n        this.#mapUnsubscribe.clear();\n        this.#updateFn();\n    }\n    /**\n     * Removes one or more given validators.\n     *\n     * @param validators - Validators to remove.\n     */\n    remove(...validators) {\n        const length = this.#validatorData.length;\n        if (length === 0) {\n            return;\n        }\n        for (const data of validators) {\n            // Handle the case that the validator may either be a function or a validator entry / object.\n            const actualValidator = typeof data === 'function' ? data : isObject(data) ? data.validate : void 0;\n            if (!actualValidator) {\n                continue;\n            }\n            for (let cntr = this.#validatorData.length; --cntr >= 0;) {\n                if (this.#validatorData[cntr].validate === actualValidator) {\n                    this.#validatorData.splice(cntr, 1);\n                    // Invoke any unsubscribe function for given validator then remove from tracking.\n                    let unsubscribe = void 0;\n                    if (typeof (unsubscribe = this.#mapUnsubscribe.get(actualValidator)) === 'function') {\n                        unsubscribe();\n                        this.#mapUnsubscribe.delete(actualValidator);\n                    }\n                }\n            }\n        }\n        // Invoke update as a validator was removed.\n        if (length !== this.#validatorData.length) {\n            this.#updateFn();\n        }\n    }\n    /**\n     * Remove validators by the provided callback. The callback takes 3 parameters: `id`, `validator`, and `weight`.\n     * Any truthy value returned will remove that validator.\n     *\n     * @param callback - Callback function to evaluate each validator entry.\n     */\n    removeBy(callback) {\n        const length = this.#validatorData.length;\n        if (length === 0) {\n            return;\n        }\n        if (typeof callback !== 'function') {\n            throw new TypeError(`AdapterValidator error: 'callback' is not a function.`);\n        }\n        this.#validatorData = this.#validatorData.filter((data) => {\n            const remove = callback.call(callback, { ...data });\n            if (remove) {\n                let unsubscribe;\n                if (typeof (unsubscribe = this.#mapUnsubscribe.get(data.validate)) === 'function') {\n                    unsubscribe();\n                    this.#mapUnsubscribe.delete(data.validate);\n                }\n            }\n            // Reverse remove boolean to properly validator / remove this validator.\n            return !remove;\n        });\n        if (length !== this.#validatorData.length) {\n            this.#updateFn();\n        }\n    }\n    /**\n     * Removes any validators with matching IDs.\n     *\n     * @param ids - IDs to remove.\n     */\n    removeById(...ids) {\n        const length = this.#validatorData.length;\n        if (length === 0) {\n            return;\n        }\n        this.#validatorData = this.#validatorData.filter((data) => {\n            let remove = false;\n            for (const id of ids) {\n                remove ||= data.id === id;\n            }\n            // If not keeping invoke any unsubscribe function for given validator then remove from tracking.\n            if (remove) {\n                let unsubscribe;\n                if (typeof (unsubscribe = this.#mapUnsubscribe.get(data.validate)) === 'function') {\n                    unsubscribe();\n                    this.#mapUnsubscribe.delete(data.validate);\n                }\n            }\n            return !remove; // Swap here to actually remove the item via array validator method.\n        });\n        if (length !== this.#validatorData.length) {\n            this.#updateFn();\n        }\n    }\n}\n\nclass TransformBounds extends SystemBase {\n    static #TRANSFORM_DATA = new TJSTransformData();\n    /**\n     * Provides a validator that respects transforms in positional data constraining the position to within the target\n     * elements bounds.\n     *\n     * @param valData - The associated validation data for position updates.\n     *\n     * @returns Potentially adjusted position data.\n     */\n    validate(valData) {\n        // Early out if element is undefined or local enabled state is false.\n        if (!this.enabled) {\n            return valData.position;\n        }\n        // Determine containing bounds from manual values; or any element; lastly the browser width / height.\n        const boundsWidth = this.width ?? this.element?.offsetWidth ?? globalThis.innerWidth;\n        const boundsHeight = this.height ?? this.element?.offsetHeight ?? globalThis.innerHeight;\n        // Ensure min / max width constraints when position width is a number; not 'auto' or 'inherit'. If constrain is\n        // true cap width bounds.\n        if (typeof valData.position.width === 'number') {\n            const maxW = valData.maxWidth ?? (this.constrain ? boundsWidth : Number.MAX_SAFE_INTEGER);\n            valData.position.width = clamp(valData.width, valData.minWidth, maxW);\n        }\n        // Ensure min / max height constraints when position height is a number; not 'auto' or 'inherit'. If constrain\n        // is true cap height bounds.\n        if (typeof valData.position.height === 'number') {\n            const maxH = valData.maxHeight ?? (this.constrain ? boundsHeight : Number.MAX_SAFE_INTEGER);\n            valData.position.height = clamp(valData.height, valData.minHeight, maxH);\n        }\n        // Get transform data. First set constraints including any margin top / left as offsets and width / height. Used\n        // when position width / height is 'auto'.\n        const data = valData.transforms.getData(valData.position, TransformBounds.#TRANSFORM_DATA, valData);\n        // Check the bounding rectangle against browser height / width. Adjust position based on how far the overlap of\n        // the bounding rect is outside the bounds height / width. The order below matters as the constraints are top /\n        // left oriented, so perform those checks last.\n        const initialX = data.boundingRect.x;\n        const initialY = data.boundingRect.y;\n        const marginTop = valData.marginTop ?? 0;\n        const marginLeft = valData.marginLeft ?? 0;\n        if (data.boundingRect.bottom + marginTop > boundsHeight) {\n            data.boundingRect.y += boundsHeight - data.boundingRect.bottom - marginTop;\n        }\n        if (data.boundingRect.right + marginLeft > boundsWidth) {\n            data.boundingRect.x += boundsWidth - data.boundingRect.right - marginLeft;\n        }\n        if (data.boundingRect.top - marginTop < 0) {\n            data.boundingRect.y += Math.abs(data.boundingRect.top - marginTop);\n        }\n        if (data.boundingRect.left - marginLeft < 0) {\n            data.boundingRect.x += Math.abs(data.boundingRect.left - marginLeft);\n        }\n        valData.position.left -= initialX - data.boundingRect.x;\n        valData.position.top -= initialY - data.boundingRect.y;\n        return valData.position;\n    }\n}\n\n/**\n * Tracks changes to positional data during {@link TJSPosition.set} updates to minimize changes to the element style in\n * {@link UpdateElementManager}.\n */\nclass PositionChangeSet {\n    left;\n    top;\n    width;\n    height;\n    maxHeight;\n    maxWidth;\n    minHeight;\n    minWidth;\n    zIndex;\n    transform;\n    transformOrigin;\n    constructor() {\n        this.left = false;\n        this.top = false;\n        this.width = false;\n        this.height = false;\n        this.maxHeight = false;\n        this.maxWidth = false;\n        this.minHeight = false;\n        this.minWidth = false;\n        this.zIndex = false;\n        this.transform = false;\n        this.transformOrigin = false;\n    }\n    hasChange() {\n        return this.left || this.top || this.width || this.height || this.maxHeight || this.maxWidth || this.minHeight ||\n            this.minWidth || this.zIndex || this.transform || this.transformOrigin;\n    }\n    set(value) {\n        this.left = value;\n        this.top = value;\n        this.width = value;\n        this.height = value;\n        this.maxHeight = value;\n        this.maxWidth = value;\n        this.minHeight = value;\n        this.minWidth = value;\n        this.zIndex = value;\n        this.transform = value;\n        this.transformOrigin = value;\n    }\n}\n\n/**\n * Encapsulates internal data from a TJSPosition instance to be manipulated by {@link UpdateElementManager}.\n */\nclass UpdateElementData {\n    changeSet;\n    data;\n    dataSubscribers;\n    dimensionData;\n    options;\n    queued;\n    storeDimension;\n    storeTransform;\n    styleCache;\n    subscribers;\n    transforms;\n    transformData;\n    constructor(changeSet, data, options, styleCache, subscribers, transforms) {\n        /**\n         */\n        this.changeSet = changeSet;\n        /**\n         * Stores the private data from TJSPosition.\n         */\n        this.data = data;\n        /**\n         * Provides a copy of local data sent to subscribers.\n         */\n        this.dataSubscribers = Object.seal(new TJSPositionData());\n        /**\n         * Stores the current dimension data used for the readable `dimension` store.\n         */\n        this.dimensionData = Object.seal({ width: 0, height: 0 });\n        /**\n         */\n        this.options = options;\n        /**\n         * Stores if this TJSPosition / update data is queued for update.\n         */\n        this.queued = false;\n        /**\n         */\n        this.styleCache = styleCache;\n        /**\n         */\n        this.storeDimension = writable(this.dimensionData);\n        /**\n         */\n        this.subscribers = subscribers;\n        /**\n         */\n        this.transforms = transforms;\n        /**\n         * Stores the current transform data used for the readable `transform` store. It is only active when there are\n         * subscribers to the store or calculateTransform options is true.\n         */\n        this.transformData = new TJSTransformData();\n        /**\n         * When there are subscribers set option to calculate transform updates; set to false when no subscribers.\n         */\n        this.storeTransform = writable(this.transformData, () => {\n            this.options.transformSubscribed = true;\n            return () => this.options.transformSubscribed = false;\n        });\n    }\n}\n\n/**\n * Decouples updates to any parent target HTMLElement inline styles. Invoke {@link TJSPosition.elementUpdated} to await\n * on the returned promise that is resolved with the current render time via `nextAnimationFrame` /\n * `requestAnimationFrame`. This allows the underlying data model to be updated immediately while updates to the\n * element are in sync with the browser and potentially in the future be further throttled.\n */\nclass UpdateElementManager {\n    /**\n     * Stores the active list of all TJSPosition instances currently updating. The list entries are recycled between\n     * updates.\n     */\n    static list = [];\n    /**\n     * Tracks the current position in the list.\n     */\n    static listCntr = 0;\n    static updatePromise;\n    /**\n     * Potentially adds the given element and internal updateData instance to the list.\n     *\n     * @param el - An HTMLElement instance.\n     *\n     * @param updateData - An UpdateElementData instance.\n     *\n     * @returns The unified next frame update promise. Returns `currentTime`.\n     */\n    static add(el, updateData) {\n        if (this.listCntr < this.list.length) {\n            const entry = this.list[this.listCntr];\n            entry[0] = el;\n            entry[1] = updateData;\n        }\n        else {\n            this.list.push([el, updateData]);\n        }\n        this.listCntr++;\n        updateData.queued = true;\n        if (!this.updatePromise) {\n            this.updatePromise = this.wait();\n        }\n        return this.updatePromise;\n    }\n    /**\n     * Await on `nextAnimationFrame` and iterate over list map invoking callback functions.\n     *\n     * @returns The next frame Promise / currentTime from nextAnimationFrame.\n     */\n    static async wait() {\n        // Await the next animation frame. In the future this can be extended to multiple frames to divide update rate.\n        const currentTime = await nextAnimationFrame();\n        this.updatePromise = void 0;\n        for (let cntr = this.listCntr; --cntr >= 0;) {\n            // Obtain data for entry.\n            const entry = this.list[cntr];\n            const el = entry[0];\n            const updateData = entry[1];\n            // Clear entry data.\n            entry[0] = void 0;\n            entry[1] = void 0;\n            // Reset queued state.\n            updateData.queued = false;\n            // Early out if the element is no longer connected to the DOM / shadow root.\n            // if (!el.isConnected) { continue; }\n            if (updateData.options.ortho) {\n                UpdateElementManager.#updateElementOrtho(el, updateData);\n            }\n            else {\n                UpdateElementManager.#updateElement(el, updateData);\n            }\n            // If calculate transform options is enabled then update the transform data and set the readable store.\n            if (updateData.options.calculateTransform || updateData.options.transformSubscribed) {\n                UpdateElementManager.#updateTransform(updateData);\n            }\n            // Update all subscribers with changed data.\n            this.updateSubscribers(updateData);\n        }\n        this.listCntr = 0;\n        return currentTime;\n    }\n    /**\n     * Potentially immediately updates the given element.\n     *\n     * @param el - An HTMLElement instance.\n     *\n     * @param updateData - An UpdateElementData instance.\n     */\n    static immediate(el, updateData) {\n        if (updateData.options.ortho) {\n            UpdateElementManager.#updateElementOrtho(el, updateData);\n        }\n        else {\n            UpdateElementManager.#updateElement(el, updateData);\n        }\n        // If calculate transform options is enabled then update the transform data and set the readable store.\n        if (updateData.options.calculateTransform || updateData.options.transformSubscribed) {\n            UpdateElementManager.#updateTransform(updateData);\n        }\n        // Update all subscribers with changed data.\n        this.updateSubscribers(updateData);\n    }\n    /**\n     * @param updateData - Data change set.\n     */\n    static updateSubscribers(updateData) {\n        const data = updateData.data;\n        const changeSet = updateData.changeSet;\n        if (!changeSet.hasChange()) {\n            return;\n        }\n        // Make a copy of the data.\n        const output = TJSPositionDataUtil.copyData(data, updateData.dataSubscribers);\n        const subscribers = updateData.subscribers;\n        // Early out if there are no subscribers.\n        if (subscribers.length > 0) {\n            for (let cntr = 0; cntr < subscribers.length; cntr++) {\n                subscribers[cntr](output);\n            }\n        }\n        // Update dimension data if width / height has changed.\n        if (changeSet.width || changeSet.height) {\n            updateData.dimensionData.width = data.width;\n            updateData.dimensionData.height = data.height;\n            updateData.storeDimension.set(updateData.dimensionData);\n        }\n        changeSet.set(false);\n    }\n    // Internal Implementation ----------------------------------------------------------------------------------------\n    /**\n     * Temporary data for validation.\n     */\n    static #validationData = Object.seal({\n        height: 0,\n        width: 0,\n        marginLeft: 0,\n        marginTop: 0\n    });\n    /**\n     * Decouples updates to any parent target HTMLElement inline styles. Invoke {@link TJSPosition.elementUpdated} to\n     * await on the returned promise that is resolved with the current render time via `nextAnimationFrame` /\n     * `requestAnimationFrame`. This allows the underlying data model to be updated immediately while updates to the\n     * element are in sync with the browser and potentially in the future be further throttled.\n     *\n     * @param el - The target HTMLElement.\n     *\n     * @param updateData - Update data.\n     */\n    static #updateElement(el, updateData) {\n        const changeSet = updateData.changeSet;\n        const data = updateData.data;\n        if (changeSet.left) {\n            el.style.left = `${data.left}px`;\n        }\n        if (changeSet.top) {\n            el.style.top = `${data.top}px`;\n        }\n        if (changeSet.zIndex) {\n            el.style.zIndex = typeof data.zIndex === 'number' ? `${data.zIndex}` : '';\n        }\n        if (changeSet.width) {\n            el.style.width = typeof data.width === 'number' ? `${data.width}px` : data.width;\n        }\n        if (changeSet.height) {\n            el.style.height = typeof data.height === 'number' ? `${data.height}px` : data.height;\n        }\n        if (changeSet.transformOrigin) {\n            el.style.transformOrigin = data.transformOrigin;\n        }\n        // Update all transforms in order added to transforms object.\n        if (changeSet.transform) {\n            el.style.transform = updateData.transforms.isActive ? updateData.transforms.getCSS() : '';\n        }\n    }\n    /**\n     * Decouples updates to any parent target HTMLElement inline styles. Invoke {@link TJSPosition.elementUpdated} to\n     * await on the returned promise that is resolved with the current render time via `nextAnimationFrame` /\n     * `requestAnimationFrame`. This allows the underlying data model to be updated immediately while updates to the\n     * element are in sync with the browser and potentially in the future be further throttled.\n     *\n     * @param el - The target HTMLElement.\n     *\n     * @param updateData - Update data.\n     */\n    static #updateElementOrtho(el, updateData) {\n        const changeSet = updateData.changeSet;\n        const data = updateData.data;\n        if (changeSet.zIndex) {\n            el.style.zIndex = typeof data.zIndex === 'number' ? `${data.zIndex}` : '';\n        }\n        if (changeSet.width) {\n            el.style.width = typeof data.width === 'number' ? `${data.width}px` : data.width;\n        }\n        if (changeSet.height) {\n            el.style.height = typeof data.height === 'number' ? `${data.height}px` : data.height;\n        }\n        if (changeSet.transformOrigin) {\n            el.style.transformOrigin = data.transformOrigin;\n        }\n        // Update all transforms in order added to transforms object.\n        if (changeSet.left || changeSet.top || changeSet.transform) {\n            el.style.transform = updateData.transforms.getCSSOrtho(data);\n        }\n    }\n    /**\n     * Updates the applied transform data and sets the readable `transform` store.\n     *\n     * @param updateData - Update element data.\n     */\n    static #updateTransform(updateData) {\n        const validationData = this.#validationData;\n        validationData.height = updateData.data.height !== 'auto' && updateData.data.height !== 'inherit' ?\n            updateData.data.height : updateData.styleCache.offsetHeight;\n        validationData.width = updateData.data.width !== 'auto' && updateData.data.width !== 'inherit' ?\n            updateData.data.width : updateData.styleCache.offsetWidth;\n        validationData.marginLeft = updateData.styleCache.marginLeft;\n        validationData.marginTop = updateData.styleCache.marginTop;\n        // Get transform data. First set constraints including any margin top / left as offsets and width / height. Used\n        // when position width / height is 'auto'.\n        updateData.transforms.getData(updateData.data, updateData.transformData, validationData);\n        updateData.storeTransform.set(updateData.transformData);\n    }\n}\n\nvar _a;\n/**\n * Provides an advanced compound store for positioning elements dynamically including an optimized pipeline for updating\n * an associated element. Essential tweening / animation is supported in addition to a validation API to constrain\n * positional updates.\n */\nclass TJSPosition {\n    /**\n     * Public API for {@link TJSPosition.Initial}.\n     */\n    static #positionInitial = Object.freeze({\n        browserCentered: new Centered({ lock: true }),\n        Centered\n    });\n    /**\n     * Public API for {@link TJSPosition.Validators}\n     */\n    static #positionValidators = Object.freeze({\n        TransformBounds,\n        transformWindow: new TransformBounds({ lock: true })\n    });\n    /**\n     * Stores all position data / properties.\n     */\n    #data = Object.seal(new TJSPositionData());\n    /**\n     * Provides the animation API.\n     */\n    #animate = new AnimationAPIImpl(this, this.#data);\n    /**\n     * Provides a way to turn on / off the position handling.\n     */\n    #enabled = true;\n    /**\n     * Stores ongoing options that are set in the constructor or by transform store subscription.\n     */\n    #options = {\n        calculateTransform: false,\n        initial: void 0,\n        ortho: true,\n        transformSubscribed: false,\n    };\n    /**\n     * The associated parent for positional data tracking. Used in validators.\n     */\n    #parent;\n    /**\n     * Stores the style attributes that changed on update.\n     */\n    #positionChangeSet = new PositionChangeSet();\n    /**\n     * Tracks the current state if this position instance is a candidate for resize observation by the `resizeObserver`\n     * action. This is `true` when `width` or `height` is `auto` or `inherit`.\n     */\n    #resizeObservable = false;\n    /**\n     * Tracks the current state if this position instance is a candidate for resize observation by the `resizeObserver`\n     * action. This is `true` when `height` is `auto` or `inherit`.\n     */\n    #resizeObservableHeight = false;\n    /**\n     * Tracks the current state if this position instance is a candidate for resize observation by the `resizeObserver`\n     * action. This is `true` when `width` is `auto` or `inherit`.\n     */\n    #resizeObservableWidth = false;\n    /**\n     */\n    #stores;\n    /**\n     * Stores an instance of the computer styles for the target element.\n     */\n    #styleCache;\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     */\n    #transforms = new TJSTransforms();\n    /**\n     */\n    #updateElementData;\n    /**\n     * Stores the UpdateElementManager wait promise.\n     */\n    #updateElementPromise;\n    /**\n     */\n    #validators;\n    /**\n     */\n    #validatorData;\n    /**\n     */\n    #state = new PositionStateAPI(this, this.#data, this.#transforms);\n    /**\n     * @returns Public Animation Group API.\n     */\n    static get Animate() { return AnimationGroupAPIImpl; }\n    /**\n     * @returns TJSPositionData constructor.\n     */\n    static get Data() { return TJSPositionData; }\n    /**\n     * @returns TJSPosition default initial systems.\n     */\n    static get Initial() { return this.#positionInitial; }\n    /**\n     * @returns `SystemBase` constructor.\n     */\n    static get SystemBase() { return SystemBase; }\n    /**\n     * Returns TJSTransformData class / constructor.\n     *\n     * @returns TransformData class / constructor.\n     */\n    static get TransformData() { return TJSTransformData; }\n    /**\n     * Returns default validator systems.\n     *\n     * @returns Available validators.\n     */\n    static get Validators() { return this.#positionValidators; }\n    /**\n     * Returns a list of supported transform origins.\n     *\n     * @returns The supported transform origin strings.\n     */\n    static get transformOrigins() {\n        return TJSTransforms.transformOrigins;\n    }\n    /**\n     * Convenience to copy from source to target of two TJSPositionData like objects. If a target is not supplied a new\n     * {@link TJSPositionData} instance is created.\n     *\n     * @param source - The source instance to copy from.\n     *\n     * @param [target] - Target TJSPositionData like object; if one is not provided a new instance is created.\n     *\n     * @returns The target instance with all TJSPositionData fields.\n     */\n    static copyData(source, target) {\n        return TJSPositionDataUtil.copyData(source, target);\n    }\n    /**\n     * Returns a duplicate of a given position instance copying any options and validators. The position parent is not\n     * copied, and a new one must be set manually via the {@link TJSPosition.parent} setter.\n     *\n     * @param position - A position instance.\n     *\n     * @param [options] - Unique new options to set.\n     *\n     * @returns A duplicate position instance.\n     */\n    static duplicate(position, options = {}) {\n        if (!(position instanceof _a)) {\n            throw new TypeError(`'position' is not an instance of TJSPosition.`);\n        }\n        const newPosition = new _a(options);\n        newPosition.#options = Object.assign({}, position.#options, options);\n        newPosition.#validators.add(...position.#validators);\n        newPosition.set(position.#data);\n        return newPosition;\n    }\n    /**\n     * @param [parentOrOptions] - A potential parent element or object w/ `elementTarget` accessor. You may also forego\n     *        setting the parent and pass in the configuration options object.\n     *\n     * @param [options] - The configuration options object.\n     */\n    constructor(parentOrOptions, options) {\n        // Test if `parent` is a plain object; if so, treat as the configuration options object.\n        if (isPlainObject(parentOrOptions)) {\n            options = parentOrOptions;\n        }\n        else {\n            this.#parent = parentOrOptions;\n        }\n        this.#styleCache = new TJSPositionStyleCache();\n        const updateData = new UpdateElementData(this.#positionChangeSet, this.#data, this.#options, this.#styleCache, this.#subscribers, this.#transforms);\n        this.#updateElementData = updateData;\n        // Set TJSPosition options -------------------------------------------------------------------------------------\n        if (typeof options?.calculateTransform === 'boolean') {\n            this.#options.calculateTransform = options.calculateTransform;\n        }\n        if (typeof options?.ortho === 'boolean') {\n            this.#options.ortho = options.ortho;\n        }\n        // Initialize stores -------------------------------------------------------------------------------------------\n        this.#stores = Object.freeze({\n            // The main properties for manipulating TJSPosition.\n            height: propertyStore(this, 'height'),\n            left: propertyStore(this, 'left'),\n            rotateX: propertyStore(this, 'rotateX'),\n            rotateY: propertyStore(this, 'rotateY'),\n            rotateZ: propertyStore(this, 'rotateZ'),\n            scale: propertyStore(this, 'scale'),\n            top: propertyStore(this, 'top'),\n            transformOrigin: propertyStore(this, 'transformOrigin'),\n            translateX: propertyStore(this, 'translateX'),\n            translateY: propertyStore(this, 'translateY'),\n            translateZ: propertyStore(this, 'translateZ'),\n            width: propertyStore(this, 'width'),\n            zIndex: propertyStore(this, 'zIndex'),\n            // Stores that control validation when width / height is not `auto`.\n            maxHeight: propertyStore(this, 'maxHeight'),\n            maxWidth: propertyStore(this, 'maxWidth'),\n            minHeight: propertyStore(this, 'minHeight'),\n            minWidth: propertyStore(this, 'minWidth'),\n            // Readable stores based on updates or from resize observer changes.\n            dimension: { subscribe: updateData.storeDimension.subscribe },\n            element: { subscribe: this.#styleCache.stores.element.subscribe },\n            resizeContentHeight: { subscribe: this.#styleCache.stores.resizeContentHeight.subscribe },\n            resizeContentWidth: { subscribe: this.#styleCache.stores.resizeContentWidth.subscribe },\n            resizeObservable: { subscribe: this.#styleCache.stores.resizeObservable.subscribe },\n            resizeObservableHeight: { subscribe: this.#styleCache.stores.resizeObservableHeight.subscribe },\n            resizeObservableWidth: { subscribe: this.#styleCache.stores.resizeObservableWidth.subscribe },\n            resizeOffsetHeight: { subscribe: this.#styleCache.stores.resizeOffsetHeight.subscribe },\n            resizeOffsetWidth: { subscribe: this.#styleCache.stores.resizeOffsetWidth.subscribe },\n            transform: { subscribe: updateData.storeTransform.subscribe },\n            // Protected store that should only be set by resizeObserver action.\n            resizeObserved: this.#styleCache.stores.resizeObserved,\n        });\n        /**\n         * Define 'values' getter to retrieve static transform origins.\n         */\n        Object.defineProperty(this.#stores.transformOrigin, 'values', {\n            get: () => _a.transformOrigins\n        });\n        // When resize change from any applied `resizeObserver` action automatically set data for new validation run.\n        // A resizeObserver prop should be set to true for ApplicationShell components or usage of resizeObserver action\n        // to monitor for changes. This should only be used on elements that have 'auto' or `inherit` for width or height.\n        subscribeIgnoreFirst(this.#stores.resizeObserved, (resizeData) => {\n            const parent = this.#parent;\n            const el = A11yHelper.isFocusTarget(parent) ? parent : parent?.elementTarget;\n            // Only invoke set if there is a target element, and the resize data has a valid offset width & height.\n            if (A11yHelper.isFocusTarget(el) && Number.isFinite(resizeData?.offsetWidth) &&\n                Number.isFinite(resizeData?.offsetHeight)) {\n                this.set();\n            }\n        });\n        [this.#validators, this.#validatorData] = AdapterValidators.create(() => this.set());\n        if (options?.initial) {\n            const initial = options.initial;\n            if (typeof initial?.getLeft !== 'function' || typeof initial?.getTop !== 'function') {\n                throw new Error(`'options.initial' position helper does not contain 'getLeft' and / or 'getTop' functions.`);\n            }\n            this.#options.initial = initial;\n        }\n        if (options?.validator) {\n            if (isIterable(options?.validator)) {\n                this.validators.add(...options.validator);\n            }\n            else {\n                /**\n                 */\n                const validatorFn = options.validator;\n                this.validators.add(validatorFn);\n            }\n        }\n        Object.seal(this);\n        // Set any remaining position data.\n        if (isObject(options)) {\n            this.set(options);\n        }\n    }\n    /**\n     * Returns the animation API.\n     *\n     * @returns Animation instance API.\n     */\n    get animate() {\n        return this.#animate;\n    }\n    /**\n     * Returns the dimension data for the readable store.\n     *\n     * @returns Dimension data.\n     */\n    get dimension() {\n        return this.#updateElementData.dimensionData;\n    }\n    /**\n     * Returns the enabled state.\n     *\n     * @returns Enabled state.\n     */\n    get enabled() {\n        return this.#enabled;\n    }\n    /**\n     * Returns the current HTMLElement being positioned.\n     *\n     * @returns Current HTMLElement being positioned.\n     */\n    get element() {\n        return this.#styleCache.el;\n    }\n    /**\n     * Returns a promise that is resolved on the next element update with the time of the update.\n     *\n     * @returns Promise resolved on element update.\n     */\n    get elementUpdated() {\n        return this.#updateElementPromise;\n    }\n    /**\n     * Returns the associated {@link TJSPosition.PositionParent} instance.\n     *\n     * @returns The current position parent instance.\n     */\n    get parent() { return this.#parent; }\n    /**\n     * Returns the resize observable state which is `true` whenever `width` or `height` is `auto` or `inherit`.\n     */\n    get resizeObservable() { return this.#resizeObservable; }\n    /**\n     * Returns the resize observable state which is `true` whenever `height` is `auto` or `inherit`.\n     */\n    get resizeObservableHeight() { return this.#resizeObservableHeight; }\n    /**\n     * Returns the resize observable state which is `true` whenever `width` is `auto` or `inherit`.\n     */\n    get resizeObservableWidth() { return this.#resizeObservableWidth; }\n    /**\n     * Returns the state API.\n     *\n     * @returns TJSPosition state API.\n     */\n    get state() { return this.#state; }\n    /**\n     * Returns the derived writable stores for individual data variables.\n     *\n     * @returns Derived / writable stores.\n     */\n    get stores() { return this.#stores; }\n    /**\n     * Returns the transform data for the readable store.\n     *\n     * @returns Transform Data.\n     */\n    get transform() {\n        return this.#updateElementData.transformData;\n    }\n    /**\n     * Returns the validators.\n     *\n     * @returns Validators API\n     */\n    get validators() { return this.#validators; }\n    /**\n     * Sets the enabled state.\n     *\n     * @param enabled - Newly enabled state.\n     */\n    set enabled(enabled) {\n        if (typeof enabled !== 'boolean') {\n            throw new TypeError(`'enabled' is not a boolean.`);\n        }\n        if (this.#enabled !== enabled) {\n            this.#enabled = enabled;\n            if (enabled) {\n                this.set(this.#data);\n            }\n        }\n    }\n    /**\n     * Sets the associated {@link TJSPosition.PositionParent} instance. Resets the style cache and default data.\n     *\n     * @param parent - A PositionParent instance or undefined to disassociate\n     */\n    set parent(parent) {\n        if (parent !== void 0 && !A11yHelper.isFocusTarget(parent) && !isObject(parent)) {\n            throw new TypeError(`'parent' is not an HTMLElement, object, or undefined.`);\n        }\n        this.#parent = parent;\n        // Reset any stored default data & the style cache.\n        this.#state.remove({ name: '#defaultData' });\n        this.#styleCache.reset();\n        // If a parent is defined, then invoke set to update any parent element.\n        if (parent) {\n            this.set(this.#data);\n        }\n    }\n    // Data accessors ----------------------------------------------------------------------------------------------------\n    /**\n     * @returns height\n     */\n    get height() { return this.#data.height; }\n    /**\n     * @returns left\n     */\n    get left() { return this.#data.left; }\n    /**\n     * @returns maxHeight\n     */\n    get maxHeight() { return this.#data.maxHeight; }\n    /**\n     * @returns maxWidth\n     */\n    get maxWidth() { return this.#data.maxWidth; }\n    /**\n     * @returns minHeight\n     */\n    get minHeight() { return this.#data.minHeight; }\n    /**\n     * @returns minWidth\n     */\n    get minWidth() { return this.#data.minWidth; }\n    /**\n     * @returns rotateX\n     */\n    get rotateX() { return this.#data.rotateX; }\n    /**\n     * @returns rotateY\n     */\n    get rotateY() { return this.#data.rotateY; }\n    /**\n     * @returns rotateZ\n     */\n    get rotateZ() { return this.#data.rotateZ; }\n    /**\n     * @returns Alias for rotateZ\n     */\n    get rotation() { return this.#data.rotateZ; }\n    /**\n     * @returns scale\n     */\n    get scale() { return this.#data.scale; }\n    /**\n     * @returns top\n     */\n    get top() { return this.#data.top; }\n    /**\n     * @returns transformOrigin\n     */\n    get transformOrigin() { return this.#data.transformOrigin; }\n    /**\n     * @returns translateX\n     */\n    get translateX() { return this.#data.translateX; }\n    /**\n     * @returns translateY\n     */\n    get translateY() { return this.#data.translateY; }\n    /**\n     * @returns translateZ\n     */\n    get translateZ() { return this.#data.translateZ; }\n    /**\n     * @returns width\n     */\n    get width() { return this.#data.width; }\n    /**\n     * @returns z-index\n     */\n    get zIndex() { return this.#data.zIndex; }\n    /**\n     * @param height -\n     */\n    set height(height) {\n        this.#stores.height.set(height);\n    }\n    /**\n     * @param left -\n     */\n    set left(left) {\n        this.#stores.left.set(left);\n    }\n    /**\n     * @param maxHeight -\n     */\n    set maxHeight(maxHeight) {\n        this.#stores.maxHeight.set(maxHeight);\n    }\n    /**\n     * @param maxWidth -\n     */\n    set maxWidth(maxWidth) {\n        this.#stores.maxWidth.set(maxWidth);\n    }\n    /**\n     * @param minHeight -\n     */\n    set minHeight(minHeight) {\n        this.#stores.minHeight.set(minHeight);\n    }\n    /**\n     * @param minWidth -\n     */\n    set minWidth(minWidth) {\n        this.#stores.minWidth.set(minWidth);\n    }\n    /**\n     * @param rotateX -\n     */\n    set rotateX(rotateX) {\n        this.#stores.rotateX.set(rotateX);\n    }\n    /**\n     * @param rotateY -\n     */\n    set rotateY(rotateY) {\n        this.#stores.rotateY.set(rotateY);\n    }\n    /**\n     * @param rotateZ -\n     */\n    set rotateZ(rotateZ) {\n        this.#stores.rotateZ.set(rotateZ);\n    }\n    /**\n     * @param  rotateZ - alias for rotateZ\n     */\n    set rotation(rotateZ) {\n        this.#stores.rotateZ.set(rotateZ);\n    }\n    /**\n     * @param scale -\n     */\n    set scale(scale) {\n        this.#stores.scale.set(scale);\n    }\n    /**\n     * @param top -\n     */\n    set top(top) {\n        this.#stores.top.set(top);\n    }\n    /**\n     * @param transformOrigin -\n     */\n    set transformOrigin(transformOrigin) {\n        if (TJSTransforms.transformOrigins.includes(transformOrigin)) {\n            this.#stores.transformOrigin.set(transformOrigin);\n        }\n    }\n    /**\n     * @param translateX -\n     */\n    set translateX(translateX) {\n        this.#stores.translateX.set(translateX);\n    }\n    /**\n     * @param translateY -\n     */\n    set translateY(translateY) {\n        this.#stores.translateY.set(translateY);\n    }\n    /**\n     * @param translateZ -\n     */\n    set translateZ(translateZ) {\n        this.#stores.translateZ.set(translateZ);\n    }\n    /**\n     * @param width -\n     */\n    set width(width) {\n        this.#stores.width.set(width);\n    }\n    /**\n     * @param zIndex -\n     */\n    set zIndex(zIndex) {\n        this.#stores.zIndex.set(zIndex);\n    }\n    /**\n     * Assigns current position data to the given object `data` object. By default, `null` position data is not assigned.\n     * Other options allow configuration of the data assigned, including setting default numeric values for any\n     * properties that are null.\n     *\n     * @param [data] - Target to assign current position data.\n     *\n     * @param [options] - Defines options for specific keys and substituting null for numeric default values. By\n     *        default, nullable keys are included.\n     *\n     * @returns Any passed in data object with current position data.\n     */\n    get(data = {}, options = {}) {\n        const keys = options?.keys;\n        const excludeKeys = options?.exclude;\n        const nullable = options?.nullable ?? true;\n        const numeric = options?.numeric ?? false;\n        if (isIterable(keys)) {\n            for (const key of keys) {\n                // Convert any null values to numeric defaults if `numeric` is true.\n                data[key] = numeric ? TJSPositionDataUtil.getDataOrDefault(this, key) : this[key];\n                // Potentially remove null keys.\n                if (!nullable && data[key] === null) {\n                    delete data[key];\n                }\n            }\n            // Remove any excluded keys.\n            if (isIterable(excludeKeys)) {\n                for (const key of excludeKeys) {\n                    delete data[key];\n                }\n            }\n            return data;\n        }\n        else {\n            data = Object.assign(data, this.#data);\n            // Remove any excluded keys.\n            if (isIterable(excludeKeys)) {\n                for (const key of excludeKeys) {\n                    delete data[key];\n                }\n            }\n            // Potentially set numeric defaults.\n            if (numeric) {\n                TJSPositionDataUtil.setNumericDefaults(data);\n            }\n            if (!nullable) {\n                for (const key in data) {\n                    if (data[key] === null) {\n                        delete data[key];\n                    }\n                }\n            }\n            return data;\n        }\n    }\n    /**\n     * @returns Current position data.\n     */\n    toJSON() {\n        return Object.assign({}, this.#data);\n    }\n    /**\n     * All calculation and updates of position are implemented in {@link TJSPosition}. This allows position to be fully\n     * reactive and in control of updating inline styles for a connected {@link HTMLElement}.\n     *\n     * The initial set call with a target element will always set width / height as this is necessary for correct\n     * calculations.\n     *\n     * When a target element is present, updated styles are applied after validation. To modify the behavior of set,\n     * implement one or more validator functions and add them via the validator API available from\n     * {@link TJSPosition.validators}.\n     *\n     * Updates to any target element are decoupled from the underlying TJSPosition data. This method returns this\n     * instance that you can then await on the target element inline style update by using\n     * {@link TJSPosition.elementUpdated}.\n     *\n     * Relative updates to any property of {@link TJSPositionData} are possible by specifying properties as strings.\n     * This string should be in the form of '+=', '-=', or '*=' and float / numeric value. IE '+=0.2'.\n     * {@link TJSPosition.set} will apply the `addition`, `subtraction`, or `multiplication` operation specified against\n     * the current value of the given property. Please see {@link Data.TJSPositionDataRelative} for a detailed\n     * description.\n     *\n     * @param [position] - TJSPosition data to set.\n     *\n     * @param [options] - Additional options.\n     *\n     * @returns This TJSPosition instance.\n     */\n    set(position = {}, options = {}) {\n        if (!isObject(position)) {\n            throw new TypeError(`TJSPosition - set error: 'position' is not an object.`);\n        }\n        // TJSPosition.PositionParent\n        const parent = this.#parent;\n        // An early out to prevent `set` from taking effect if not enabled.\n        if (!this.#enabled) {\n            return this;\n        }\n        // An early out to prevent `set` from taking effect if options `positionable` is false.\n        // TODO: THIS IS REFERENCING APPLICATION OPTIONS.\n        if (parent !== void 0 && typeof parent?.options?.positionable === 'boolean' && !parent?.options?.positionable) {\n            return this;\n        }\n        const immediateElementUpdate = options?.immediateElementUpdate ?? false;\n        const data = this.#data;\n        const transforms = this.#transforms;\n        // Find the target HTML element and verify that it is connected storing it in `el`.\n        const targetEl = A11yHelper.isFocusTarget(parent) ? parent : parent?.elementTarget;\n        const el = A11yHelper.isFocusTarget(targetEl) ? targetEl : void 0;\n        const changeSet = this.#positionChangeSet;\n        const styleCache = this.#styleCache;\n        if (el) {\n            // Cache the computed styles of the element.\n            if (!styleCache.hasData(el)) {\n                styleCache.update(el);\n                // Add will-change property if not already set in inline or computed styles.\n                if (!styleCache.hasWillChange) ;\n                // Update all properties / clear queued state.\n                changeSet.set(true);\n                this.#updateElementData.queued = false;\n            }\n            // Converts any string position data to numeric inputs.\n            ConvertStringData.process(position, this.#data, el);\n            position = this.#updatePosition(position, parent, el, styleCache);\n            // Check if a validator cancelled the update.\n            if (position === null) {\n                return this;\n            }\n        }\n        if (NumberGuard.isFinite(position.left)) {\n            position.left = Math.round(position.left);\n            if (data.left !== position.left) {\n                data.left = position.left;\n                changeSet.left = true;\n            }\n        }\n        if (NumberGuard.isFinite(position.top)) {\n            position.top = Math.round(position.top);\n            if (data.top !== position.top) {\n                data.top = position.top;\n                changeSet.top = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.maxHeight)) {\n            position.maxHeight = typeof position.maxHeight === 'number' ? Math.round(position.maxHeight) : null;\n            if (data.maxHeight !== position.maxHeight) {\n                data.maxHeight = position.maxHeight;\n                changeSet.maxHeight = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.maxWidth)) {\n            position.maxWidth = typeof position.maxWidth === 'number' ? Math.round(position.maxWidth) : null;\n            if (data.maxWidth !== position.maxWidth) {\n                data.maxWidth = position.maxWidth;\n                changeSet.maxWidth = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.minHeight)) {\n            position.minHeight = typeof position.minHeight === 'number' ? Math.round(position.minHeight) : null;\n            if (data.minHeight !== position.minHeight) {\n                data.minHeight = position.minHeight;\n                changeSet.minHeight = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.minWidth)) {\n            position.minWidth = typeof position.minWidth === 'number' ? Math.round(position.minWidth) : null;\n            if (data.minWidth !== position.minWidth) {\n                data.minWidth = position.minWidth;\n                changeSet.minWidth = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.rotateX)) {\n            if (data.rotateX !== position.rotateX) {\n                data.rotateX = transforms.rotateX = position.rotateX;\n                changeSet.transform = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.rotateY)) {\n            if (data.rotateY !== position.rotateY) {\n                data.rotateY = transforms.rotateY = position.rotateY;\n                changeSet.transform = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.rotateZ)) {\n            if (data.rotateZ !== position.rotateZ) {\n                data.rotateZ = transforms.rotateZ = position.rotateZ;\n                changeSet.transform = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.scale)) {\n            position.scale = typeof position.scale === 'number' ? clamp(position.scale, 0, 1000) : null;\n            if (data.scale !== position.scale) {\n                data.scale = transforms.scale = position.scale;\n                changeSet.transform = true;\n            }\n        }\n        if ((typeof position.transformOrigin === 'string' && TJSTransforms.transformOrigins.includes(position.transformOrigin)) || position.transformOrigin === null) {\n            if (data.transformOrigin !== position.transformOrigin) {\n                data.transformOrigin = position.transformOrigin;\n                changeSet.transformOrigin = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.translateX)) {\n            if (data.translateX !== position.translateX) {\n                data.translateX = transforms.translateX = position.translateX;\n                changeSet.transform = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.translateY)) {\n            if (data.translateY !== position.translateY) {\n                data.translateY = transforms.translateY = position.translateY;\n                changeSet.transform = true;\n            }\n        }\n        if (NumberGuard.isFiniteOrNull(position.translateZ)) {\n            if (data.translateZ !== position.translateZ) {\n                data.translateZ = transforms.translateZ = position.translateZ;\n                changeSet.transform = true;\n            }\n        }\n        if (NumberGuard.isFinite(position.zIndex)) {\n            position.zIndex = Math.round(position.zIndex);\n            if (data.zIndex !== position.zIndex) {\n                data.zIndex = position.zIndex;\n                changeSet.zIndex = true;\n            }\n        }\n        const widthIsObservable = position.width === 'auto' || position.width === 'inherit';\n        if (NumberGuard.isFiniteOrNull(position.width) || widthIsObservable) {\n            position.width = typeof position.width === 'number' ? Math.round(position.width) : position.width;\n            if (data.width !== position.width) {\n                data.width = position.width;\n                changeSet.width = true;\n            }\n        }\n        const heightIsObservable = position.height === 'auto' || position.height === 'inherit';\n        if (NumberGuard.isFiniteOrNull(position.height) || heightIsObservable) {\n            position.height = typeof position.height === 'number' ? Math.round(position.height) : position.height;\n            if (data.height !== position.height) {\n                data.height = position.height;\n                changeSet.height = true;\n            }\n        }\n        // Potentially update the `resizeObservable` store when the state of `width` or `height` changes between\n        // `auto` / `inherit` to a number or null.\n        const resizeObservable = widthIsObservable || heightIsObservable;\n        if (this.#resizeObservable !== resizeObservable) {\n            this.#resizeObservable = resizeObservable;\n            this.#styleCache.stores.resizeObservable.set(resizeObservable);\n        }\n        if (this.#resizeObservableHeight !== heightIsObservable) {\n            this.#resizeObservableHeight = heightIsObservable;\n            this.#styleCache.stores.resizeObservableHeight.set(heightIsObservable);\n        }\n        if (this.#resizeObservableWidth !== widthIsObservable) {\n            this.#resizeObservableWidth = widthIsObservable;\n            this.#styleCache.stores.resizeObservableWidth.set(widthIsObservable);\n        }\n        if (el) {\n            const defaultData = this.#state.getDefault();\n            // Set default data after first set operation that has a target element.\n            if (!isObject(defaultData)) {\n                this.#state.save({ name: '#defaultData', ...Object.assign({}, data) });\n            }\n            // If `immediateElementUpdate` is true, then update the element immediately. This is for rAF based library\n            // integrations like GSAP and updates coming from AnimationManager.\n            if (immediateElementUpdate) {\n                UpdateElementManager.immediate(el, this.#updateElementData);\n                this.#updateElementPromise = Promise.resolve(globalThis.performance.now());\n            }\n            // Else, if not queued then queue an update for the next rAF callback.\n            else if (!this.#updateElementData.queued) {\n                this.#updateElementPromise = UpdateElementManager.add(el, this.#updateElementData);\n            }\n        }\n        else {\n            // Notify main store subscribers.\n            UpdateElementManager.updateSubscribers(this.#updateElementData);\n        }\n        return this;\n    }\n    /**\n     * @param handler - Callback function that is invoked on update / changes. Receives a readonly copy of the\n     *        TJSPositionData.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler); // add handler to the array of subscribers\n            handler(Object.assign({}, this.#data)); // call handler with current value\n        }\n        // Return unsubscribe function.\n        return () => {\n            const existingIdx = this.#subscribers.findIndex((entry) => entry === handler);\n            if (existingIdx !== -1) {\n                this.#subscribers.splice(existingIdx, 1);\n            }\n        };\n    }\n    /**\n     * Provides the {@link Writable} store `update` method. Receive and return a {@link TJSPositionData} instance to\n     * update the position state. You may manipulate numeric properties by providing relative adjustments described in\n     * {@link TJSPositionDataRelative}.\n     *\n     * @param updater -\n     */\n    update(updater) {\n        const result = updater(this.get());\n        if (!isObject(result)) {\n            throw new TypeError(`'result' of 'updater' is not an object.`);\n        }\n        this.set(result);\n    }\n    // Internal Implementation ----------------------------------------------------------------------------------------\n    /**\n     * Temporary data storage for `TJSPosition.#updatePosition`.\n     */\n    static #updateDataCopy = Object.seal(new TJSPositionData());\n    /**\n     * Temporary data storage for `TJSPosition.#updatePosition`.\n     */\n    static #validationData = Object.seal({\n        position: void 0,\n        parent: void 0,\n        el: void 0,\n        computed: void 0,\n        transforms: void 0,\n        height: void 0,\n        width: void 0,\n        marginLeft: void 0,\n        marginTop: void 0,\n        maxHeight: void 0,\n        maxWidth: void 0,\n        minHeight: void 0,\n        minWidth: void 0,\n        rest: void 0\n    });\n    /**\n     * @param data -\n     *\n     * @param parent -\n     *\n     * @param el -\n     *\n     * @param styleCache -\n     *\n     * @returns Updated position data or null if validation fails.\n     */\n    #updatePosition({ \n    // Directly supported parameters\n    left, top, maxWidth, maxHeight, minWidth, minHeight, width, height, rotateX, rotateY, rotateZ, scale, transformOrigin, translateX, translateY, translateZ, zIndex, \n    // Aliased parameters.\n    rotation, ...rest }, parent, el, styleCache) {\n        let currentPosition = TJSPositionDataUtil.copyData(this.#data, _a.#updateDataCopy);\n        // Update width if an explicit value is passed, or if no width value is set on the element.\n        if (width !== void 0 || el.style.width === '') {\n            const widthValid = width === null || Number.isFinite(width);\n            if (width === 'auto' || (currentPosition.width === 'auto' && !widthValid)) {\n                currentPosition.width = 'auto';\n                width = styleCache.offsetWidth;\n            }\n            else if (width === 'inherit' || (currentPosition.width === 'inherit' && !widthValid)) {\n                currentPosition.width = 'inherit';\n                width = styleCache.offsetWidth;\n            }\n            else {\n                const newWidth = NumberGuard.isFinite(width) ? width :\n                    currentPosition.width;\n                currentPosition.width = width = NumberGuard.isFinite(newWidth) ? Math.round(newWidth) :\n                    styleCache.offsetWidth;\n            }\n        }\n        else {\n            width = Number.isFinite(currentPosition.width) ? currentPosition.width : styleCache.offsetWidth;\n        }\n        // Update height if an explicit value is passed, or if no height value is set on the element.\n        if (height !== void 0 || el.style.height === '') {\n            const heightValid = height === null || Number.isFinite(height);\n            if (height === 'auto' || (currentPosition.height === 'auto' && !heightValid)) {\n                currentPosition.height = 'auto';\n                height = styleCache.offsetHeight;\n            }\n            else if (height === 'inherit' || (currentPosition.height === 'inherit' && !heightValid)) {\n                currentPosition.height = 'inherit';\n                height = styleCache.offsetHeight;\n            }\n            else {\n                const newHeight = NumberGuard.isFinite(height) ? height :\n                    currentPosition.height;\n                currentPosition.height = height = NumberGuard.isFinite(newHeight) ? Math.round(newHeight) :\n                    styleCache.offsetHeight;\n            }\n        }\n        else {\n            height = Number.isFinite(currentPosition.height) ? currentPosition.height : styleCache.offsetHeight;\n        }\n        // Update left\n        if (NumberGuard.isFinite(left)) {\n            currentPosition.left = left;\n        }\n        else if (!Number.isFinite(currentPosition.left)) {\n            // Potentially use any initial position helper if available or set to 0.\n            currentPosition.left = typeof this.#options?.initial?.getLeft === 'function' ?\n                this.#options.initial.getLeft(width) : 0;\n        }\n        // Update top\n        if (Number.isFinite(top)) {\n            currentPosition.top = top;\n        }\n        else if (!Number.isFinite(currentPosition.top)) {\n            // Potentially use any initial position helper if available or set to 0.\n            currentPosition.top = typeof this.#options?.initial?.getTop === 'function' ?\n                this.#options.initial.getTop(height) : 0;\n        }\n        if (NumberGuard.isFiniteOrNull(maxHeight)) {\n            currentPosition.maxHeight = NumberGuard.isFinite(maxHeight) ? Math.round(maxHeight) : null;\n        }\n        if (NumberGuard.isFiniteOrNull(maxWidth)) {\n            currentPosition.maxWidth = NumberGuard.isFinite(maxWidth) ? Math.round(maxWidth) : null;\n        }\n        if (NumberGuard.isFiniteOrNull(minHeight)) {\n            currentPosition.minHeight = NumberGuard.isFinite(minHeight) ? Math.round(minHeight) : null;\n        }\n        if (NumberGuard.isFiniteOrNull(minWidth)) {\n            currentPosition.minWidth = NumberGuard.isFinite(minWidth) ? Math.round(minWidth) : null;\n        }\n        // Update rotate X/Y/Z, scale, z-index\n        if (NumberGuard.isFiniteOrNull(rotateX)) {\n            currentPosition.rotateX = rotateX;\n        }\n        if (NumberGuard.isFiniteOrNull(rotateY)) {\n            currentPosition.rotateY = rotateY;\n        }\n        // Handle alias for rotateZ. First check if `rotateZ` is valid and different from the current value. Next, check\n        // if `rotation` is valid and use it for `rotateZ`.\n        if (rotateZ !== currentPosition.rotateZ && (NumberGuard.isFiniteOrNull(rotateZ))) {\n            currentPosition.rotateZ = rotateZ;\n        }\n        else if (rotation !== currentPosition.rotateZ && (NumberGuard.isFiniteOrNull(rotation))) {\n            currentPosition.rotateZ = rotation;\n        }\n        if (NumberGuard.isFiniteOrNull(translateX)) {\n            currentPosition.translateX = translateX;\n        }\n        if (NumberGuard.isFiniteOrNull(translateY)) {\n            currentPosition.translateY = translateY;\n        }\n        if (NumberGuard.isFiniteOrNull(translateZ)) {\n            currentPosition.translateZ = translateZ;\n        }\n        if (NumberGuard.isFiniteOrNull(scale)) {\n            currentPosition.scale = typeof scale === 'number' ? clamp(scale, 0, 1000) : null;\n        }\n        if (typeof transformOrigin === 'string' || transformOrigin === null) {\n            currentPosition.transformOrigin = TJSTransforms.transformOrigins.includes(transformOrigin) ? transformOrigin :\n                null;\n        }\n        if (NumberGuard.isFiniteOrNull(zIndex)) {\n            currentPosition.zIndex = typeof zIndex === 'number' ? Math.round(zIndex) : zIndex;\n        }\n        const validatorData = this.#validatorData;\n        // If there are any validators, allow them to potentially modify position data or reject the update.\n        if (this.#validators.enabled && validatorData.length) {\n            const validationData = _a.#validationData;\n            validationData.parent = parent;\n            validationData.el = el;\n            validationData.computed = styleCache.computed;\n            validationData.transforms = this.#transforms;\n            validationData.height = height;\n            validationData.width = width;\n            validationData.marginLeft = styleCache.marginLeft;\n            validationData.marginTop = styleCache.marginTop;\n            validationData.maxHeight = styleCache.maxHeight ?? currentPosition.maxHeight;\n            validationData.maxWidth = styleCache.maxWidth ?? currentPosition.maxWidth;\n            // Given a parent w/ reactive state and is minimized ignore styleCache min-width/height.\n            // TODO: THIS IS REFERENCING APPLICATION OPTIONS.\n            const isMinimized = parent?.reactive?.minimized ?? false;\n            // Note the use of || for accessing the style cache as the left hand is ignored w/ falsy values such as '0'.\n            validationData.minHeight = isMinimized ? currentPosition.minHeight ?? 0 :\n                styleCache.minHeight || (currentPosition.minHeight ?? 0);\n            validationData.minWidth = isMinimized ? currentPosition.minWidth ?? 0 :\n                styleCache.minWidth || (currentPosition.minWidth ?? 0);\n            for (let cntr = 0; cntr < validatorData.length; cntr++) {\n                validationData.position = currentPosition;\n                validationData.rest = rest;\n                currentPosition = validatorData[cntr].validate(validationData);\n                if (currentPosition === null) {\n                    return null;\n                }\n            }\n        }\n        // Return the updated position object.\n        return currentPosition;\n    }\n}\n_a = TJSPosition;\n\n/**\n * Provides an adjunct store to track an associated {@link TJSPosition} state that affects the validity of container\n * query types that perform size queries. When `width` or `height` is `auto` or `inherit` the size query containers may\n * be invalid. {@link CQPositionValidate.validate} also checks if the browser supports container queries.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_containment/Container_queries#using_container_size_queries\n */\nclass CQPositionValidate {\n    /**\n     * Associated TJSPosition.\n     */\n    #position;\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     * Unsubscriber when subscribed to backing SvelteSet.\n     */\n    #unsubscribe = [];\n    #resizeObservableHeight = false;\n    #resizeObservableWidth = false;\n    #updateStateBound;\n    /**\n     * @param [position] - Associated TJSPosition instance.\n     */\n    constructor(position) {\n        this.#updateStateBound = this.#updateState.bind(this);\n        if (position) {\n            this.setPosition(position);\n        }\n    }\n    /**\n     * Manually destroy and cleanup associations to any subscribers and TJSPosition instance.\n     */\n    destroy() {\n        this.#cleanup();\n    }\n    /**\n     * Returns the associated TJSPosition instance.\n     */\n    getPosition() {\n        return this.#deref();\n    }\n    /**\n     * Set a new TJSPosition instance to monitor.\n     *\n     * @param position - New TJSPosition instance to associate.\n     */\n    setPosition(position) {\n        const current = this.#deref();\n        if (position === current) {\n            return;\n        }\n        this.#cleanup();\n        this.#position = void 0;\n        if (position instanceof TJSPosition) {\n            this.#position = new WeakRef(position);\n            if (this.#subscribers.length) {\n                this.#unsubscribe.push(position.stores.resizeObservableHeight.subscribe(this.#updateStateBound));\n                this.#unsubscribe.push(position.stores.resizeObservableWidth.subscribe(this.#updateStateBound));\n            }\n        }\n    }\n    /**\n     * Returns the serialized state tracking supported container types.\n     */\n    toJSON() {\n        return {\n            inlineSize: !this.#resizeObservableWidth,\n            normal: true,\n            size: !this.#resizeObservableWidth && !this.#resizeObservableHeight\n        };\n    }\n    /**\n     * @param cqType - The container query type to validate against current associated {@link TJSPosition} state.\n     *\n     * @returns Whether the browser and associated TJSPosition current state supports the requested container query type.\n     */\n    validate(cqType) {\n        if (!BrowserSupports.containerQueries) {\n            return false;\n        }\n        const hasPosition = this.#deref() !== void 0;\n        switch (cqType) {\n            case 'inline-size':\n                return hasPosition && !this.#resizeObservableWidth;\n            case 'normal':\n                return true;\n            case 'size':\n                return hasPosition && !this.#resizeObservableWidth && !this.#resizeObservableHeight;\n        }\n        return false;\n    }\n    // Store subscriber implementation --------------------------------------------------------------------------------\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((sub) => sub === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            if (this.#subscribers.length === 1) {\n                const position = this.#deref();\n                if (position) {\n                    this.#unsubscribe.push(position.stores.resizeObservableHeight.subscribe(this.#updateStateBound));\n                    this.#unsubscribe.push(position.stores.resizeObservableWidth.subscribe(this.#updateStateBound));\n                }\n            }\n            handler(this);\n        }\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index >= 0) {\n                this.#subscribers.splice(index, 1);\n                if (this.#subscribers.length === 0) {\n                    this.#cleanup();\n                }\n            }\n        };\n    }\n    // Internal Implementation ----------------------------------------------------------------------------------------\n    #cleanup(notify = false) {\n        for (const unsubscribe of this.#unsubscribe) {\n            unsubscribe();\n        }\n        this.#unsubscribe.length = 0;\n        this.#resizeObservableHeight = false;\n        this.#resizeObservableWidth = false;\n        if (notify) {\n            this.#updateSubscribers();\n        }\n    }\n    #deref() {\n        const position = this.#position?.deref();\n        if (!position) {\n            this.#cleanup(true);\n        }\n        return position;\n    }\n    #updateState() {\n        const position = this.#deref();\n        if (position) {\n            this.#resizeObservableHeight = position.resizeObservableHeight;\n            this.#resizeObservableWidth = position.resizeObservableWidth;\n        }\n        this.#updateSubscribers();\n    }\n    /**\n     * Updates subscribers.\n     */\n    #updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this);\n        }\n    }\n}\n\nexport { CQPositionValidate, TJSPosition, applyPosition, draggable };\n//# sourceMappingURL=index.js.map\n","import { PUBLIC_VERSION } from '../../../shared/version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION);\n","import { cubicOut, cubicInOut, linear } from '../easing/index.js';\nimport { assign, split_css_unit, is_function } from '../internal/index.js';\n\n/**\n * Animates a `blur` filter alongside an element's opacity.\n *\n * https://svelte.dev/docs/svelte-transition#blur\n * @param {Element} node\n * @param {import('./public').BlurParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function blur(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicInOut, amount = 5, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst f = style.filter === 'none' ? '' : style.filter;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [value, unit] = split_css_unit(amount);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `opacity: ${target_opacity - od * u}; filter: ${f} blur(${u * value}${unit});`\n\t};\n}\n\n/**\n * Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions.\n *\n * https://svelte.dev/docs/svelte-transition#fade\n * @param {Element} node\n * @param {import('./public').FadeParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n\tconst o = +getComputedStyle(node).opacity;\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) => `opacity: ${t * o}`\n\t};\n}\n\n/**\n * Animates the x and y positions and the opacity of an element. `in` transitions animate from the provided values, passed as parameters to the element's default values. `out` transitions animate from the element's default values to the provided values.\n *\n * https://svelte.dev/docs/svelte-transition#fly\n * @param {Element} node\n * @param {import('./public').FlyParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function fly(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [xValue, xUnit] = split_css_unit(x);\n\tconst [yValue, yUnit] = split_css_unit(y);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * xValue}${xUnit}, ${(1 - t) * yValue}${yUnit});\n\t\t\topacity: ${target_opacity - od * u}`\n\t};\n}\n\n/**\n * Slides an element in and out.\n *\n * https://svelte.dev/docs/svelte-transition#slide\n * @param {Element} node\n * @param {import('./public').SlideParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = 'y' } = {}) {\n\tconst style = getComputedStyle(node);\n\tconst opacity = +style.opacity;\n\tconst primary_property = axis === 'y' ? 'height' : 'width';\n\tconst primary_property_value = parseFloat(style[primary_property]);\n\tconst secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n\tconst capitalized_secondary_properties = secondary_properties.map(\n\t\t(e) => `${e[0].toUpperCase()}${e.slice(1)}`\n\t);\n\tconst padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n\tconst padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n\tconst margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n\tconst margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n\tconst border_width_start_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[0]}Width`]\n\t);\n\tconst border_width_end_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[1]}Width`]\n\t);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) =>\n\t\t\t'overflow: hidden;' +\n\t\t\t`opacity: ${Math.min(t * 20, 1) * opacity};` +\n\t\t\t`${primary_property}: ${t * primary_property_value}px;` +\n\t\t\t`padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n\t\t\t`padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n\t\t\t`margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n\t\t\t`margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n\t\t\t`border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n\t\t\t`border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;`\n\t};\n}\n\n/**\n * Animates the opacity and scale of an element. `in` transitions animate from an element's current (default) values to the provided values, passed as parameters. `out` transitions animate from the provided values to an element's default values.\n *\n * https://svelte.dev/docs/svelte-transition#scale\n * @param {Element} node\n * @param {import('./public').ScaleParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function scale(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst sd = 1 - start;\n\tconst od = target_opacity * (1 - opacity);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - sd * u});\n\t\t\topacity: ${target_opacity - od * u}\n\t\t`\n\t};\n}\n\n/**\n * Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`.\n *\n * https://svelte.dev/docs/svelte-transition#draw\n * @param {SVGElement & { getTotalLength(): number }} node\n * @param {import('./public').DrawParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function draw(node, { delay = 0, speed, duration, easing = cubicInOut } = {}) {\n\tlet len = node.getTotalLength();\n\tconst style = getComputedStyle(node);\n\tif (style.strokeLinecap !== 'butt') {\n\t\tlen += parseInt(style.strokeWidth);\n\t}\n\tif (duration === undefined) {\n\t\tif (speed === undefined) {\n\t\t\tduration = 800;\n\t\t} else {\n\t\t\tduration = len / speed;\n\t\t}\n\t} else if (typeof duration === 'function') {\n\t\tduration = duration(len);\n\t}\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_, u) => `\n\t\t\tstroke-dasharray: ${len};\n\t\t\tstroke-dashoffset: ${u * len};\n\t\t`\n\t};\n}\n\n/**\n * The `crossfade` function creates a pair of [transitions](https://svelte.dev/docs#template-syntax-element-directives-transition-fn) called `send` and `receive`. When an element is 'sent', it looks for a corresponding element being 'received', and generates a transition that transforms the element to its counterpart's position and fades it out. When an element is 'received', the reverse happens. If there is no counterpart, the `fallback` transition is used.\n *\n * https://svelte.dev/docs/svelte-transition#crossfade\n * @param {import('./public').CrossfadeParams & {\n * \tfallback?: (node: Element, params: import('./public').CrossfadeParams, intro: boolean) => import('./public').TransitionConfig;\n * }} params\n * @returns {[(node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig, (node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig]}\n */\nexport function crossfade({ fallback, ...defaults }) {\n\t/** @type {Map<any, Element>} */\n\tconst to_receive = new Map();\n\t/** @type {Map<any, Element>} */\n\tconst to_send = new Map();\n\t/**\n\t * @param {Element} from_node\n\t * @param {Element} node\n\t * @param {import('./public').CrossfadeParams} params\n\t * @returns {import('./public').TransitionConfig}\n\t */\n\tfunction crossfade(from_node, node, params) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = (d) => Math.sqrt(d) * 30,\n\t\t\teasing = cubicOut\n\t\t} = assign(assign({}, defaults), params);\n\t\tconst from = from_node.getBoundingClientRect();\n\t\tconst to = node.getBoundingClientRect();\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\t\tconst dw = from.width / to.width;\n\t\tconst dh = from.height / to.height;\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\t\tconst style = getComputedStyle(node);\n\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\t\tconst opacity = +style.opacity;\n\t\treturn {\n\t\t\tdelay,\n\t\t\tduration: is_function(duration) ? duration(d) : duration,\n\t\t\teasing,\n\t\t\tcss: (t, u) => `\n\t\t\t\topacity: ${t * opacity};\n\t\t\t\ttransform-origin: top left;\n\t\t\t\ttransform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${\n\t\t\t\tt + (1 - t) * dh\n\t\t\t});\n\t\t\t`\n\t\t};\n\t}\n\n\t/**\n\t * @param {Map<any, Element>} items\n\t * @param {Map<any, Element>} counterparts\n\t * @param {boolean} intro\n\t * @returns {(node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig}\n\t */\n\tfunction transition(items, counterparts, intro) {\n\t\treturn (node, params) => {\n\t\t\titems.set(params.key, node);\n\t\t\treturn () => {\n\t\t\t\tif (counterparts.has(params.key)) {\n\t\t\t\t\tconst other_node = counterparts.get(params.key);\n\t\t\t\t\tcounterparts.delete(params.key);\n\t\t\t\t\treturn crossfade(other_node, node, params);\n\t\t\t\t}\n\t\t\t\t// if the node is disappearing altogether\n\t\t\t\t// (i.e. wasn't claimed by the other list)\n\t\t\t\t// then we need to supply an outro\n\t\t\t\titems.delete(params.key);\n\t\t\t\treturn fallback && fallback(node, params, intro);\n\t\t\t};\n\t\t};\n\t}\n\treturn [transition(to_send, to_receive, false), transition(to_receive, to_send, true)];\n}\n","/**\n * Returns the given URL string with any route prefix applied.\n *\n * @param {string}   url - Bare URL string path.\n *\n * @returns {string} URL with added route prefix.\n */\nfunction getRoutePrefix(url)\n{\n   return globalThis.foundry.utils.getRoute(url);\n}\n\nexport { getRoutePrefix };\n//# sourceMappingURL=index.js.map\n","/**\n * Defines the default TRL cursor CSS variables used across the framework.\n *\n * @type {{ [key: string]: string }}\n */\nexport const cursorCSSVariables = {\n   '--tjs-cursor-all-scroll': 'all-scroll',\n   '--tjs-cursor-all-scroll-down': 'all-scroll',\n\n   '--tjs-cursor-alias': 'alias',\n   '--tjs-cursor-alias-down': 'alias',\n\n   '--tjs-cursor-cell': 'cell',\n   '--tjs-cursor-cell-down': 'cell',\n\n   '--tjs-cursor-copy': 'copy',\n   '--tjs-cursor-copy-down': 'copy',\n\n   '--tjs-cursor-context-menu': 'context-menu',\n   '--tjs-cursor-context-menu-down': 'context-menu',\n\n   '--tjs-cursor-crosshair': 'crosshair',\n   '--tjs-cursor-crosshair-down': 'crosshair',\n\n   '--tjs-cursor-default': 'default',\n   '--tjs-cursor-default-down': 'default',\n\n   '--tjs-cursor-grab': 'grab',\n   '--tjs-cursor-grab-down': 'var(--tjs-cursor-grabbing, grabbing)',\n\n   '--tjs-cursor-grabbing': 'grabbing',\n   '--tjs-cursor-grabbing-down': 'grabbing',\n\n   '--tjs-cursor-help': 'help',\n   '--tjs-cursor-help-down': 'help',\n\n   '--tjs-cursor-pointer': 'pointer',\n   '--tjs-cursor-pointer-down': 'pointer',\n\n   '--tjs-cursor-move': 'move',\n   '--tjs-cursor-move-down': 'move',\n\n   '--tjs-cursor-no-drop': 'no-drop',\n   '--tjs-cursor-no-drop-down': 'no-drop',\n\n   '--tjs-cursor-not-allowed': 'not-allowed',\n   '--tjs-cursor-not-allowed-down': 'not-allowed',\n\n   '--tjs-cursor-progress': 'progress',\n   '--tjs-cursor-progress-down': 'progress',\n\n   '--tjs-cursor-resize-col': 'col-resize',\n   '--tjs-cursor-resize-col-down': 'col-resize',\n\n   '--tjs-cursor-resize-e': 'e-resize',\n   '--tjs-cursor-resize-e-down': 'e-resize',\n\n   '--tjs-cursor-resize-ew': 'ew-resize',\n   '--tjs-cursor-resize-ew-down': 'ew-resize',\n\n   '--tjs-cursor-resize-n': 'n-resize',\n   '--tjs-cursor-resize-n-down': 'n-resize',\n\n   '--tjs-cursor-resize-ne': 'ne-resize',\n   '--tjs-cursor-resize-ne-down': 'ne-resize',\n\n   '--tjs-cursor-resize-nesw': 'nesw-resize',\n   '--tjs-cursor-resize-nesw-down': 'nesw-resize',\n\n   '--tjs-cursor-resize-ns': 'ns-resize',\n   '--tjs-cursor-resize-ns-down': 'ns-resize',\n\n   '--tjs-cursor-resize-nw': 'nw-resize',\n   '--tjs-cursor-resize-nw-down': 'nw-resize',\n\n   '--tjs-cursor-resize-nwse': 'nwse-resize',\n   '--tjs-cursor-resize-nwse-down': 'nwse-resize',\n\n   '--tjs-cursor-resize-row': 'row-resize',\n   '--tjs-cursor-resize-row-down': 'row-resize',\n\n   '--tjs-cursor-resize-s': 's-resize',\n   '--tjs-cursor-resize-s-down': 's-resize',\n\n   '--tjs-cursor-resize-se': 'se-resize',\n   '--tjs-cursor-resize-se-down': 'se-resize',\n\n   '--tjs-cursor-resize-sw': 'sw-resize',\n   '--tjs-cursor-resize-sw-down': 'sw-resize',\n\n   '--tjs-cursor-resize-w': 'w-resize',\n   '--tjs-cursor-resize-w-down': 'w-resize',\n\n   '--tjs-cursor-text': 'text',\n   '--tjs-cursor-text-down': 'text',\n\n   '--tjs-cursor-text-vertical': 'vertical-text',\n   '--tjs-cursor-text-vertical-down': 'vertical-text',\n\n   '--tjs-cursor-wait': 'wait',\n   '--tjs-cursor-wait-down': 'wait',\n\n   '--tjs-cursor-zoom-in': 'zoom-in',\n   '--tjs-cursor-zoom-in-down': 'zoom-in',\n\n   '--tjs-cursor-zoom-out': 'zoom-out',\n   '--tjs-cursor-zoom-out-down': 'zoom-out',\n};\n","/**\n * Provides shared logic to automatically set a SvelteApp / AppV1 theme from app options / `classes`.\n */\nexport class FVTTAppTheme\n{\n   /**\n    * Generate all app classes with applied core or explicitly set theme.\n    *\n    * @param {Set<string>} activeClasses - Active app classes Set.\n    *\n    * @param {string} coreTheme - Current core theme class.\n    *\n    * @param {string} appThemeName - Any explicitly set app theme name override.\n    *\n    * @returns {string} All app classes.\n    */\n   static appClasses(activeClasses, coreTheme, appThemeName)\n   {\n      const classes = new Set(activeClasses);\n\n      // In AppV1 `theme-light` is always applied. Remove any theme classes.\n      for (const entry of classes)\n      {\n         if (entry.startsWith('theme-')) { classes.delete(entry); }\n      }\n\n      classes.add('themed');\n      classes.add(appThemeName ? `theme-${appThemeName}` : coreTheme);\n\n      return Array.from(classes).join(' ');\n   }\n}\n","import { FoundryStyles }      from '@typhonjs-fvtt/runtime/svelte/application';\n\nimport {\n   StyleParse,\n   StyleManager }             from '@typhonjs-fvtt/runtime/util/dom/style';\n\nimport { getRoutePrefix }     from '@typhonjs-fvtt/runtime/util/path';\n\nimport { cursorCSSVariables } from './data';\n\n/**\n * Provides global CSS variable configuration based on Foundry styles loaded.\n */\nexport class FVTTConfigure\n{\n   static #initialized = false;\n\n   static initialize()\n   {\n      if (this.#initialized) { return; }\n\n      const manager = StyleManager.create({\n         id: '__tjs-runtime-vars',\n         version: '0.1.1',\n         layerName: 'variables.tjs-runtime-vars',\n         rules: {\n            themeDark: 'body, .themed.theme-dark',\n            themeLight: '.themed.theme-light'\n         }\n      });\n\n      // Early out if the style manager version is outdated.\n      if (!manager?.isConnected)\n      {\n         this.#initialized = true;\n         return;\n      }\n\n      this.#initialized = true;\n\n      // Remove `0.2.x` and below root styles. -- TODO: REMOVE AT `0.5.0`\n      document?.['#__trl-root-styles']?.remove?.();\n\n      const themeDarkRoot = manager.get('themeDark');\n      const themeLight = manager.get('themeLight');\n\n      // On `ready` hook evaluate top level `<html>` element for core inline style overrides.\n      Hooks.once('ready', () => this.#setCoreInlineStyles(themeDarkRoot));\n\n      // Set all default TJS cursor CSS variables.\n      themeDarkRoot.setProperties(cursorCSSVariables);\n\n      // Configure app CSS variables.\n      this.#app(themeDarkRoot, themeLight);\n\n      Hooks.on('PopOut:loading', (app, popout) =>\n      {\n         // Clone and load the `runtime` library CSS variables into the new window document regardless of the app type.\n         popout.document.addEventListener('DOMContentLoaded',\n            () => manager.clone({ document: popout.document, force: true }));\n      });\n   }\n\n   /**\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeDarkRoot -\n    *\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeLight -\n    */\n   static #app(themeDarkRoot, themeLight)\n   {\n      const opts = { camelCase: true };\n\n      // Core does not distinguish between dark / light themes.\n      const propsApp = FoundryStyles.ext.get('.application', opts);\n      const propsAppDark = FoundryStyles.ext.get('.application', { ...opts, resolve: [\n       '.themed.theme-dark .application'] });\n\n      const propsAppHeader = FoundryStyles.ext.get('.application .window-header', { ...opts, resolve: [\n       '.application', '.themed.theme-dark .application'] });\n\n      const propsAppHeaderBtn = FoundryStyles.ext.get('.application .window-header button.header-control', opts);\n      const propsAppHandle = FoundryStyles.ext.get('.application .window-resize-handle', opts);\n\n      const propsAppHandleDark = FoundryStyles.ext.get('.themed.theme-dark.application .window-resize-handle', opts);\n\n      const propsBody = FoundryStyles.ext.get('body', opts);\n\n      /**\n       * Provides default CSS variables for core components.\n       */\n      themeDarkRoot.setProperties({\n         // `:root` properties applying to all themes ----------------------------------------------------------------\n\n         // For `TJSApplicationShell.svelte` app background.\n         '--tjs-app-background': `url(${getRoutePrefix('/ui/denim075.png')})`,\n         '--tjs-app-color': propsApp?.color ?? 'var(--color-text-primary)',\n         '--tjs-app-font-family': propsBody?.fontFamily ?? 'var(--font-body)',\n         '--tjs-app-font-size': propsApp?.fontSize ?? 'var(--font-size-14)',\n\n         // For `TJSApplicationHeader.svelte`\n         '--tjs-app-header-flex': propsAppHeader?.flex ?? '0 0 var(--header-height)',\n         '--tjs-app-header-font-size': propsAppHeader?.fontSize ?? 'var(--font-size-13)',\n         '--tjs-app-header-height': propsApp?.['--header-height'] ?? '36px',\n\n         // For `TJSHeaderButton.svelte / core only provides one set of properties across themes.\n         '--tjs-app-header-button-border': propsAppHeaderBtn?.border ?? 'none',\n         '--tjs-app-header-button-margin': propsAppHeaderBtn?.margin ?? '0',\n         '--tjs-app-header-button-size': propsAppHeaderBtn?.['--button-size'] ?? '1.5rem',\n         '--tjs-app-header-button-color': propsAppHeaderBtn?.['--button-text-color'] ?? 'var(--color-light-1)',\n\n         // For `ResizeHandle.svelte` / the resize handle.\n         '--tjs-app-resize-handle-background': propsAppHandle?.background ??\n          `url(${getRoutePrefix('/ui/resize-handle.webp')}) center center / contain no-repeat transparent`,\n\n         '--tjs-app-resize-handle-inset': propsAppHandle?.inset ?? 'auto 1px 1px auto',\n         '--tjs-app-resize-handle-position': propsAppHandle?.position ?? 'absolute',\n         '--tjs-app-resize-handle-height': propsAppHandle?.height ?? '11x',\n         '--tjs-app-resize-handle-width': propsAppHandle?.width ?? '11px',\n\n         // Explicit dark theme properties ---------------------------------------------------------------------------\n\n         // For `TJSApplicationShell.svelte`.\n         '--tjs-app-border': propsAppDark?.border ?? '1px solid var(--color-cool-4)',\n\n         // For `TJSApplicationHeader.svelte\n         '--tjs-app-header-background': propsAppHeader?.background ?? 'rgba(0, 0, 0, 0.5)',\n         '--tjs-app-header-border-bottom': propsAppHeader?.borderBottom ?? '1px solid var(--color-cool-4)',\n         '--tjs-app-header-color': propsAppHeader?.color ?? 'var(--color-light-1)',\n\n         // For `ResizeHandle.svelte` / invert the resize handle.\n         '--tjs-app-resize-handle-filter': propsAppHandleDark?.filter ?? 'invert(1)'\n      });\n\n      const propsAppLight = FoundryStyles.ext.get('.application', {\n         camelCase: true,\n         resolve: 'body.theme-light .application'\n      });\n\n      const propsAppHeaderLight = FoundryStyles.ext.get('.application .window-header', {\n         camelCase: true,\n         resolve: 'body.theme-light .application'\n      });\n\n      /**\n       * Explicit light theme properties.\n       */\n      themeLight.setProperties({\n         // For `TJSApplicationShell.svelte`.\n         '--tjs-app-border': propsAppLight?.border ?? '1px solid var(--color-cool-4)',\n\n         // For `TJSApplicationHeader.svelte`\n         '--tjs-app-header-background': propsAppHeaderLight?.background ?? 'var(--color-dark-3)',\n         '--tjs-app-header-border-bottom': propsAppHeaderLight?.borderBottom ?? '1px solid green', // '1px solid var(--color-cool-4)',\n\n         // For `ResizeHandle.svelte` / cancel invert of the resize handle / there is no core style to set.\n         '--tjs-app-resize-handle-filter': 'none'\n      });\n   }\n\n   /**\n    * Sets any top level inline styles to TRL CSS variables defined in root `<html>` element by Foundry or game system\n    * override.\n    *\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}   ruleManager - Target rule manager.\n    */\n   static #setCoreInlineStyles(ruleManager)\n   {\n      const htmlStyles = StyleParse.cssText(document.documentElement.style.cssText);\n\n      for (const key in htmlStyles)\n      {\n         // Copy over any `--cursor` CSS vars to TRL cursor vars.\n         if (key.startsWith('--cursor-'))\n         {\n            const tjsCursorKey = key.replace(/^--cursor-/, '--tjs-cursor-');\n\n            if (ruleManager.hasProperty(tjsCursorKey)) { ruleManager.setProperty(tjsCursorKey, htmlStyles[key]); }\n         }\n      }\n   }\n}\n","import { isWritableStore } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { StyleParse } from '@typhonjs-fvtt/runtime/util/dom/style';\nimport { isObject } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\r\n * Provides an instance of {@link ResizeObserver} that can manage multiple elements and notify a wide range of\r\n * {@link ResizeObserverData.ResizeTarget} listeners. Offset width and height is also provided through caching the\r\n * margin and padding styles of the target element.\r\n *\r\n * The action, {@link resizeObserver}, utilizes ResizeObserverManager for automatic registration and removal\r\n * via Svelte.\r\n */\r\nclass ResizeObserverManager\r\n{\r\n   /** @type {Map<HTMLElement, import('./types-local').ResizeObserverSubscriber[]>} */\r\n   #elMap = new Map();\r\n\r\n   /** @type {ResizeObserver} */\r\n   #resizeObserver;\r\n\r\n   /**\r\n    * Defines the various shape / update type of the given target.\r\n    *\r\n    * @type {{ [key: string]: number }}\r\n    */\r\n   static #updateTypes = Object.freeze({\r\n      none: 0,\r\n      attribute: 1,\r\n      function: 2,\r\n      resizeObserved: 3,\r\n      setContentBounds: 4,\r\n      setDimension: 5,\r\n      storeObject: 6,\r\n      storesObject: 7\r\n   });\r\n\r\n   constructor()\r\n   {\r\n      this.#resizeObserver = new ResizeObserver((entries) =>\r\n      {\r\n         for (const entry of entries)\r\n         {\r\n            const subscribers = this.#elMap.get(entry?.target);\r\n\r\n            if (Array.isArray(subscribers))\r\n            {\r\n               const contentWidth = entry.contentRect.width;\r\n               const contentHeight = entry.contentRect.height;\r\n\r\n               for (const subscriber of subscribers)\r\n               {\r\n                  ResizeObserverManager.#updateSubscriber(subscriber, contentWidth, contentHeight);\r\n               }\r\n            }\r\n         }\r\n      });\r\n   }\r\n\r\n   /**\r\n    * Add an {@link HTMLElement} and {@link ResizeObserverData.ResizeTarget} instance for monitoring. Create cached\r\n    * style attributes for the given element include border & padding dimensions for offset width / height calculations.\r\n    *\r\n    * @param {HTMLElement}    el - The element to observe.\r\n    *\r\n    * @param {import('./types').ResizeObserverData.ResizeTarget} target - A target that contains one of several\r\n    *        mechanisms for updating resize data.\r\n    */\r\n   add(el, target)\r\n   {\r\n      if (!CrossWindow.isHTMLElement(el))\r\n      {\r\n         throw new TypeError(`ResizeObserverManager.add error: 'el' is not a HTMLElement.`);\r\n      }\r\n\r\n      // Verify that this target is not already added for this element.\r\n      if (this.#hasTarget(el, target)) { return; }\r\n\r\n      const updateType = ResizeObserverManager.#getUpdateType(target);\r\n\r\n      if (updateType === 0)\r\n      {\r\n         throw new Error(`ResizeObserverManager.add error: 'target' is not a valid ResizeObserverManager target.`);\r\n      }\r\n\r\n      const computed = globalThis.getComputedStyle(el);\r\n\r\n      // Cache styles first from any inline styles then computed styles defaulting to 0 otherwise.\r\n      // Used to create the offset width & height values from the context box ResizeObserver provides.\r\n      const borderBottom = StyleParse.pixels(el.style.borderBottom) ?? StyleParse.pixels(computed.borderBottom) ?? 0;\r\n      const borderLeft = StyleParse.pixels(el.style.borderLeft) ?? StyleParse.pixels(computed.borderLeft) ?? 0;\r\n      const borderRight = StyleParse.pixels(el.style.borderRight) ?? StyleParse.pixels(computed.borderRight) ?? 0;\r\n      const borderTop = StyleParse.pixels(el.style.borderTop) ?? StyleParse.pixels(computed.borderTop) ?? 0;\r\n      const paddingBottom = StyleParse.pixels(el.style.paddingBottom) ?? StyleParse.pixels(computed.paddingBottom) ?? 0;\r\n      const paddingLeft = StyleParse.pixels(el.style.paddingLeft) ?? StyleParse.pixels(computed.paddingLeft) ?? 0;\r\n      const paddingRight = StyleParse.pixels(el.style.paddingRight) ?? StyleParse.pixels(computed.paddingRight) ?? 0;\r\n      const paddingTop = StyleParse.pixels(el.style.paddingTop) ?? StyleParse.pixels(computed.paddingTop) ?? 0;\r\n\r\n      /** @type {import('./types-local').ResizeObserverSubscriber} */\r\n      const data = {\r\n         updateType,\r\n         target,\r\n\r\n         // Stores most recent contentRect.width and contentRect.height values from ResizeObserver.\r\n         contentWidth: 0,\r\n         contentHeight: 0,\r\n\r\n         // Convenience data for total border & padding for offset width & height calculations.\r\n         styles: {\r\n            additionalWidth: borderLeft + borderRight + paddingLeft + paddingRight,\r\n            additionalHeight: borderTop + borderBottom + paddingTop + paddingBottom\r\n         }\r\n      };\r\n\r\n      if (this.#elMap.has(el))\r\n      {\r\n         const subscribers = this.#elMap.get(el);\r\n         subscribers.push(data);\r\n      }\r\n      else\r\n      {\r\n         this.#elMap.set(el, [data]);\r\n      }\r\n\r\n      this.#resizeObserver.observe(el);\r\n   }\r\n\r\n   /**\r\n    * Clears and unobserves all currently tracked elements and managed targets.\r\n    */\r\n   clear()\r\n   {\r\n      for (const el of this.#elMap.keys()) { this.#resizeObserver.unobserve(el); }\r\n\r\n      this.#elMap.clear();\r\n   }\r\n\r\n   /**\r\n    * Removes all {@link ResizeObserverData.ResizeTarget} instances for the given element from monitoring when just an\r\n    * element is provided otherwise removes a specific target from the monitoring map. If no more targets remain then\r\n    * the element is removed from monitoring.\r\n    *\r\n    * @param {HTMLElement} el - Element to remove from monitoring.\r\n    *\r\n    * @param {import('./types').ResizeObserverData.ResizeTarget} [target] - A specific target to remove from monitoring.\r\n    */\r\n   remove(el, target = void 0)\r\n   {\r\n      const subscribers = this.#elMap.get(el);\r\n      if (Array.isArray(subscribers))\r\n      {\r\n         // Remove specific target from subscribers.\r\n         if (target !== void 0)\r\n         {\r\n            const index = subscribers.findIndex((entry) => entry.target === target);\r\n            if (index >= 0)\r\n            {\r\n               subscribers.splice(index, 1);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            // Remove all subscribers.\r\n            subscribers.length = 0;\r\n         }\r\n\r\n         // Remove element monitoring if last target removed.\r\n         if (subscribers.length === 0)\r\n         {\r\n            this.#elMap.delete(el);\r\n            this.#resizeObserver.unobserve(el);\r\n         }\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Provides a function that when invoked with an element updates the cached styles for each subscriber of the\r\n    * element.\r\n    *\r\n    * The style attributes cached to calculate offset height / width include border & padding dimensions. You only need\r\n    * to update the cache if you change border or padding attributes of the element.\r\n    *\r\n    * @param {HTMLElement} el - A HTML element.\r\n    */\r\n   updateCache(el)\r\n   {\r\n      const subscribers = this.#elMap.get(el);\r\n\r\n      if (Array.isArray(subscribers))\r\n      {\r\n         const computed = globalThis.getComputedStyle(el);\r\n\r\n         // Cache styles first from any inline styles then computed styles defaulting to 0 otherwise.\r\n         // Used to create the offset width & height values from the context box ResizeObserver provides.\r\n         const borderBottom = StyleParse.pixels(el.style.borderBottom) ?? StyleParse.pixels(computed.borderBottom) ?? 0;\r\n         const borderLeft = StyleParse.pixels(el.style.borderLeft) ?? StyleParse.pixels(computed.borderLeft) ?? 0;\r\n         const borderRight = StyleParse.pixels(el.style.borderRight) ?? StyleParse.pixels(computed.borderRight) ?? 0;\r\n         const borderTop = StyleParse.pixels(el.style.borderTop) ?? StyleParse.pixels(computed.borderTop) ?? 0;\r\n         const paddingBottom = StyleParse.pixels(el.style.paddingBottom) ??\r\n          StyleParse.pixels(computed.paddingBottom) ?? 0;\r\n         const paddingLeft = StyleParse.pixels(el.style.paddingLeft) ?? StyleParse.pixels(computed.paddingLeft) ?? 0;\r\n         const paddingRight = StyleParse.pixels(el.style.paddingRight) ?? StyleParse.pixels(computed.paddingRight) ?? 0;\r\n         const paddingTop = StyleParse.pixels(el.style.paddingTop) ?? StyleParse.pixels(computed.paddingTop) ?? 0;\r\n\r\n         const additionalWidth = borderLeft + borderRight + paddingLeft + paddingRight;\r\n         const additionalHeight = borderTop + borderBottom + paddingTop + paddingBottom;\r\n\r\n         for (const subscriber of subscribers)\r\n         {\r\n            subscriber.styles.additionalWidth = additionalWidth;\r\n            subscriber.styles.additionalHeight = additionalHeight;\r\n            ResizeObserverManager.#updateSubscriber(subscriber, subscriber.contentWidth, subscriber.contentHeight);\r\n         }\r\n      }\r\n   }\r\n\r\n   // Internal implementation ----------------------------------------------------------------------------------------\r\n\r\n   /**\r\n    * Determines the shape of the target instance regarding valid update mechanisms to set width & height changes.\r\n    *\r\n    * @param {import('./types').ResizeObserverData.ResizeTarget}  target - The target instance.\r\n    *\r\n    * @returns {number} Update type value.\r\n    */\r\n   static #getUpdateType(target)\r\n   {\r\n      if (typeof target?.resizeObserved === 'function') { return this.#updateTypes.resizeObserved; }\r\n      if (typeof target?.setDimension === 'function') { return this.#updateTypes.setDimension; }\r\n      if (typeof target?.setContentBounds === 'function') { return this.#updateTypes.setContentBounds; }\r\n\r\n      const targetType = typeof target;\r\n\r\n      // Does the target have resizeObserved writable store?\r\n      if (targetType !== null && (targetType === 'object' || targetType === 'function'))\r\n      {\r\n         if (isWritableStore(target.resizeObserved))\r\n         {\r\n            return this.#updateTypes.storeObject;\r\n         }\r\n\r\n         // Now check for a child stores object which is a common TRL pattern for exposing stores.\r\n         const stores = target?.stores;\r\n         if (isObject(stores) || typeof stores === 'function')\r\n         {\r\n            if (isWritableStore(stores.resizeObserved))\r\n            {\r\n               return this.#updateTypes.storesObject;\r\n            }\r\n         }\r\n      }\r\n\r\n      if (targetType !== null && targetType === 'object') { return this.#updateTypes.attribute; }\r\n\r\n      if (targetType === 'function') { return this.#updateTypes.function; }\r\n\r\n      return this.#updateTypes.none;\r\n   }\r\n\r\n   /**\r\n    * Determines if a given element and target is already being observed.\r\n    *\r\n    * @param {HTMLElement} el - A HTMLElement.\r\n    *\r\n    * @param {import('./types').ResizeObserverData.ResizeTarget} [target] - A specific target to find.\r\n    *\r\n    * @returns {boolean} Whether the target is already being tracked for the given element.\r\n    */\r\n   #hasTarget(el, target)\r\n   {\r\n      if (target === void 0 || target === null) { return false; }\r\n\r\n      const subscribers = this.#elMap.get(el);\r\n      if (Array.isArray(subscribers))\r\n      {\r\n         return subscribers.findIndex((entry) => entry.target === target) >= 0;\r\n      }\r\n\r\n      return false;\r\n   }\r\n\r\n   /**\r\n    * Updates a subscriber target with given content width & height values. Offset width & height is calculated from\r\n    * the content values + cached styles.\r\n    *\r\n    * @param {import('./types-local').ResizeObserverSubscriber} subscriber - Internal data about subscriber.\r\n    *\r\n    * @param {number|undefined}  contentWidth - ResizeObserver `contentRect.width` value or undefined.\r\n    *\r\n    * @param {number|undefined}  contentHeight - ResizeObserver `contentRect.height` value or undefined.\r\n    */\r\n   static #updateSubscriber(subscriber, contentWidth, contentHeight)\r\n   {\r\n      const styles = subscriber.styles;\r\n\r\n      subscriber.contentWidth = contentWidth;\r\n      subscriber.contentHeight = contentHeight;\r\n\r\n      const offsetWidth = Number.isFinite(contentWidth) ? contentWidth + styles.additionalWidth : void 0;\r\n      const offsetHeight = Number.isFinite(contentHeight) ? contentHeight + styles.additionalHeight : void 0;\r\n\r\n      const target = subscriber.target;\r\n\r\n      switch (subscriber.updateType)\r\n      {\r\n         case this.#updateTypes.attribute:\r\n            target.contentWidth = contentWidth;\r\n            target.contentHeight = contentHeight;\r\n            target.offsetWidth = offsetWidth;\r\n            target.offsetHeight = offsetHeight;\r\n            break;\r\n\r\n         case this.#updateTypes.function:\r\n            target?.(offsetWidth, offsetHeight, contentWidth, contentHeight);\r\n            break;\r\n\r\n         case this.#updateTypes.resizeObserved:\r\n            target.resizeObserved?.(offsetWidth, offsetHeight, contentWidth, contentHeight);\r\n            break;\r\n\r\n         case this.#updateTypes.setContentBounds:\r\n            target.setContentBounds?.(contentWidth, contentHeight);\r\n            break;\r\n\r\n         case this.#updateTypes.setDimension:\r\n            target.setDimension?.(offsetWidth, offsetHeight);\r\n            break;\r\n\r\n         case this.#updateTypes.storeObject:\r\n            target.resizeObserved.update((object) =>\r\n            {\r\n               object.contentHeight = contentHeight;\r\n               object.contentWidth = contentWidth;\r\n               object.offsetHeight = offsetHeight;\r\n               object.offsetWidth = offsetWidth;\r\n\r\n               return object;\r\n            });\r\n            break;\r\n\r\n         case this.#updateTypes.storesObject:\r\n            target.stores.resizeObserved.update((object) =>\r\n            {\r\n               object.contentHeight = contentHeight;\r\n               object.contentWidth = contentWidth;\r\n               object.offsetHeight = offsetHeight;\r\n               object.offsetWidth = offsetWidth;\r\n\r\n               return object;\r\n            });\r\n            break;\r\n      }\r\n   }\r\n}\n\nexport { ResizeObserverManager };\n//# sourceMappingURL=index.js.map\n","import { ResizeObserverManager } from '@typhonjs-fvtt/runtime/util/dom/observer';\n\n/**\r\n * Provides a single global ResizeObserverManager instance for the resizeObserver action.\r\n *\r\n * @type {ResizeObserverManager}\r\n */\r\nconst resizeObserverActionManager = new ResizeObserverManager();\r\n\r\n/**\r\n * Provides an action to monitor the given {@link HTMLElement} node with {@link ResizeObserver} via\r\n * {@link ResizeObserverManager} posting width / height changes to the {@link ResizeObserverData.ResizeTarget} in\r\n * various ways depending on the shape of the target. The target can be one of the following and the\r\n * precedence order is listed from top to bottom:\r\n *\r\n * - has a `resizeObserved` function as attribute; offset then content width / height are passed as parameters.\r\n * - has a `setContentBounds` function as attribute; content width / height are passed as parameters.\r\n * - has a `setDimension` function as attribute; offset width / height are passed as parameters.\r\n * - target is an object; offset and content width / height attributes directly set on target.\r\n * - target is a function; the function invoked with offset then content width / height parameters.\r\n * - has a writable store `resizeObserved` as an attribute; updated with offset & content width / height.\r\n * - has an object 'stores' that has a writable store `resizeObserved` as an attribute; updated with offset &\r\n *   content width / height.\r\n *\r\n * Note: Svelte currently uses an archaic IFrame based workaround to monitor offset / client width & height changes.\r\n * A more up to date way to do this is with ResizeObserver. To track when Svelte receives ResizeObserver support\r\n * monitor this issue: {@link https://github.com/sveltejs/svelte/issues/4233}\r\n *\r\n * Can-I-Use: {@link https://caniuse.com/resizeobserver}\r\n *\r\n * @param {HTMLElement} node - The node associated with the action.\r\n *\r\n * @param {import('#runtime/util/dom/observer').ResizeObserverData.ResizeTarget} target - A\r\n *        {@link ResizeObserverManager} target to update with observed width & height changes.\r\n *\r\n * @returns {(import('svelte/action').ActionReturn<\r\n *   import('#runtime/util/dom/observer').ResizeObserverData.ResizeTarget\r\n * >)} The action lifecycle methods.\r\n *\r\n * @see https://github.com/sveltejs/svelte/issues/4233\r\n */\r\nfunction resizeObserver(node, target)\r\n{\r\n   resizeObserverActionManager.add(node, target);\r\n\r\n   return {\r\n      /**\r\n       * @param {import('#runtime/util/dom/observer').ResizeObserverData.ResizeTarget} newTarget - A\r\n       *        {@link ResizeObserverManager} target to update with observed width & height changes.\r\n       */\r\n      update: (newTarget) =>\r\n      {\r\n         resizeObserverActionManager.remove(node, target);\r\n         target = newTarget;\r\n         resizeObserverActionManager.add(node, target);\r\n      },\r\n\r\n      destroy: () =>\r\n      {\r\n         resizeObserverActionManager.remove(node, target);\r\n      }\r\n   };\r\n}\r\n\r\n/**\r\n * Provides a function that when invoked with an element updates the cached styles for each subscriber of the element.\r\n *\r\n * The style attributes cached to calculate offset height / width include border & padding dimensions. You only need\r\n * to update the cache if you change border or padding attributes of the element.\r\n *\r\n * @param {HTMLElement} el - A HTML element.\r\n */\r\nresizeObserver.updateCache = function(el)\r\n{\r\n   resizeObserverActionManager.updateCache(el);\r\n};\n\nexport { resizeObserver };\n//# sourceMappingURL=index.js.map\n","import { isObject } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\r\n * Provides an action to apply CSS style properties provided as an object.\r\n *\r\n * @param {HTMLElement} node - Target element\r\n *\r\n * @param {{ [key: string]: string | null }}  properties - Hyphen case CSS property key / value object of properties\r\n *        to set.\r\n *\r\n * @returns {import('svelte/action').ActionReturn<{ [key: string]: string | null }>} Lifecycle functions.\r\n */\r\nfunction applyStyles(node, properties)\r\n{\r\n   /** Sets properties on node. */\r\n   function setProperties()\r\n   {\r\n      if (!isObject(properties)) { return; }\r\n\r\n      for (const prop of Object.keys(properties))\r\n      {\r\n         node.style.setProperty(`${prop}`, properties[prop]);\r\n      }\r\n   }\r\n\r\n   setProperties();\r\n\r\n   return {\r\n      /**\r\n       * @param {{ [key: string]: string | null }}  newProperties - Key / value object of properties to set.\r\n       */\r\n      update: (newProperties) =>\r\n      {\r\n         properties = newProperties;\r\n         setProperties();\r\n      }\r\n   };\r\n}\n\nexport { applyStyles };\n//# sourceMappingURL=index.js.map\n","import { isObject } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\r\n * Applies the given action dynamically allowing the hosted action to be updated reactively while still appropriately\r\n * handling the action lifecycle methods.\r\n *\r\n * @param {HTMLElement} node - The node associated with the action.\r\n *\r\n * @param {import('./types').DynamicActionOptions} options - Defines the action to dynamically mount.\r\n *\r\n * @returns {import('svelte/action').ActionReturn<import('./types').DynamicActionOptions>} The action lifecycle\r\n *          methods.\r\n */\r\nfunction dynamicAction(node, { action, data } = {})\r\n{\r\n   let actionResult;\r\n\r\n   if (typeof action === 'function') { actionResult = action(node, data); }\r\n\r\n   return {\r\n      /**\r\n       * @param {import('./types').DynamicActionOptions} newOptions - Defines the new action to dynamically mount.\r\n       */\r\n      update: (newOptions) =>\r\n      {\r\n         // If `newOptions` is not an object then destroy any old action.\r\n         if (!isObject(newOptions))\r\n         {\r\n            actionResult?.destroy?.();\r\n            action = void 0;\r\n            data = void 0;\r\n\r\n            return;\r\n         }\r\n\r\n         const { action: newAction, data: newData } = newOptions;\r\n\r\n         if (typeof newAction !== 'function')\r\n         {\r\n            console.warn(`dynamicAction.update warning: Aborting as 'action' is not a function.`);\r\n            return;\r\n         }\r\n\r\n         const hasNewData = newData !== data;\r\n\r\n         if (hasNewData) { data = newData; }\r\n\r\n         if (newAction !== action)\r\n         {\r\n            // If the action changes destroy the previous action and apply the new one.\r\n            actionResult?.destroy?.();\r\n\r\n            action = newAction;\r\n            actionResult = action(node, data);\r\n         }\r\n         else if (hasNewData)\r\n         {\r\n            actionResult?.update?.(data);\r\n         }\r\n      },\r\n\r\n      destroy: () =>\r\n      {\r\n         actionResult?.destroy?.();\r\n\r\n         action = void 0;\r\n         data = void 0;\r\n         actionResult = void 0;\r\n      }\r\n   };\r\n}\n\nexport { dynamicAction };\n//# sourceMappingURL=index.js.map\n","import { linear } from 'svelte/easing';\nimport { lerp } from '@typhonjs-fvtt/runtime/math/interpolate';\nimport { getEasingFunc } from '@typhonjs-fvtt/runtime/svelte/easing';\nimport { fade, slide } from 'svelte/transition';\n\n/**\r\n * Provides a rotate transition. For options `easing` is applied to the rotate transition. The default easing is\r\n * linear.\r\n *\r\n * Note: that when reversing the transition that time goes from `1 - 0`, so if specific options are applied for\r\n * rotating out transition then `end` and `initial` are swapped.\r\n *\r\n * @param {HTMLElement} node - The transition node.\r\n *\r\n * @param {object}      [options] - Optional parameters.\r\n *\r\n * @param {number}      [options.delay] - Delay in ms before start of transition.\r\n *\r\n * @param {number}      [options.duration] - Total transition length in ms.\r\n *\r\n * @param {import('#runtime/svelte/easing').EasingReference}   [options.easing='linear'] - Easing function name or\r\n *        function to apply to the rotate transition.\r\n *\r\n * @param {number}      [options.end=0] - End rotation in degrees.\r\n *\r\n * @param {number}      [options.initial=0] - Initial rotation in degrees.\r\n *\r\n * @returns {import('svelte/transition').TransitionConfig} Transition config.\r\n */\r\nfunction rotate(node, options)\r\n{\r\n   const easingRotate = getEasingFunc(options.easing);\r\n\r\n   const initialDeg = options.initial ?? 0;\r\n   const endDeg = options.end ?? 0;\r\n\r\n   return {\r\n      delay: options.delay ?? 0,\r\n      duration: options.duration ?? 500,\r\n      easing: linear,\r\n      css: (t) =>\r\n      {\r\n         const rotateT = easingRotate(t);\r\n         return `transform: rotate(${lerp(initialDeg, endDeg, rotateT)}deg)`;\r\n      }\r\n   };\r\n}\n\n/**\r\n * Combines rotate & fade transitions into a single transition. For options `easing` this is applied to both\r\n * transitions, however if provided `easingRotate` and / or `easingFade` will take precedence. The default easing is\r\n * linear.\r\n *\r\n * Note: that when reversing the transition that time goes from `1 - 0`, so if specific options are applied for\r\n * rotating out transition then `end` and `initial` are swapped.\r\n *\r\n * @param {HTMLElement} node - The transition node.\r\n *\r\n * @param {object}      [options] - Optional parameters.\r\n *\r\n * @param {number}      [options.delay] - Delay in ms before start of transition.\r\n *\r\n * @param {number}      [options.duration] - Total transition length in ms.\r\n *\r\n * @param {import('#runtime/svelte/easing').EasingReference}   [options.easing='linear'] - Easing function name or\r\n *        function to apply to both slide & fade transitions.\r\n *\r\n * @param {import('#runtime/svelte/easing').EasingReference}   [options.easingFade='linear'] - Easing function name or\r\n *        function to apply to the fade transition.\r\n *\r\n * @param {import('#runtime/svelte/easing').EasingReference}   [options.easingRotate='linear'] - Easing function name or\r\n *        function to apply to the rotate transition.\r\n *\r\n * @param {number}      [options.end=0] - End rotation in degrees.\r\n *\r\n * @param {number}      [options.initial=0] - Initial rotation in degrees.\r\n *\r\n * @returns {import('svelte/transition').TransitionConfig} Transition config.\r\n */\r\nfunction rotateFade(node, options)\r\n{\r\n   const easingFade = getEasingFunc(options.easingFade ?? options.easing);\r\n   const easingRotate = getEasingFunc(options.easingRotate ?? options.easing);\r\n\r\n   const fadeTransition = fade(node);\r\n\r\n   const initialDeg = options.initial ?? 0;\r\n   const endDeg = options.end ?? 0;\r\n\r\n   return {\r\n      delay: options.delay ?? 0,\r\n      duration: options.duration ?? 500,\r\n      easing: linear,\r\n      css: (t) =>\r\n      {\r\n         const fadeT = easingFade(t);\r\n         const rotateT = easingRotate(t);\r\n\r\n         return `transform: rotate(${lerp(initialDeg, endDeg, rotateT)}deg); ${fadeTransition.css(fadeT, 1 - fadeT)}`;\r\n      }\r\n   };\r\n}\n\n/**\r\n * Combines slide & fade transitions into a single transition. For options `easing` this is applied to both transitions,\r\n * however if provided `easingSlide` and / or `easingFade` will take precedence. The default easing is linear.\r\n *\r\n * @param {HTMLElement} node - The transition node.\r\n *\r\n * @param {object}      [options] - Optional parameters.\r\n *\r\n * @param {'x' | 'y'}   [options.axis] - The sliding axis.\r\n *\r\n * @param {number}      [options.delay] - Delay in ms before start of transition.\r\n *\r\n * @param {number}      [options.duration] - Total transition length in ms.\r\n *\r\n * @param {import('#runtime/svelte/easing').EasingReference}   [options.easing=linear] - Easing function name or\r\n *        function to apply to both slide & fade transitions.\r\n *\r\n * @param {import('#runtime/svelte/easing').EasingReference}   [options.easingFade=linear] - Easing function name or\r\n *        function to apply to the fade transition.\r\n *\r\n * @param {import('#runtime/svelte/easing').EasingReference}   [options.easingSlide=linear] - Easing function name or\r\n *        function to apply to the slide transition.\r\n *\r\n * @returns {import('svelte/transition').TransitionConfig} Transition config.\r\n */\r\nfunction slideFade(node, options)\r\n{\r\n   const fadeEasing = getEasingFunc(options.easingFade ?? options.easing);\r\n   const slideEasing = getEasingFunc(options.easingSlide ?? options.easing);\r\n\r\n   const fadeTransition = fade(node);\r\n   const slideTransition = slide(node, { axis: options.axis });\r\n\r\n   return {\r\n      delay: options.delay ?? 0,\r\n      duration: options.duration ?? 500,\r\n      easing: linear,\r\n      css: (t) =>\r\n      {\r\n         const fadeT = fadeEasing(t);\r\n         const slideT = slideEasing(t);\r\n         return `${slideTransition.css(slideT, 1 - slideT)}; ${fadeTransition.css(fadeT, 1 - fadeT)}`;\r\n      }\r\n   };\r\n}\n\n/**\r\n * Converts a Svelte transition to an animation. Both transitions & animations use the same CSS / styles solution and\r\n * resulting data so wrap the transition function with the signature of an animation.\r\n *\r\n * @param {(node: Element, ...rest: any[]) => import('svelte/transition').TransitionConfig} fn -\r\n *        A Svelte transition function.\r\n *\r\n * @returns {(\r\n *    node: Element,\r\n *    data: { from: DOMRect, to: DOMRect },\r\n *    ...rest: any\r\n * ) => import('svelte/animation').AnimationConfig} - Transition function converted to an animation.\r\n */\r\nfunction toAnimation(fn)\r\n{\r\n   return (node, animations, ...rest) => fn(node, ...rest);\r\n}\n\n/**\r\n * Provides static data useful for handling custom props / options to components that allow dynamic configuration of\r\n * transitions. This is used in all application shells and components that have configurable transitions.\r\n *\r\n * @ignore\r\n */\r\nclass TJSDefaultTransition\r\n{\r\n   static #options = {};\r\n\r\n   static #default = () => void 0;\r\n\r\n   /**\r\n    * @returns {() => undefined} Default empty transition.\r\n    */\r\n   static get default() { return this.#default; }\r\n\r\n   /**\r\n    * @returns {{}} Default empty options.\r\n    */\r\n   static get options() { return this.#options; }\r\n}\n\nexport { TJSDefaultTransition, rotate, rotateFade, slideFade, toAnimation };\n//# sourceMappingURL=index.js.map\n","import { writable } from 'svelte/store';\r\n\r\n/**\r\n * Provides the internal context to all application shells.\r\n *\r\n * @implements {import('./types').AppShell.Context.Internal}\r\n *\r\n * @internal\r\n */\r\nexport class AppShellContextInternal\r\n{\r\n   /** @type {import('./types').AppShell.Context.InternalAppStores} */\r\n   #stores;\r\n\r\n   constructor()\r\n   {\r\n      this.#stores = {\r\n         // When app shell has content resize observation enabled these stores are updated.\r\n         contentOffsetWidth: writable(0),\r\n         contentOffsetHeight: writable(0),\r\n         contentWidth: writable(0),\r\n         contentHeight: writable(0),\r\n\r\n         cqEnabled: writable(false),\r\n\r\n         elementContent: writable(void 0),\r\n         elementRoot: writable(void 0)\r\n      };\r\n\r\n      Object.freeze(this.#stores);\r\n      Object.seal(this);\r\n   }\r\n\r\n   /**\r\n    * @returns {import('./types').AppShell.Context.InternalAppStores} The internal context stores:\r\n    * - `cqEnabled` - Container query enabled state.\r\n    * - `elementContent` - The bound elementContent element reference.\r\n    * - `elementRoot` - The bound elementRoot element reference.\r\n    */\r\n   get stores()\r\n   {\r\n      return this.#stores;\r\n   }\r\n}\r\n","/**\n * @package\n * @typedef {{ width: number; height: number }} Dimension\n * @typedef {{ width: number } | { height: number }} DimensionConstraint\n */\n\n// Matches a CSS / SVG dimension: signed decimal or scientific number + optional unit (letters or %).\nconst DIMENSION_REGEX = /^([+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)\\s*([a-zA-Z%]+)?$/;\n\n/**\n * @package\n * @param {string} dimension\n * @returns {{ number: number; unit: string }}\n */\nfunction extractDimensionNumberAndUnit(dimension)\n{\n   const [, num, unit = ''] = dimension.trim().match(DIMENSION_REGEX) ?? [];\n   return { number: parseInt(num, 10), unit };\n}\n\n/**\n * @package\n * @param {Dimension} base\n * @param {DimensionConstraint} constraint\n * @returns {Dimension}\n */\nfunction calculateNewDimensions(base, constraint) {\n   const { width, height } = base;\n   if ('width' in constraint) {\n      const { width: constraintWidth } = constraint;\n      return {\n         width: constraintWidth,\n         height: (constraintWidth / width) * height,\n      };\n   }\n   const { height: constraintHeight } = constraint;\n   return {\n      width: (constraintHeight / height) * width,\n      height: constraintHeight,\n   };\n}\n\n/**\n * @package\n * @param {SVGElement} local\n * @param {HTMLElement} remote\n * @returns {{ width: string, height: string }}\n */\nfunction calculateDimensions(local, remote) {\n   const lWidthStr = local.getAttribute('width');\n   const lHeightStr = local.getAttribute('height');\n   if (lWidthStr && lHeightStr) {\n      return { width: lWidthStr, height: lHeightStr };\n   }\n   const lDimension = { width: lWidthStr || '', height: lHeightStr || '' };\n\n   const rWidthStr = remote.getAttribute('width');\n   const rHeightStr = remote.getAttribute('height');\n   const rViewBox = remote.getAttribute('viewBox');\n\n   if (!((rWidthStr && rHeightStr) || rViewBox)) {\n      return lDimension;\n   }\n\n   let rWidth = 0;\n   let rHeight = 0;\n   let rWidthUnit = '';\n   let rHeightUnit = '';\n   if (rWidthStr && rHeightStr) {\n      ({ number: rWidth, unit: rWidthUnit } = extractDimensionNumberAndUnit(rWidthStr));\n      ({ number: rHeight, unit: rHeightUnit } = extractDimensionNumberAndUnit(rHeightStr));\n   } else if (rViewBox) {\n      [, , rWidth, rHeight] = rViewBox.split(' ').map((s) => parseInt(s, 10));\n   }\n\n   if (rWidthUnit !== rHeightUnit) {\n      return {\n         width: lWidthStr || rWidthStr || '',\n         height: lHeightStr || rHeightStr || '',\n      };\n   }\n\n   if (lWidthStr) {\n      const { number, unit } = extractDimensionNumberAndUnit(lWidthStr);\n      const cDimension = calculateNewDimensions(\n         { width: rWidth, height: rHeight },\n         { width: number },\n      );\n      const cUnit = unit || rWidthUnit;\n      return {\n         width: cDimension.width.toFixed(2) + cUnit,\n         height: cDimension.height.toFixed(2) + cUnit,\n      };\n   }\n   if (lHeightStr) {\n      const { number, unit } = extractDimensionNumberAndUnit(lHeightStr);\n      const cDimension = calculateNewDimensions(\n         { width: rWidth, height: rHeight },\n         { height: number },\n      );\n      const cUnit = unit || rHeightUnit;\n      return {\n         width: cDimension.width.toFixed(2) + cUnit,\n         height: cDimension.height.toFixed(2) + cUnit,\n      };\n   }\n   return {\n      width: rWidth + rWidthUnit,\n      height: rHeight + rHeightUnit,\n   };\n}\n\n/**\n * Svelte action for dynamically inlining remote-fetched SVG into DOM.\n * @example\n *\n * ```html\n * <script>\n *   import { inlineSvg } from '@svelte-put/inline-svg;\n * </script>\n *\n * <svg use:inlineSvg={\"http://example.com/icon.svg\"}></svg>\n * ```\n *\n * @param {SVGElement} node - SVGElement to inline SVG into\n *\n * @param {import('./types').InlineSvgParameter} param - config for the action.\n *\n * @returns {import('./types').InlineSvgActionReturn}\n */\nfunction inlineSvg(node, param) {\n   let config = resolveConfig(param);\n   async function op() {\n      if (config.src) {\n         const response = await fetch(config.src, { cache: config.cache });\n         const str = config.transform(await response.text());\n         const svg = new DOMParser().parseFromString(str, 'image/svg+xml').documentElement;\n         for (let i = 0; i < svg.attributes.length; i++) {\n            const attr = svg.attributes[i];\n            if (!node.hasAttribute(attr.name) && !['width', 'height'].includes(attr.name)) {\n               node.setAttribute(attr.name, attr.value);\n            }\n         }\n         if (config.autoDimensions) {\n            const dimensions = calculateDimensions(node, svg);\n            node.setAttribute('width', dimensions.width);\n            node.setAttribute('height', dimensions.height);\n         } else {\n            node.setAttribute('width', node.getAttribute('width') || '');\n            node.setAttribute('height', node.getAttribute('height') || '');\n         }\n         node.innerHTML = svg.innerHTML;\n      }\n   }\n   op();\n   return {\n      update(update) {\n         config = resolveConfig(update);\n         op();\n      },\n   };\n}\n\n/**\n * @package\n * @type {Required<import('./types').InlineSvgConfig>}\n */\nconst DEFAULT_INLINE_SVG_ACTION_CONFIG = {\n   src: '',\n   cache: 'no-cache',\n   autoDimensions: true,\n   transform: (svg) => svg,\n};\n\n/**\n * resolve the input parameters of `inlineSvg` action to an internally usable config\n * @package\n * @param {import('./types').InlineSvgParameter | undefined} param\n * @returns {Required<import('./types').InlineSvgConfig>}\n */\nfunction resolveConfig(param = '') {\n   if (typeof param === 'string') {\n      return {\n         ...DEFAULT_INLINE_SVG_ACTION_CONFIG,\n         src: param,\n      };\n   }\n\n   return {\n      ...DEFAULT_INLINE_SVG_ACTION_CONFIG,\n      ...param,\n   };\n}\n\nexport { inlineSvg };\n//# sourceMappingURL=index.js.map\n","/**\n * Provides a popover tooltip action for Foundry that provides a similar set of options as the core `TooltipManager`.\n * A large benefit of this action is that on data changes the data attributes are updated and if the action Node is the\n * same as the current tooltip element the tooltip is activated again providing reactivity.\n *\n * @param {HTMLElement} node - Target element.\n *\n * @param {TooltipOptions} options - Tooltip Options.\n *\n * @returns {import('svelte/action').ActionReturn<TooltipOptions>} Lifecycle functions.\n */\nfunction popoverTooltip(node, { cssClass, direction, isHTML, locked, tooltip })\n{\n   function setAttributes()\n   {\n      if (typeof tooltip === 'string')\n      {\n         if (isHTML)\n         {\n            node.setAttribute('data-tooltip-html', tooltip);\n            node.removeAttribute('data-tooltip');\n         }\n         else\n         {\n            node.setAttribute('data-tooltip', tooltip);\n            node.removeAttribute('data-tooltip-html');\n         }\n      }\n      else\n      {\n         node.removeAttribute('data-tooltip');\n         node.removeAttribute('data-tooltip-html');\n      }\n\n      if (typeof cssClass === 'string')\n      {\n         node.setAttribute('data-tooltip-class', cssClass);\n      }\n      else\n      {\n         node.removeAttribute('data-tooltip-class');\n      }\n\n      if (typeof direction === 'string')\n      {\n         node.setAttribute('data-tooltip-direction', direction);\n      }\n      else\n      {\n         node.removeAttribute('data-tooltip-direction');\n      }\n\n      if (typeof locked === 'boolean' && locked)\n      {\n         node.setAttribute('data-locked', String(locked));\n      }\n      else\n      {\n         node.removeAttribute('data-locked');\n      }\n\n      // Immediately reactivate tooltip w/ data changes for reactivity if `node` is the same as current tooltip element.\n      if (node === globalThis?.game?.tooltip?.element)\n      {\n         globalThis?.game?.tooltip?.activate(node);\n      }\n   }\n\n   setAttributes();\n\n   return {\n      /**\n       * @param {TooltipOptions}  options - Update tooltip.\n       */\n      update: (options) =>\n      {\n         cssClass = typeof options?.cssClass === 'string' ? options.cssClass : void 0;\n         direction = typeof options?.direction === 'string' ? options.direction : void 0;\n         isHTML = typeof options?.isHTML === 'boolean' ? options.isHTML : void 0;\n         locked = typeof options?.locked === 'boolean' ? options.locked : void 0;\n         tooltip = typeof options?.tooltip === 'string' ? options.tooltip : void 0;\n\n         setAttributes();\n      }\n   };\n}\n\n/**\n * @typedef {object} TooltipOptions Options for the {@link popoverTooltip} action.\n *\n * @property {string}   [cssClass] An optional, space-separated list of CSS classes to apply to the activated tooltip.\n * If this is not provided, the CSS classes are acquired from the `data-tooltip-class` attribute of the element or one\n * of its parents.\n *\n * @property {string}   [direction] An explicit tooltip expansion direction. If this is not provided,\n * the direction is acquired from the `data-tooltip-direction` attribute of the element or one of its parents. Values\n * include: `UP`, `DOWN`, `LEFT`, `RIGHT`, `CENTER`\n *\n * @property {boolean}  [isHTML=false] When true, `tooltip` is treated as a HTML string; default: `false`.\n *\n * @property {boolean}  [locked=false] An optional boolean to lock the tooltip after creation; default: `false`.\n *\n * @property {string}   [tooltip] Tooltip text value or language key (will receive i18n translation) otherwise treated\n * as an HTML string when `isHTML` is true.\n */\n\nexport { popoverTooltip };\n//# sourceMappingURL=index.js.map\n","<script>\r\n   /**\r\n    * Provides an app header button conforming to the {@link SvelteAppNS.HeaderButton} type.\r\n    * Additionally, a `title` field is supported to give a tool tip for the button. For backward compatibility\r\n    * `onclick` is supported, but for uniformity across TRL defining an `onPress` function is recommended. If defined\r\n    * it is invoked when the button is clicked or `Enter` key pressed and state is updated accordingly.\r\n    *\r\n    * TRL also supports the following extra button data:\r\n    *\r\n    * - {keyCode='Enter'}           keyCode: A string conforming to `KeyboardEvent.code` to activate `onPress` callback.\r\n    *\r\n    * - {keepMinimized=false}       keepMinimized: When true the button is not removed when app minimized.\r\n    *\r\n    * - {Function}                  onContextMenu: Invoked when right mouse button or contextmenu key is pressed.\r\n    *\r\n    * - {Function}                  onPress: Invoked when left mouse button or `keyCode` key is pressed.\r\n    *\r\n    * - {{ [key: string]: string | null }}   styles: Additional inline styles to apply to button.\r\n    *\r\n    * @componentDocumentation\r\n    * @internal\r\n    */\r\n   import { inlineSvg }       from '@typhonjs-fvtt/runtime/svelte/action/dom/inline-svg';\r\n   import { popoverTooltip }  from '@typhonjs-fvtt/runtime/svelte/action/dom/tooltip';\r\n   import { applyStyles }     from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\r\n   import { AssetValidator }  from '@typhonjs-fvtt/runtime/util/browser';\r\n   import { localize }        from '@typhonjs-fvtt/runtime/util/i18n';\r\n   import { isObject }        from '@typhonjs-fvtt/runtime/util/object';\r\n\r\n   export let button = void 0;\r\n\r\n   export let storeHeaderButtonNoLabel = void 0;\r\n\r\n   $: icon = isObject(button) && typeof button.icon === 'string' ? button.icon : void 0;\r\n\r\n   $: label = isObject(button) && typeof button.label === 'string' ? localize(button.label) : void 0;\r\n\r\n   $: tooltipDirection = isObject(button) && typeof button.tooltipDirection === 'string' ? button.tooltipDirection :\r\n    void 0;\r\n\r\n   $: keepMinimized = isObject(button) && typeof button.keepMinimized === 'boolean' ? button.keepMinimized : false;\r\n\r\n   $: keyCode = isObject(button) && typeof button.keyCode === 'string' ? button.keyCode : 'Enter';\r\n\r\n   $: styles = isObject(button) && isObject(button.styles) ? button.styles : void 0;\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   let iconType;\r\n\r\n   $:\r\n   {\r\n      const result = AssetValidator.parseMedia({ url: icon, mediaTypes: AssetValidator.MediaTypes.img_svg });\r\n      iconType = result.valid ? result.elementType : 'font';\r\n   }\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   function onClick(event)\r\n   {\r\n      // Accept `onPress or `onclick` as the function / data to invoke. `onclick` is from Foundry defined buttons.\r\n      const invoke = button?.onPress ?? button?.onclick;\r\n\r\n      if (typeof invoke === 'function')\r\n      {\r\n         invoke({ button, event });\r\n         button = button; // This provides a reactive update if button data changes.\r\n      }\r\n   }\r\n\r\n   function onContextMenu(event)\r\n   {\r\n      if (button?.onContextMenu === 'function')\r\n      {\r\n         button.onContextMenu({ button, event });\r\n         button = button; // This provides a reactive update if button data changes.\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Consume / stop propagation of key down when key codes match.\r\n    *\r\n    * @param {KeyboardEvent}    event -\r\n    */\r\n   function onKeydown(event)\r\n   {\r\n      if (event.code === keyCode)\r\n      {\r\n         event.preventDefault();\r\n         event.stopPropagation();\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Handle press event if key codes match.\r\n    *\r\n    * @param {KeyboardEvent}    event -\r\n    */\r\n   function onKeyup(event)\r\n   {\r\n      if (event.code === keyCode)\r\n      {\r\n         // Accept `onPress or `onclick` as the function / data to invoke. `onclick` is from Foundry defined buttons.\r\n         const invoke = button.onPress ?? button.onclick;\r\n\r\n         if (typeof invoke === 'function')\r\n         {\r\n            invoke({ button, event });\r\n            button = button; // This provides a reactive update if button data changes.\r\n         }\r\n\r\n         event.preventDefault();\r\n         event.stopPropagation();\r\n      }\r\n   }\r\n</script>\r\n\r\n<svelte:options accessors={true}/>\r\n\r\n<button type=button\r\n   class=\"header-control icon{typeof button.class === 'string' ? ` ${button.class}` : ''}\"\r\n   class:keep-minimized={keepMinimized}\r\n   on:click|preventDefault|stopPropagation={onClick}\r\n   on:contextmenu|preventDefault|stopPropagation={onContextMenu}\r\n   on:keydown={onKeydown}\r\n   on:keyup={onKeyup}\r\n   use:applyStyles={styles}\r\n   use:popoverTooltip={{ ariaLabel: true, tooltip: $storeHeaderButtonNoLabel ? void 0 : label, direction: tooltipDirection }}>\r\n\r\n   {#if icon}\r\n      {#if iconType === 'font'}\r\n         <i class={icon}></i>\r\n      {:else if iconType === 'img'}\r\n         <img src={icon} alt=\"\" class=icon-int>\r\n      {:else if iconType === 'svg'}\r\n         <svg use:inlineSvg={{ src: icon }} class=icon-int></svg>\r\n      {/if}\r\n   {/if}\r\n</button>\r\n\r\n<style>\r\n   button {\r\n      border: var(--tjs-app-header-button-border);\r\n      color: var(--tjs-app-header-button-color);\r\n      flex: 0 0 var(--tjs-app-header-button-size);\r\n      height: var(--tjs-app-header-button-size);\r\n      margin: var(--tjs-app-header-button-margin);\r\n      min-height: var(--tjs-app-header-button-size);\r\n      width: var(--tjs-app-header-button-size);\r\n   }\r\n\r\n   button:has(.icon-int) {\r\n      padding: calc(var(--tjs-app-header-button-size) * 0.15);\r\n   }\r\n\r\n   .keep-minimized {\r\n      display: inline-flex;\r\n   }\r\n\r\n   .icon-int {\r\n      display: inline-flex;\r\n      justify-content: center;\r\n      align-items: center;\r\n      width: calc(var(--tjs-app-header-button-size) * 0.75);\r\n      height: calc(var(--tjs-app-header-button-size) * 0.75);\r\n   }\r\n</style>\r\n","<script>\r\n   /**\r\n    * @privateRemarks\r\n    * TODO: Add description\r\n    *\r\n    * @componentDocumentation\r\n    * @internal\r\n    */\r\n   import { getContext }         from 'svelte';\r\n\r\n   import { inlineSvg }          from '@typhonjs-fvtt/runtime/svelte/action/dom/inline-svg';\r\n   import { TJSSvelte }          from '@typhonjs-fvtt/runtime/svelte/util';\r\n   import { A11yHelper }         from '@typhonjs-fvtt/runtime/util/a11y';\r\n   import { AssetValidator }     from '@typhonjs-fvtt/runtime/util/browser';\r\n   import { localize }           from '@typhonjs-fvtt/runtime/util/i18n';\r\n   import { isObject }           from '@typhonjs-fvtt/runtime/util/object';\r\n   import { getRoutePrefix }     from '@typhonjs-fvtt/runtime/util/path';\r\n\r\n   import {\r\n      draggable as dragDefault } from '@typhonjs-fvtt/runtime/svelte/store/position';\r\n\r\n   import TJSHeaderButton        from './TJSHeaderButton.svelte';\r\n\r\n   export let draggable = void 0;\r\n   export let draggableOptions = void 0;\r\n\r\n   /**\r\n    * @type {SvelteApp}\r\n    */\r\n   const application = getContext('#external')?.application;\r\n\r\n   // Focus related app options stores.\r\n   const { focusAuto, focusKeep } = application.reactive.storeAppOptions;\r\n\r\n   const { elementRoot } = getContext('#internal').stores;\r\n\r\n   const storeAlwaysOnTop = application.reactive.storeAppOptions.alwaysOnTop;\r\n   const storeDraggable = application.reactive.storeAppOptions.draggable;\r\n   const storeDetached = application.reactive.storeUIState.detached;\r\n   const storeDragging = application.reactive.storeUIState.dragging;\r\n   const storeHeaderButtons = application.reactive.storeUIState.headerButtons;\r\n   const storeHeaderButtonNoLabel = application.reactive.storeAppOptions.headerButtonNoLabel;\r\n   const storeHeaderIcon = application.reactive.storeAppOptions.headerIcon;\r\n   const storeHeaderNoTitleMinimized = application.reactive.storeAppOptions.headerNoTitleMinimized;\r\n   const storeMinimizable = application.reactive.storeAppOptions.minimizable;\r\n   const storeMinimized = application.reactive.storeUIState.minimized;\r\n   const storeTitle = application.reactive.storeAppOptions.title;\r\n\r\n   // These classes in the window header allow dragging.\r\n   const s_DRAG_TARGET_CLASSLIST = Object.freeze(['tjs-app-icon', 'tjs-window-header-spacer',\r\n    'window-header', 'window-title']);\r\n\r\n   /** @type {HTMLElement} */\r\n   let headerEl;\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   /**\r\n    * Hide or show PopOut button.\r\n    *\r\n    * @param {boolean}  hide - When true hide button.\r\n    */\r\n   function checkAlwaysOnTop(hide)\r\n   {\r\n      if (hide)\r\n      {\r\n         headerEl?.querySelector('.popout-module-button')?.setAttribute('hidden', '');\r\n      }\r\n      else\r\n      {\r\n         headerEl?.querySelector('.popout-module-button')?.removeAttribute('hidden');\r\n      }\r\n   }\r\n\r\n   $: if (headerEl) { checkAlwaysOnTop($storeAlwaysOnTop && !$storeDetached); }\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   let dragOptions;\r\n\r\n   $: draggable = typeof draggable === 'function' ? draggable : dragDefault;\r\n\r\n   // Combines external options with defaults for TJSApplicationHeader. By default, easing is turned on w/ duration of\r\n   // 0.06 seconds and cubicOut, but can be overridden by any provided `draggableOptions`. `position`, `active`, and\r\n   // `storeDragging` are always overridden by application position / stores.\r\n   $: dragOptions = Object.assign({}, { tween: true, tweenOptions: { duration: 0.06, ease: 'cubicOut' } },\r\n    isObject(draggableOptions) ? draggableOptions : {}, { position: application.position, enabled:\r\n     $storeDraggable, storeDragging, hasTargetClassList: s_DRAG_TARGET_CLASSLIST });\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   let displayHeaderTitle;\r\n\r\n   $: displayHeaderTitle = $storeHeaderNoTitleMinimized && $storeMinimized ? 'none' : null;\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   let buttonsLeft;\r\n   let buttonsRight;\r\n\r\n   $:\r\n   {\r\n      buttonsLeft = [];\r\n      buttonsRight = [];\r\n\r\n      for (const button of $storeHeaderButtons)\r\n      {\r\n         const buttonsList = typeof button?.alignLeft === 'boolean' && button?.alignLeft ? buttonsLeft : buttonsRight;\r\n\r\n         // If the button contains a TJSSvelte.Config.Embed object in the `svelte` attribute, then use it otherwise use\r\n         // `TJSHeaderButton` w/ button as props.\r\n         buttonsList.push(TJSSvelte.config.isConfigEmbed(button?.svelte) ? { ...button.svelte } :\r\n          { class: TJSHeaderButton, props: { button, storeHeaderButtonNoLabel } });\r\n      }\r\n   }\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   let mediaType = void 0;\r\n\r\n   $: if (typeof $storeHeaderIcon === 'string')\r\n   {\r\n      const result = AssetValidator.parseMedia({\r\n         url: $storeHeaderIcon,\r\n         mediaTypes: AssetValidator.MediaTypes.img_svg\r\n      });\r\n\r\n      mediaType = result.valid ? result.elementType : 'font';\r\n   }\r\n   else\r\n   {\r\n      mediaType = void 0;\r\n   }\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   function minimizable(node, booleanStore)\r\n   {\r\n      const callback = (event) =>\r\n      {\r\n         // Only toggle minimize state if window title or header is the event target. Also allow toggle state if the\r\n         // event target has 'keep-minimized' class.\r\n         if (event.target.classList.contains('window-title') || event.target.classList.contains('window-header') ||\r\n           event.target.classList.contains('keep-minimized'))\r\n         {\r\n            application._onToggleMinimize(event);\r\n         }\r\n      }\r\n\r\n      function activateListeners() { node.addEventListener('dblclick', callback); }\r\n      function removeListeners() { node.removeEventListener('dblclick', callback); }\r\n\r\n      if (booleanStore) { activateListeners(); }\r\n\r\n      return {\r\n         update: (booleanStore) =>  // eslint-disable-line no-shadow\r\n         {\r\n            if (booleanStore) { activateListeners(); }\r\n            else { removeListeners(); }\r\n         },\r\n\r\n         destroy: () => removeListeners()\r\n      };\r\n   }\r\n\r\n   /**\r\n    * Explicitly focus `elementRoot` if pointer event is not consumed by header buttons / components. This allows\r\n    * keyboard tab navigation to select header buttons.\r\n    *\r\n    * Note: if `focusKeep` app option store is set to true `elementRoot` is only focused if the current browser wide\r\n    * active element is not contained inside the app element.\r\n    */\r\n   function onPointerdown(event)\r\n   {\r\n      const rootEl = $elementRoot;\r\n\r\n      // Cancel any app animation in progress when dragging starts.\r\n      application.position.animate.cancel();\r\n\r\n      if ($focusAuto && A11yHelper.isFocusTarget(rootEl) && rootEl?.isConnected)\r\n      {\r\n         if ($focusKeep)\r\n         {\r\n            const activeWindow = application.reactive.activeWindow;\r\n\r\n            const focusOutside = A11yHelper.isFocusTarget(activeWindow.document.activeElement) &&\r\n             !rootEl.contains(activeWindow.document.activeElement);\r\n\r\n            // Only focus the content element if the active element is outside the app; maintaining internal focused\r\n            // element.\r\n            if (focusOutside)\r\n            {\r\n               rootEl.focus();\r\n            }\r\n            else\r\n            {\r\n               event.preventDefault();\r\n            }\r\n         }\r\n         else\r\n         {\r\n            rootEl.focus();\r\n         }\r\n      }\r\n   }\r\n</script>\r\n\r\n{#key draggable}\r\n   <header bind:this={headerEl}\r\n           class=\"window-header\"\r\n           class:not-draggable={!$storeDraggable}\r\n           on:pointerdown={onPointerdown}\r\n           use:draggable={dragOptions}\r\n           use:minimizable={$storeMinimizable}>\r\n      {#if mediaType === 'img'}\r\n         <img class=\"tjs-app-icon keep-minimized\" src={getRoutePrefix($storeHeaderIcon)} alt=icon>\r\n      {:else if mediaType === 'font'}\r\n         <i class=\"window-icon keep-minimized {$storeHeaderIcon}\"></i>\r\n      {:else if mediaType === 'svg'}\r\n         <svg use:inlineSvg={{ src: $storeHeaderIcon }} class=\"tjs-app-icon keep-minimized\"></svg>\r\n      {/if}\r\n      <h1 class=window-title style:display={displayHeaderTitle}>\r\n         {localize($storeTitle)}\r\n      </h1>\r\n      {#each buttonsLeft as button}\r\n         <svelte:component this={button.class} {...button.props} />\r\n      {/each}\r\n      <span class=\"tjs-window-header-spacer keep-minimized\" ></span>\r\n      {#each buttonsRight as button}\r\n         <svelte:component this={button.class} {...button.props} />\r\n      {/each}\r\n   </header>\r\n{/key}\r\n\r\n<style>\r\n   .not-draggable {\r\n      --tjs-app-header-cursor: var(--tjs-app-header-cursor-not-draggable, var(--tjs-cursor-default, default));\r\n   }\r\n\r\n   /**\r\n    * Provides a zero space element that expands to the right creating the gap between window title and left aligned\r\n    * buttons and right aligned buttons. Note the use of a negative left margin to remove the gap between elements.\r\n    */\r\n   .tjs-window-header-spacer {\r\n      flex: 0;\r\n      margin-left: calc(-1 * var(--tjs-app-header-gap, 5px));\r\n      margin-right: auto;\r\n   }\r\n\r\n   /**\r\n    * Allow header to be clicked through any `svg` element.\r\n    */\r\n   svg {\r\n      pointer-events: none;\r\n   }\r\n\r\n   .window-header {\r\n      display: flex;\r\n      align-items: center;\r\n\r\n      background: var(--tjs-app-header-background);\r\n      border-bottom: var(--tjs-app-header-border-bottom);\r\n      color: var(--tjs-app-header-color);\r\n      cursor: var(--tjs-app-header-cursor, var(--tjs-cursor-grab, grab));\r\n      flex: var(--tjs-app-header-flex);\r\n      gap: var(--tjs-app-header-gap, 5px);\r\n      padding: var(--tjs-app-header-padding, 0 0.5rem);\r\n\r\n      font-family: var(--tjs-app-header-font-family, var(--tjs-app-font-family, inherit));\r\n      font-size: var(--tjs-app-header-font-size, var(--tjs-app-font-size, inherit));\r\n      font-weight: var(--tjs-app-header-font-weight, inherit);\r\n\r\n      touch-action: none;\r\n   }\r\n\r\n   .window-header .tjs-app-icon {\r\n      border-radius: var(--tjs-app-header-icon-border-radius, 4px);\r\n      flex: 0 0 var(--tjs-app-header-icon-width, 24px);\r\n      height: var(--tjs-app-header-icon-height, 24px);\r\n   }\r\n\r\n   .window-title {\r\n      font-family: inherit;\r\n      font-size: inherit;\r\n      font-weight: inherit;\r\n\r\n      border: none;\r\n      color: var(--tjs-app-header-color);\r\n      flex: unset;\r\n      gap: var(--tjs-app-header-gap, 5px);\r\n      line-height: var(--tjs-app-header-height);\r\n      margin: 0;\r\n      max-width: fit-content;\r\n      overflow: hidden;\r\n      text-align: left;\r\n      text-overflow: ellipsis;\r\n      white-space: nowrap;\r\n   }\r\n</style>\r\n","import { Mat4, Vec3 } from '@typhonjs-fvtt/runtime/math/gl-matrix';\r\n\r\n/**\r\n * Handles the projection of app resizing from screen to local space of the app transform for accurate resizing.\r\n */\r\nexport class ResizeHandleTransform\r\n{\r\n   /**\r\n    * Stores inverted app transform matrix.\r\n    */\r\n   static #invMat = new Mat4();\r\n\r\n   /**\r\n    * Stores converted world delta width & height change.\r\n    */\r\n   static #pDeltaLocal = new Vec3();\r\n\r\n   /**\r\n    * Stores point down in local space.\r\n    */\r\n   static #pLocalDown = new Vec3();\r\n\r\n   /**\r\n    * Stores point drag in local space.\r\n    */\r\n   static #pLocalDrag = new Vec3();\r\n\r\n   /**\r\n    * Stores point down in world space.\r\n    */\r\n   static #pScreenDown = new Vec3();\r\n\r\n   /**\r\n    * Stores point drag in world space.\r\n    */\r\n   static #pScreenDrag = new Vec3();\r\n\r\n   /**\r\n    * Compute the delta width and height in local space given the app transform matrix and initial pointer down and\r\n    * drag screen coordinates.\r\n    *\r\n    * @param {Mat4} transformMat - App transform matrix.\r\n    *\r\n    * @param {number} pScreenDownX - Pointer down X position in screen coords.\r\n    *\r\n    * @param {number} pScreenDownY - Pointer down Y position in screen coords.\r\n    *\r\n    * @param {number} pScreenDragX - Current pointer drag X position in screen coords.\r\n    *\r\n    * @param {number} pScreenDragY - Current pointer drag Y position in screen coords.\r\n    *\r\n    * @returns {Vec3} Output vector for width & height changes (x = deltaWidth, y = deltaHeight).\r\n    */\r\n   static computeDelta(transformMat, pScreenDownX, pScreenDownY, pScreenDragX, pScreenDragY)\r\n   {\r\n      // Invert the transform to go from SCREEN -> LOCAL.\r\n      Mat4.invert(this.#invMat, transformMat);\r\n\r\n      // Store screen down and drag coordinates in temp vectors.\r\n      this.#pScreenDown[0] = pScreenDownX;\r\n      this.#pScreenDown[1] = pScreenDownY;\r\n\r\n      this.#pScreenDrag[0] = pScreenDragX;\r\n      this.#pScreenDrag[1] = pScreenDragY;\r\n\r\n      // Transform both points to local space.\r\n      Vec3.transformMat4(this.#pLocalDown, this.#pScreenDown, this.#invMat);\r\n      Vec3.transformMat4(this.#pLocalDrag, this.#pScreenDrag, this.#invMat);\r\n\r\n      // Compute local delta.\r\n      this.#pDeltaLocal[0] = this.#pLocalDrag[0] - this.#pLocalDown[0];\r\n      this.#pDeltaLocal[1] = this.#pLocalDrag[1] - this.#pLocalDown[1];\r\n\r\n      return this.#pDeltaLocal;\r\n   }\r\n}\r\n","<script>\r\n   /**\r\n    * @privateRemarks\r\n    * TODO: Add description\r\n    *\r\n    * @componentDocumentation\r\n    */\r\n   import { getContext }            from 'svelte';\r\n\r\n   import { ResizeHandleTransform } from './ResizeHandleTransform.js';\r\n\r\n   export let isResizable = false;\r\n\r\n   const application = getContext('#external')?.application;\r\n\r\n   // Allows retrieval of the element root at runtime.\r\n   const storeElementRoot = getContext('#internal').stores.elementRoot;\r\n\r\n   const storeResizable = application.reactive.storeAppOptions.resizable;\r\n\r\n   const storeDetached = application.reactive.storeUIState.detached;\r\n   const storeMinimized = application.reactive.storeUIState.minimized;\r\n   const storeResizing = application.reactive.storeUIState.resizing;\r\n\r\n   let elementResize;\r\n\r\n   $: if (elementResize)\r\n   {\r\n      // Instead of creating a derived store it is easier to use isResizable and the minimized store below.\r\n      elementResize.style.display = isResizable && !$storeMinimized ? 'block' : 'none';\r\n\r\n      // Add / remove `resizable` class from element root.\r\n      const elementRoot = $storeElementRoot;\r\n      if (elementRoot) { elementRoot.classList[isResizable ? 'add' : 'remove']('resizable'); }\r\n   }\r\n\r\n   /**\r\n    * Cancel any app animation in progress when dragging starts.\r\n    */\r\n   function onPointerdown()\r\n   {\r\n      application.position.animate.cancel();\r\n   }\r\n\r\n   /**\r\n    * Provides an action to handle resizing the application shell based on the resizable app option.\r\n    *\r\n    * @param {HTMLElement}       node - The node associated with the action.\r\n    *\r\n    * @param {object}            [opts] - Optional parameters.\r\n    *\r\n    * @param {boolean}           [opts.active=true] - A boolean value; attached to a readable store.\r\n    *\r\n    * @param {Writable<boolean>} [opts.storeResizing] - A writable store that tracks \"resizing\" state.\r\n    *\r\n    * @returns {{update: Function, destroy: Function}} The action lifecycle methods.\r\n    */\r\n   function resizable(node, { active = true, storeResizing = void 0 } = {})\r\n   {\r\n      /**\r\n       * Duplicate the app / Positionable starting position to track differences.\r\n       *\r\n       * @type {object}\r\n       */\r\n      let position = null;\r\n\r\n      /**\r\n       * Stores the current resizing state and gates the move pointer as the resizing store is not\r\n       * set until the first pointer move.\r\n       *\r\n       * @type {boolean}\r\n       */\r\n      let resizing = false;\r\n\r\n      /**\r\n       * Stores initial pointer down X in screen coordinates.\r\n       */\r\n      let pScreenDownX = 0;\r\n\r\n      /**\r\n       * Stores initial pointer down Y in screen coordinates.\r\n       */\r\n      let pScreenDownY = 0;\r\n\r\n      /**\r\n       * Remember event handlers associated with this action so they may be later unregistered.\r\n       *\r\n       * @type {Object}\r\n       */\r\n      const handlers = {\r\n         resizeDown: ['pointerdown', (e) => onResizePointerDown(e), false],\r\n         resizeMove: ['pointermove', (e) => onResizePointerMove(e), false],\r\n         resizeUp: ['pointerup', (e) => onResizePointerUp(e), false]\r\n      };\r\n\r\n      /**\r\n       * Activates listeners.\r\n       */\r\n      function activateListeners()\r\n      {\r\n         // Resize handlers\r\n         node.addEventListener(...handlers.resizeDown);\r\n\r\n         isResizable = true;\r\n\r\n         node.style.display = 'block';\r\n      }\r\n\r\n      /**\r\n       * Removes listeners.\r\n       */\r\n      function removeListeners()\r\n      {\r\n         if (typeof storeResizing?.set === 'function') { storeResizing.set(false); }\r\n\r\n         // Resize handlers\r\n         node.removeEventListener(...handlers.resizeDown);\r\n         node.removeEventListener(...handlers.resizeMove);\r\n         node.removeEventListener(...handlers.resizeUp);\r\n\r\n         node.style.display = 'none';\r\n\r\n         isResizable = false;\r\n      }\r\n\r\n      // On mount if resizable is true then activate listeners otherwise set element display to `none`.\r\n      if (active)\r\n      {\r\n         activateListeners();\r\n      }\r\n      else\r\n      {\r\n         node.style.display = 'none';\r\n      }\r\n\r\n      /**\r\n       * Handle the initial pointer down that activates resizing capture.\r\n       */\r\n      function onResizePointerDown(event)\r\n      {\r\n         event.preventDefault();\r\n\r\n         resizing = false;\r\n\r\n         // Record initial position\r\n         position = application.position.get();\r\n\r\n         if (position.height === 'auto') { position.height = $storeElementRoot.clientHeight; }\r\n         if (position.width === 'auto') { position.width = $storeElementRoot.clientWidth; }\r\n\r\n         pScreenDownX = event.clientX;\r\n         pScreenDownY = event.clientY;\r\n\r\n         // Add temporary handlers\r\n         node.addEventListener(...handlers.resizeMove);\r\n         node.addEventListener(...handlers.resizeUp);\r\n\r\n         node.setPointerCapture(event.pointerId);\r\n      }\r\n\r\n      /**\r\n       * Sets the width / height of the positionable application.\r\n       */\r\n      function onResizePointerMove(event)\r\n      {\r\n         event.preventDefault();\r\n\r\n         if (!resizing && typeof storeResizing?.set === 'function')\r\n         {\r\n            resizing = true;\r\n            storeResizing.set(true);\r\n         }\r\n\r\n         const pDeltaLocal = ResizeHandleTransform.computeDelta(application.position.transform.mat4, pScreenDownX,\r\n          pScreenDownY, event.clientX, event.clientY);\r\n\r\n         application.position.set({\r\n            width: position.width + pDeltaLocal[0],\r\n            height: position.height + pDeltaLocal[1]\r\n         });\r\n      }\r\n\r\n      /**\r\n       * Conclude the dragging behavior when the pointer is released setting the final position and\r\n       * removing listeners.\r\n       */\r\n      function onResizePointerUp(event)\r\n      {\r\n         resizing = false;\r\n         if (typeof storeResizing?.set === 'function') { storeResizing.set(false); }\r\n\r\n         event.preventDefault();\r\n         node.removeEventListener(...handlers.resizeMove);\r\n         node.removeEventListener(...handlers.resizeUp);\r\n\r\n         // TODO: Direct Foundry API access.\r\n         application?._onResize?.(event);\r\n      }\r\n\r\n      return {\r\n         update: ({ active }) =>  // eslint-disable-line no-shadow\r\n         {\r\n            if (active) { activateListeners(); }\r\n            else { removeListeners(); }\r\n         },\r\n\r\n         destroy: () => removeListeners()\r\n      };\r\n   }\r\n\r\n</script>\r\n\r\n<div class=\"window-resize-handle\"\r\n     on:pointerdown={onPointerdown}\r\n     use:resizable={{ active: $storeResizable && !$storeDetached, storeResizing }}\r\n     bind:this={elementResize}>\r\n</div>\r\n\r\n<style>\r\n   .window-resize-handle {\r\n      display: block;\r\n      position: var(--tjs-app-resize-handle-position);\r\n      width: var(--tjs-app-resize-handle-width);\r\n      height: var(--tjs-app-resize-handle-height);\r\n\r\n      background: var(--tjs-app-resize-handle-background);\r\n      cursor: var(--tjs-app-resize-handle-cursor, var(--tjs-cursor-resize-nwse, nwse-resize));\r\n      filter: var(--tjs-app-resize-handle-filter, none);\r\n      inset: var(--tjs-app-resize-handle-inset);\r\n      padding: var(--tjs-app-resize-handle-padding, 0);\r\n      touch-action: none;\r\n   }\r\n</style>\r\n","<script>\n   /**\n    * Provides a component to wrap focus to the first focusable element in the given `elementRoot` prop. Place this\n    * component as the last child in `elementRoot`.\n    *\n    * @componentDocumentation\n    */\n   import { A11yHelper }    from '@typhonjs-fvtt/runtime/util/a11y';\n\n   /** @type {HTMLElement} */\n   export let elementRoot = void 0;\n\n   /** @type {boolean} */\n   export let enabled = true;\n\n   let ignoreElements, wrapEl;\n\n   $: if (wrapEl) { ignoreElements = new Set([wrapEl]); }\n\n   function onFocus()\n   {\n      // Early out if not enabled.\n      if (!enabled) { return; }\n\n      if (A11yHelper.isFocusTarget(elementRoot))\n      {\n         const firstFocusEl = A11yHelper.getFirstFocusableElement(elementRoot, ignoreElements);\n\n         if (A11yHelper.isFocusTarget(firstFocusEl) && firstFocusEl !== wrapEl)\n         {\n            firstFocusEl.focus();\n         }\n         else\n         {\n            // No focus target found, so focus elementRoot.\n            elementRoot.focus();\n         }\n      }\n   }\n</script>\n\n<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<div bind:this={wrapEl} class=tjs-focus-wrap tabindex=0 on:focus={onFocus}></div>\n\n<style>\n    div {\n        width: 0;\n        height: 0;\n        flex: 0;\n    }\n\n    div:focus {\n        outline: none;\n    }\n</style>\n","<script>\r\n   /**\r\n    * Provides an application shell is a main top level slotted component that provides a reactive\r\n    * outer wrapper and header bar for the main content component.\r\n    *\r\n    * Container queries (`inline-size`) are supported for `width` queries. The main app window container is named\r\n    * `tjs-app-window` and the window content container is `tjs-app-content`. Take note that the width available\r\n    * is the inline-size width of the app window or content minus the border constraints. Container queries will be\r\n    * disabled if the `width` app option is `auto` or not an explicit constraint. Just a precautionary warning that If\r\n    * you set `width` to `auto` during runtime unexpected behavior or a collapse of the app window will occur which is\r\n    * to be expected.\r\n    *\r\n    * @componentDocumentation\r\n    */\r\n\r\n   import {\r\n      getContext,\r\n      onMount,\r\n      setContext }                     from 'svelte';\r\n\r\n   import { resizeObserver }           from '@typhonjs-fvtt/runtime/svelte/action/dom/observer';\r\n   import { applyStyles }              from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\r\n   import { dynamicAction }            from '@typhonjs-fvtt/runtime/svelte/action/util';\r\n   import { CQPositionValidate }       from '@typhonjs-fvtt/runtime/svelte/store/position';\r\n   import { TJSDefaultTransition }     from '@typhonjs-fvtt/runtime/svelte/transition';\r\n   import { A11yHelper }               from '@typhonjs-fvtt/runtime/util/a11y';\r\n   import { ThemeObserver }            from '@typhonjs-fvtt/runtime/util/dom/theme';\r\n   import { isObject }                 from '@typhonjs-fvtt/runtime/util/object';\r\n\r\n   import { AppShellContextInternal }  from './AppShellContextInternal.js';\r\n   import TJSApplicationHeader         from './TJSApplicationHeader.svelte';\r\n   import ResizableHandle              from './ResizableHandle.svelte';\r\n\r\n   import TJSFocusWrap                 from '../internal/dom/TJSFocusWrap.svelte';\r\n\r\n   import { FVTTAppTheme }             from './data';\r\n\r\n   // Bound to the content and root elements. Can be used by parent components. SvelteApplication will also\r\n   // use 'elementRoot' to set the element of the Application. You can also provide `elementContent` and\r\n   // `elementTarget`. Please see SvelteApplication lifecycle documentation.\r\n   /** @type {HTMLElement} */\r\n   export let elementContent = void 0;\r\n   /** @type {HTMLElement} */\r\n   export let elementRoot = void 0;\r\n\r\n   // Allows custom draggable implementations to be forwarded to TJSApplicationHeader.\r\n   export let draggable = void 0;\r\n   export let draggableOptions = void 0;\r\n\r\n   // Explicit style overrides for the main app and content elements. Uses action `applyStyles`.\r\n   export let stylesApp = void 0;\r\n   export let stylesContent = void 0;\r\n\r\n   /**\r\n    * Application reference.\r\n    *\r\n    * @type {SvelteApp}\r\n    */\r\n   const application = getContext('#external')?.application;\r\n\r\n   // CQ & focus related app options stores.\r\n   const { containerQueryType, focusAuto, focusKeep, focusTrap } = application.reactive.storeAppOptions;\r\n\r\n   const { minimized } = application.reactive.storeUIState;\r\n\r\n   // Is the backing app TJSPosition instance a candidate for the `resizeObserver` action? IE `width` or `height is\r\n   // `auto` or `inherit`.\r\n   const { resizeObservable } = application.position.stores;\r\n\r\n   // Tracks the validity of size query container query types given current positional state.\r\n   const cqTypes = new CQPositionValidate(application.position);\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   // If a parent component binds and sets `appOffsetHeight` or `appOffsetWidth` to a truthy value then the\r\n   // `resizeObserver` action is enabled on the outer application `div`. Additionally, the SvelteApplication position\r\n   // resizeObserved store is updated.\r\n   export let appOffsetHeight = false;\r\n   export let appOffsetWidth = false;\r\n\r\n   // Tracks initial state if either of the above props are truthy otherwise a null operation.\r\n   const initialAppResizeObserver = !!appOffsetHeight || !!appOffsetWidth;\r\n\r\n   /**\r\n    * Reactive statement to control any dynamic action to apply for the app resize observer. It is always enabled when\r\n    * `initialAppResizeObserver` is true or when the position store `resizeObservable` is true when app position `width`\r\n    * or `height` is `auto` or `inherit`.\r\n    *\r\n    * @type {undefined | import('@typhonjs-fvtt/runtime/svelte/action/util').DynamicActionOptions}\r\n    */\r\n   $: appResizeObserver = initialAppResizeObserver || $resizeObservable ?\r\n    { action: resizeObserver, data: resizeObservedApp } : void 0;\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   // If a parent component binds and sets `contentOffsetHeight` or `contentOffsetWidth` to true then a\r\n   // resizeObserver action is enabled on the content `section`.\r\n   export let contentOffsetHeight = false;\r\n   export let contentOffsetWidth = false;\r\n   export let contentHeight = false;\r\n   export let contentWidth = false;\r\n\r\n   // Set to `resizeObserver` if either of the above props are truthy otherwise a null operation.\r\n   const contentResizeObserver = !!contentOffsetHeight || !!contentOffsetWidth || !!contentHeight || !!contentWidth ?\r\n    resizeObserver : () => null;\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   // Provides the internal context for data / stores of the application shell.\r\n   const internal = new AppShellContextInternal();\r\n\r\n   // Provides options to `A11yHelper.getFocusableElements` to ignore TJSFocusWrap by CSS class.\r\n   const s_IGNORE_CLASSES = { ignoreClasses: ['tjs-focus-wrap'] };\r\n\r\n   // Internal context for `elementContent` / `elementRoot` stores.\r\n   setContext('#internal', internal);\r\n\r\n   // Only update the `elementContent` store if the new `elementContent` is not null or undefined.\r\n   $: if (elementContent !== void 0 && elementContent !== null)\r\n   {\r\n      (/** @type {import('svelte/store').Writable} */ internal.stores.elementContent).set(elementContent);\r\n   }\r\n\r\n   // Only update the `elementRoot` store if the new `elementRoot` is not null or undefined.\r\n   $: if (elementRoot !== void 0 && elementRoot !== null)\r\n   {\r\n      (/** @type {import('svelte/store').Writable} */ internal.stores.elementRoot).set(elementRoot);\r\n   }\r\n\r\n   let focusWrapEnabled;\r\n\r\n   // Enable TJSFocusWrap component when focus trapping app option is true and app is not minimized.\r\n   $: focusWrapEnabled = $focusAuto && $focusTrap && !$minimized;\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   // The following block is somewhat complex, but allows transition options to be updated reactively during\r\n   // runtime execution.\r\n\r\n   // Exports properties to set a transition w/ in / out options.\r\n   export let transition = TJSDefaultTransition.default;\r\n   export let inTransition = TJSDefaultTransition.default;\r\n   export let outTransition = TJSDefaultTransition.default;\r\n\r\n   // Exports properties to set options for any transitions.\r\n   export let transitionOptions = void 0;\r\n   export let inTransitionOptions = TJSDefaultTransition.options;\r\n   export let outTransitionOptions = TJSDefaultTransition.options;\r\n\r\n   // Tracks last transition state.\r\n   let oldTransition = TJSDefaultTransition.default;\r\n   let oldTransitionOptions = void 0\r\n\r\n   // Run this reactive block when the last transition state is not equal to the current state.\r\n   $: if (oldTransition !== transition)\r\n   {\r\n      // If transition is defined and not the default transition then set it to both in and out transition otherwise\r\n      // set the default transition to both in & out transitions.\r\n      const newTransition = typeof transition === 'function' ? transition : TJSDefaultTransition.default;\r\n\r\n      inTransition = newTransition;\r\n      outTransition = newTransition;\r\n\r\n      oldTransition = newTransition;\r\n   }\r\n\r\n   // Run this reactive block when the last transition options state is not equal to the current options state.\r\n   $: if (oldTransitionOptions !== transitionOptions)\r\n   {\r\n      const newOptions = transitionOptions !== TJSDefaultTransition.options && isObject(transitionOptions) ?\r\n       transitionOptions : TJSDefaultTransition.options;\r\n\r\n      inTransitionOptions = newOptions;\r\n      outTransitionOptions = newOptions;\r\n\r\n      oldTransitionOptions = newOptions;\r\n   }\r\n\r\n   // Handle cases if inTransition is unset; assign noop default transition function.\r\n   $: if (typeof inTransition !== 'function') { inTransition = TJSDefaultTransition.default; }\r\n\r\n   $:\r\n   {\r\n      // Handle cases if outTransition is unset; assign noop default transition function.\r\n      if (typeof outTransition !== 'function') { outTransition = TJSDefaultTransition.default; }\r\n\r\n      // Set close animation to `false` / not run when an out transition is defined.\r\n      const defaultCloseAnimation = application?.options?.defaultCloseAnimation;\r\n      if (typeof defaultCloseAnimation === 'boolean' && defaultCloseAnimation &&\r\n       outTransition !== TJSDefaultTransition.default)\r\n      {\r\n         application.options.defaultCloseAnimation = false;\r\n      }\r\n   }\r\n\r\n   // Handle cases if inTransitionOptions is unset; assign empty default transition options.\r\n   $: if (!isObject(inTransitionOptions)) { inTransitionOptions = TJSDefaultTransition.options; }\r\n\r\n   // Handle cases if outTransitionOptions is unset; assign empty default transition options.\r\n   $: if (!isObject(outTransitionOptions)) { outTransitionOptions = TJSDefaultTransition.options; }\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   // Reactive observation of core theme.\r\n   const themeTokenStore = ThemeObserver.stores.themeToken;\r\n\r\n   // Reactive active app classes Set.\r\n   const activeClasses = application.reactive.activeClasses;\r\n\r\n   // Reactive explicit app theme name override.\r\n   const appThemeName = application.reactive.storeAppOptions.themeName;\r\n\r\n   // Apply current theme to optional app classes.\r\n   $: appClasses = FVTTAppTheme.appClasses($activeClasses, $themeTokenStore, $appThemeName);\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   // Focus `elementRoot` on mount to allow keyboard tab navigation of header buttons.\r\n   onMount(() =>\r\n   {\r\n      if ($focusAuto) { elementRoot.focus(); }\r\n   });\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   /**\r\n    * Adds the `tjs-cq` class to the main app div from rAF in `onMount` enabling container queries on the main app\r\n    * div and `.window-content`. This is necessary as browsers (Chrome / Firefox) defer layout calculations which\r\n    * may affect app positioning via `TJSPosition` when width or height is set to `auto`.\r\n    *\r\n    * @type {boolean}\r\n    */\r\n   let cqEnabled = false;\r\n\r\n   // Only enable container queries if the type requested is not indeterminate.\r\n   $: if ($cqTypes.validate($containerQueryType))\r\n   {\r\n      (/** @type {import('svelte/store').Writable} */ internal.stores.cqEnabled).set(true);\r\n\r\n      requestAnimationFrame(() => cqEnabled = true);\r\n   }\r\n   else\r\n   {\r\n      cqEnabled = false;\r\n\r\n      (/** @type {import('svelte/store').Writable} */ internal.stores.cqEnabled).set(false);\r\n   }\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   /**\r\n    * Provides a handler for the custom `close:popup` event fired by `svelte-standard` components like TJSMenu. The\r\n    * intention is to handle focus management of a component that is no longer connected in the DOM. If a target element\r\n    * that is the source of the close event is attached attempt to resolve internal focus to the application.\r\n    *\r\n    * @param {CustomEvent}  event - A custom event for `close:popup`.\r\n    */\r\n   function onClosePopup(event)\r\n   {\r\n      // Early out as automatic focus management is not enabled.\r\n      if (!$focusAuto) { return; }\r\n\r\n      const targetEl = event?.detail?.target;\r\n\r\n      // Early out if there is no target element.\r\n      if (!A11yHelper.isFocusTarget(targetEl)) { return; }\r\n\r\n      // Early out if the target element is focusable as it will gain focus naturally.\r\n      if (A11yHelper.isFocusable(targetEl)) { return; }\r\n\r\n      const elementRootContains = elementRoot.contains(targetEl);\r\n\r\n      // First check for if the target is elementRoot or elementContent then fallback to contains checks.\r\n      if (targetEl === elementRoot)\r\n      {\r\n         elementRoot.focus();\r\n      }\r\n      else if (targetEl === elementContent)\r\n      {\r\n         elementContent.focus();\r\n      }\r\n      else if (elementRootContains)\r\n      {\r\n         if (elementContent.contains(targetEl))\r\n         {\r\n            elementContent.focus();\r\n         }\r\n         else\r\n         {\r\n            elementRoot.focus();\r\n         }\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Provides focus cycling inside the application capturing `<Shift-Tab>` and if `elementRoot` or `firstFocusEl` is\r\n    * the actively focused element then last focusable element is focused skipping `TJSFocusWrap`.\r\n    *\r\n    * Also, if a popout app all key down events will bring this application to the top such that when focus is trapped\r\n    * the app is top most.\r\n    *\r\n    * @param {KeyboardEvent} event - Keyboard Event.\r\n    */\r\n   function onKeydown(event)\r\n   {\r\n      const FVTTKeyboardManager = foundry.helpers.interaction.KeyboardManager;\r\n\r\n      // TODO: Note this handling is specifically for Foundry v11+ as the platform KeyboardManager uses\r\n      // `document.querySelector(':focus')` to short circuit keyboard handling internally to KeyboardManager.\r\n      // ApplicationShell manages containing focus programmatically and this prevents the Foundry KeyboardManager from\r\n      // activating. We need to check if this key event target is currently the `elementRoot` or `elementContent` and\r\n      // the event matches any KeyboardManager actions and if so blur current focus.\r\n      if ((event.target === elementRoot || event.target === elementContent) &&\r\n       FVTTKeyboardManager && FVTTKeyboardManager?._getMatchingActions?.(\r\n        FVTTKeyboardManager?.getKeyboardEventContext?.(event))?.length)\r\n      {\r\n         event.target?.blur();\r\n         return;\r\n      }\r\n\r\n      if (focusWrapEnabled && event.shiftKey && event.code === 'Tab')\r\n      {\r\n         // Collect all focusable elements from `elementRoot` and ignore TJSFocusWrap.\r\n         const allFocusable = A11yHelper.getFocusableElements(elementRoot, s_IGNORE_CLASSES);\r\n\r\n         // Find first and last focusable elements.\r\n         const firstFocusEl = allFocusable.length > 0 ? allFocusable[0] : void 0;\r\n         const lastFocusEl = allFocusable.length > 0 ? allFocusable[allFocusable.length - 1] : void 0;\r\n\r\n         const activeWindow = application.reactive.activeWindow;\r\n\r\n         // Only cycle focus to the last keyboard focusable app element if `elementRoot` or first focusable element\r\n         // is the active element.\r\n         if (elementRoot === activeWindow.document.activeElement ||\r\n          firstFocusEl === activeWindow.document.activeElement)\r\n         {\r\n            if (A11yHelper.isFocusTarget(lastFocusEl) && firstFocusEl !== lastFocusEl) { lastFocusEl.focus(); }\r\n\r\n            event.preventDefault();\r\n            event.stopPropagation();\r\n         }\r\n      }\r\n\r\n      // Make sure this application is top most when it receives keyboard events.\r\n      application.bringToTop.call(application);\r\n   }\r\n\r\n   /**\r\n    * Invoke the app `bringToTop`.\r\n    *\r\n    * Note: `capture` is used so pointer down is always received. Be mindful as `onPointerdownAppCapture` should only\r\n    * invoke `bringToTop`.\r\n    */\r\n   function onPointerdownAppCapture()\r\n   {\r\n      application.bringToTop.call(application);\r\n   }\r\n\r\n   /**\r\n    * Focus `elementContent` if the event target is not focusable and `focusAuto` is enabled.\r\n    *\r\n    * Note: `focusAuto` is an app option store. This check is a bit tricky as `section.window-content` has a tabindex\r\n    * of '-1', so it is focusable manually.\r\n    */\r\n   function onPointerdownContent(event)\r\n   {\r\n      // Note: the event target may not always be the element that will eventually receive focus.\r\n      const focusable = A11yHelper.isFocusable(event.target);\r\n\r\n      if (!focusable && $focusAuto)\r\n      {\r\n         if ($focusKeep)\r\n         {\r\n            const activeWindow = application.reactive.activeWindow;\r\n            const focusOutside = !elementRoot.contains(activeWindow.document.activeElement);\r\n\r\n            // Only focus the content element if the active element is outside the app; maintaining internal focused\r\n            // element.\r\n            if (focusOutside)\r\n            {\r\n               elementContent.focus();\r\n            }\r\n            else\r\n            {\r\n               event.preventDefault();\r\n            }\r\n         }\r\n         else\r\n         {\r\n            elementContent.focus();\r\n         }\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Callback for app resizeObserver action. This is enabled when appOffsetHeight or appOffsetWidth is\r\n    * bound. Additionally, the Application position resizeObserved store is updated.\r\n    *\r\n    * @param {number}   offsetWidth - Observed offsetWidth.\r\n    *\r\n    * @param {number}   offsetHeight - Observed offsetHeight\r\n    *\r\n    * @param {number}   width - Observed offsetWidth - border / padding.\r\n    *\r\n    * @param {number}   height - Observed offsetHeight - border / padding.\r\n    */\r\n   function resizeObservedApp(offsetWidth, offsetHeight, width, height)\r\n   {\r\n      application.position.stores.resizeObserved.update((object) =>\r\n      {\r\n         object.contentWidth = width;\r\n         object.contentHeight = height;\r\n         object.offsetWidth = offsetWidth;\r\n         object.offsetHeight = offsetHeight;\r\n\r\n         return object;\r\n      });\r\n\r\n      appOffsetHeight = offsetHeight;\r\n      appOffsetWidth = offsetWidth;\r\n   }\r\n\r\n   /**\r\n    * Callback for content resizeObserver action. This is enabled when contentOffsetHeight or contentOffsetWidth is\r\n    * bound.\r\n    *\r\n    * @param {number}   offsetWidth - Observed offsetWidth.\r\n    *\r\n    * @param {number}   offsetHeight - Observed offsetHeight\r\n    *\r\n    * @param {number}   width - Observed offsetWidth - border / padding.\r\n    *\r\n    * @param {number}   height - Observed offsetHeight - border / padding.\r\n    */\r\n   function resizeObservedContent(offsetWidth, offsetHeight, width, height)\r\n   {\r\n      contentOffsetWidth = offsetWidth;\r\n      contentOffsetHeight = offsetHeight;\r\n      contentWidth = width;\r\n      contentHeight = height;\r\n\r\n      (/** @type {import('svelte/store').Writable} */ internal.stores.contentOffsetWidth).set(contentOffsetWidth);\r\n      (/** @type {import('svelte/store').Writable} */ internal.stores.contentOffsetHeight).set(contentOffsetHeight);\r\n      (/** @type {import('svelte/store').Writable} */ internal.stores.contentWidth).set(contentWidth);\r\n      (/** @type {import('svelte/store').Writable} */ internal.stores.contentHeight).set(contentHeight);\r\n   }\r\n\r\n   /**\r\n    * Transitions can cause side effects. Work around this issue by using an if conditional.\r\n    * Due to timing issues and the onDestroy / outro transitions can cause elementRoot / elementContent to be set to\r\n    * null when swapped dynamically. There is a feature request to allow transition functions to be undefined:\r\n    *\r\n    * @see: https://github.com/sveltejs/svelte/issues/6942\r\n    */\r\n</script>\r\n\r\n<svelte:options accessors={true}/>\r\n\r\n{#if inTransition !== TJSDefaultTransition.default || outTransition !== TJSDefaultTransition.default}\r\n   <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\r\n   <div id={application.id}\r\n        class=\"application tjs-app {appClasses}\"\r\n        class:tjs-cq-inline-size={cqEnabled && $containerQueryType === 'inline-size'}\r\n        class:tjs-cq-size={cqEnabled && $containerQueryType === 'size'}\r\n        data-appid={application.appId}\r\n        bind:this={elementRoot}\r\n        in:inTransition|global={inTransitionOptions}\r\n        out:outTransition|global={outTransitionOptions}\r\n        on:close:popup|preventDefault|stopPropagation={onClosePopup}\r\n        on:keydown={onKeydown}\r\n        on:pointerdown|capture={onPointerdownAppCapture}\r\n        use:applyStyles={stylesApp}\r\n        use:dynamicAction={appResizeObserver}\r\n        role=application\r\n        tabindex=-1>\r\n      <TJSApplicationHeader {draggable} {draggableOptions} />\r\n      <section class=window-content\r\n               bind:this={elementContent}\r\n               on:pointerdown={onPointerdownContent}\r\n               use:applyStyles={stylesContent}\r\n               use:contentResizeObserver={resizeObservedContent}\r\n               tabindex=-1>\r\n         <slot />\r\n      </section>\r\n      <ResizableHandle />\r\n      <TJSFocusWrap {elementRoot} />\r\n   </div>\r\n{:else}\r\n   <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\r\n   <div id={application.id}\r\n        class=\"application tjs-app {appClasses}\"\r\n        class:tjs-cq-inline-size={cqEnabled && $containerQueryType === 'inline-size'}\r\n        class:tjs-cq-size={cqEnabled && $containerQueryType === 'size'}\r\n        data-appid={application.appId}\r\n        bind:this={elementRoot}\r\n        on:close:popup|preventDefault|stopPropagation={onClosePopup}\r\n        on:keydown={onKeydown}\r\n        on:pointerdown|capture={onPointerdownAppCapture}\r\n        use:applyStyles={stylesApp}\r\n        use:dynamicAction={appResizeObserver}\r\n        role=application\r\n        tabindex=-1>\r\n      <TJSApplicationHeader {draggable} {draggableOptions} />\r\n      <section class=window-content\r\n               bind:this={elementContent}\r\n               on:pointerdown={onPointerdownContent}\r\n               use:applyStyles={stylesContent}\r\n               use:contentResizeObserver={resizeObservedContent}\r\n               tabindex=-1>\r\n         <slot />\r\n      </section>\r\n      <ResizableHandle />\r\n      <TJSFocusWrap {elementRoot} enabled={focusWrapEnabled} />\r\n   </div>\r\n{/if}\r\n\r\n<style>\r\n   /* Override stock Foundry removing min & max width / height as TJSPosition & `auto` sizing is better without. */\r\n   .application {\r\n      contain: layout style paint;\r\n\r\n      max-width: var(--tjs-app-max-width, unset);\r\n      max-height: var(--tjs-app-max-height, unset);\r\n\r\n      min-width: var(--tjs-app-min-width, unset);\r\n      min-height: var(--tjs-app-min-height, unset);\r\n\r\n      overflow: var(--tjs-app-overflow, hidden);\r\n\r\n      scrollbar-width: var(--tjs-app-scrollbar-width, inherit);\r\n      scrollbar-color: var(--tjs-app-scrollbar-color, inherit);\r\n   }\r\n\r\n   .application:focus-visible {\r\n      outline: var(--tjs-app-content-outline-focus-visible, var(--tjs-default-a11y-outline-focus-visible, 2px solid transparent));\r\n   }\r\n\r\n   /* Defines the container query container when enabled */\r\n   .tjs-app.tjs-cq-inline-size .window-content {\r\n      container: tjs-app-content / inline-size;\r\n   }\r\n\r\n   .tjs-app.tjs-cq-size .window-content {\r\n      container: tjs-app-content / size;\r\n   }\r\n\r\n   .tjs-app :global(.tjs-draggable) {\r\n      cursor: var(--tjs-cursor-grab, grab);\r\n   }\r\n\r\n   .tjs-app :global(.tjs-draggable:active) {\r\n      cursor: var(--tjs-cursor-grabbing, var(--tjs-cursor-grab-down, grabbing));\r\n   }\r\n\r\n   .tjs-app :global(label) {\r\n      cursor: var(--tjs-cursor-default, default);\r\n   }\r\n\r\n   .window-content:focus-visible {\r\n      outline: var(--tjs-app-content-outline-focus-visible, var(--tjs-default-a11y-outline-focus-visible, 2px solid transparent));\r\n   }\r\n</style>\r\n","<script>\n   /**\n    * @privateRemarks\n    * TODO: Add description\n    *\n    * @componentDocumentation\n    */\n   import { onMount }                  from 'svelte';\n\n   import { applyStyles }              from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { TJSDefaultTransition }     from '@typhonjs-fvtt/runtime/svelte/transition';\n   import { CrossWindow }              from '@typhonjs-fvtt/runtime/util/browser';\n   import { isObject }                 from '@typhonjs-fvtt/runtime/util/object';\n\n   /** @type {string} */\n   export let background = '#50505080';\n\n   /** @type {boolean} */\n   export let captureInput = true;\n\n   /**\n    * When true, any input fires an event `glasspane:close`.\n    *\n    * @type {boolean}\n    */\n   export let closeOnInput = void 0;\n\n   /** @type {string} */\n   export let id = void 0;\n\n   /** @type {boolean} */\n   export let slotSeparate = void 0;\n\n   /** @type {{ [key: string]: string | null }} */\n   export let styles = void 0;\n\n   /** @type {HTMLDivElement} */\n   let backgroundEl, containerEl, glassPaneEl;\n\n   $: slotSeparate = typeof slotSeparate === 'boolean' ? slotSeparate : false;\n\n   // ---------------------------------------------------------------------------------------------------------------\n\n   // The following block is somewhat complex, but allows transition options to be updated reactively during\n   // runtime execution.\n\n   // Exports properties to set a transition w/ in / out options.\n   export let transition = void 0;\n   export let inTransition = void 0;\n   export let outTransition = void 0;\n\n   // Exports properties to set options for any transitions.\n   export let transitionOptions = void 0;\n   export let inTransitionOptions = TJSDefaultTransition.options;\n   export let outTransitionOptions = TJSDefaultTransition.options;\n\n   // Tracks last transition state.\n   let oldTransition = void 0;\n   let oldTransitionOptions = void 0\n\n   // Run this reactive block when the last transition state is not equal to the current state.\n   $: if (oldTransition !== transition)\n   {\n      // If transition is defined and not the default transition then set it to both in and out transition otherwise\n      // set the default transition to both in & out transitions.\n      const newTransition = typeof transition === 'function' ? transition : void 0;\n\n      inTransition = newTransition;\n      outTransition = newTransition;\n\n      oldTransition = newTransition;\n   }\n\n   // Run this reactive block when the last transition options state is not equal to the current options state.\n   $: if (oldTransitionOptions !== transitionOptions)\n   {\n      const newOptions = transitionOptions !== TJSDefaultTransition.options && isObject(transitionOptions) ?\n       transitionOptions : TJSDefaultTransition.options;\n\n      inTransitionOptions = newOptions;\n      outTransitionOptions = newOptions;\n\n      oldTransitionOptions = newOptions;\n   }\n\n   // Handle cases if inTransition is unset; assign noop default transition function.\n   $: if (typeof inTransition !== 'function') { inTransition = void 0; }\n\n   // Handle cases if outTransition is unset; assign noop default transition function.\n   $: if (typeof outTransition !== 'function') { outTransition = void 0; }\n\n   // Handle cases if inTransitionOptions is unset; assign empty default transition options.\n   $: if (!isObject(inTransitionOptions)) { inTransitionOptions = TJSDefaultTransition.options; }\n\n   // Handle cases if outTransitionOptions is unset; assign empty default transition options.\n   $: if (!isObject(outTransitionOptions)) { outTransitionOptions = TJSDefaultTransition.options; }\n\n   // ---------------------------------------------------------------------------------------------------------------\n\n   onMount(() =>\n   {\n      // Automatically invoke popover state.\n      glassPaneEl.showPopover();\n   });\n\n   // ---------------------------------------------------------------------------------------------------------------\n\n   /**\n    * Swallows / stops propagation for all events where the event target is not contained by the glass pane element.\n    *\n    * @param {Event} event - The event to swallow.\n    */\n   function swallow(event)\n   {\n      const targetEl = event.target;\n\n      // Special handling of the Escape key pressed regardless of event target.\n      if (event?.type === 'keydown' && event?.code === 'Escape')\n      {\n         glassPaneEl.dispatchEvent(new CustomEvent('glasspane:keydown:escape', { bubbles: true, cancelable: true }));\n      }\n\n      // Ignore any events originating inside the glasspane. Return early if event target is not contained in glasspane.\n      // An `instanceof` check ensures that the target is a Node. There may be cases where the target could be the\n      // `window`, etc.\n      if (targetEl !== glassPaneEl && targetEl !== backgroundEl && targetEl !== containerEl &&\n       glassPaneEl.contains(CrossWindow.isNode(targetEl) ? targetEl : null))\n      {\n         return;\n      }\n\n      if (captureInput)\n      {\n         // `wheel` event types can't use `preventDefault` in capture / passive mode.\n         // see: https://chromestatus.com/feature/6662647093133312\n         if (event?.type !== 'wheel') { event.preventDefault(); }\n\n         event.stopImmediatePropagation();\n      }\n\n      if (event?.type === 'pointerdown')\n      {\n         glassPaneEl.dispatchEvent(new CustomEvent('glasspane:pointerdown', { bubbles: true, cancelable: true }));\n\n         if (closeOnInput)\n         {\n            glassPaneEl.dispatchEvent(new CustomEvent('glasspane:close', { bubbles: true, cancelable: true }));\n         }\n      }\n   }\n</script>\n\n<!-- Capture all input -->\n<svelte:window\n        on:contextmenu|capture={swallow}\n        on:click|capture={swallow}\n        on:dblclick|capture={swallow}\n        on:keydown|capture={swallow}\n        on:keyup|capture={swallow}\n        on:mousedown|capture={swallow}\n        on:mousemove|capture={swallow}\n        on:mouseup|capture={swallow}\n        on:pointerdown|capture={swallow}\n        on:pointermove|capture={swallow}\n        on:pointerup|capture={swallow}\n        on:touchend|capture={swallow}\n        on:touchmove|capture={swallow}\n        on:touchstart|capture={swallow}\n        on:wheel|capture={swallow}\n/>\n\n<div id={id}\n     bind:this={glassPaneEl}\n     class=tjs-glass-pane\n     popover=manual\n     on:glasspane:close\n     on:glasspane:keydown:escape\n     on:glasspane:pointerdown>\n\n   {#if slotSeparate}\n      <div class=tjs-glass-pane-background\n           bind:this={backgroundEl}\n           style:background={background}\n           in:inTransition|global={inTransitionOptions}\n           out:outTransition|global={outTransitionOptions}\n           use:applyStyles={styles}></div>\n\n      <div class=tjs-glass-pane-container bind:this={containerEl}>\n         <slot />\n      </div>\n   {:else}\n      <div class=\"tjs-glass-pane-background tjs-glass-pane-container\"\n           bind:this={backgroundEl}\n           style:background={background}\n           in:inTransition|global={inTransitionOptions}\n           out:outTransition|global={outTransitionOptions}\n           use:applyStyles={styles}>\n         <slot />\n      </div>\n   {/if}\n</div>\n\n<style>\n   .tjs-glass-pane {\n       border: none;\n       background: transparent;\n    }\n\n   .tjs-glass-pane, .tjs-glass-pane-background, .tjs-glass-pane-container {\n      position: absolute;\n      overflow: hidden;\n\n      padding: 0;\n      height: 100%;\n      width: 100%;\n      max-height: 100%;\n      max-width: 100%;\n   }\n</style>\n","import { FVTTConfigure }                     from './FVTTConfigure.js';\r\n\r\nexport { default as ApplicationShell }       from './ApplicationShell.svelte';\r\nexport { default as EmptyApplicationShell }  from './EmptyApplicationShell.svelte';\r\nexport { default as TJSApplicationShell }    from './TJSApplicationShell.svelte';\r\nexport { default as TJSGlassPane }           from './TJSGlassPane.svelte';\r\n\r\nHooks.once('init', () => FVTTConfigure.initialize());\r\n","<script>\r\n   /**\r\n    * @privateRemarks\r\n    * TODO: Add description\r\n    *\r\n    * @componentDocumentation\r\n    * @internal\r\n    */\r\n   import {\r\n      getContext,\r\n      onDestroy,\r\n      onMount }               from 'svelte';\r\n\r\n   import { applyStyles }     from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\r\n\r\n   import { TJSSvelte }       from '@typhonjs-fvtt/runtime/svelte/util';\r\n\r\n   import { A11yHelper }      from '@typhonjs-fvtt/runtime/util/a11y';\r\n   import { localize }        from '@typhonjs-fvtt/runtime/util/i18n';\r\n   import { isObject }        from '@typhonjs-fvtt/runtime/util/object';\r\n\r\n   export let data = void 0;\r\n   export let preventDefault = false;\r\n   export let stopPropagation = false;\r\n\r\n   export let dialogComponent = void 0;\r\n\r\n   const s_REGEX_HTML = /^\\s*<.*>$/;\r\n\r\n   const { elementRoot } = getContext('#internal').stores;\r\n\r\n   /**\r\n    * @type {TJSDialog}\r\n    */\r\n   const application = getContext('#external')?.application;\r\n\r\n   const managedPromise = getContext('#managedPromise');\r\n\r\n   let buttons;\r\n\r\n   /** @type {HTMLDivElement} */\r\n   let contentEl;\r\n\r\n   /** @type {HTMLDivElement} */\r\n   let buttonsEl;\r\n\r\n   let content = void 0;\r\n   let dialogClass;\r\n   let dialogProps = {};\r\n\r\n   let currentButtonId = data.default;\r\n\r\n   // Remove key listeners from elementRoot.\r\n   onDestroy(() =>\r\n   {\r\n      const rootEl = $elementRoot;\r\n      if (A11yHelper.isFocusTarget(rootEl))\r\n      {\r\n         rootEl.removeEventListener('keydown', onKeydown)\r\n         rootEl.removeEventListener('keyup', onKeyup)\r\n      }\r\n   })\r\n\r\n   // If `focusFirst` is true then focus first focusable element iin dialog content.\r\n   onMount(() =>\r\n   {\r\n      if (focusFirst)\r\n      {\r\n         const focusEl = A11yHelper.getFirstFocusableElement(contentEl);\r\n\r\n         if (A11yHelper.isFocusTarget(focusEl))\r\n         {\r\n            // Focus on next macrotask to allow application / dialog to mount to bypass ApplicationShell onMount focus\r\n            // handling.\r\n            setTimeout(() => focusEl.focus(), 0);\r\n         }\r\n      }\r\n   });\r\n\r\n   // Add key listeners to elementRoot when it is bound.\r\n   $: if ($elementRoot)\r\n   {\r\n      const rootEl = $elementRoot;\r\n      if (A11yHelper.isFocusTarget(rootEl))\r\n      {\r\n         rootEl.addEventListener('keydown', onKeydown)\r\n         rootEl.addEventListener('keyup', onKeyup)\r\n      }\r\n   }\r\n\r\n   // Automatically close the dialog on button click handler completion.\r\n   $: autoClose = typeof data.autoClose === 'boolean' ? data.autoClose : true;\r\n\r\n   // When true the first focusable element that isn't a button is focused.\r\n   $: focusFirst = typeof data.focusFirst === 'boolean' ? data.focusFirst : false;\r\n\r\n   // Focus current button when `buttonsEl` is bound.\r\n   $: if (!focusFirst && A11yHelper.isFocusTarget(buttonsEl))\r\n   {\r\n      const buttonEl = buttonsEl.querySelector(`.${currentButtonId}`);\r\n      if (A11yHelper.isFocusTarget(buttonEl)) { buttonEl.focus(); }\r\n   }\r\n\r\n   // When false the dialog does not automatically close when button selected.\r\n   $: resolveId = typeof data.resolveId === 'boolean' ? data.resolveId : false;\r\n\r\n   // If `data.buttons` is not an object then set an empty array otherwise reduce the button data.\r\n   $:\r\n   {\r\n      buttons = !isObject(data.buttons) ? [] : Object.keys(data.buttons).reduce((array, key) =>\r\n      {\r\n         const b = data.buttons[key];\r\n\r\n         // Handle icon and treat bare strings as the icon class; otherwise assume the icon is fully formed HTML.\r\n         const icon = typeof b.icon !== 'string' ? void 0 : s_REGEX_HTML.test(b.icon) ? b.icon :\r\n          `<i class=\"${b.icon}\"></i>`;\r\n\r\n         const autoClose = typeof b.autoClose === 'boolean' ? b.autoClose : true;\r\n\r\n         const disabled = typeof b.disabled === 'boolean' ? b.disabled : false;\r\n\r\n         const label = typeof b.label === 'string' ? `${icon !== void 0 ? ' ' : ''}${localize(b.label)}` : '';\r\n\r\n         const title = typeof b.title === 'string' ? localize(b.title) : void 0;\r\n\r\n         // Test any condition supplied otherwise default to true.\r\n         const condition = typeof b.condition === 'function' ? b.condition.call(b) : b.condition ?? true;\r\n\r\n         if (condition) { array.push({ ...b, id: key, autoClose, icon, label, title, disabled }); }\r\n\r\n         return array;\r\n      }, []);\r\n   }\r\n\r\n   /**\r\n    * This reactivity block will trigger on arrow left / right key presses _and_ when buttons change. It is OK for it to\r\n    * trigger on both.\r\n    */\r\n   $: if (!buttons.find((button) => button.id === currentButtonId)) { currentButtonId = void 0; }\r\n\r\n   $: if (content !== data.content) // Only update the content if it has changed.\r\n   {\r\n      content = data.content;\r\n\r\n      try\r\n      {\r\n         if (TJSSvelte.config.isConfigEmbed(content))\r\n         {\r\n            dialogClass = content.class;\r\n            dialogProps = content.props;\r\n         }\r\n         else\r\n         {\r\n            dialogClass = void 0;\r\n            dialogProps = {};\r\n         }\r\n      }\r\n      catch (err)\r\n      {\r\n         dialogClass = void 0;\r\n         dialogProps = {};\r\n\r\n         content = err.message;\r\n         console.error(err);\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Handle button click.\r\n    *\r\n    * @privateRemarks\r\n    * TODO: When app eventbus is available send event for UI notification instead of Foundry API usage.\r\n    *\r\n    * @param {import('@typhonjs-fvtt/runtime/svelte/application').TJSDialogButtonData}   button - button data.\r\n    *\r\n    * @returns {*}\r\n    */\r\n   function onClick(button)\r\n   {\r\n      try\r\n      {\r\n         let result = void 0;\r\n\r\n         const callback = button?.onPress;\r\n\r\n         switch (typeof callback)\r\n         {\r\n            case 'function':\r\n               // Pass back the TJSDialog instance.\r\n               result = callback({ application });\r\n               break;\r\n\r\n            case 'string':\r\n               // Attempt lookup by function name in dialog instance component.\r\n               if (dialogComponent !== void 0 && typeof dialogComponent[callback] === 'function')\r\n               {\r\n                  result = dialogComponent[callback]({ application });\r\n               }\r\n               else\r\n               {\r\n                  if (dialogComponent === void 0)\r\n                  {\r\n                     console.warn(`[TRL] TJSDialog warning: 'onPress' defined as a string with no associated ` +\r\n                      `content Svelte component.`);\r\n                  }\r\n                  else if (typeof dialogComponent?.[callback] !== 'function')\r\n                  {\r\n                     console.warn(`[TRL] TJSDialog warning: The content Svelte component does not contain an ` +\r\n                      `associated function '${callback}'. Did you remember to add ` +\r\n                       `'<svelte:options accessors={true} />' and export the function?`);\r\n                  }\r\n               }\r\n               break;\r\n         }\r\n\r\n         // By default, both 'button.autoClose' & autoClose are true, so skip auto-closing when either is false.\r\n         if (button.autoClose && autoClose)\r\n         {\r\n            // If `resolveId` dialog option is true and current result is undefined then set result to the button ID.\r\n            if (resolveId && result === void 0) { result = button.id; }\r\n\r\n            managedPromise.resolve(result);\r\n         }\r\n      }\r\n      catch(err)\r\n      {\r\n         const notifyError = typeof data.notifyError === 'boolean' ? data.notifyError : true;\r\n         if (notifyError)\r\n         {\r\n            // TODO: When app eventbus is available send event for UI notification instead of Foundry API usage.\r\n            globalThis.ui.notifications.error(err, { console: false });\r\n         }\r\n\r\n         // Attempt to first reject the error with any current managed Promise otherwise rethrow error.\r\n         if (!managedPromise.reject(err)) { throw err; }\r\n      }\r\n      finally\r\n      {\r\n         // By default, both 'button.autoClose' & autoClose are true, so skip auto-closing when either is false.\r\n         if (button.autoClose && autoClose) { application.close(); }\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Handles key down events for stopping propagation for arrow keys. Also handles tab / focus traversal with a timeout\r\n    * to update `currentButtonId` on the next clock tick comparing against `document.activeElement`.\r\n    *\r\n    * @param {KeyboardEvent}  event - A KeyboardEvent.\r\n    */\r\n   function onKeydown(event)\r\n   {\r\n      switch (event.code)\r\n      {\r\n         case 'ArrowLeft':\r\n         case 'ArrowRight':\r\n         case 'Enter':\r\n            event.stopPropagation();\r\n            break;\r\n\r\n         case 'Tab':\r\n            event.stopPropagation();\r\n\r\n            // Check `activeElement` on next macrotask to potentially update `currentButtonId` from tab / keyboard\r\n            // navigation.\r\n            setTimeout(() =>\r\n            {\r\n               const activeWindow = application.reactive.activeWindow;\r\n\r\n               const activeElement = activeWindow.document.activeElement;\r\n               if (A11yHelper.isFocusTarget(activeElement) && A11yHelper.isFocusTarget(buttonsEl) &&\r\n                buttonsEl.contains(activeElement))\r\n               {\r\n                  // Find class that isn't `dialog-button` or `default` and is a key in `data.buttons`.\r\n                  for (let cntr = 0; cntr < activeElement.classList.length; cntr++)\r\n                  {\r\n                     const item = activeElement.classList.item(cntr);\r\n                     if (item !== 'dialog-button' && item !== 'default' && typeof data.buttons[item] !== void 0)\r\n                     {\r\n                        currentButtonId = item;\r\n                        break;\r\n                     }\r\n                  }\r\n               }\r\n            }, 0);\r\n            break;\r\n\r\n         default:\r\n            if (preventDefault) { event.preventDefault(); }\r\n            if (stopPropagation) { event.stopPropagation(); }\r\n            break;\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Handles key up events for arrow key button navigation.\r\n    *\r\n    * @param {KeyboardEvent}  event - A KeyboardEvent.\r\n    */\r\n   function onKeyup(event)\r\n   {\r\n      switch (event.code)\r\n      {\r\n         case 'ArrowLeft':\r\n         {\r\n            event.preventDefault();\r\n            event.stopPropagation();\r\n\r\n            const activeWindow = application.reactive.activeWindow;\r\n            const activeEl = activeWindow.document.activeElement;\r\n\r\n            if (A11yHelper.isFocusTarget(buttonsEl))\r\n            {\r\n               // Only advance button via arrow key if a button is already focused.\r\n               if (A11yHelper.isFocusTarget(activeEl) && buttonsEl.contains(activeEl))\r\n               {\r\n                  const currentIndex = buttons.findIndex((button) => button.id === currentButtonId);\r\n                  if (buttons.length && currentIndex > 0) { currentButtonId = buttons[currentIndex - 1].id; }\r\n               }\r\n\r\n               const buttonEl = buttonsEl.querySelector(`.${currentButtonId}`);\r\n               if (A11yHelper.isFocusTarget(buttonEl)) { buttonEl.focus(); }\r\n            }\r\n            break;\r\n         }\r\n\r\n         case 'ArrowRight':\r\n         {\r\n            event.preventDefault();\r\n            event.stopPropagation();\r\n\r\n            const activeWindow = application.reactive.activeWindow;\r\n            const activeEl = activeWindow.document.activeElement;\r\n\r\n            if (A11yHelper.isFocusTarget(buttonsEl))\r\n            {\r\n               // Only advance button via arrow key if a button is already focused  or there is no current button ID\r\n               if (A11yHelper.isFocusTarget(activeEl) && (buttonsEl.contains(activeEl) || currentButtonId === void 0))\r\n               {\r\n                  const currentIndex = buttons.findIndex((button) => button.id === currentButtonId);\r\n                  if (buttons.length && currentIndex < buttons.length - 1) { currentButtonId = buttons[currentIndex + 1].id; }\r\n               }\r\n\r\n               const buttonEl = buttonsEl.querySelector(`.${currentButtonId}`);\r\n               if (A11yHelper.isFocusTarget(buttonEl)) { buttonEl.focus(); }\r\n            }\r\n            break;\r\n         }\r\n\r\n         case 'Enter':\r\n            event.preventDefault();\r\n            event.stopPropagation();\r\n            break;\r\n\r\n         default:\r\n            if (preventDefault) { event.preventDefault(); }\r\n            if (stopPropagation) { event.stopPropagation(); }\r\n            break;\r\n      }\r\n   }\r\n</script>\r\n\r\n<main>\r\n   <div bind:this={contentEl} class=dialog-content>\r\n      {#if typeof content === 'string'}\r\n         {@html content}\r\n      {:else if dialogClass}\r\n         <svelte:component bind:this={dialogComponent} this={dialogClass} {...dialogProps} />\r\n      {/if}\r\n   </div>\r\n\r\n   {#if buttons.length}\r\n   <div bind:this={buttonsEl} class=\"dialog-buttons tjs-dialog-buttons\">\r\n      {#each buttons as button (button.id)}\r\n      <button class=\"dialog-button tjs-dialog-button {button.id}\"\r\n              on:click|preventDefault|stopPropagation={() => onClick(button)}\r\n              on:focus={() => currentButtonId = button.id}\r\n              disabled={button.disabled}\r\n              use:applyStyles={button.styles}>\r\n         <span title={button.title}>{#if button.icon}{@html button.icon}{/if}{button.label}</span>\r\n      </button>\r\n      {/each}\r\n   </div>\r\n   {/if}\r\n</main>\r\n\r\n<style>\r\n   .dialog-buttons {\r\n      padding-top: 8px;\r\n   }\r\n\r\n   .tjs-dialog-button:hover {\r\n      outline: var(--tjs-dialog-button-outline-focus-hover, var(--tjs-default-outline-focus-hover, revert));\r\n   }\r\n\r\n   .tjs-dialog-button:focus-visible {\r\n      outline: var(--tjs-dialog-button-outline-focus-visible, var(--tjs-default-outline-focus-visible, revert));\r\n   }\r\n</style>\r\n","<script>\r\n   /**\r\n    * TODO: Add description\r\n    *\r\n    * @componentDocumentation\r\n    * @internal\r\n    */\r\n   import {\r\n      getContext,\r\n      onDestroy,\r\n      onMount,\r\n      setContext }               from 'svelte';\r\n\r\n   import { writable }           from 'svelte/store';\r\n\r\n   import { fade }               from 'svelte/transition';\r\n\r\n   import {\r\n      ApplicationShell,\r\n      TJSGlassPane }             from '@typhonjs-fvtt/runtime/svelte/component/application';\r\n\r\n   import { A11yHelper }         from '@typhonjs-fvtt/runtime/util/a11y';\r\n   import { isObject }           from '@typhonjs-fvtt/runtime/util/object';\r\n\r\n   import DialogContent          from './DialogContent.svelte';\r\n\r\n   // ApplicationShell contract.\r\n   export let elementContent = void 0;\r\n   export let elementRoot = void 0;\r\n\r\n   // The dialog data.\r\n   export let data = {};\r\n\r\n   export let dialogComponent = void 0;\r\n\r\n   export let managedPromise = void 0;\r\n\r\n   /**\r\n    * @type {TJSDialog}\r\n    */\r\n   const application = getContext('#external')?.application;\r\n\r\n   const dialogOptions = writable({});\r\n\r\n   setContext('#managedPromise', managedPromise);\r\n   setContext('#dialogOptions', dialogOptions);\r\n\r\n   const s_MODAL_TRANSITION = fade;\r\n   const s_MODAL_TRANSITION_OPTIONS = { duration: 200 };\r\n   const s_MODAL_BACKGROUND = '#50505080'\r\n\r\n   let modal = void 0;\r\n\r\n   // Stores props for the ApplicationShell.\r\n   const appProps = {\r\n      // Stores any transition functions.\r\n      transition: void 0,\r\n      inTransition: void 0,\r\n      outTransition: void 0,\r\n\r\n      // Stores properties to set for options for any transitions.\r\n      transitionOptions: void 0,\r\n      inTransitionOptions: void 0,\r\n      outTransitionOptions: void 0,\r\n\r\n      // Stores any style overrides for application shell.\r\n      stylesApp: void 0,\r\n      stylesContent: void 0\r\n   }\r\n\r\n   const modalProps = {\r\n      // Background CSS style string.\r\n      background: void 0,\r\n      slotSeparate: void 0,\r\n      styles: void 0,\r\n\r\n      // Close modal on glasspane input.\r\n      closeOnInput: void 0,\r\n\r\n      // Stores any transition functions.\r\n      transition: void 0,\r\n      inTransition: void 0,\r\n      outTransition: void 0,\r\n\r\n      // Stores properties to set for options for any transitions.\r\n      transitionOptions: void 0,\r\n      inTransitionOptions: void 0,\r\n      outTransitionOptions: void 0,\r\n   }\r\n\r\n   let zIndex = void 0;\r\n\r\n   // Only set modal once on mount. You can't change between a modal an non-modal dialog during runtime.\r\n   if (modal === void 0) { modal = typeof data?.modal === 'boolean' ? data.modal : false; }\r\n\r\n   // Special modal handling -----------------------------------------------------------------------------------------\r\n\r\n   const activeWindow = application.reactive.activeWindow;\r\n\r\n   if (!modal)\r\n   {\r\n      // Add a listener on document keydown to act before or equal with other event listeners.\r\n      onDestroy(() => activeWindow.document.removeEventListener('keydown', onKeydown));\r\n      onMount(() => activeWindow.document.addEventListener('keydown', onKeydown));\r\n   }\r\n\r\n   // Aria Attributes ------------------------------------------------------------------------------------------------\r\n\r\n   $: if (A11yHelper.isFocusTarget(elementRoot))\r\n   {\r\n      elementRoot.setAttribute('role', 'dialog');\r\n\r\n      if (modal) { elementRoot.setAttribute('aria-modal', 'true'); }\r\n   }\r\n\r\n   // SvelteApplication options --------------------------------------------------------------------------------------\r\n\r\n   // Retrieve values from the DialogData object and also potentially set any SvelteApplication accessors.\r\n   // Explicit checks are performed against existing local variables as the only externally reactive variable is `data`.\r\n   // All of the checks below trigger when there are any external changes to the `data` prop.\r\n   // Prevent any unnecessary changing of local & `application` variables unless actual changes occur.\r\n\r\n   $: if (isObject(data))\r\n   {\r\n      // Update internal dialog options store / context with `data`.\r\n      dialogOptions.set(data);\r\n\r\n      // Update the main foundry options when data changes. Perform explicit checks against existing data in `application`.\r\n\r\n      const newAlwaysOnTop = typeof data.alwaysOnTop === 'boolean' ? data.alwaysOnTop : void 0;\r\n      if (newAlwaysOnTop !== void 0 && application.reactive.alwaysOnTop !== newAlwaysOnTop)\r\n      {\r\n         application.reactive.alwaysOnTop = newAlwaysOnTop;\r\n      }\r\n\r\n      const newDraggable = typeof data.draggable === 'boolean' ? data.draggable : void 0;\r\n      if (newDraggable !== void 0 && application.reactive.draggable !== newDraggable)\r\n      {\r\n         application.reactive.draggable = newDraggable;\r\n      }\r\n\r\n      const newFocusAuto = typeof data.focusAuto === 'boolean' ? data.focusAuto : void 0;\r\n      if (newFocusAuto !== void 0 && application.reactive.focusAuto !== newFocusAuto)\r\n      {\r\n         application.reactive.focusAuto = newFocusAuto;\r\n      }\r\n\r\n      const newFocusKeep = typeof data.focusKeep === 'boolean' ? data.focusKeep : void 0;\r\n      if (newFocusKeep !== void 0 && application.reactive.focusKeep !== newFocusKeep)\r\n      {\r\n         application.reactive.focusKeep = newFocusKeep;\r\n      }\r\n\r\n      const newFocusTrap = typeof data.focusTrap === 'boolean' ? data.focusTrap : void 0;\r\n      if (newFocusTrap !== void 0 && application.reactive.focusTrap !== newFocusTrap)\r\n      {\r\n         application.reactive.focusTrap = newFocusTrap;\r\n      }\r\n\r\n      const newMinimizable = typeof data.minimizable === 'boolean' ? data.minimizable : void 0;\r\n      if (newMinimizable !== void 0 && application.reactive.minimizable !== newMinimizable)\r\n      {\r\n         application.reactive.minimizable = newMinimizable;\r\n      }\r\n\r\n      const newResizable = typeof data.resizable === 'boolean' ? data.resizable : void 0;\r\n      if (newResizable !== void 0 && application.reactive.resizable !== newResizable)\r\n      {\r\n         application.reactive.resizable = newResizable;\r\n      }\r\n\r\n      // Note application.title from Application localizes `options.title`, so compare with `application.options.title`.\r\n      const newTitle = data.title ?? 'Dialog';\r\n      if (newTitle !== application?.options?.title) { application.reactive.title = newTitle; }\r\n\r\n      const newZIndex = Number.isInteger(data.zIndex) || data.zIndex === null ? data.zIndex : void 0\r\n      if (zIndex !== newZIndex) { zIndex = newZIndex; }\r\n\r\n      if (application.position.zIndex !== zIndex) { application.position.zIndex = zIndex; }\r\n   }\r\n\r\n   // ApplicationShell transition options ----------------------------------------------------------------------------\r\n\r\n   $: if (isObject(data?.transition))\r\n   {\r\n      // Store data.transitions to shorten statements below.\r\n      const d = data.transition;\r\n\r\n      if (d?.transition !== appProps.transition) { appProps.transition = d.transition; }\r\n      if (d?.inTransition !== appProps.inTransition) { appProps.inTransition = d.inTransition; }\r\n      if (d?.outTransition !== appProps.outTransition) { appProps.outTransition = d.outTransition; }\r\n      if (d?.transitionOptions !== appProps.transitionOptions) { appProps.transitionOptions = d.transitionOptions; }\r\n\r\n      if (d?.inTransitionOptions !== appProps.inTransitionOptions)\r\n      {\r\n         appProps.inTransitionOptions = d.inTransitionOptions;\r\n      }\r\n\r\n      if (d?.outTransitionOptions !== appProps.outTransitionOptions)\r\n      {\r\n         appProps.outTransitionOptions = d.outTransitionOptions;\r\n      }\r\n   }\r\n\r\n   // Modal options --------------------------------------------------------------------------------------------------\r\n\r\n   $:\r\n   {\r\n      const newModalBackground = typeof data?.modalOptions?.background === 'string' ? data.modalOptions.background :\r\n       s_MODAL_BACKGROUND;\r\n\r\n      if (newModalBackground !== modalProps.background) { modalProps.background = newModalBackground; }\r\n   }\r\n\r\n   $:\r\n   {\r\n      const newModalSlotSeparate = typeof data?.modalOptions?.slotSeparate === 'boolean' ?\r\n       data.modalOptions.slotSeparate : void 0;\r\n\r\n      if (newModalSlotSeparate !== modalProps.slotSeparate) { modalProps.slotSeparate = newModalSlotSeparate; }\r\n   }\r\n\r\n   $:\r\n   {\r\n      const newModalStyles = isObject(data?.modalOptions?.styles) ? data.modalOptions.styles : void 0;\r\n\r\n      if (newModalStyles !== modalProps.styles) { modalProps.styles = newModalStyles; }\r\n   }\r\n\r\n   $:\r\n   {\r\n      const newModalCloseOnInput = typeof data?.modalOptions?.closeOnInput === 'boolean' ?\r\n       data.modalOptions.closeOnInput : void 0;\r\n\r\n      if (newModalCloseOnInput !== modalProps.closeOnInput) { modalProps.closeOnInput = newModalCloseOnInput; }\r\n   }\r\n\r\n   $: if (isObject(data?.modalOptions?.transition))\r\n   {\r\n      // Store data.transitions to shorten statements below.\r\n      const d = data.modalOptions.transition;\r\n\r\n      if (d?.transition !== modalProps.transition)\r\n      {\r\n         modalProps.transition = typeof d?.transition === 'function' ? d.transition : s_MODAL_TRANSITION;\r\n      }\r\n\r\n      if (d?.inTransition !== modalProps.inTransition) { modalProps.inTransition = d.inTransition; }\r\n      if (d?.outTransition !== modalProps.outTransition) { modalProps.outTransition = d.outTransition; }\r\n\r\n      // Provide default transition options if not defined.\r\n      if (d?.transitionOptions !== modalProps.transitionOptions)\r\n      {\r\n         modalProps.transitionOptions = isObject(d?.transitionOptions) ? d.transitionOptions :\r\n          s_MODAL_TRANSITION_OPTIONS;\r\n      }\r\n\r\n      if (d?.inTransitionOptions !== modalProps.inTransitionOptions)\r\n      {\r\n         modalProps.inTransitionOptions = d.inTransitionOptions;\r\n      }\r\n\r\n      if (d?.outTransitionOptions !== modalProps.outTransitionOptions)\r\n      {\r\n         modalProps.outTransitionOptions = d.outTransitionOptions;\r\n      }\r\n   }\r\n   else  // Provide a fallback / default glass pane transition when `data.modalOptions.transition` is not defined.\r\n   {\r\n      const newModalTransition = typeof data?.modalOptions?.transition?.transition === 'function' ?\r\n       data.modalOptions.transition.transition : s_MODAL_TRANSITION;\r\n\r\n      if (newModalTransition !== modalProps.transition) { modalProps.transition = newModalTransition; }\r\n\r\n      const newModalTransitionOptions = isObject(data?.modalOptions?.transitionOptions) ?\r\n       data.modalOptions.transitionOptions : s_MODAL_TRANSITION_OPTIONS;\r\n\r\n      if (newModalTransitionOptions !== modalProps.transitionOptions)\r\n      {\r\n         modalProps.transitionOptions = newModalTransitionOptions;\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Handles closing all open TJSDialog instances when <Esc> key is pressed.\r\n    *\r\n    * @param {KeyboardEvent}  event - A KeyboardEvent.\r\n    */\r\n   function onKeydown(event)\r\n   {\r\n      if (event.code === 'Escape')\r\n      {\r\n         event.preventDefault();\r\n         event.stopPropagation();\r\n         application.close();\r\n      }\r\n   }\r\n</script>\r\n\r\n<svelte:options accessors={true}/>\r\n\r\n{#if modal}\r\n   <TJSGlassPane id={`${application.id}-glasspane`} {...modalProps}\r\n                 on:glasspane:close={() => application.close()}\r\n                 on:glasspane:keydown:escape={() => application.close()}>\r\n      <ApplicationShell bind:elementRoot bind:elementContent {...appProps}>\r\n         <DialogContent bind:dialogComponent {data} stopPropagation={true} />\r\n      </ApplicationShell>\r\n   </TJSGlassPane>\r\n{:else}\r\n   <ApplicationShell bind:elementRoot bind:elementContent {...appProps}>\r\n      <DialogContent bind:dialogComponent {data} />\r\n   </ApplicationShell>\r\n{/if}\r\n","import { isIterable, isObject, safeAccess } from '@typhonjs-fvtt/runtime/util/object';\nimport { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\n\n/**\r\n * Provides utility functions for retrieving data about images.\r\n */\r\nclass ImageData\r\n{\r\n   /**\r\n    * Loads given URLs into image elements returning those that resolved with width & height dimensions. This is useful\r\n    * when the size of an image is necessary before usage.\r\n    *\r\n    * @param {string | { url?: string } | Iterable<string | { url?: string }>} urls - A list of image URLS to load or\r\n    *        object with an `url` property.\r\n    *\r\n    * @param {object} [options] - Optional options.\r\n    *\r\n    * @param {string} [options.accessor='url'] - Accessor string to access child attribute when `urls` entry contains\r\n    *        objects.\r\n    *\r\n    * @param {boolean} [options.warn=false] - Log debug warnings when a target URL can not be determined; default: false.\r\n    *\r\n    * @returns {(Promise<{\r\n    *    fulfilled: { url: string, width: number, height: number }[],\r\n    *    rejected: { url: string }[]\r\n    * }>)} An object with `fulfilled` and `rejected` requests.\r\n    */\r\n   static async getDimensions(urls, { accessor = 'url', warn = false } = {})\r\n   {\r\n      const promises = [];\r\n      const fulfilled = [];\r\n      const rejected = [];\r\n\r\n      const targetURLs = isIterable(urls) ? urls : [urls];\r\n\r\n      for (const url of targetURLs)\r\n      {\r\n         let targetURL;\r\n\r\n         if (typeof url === 'string')\r\n         {\r\n            targetURL = url;\r\n         }\r\n         else if (isObject(url))\r\n         {\r\n            targetURL = safeAccess(url, accessor);\r\n         }\r\n\r\n         if (typeof targetURL !== 'string')\r\n         {\r\n            if (warn)\r\n            {\r\n               console.warn('ImageData.getDimensions warning: Failed to locate target URL.');\r\n            }\r\n\r\n            continue;\r\n         }\r\n\r\n         promises.push(new Promise((resolve, reject) =>\r\n         {\r\n            const img = new Image();\r\n            img.src = targetURL;\r\n\r\n            // Get the actual width / height of the image.\r\n            img.onload = () => resolve({ url: targetURL, width: img.naturalWidth, height: img.naturalHeight });\r\n            img.onerror = () => reject({ url: targetURL });\r\n         }));\r\n      }\r\n\r\n      const promiseResults = await Promise.allSettled(promises);\r\n\r\n      for (const result of promiseResults)\r\n      {\r\n         switch (result.status)\r\n         {\r\n            case 'fulfilled':\r\n               fulfilled.push(result.value);\r\n               break;\r\n\r\n            case 'rejected':\r\n               rejected.push(result.reason);\r\n               break;\r\n         }\r\n      }\r\n\r\n      return { fulfilled, rejected };\r\n   }\r\n}\n\n/**\r\n * Provides management of a single Promise that can be shared and accessed across JS & Svelte components. This allows a\r\n * Promise to be created and managed as part of the TRL application lifecycle and accessed safely in various control\r\n * flow scenarios. When resolution of the current managed Promise starts further interaction is prevented.\r\n *\r\n * Note: to enable debugging / log statements set the static `logging` variable to true.\r\n */\r\nclass ManagedPromise\r\n{\r\n   /** @type {boolean} */\r\n   static #logging = false;\r\n\r\n   /** @type {{ isProcessing?: boolean, promise?: Promise, reject: Function, resolve: Function }} */\r\n   #current;\r\n\r\n   /**\r\n    * @returns {boolean} Whether global logging is enabled.\r\n    */\r\n   static get logging()\r\n   {\r\n      return this.#logging;\r\n   }\r\n\r\n   /**\r\n    * @returns {boolean} Whether there is an active managed Promise.\r\n    */\r\n   get isActive()\r\n   {\r\n      return this.#current !== void 0;\r\n   }\r\n\r\n   /**\r\n    * @returns {boolean} Whether there is an active managed Promise and resolution is currently being processed.\r\n    */\r\n   get isProcessing()\r\n   {\r\n      return this.#current !== void 0 ? this.#current.isProcessing : false;\r\n   }\r\n\r\n   /**\r\n    * Sets global logging enabled state.\r\n    *\r\n    * @param {boolean}  logging - New logging enabled state.\r\n    */\r\n   static set logging(logging)\r\n   {\r\n      if (typeof logging !== 'boolean')\r\n      {\r\n         throw new TypeError(`[TRL] ManagedPromise.logging error: 'logging' is not a boolean.`);\r\n      }\r\n\r\n      this.#logging = logging;\r\n   }\r\n\r\n   // ----------------------------------------------------------------------------------------------------------------\r\n\r\n   /**\r\n    * Resolves any current Promise with undefined and creates a new current Promise.\r\n    *\r\n    * @template T\r\n    *\r\n    * @param {object} opts - Options.\r\n    *\r\n    * @param {boolean}  [opts.reuse=false] - When true if there is an existing live Promise it is returned immediately.\r\n    *\r\n    * @returns {Promise<T>} The new current managed Promise.\r\n    */\r\n   create({ reuse = false } = {})\r\n   {\r\n      if (typeof reuse !== 'boolean')\r\n      {\r\n         throw new TypeError(`[TRL] ManagedPromise.create error: 'reuse' is not a boolean.`);\r\n      }\r\n\r\n      if (reuse && this.#current !== void 0 && CrossWindow.isPromise(this.#current.promise))\r\n      {\r\n         if (ManagedPromise.#logging)\r\n         {\r\n            console.warn(`[TRL] ManagedPromise.create info: Reusing / returning existing managed Promise.`);\r\n         }\r\n\r\n         return this.#current.promise;\r\n      }\r\n\r\n      if (this.#current !== void 0)\r\n      {\r\n         if (ManagedPromise.#logging)\r\n         {\r\n            console.warn(\r\n             `[TRL] ManagedPromise.create info: Creating a new Promise and resolving existing immediately.`);\r\n         }\r\n\r\n         this.#current.resolve(void 0);\r\n         this.#current = void 0;\r\n      }\r\n\r\n      const promise = new Promise((resolve, reject) =>\r\n      {\r\n         this.#current = {\r\n            isProcessing: false,\r\n            reject,\r\n            resolve\r\n         };\r\n      });\r\n\r\n      this.#current.promise = promise;\r\n\r\n      return promise;\r\n   }\r\n\r\n   /**\r\n    * Gets the current Promise if any.\r\n    *\r\n    * @returns {Promise<any>} Current Promise.\r\n    */\r\n   get()\r\n   {\r\n      return this.#current ? this.#current.promise : void 0;\r\n   }\r\n\r\n   /**\r\n    * Rejects the current Promise if applicable.\r\n    *\r\n    * @param {*}  [result] - Result to reject.\r\n    *\r\n    * @returns {boolean} Was the promise rejected.\r\n    */\r\n   reject(result = void 0)\r\n   {\r\n      // Early out as Promise resolution is currently processing.\r\n      if (this.#current !== void 0 && this.#current.isProcessing)\r\n      {\r\n         if (ManagedPromise.#logging)\r\n         {\r\n            console.warn(`[TRL] ManagedPromise.reject info: Currently processing promise.`);\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      if (this.#current !== void 0)\r\n      {\r\n         this.#current.isProcessing = true;\r\n\r\n         if (CrossWindow.isPromise(result))\r\n         {\r\n            result.then((value) =>\r\n            {\r\n               this.#current.reject(value);\r\n               this.#current = void 0;\r\n            }).catch((err) =>\r\n            {\r\n               this.#current.reject(err);\r\n               this.#current = void 0;\r\n            });\r\n         }\r\n         else\r\n         {\r\n            this.#current.reject(result);\r\n            this.#current = void 0;\r\n         }\r\n\r\n         return true;\r\n      }\r\n      else\r\n      {\r\n         if (ManagedPromise.#logging)\r\n         {\r\n            console.warn(`[TRL] ManagedPromise.reject warning: No current managed Promise to reject.`);\r\n         }\r\n\r\n         return false;\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Resolves the current Promise if applicable.\r\n    *\r\n    * @param {*}  [result] - Result to resolve.\r\n    *\r\n    * @returns {boolean} Was the promise resolved.\r\n    */\r\n   resolve(result = void 0)\r\n   {\r\n      // Early out as Promise resolution is currently processing.\r\n      if (this.#current !== void 0 && this.#current.isProcessing)\r\n      {\r\n         if (ManagedPromise.#logging)\r\n         {\r\n            console.warn(`[TRL] ManagedPromise.resolve info: Currently processing promise.`);\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      if (this.#current !== void 0)\r\n      {\r\n         if (CrossWindow.isPromise(result))\r\n         {\r\n            this.#current.isProcessing = true;\r\n\r\n            result.then((value) =>\r\n            {\r\n               this.#current.resolve(value);\r\n               this.#current = void 0;\r\n            }).catch((err) =>\r\n            {\r\n               this.#current.reject(err);\r\n               this.#current = void 0;\r\n            });\r\n         }\r\n         else\r\n         {\r\n            this.#current.resolve(result);\r\n            this.#current = void 0;\r\n         }\r\n\r\n         return true;\r\n      }\r\n      else\r\n      {\r\n         if (ManagedPromise.#logging)\r\n         {\r\n            console.warn(`[TRL] ManagedPromise.resolve warning: No current managed Promise to resolve.`);\r\n         }\r\n\r\n         return false;\r\n      }\r\n   }\r\n}\n\nexport { ImageData, ManagedPromise };\n//# sourceMappingURL=index.js.map\n","import { ThemeObserver } from '@typhonjs-fvtt/runtime/util/dom/theme';\nimport { isObject, deepMerge, safeAccess, safeSet, hasGetter, klona } from '@typhonjs-fvtt/runtime/util/object';\nimport { writable, derived } from 'svelte/store';\nimport { SvelteSet } from '@typhonjs-fvtt/runtime/svelte/reactivity';\nimport { subscribeIgnoreFirst } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { TJSWebStorage, TJSSessionStorage } from '@typhonjs-fvtt/runtime/svelte/store/web-storage';\nimport { propertyStore } from '@typhonjs-fvtt/runtime/svelte/store/writable-derived';\nimport { TJSSvelte } from '@typhonjs-fvtt/runtime/svelte/util';\nimport { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { StyleSheetResolve } from '@typhonjs-fvtt/runtime/util/dom/style';\nimport { TJSPosition } from '@typhonjs-fvtt/runtime/svelte/store/position';\nimport { A11yHelper } from '@typhonjs-fvtt/runtime/util/a11y';\nimport { nextAnimationFrame } from '@typhonjs-fvtt/runtime/util/animate';\nimport { DialogShell } from '@typhonjs-fvtt/runtime/svelte/component/internal';\nimport { ManagedPromise } from '@typhonjs-fvtt/runtime/util/async';\n\n/**\n * Provides the ability the save / restore / serialize application state for positional and UI state such as minimized\n * status.\n */\nclass ApplicationState\n{\n   /** @type {import('../../SvelteApp.js').SvelteApp} */\n   #application;\n\n   /**\n    * Stores the current save state key being restored by animating. When a restore is already being animated with the\n    * same name the subsequent restore animation is ignored.\n    *\n    * @type {string | undefined}\n    */\n   #currentRestoreKey;\n\n   /** @type {Map<string, import('../../types').SvelteApp.API.State.Data>} */\n   #dataSaved = new Map();\n\n   /**\n    * @param {import('../../SvelteApp.js').SvelteApp}   application - The application.\n    */\n   constructor(application)\n   {\n      this.#application = application;\n\n      Object.seal(this);\n   }\n\n   /**\n    * Clears all saved application state.\n    */\n   clear()\n   {\n      this.#dataSaved.clear();\n   }\n\n   /**\n    * Returns current application state along with any extra data passed into method.\n    *\n    * @param {object} [extra] - Extra data to add to application state.\n    *\n    * @returns {import('../../types').SvelteApp.API.State.Data} Passed in object with current application state.\n    */\n   current(extra = {})\n   {\n      return Object.assign(extra, {\n         position: this.#application?.position?.get(),\n         beforeMinimized: this.#application?.position?.state.get({ name: '#beforeMinimized' }),\n         options: this.#application?.reactive?.toJSON(),\n         ui: { minimized: this.#application?.reactive?.minimized }\n      });\n   }\n\n   /**\n    * Gets any saved application state by name.\n    *\n    * @param {object}   options - Options.\n    *\n    * @param {string}   options.name - Saved data set name.\n    *\n    * @returns {import('../../types').SvelteApp.API.State.Data | undefined} Any saved application state.\n    */\n   get({ name })\n   {\n      if (typeof name !== 'string')\n      {\n         throw new TypeError(`[SvelteApp.state.get] error: 'name' is not a string.`);\n      }\n\n      return this.#dataSaved.get(name);\n   }\n\n   /**\n    * @returns {IterableIterator<string>} The saved application state names / keys.\n    */\n   keys()\n   {\n      return this.#dataSaved.keys();\n   }\n\n   /**\n    * Removes and returns any saved application state by name.\n    *\n    * @param {object}   options - Options.\n    *\n    * @param {string}   options.name - Name to remove and retrieve.\n    *\n    * @returns {import('../../types').SvelteApp.API.State.Data | undefined} Any saved application state.\n    */\n   remove({ name })\n   {\n      if (typeof name !== 'string') { throw new TypeError(`[SvelteApp.state.remove] error: 'name' is not a string.`); }\n\n      const data = this.#dataSaved.get(name);\n      this.#dataSaved.delete(name);\n\n      return data;\n   }\n\n   /**\n    * Restores a previously saved application state by `name` returning the data. Several optional parameters are\n    * available to animate / tween to the new state. When `animateTo` is true an animation is scheduled via\n    * {@link #runtime/svelte/store/position!TJSPosition.API.Animation.to} and the duration and easing name or function may be\n    * specified.\n    *\n    * @param {object}            options - Options.\n    *\n    * @param {string}            options.name - Saved data set name.\n    *\n    * @param {boolean}           [options.remove=false] - Remove data set.\n    *\n    * @param {boolean}           [options.animateTo=false] - Animate to restore data.\n    *\n    * @param {boolean}           [options.cancelable=true] - When true, animation is cancelable.\n    *\n    * @param {number}            [options.duration=0.1] - Duration in seconds.\n    *\n    * @param {import('@typhonjs-fvtt/runtime/svelte/easing').EasingReference} [options.ease='linear'] - Easing function or easing\n    *        function name.\n    *\n    * @returns {import('../../types').SvelteApp.API.State.Data | undefined} Any saved application state.\n    */\n   restore({ name, remove = false, animateTo = false, cancelable = true, duration = 0.1, ease = 'linear' })\n   {\n      if (typeof name !== 'string')\n      {\n         throw new TypeError(`[SvelteApp.state.restore] error: 'name' is not a string.`);\n      }\n\n      const dataSaved = this.#dataSaved.get(name);\n\n      if (dataSaved)\n      {\n         if (remove) { this.#dataSaved.delete(name); }\n\n         // Multiple invocations for animated restores are skipped when one is already in progress.\n         if (animateTo && name !== this.#currentRestoreKey)\n         {\n            // Track current restore key name.\n            this.#currentRestoreKey = name;\n\n            this.#setImpl(dataSaved, {\n               animateTo,\n               async: true,\n               cancelable,\n               duration,\n               ease\n            }).then(() =>\n            {\n               // Reset current restore key name for animation if the same as initial animation initiation.\n               if (name === this.#currentRestoreKey) { this.#currentRestoreKey = void 0; }\n            });\n         }\n      }\n\n      return dataSaved;\n   }\n\n   /**\n    * Saves current application state with the opportunity to add extra data to the saved state.\n    *\n    * @param {object}   options - Options.\n    *\n    * @param {string}   options.name - Name to index this saved state.\n    *\n    * @returns {import('../../types').SvelteApp.API.State.Data} Current saved application state.\n    */\n   save({ name, ...extra })\n   {\n      if (typeof name !== 'string') { throw new TypeError(`[SvelteApp.state.save] error: 'name' is not a string.`); }\n\n      const data = this.current(extra);\n\n      this.#dataSaved.set(name, data);\n\n      return data;\n   }\n\n   /**\n    * Sets application state from the given `SvelteApp.API.State.Data` instance. Several optional parameters are\n    * available to animate / tween to the new state. When `animateTo` is true an animation is scheduled via\n    * {@link #runtime/svelte/store/position!AnimationAPI.to} and the duration and easing name or function may be\n    * specified.\n    *\n    * Note: If serializing application state any minimized apps will use the before minimized state on initial render\n    * of the app as it is currently not possible to render apps with Foundry VTT core API in the minimized state.\n    *\n    * @param {import('../../types').SvelteApp.API.State.Data}   data - Saved data set name.\n    *\n    * @param {object}         [options] - Optional parameters\n    *\n    * @param {boolean}        [options.animateTo=false] - Animate to restore data.\n    *\n    * @param {boolean}        [options.cancelable=true] - When true, animation is cancelable.\n    *\n    * @param {number}         [options.duration=0.1] - Duration in seconds.\n    *\n    * @param {import('@typhonjs-fvtt/runtime/svelte/easing').EasingReference} [options.ease='linear'] - Easing function or easing\n    *        function name.\n    */\n   set(data, options = {})\n   {\n      this.#setImpl(data, { ...options, async: false });\n   }\n\n   // Internal implementation ----------------------------------------------------------------------------------------\n\n   /**\n    * Sets application state from the given `SvelteApp.API.State.Data` instance. Several optional parameters are\n    * available to animate / tween to the new state. When `animateTo` is true an animation is scheduled via\n    * {@link #runtime/svelte/store/position!AnimationAPI.to} and the duration and easing name or function may be\n    * specified.\n    *\n    * Note: If serializing application state any minimized apps will use the before minimized state on initial render\n    * of the app as it is currently not possible to render apps with Foundry VTT core API in the minimized state.\n    *\n    * @privateRemarks\n    * TODO: THIS METHOD NEEDS TO BE REFACTORED WHEN TRL IS MADE INTO A STANDALONE FRAMEWORK.\n    *\n    * @param {import('../../types').SvelteApp.API.State.Data}   data - Saved data set name.\n    *\n    * @param {object}            [opts] - Optional parameters\n    *\n    * @param {boolean}           [opts.async=false] - If animating return a Promise that resolves with any saved data.\n    *\n    * @param {boolean}           [opts.animateTo=false] - Animate to restore data.\n    *\n    * @param {boolean}           [opts.cancelable=true] - When true, animation is cancelable.\n    *\n    * @param {number}            [opts.duration=0.1] - Duration in seconds.\n    *\n    * @param {import('@typhonjs-fvtt/runtime/svelte/easing').EasingReference} [opts.ease='linear'] - Easing function or easing\n    *        function name.\n    *\n    * @returns {undefined | Promise<void>} When asynchronous the animation Promise.\n    */\n   #setImpl(data, { async = false, animateTo = false, cancelable = true, duration = 0.1, ease = 'linear' } = {})\n   {\n      if (!isObject(data))\n      {\n         throw new TypeError(`[SvelteApp.state.set] error: 'data' is not an object.`);\n      }\n\n      const application = this.#application;\n\n      if (!isObject(data?.position))\n      {\n         console.warn(`[SvelteApp.state.set] warning: 'data.position' is not an object.`);\n         return;\n      }\n\n      // TODO: TAKE NOTE THAT WE ARE ACCESSING A FOUNDRY APP v1 GETTER HERE TO DETERMINE IF APPLICATION IS RENDERED.\n      // TODO: THIS NEEDS TO BE REFACTORED WHEN CONVERTING TRL TO A GENERIC FRAMEWORK.\n      const rendered = application.rendered;\n\n      // Update data directly with no store or inline style updates.\n      if (animateTo)  // Animate to saved data.\n      {\n         if (!rendered)\n         {\n            console.warn(`[SvelteApp.state.set] warning: application is not rendered and 'animateTo' is true.`);\n            return;\n         }\n\n         // Provide special handling to potentially change transform origin as this parameter is not animated.\n         if (data.position.transformOrigin !== application.position.transformOrigin)\n         {\n            application.position.transformOrigin = data.position.transformOrigin;\n         }\n\n         if (isObject(data?.ui))\n         {\n            const minimized = typeof data.ui?.minimized === 'boolean' ? data.ui.minimized : false;\n\n            if (application?.reactive?.minimized && !minimized)\n            {\n               application.maximize({ animate: false, duration: 0 });\n            }\n         }\n\n         const promise = application.position.animate.to(data.position, {\n            cancelable,\n            duration,\n            ease,\n            strategy: 'cancelAll'\n         }).finished.then(({ cancelled }) =>\n         {\n            if (cancelled) { return; }\n\n            // Merge in saved options to application.\n            if (isObject(data?.options))\n            {\n               application?.reactive.mergeOptions(data.options);\n            }\n\n            if (isObject(data?.ui))\n            {\n               const minimized = typeof data.ui?.minimized === 'boolean' ? data.ui.minimized : false;\n\n               // Application is currently minimized and stored state is not, so reset minimized state without\n               // animation.\n               if (!application?.reactive?.minimized && minimized)\n               {\n                  application.minimize({ animate: false, duration: 0 });\n               }\n            }\n\n            if (isObject(data?.beforeMinimized))\n            {\n               application.position.state.set({ name: '#beforeMinimized', ...data.beforeMinimized });\n            }\n         });\n\n         // Return a Promise with the application that resolves after animation ends.\n         if (async) { return promise; }\n      }\n      else\n      {\n         // Merge in saved options to application.\n         if (isObject(data?.options))\n         {\n            application?.reactive.mergeOptions(data.options);\n         }\n\n         if (rendered)\n         {\n            if (isObject(data?.ui))\n            {\n               const minimized = typeof data.ui?.minimized === 'boolean' ? data.ui.minimized : false;\n\n               // Application is currently minimized and stored state is not, so reset minimized state without\n               // animation.\n               if (application?.reactive?.minimized && !minimized)\n               {\n                  application.maximize({ animate: false, duration: 0 });\n               }\n               else if (!application?.reactive?.minimized && minimized)\n               {\n                  application.minimize({ animate: false, duration });\n               }\n            }\n\n            if (isObject(data?.beforeMinimized))\n            {\n               application.position.state.set({ name: '#beforeMinimized', ...data.beforeMinimized });\n            }\n\n            // Default options is to set data for an immediate update.\n            application.position.set(data.position);\n         }\n         else\n         {\n            // When not rendered set position to the 'beforeMinimized' data if it exists otherwise set w/ 'position'.\n            // Currently, w/ Foundry core Application API it is impossible to initially render an app in the minimized\n            // state.\n\n            let positionData = data.position;\n\n            if (isObject(data.beforeMinimized))\n            {\n               // Take before minimized data.\n               positionData = data.beforeMinimized;\n\n               // Apply position left / top to before minimized data. This covers the case when an app is minimized,\n               // but then moved. This allows restoration of the before minimized parameters w/ the last position\n               // location.\n               positionData.left = data.position.left;\n               positionData.top = data.position.top;\n            }\n\n            application.position.set(positionData);\n         }\n      }\n   }\n}\n\n/**\n * Provides a mechanism to retrieve and query all mounted Svelte components including the main application shell.\n *\n * @implements {import('../../types').SvelteApp.API.Svelte}\n */\nclass GetSvelteData\n{\n   /** @type {import('svelte').SvelteComponent[] | null[]} */\n   #applicationShellHolder;\n\n   /** @type {import('./types').SvelteData[]} */\n   #svelteData;\n\n   /**\n    * Keep a direct reference to the SvelteData array in an associated {@link SvelteApp}.\n    *\n    * @param {import('svelte').SvelteComponent[] | null[]}  applicationShellHolder - A reference to the mounted app shell.\n    *\n    * @param {import('./types').SvelteData[]}  svelteData - A reference to the SvelteData array of mounted components.\n    */\n   constructor(applicationShellHolder, svelteData)\n   {\n      this.#applicationShellHolder = applicationShellHolder;\n      this.#svelteData = svelteData;\n   }\n\n   /**\n    * Returns any mounted application shell.\n    *\n    * @returns {import('svelte').SvelteComponent} Any mounted application shell.\n    */\n   get appShell() { return this.#applicationShellHolder[0]; }\n\n   /**\n    * Returns any mounted application shell.\n    *\n    * @deprecated Use {@link GetSvelteData.appShell}; since `0.2.0` removal in `0.5.0`.\n    *\n    * @returns {import('svelte').SvelteComponent} Any mounted application shell.\n    */\n   get applicationShell() { return this.#applicationShellHolder[0]; }\n\n   /**\n    * Returns mounted application shell data / config.\n    *\n    * @internal\n    *\n    * @returns {import('./types').SvelteData} Any mounted application shell data.\n    */\n   get appShellData() { return this.#svelteData[0]; }\n}\n\n/**\n * Provides a way to easily remove the application from active window tracking setting `popOut` to false and\n * z-index to above the TJS dialog level effectively making the app always on top. When disabled, adds the\n * application back as a `popOut` window and brings it to the top of tracked windows.\n *\n * Note: This is used by:\n * - SvelteReactive when `alwaysOnTop` changes.\n * - SvelteApp when initially rendering for the first time.\n * - SvelteApp when a new root element is swapped during Vite dev mode / elementRootUpdate.\n *\n * Note: A benefit of changing `zIndex` is that this allows the `alwaysOnTop` app state to be captured by changes in\n * position when serializing `app.state.current()`.\n *\n * @param {import('../SvelteApp').SvelteApp}  application - Target application / SvelteApp.\n *\n * @param {boolean}  enabled - Enabled state for always on top.\n *\n * @param {boolean}  initialPopOut - Initial `popOut` state when app constructed.\n */\nfunction handleAlwaysOnTop(application, enabled, initialPopOut)\n{\n   if (typeof enabled !== 'boolean')\n   {\n      throw new TypeError(`[SvelteApp handleAlwaysOnTop error]: 'enabled' is not a boolean.`);\n   }\n\n   if (typeof initialPopOut !== 'boolean')\n   {\n      throw new TypeError(`[SvelteApp handleAlwaysOnTop error]: 'initialPopOut' is not a boolean.`);\n   }\n\n   const version = globalThis?.TRL_SVELTE_APP_DATA?.VERSION;\n   if (typeof version !== 'number')\n   {\n      console.error('[SvelteApp handleAlwaysOnTop error]: global SvelteApp data unavailable.');\n      return;\n   }\n\n   if (enabled)\n   {\n      globalThis.requestAnimationFrame(() =>\n      {\n         application.reactive.popOut = false;\n\n         globalThis.requestAnimationFrame(() => application.bringToTop({ force: true }));\n      });\n   }\n   else\n   {\n      globalThis.requestAnimationFrame(() =>\n      {\n         // TODO: Note direct Foundry API access.\n         application.position.zIndex = foundry.applications.api.ApplicationV2._maxZ - 1;\n\n         application.reactive.popOut = initialPopOut;\n\n         // Wait for `rAF` then bring to the top.\n         globalThis.requestAnimationFrame(() => application.bringToTop({ force: true }));\n      });\n   }\n}\n\n/**\n * Defines the application shell contract. If Svelte components export getter / setters for the following properties\n * then that component is considered an application shell.\n *\n * @type {string[]}\n */\nconst applicationShellContract = ['elementRoot'];\n\nObject.freeze(applicationShellContract);\n\n/**\n * Provides a method to determine if the passed in object / Svelte component follows the application shell contract.\n * This involves ensuring that the accessors defined in `applicationShellContract`.\n *\n * Note: A caveat is that when using Vite in a developer build components are wrapped in a proxy / ProxyComponent that\n * defines instance accessors versus on the prototype, so the check below ensures that all accessors in the contract are\n * either available on the prototype or directly on the instance.\n *\n * @param {*}  component - Object / component to test.\n *\n * @returns {boolean} Whether the component is a ApplicationShell or TJSApplicationShell.\n */\nfunction isApplicationShell(component)\n{\n   if (component === null || component === void 0) { return false; }\n\n   let compHasContract = true;\n   let protoHasContract = true;\n\n   // Check for accessors on the instance.\n   for (const accessor of applicationShellContract)\n   {\n      const descriptor = Object.getOwnPropertyDescriptor(component, accessor);\n      if (descriptor === void 0 || descriptor.get === void 0 || descriptor.set === void 0) { compHasContract = false; }\n   }\n\n   // Get the prototype which is the parent SvelteComponent that has any getter / setters.\n   const prototype = Object.getPrototypeOf(component);\n\n   // Verify the application shell contract. If the accessors (getters / setters) are defined for\n   // `applicationShellContract`.\n   for (const accessor of applicationShellContract)\n   {\n      const descriptor = Object.getOwnPropertyDescriptor(prototype, accessor);\n      if (descriptor === void 0 || descriptor.get === void 0 || descriptor.set === void 0) { protoHasContract = false; }\n   }\n\n   return compHasContract || protoHasContract;\n}\n\n/**\n * Instantiates and attaches a Svelte component to the main inserted HTML.\n *\n * @param {object}            [opts] - Optional parameters.\n *\n * @param {object}            [opts.app] - The target application\n *\n * @param {import('@typhonjs-fvtt/runtime/svelte/util').TJSSvelte.Config.Dynamic}  [opts.config] - Svelte component options\n *\n * @param {Function}          [opts.elementRootUpdate] - A callback to assign to the external context.\n *\n * @returns {import('@typhonjs-fvtt/runtime/svelte/application').SvelteData} The config + instantiated Svelte component.\n */\nfunction loadSvelteConfig({ app, config, elementRootUpdate } = {})\n{\n   let target;\n\n   // A specific HTMLElement to append Svelte component.\n   if (CrossWindow.isHTMLElement(config.target))\n   {\n      target = config.target;\n   }\n   else if (typeof config.target === 'string')\n   {\n      // Attempt to find target from query selector string.\n      const activeWindow = app?.reactive?.activeWindow;\n      target = activeWindow?.document?.querySelector(config.target);\n   }\n\n   if (!CrossWindow.isHTMLElement(target))\n   {\n      console.log(\n       `%c[TRL] loadSvelteConfig error - Could not find target, '${config.target}', for config:\\n`,\n        'background: rgb(57,34,34)', config);\n\n      throw new Error();\n   }\n\n   const NewSvelteComponent = config.class;\n\n   const svelteConfig = TJSSvelte.config.parseConfig({ ...config, target }, { contextExternal: true, thisArg: app });\n\n   const externalContext = svelteConfig.context.get('#external');\n\n   // Inject the Foundry application instance and `elementRootUpdate` to the external context.\n   externalContext.application = app;\n   externalContext.elementRootUpdate = elementRootUpdate;\n   externalContext.sessionStorage = app.reactive.sessionStorage;\n\n   let eventbus;\n\n   // Potentially inject any TyphonJS eventbus and track the proxy in the SvelteData instance.\n   if (isObject(app._eventbus) && typeof app._eventbus.createProxy === 'function')\n   {\n      eventbus = app._eventbus.createProxy();\n      externalContext.eventbus = eventbus;\n   }\n\n   // Seal external context so that it can't be extended.\n   Object.seal(externalContext);\n\n   // Create the Svelte component.\n   /**\n    * @type {import('svelte').SvelteComponent}\n    */\n   const component = new NewSvelteComponent(svelteConfig);\n\n   // Set any eventbus to the config.\n   svelteConfig.eventbus = eventbus;\n\n   /**\n    * @type {HTMLElement}\n    */\n   let element;\n\n   // We can directly get the root element from components which follow the application store contract.\n   if (isApplicationShell(component))\n   {\n      element = component.elementRoot;\n   }\n\n   if (!CrossWindow.isHTMLElement(element))\n   {\n      console.log(\n       `%c[TRL] loadSvelteConfig error - No application shell contract found. Did you bind and export a HTMLElement ` +\n        `as 'elementRoot' and include '<svelte:options accessors={true}/>'?\\n` +\n         `\\nOffending config:\\n`, 'background: rgb(57,34,34)', config);\n\n      throw new Error();\n   }\n\n   return { config: svelteConfig, component, element };\n}\n\n/**\n * API docs and description in {@link SvelteApp.API.Reactive}.\n */\nclass SvelteReactive\n{\n   /**\n    * @type {SvelteSet<string>}\n    */\n   #activeClasses;\n\n   /**\n    * @type {import('../SvelteApp').SvelteApp}\n    */\n   #application;\n\n   /**\n    * @type {boolean}\n    */\n   #initialized = false;\n\n   /**\n    * @type {boolean}\n    */\n   #initialPopOut;\n\n   /** @type {import('@typhonjs-fvtt/runtime/svelte/store/web-storage').WebStorage} */\n   #sessionStorage;\n\n   /**\n    * The Application option store which is injected into mounted Svelte component context under the `external` key.\n    *\n    * @type {import('../../types').SvelteApp.API.Reactive.AppOptions}\n    */\n   #storeAppOptions;\n\n   /**\n    * Stores the update function for `#storeAppOptions`.\n    *\n    * @type {(this: void, updater: import('svelte/store').Updater<object>) => void}\n    */\n   #storeAppOptionsUpdate;\n\n   /**\n    * Stores the UI state data to make it accessible via getters.\n    *\n    * @type {import('../../types').SvelteApp.API.Reactive.UIStateData}\n    */\n   #dataUIState;\n\n   /**\n    * The UI option store which is injected into mounted Svelte component context under the `external` key.\n    *\n    * @type {import('../../types').SvelteApp.API.Reactive.UIState}\n    */\n   #storeUIState;\n\n   /**\n    * Stores the update function for `#storeUIState`.\n    *\n    * @type {(this: void, updater: import('svelte/store').Updater<object>) => void}\n    */\n   #storeUIStateUpdate;\n\n   /**\n    * Stores the unsubscribe functions from local store subscriptions.\n    *\n    * @type {import('svelte/store').Unsubscriber[]}\n    */\n   #storeUnsubscribe = [];\n\n   /**\n    * @param {import('../SvelteApp').SvelteApp} application - The host Foundry application.\n    *\n    * @param {boolean} initialPopOut - Initial `popOut` state on app construction.\n    */\n   constructor(application, initialPopOut)\n   {\n      this.#application = application;\n      this.#initialPopOut = initialPopOut;\n\n      const optionsSessionStorage = application?.options?.sessionStorage;\n\n      if (optionsSessionStorage !== void 0 && !(optionsSessionStorage instanceof TJSWebStorage))\n      {\n         throw new TypeError(`'options.sessionStorage' is not an instance of TJSWebStorage.`);\n      }\n\n      // If no external web storage API instance is available, then create a TJSSessionStorage instance.\n      this.#sessionStorage = optionsSessionStorage !== void 0 ? optionsSessionStorage : new TJSSessionStorage();\n   }\n\n   /**\n    * Initializes reactive support. Package private for internal use.\n    *\n    * @returns {import('./types-local').SvelteReactiveStores | undefined} Internal methods to interact with Svelte\n    * stores.\n    *\n    * @package\n    * @internal\n    */\n   initialize()\n   {\n      if (this.#initialized) { return; }\n\n      this.#initialized = true;\n\n      this.#storesInitialize();\n\n      return {\n         appOptionsUpdate: this.#storeAppOptionsUpdate,\n         uiStateUpdate: this.#storeUIStateUpdate,\n         subscribe: this.#storesSubscribe.bind(this),\n         unsubscribe: this.#storesUnsubscribe.bind(this)\n      };\n   }\n\n// Store getters -----------------------------------------------------------------------------------------------------\n\n   /**\n    * @returns {import('@typhonjs-fvtt/runtime/svelte/store/web-storage').WebStorage} Returns WebStorage (session) instance.\n    */\n   get sessionStorage()\n   {\n      return this.#sessionStorage;\n   }\n\n   /**\n    * Returns the store for app options.\n    *\n    * @returns {import('../../types').SvelteApp.API.Reactive.AppOptions} App options store.\n    */\n   get storeAppOptions() { return this.#storeAppOptions; }\n\n   /**\n    * Returns the store for UI options.\n    *\n    * @returns {import('../../types').SvelteApp.API.Reactive.UIState} UI options store.\n    */\n   get storeUIState() { return this.#storeUIState; }\n\n// Only reactive getters ---------------------------------------------------------------------------------------------\n\n   /**\n    * Returns the current active CSS classes Set applied to the app window. This is reactive for any modifications.\n    *\n    * @returns {SvelteSet<string>} Active app CSS classes Set.\n    */\n   get activeClasses() { return this.#activeClasses; }\n\n   /**\n    * Returns the current active Window / WindowProxy UI state.\n    *\n    * @returns {Window} Active window UI state.\n    */\n   get activeWindow() { return this.#dataUIState.activeWindow ?? globalThis; }\n\n   /**\n    * Returns the current dragging UI state.\n    *\n    * @returns {boolean} Dragging UI state.\n    */\n   get dragging() { return this.#dataUIState.dragging; }\n\n   /**\n    * Returns whether the app is detached from the main browser window.\n    *\n    * @returns {boolean} App detached state.\n    */\n   get detached()\n   {\n      // UIState readable store for `detached` is a purely derived value. Evaluate value locally.\n      return this.#dataUIState.activeWindow !== globalThis;\n   }\n\n   /**\n    * Returns the current minimized UI state.\n    *\n    * @returns {boolean} Minimized UI state.\n    */\n   get minimized() { return this.#dataUIState.minimized; }\n\n   /**\n    * Returns the current resizing UI state.\n    *\n    * @returns {boolean} Resizing UI state.\n    */\n   get resizing() { return this.#dataUIState.resizing; }\n\n   /**\n    * Sets the current active Window / WindowProxy UI state.\n    *\n    * Note: This is protected usage and used internally.\n    *\n    * @param {Window} activeWindow - Active Window / WindowProxy UI state.\n    *\n    * @internal\n    */\n   set activeWindow(activeWindow)\n   {\n      // Note: when setting activeWindow to undefined `globalThis` is set. There isn't a great test for Window /\n      // WindowProxy, so check `toString`.\n      if (activeWindow === void 0 || activeWindow === null ||\n       (Object.prototype.toString.call(activeWindow) === '[object Window]'))\n      {\n         this.#storeUIStateUpdate((options) => deepMerge(options, { activeWindow: activeWindow ?? globalThis }));\n      }\n   }\n\n// Reactive getter / setters -----------------------------------------------------------------------------------------\n\n   /**\n    * Returns the alwaysOnTop app option.\n    *\n    * @returns {boolean} Always on top app option.\n    */\n   get alwaysOnTop() { return this.#application?.options?.alwaysOnTop; }\n\n   /**\n    * Returns the containerQueryType app option.\n    *\n    * @returns {string} App content container query app option.\n    */\n   get containerQueryType() { return this.#application?.options?.containerQueryType; }\n\n   /**\n    * Returns the draggable app option.\n    *\n    * @returns {boolean} Draggable app option.\n    */\n   get draggable() { return this.#application?.options?.draggable; }\n\n   /**\n    * Returns the focusAuto app option.\n    *\n    * @returns {boolean} When true auto-management of app focus is enabled.\n    */\n   get focusAuto() { return this.#application?.options?.focusAuto; }\n\n   /**\n    * Returns the focusKeep app option.\n    *\n    * @returns {boolean} When `focusAuto` and `focusKeep` is true; keeps internal focus.\n    */\n   get focusKeep() { return this.#application?.options?.focusKeep; }\n\n   /**\n    * Returns the focusTrap app option.\n    *\n    * @returns {boolean} When true focus trapping / wrapping is enabled keeping focus inside app.\n    */\n   get focusTrap() { return this.#application?.options?.focusTrap; }\n\n   /**\n    * Returns the headerButtonNoClose app option.\n    *\n    * @returns {boolean} Remove the close the button in header app option.\n    */\n   get headerButtonNoClose() { return this.#application?.options?.headerButtonNoClose; }\n\n   /**\n    * Returns the headerButtonNoLabel app option.\n    *\n    * @returns {boolean} Remove the labels from buttons in the header app option.\n    */\n   get headerButtonNoLabel() { return this.#application?.options?.headerButtonNoLabel; }\n\n   /**\n    * Returns the headerIcon app option.\n    *\n    * @returns {string | undefined} URL for header app icon.\n    */\n   get headerIcon() { return this.#application?.options?.headerIcon; }\n\n   /**\n    * Returns the headerNoTitleMinimized app option.\n    *\n    * @returns {boolean} When true removes the header title when minimized.\n    */\n   get headerNoTitleMinimized() { return this.#application?.options?.headerNoTitleMinimized; }\n\n   /**\n    * Returns the minimizable app option.\n    *\n    * @returns {boolean} Minimizable app option.\n    */\n   get minimizable() { return this.#application?.options?.minimizable; }\n\n   /**\n    * Returns the Foundry popOut state; {@link Application.popOut}\n    *\n    * @returns {boolean} Positionable app option.\n    */\n   get popOut() { return this.#application.popOut; }\n\n   /**\n    * Returns the positionable app option; {@link SvelteApp.Options.positionable}\n    *\n    * @returns {boolean} Positionable app option.\n    */\n   get positionable() { return this.#application?.options?.positionable; }\n\n   /**\n    * Returns the resizable option.\n    *\n    * @returns {boolean} Resizable app option.\n    */\n   get resizable() { return this.#application?.options?.resizable; }\n\n   /**\n    * Returns the explicit theme name option.\n    *\n    * @returns {string | undefined} Theme name option.\n    */\n   get themeName() { return this.#application?.options?.themeName; }\n\n   /**\n    * Returns the title accessor from the parent Application class; {@link Application.title}\n    *\n    * @privateRemarks\n    * TODO: Application v2; note that super.title localizes `this.options.title`; IMHO it shouldn't.    *\n    *\n    * @returns {string} Title.\n    */\n   get title() { return this.#application.title; }\n\n   /**\n    * Sets `this.options.alwaysOnTop`, which is reactive for application shells.\n    *\n    * @param {boolean}  alwaysOnTop - Sets the `alwaysOnTop` option.\n    */\n   set alwaysOnTop(alwaysOnTop)\n   {\n      if (typeof alwaysOnTop === 'boolean') { this.setOptions('alwaysOnTop', alwaysOnTop); }\n   }\n\n   /**\n    * Sets `this.options.containerQueryType`, which is reactive for application shells.\n    *\n    * @param {string}  containerQueryType - Sets the `containerQueryType` option.\n    */\n   set containerQueryType(containerQueryType)\n   {\n      if (containerQueryType === void 0 || containerQueryType === 'inline-size' || containerQueryType === 'size')\n      {\n         this.setOptions('containerQueryType', containerQueryType);\n      }\n   }\n\n   /**\n    * Sets `this.options.draggable`, which is reactive for application shells.\n    *\n    * @param {boolean}  draggable - Sets the draggable option.\n    */\n   set draggable(draggable)\n   {\n      if (typeof draggable === 'boolean') { this.setOptions('draggable', draggable); }\n   }\n\n   /**\n    * Sets `this.options.focusAuto`, which is reactive for application shells.\n    *\n    * @param {boolean}  focusAuto - Sets the focusAuto option.\n    */\n   set focusAuto(focusAuto)\n   {\n      if (typeof focusAuto === 'boolean') { this.setOptions('focusAuto', focusAuto); }\n   }\n\n   /**\n    * Sets `this.options.focusKeep`, which is reactive for application shells.\n    *\n    * @param {boolean}  focusKeep - Sets the focusKeep option.\n    */\n   set focusKeep(focusKeep)\n   {\n      if (typeof focusKeep === 'boolean') { this.setOptions('focusKeep', focusKeep); }\n   }\n\n   /**\n    * Sets `this.options.focusTrap`, which is reactive for application shells.\n    *\n    * @param {boolean}  focusTrap - Sets the focusTrap option.\n    */\n   set focusTrap(focusTrap)\n   {\n      if (typeof focusTrap === 'boolean') { this.setOptions('focusTrap', focusTrap); }\n   }\n\n   /**\n    * Sets `this.options.headerButtonNoClose`, which is reactive for application shells.\n    *\n    * @param {boolean}  headerButtonNoClose - Sets the headerButtonNoClose option.\n    */\n   set headerButtonNoClose(headerButtonNoClose)\n   {\n      if (typeof headerButtonNoClose === 'boolean') { this.setOptions('headerButtonNoClose', headerButtonNoClose); }\n   }\n\n   /**\n    * Sets `this.options.headerButtonNoLabel`, which is reactive for application shells.\n    *\n    * @param {boolean}  headerButtonNoLabel - Sets the headerButtonNoLabel option.\n    */\n   set headerButtonNoLabel(headerButtonNoLabel)\n   {\n      if (typeof headerButtonNoLabel === 'boolean') { this.setOptions('headerButtonNoLabel', headerButtonNoLabel); }\n   }\n\n   /**\n    * Sets `this.options.headerIcon`, which is reactive for application shells.\n    *\n    * @param {string | undefined}  headerIcon - Sets the headerButtonNoLabel option.\n    */\n   set headerIcon(headerIcon)\n   {\n      if (headerIcon === void 0 || typeof headerIcon === 'string') { this.setOptions('headerIcon', headerIcon); }\n   }\n\n   /**\n    * Sets `this.options.headerNoTitleMinimized`, which is reactive for application shells.\n    *\n    * @param {boolean}  headerNoTitleMinimized - Sets the headerNoTitleMinimized option.\n    */\n   set headerNoTitleMinimized(headerNoTitleMinimized)\n   {\n      if (typeof headerNoTitleMinimized === 'boolean')\n      {\n         this.setOptions('headerNoTitleMinimized', headerNoTitleMinimized);\n      }\n   }\n\n   /**\n    * Sets `this.options.minimizable`, which is reactive for application shells that are also pop out.\n    *\n    * @param {boolean}  minimizable - Sets the minimizable option.\n    */\n   set minimizable(minimizable)\n   {\n      if (typeof minimizable === 'boolean') { this.setOptions('minimizable', minimizable); }\n   }\n\n   /**\n    * Sets `this.options.popOut` which is reactive for application shells. This will add / remove this application\n    * from `ui.windows` via the subscription set in `#storesSubscribe`.\n    *\n    * @param {boolean}  popOut - Sets the popOut option.\n    */\n   set popOut(popOut)\n   {\n      if (typeof popOut === 'boolean') { this.setOptions('popOut', popOut); }\n   }\n\n   /**\n    * Sets `this.options.positionable`, enabling / disabling {@link SvelteApp.position}.\n    *\n    * @param {boolean}  positionable - Sets the positionable option.\n    */\n   set positionable(positionable)\n   {\n      if (typeof positionable === 'boolean') { this.setOptions('positionable', positionable); }\n   }\n\n   /**\n    * Sets `this.options.resizable`, which is reactive for application shells.\n    *\n    * @param {boolean}  resizable - Sets the resizable option.\n    */\n   set resizable(resizable)\n   {\n      if (typeof resizable === 'boolean') { this.setOptions('resizable', resizable); }\n   }\n\n   /**\n    * Sets `this.options.themeName`, which is reactive for application shells.\n    *\n    * @param {string | undefined}  themeName - Sets the themeName option.\n    */\n   set themeName(themeName)\n   {\n      if (themeName === void 0 || typeof themeName === 'string') { this.setOptions('themeName', themeName); }\n   }\n\n   /**\n    * Sets `this.options.title`, which is reactive for application shells.\n    *\n    * Note: Will set empty string if title is undefined or null.\n    *\n    * @param {string | undefined | null}   title - Application title; will be localized, so a translation key is fine.\n    */\n   set title(title)\n   {\n      if (typeof title === 'string')\n      {\n         this.setOptions('title', title);\n      }\n      else if (title === void 0 || title === null)\n      {\n         this.setOptions('title', '');\n      }\n   }\n\n   // Reactive Options API -------------------------------------------------------------------------------------------\n\n   /**\n    * Provides a way to safely get this applications options given an accessor string which describes the\n    * entries to walk. To access deeper entries into the object format the accessor string with `.` between entries\n    * to walk.\n    *\n    * @privateRemarks\n    * TODO: DOCUMENT the accessor in more detail.\n    *\n    * @param {string}   accessor - The path / key to set. You can set multiple levels.\n    *\n    * @param {*}        [defaultValue] - A default value returned if the accessor is not found.\n    *\n    * @returns {*} Value at the accessor.\n    */\n   getOptions(accessor, defaultValue)\n   {\n      return safeAccess(this.#application.options, accessor, defaultValue);\n   }\n\n   /**\n    * Provides a way to merge `options` into the application options and update the appOptions store.\n    *\n    * @param {object}   options - The options object to merge with `this.options`.\n    */\n   mergeOptions(options)\n   {\n      this.#storeAppOptionsUpdate((instanceOptions) => deepMerge(instanceOptions, options));\n   }\n\n   /**\n    * Provides a way to safely set the application options given an accessor string which describes the\n    * entries to walk. To access deeper entries into the object format, the accessor string with `.` between entries\n    * to walk.\n    *\n    * Additionally, if an application shell Svelte component is mounted and exports the `appOptions` property, then\n    * the application options are set to `appOptions` potentially updating the application shell / Svelte component.\n    *\n    * @param {string}   accessor - The path / key to set. You can set multiple levels.\n    *\n    * @param {any}      value - Value to set.\n    */\n   setOptions(accessor, value)\n   {\n      const success = safeSet(this.#application.options, accessor, value, { createMissing: true });\n\n      // If `this.options` modified, then update the app options store.\n      if (success)\n      {\n         this.#storeAppOptionsUpdate(() => this.#application.options);\n      }\n   }\n\n   /**\n    * Serializes the main {@link SvelteApp.Options} for common application state.\n    *\n    * @returns {import('../../types').SvelteApp.API.Reactive.SerializedData} Common application state.\n    */\n   toJSON()\n   {\n      return {\n         alwaysOnTop: this.#application?.options?.alwaysOnTop ?? false,\n         draggable: this.#application?.options?.draggable ?? true,\n         focusAuto: this.#application?.options?.focusAuto ?? true,\n         focusKeep: this.#application?.options?.focusKeep ?? false,\n         focusTrap: this.#application?.options?.focusTrap ?? true,\n         headerButtonNoClose: this.#application?.options?.headerButtonNoClose ?? false,\n         headerButtonNoLabel: this.#application?.options?.headerButtonNoLabel ?? false,\n         headerNoTitleMinimized: this.#application?.options?.headerNoTitleMinimized ?? false,\n         minimizable: this.#application?.options?.minimizable ?? true,\n         positionable: this.#application?.options?.positionable ?? true,\n         resizable: this.#application?.options?.resizable ?? true,\n         themeName: this.#application?.options?.themeName ?? void 0\n      };\n   }\n\n   /**\n    * Updates the UI Options store with the current header buttons. You may dynamically add / remove header buttons\n    * if using an application shell Svelte component. In either overriding `_getHeaderButtons` or responding to the\n    * Hooks fired return a new button array, and the uiOptions store is updated, and the application shell will render\n    * the new buttons.\n    *\n    * Optionally you can set in the SvelteApp app options {@link SvelteApp.Options.headerButtonNoClose}\n    * to remove the close button from the header buttons.\n    *\n    * @param {object} [opts] - Optional parameters (for internal use)\n    *\n    * @param {boolean} [opts.headerButtonNoClose] - The value for `headerButtonNoClose`.\n    */\n   updateHeaderButtons({ headerButtonNoClose = this.#application.options.headerButtonNoClose } = {})\n   {\n      // The operation is queued just in case a developer mutates reactive state inside `_getHeaderButtons`.\n      queueMicrotask(() =>\n      {\n         let buttons = this.#application._getHeaderButtons();\n\n         // Remove close button if this.options.headerButtonNoClose is true;\n         if (typeof headerButtonNoClose === 'boolean' && headerButtonNoClose)\n         {\n            buttons = buttons.filter((button) => button.class !== 'close');\n         }\n\n         // For AppV2 label compatibility for close button: `Close Window` instead of `Close`.\n         const closeButton = buttons.find((button) => button.class === 'close');\n         if (closeButton)\n         {\n            closeButton.keepMinimized = true;\n            closeButton.label = 'APPLICATION.TOOLS.Close';\n         }\n\n         this.#storeUIStateUpdate((options) =>\n         {\n            options.headerButtons = buttons;\n            return options;\n         });\n      });\n   }\n\n   // Internal implementation ----------------------------------------------------------------------------------------\n\n   /**\n    * Initializes the Svelte stores and derived stores for the application options and UI state.\n    *\n    * While writable stores are created, the update method is stored in private variables locally and derived Readable\n    * stores are provided for essential options which are commonly used.\n    *\n    * These stores are injected into all Svelte components mounted under the `external` context: `storeAppOptions` and\n    * `storeUIState`.\n    */\n   #storesInitialize()\n   {\n      this.#activeClasses = new SvelteSet();\n\n      for (const entry of this.#application.options?.classes ?? [])\n      {\n         if (typeof entry !== 'string') { continue; }\n\n         // Ignore any AppV1 themes set.\n         if (entry === 'themed' || entry.startsWith('theme-')) { continue; }\n\n         this.#activeClasses.add(entry);\n      }\n\n      /** @type {import('svelte/store').Writable<import('../../types').SvelteApp.Options>} */\n      const writableAppOptions = writable(this.#application.options);\n\n      // Keep the update function locally, but make the store essentially readable.\n      this.#storeAppOptionsUpdate = writableAppOptions.update;\n\n      /**\n       * Create custom store. The main subscribe method for all app options changes is provided along with derived\n       * writable stores for all reactive options.\n       *\n       * @type {import('../../types').SvelteApp.API.Reactive.AppOptions}\n       */\n      const storeAppOptions = {\n         subscribe: writableAppOptions.subscribe,\n\n         alwaysOnTop: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'alwaysOnTop'),\n\n         containerQueryType: /** @type {import('svelte/store').Writable<string>} */\n          propertyStore(writableAppOptions, 'containerQueryType'),\n\n         draggable: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'draggable'),\n\n         focusAuto: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'focusAuto'),\n\n         focusKeep: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'focusKeep'),\n\n         focusTrap: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'focusTrap'),\n\n         headerButtonNoClose: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'headerButtonNoClose'),\n\n         headerButtonNoLabel: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'headerButtonNoLabel'),\n\n         headerIcon: /** @type {import('svelte/store').Writable<string | undefined>} */\n          propertyStore(writableAppOptions, 'headerIcon'),\n\n         headerNoTitleMinimized: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'headerNoTitleMinimized'),\n\n         minimizable: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'minimizable'),\n\n         popOut: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'popOut'),\n\n         positionable: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'positionable'),\n\n         resizable: /** @type {import('svelte/store').Writable<boolean>} */\n          propertyStore(writableAppOptions, 'resizable'),\n\n         themeName: /** @type {import('svelte/store').Writable<string | undefined>} */\n          propertyStore(writableAppOptions, 'themeName'),\n\n         title: /** @type {import('svelte/store').Writable<string>} */\n          propertyStore(writableAppOptions, 'title')\n      };\n\n      Object.freeze(storeAppOptions);\n\n      this.#storeAppOptions = storeAppOptions;\n\n      /**\n       * Not all derived UIStateData is updated via `storeUIStateUpdate`. For instance `detached` is a pure derived\n       * Readable and must be evaluated in `get detached()`.\n       *\n       * @type {import('../../types').SvelteApp.API.Reactive.UIStateData}\n       */\n      this.#dataUIState = {\n         activeWindow: window,\n         dragging: false,\n         headerButtons: [],\n         minimized: this.#application._minimized,\n         resizing: false\n      };\n\n      /**\n       * Create a store for UI state data.\n       *\n       * @type {import('svelte/store').Writable<import('../../types').SvelteApp.API.Reactive.UIStateData>}\n       */\n      const writableUIOptions = writable(this.#dataUIState);\n\n      // Keep the update function locally, but make the store essentially readable.\n      this.#storeUIStateUpdate = writableUIOptions.update;\n\n      /**\n       * @type {import('../../types').SvelteApp.API.Reactive.UIState}\n       */\n      const storeUIState = {\n         subscribe: writableUIOptions.subscribe,\n\n         activeWindow: /** @type {import('svelte/store').Readable<Window>} */\n          derived(writableUIOptions, ($options, set) => set($options.activeWindow)),\n\n         detached: /** @type {import('svelte/store').Readable<boolean>} */\n          derived(writableUIOptions, ($options, set) => set($options.activeWindow !== globalThis)),\n\n         dragging: /** @type {import('svelte/store').Readable<boolean>} */\n          propertyStore(writableUIOptions, 'dragging'),\n\n         headerButtons: /** @type {import('svelte/store').Readable<import('../../types').SvelteApp.HeaderButton>} */\n          derived(writableUIOptions, ($options, set) => set($options.headerButtons)),\n\n         minimized: /** @type {import('svelte/store').Readable<boolean>} */\n          derived(writableUIOptions, ($options, set) => set($options.minimized)),\n\n         resizing: /** @type {import('svelte/store').Readable<boolean>} */\n          propertyStore(writableUIOptions, 'resizing')\n      };\n\n      Object.freeze(storeUIState);\n\n      // Initialize the store with options set in the Application constructor.\n      this.#storeUIState = storeUIState;\n   }\n\n   /**\n    * Registers local store subscriptions for app options. `popOut` controls registering this app with `ui.windows`.\n    *\n    * @see SvelteApp._injectHTML\n    */\n   #storesSubscribe()\n   {\n      // Register local subscriptions.\n\n      /**\n       * Provides a way to easily remove the application from active window tracking setting `popOut` to false and\n       * z-index to above the TJS dialog level effectively making the app always on top. When disabled, adds the\n       * application back as a `popOut` window and brings it to the top of tracked windows.\n       */\n      this.#storeUnsubscribe.push(subscribeIgnoreFirst(this.#storeAppOptions.alwaysOnTop,\n       (enabled) => handleAlwaysOnTop(this.#application, enabled, this.#initialPopOut)));\n\n      // Handles updating header buttons to add / remove the close button.\n      this.#storeUnsubscribe.push(subscribeIgnoreFirst(this.#storeAppOptions.headerButtonNoClose, (value) =>\n       this.updateHeaderButtons({ headerButtonNoClose: value })));\n\n      // Handles adding / removing this application from `ui.windows` when `popOut` changes.\n      this.#storeUnsubscribe.push(subscribeIgnoreFirst(this.#storeAppOptions.popOut, (value) =>\n      {\n         if (value)\n         {\n            // Ensure that the app is tracked in current popout windows.\n            if (globalThis?.ui?.windows?.[this.#application.appId] !== this.#application)\n            {\n               globalThis.ui.windows[this.#application.appId] = this.#application;\n            }\n         }\n         else\n         {\n            // Remove app from global window tracking.\n            if (globalThis?.ui?.activeWindow === this.#application) { globalThis.ui.activeWindow = null; }\n\n            if (globalThis?.ui?.windows?.[this.#application.appId] === this.#application)\n            {\n               delete globalThis.ui.windows[this.#application.appId];\n            }\n         }\n      }));\n   }\n\n   /**\n    * Unsubscribes from any locally monitored stores.\n    *\n    * @see SvelteApp.close\n    */\n   #storesUnsubscribe()\n   {\n      this.#storeUnsubscribe.forEach((unsubscribe) => unsubscribe());\n      this.#storeUnsubscribe = [];\n   }\n}\n\n/**\n * Provides an index of all visible rendered {@link SvelteApp} instances in a given Svelte runtime. This allows\n * bulk operations to be performed across all apps.\n */\nclass TJSAppIndex\n{\n   /**\n    * Stores all visible / rendered apps.\n    *\n    * @type {Map<string, import('@typhonjs-fvtt/runtime/svelte/application').SvelteApp>}\n    */\n   static #visibleApps = new Map();\n\n   /**\n    * Adds a SvelteApp to all visible apps tracked.\n    *\n    * @param {import('@typhonjs-fvtt/runtime/svelte/application').SvelteApp} app - A SvelteApp\n    *\n    * @package\n    */\n   static add(app)\n   {\n      this.#visibleApps.set(app.id, app);\n   }\n\n   /**\n    * Removes a SvelteApp from all visible apps tracked.\n    *\n    * @param {import('@typhonjs-fvtt/runtime/svelte/application').SvelteApp} app - A SvelteApp\n    *\n    * @package\n    */\n   static delete(app)\n   {\n      this.#visibleApps.delete(app.id);\n   }\n\n   /**\n    * Gets a particular app by ID.\n    *\n    * @param {string}   key - App ID.\n    *\n    * @returns {import('@typhonjs-fvtt/runtime/svelte/application').SvelteApp} Associated app.\n    */\n   static get(key)\n   {\n      return this.#visibleApps.get(key);\n   }\n\n   /**\n    * Returns whether an associated app by ID is being tracked.\n    *\n    * @param {string}   key - App ID.\n    *\n    * @returns {boolean} The given App ID is visible.\n    */\n   static has(key)\n   {\n      return this.#visibleApps.has(key);\n   }\n\n   /**\n    * @returns {IterableIterator<string>} All visible app IDs.\n    */\n   static keys()\n   {\n      return this.#visibleApps.keys();\n   }\n\n   /**\n    * @returns {IterableIterator<import('@typhonjs-fvtt/runtime/svelte/application').SvelteApp>} All visible apps.\n    */\n   static values()\n   {\n      return this.#visibleApps.values();\n   }\n}\n\nclass FoundryHMRSupport\n{\n   static initialize()\n   {\n      if (import.meta.hot)\n      {\n         Hooks.on('hotReload', (data) =>\n         {\n            // Only handle JSON hot reload presumably specified in package manifest for language translation files.\n            if (data?.extension === 'json')\n            {\n               // Postpone until next macrotask to allow Foundry to update localization first.\n               setTimeout(() =>\n               {\n                  for (const app of TJSAppIndex.values())\n                  {\n                     const appShell = app.svelte.appShell;\n\n                     // Retrieve the original `svelte-hmr` instrumented HMR component / not the proxy.\n                     const hmrComponent = appShell?.$$?.hmr_cmp;\n\n                     if (appShell && typeof hmrComponent?.$replace === 'function')\n                     {\n                        const svelteData = app.svelte.appShellData;\n                        if (svelteData)\n                        {\n                           try\n                           {\n                              // Replace with self; this will invoke `on_hmr` callback in associated SvelteApp.\n                              hmrComponent.$replace(hmrComponent.constructor, {\n                                 target: svelteData.config.target,\n                                 anchor: svelteData.config.anchor,\n                                 preserveLocalState: true,\n                                 conservative: true\n                              });\n                           }\n                           catch (error)\n                           {\n                              const name = hmrComponent?.constructor?.name ?? 'Unknown';\n                              console.error(`TyphonJS Runtime Library error; Could not hot reload component: '${name}'`);\n                              console.error(error);\n                           }\n                        }\n                     }\n                  }\n               }, 0);\n            }\n\n            return true;\n         });\n      }\n   }\n}\n\n/**\n * Provides runtime-parsed styles for the core Foundry stylesheet and an extended merged version with all game system\n * and module overrides. Both, {@link FoundryStyles.core} and {@link FoundryStyles.ext} return an instance of\n * {@link #runtime/util/dom/style!StyleSheetResolve} that has a reduced amount of parsed style information relevant to\n * configuring essential styling. `StyleSheetResolve` allows access to discrete CSS selectors and associated properties\n * including resolving CSS variables across selectors / elements.\n *\n * `FoundryStyles` is used internally by TRL to construct the flattened CSS variables generated at runtime to match\n * the platform theming. The core Foundry styles are not flat with many CSS variables having extended element scoping.\n *\n * The following CSS layers are parsed from Foundry core styles:\n * ```\n * - `applications`\n * - `blocks.ui`\n * - `variables.base`\n * - `variables.themes.*`\n * - `elements.*`\n * ```\n */\nclass FoundryStyles\n{\n   /**\n    * Parsed Foundry core stylesheet.\n    *\n    * @type {StyleSheetResolve}\n    */\n   static #core;\n\n   /**\n    * Dummy / no-op instance when parsing or CORS / SecurityException occurs.\n    *\n    * @type {StyleSheetResolve}\n    */\n   static #dummy = new StyleSheetResolve().freeze();\n\n   /**\n    * Parsed Foundry core stylesheet with extended game system / module overrides.\n    *\n    * @type {StyleSheetResolve}\n    */\n   static #ext;\n\n   static #initialized = false;\n\n   /**\n    * @hideconstructor\n    */\n   constructor()\n   {\n      throw new Error('FoundryStyles constructor: This is a static class and should not be constructed.');\n   }\n\n   /**\n    * @returns {StyleSheetResolve} Core parsed styles.\n    */\n   static get core()\n   {\n      if (!this.#initialized) { this.#initialize(); }\n\n      return this.#core ?? this.#dummy;\n   }\n\n   /**\n    * @returns {StyleSheetResolve} Core parsed styles with extended game system / module overrides.\n    */\n   static get ext()\n   {\n      if (!this.#initialized) { this.#initialize(); }\n\n      return this.#ext ?? this.#dummy;\n   }\n\n   // Internal Implementation ----------------------------------------------------------------------------------------\n\n   /**\n    * Find the core Foundry CSSStyleSheet instance and any 3rd party game system / module stylesheets.\n    *\n    * Resolve the core sheet and then create the extended resolved style sheet merging the core with all system / module\n    * sheets.\n    */\n   static #initialize()\n   {\n      this.#initialized = true;\n\n      const styleSheets = Array.from(document.styleSheets);\n\n      let foundryStyleSheet;\n\n      const moduleSheets = [];\n      const systemSheets = [];\n\n      /** @type {{ href: string, core: boolean, layer?: string }[]} */\n      const failedSheets = [];\n\n      // Find the core Foundry stylesheet.\n      for (let i = 0; i < styleSheets.length; i++)\n      {\n         const sheet = styleSheets[i];\n\n         // Detect link stylesheets for the main Foundry stylesheet that have an `HREF`.\n         if (typeof sheet?.href === 'string')\n         {\n            try\n            {\n               // `sheet?.cssRules?.length` tests for a CORS / SecurityException.\n               if (sheet.href.endsWith('/css/foundry2.css') && sheet?.cssRules?.length)\n               {\n                  foundryStyleSheet = sheet;\n               }\n            }\n            catch (err)\n            {\n               if (CrossWindow.isDOMException(err, 'SecurityException'))\n               {\n                  failedSheets.push({ href: sheet.href, core: true });\n               }\n            }\n         }\n         else // Process inline style elements without links.\n         {\n            try\n            {\n               // Only capture `@import` referenced system / module style sheets.\n               if (sheet?.cssRules?.length)\n               {\n                  for (const rule of sheet.cssRules)\n                  {\n                     if (!CrossWindow.isCSSImportRule(rule) || !CrossWindow.isCSSStyleSheet(rule?.styleSheet))\n                     {\n                        continue;\n                     }\n\n                     try\n                     {\n                        switch (rule?.layerName)\n                        {\n                           case 'modules':\n                              if (rule.styleSheet?.cssRules?.length) { moduleSheets.push(rule.styleSheet); }\n                              break;\n                           case 'system':\n                              if (rule.styleSheet?.cssRules?.length) { systemSheets.push(rule.styleSheet); }\n                              break;\n                        }\n                     }\n                     catch (err)\n                     {\n                        if (CrossWindow.isDOMException(err, 'SecurityException'))\n                        {\n                           failedSheets.push({ href: rule.styleSheet.href, core: false, layer: rule.layerName });\n                        }\n                     }\n                  }\n               }\n            }\n            catch (err)\n            {\n               if (CrossWindow.isDOMException(err, 'SecurityException'))\n               {\n                  failedSheets.push({ href: '', core: false, layer: 'inline-stylesheet' });\n               }\n            }\n         }\n      }\n\n      if (failedSheets.length)\n      {\n         console.warn(`[TyphonJS Runtime] CORS / SecurityException error: FoundryStyles could not load style sheets: ${\n          JSON.stringify(failedSheets, null, 2)}`);\n      }\n\n      // Quit now if the Foundry style sheet was not found.\n      if (!foundryStyleSheet)\n      {\n         console.warn(`[TyphonJS Runtime] error: FoundryStyles could not load core style sheet.`);\n         return;\n      }\n\n      // Resolve Foundry core stylesheet.\n      this.#resolveCore(foundryStyleSheet);\n\n      // Resolve and merge all 3rd party package stylesheets.\n      this.#resolveExt(moduleSheets, systemSheets);\n\n      // Prevent future modification.\n      this.#core.freeze();\n      this.#ext.freeze();\n   }\n\n   /**\n    * @param {CSSStyleSheet}  sheet - Foundry core style sheet.\n    */\n   static #resolveCore(sheet)\n   {\n      this.#core = StyleSheetResolve.parse(sheet, {\n         // Exclude any selector parts that match the following.\n         excludeSelectorParts: [\n            />\\s*[^ ]+/,            // Direct child selectors\n            /(^|\\s)\\*/,             // Universal selectors\n            /(^|\\s)\\.app(?![\\w-])/, // AppV1 class\n            /^\\.application\\.[a-z]/, // All `.application.theme` / any specific core application.\n            /^body\\.auth/,\n            /^body(?:\\.[\\w-]+)*\\.application\\b/,  // Remove unnecessary `body.<theme>.application` pairing.\n            /^\\.\\u037c\\d/i, // Code-mirror `.ͼ1`\n            /code-?mirror/i,\n            /(^|[^a-zA-Z0-9_-])#(?!context-menu\\b)[\\w-]+|[^ \\t>+~]#context-menu\\b/,\n            /^\\.faded-ui/,\n            /(^|\\s)kbd\\b/,\n            /^input.placeholder-fa-solid\\b/,\n            /(^|\\s)label\\b/,\n            /^\\.mixin-theme/,       // Remove all mixin related styles left in by core.\n            /prose-?mirror/i,\n            /(^|\\s)section\\b/,\n            /\\.window-app/,\n\n            // Exclude various core applications.\n            /^\\.active-effect-config/,\n            /^\\.adventure-importer/,\n            /^\\.camera-view/,\n            /#camera-views/,\n            /^\\.card-config/,\n            /^\\.cards-config/,\n            /^\\.category-browser/,\n            /^\\.chat-message/,\n            /^\\.chat-sidebar/,\n            /\\.combat-sidebar/,\n            /\\.compendium-directory/,\n            /\\.compendium-sidebar/,\n            /^\\.document-ownership/,\n            /^\\.effects-tooltip/,\n            /^\\.journal-category-config/,\n            /\\.journal-entry-page/,\n            /^\\.macro-config/,\n            /^\\.package-list/,\n            /^\\.playlists-sidebar/,\n            /\\.placeable-hud/,\n            /^\\.region-config/,\n            /^\\.roll-table-sheet/,\n            /^\\.scene-config/,\n            /^\\.scenes-sidebar/,\n            /\\.settings-sidebar/,\n            /^\\.sheet.journal-entry/,\n            /^\\.template-config/,\n            /^\\.token-config/,\n            /^\\.tour/,\n            /\\.ui-control/,\n            /^\\.wall-config/,\n         ],\n\n         // Only parse CSS layers matching the following regexes.\n         includeCSSLayers: [\n            /^applications$/,\n            /^blocks.ui$/,\n            /^elements/,\n            /^variables\\.base$/,\n            /^variables\\.themes/\n         ]\n      });\n   }\n\n   /**\n    * @param {CSSStyleSheet[]}   moduleSheets - Module stylesheet data.\n    *\n    * @param {CSSStyleSheet[]}   systemSheets - System stylesheet data.\n    */\n   static #resolveExt(moduleSheets, systemSheets)\n   {\n      const resolvedSheets = [];\n\n      // Enable relative URL resolution / only include selector part names that are in the core Foundry styles.\n      const options = { includeSelectorPartSet: new Set([...this.#core.keys()]) };\n\n      for (const sheet of systemSheets) { resolvedSheets.push(StyleSheetResolve.parse(sheet, options)); }\n      for (const sheet of moduleSheets) { resolvedSheets.push(StyleSheetResolve.parse(sheet, options)); }\n\n      // Create a clone of core styles.\n      this.#ext = this.#core.clone();\n\n      // Merge all system / module styles into the extended resolved styles.\n      for (const sheet of resolvedSheets) { this.#ext.merge(sheet); }\n   }\n}\n\n/**\n * Provides a Svelte aware extension to the Foundry {@link Application} class to manage the app lifecycle\n * appropriately. You can declaratively load one or more components from `defaultOptions` using a\n * {@link #runtime/svelte/util!TJSSvelte.Config.Dynamic} object in the {@link SvelteApp.Options.svelte} property.\n *\n * @implements {TJSPosition.Positionable}\n */\nclass SvelteApp extends Application\n{\n   /**\n    * Disable Foundry v13+ warnings for AppV1.\n    *\n    * @type {boolean}\n    * @internal\n    */\n   static _warnedAppV1 = true;\n\n   static #MIN_WINDOW_HEIGHT = 50;\n   static #MIN_WINDOW_WIDTH = 200;\n\n   /**\n    * Stores the first mounted component which follows the application shell contract.\n    *\n    * @type {import('svelte').SvelteComponent[] | null[]} Application shell.\n    */\n   #applicationShellHolder = [null];\n\n   /**\n    * Stores and manages application state for saving / restoring / serializing.\n    *\n    * @type {import('./types').SvelteApp.API.State}\n    */\n   #applicationState;\n\n   /**\n    * Stores the target element which may not necessarily be the main element.\n    *\n    * @type {HTMLElement}\n    */\n   #elementTarget = null;\n\n   /**\n    * Stores the content element which is set for application shells.\n    *\n    * @type {HTMLElement}\n    */\n   #elementContent = null;\n\n   /**\n    * On initial render gating of `setPosition` invoked by `Application._render` occurs, so that percentage values\n    * can correctly be positioned with initial helper constraints (centered).\n    *\n    * @type {boolean}\n    */\n   #gateSetPosition = false;\n\n   /**\n    * Tracks initial `popOut` state. `handleAlwaysOnTop` will return the `popOut` state to this value.\n    */\n   #initialPopOut;\n\n   /**\n    * Stores initial z-index from `_renderOuter` to set to target element / Svelte component.\n    *\n    * @type {number}\n    */\n   #initialZIndex = 95;\n\n   /**\n    * Stores on mount state which is checked in _render to trigger onSvelteMount callback.\n    *\n    * @type {boolean}\n    */\n   #onMount = false;\n\n   /**\n    * The position store.\n    *\n    * @type {TJSPosition}\n    */\n   #position;\n\n   /**\n    * Contains the Svelte stores and reactive accessors.\n    *\n    * @type {SvelteReactive}\n    */\n   #reactive;\n\n   /**\n    * Stores SvelteData entries with instantiated Svelte components.\n    *\n    * @type {import('./internal/state-svelte/types').SvelteData[] | null[]}\n    */\n   #svelteData = [null];\n\n   /**\n    * Provides a helper class that combines multiple methods for interacting with the mounted components tracked in\n    * #svelteData.\n    *\n    * @type {import('./types').SvelteApp.API.Svelte<import('./types').SvelteApp.Options>}\n    */\n   #getSvelteData = new GetSvelteData(this.#applicationShellHolder, this.#svelteData);\n\n   /**\n    * Contains methods to interact with the Svelte stores.\n    *\n    * @type {import('./internal/state-reactive/types-local').SvelteReactiveStores}\n    */\n   #stores;\n\n   /**\n    * @param {Partial<import('./types').SvelteApp.Options>} [options] - The options for the application.\n    */\n   constructor(options = {})\n   {\n      super(options);\n\n      if (!isObject(this.options.svelte))\n      {\n         throw new Error(`SvelteApp - constructor - No Svelte configuration object found in 'options'.`);\n      }\n\n      // Remove forced AppV1 theming classes: `themed` and `theme-light`.\n      if (Array.isArray(this.options.classes))\n      {\n         this.options.classes = this.options.classes.filter(\n          (entry) => entry !== 'themed' && !entry?.startsWith('theme-'));\n      }\n\n      // Track initial `popOut` state.\n      this.#initialPopOut = this.popOut;\n\n      this.#applicationState = new ApplicationState(this);\n\n      // Initialize TJSPosition with the position object set by Application.\n      this.#position = new TJSPosition(this, {\n         ...this.position,\n         ...this.options,\n         initial: this.options.positionInitial,\n         ortho: this.options.positionOrtho,\n         validator: this.options.positionValidator\n      });\n\n      // Remove old position field.\n      delete this.position;\n\n      /**\n       * Define accessors to retrieve TJSPosition by `this.position`.\n       *\n       * @member {TJSPosition} position - Adds accessors to SvelteApp to get / set the position data.\n       *\n       * @memberof SvelteApp#\n       */\n      Object.defineProperty(this, 'position', {\n         get: () => this.#position,\n         set: (position) => { if (isObject(position)) { this.#position.set(position); } }\n      });\n\n      this.#reactive = new SvelteReactive(this, this.#initialPopOut);\n\n      this.#stores = this.#reactive.initialize();\n   }\n\n   /**\n    * Specifies the default options that SvelteApp supports.\n    *\n    * @returns {import('./types').SvelteApp.Options} options - Application options.\n    * @see https://foundryvtt.com/api/interfaces/client.ApplicationOptions.html\n    */\n   static get defaultOptions()\n   {\n      return /** @type {import('./types').SvelteApp.Options} */ deepMerge(super.defaultOptions, {\n         alwaysOnTop: false,              // Assigned to position. When true, the app window is floated always on top.\n         containerQueryType: 'inline-size',  // App window content container query type.\n         defaultCloseAnimation: true,     // If false, the default slide close animation is not run.\n         draggable: true,                 // If true, then application shells are draggable.\n         focusAuto: true,                 // When true, auto-management of app focus is enabled.\n         focusKeep: false,                // When `focusAuto` and `focusKeep` is true; keeps internal focus.\n         focusSource: void 0,             // Stores any A11yFocusSource data that is applied when app is closed.\n         focusTrap: true,                 // When true focus trapping / wrapping is enabled keeping focus inside app.\n         headerButtonNoClose: false,      // If true, then the close header button is removed.\n         headerButtonNoLabel: false,      // If true, then the header button labels are removed for application shells.\n         headerIcon: void 0,              // Sets a header icon given an image URL.\n         headerNoTitleMinimized: false,   // If true, then the header title is hidden when the application is minimized.\n         maxHeight: void 0,               // Assigned to position. Number specifying maximum window height.\n         maxWidth: void 0,                // Assigned to position. Number specifying maximum window width.\n         minHeight: SvelteApp.#MIN_WINDOW_HEIGHT,    // Assigned to position. Number specifying minimum window height.\n         minWidth: SvelteApp.#MIN_WINDOW_WIDTH,      // Assigned to position. Number specifying minimum window width.\n         positionable: true,              // If false, then `position.set` does not take effect.\n         positionInitial: TJSPosition.Initial.browserCentered,      // A helper for initial position placement.\n         positionOrtho: true,             // When true, TJSPosition is optimized for orthographic use.\n         positionValidator: TJSPosition.Validators.transformWindow, // A function providing the default validator.\n         sessionStorage: void 0,          // An instance of WebStorage (session) to share across SvelteApps.\n         svelte: void 0,                  // A Svelte configuration object.\n         themeName: void 0,               // An explicit theme name to apply.\n         transformOrigin: 'top left'      // By default, 'top / left' respects rotation when minimizing.\n      });\n   }\n\n   /**\n    * Returns the content element if an application shell is mounted.\n    *\n    * @returns {HTMLElement} Content element.\n    */\n   get elementContent() { return this.#elementContent; }\n\n   /**\n    * Returns the target element or main element if no target defined.\n    *\n    * @returns {HTMLElement} Target element.\n    */\n   get elementTarget() { return this.#elementTarget; }\n\n   /**\n    * Returns the reactive accessors & Svelte stores for SvelteApp.\n    *\n    * @returns {import('./types').SvelteApp.API.Reactive} The reactive accessors & Svelte stores.\n    */\n   get reactive() { return this.#reactive; }\n\n   /**\n    * Returns the application state manager.\n    *\n    * @returns {import('./types').SvelteApp.API.State} The application state manager.\n    */\n   get state() { return this.#applicationState; }\n\n   /**\n    * Returns the `Svelte` helper class w/ various methods to access the mounted application shell component.\n    *\n    * @returns {import('./types').SvelteApp.API.Svelte<Options>} `Svelte` / mounted application shell API.\n    */\n   get svelte() { return this.#getSvelteData; }\n\n   /**\n    * In this case of when a template is defined in app options `html` references the inner HTML / template. However,\n    * to activate classic v1 tabs for a Svelte component the element target is passed as an array simulating JQuery as\n    * the element is retrieved immediately and the core listeners use standard DOM queries.\n    *\n    * @protected\n    * @ignore\n    * @internal\n    */\n   _activateCoreListeners(html)\n   {\n      super._activateCoreListeners(typeof this.options.template === 'string' ? html :\n       [this.popOut ? this.#elementTarget?.firstChild : this.#elementTarget]);\n   }\n\n   /**\n    * Provide an override to set this application as the active window regardless of z-index. Changes behaviour from\n    * Foundry core.\n    *\n    * @param {object} [opts] - Optional parameters.\n    *\n    * @param {boolean} [opts.focus=true] - When true and the active element is not contained in the app `elementTarget`\n    *        is focused..\n    *\n    * @param {boolean} [opts.force=false] - Force bring to top; will increment z-index by popOut order.\n    *\n    * @ignore\n    * @internal\n    */\n   bringToTop({ focus = true, force = false } = {})\n   {\n      // Only perform `bring to top` when the active window is the main Foundry window instance.\n      if (this.reactive.activeWindow !== globalThis) { return; }\n\n      if (typeof this?.options?.positionable === 'boolean' && !this.options.positionable) { return; }\n\n      if (force || globalThis.ui.activeWindow !== this)\n      {\n         const z = this.position.zIndex;\n\n         if (this.popOut && z < foundry.applications.api.ApplicationV2._maxZ)\n         {\n            this.position.zIndex = Math.min(++foundry.applications.api.ApplicationV2._maxZ, 99999);\n         }\n         else if (!this.popOut && this.options.alwaysOnTop)\n         {\n            const newAlwaysOnTopZIndex = globalThis?.TRL_SVELTE_APP_DATA?.alwaysOnTop?.getAndIncrement();\n\n            if (typeof newAlwaysOnTopZIndex === 'number') { this.position.zIndex = newAlwaysOnTopZIndex; }\n         }\n      }\n\n      const elementTarget = this.elementTarget;\n      const activeElement = document.activeElement;\n\n      // If the activeElement is not contained in this app via elementTarget, then blur the current active element\n      // and make elementTarget focused.\n      if (focus && elementTarget && activeElement !== elementTarget && !elementTarget?.contains(activeElement))\n      {\n         // Blur current active element.\n         if (A11yHelper.isFocusTarget(activeElement))\n         {\n            activeElement.blur();\n         }\n\n         elementTarget?.focus();\n      }\n\n      globalThis.ui.activeWindow = this;\n   }\n\n   /**\n    * Note: This method is fully overridden and duplicated as Svelte components need to be destroyed manually and the\n    * best visual result is to destroy them after the default slide up animation occurs, but before the element\n    * is removed from the DOM.\n    *\n    * If you destroy the Svelte components before the slide up animation the Svelte elements are removed immediately\n    * from the DOM. The purpose of overriding ensures the slide up animation is always completed before\n    * the Svelte components are destroyed and then the element is removed from the DOM.\n    *\n    * Close the application and unregisters references to it within UI mappings.\n    * This function returns a Promise which resolves once the window closing animation concludes.\n    *\n    * @param {object}   [options] - Optional parameters.\n    *\n    * @param {boolean}  [options.force] - Force close regardless of render state.\n    *\n    * @returns {Promise<void>}    A Promise which resolves once the application is closed.\n    *\n    * @ignore\n    * @internal\n    */\n   async close(options = {})\n   {\n      const states = Application.RENDER_STATES;\n\n      if (!options.force && ![states.RENDERED, states.ERROR].includes(this._state)) { return; }\n\n      /**\n       * Get the element.\n       *\n       * @type {HTMLElement}\n       */\n      const el = this.#elementTarget;\n      if (!el)\n      {\n         /**\n          * @ignore\n          * @internal\n          */\n         this._state = states.CLOSED;\n\n         return;\n      }\n\n      // Support for PopOut! module; `close` is double invoked; once before the element is rejoined to the main window.\n      // Reject close invocations when the element window is not the main originating window / globalThis.\n      if (CrossWindow.getWindow(el, { throws: false }) !== globalThis) { return; }\n\n      /**\n       * @ignore\n       * @internal\n       */\n      this._state = states.CLOSING;\n\n      // Unsubscribe from any local stores.\n      this.#stores.unsubscribe();\n\n      // Make any window content overflow hidden to avoid any scrollbars appearing in default or Svelte outro\n      // transitions.\n      const content = el.querySelector('.window-content');\n      if (content)\n      {\n         content.style.overflow = 'hidden';\n\n         // Set all children of content to overflow hidden as if there is going to be additional scrolling elements\n         // they are likely one level deep.\n         for (let cntr = content.children.length; --cntr >= 0;)\n         {\n            content.children[cntr].style.overflow = 'hidden';\n         }\n      }\n\n      // Dispatch Hooks for closing the base and subclass applications\n      for (const cls of this.constructor._getInheritanceChain())\n      {\n         /**\n          * A hook event that fires whenever this Application is closed.\n          *\n          * Note: JQuery wrapping as Foundry event arguments uses JQuery.\n          */\n         Hooks.call(`close${cls.name}`, this, $(el));\n      }\n\n      // If options `defaultCloseAnimation` is false then do not execute the standard slide up animation.\n      // This allows Svelte components to provide any out transition. Application shells will automatically set\n      // `defaultCloseAnimation` based on any out transition set or unset.\n      const animate = typeof this.options.defaultCloseAnimation === 'boolean' ? this.options.defaultCloseAnimation :\n       true;\n\n      if (animate)\n      {\n         // Set min height for full slide.\n         el.style.minHeight = '0';\n\n         const { paddingBottom, paddingTop } = globalThis.getComputedStyle(el);\n\n         // Slide-up application.\n         await el.animate([\n            { maxHeight: `${el.clientHeight}px`, paddingTop, paddingBottom },\n            { maxHeight: 0, paddingTop: 0, paddingBottom: 0 }\n         ], { duration: 250, easing: 'ease-in', fill: 'forwards' }).finished;\n      }\n\n      // Stores the Promises returned from running outro transitions and destroying each Svelte component.\n      const svelteDestroyPromises = [];\n\n      // Manually invoke the destroy callbacks for all Svelte components.\n      for (const entry of this.#svelteData)\n      {\n         if (!isObject(entry)) { continue; }\n\n         // Use `outroAndDestroy` to run outro transitions before destroying.\n         svelteDestroyPromises.push(TJSSvelte.util.outroAndDestroy(entry.component));\n\n         // If any proxy eventbus has been added then remove all event registrations from the component.\n         const eventbus = entry.config.eventbus;\n         if (isObject(eventbus) && typeof eventbus.off === 'function')\n         {\n            eventbus.off();\n            entry.config.eventbus = void 0;\n         }\n      }\n\n      // Await all Svelte components to destroy.\n      await Promise.allSettled(svelteDestroyPromises);\n\n      // Remove from all visible apps tracked.\n      TJSAppIndex.delete(this);\n\n      // Reset SvelteData like this to maintain reference to GetSvelteData / `this.svelte`.\n      this.#svelteData[0] = null;\n\n      // Remove element from the DOM. Most SvelteComponents have already removed it.\n      el.remove();\n\n      // Silently restore any width / height state before minimized as applicable.\n      this.position.state.restore({\n         name: '#beforeMinimized',\n         properties: ['width', 'height'],\n         silent: true,\n         remove: true\n      });\n\n      // Clean up data\n      this.#applicationShellHolder[0] = null;\n\n      /**\n       * @ignore\n       * @internal\n       */\n      this._element = null;\n      this.#elementContent = null;\n      this.#elementTarget = null;\n\n      delete globalThis.ui.windows[this.appId];\n\n      /**\n       * @ignore\n       * @internal\n       */\n      this._minimized = false;\n\n      /**\n       * @ignore\n       * @internal\n       */\n      this._scrollPositions = null;\n\n      /**\n       * @ignore\n       * @internal\n       */\n      this._state = states.CLOSED;\n\n      this.#onMount = false;\n\n      // Update the minimized UI store state.\n      this.#stores.uiStateUpdate((storeOptions) => deepMerge(storeOptions, { minimized: this._minimized }));\n\n      // Apply any stored focus options and then remove them from options.\n      A11yHelper.applyFocusSource(this.options.focusSource);\n\n      delete this.options.focusSource;\n   }\n\n   /**\n    * Specify the set of config buttons which should appear in the SvelteApp header. Buttons should be returned as\n    * an Array of objects. The header buttons which are added to the application can be modified by the\n    * `getApplicationHeaderButtons` hook.\n    *\n    * SvelteApp extends the button functionality with full reactivity for state changes during callbacks. Callbacks\n    * receive the button data and can modify it to update the button state.\n    *\n    * @privateRemarks Provide a basic override implementation to extend types with additional SvelteApp functionality.\n    *\n    * @returns {import('./types').SvelteApp.HeaderButton[]} All header buttons.\n    * @protected\n    */\n   _getHeaderButtons()\n   {\n      const buttons = super._getHeaderButtons();\n\n      const closeButton = buttons.find((entry) => entry?.class === 'close');\n      if (closeButton)\n      {\n         closeButton.onclick = () =>\n         {\n            // Add immediate deactivation of Foundry tooltip for close button.\n            globalThis?.game?.tooltip?.deactivate?.();\n\n            this.close();\n         };\n      }\n\n      return buttons;\n   }\n\n   /**\n    * Inject the Svelte components defined in `this.options.svelte`. The Svelte component can attach to the existing\n    * pop-out of Application or provide no template and render into a document fragment which is then attached to the\n    * DOM.\n    *\n    * @protected\n    * @ignore\n    * @internal\n    */\n   _injectHTML()\n   {\n      // Make sure the store is updated with the latest header buttons. Also allows filtering buttons before display.\n      this.reactive.updateHeaderButtons();\n\n      // Create a function to generate a callback for Svelte components to invoke to update the tracked elements for\n      // application shells in the rare cases that the main element root changes. The update is only triggered on\n      // successive changes of `elementRoot`. Returns a boolean to indicate the element roots are updated.\n      const elementRootUpdate = () =>\n      {\n         let cntr = 0;\n\n         return (elementRoot) =>\n         {\n            if (elementRoot !== null && elementRoot !== void 0 && cntr++ > 0)\n            {\n               this.#updateApplicationShell();\n               return true;\n            }\n\n            return false;\n         };\n      };\n\n      // A sanity check; absence should be detected in constructor.\n      if (!isObject(this.options.svelte))\n      {\n         throw new Error(`SvelteApp - _injectHTML - No Svelte configuration object found in 'options'.`);\n      }\n\n      const svelteData = loadSvelteConfig({\n         app: this,\n         config: this.options.svelte,\n         elementRootUpdate\n      });\n\n      // A sanity check as shouldn't hit this case as only one component is being mounted.\n      if (this.svelte.appShell !== null)\n      {\n         throw new Error(\n          `SvelteApp - _injectHTML - An application shell is already mounted; offending config:\\n` +\n           `${JSON.stringify(this.options.svelte)}`);\n      }\n\n      this.#applicationShellHolder[0] = svelteData.component;\n\n      // If Vite / HMR / svelte_hmr is enabled then add a hook to receive callbacks when the ProxyComponent\n      // refreshes. Update the element root accordingly and force an update to TJSPosition.\n      // See this issue for info about `on_hmr`:\n      // https://github.com/sveltejs/svelte-hmr/issues/57\n      if (TJSSvelte.util.isHMRProxy(svelteData.component) && Array.isArray(svelteData.component?.$$?.on_hmr))\n      {\n         svelteData.component.$$.on_hmr.push(() => () => this.#updateApplicationShell());\n      }\n\n      this.#svelteData[0] = svelteData;\n\n      // Wrap `elementRoot` as a JQuery object and set to AppV1 / Application element.\n      this._element = $(this.svelte.appShell.elementRoot);\n\n      // Detect if the application shell exports an `elementContent` accessor.\n      this.#elementContent = hasGetter(this.svelte.appShell, 'elementContent') ?\n       this.svelte.appShell.elementContent : null;\n\n      // Detect if the application shell exports an `elementTarget` accessor if not set `elementTarget` to\n      // `elementRoot`.\n      this.#elementTarget = hasGetter(this.svelte.appShell, 'elementTarget') ? this.svelte.appShell.elementTarget :\n       this.svelte.appShell.elementRoot;\n\n      // The initial zIndex may be set in application options or for popOut applications is stored by `_renderOuter`\n      // in `this.#initialZIndex`.\n      if (typeof this.options.positionable === 'boolean' && this.options.positionable)\n      {\n         this.#elementTarget.style.zIndex = typeof this.options.zIndex === 'number' ? this.options.zIndex :\n          this.#initialZIndex ?? 95;\n      }\n\n      // Subscribe to local store handling.\n      this.#stores.subscribe();\n   }\n\n   /**\n    * Provides a mechanism to update the UI options store for maximized.\n    *\n    * Note: the sanity check is duplicated from {@link Application.maximize} the store is updated _before_\n    * performing the rest of animations. This allows application shells to remove / show any resize handlers\n    * correctly. Extra constraint data is stored in a saved position state in {@link SvelteApp.minimize}\n    * to animate the content area.\n    *\n    * @param {object}   [opts] - Optional parameters.\n    *\n    * @param {boolean}  [opts.animate=true] - When true perform default maximizing animation.\n    *\n    * @param {number}   [opts.duration=0.1] - Controls content area animation duration in seconds.\n    */\n   async maximize({ animate = true, duration = 0.1 } = {})\n   {\n      if ((!this.popOut && !this.options.alwaysOnTop) || [false, null].includes(this._minimized)) { return; }\n\n      this._minimized = null;\n\n      const durationMS = duration * 1000; // For WAAPI.\n\n      // Get content\n      const element = this.elementTarget;\n      const header = element.querySelector('.window-header');\n      const content = element.querySelector('.window-content');\n\n      // Get the complete position before minimized. Used to reset min width & height to initial values later.\n      const positionBefore = this.position.state.get({ name: '#beforeMinimized' });\n\n      // First animate / restore width / async.\n      if (animate)\n      {\n         await this.position.state.restore({\n            name: '#beforeMinimized',\n            async: true,\n            animateTo: true,\n            properties: ['width'],\n            cancelable: false,\n            duration: 0.1\n         });\n      }\n\n      element.classList.remove('minimized');\n\n      // Reset display none on all children of header.\n      for (let cntr = header.children.length; --cntr >= 0;) { header.children[cntr].style.display = null; }\n\n      content.style.display = null;\n\n      let constraints;\n\n      if (animate)\n      {\n         // Next animate / restore height synchronously and remove key. Retrieve constraints data for slide up animation\n         // below.\n         ({ constraints } = this.position.state.restore({\n            name: '#beforeMinimized',\n            animateTo: true,\n            properties: ['height'],\n            remove: true,\n            cancelable: false,\n            duration\n         }));\n      }\n      else\n      {\n         ({ constraints } = this.position.state.remove({ name: '#beforeMinimized' }));\n      }\n\n      // Slide down content with stored constraints.\n      await content.animate([\n         { maxHeight: 0, paddingTop: 0, paddingBottom: 0, offset: 0 },\n         { ...constraints, offset: 1 },\n         { maxHeight: '100%', offset: 1 },\n      ], { duration: durationMS, fill: 'forwards' }).finished; // WAAPI in ms.\n\n      // Restore previous min width & height from saved data, app options, or default Foundry values.\n      this.position.set({\n         minHeight: positionBefore.minHeight ?? this.options?.minHeight ?? SvelteApp.#MIN_WINDOW_HEIGHT,\n         minWidth: positionBefore.minWidth ?? this.options?.minWidth ?? SvelteApp.#MIN_WINDOW_WIDTH,\n      });\n\n      // Remove inline styles that override any styles assigned to the app.\n      element.style.minWidth = null;\n      element.style.minHeight = null;\n\n      this._minimized = false;\n\n      // Using a 50ms timeout prevents any instantaneous display of scrollbars with the above maximize animation.\n      setTimeout(() =>\n      {\n         content.style.overflow = null;\n\n         // Reset all children of content removing overflow hidden.\n         for (let cntr = content.children.length; --cntr >= 0;)\n         {\n            content.children[cntr].style.overflow = null;\n         }\n      }, 50);\n\n      this.#stores.uiStateUpdate((options) => deepMerge(options, { minimized: false }));\n   }\n\n   /**\n    * Provides a mechanism to update the UI options store for minimized.\n    *\n    * Note: the sanity check is duplicated from {@link Application.minimize} the store is updated _before_\n    * performing the rest of animations. This allows application shells to remove / show any resize handlers\n    * correctly. Extra constraint data is stored in a saved position state in {@link SvelteApp.minimize}\n    * to animate the content area.\n    *\n    * @param {object}   [opts] - Optional parameters.\n    *\n    * @param {boolean}  [opts.animate=true] - When true perform default minimizing animation.\n    *\n    * @param {number}   [opts.duration=0.1] - Controls content area animation duration in seconds.\n    */\n   async minimize({ animate = true, duration = 0.1 } = {})\n   {\n      if (!this.rendered || (!this.popOut && !this.options.alwaysOnTop) || [true, null].includes(this._minimized))\n      {\n         return;\n      }\n\n      this.#stores.uiStateUpdate((options) => deepMerge(options, { minimized: true }));\n\n      this._minimized = null;\n\n      const durationMS = duration * 1000; // For WAAPI.\n\n      const element = this.elementTarget;\n\n      // Get content\n      const header = element.querySelector('.window-header');\n      const content = element.querySelector('.window-content');\n\n      // Save current max / min height & width.\n      const beforeMinWidth = this.position.minWidth;\n      const beforeMinHeight = this.position.minHeight;\n\n      // Set minimized min width & height for header bar.\n      this.position.set({ minWidth: 100, minHeight: 30 });\n\n      // Also set inline styles to override any styles scoped to the app.\n      element.style.minWidth = '100px';\n      element.style.minHeight = '30px';\n\n      if (content)\n      {\n         content.style.overflow = 'hidden';\n\n         // Set all children of content to overflow hidden as if there is going to be additional scrolling elements\n         // they are likely one level deep.\n         for (let cntr = content.children.length; --cntr >= 0;)\n         {\n            content.children[cntr].style.overflow = 'hidden';\n         }\n      }\n\n      const { paddingBottom, paddingTop } = globalThis.getComputedStyle(content);\n\n      // Extra data that is saved with the current position. Used during `maximize`.\n      const constraints = {\n         maxHeight: `${content.clientHeight}px`,\n         paddingTop,\n         paddingBottom\n      };\n\n      // Slide-up content\n      if (animate)\n      {\n         const animation = content.animate([\n            constraints,\n            { maxHeight: 0, paddingTop: 0, paddingBottom: 0 }\n         ], { duration: durationMS, fill: 'forwards' }); // WAAPI in ms.\n\n         // Set display style to none when animation finishes.\n         animation.finished.then(() => content.style.display = 'none');\n      }\n      else\n      {\n         setTimeout(() => content.style.display = 'none', durationMS);\n      }\n\n      // Save current position state and add the constraint data to use in `maximize`.\n      const saved = this.position.state.save({ name: '#beforeMinimized', constraints });\n\n      // Set the initial before min width & height.\n      saved.minWidth = beforeMinWidth;\n      saved.minHeight = beforeMinHeight;\n\n      const headerOffsetHeight = header.offsetHeight;\n\n      // minHeight needs to be adjusted to header height.\n      this.position.minHeight = headerOffsetHeight;\n\n      if (animate)\n      {\n         // First await animation of height upward.\n         await this.position.animate.to({ height: headerOffsetHeight }, { cancelable: false, duration }).finished;\n      }\n\n      // Set all header buttons besides close and the window title to display none.\n      for (let cntr = header.children.length; --cntr >= 0;)\n      {\n         let className = header.children[cntr]?.className;\n\n         // Must take into account that `className` might be a `SVGAnimatedString`.\n         className = className?.baseVal ?? className;\n\n         if (typeof className !== 'string' || className.includes('window-title') || className.includes('close'))\n         {\n            continue;\n         }\n\n         // v10+ of Foundry core styles automatically hides anything besides the window title and close button, so\n         // explicitly set display to block.\n         if (className.includes('keep-minimized'))\n         {\n            header.children[cntr].style.display = 'block';\n            continue;\n         }\n\n         header.children[cntr].style.display = 'none';\n      }\n\n      if (animate)\n      {\n         // Await animation of width to the left / minimum width.\n         await this.position.animate.to({ width: SvelteApp.#MIN_WINDOW_WIDTH }, {\n            cancelable: false,\n            duration: 0.1\n         }).finished;\n      }\n\n      element.classList.add('minimized');\n\n      this._minimized = true;\n   }\n\n   /**\n    * Provides a callback after all Svelte components are initialized.\n    */\n   onSvelteMount() {} // eslint-disable-line no-unused-vars\n\n   /**\n    * Provides a callback after the main application shell is remounted. This may occur during HMR / hot module\n    * replacement or directly invoked from the `elementRootUpdate` callback passed to the application shell component\n    * context.\n    */\n   onSvelteRemount() {} // eslint-disable-line no-unused-vars\n\n   /**\n    * Override replacing HTML as Svelte components control the rendering process. Only potentially change the outer\n    * application frame / title for pop-out applications.\n    *\n    * @protected\n    * @ignore\n    * @internal\n    */\n   _replaceHTML(element, html)  // eslint-disable-line no-unused-vars\n   {\n      if (!element.length) { return; }\n\n      this.reactive.updateHeaderButtons();\n   }\n\n   /**\n    * Provides an override verifying that a new Application being rendered for the first time doesn't have a\n    * corresponding DOM element already loaded. This is a check that only occurs when `this._state` is\n    * `Application.RENDER_STATES.NONE`. It is useful in particular when SvelteApp has a static ID\n    * explicitly set in `this.options.id` and long intro / outro transitions are assigned. If a new application\n    * sharing this static ID attempts to open / render for the first time while an existing DOM element sharing\n    * this static ID exists then the initial render is cancelled below rather than crashing later in the render\n    * cycle {@link TJSPosition.set}.\n    *\n    * @protected\n    * @ignore\n    * @internal\n    */\n   async _render(force = false, options = {})\n   {\n      // Store any focusSource instance.\n      if (isObject(options?.focusSource)) { this.options.focusSource = options.focusSource; }\n\n      const activeWindow = this.reactive.activeWindow;\n\n      try\n      {\n         if (this._state === Application.RENDER_STATES.NONE &&\n          A11yHelper.isFocusTarget(activeWindow.document.querySelector(`#${this.id}`)))\n         {\n            console.warn(`SvelteApp - _render: A DOM element already exists for CSS ID '${this.id\n             }'. Cancelling initial render for new application with appId '${this.appId}'.`);\n\n            return;\n         }\n      }\n      catch (err)\n      {\n         console.warn(`SvelteApp - _render: Potentially malformed application ID '${this.id\n          }'. Cancelling initial render for new application with appId '${this.appId}'.`);\n\n         return;\n      }\n\n      // On initial render gating of `setPosition` invoked by `Application._render` occurs, so that percentage values\n      // can correctly be positioned with initial helper constraints (centered).\n      this.#gateSetPosition = true;\n\n      // TODO: REMOVE V14\n      // Note: This is a workaround to prevent the `PopOut!` module from attaching the popout button to the app header.\n      // Force: popOut to false if `alwaysOnTop` is true.\n      const popOut = typeof this.options.alwaysOnTop === 'boolean' && this.options.alwaysOnTop ? false : this.popOut;\n\n      await super._render(force, { ...options, popOut });\n\n      this.#gateSetPosition = false;\n\n      // Handle the same render exclusion tests that reject a render in Application.\n\n      // Do not render under certain conditions.\n      if ([Application.RENDER_STATES.CLOSING, Application.RENDER_STATES.RENDERING].includes(this._state)) { return; }\n\n      // Applications which are not currently rendered must be forced.\n      if (!force && (this._state <= Application.RENDER_STATES.NONE)) { return; }\n\n      // It is necessary to directly invoke `position.set` as TJSPosition uses accessors and is not a bare object, so\n      // the merging that occurs in `Application._render` does not take effect. Additionally, any of the main\n      // positional properties that are defined as strings such as percentage values need to be set after the element\n      // is mounted.\n      if (!this._minimized)\n      {\n         this.#position.set({\n            left: typeof this.options?.left === 'string' ? this.options.left : void 0,\n            height: typeof this.options?.height === 'string' ? this.options.height : void 0,\n            maxHeight: typeof this.options?.maxHeight === 'string' ? this.options.maxHeight : void 0,\n            maxWidth: typeof this.options?.maxWidth === 'string' ? this.options.maxWidth : void 0,\n            minHeight: typeof this.options?.minHeight === 'string' ? this.options.minHeight : void 0,\n            minWidth: typeof this.options?.minWidth === 'string' ? this.options.minWidth : void 0,\n            rotateX: typeof this.options?.rotateX === 'string' ? this.options.rotateX : void 0,\n            rotateY: typeof this.options?.rotateY === 'string' ? this.options.rotateY : void 0,\n            rotateZ: typeof this.options?.rotateZ === 'string' ? this.options.rotateZ : void 0,\n            rotation: typeof this.options?.rotation === 'string' ? this.options.rotation : void 0,\n            top: typeof this.options?.top === 'string' ? this.options.top : void 0,\n            width: typeof this.options?.width === 'string' ? this.options.width : void 0,\n\n            ...options\n         });\n      }\n\n      if (!this.#onMount)\n      {\n         this.#onMount = true;\n\n         // Add to visible apps tracked.\n         TJSAppIndex.add(this);\n\n         if (typeof this.options.alwaysOnTop === 'boolean' && this.options.alwaysOnTop)\n         {\n            handleAlwaysOnTop(this, true, this.#initialPopOut);\n         }\n\n         // Ensure the app element has updated inline styles.\n         nextAnimationFrame().then(() => this.onSvelteMount());\n      }\n   }\n\n   /**\n    * Render the inner application content. Provide an empty JQuery element per the core Foundry API.\n    *\n    * @protected\n    * @ignore\n    * @internal\n    */\n   async _renderInner()\n   {\n      const activeWindow = this.reactive.activeWindow;\n\n      const html = activeWindow.document.createDocumentFragment();\n\n      return $(html);\n   }\n\n   /**\n    * Stores the initial z-index set in `_renderOuter` which is used in `_injectHTML` to set the target element\n    * z-index after the Svelte component is mounted.\n    *\n    * @protected\n    * @ignore\n    * @internal\n    */\n   async _renderOuter()\n   {\n      const html = await super._renderOuter();\n      this.#initialZIndex = html[0].style.zIndex;\n      return html;\n   }\n\n   /**\n    * All calculation and updates of position are implemented in {@link TJSPosition.set}.\n    * This allows position to be fully reactive and in control of updating inline styles for the application.\n    *\n    * This method remains for backward compatibility with Foundry. If you have a custom override quite likely you need\n    * to update to using the {@link TJSPosition.validators} / ValidatorAPI functionality.\n    *\n    * @param {TJSPosition.API.Data.TJSPositionDataRelative}   [position] - TJSPosition data.\n    *\n    * @returns {TJSPosition} The updated position object for the application containing the new values.\n    * @ignore\n    */\n   setPosition(position)\n   {\n      return !this.#gateSetPosition ? this.position.set(position) : this.position;\n   }\n\n   /**\n    * This method is invoked by the `elementRootUpdate` callback that is added to the external context passed to\n    * Svelte components. When invoked it updates the local element roots tracked by SvelteApp.\n    *\n    * This method may also be invoked by HMR / hot module replacement via `svelte-hmr`.\n    */\n   #updateApplicationShell()\n   {\n      const applicationShell = this.svelte.appShell;\n\n      if (applicationShell !== null)\n      {\n         this._element = $(applicationShell.elementRoot);\n\n         // Detect if the application shell exports an `elementContent` accessor.\n         this.#elementContent = hasGetter(applicationShell, 'elementContent') ?\n          applicationShell.elementContent : null;\n\n         // Detect if the application shell exports an `elementTarget` accessor.\n         this.#elementTarget = hasGetter(applicationShell, 'elementTarget') ?\n          applicationShell.elementTarget : null;\n\n         if (this.#elementTarget === null)\n         {\n            this.#elementTarget = typeof this.options.selectorTarget === 'string' ?\n             this._element[0].querySelector(this.options.selectorTarget) : this._element[0];\n         }\n\n         // The initial zIndex may be set in application options or for popOut applications is stored by `_renderOuter`\n         // in `this.#initialZIndex`.\n         if (typeof this.options.positionable === 'boolean' && this.options.positionable)\n         {\n            this.#elementTarget.style.zIndex = typeof this.options.zIndex === 'number' ? this.options.zIndex :\n             this.#initialZIndex ?? 95;\n\n            super.bringToTop();\n\n            // Ensure that new root element has inline position styles set.\n            this.position.set(this.position.get());\n         }\n\n         super._activateCoreListeners([this.popOut ? this.#elementTarget?.firstChild : this.#elementTarget]);\n\n         // Handle `alwaysOnTop` state with the new element root.\n         if (typeof this.options.alwaysOnTop === 'boolean' && this.options.alwaysOnTop)\n         {\n            handleAlwaysOnTop(this, true, this.#initialPopOut);\n         }\n\n         // Ensure the app element has updated inline styles.\n         nextAnimationFrame().then(() =>\n         {\n            // Allow any external modules to modify the app frame (IE PopOut module).\n            this.render();\n\n            this.onSvelteRemount();\n         });\n      }\n   }\n}\n\n/**\n * Handle `PopOut!` module hooks to allow applications to popout to their own browser window.\n */\nclass PopoutSupport\n{\n   static initialize()\n   {\n      Hooks.on('PopOut:loading', (app, popout) =>\n      {\n         if (app instanceof SvelteApp)\n         {\n            // Disable app position system.\n            app.position.enabled = false;\n\n            // Save current `headerButtonNoClose` state.\n            app.state.save({\n               name: '#beforePopout',\n               headerButtonNoClose: app.reactive.headerButtonNoClose\n            });\n\n            // Set the apps active window to the popout browser window.\n            app.reactive.activeWindow = popout;\n\n            // Disable the close button.\n            app.reactive.headerButtonNoClose = true;\n         }\n      });\n\n      Hooks.on('PopOut:popin', (app) => this.#handleRejoin(app));\n      Hooks.on('PopOut:close', (app) => this.#handleRejoin(app));\n   }\n\n   /**\n    * Handles rejoining the app to main browser window.\n    *\n    * @param {Application} app - The target app.\n    */\n   static #handleRejoin(app)\n   {\n      if (app instanceof SvelteApp)\n      {\n         // Enable the app position system.\n         app.position.enabled = true;\n\n         // Restore the initial header button no close state.\n         const beforeData = app.state.remove({ name: '#beforePopout' });\n         if (beforeData) { app.reactive.headerButtonNoClose = beforeData?.headerButtonNoClose ?? false; }\n\n         // Reset the apps active window to the main `globalThis` reference.\n         app.reactive.activeWindow = void 0;\n      }\n   }\n}\n\n/**\n * Stores global tracking data for {@link SvelteApp}.\n *\n * This static instance is stored in `globalThis.TRL_SVELTE_APP_DATA`.\n */\nclass SvelteAppData\n{\n   static #initialized = false;\n\n   /**\n    * @returns {number} Version number for SvelteAppData.\n    */\n   static get VERSION() { return 1; }\n\n   static get alwaysOnTop() { return AlwaysOnTop; }\n\n   static initialize()\n   {\n      if (this.#initialized) { return; }\n\n      this.#initialized = true;\n\n      const currentVersion = globalThis?.TRL_SVELTE_APP_DATA?.VERSION;\n\n      if (typeof currentVersion !== 'number' || currentVersion < this.VERSION)\n      {\n         globalThis.TRL_SVELTE_APP_DATA = this;\n      }\n   }\n}\n\n/**\n * Provides global tracking data for the `alwaysOnTop` SvelteApp option.\n */\nclass AlwaysOnTop\n{\n   /**\n    * Stores the max z-index.\n    *\n    * @type {number}\n    */\n   static #max = 2 ** 31 - 1000;\n\n   /**\n    * Stores the min z-index.\n    *\n    * @type {number}\n    */\n   static #min = 2 ** 31 - 100000;\n\n   /**\n    * Stores the current z-index for the top most `alwaysOnTop` app.\n    *\n    * @type {number}\n    */\n   static #current = this.#min;\n\n\n   /**\n    * @returns {number} Increments the current always on top z-index and returns it.\n    */\n   static getAndIncrement()\n   {\n      this.#current = Math.min(++this.#current, this.#max);\n\n      return this.#current;\n   }\n\n   static get current() { return this.#current; }\n\n   static get max() { return this.#max; }\n\n   static get min() { return this.#min; }\n}\n\n/**\n * Provides storage for all dialog options through individual accessors and `get`, `merge`, `replace` and `set` methods\n * that safely access and update data changed to the mounted DialogShell component reactively.\n */\nclass TJSDialogData\n{\n   /**\n    * @type {import('../../index.js').SvelteApp}\n    */\n   #application;\n\n   /**\n    * Stores the dialog options data.\n    *\n    * @type {import('./types').TJSDialog.OptionsData}\n    */\n   #internal = {};\n\n   /**\n    * @param {import('../../index.js').SvelteApp} application - The host Foundry application.\n    */\n   constructor(application)\n   {\n      this.#application = application;\n\n      Object.seal(this);\n   }\n\n   /**\n    * @returns {{ [key: string]: import('./types').TJSDialogButtonData }} The dialog button configuration.\n    */\n   get buttons()\n   {\n      return this.#internal.buttons;\n   }\n\n   /**\n    * Set the dialog button configuration.\n    *\n    * @param {{ [key: string]: import('./types').TJSDialogButtonData }} buttons - New dialog button configuration.\n    */\n   set buttons(buttons)\n   {\n      this.#internal.buttons = buttons;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {import('@typhonjs-fvtt/runtime/svelte/util').TJSSvelte.Config.Embed | string} The Svelte configuration object or\n    *          HTML string content.\n    */\n   get content()\n   {\n      return this.#internal.content;\n   }\n\n   /**\n    * Set the Svelte configuration object or HTML string content.\n    *\n    * @param {import('@typhonjs-fvtt/runtime/svelte/util').TJSSvelte.Config.Embed | string} content - New Svelte configuration\n    *        object or HTML string content.\n    */\n   set content(content)\n   {\n      this.#internal.content = content;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {string} The default button ID to focus initially.\n    */\n   get default()\n   {\n      return this.#internal.default;\n   }\n\n   /**\n    * Set the default button ID to focus initially.\n    *\n    * @param {string} newDefault - New default button ID to focus initially.\n    */\n   set default(newDefault)\n   {\n      this.#internal.default = newDefault;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} The dialog always on top state.\n    */\n   get alwaysOnTop()\n   {\n      return this.#internal.alwaysOnTop;\n   }\n\n   /**\n    * Set the dialog always on top state.\n    *\n    * @param {boolean} alwaysOnTop - New dialog always on top state.\n    */\n   set alwaysOnTop(alwaysOnTop)\n   {\n      this.#internal.alwaysOnTop = alwaysOnTop;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} The dialog draggable state; draggable when true.\n    */\n   get draggable()\n   {\n      return this.#internal.draggable;\n   }\n\n   /**\n    * Set the dialog state; draggable when true.\n    *\n    * @param {boolean} draggable - New dialog draggable state; draggable when true.\n    */\n   set draggable(draggable)\n   {\n      this.#internal.draggable = draggable;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} When true auto-management of app focus is enabled.\n    */\n   get focusAuto()\n   {\n      return this.#internal.focusAuto;\n   }\n\n   /**\n    * Set the dialog auto-management of app focus.\n    *\n    * @param {boolean} focusAuto - New dialog auto-management of app focus.\n    */\n   set focusAuto(focusAuto)\n   {\n      this.#internal.focusAuto = focusAuto;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} When true the first focusable element that isn't a button is focused.\n    */\n   get focusFirst()\n   {\n      return this.#internal.focusFirst;\n   }\n\n   /**\n    * Set the dialog first focusable element state.\n    *\n    * @param {boolean} focusFirst - New dialog first focusable element state.\n    */\n   set focusFirst(focusFirst)\n   {\n      this.#internal.focusFirst = focusFirst;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} When `focusAuto` and `focusKeep` is true; keeps internal focus.\n    */\n   get focusKeep()\n   {\n      return this.#internal.focusKeep;\n   }\n\n   /**\n    * Set the dialog `focusKeep` state. When `focusAuto` and `focusKeep` is true; keeps internal focus.\n    *\n    * @param {boolean} focusKeep - New dialog `focusKeep` state.\n    */\n   set focusKeep(focusKeep)\n   {\n      this.#internal.focusKeep = focusKeep;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} When true the dialog is minimizable.\n    */\n   get minimizable()\n   {\n      return this.#internal.minimizable;\n   }\n\n   /**\n    * Set the dialog `minimizable` state. When true the dialog is minimizable.\n    *\n    * @param {boolean} minimizable - New dialog `minimizable` state.\n    */\n   set minimizable(minimizable)\n   {\n      this.#internal.minimizable = minimizable;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} When true a modal dialog is displayed.\n    */\n   get modal()\n   {\n      return this.#internal.modal;\n   }\n\n   /**\n    * Set the dialog `modal` state. When true a modal dialog is displayed.\n    *\n    * @param {boolean} modal - New dialog `modal` state.\n    */\n   set modal(modal)\n   {\n      this.#internal.modal = modal;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {import('./types').TJSDialog.OptionsModal} Additional options for modal dialog display.\n    */\n   get modalOptions()\n   {\n      return this.#internal.modalOptions;\n   }\n\n   /**\n    * Set additional options for modal dialog display.\n    *\n    * @param {import('./types').TJSDialog.OptionsModal} modalOptions - New additional options for modal dialog display.\n    */\n   set modalOptions(modalOptions)\n   {\n      this.#internal.modalOptions = modalOptions;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} When true and an error is raised in dialog callback functions post a UI error notification.\n    */\n   get notifyError()\n   {\n      return this.#internal.notifyError;\n   }\n\n   /**\n    * Set the dialog `notifyError` state. When true and an error is raised in dialog callback functions post a UI error\n    * notification.\n    *\n    * @param {boolean} notifyError - New dialog `notifyError` state.\n    */\n   set notifyError(notifyError)\n   {\n      this.#internal.notifyError = notifyError;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {string | ((data?: { application?: import('../../index.js').TJSDialog }) => any)} Callback invoked when\n    *          dialog is closed; no button option selected. When defined as a string any matching function by name\n    *          exported from content Svelte component is invoked.\n    */\n   get onClose()\n   {\n      return this.#internal.onClose;\n   }\n\n   /**\n    * Set callback invoked when dialog is closed; no button option selected. When defined as a string any matching\n    * function by name exported from content Svelte component is invoked..\n    *\n    * @param {string | ((data?: { application?: import('../../index.js').TJSDialog }) => any)} onClose - New dialog\n    *        `onClose` state.\n    */\n   set onClose(onClose)\n   {\n      this.#internal.onClose = onClose;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} Dialog `rejectClose` state. When true and a Promise has been created by {@link TJSDialog.wait}\n    *          and the Promise is not in the process of being resolved or rejected on close of the dialog any `onClose`\n    *          function is invoked and any result that is undefined will cause the Promise to then be rejected..\n    */\n   get rejectClose()\n   {\n      return this.#internal.rejectClose;\n   }\n\n   /**\n    * Set the dialog `rejectClose` state.\n    *\n    * @param {boolean} rejectClose - New dialog `rejectClose` state.\n    */\n   set rejectClose(rejectClose)\n   {\n      this.#internal.rejectClose = rejectClose;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} When true the dialog is resizable.\n    */\n   get resizable()\n   {\n      return this.#internal.resizable;\n   }\n\n   /**\n    * Set the dialog `resizable` state. When true the dialog is resizable.\n    *\n    * @param {boolean} resizable - New dialog `resizable` state.\n    */\n   set resizable(resizable)\n   {\n      this.#internal.resizable = resizable;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {boolean} When true and resolving any Promises and there are undefined results from any button callbacks\n    *          the button ID is resolved.\n    */\n   get resolveId()\n   {\n      return this.#internal.resolveId;\n   }\n\n   /**\n    * Set the dialog `resolveId` state. When true and resolving any Promises and there are undefined results from any\n    * button callbacks the button ID is resolved.\n    *\n    * @param {boolean} resolveId - New dialog `resolveId` state.\n    */\n   set resolveId(resolveId)\n   {\n      this.#internal.resolveId = resolveId;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {string} The dialog window title.\n    */\n   get title()\n   {\n      return this.#internal.title;\n   }\n\n   /**\n    * Set the dialog window title.\n    *\n    * @param {string} title - New dialog window title.\n    */\n   set title(title)\n   {\n      this.#internal.title = title;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {import('./types').TJSDialog.OptionsTransition} Transition options for the dialog.\n    */\n   get transition()\n   {\n      return this.#internal.transition;\n   }\n\n   /**\n    * Set transition options for the dialog.\n    *\n    * @param {import('./types').TJSDialog.OptionsTransition} transition - New transition options for the dialog.\n    */\n   set transition(transition)\n   {\n      this.#internal.transition = transition;\n      this.#updateComponent();\n   }\n\n   /**\n    * @returns {number | null} A specific z-index for the dialog. Pass null for the dialog to act like other\n    *          applications in regard bringing to top when activated.\n    */\n   get zIndex()\n   {\n      return this.#internal.zIndex;\n   }\n\n   /**\n    * Set specific z-index for the dialog.\n    *\n    * @param {number | null} zIndex - New z-index for the dialog.\n    */\n   set zIndex(zIndex)\n   {\n      this.#internal.zIndex = zIndex;\n      this.#updateComponent();\n   }\n\n   /**\n    * Provides a cloned copy of the dialog data.\n    * Note: The content attribute is not cloned as complex / props may be present.\n    *\n    * @returns {import('./types').TJSDialog.OptionsData} A clone of the dialog data.\n    */\n   clone()\n   {\n      // Make a shallow copy of internally stored data.\n      const shallowCopy = { ...this.#internal };\n\n      // Remove the content parameter as it may contain complex props sent to the hosted dialog component.\n      delete shallowCopy.content;\n\n      // Clone the internal data and then set the content directly.\n      const cData = klona(shallowCopy);\n      cData.content = this.#internal.content;\n\n      return cData;\n   }\n\n   /**\n    * Provides a way to safely get this dialogs data given an accessor string which describes the\n    * entries to walk. To access deeper entries into the object format the accessor string with `.` between entries\n    * to walk.\n    *\n    * @param {string}   accessor - The path / key to set. You can set multiple levels.\n    *\n    * @param {any}      [defaultValue] - A default value returned if the accessor is not found.\n    *\n    * @returns {any} Value at the accessor.\n    */\n   get(accessor, defaultValue)\n   {\n      return safeAccess(this.#internal, accessor, defaultValue);\n   }\n\n   /**\n    * @param {import('./types').TJSDialog.OptionsData} data - Merge provided data object into Dialog data.\n    */\n   merge(data)\n   {\n      deepMerge(this.#internal, data);\n      this.#updateComponent();\n   }\n\n   /**\n    * Sets the dialog data; this is reactive.\n    *\n    * @param {import('./types').TJSDialog.OptionsData}   data - Dialog data.\n    */\n   replace(data)\n   {\n      if (!isObject(data)) { throw new TypeError(`TJSDialogData replace error: 'data' is not an object'.`); }\n\n      this.#internal = {};\n\n      // Merge new data and perform a reactive update.\n      this.merge(data);\n   }\n\n   /**\n    * Provides a way to safely set this dialogs data given an accessor string which describes the\n    * entries to walk. To access deeper entries into the object format the accessor string with `.` between entries\n    * to walk.\n    *\n    * Automatically the dialog data will be updated in the associated DialogShell Svelte component.\n    *\n    * @param {string}   accessor - The path / key to set. You can set multiple levels.\n    *\n    * @param {any}      value - Value to set.\n    *\n    * @returns {boolean} True if successful.\n    */\n   set(accessor, value)\n   {\n      const success = safeSet(this.#internal, accessor, value, { createMissing: true });\n\n      // If `this.#internal` modified then update the app options store.\n      if (success) { this.#updateComponent(); }\n\n      return success;\n   }\n\n   /**\n    * Updates the data in the Svelte dialog component.\n    */\n   #updateComponent()\n   {\n      const component = this.#application.svelte.appShell;\n      if (component?.data) { component.data = this.clone(); }\n   }\n}\n\n/**\n * Provides a reactive dialog implementation configured from a unique dialog options object. The dialog features a\n * bottom button bar for user selection.\n *\n * A glasspane / modal option with various styling and transition capabilities is available when setting `modal: true`.\n *\n * Most importantly the `content` attribute of dialog data can be a Svelte component configuration object to render\n * your custom component as the dialog content. When using a Svelte component as the content you can assign a string\n * to the various `on<XXX>` dialog callbacks and an exported function from your component will be invoked to handle the\n * button callback. All dialog button callbacks and `onClose` callback receive a single argument which is the dialog /\n * application instance.\n *\n * When making a form with form validation or other dialog that you don't want to close immediately on button press you\n * can set `autoClose: false`, however you are 100% in control of resolving any Promise callbacks from button presses\n * and also closing the application. Each button can also be configured with `autoClose: false` in the button data.\n *\n * There is a handy Promise management capability to track a single Promise for the lifetime of a dialog available\n * at {@link TJSDialog.managedPromise}. By default when the user closes the dialog / application any managed Promise is\n * resolved with `null`. The managed Promise is available in any Svelte content component by using\n * `const managedPromise = getContext('#managedPromise')`. When handling any custom resolution particularly when\n * setting `autoClose: false` for a given button you are 100% in control of resolving or rejecting asynchronous data to\n * return from the dialog.\n *\n * To create and wait upon a managed promise for asynchronous return results use the static or member variation of\n * {@link TJSDialog.wait}.\n *\n * Please refer to {@link TJSDialog.OptionsData} for the various options used to construct the dialog.\n *\n * There are a couple of static helper methods to quickly create standard dialogs such as a 'yes' / 'no' confirmation\n * dialog with {@link TJSDialog.confirm} and an 'ok' single button dialog with {@link TJSDialog.prompt}.\n */\nclass TJSDialog extends SvelteApp\n{\n   /** @type {TJSDialogData} */\n   #data;\n\n   /** @type {ManagedPromise} */\n   #managedPromise;\n\n   /**\n    * @param {import('./internal/state-dialog/types').TJSDialog.OptionsData} data - Dialog options.\n    *\n    * @param {import('./types').SvelteApp.OptionsCore}   [options] - SvelteApp options.\n    */\n   constructor(data, options = {})\n   {\n      // @ts-expect-error\n      super({\n         // Explicit setting of `alwaysOnTop` to prevent the PopOut! module button from appearing when always on top.\n         alwaysOnTop: typeof data?.alwaysOnTop === 'boolean' ? data.alwaysOnTop : false,\n\n         // Explicit setting of `popOutModuleDisable` to prevent the PopOut! module from acting on modal dialogs.\n         popOutModuleDisable: typeof data?.modal === 'boolean' ? data.modal : false,\n\n         ...options,\n\n         // Always ensure adding `dialog` class for core styles.\n         classes: Array.isArray(options.classes) ? [...options.classes, 'dialog'] : ['dialog']\n      });\n\n      this.#managedPromise = new ManagedPromise();\n\n      this.#data = new TJSDialogData(this);\n      this.#data.replace(data);\n   }\n\n   /**\n    * Default options for TJSDialog. Provides a default width and setting `height` to `auto` to always display dialog\n    * content even if it changes. The default `DialogShell` / `svelte` options should not be changed and instead mount\n    * the dialog content component by supplying a Svelte configuration object to dialog data `content` field.\n    *\n    * @returns {import('./types').SvelteApp.Options} Default options\n    */\n   static get defaultOptions()\n   {\n      return /** @type {import('./types').SvelteApp.Options} */ deepMerge(super.defaultOptions, {\n         classes: ['dialog', 'tjs-dialog'],\n         width: 400,\n         height: 'auto',\n         svelte: {\n            class: DialogShell,\n            intro: true,\n            target: document.body,\n            /**\n             * `this` is the TJSDialog instance when invoked.\n             *\n             * @this {TJSDialog}\n             *\n             * @returns {{data: import('./types').TJSDialog.OptionsData, managedPromise: ManagedPromise}} Props\n             */\n            props: function()\n            {\n               return {\n                  data: this.#data.clone(),\n                  managedPromise: this.#managedPromise\n               };\n            }\n         }\n      });\n   }\n\n   /**\n    * Returns the dialog data.\n    *\n    * @returns {import('./internal/state-dialog/types').TJSDialog.Data} Dialog data.\n    */\n   get data() { return this.#data; }\n\n   /**\n    * @returns {import('@typhonjs-fvtt/runtime/util/async').ManagedPromise} Returns the managed promise.\n    */\n   get managedPromise() { return this.#managedPromise; }\n\n   /**\n    * Close the dialog and un-register references to it within UI mappings.\n    * This function returns a Promise which resolves once the window closing animation concludes.\n    *\n    * @param {object}   [options] - Optional parameters.\n    *\n    * @param {boolean}  [options.force] - Force close regardless of render state.\n    *\n    * @returns {Promise<void>} A Promise which resolves once the application is closed with the callback value or\n    *                          `true`.\n    */\n   async close(options)\n   {\n      try\n      {\n         // Note: When handling a managed promise if a button selection has already been made the managed promise is\n         // already processing and the resolution below is skipped.\n         if (this.#managedPromise.isActive && !this.#managedPromise.isProcessing)\n         {\n            const result = TJSDialog.#invokeFn(this.#data.onClose, this, null);\n            const rejectClose = typeof this.#data.rejectClose === 'boolean' ? this.#data.rejectClose : false;\n\n            if (rejectClose && result === null)\n            {\n               this.#managedPromise.reject(new Error('TJSDialog was closed without a choice being made.'));\n            }\n            else\n            {\n               this.#managedPromise.resolve(result);\n            }\n         }\n      }\n      catch (err)\n      {\n         const notifyError = typeof this.#data.notifyError === 'boolean' ? this.#data.notifyError : true;\n         if (notifyError)\n         {\n            // TODO: When app eventbus is available send event for UI notification instead of Foundry API usage.\n            globalThis.ui.notifications.error(err, { console: false });\n         }\n\n         // If there is a managed Promise reject it or re-throw error.\n         if (!this.#managedPromise.reject(err)) { throw err; }\n      }\n      finally\n      {\n         await super.close(options);\n      }\n   }\n\n   /**\n    * Brings to top or renders this dialog returning a Promise that is resolved any button pressed or when the dialog\n    * is closed.\n    *\n    * Creates an anonymous data defined TJSDialog returning a Promise that can be awaited upon for the user to make a\n    * choice.\n    *\n    * Note: `null` is returned if the dialog is closed without a user making a choice.\n    *\n    * @template T\n    *\n    * @param {object}   [options] - Options.\n    *\n    * @param {boolean}  [options.reuse=false] - When true if there is an existing managed Promise this allows multiple\n    *        sources to await on the same result.\n    *\n    * @returns {Promise<T>} A promise for dialog resolution.\n    */\n   async wait(options)\n   {\n      // TODO: Direct usage of Foundry core Application API.\n      if (this.rendered)\n      {\n         this.bringToTop();\n      }\n      else\n      {\n         this.render(true, { focus: true });\n      }\n\n      // Return a managed Promise which is automatically resolved on button press via `DialogContent` component or when\n      // the dialog is closed.\n      return this.#managedPromise.create(options);\n   }\n\n   // ---------------------------------------------------------------------------------------------------------------\n\n   /**\n    * A helper factory method to create simple confirmation dialog windows which consist of simple yes / no prompts.\n    * If you require more flexibility, a custom TJSDialog instance is preferred. The default focused button is 'yes'.\n    * You can change the default focused button by setting `default` to `yes` or `no`.\n    *\n    * @template T\n    *\n    * @param {import('./internal/state-dialog/types').TJSDialog.OptionsData & {\n    *    onYes?: string | ((data?: { application?: TJSDialog }) => any),\n    *    onNo?: string | ((data?: { application?: TJSDialog }) => any)\n    * }} [data] - Confirm dialog options.\n    *\n    * @param {string|((data?: { application?: TJSDialog }) => any)} [data.onYes] - Callback function upon `yes`; may be\n    *        an async function. When defined as a string any matching function by name exported from content Svelte\n    *        component is invoked.\n    *\n    * @param {string|((data?: { application?: TJSDialog }) => any)} [data.onNo] - Callback function upon `no`; may be an\n    *        async function. When defined as a string any matching function by name exported from content Svelte\n    *        component is invoked.\n    *\n    * @param {import('./types').SvelteApp.OptionsCore}  [options]  SvelteApp options passed to the\n    *        TJSDialog constructor.\n    *\n    * @returns {Promise<T>} A promise which resolves with result of yes / no callbacks or true / false.\n    *\n    * @example\n    * const result = await TJSDialog.confirm({\n    *  title: 'A Yes or No Question',\n    *  content: '<p>Choose wisely.</p>',\n    *  onYes: () => 'YES Result',\n    *  onNo: () => 'NO Result'\n    * });\n    *\n    * // Logs 'YES result', 'NO Result', or null if the user closed the dialog without making a selection.\n    * console.log(result);\n    */\n   static async confirm({ onYes, onNo, ...data } = {}, options = {})\n   {\n      // Allow overwriting of default icon and labels.\n      const mergedButtons = deepMerge({\n         yes: {\n            icon: 'fas fa-check',\n            label: 'Yes'\n         },\n         no: {\n            icon: 'fas fa-times',\n            label: 'No',\n         }\n      }, data.buttons ?? {});\n\n      return this.wait({\n         ...data,\n         buttons: deepMerge(mergedButtons, {\n            yes: {\n               onPress: ({ application }) => this.#invokeFn(onYes, application, true)\n            },\n            no: {\n               onPress: ({ application }) => this.#invokeFn(onNo, application, false)\n            }\n         }),\n         default: data.default ?? 'yes'\n      }, options);\n   }\n\n   /**\n    * A helper method to invoke a callback function directly or lookup an exported function with the same name from any\n    * content Svelte component to invoke. This is used internally to apply default values for `confirm` and `prompt`.\n    *\n    * @param {string|((data?: { application?: TJSDialog }) => any)} callback - Callback function to invoke; may be an\n    *        async function. When defined as a string any matching function by name exported from content Svelte\n    *        component is invoked.\n    *\n    * @param {TJSDialog} application - TJSDialog instance passed to callback.\n    *\n    * @param {*} [defaultResult] - An optional default result to return; undefined if not specified.\n    *\n    * @returns {*} Result.\n    *\n    * @internal\n    */\n   static #invokeFn(callback, application, defaultResult = void 0)\n   {\n      let result = defaultResult;\n\n      switch (typeof callback)\n      {\n         case 'function':\n            // Pass the dialog instance to the callback.\n            result = callback({ application });\n            break;\n\n         case 'string':\n         {\n            const dialogComponent = application?.svelte?.appShell?.dialogComponent;\n\n            // Attempt lookup by function name in dialog instance component.\n            if (dialogComponent !== void 0 && typeof dialogComponent?.[callback] === 'function')\n            {\n               result = dialogComponent?.[callback]({ application });\n            }\n            else\n            {\n               if (dialogComponent === void 0)\n               {\n                  console.warn(`[TRL] TJSDialog warning: 'onPress' defined as a string with no ` +\n                   `associated content Svelte component.`);\n               }\n               else if (typeof dialogComponent?.[callback] !== 'function')\n               {\n                  console.warn(`[TRL] TJSDialog warning: The content Svelte component does not contain ` +\n                   `an associated function '${callback}'. Did you remember to add ` +\n                   `'<svelte:options accessors={true} />' and export the function?`);\n               }\n            }\n            break;\n         }\n      }\n\n      return result;\n   }\n\n   /**\n    * A helper factory method to display a basic \"prompt\" style TJSDialog with a single button.\n    *\n    * @template T\n    *\n    * @param {import('./internal/state-dialog/types').TJSDialog.OptionsData & {\n    *    onOk?: string | ((data?: { application?: TJSDialog }) => any),\n    *    label?: string,\n    *    icon?: string\n    * }} [data] - Prompt dialog options that includes any TJSDialog options along with the following optional fields:\n    *\n    * @param {string|((data?: { application?: TJSDialog }) => any)} [data.onOk] - Callback function upon `ok`; may be\n    *        an async function. When defined as a string any matching function by name exported from content Svelte\n    *        component is invoked.\n    *\n    * @param {string}   [data.label] - The OK prompt button text.\n    *\n    * @param {string}   [data.icon=\"fas fa-check\"] - Set another icon besides `fas fa-check` for button.\n    *\n    * @param {import('./types').SvelteApp.OptionsCore}  [options]  SvelteApp options passed to the\n    *        TJSDialog constructor.\n    *\n    * @returns {Promise<T>} The returned value from the provided callback function or `true` if the button\n    *          is pressed.\n    *\n    * @example\n    * const result = await TJSDialog.prompt({\n    *  title: 'Are you OK?',\n    *  content: '<p>Are you OK?.</p>',\n    *  label: 'Feeling Fine!',\n    *  onOk: () => 'OK'\n    * });\n    *\n    * // Logs 'OK' or null if the user closed the dialog without making a selection.\n    * console.log(result);\n    */\n   static async prompt({ onOk, label, icon = 'fas fa-check', ...data } = {}, options = {})\n   {\n      return this.wait({\n         ...data,\n         buttons: {\n            ok: {\n               icon,\n               label,\n               onPress: ({ application }) => this.#invokeFn(onOk, application, true)\n            }\n         },\n         default: 'ok'\n      }, options);\n   }\n\n   /**\n    * Creates an anonymous data defined TJSDialog returning a Promise that can be awaited upon for the user to make a\n    * choice.\n    *\n    * Note: By default `null` is returned if the dialog is closed without a user making a choice.\n    *\n    * @template T\n    *\n    * @param {import('./internal/state-dialog/types').TJSDialog.OptionsData}  data - Dialog data passed to the\n    *        TJSDialog constructor.\n    *\n    * @param {import('./types').SvelteApp.OptionsCore}  [options]  SvelteApp options passed to the\n    *        TJSDialog constructor.\n    *\n    * @returns {Promise<T>} A Promise that resolves to the chosen result.\n    */\n   static async wait(data, options = {})\n   {\n      if (!isObject(data)) { throw new TypeError(`TJSDialog.wait error: 'data' is not an object'.`); }\n\n      // Instantiate and render the dialog.\n      return new this({ ...data }, options).wait();\n   }\n}\n\n// Initialize global tracking data for SvelteApp.\nSvelteAppData.initialize();\n\n// Initialize core theme observation / changes.\nThemeObserver.initialize();\n\n// Handle `hotReload` Foundry hook when running the Vite dev server.\nif (import.meta.hot) { FoundryHMRSupport.initialize(); }\n\n// Handle `PopOut!` module hooks to allow applications to popout to their own browser window.\nPopoutSupport.initialize();\n\nexport { FoundryStyles, SvelteApp, SvelteApp as SvelteApplication, TJSDialog };\n//# sourceMappingURL=index.js.map\n","export function melee() {\n    return {\n        contrast: 0,\n        delay: 0,\n        elevation: 1000,\n        isWait: false,\n        opacity: 1,\n        playbackRate: 1,\n        repeat: 1,\n        repeatDelay: 250,\n        saturate: 0,\n        size: 1,\n        tint: false,\n        tintColor: \"#FFFFFF\",\n        zIndex: 1,\n    }\n}\n\n/**\n * @typedef {object} DataMeleeOptions\n * \n * @property {number}      delay -\n *\n * @property {number}      elevation -\n *\n * @property {boolean}     isWait -\n *\n * @property {number}      opacity -\n *\n * @property {number}      playbackRate -\n * \n * @property {number}      repeat -\n *\n * @property {number}      repeatDelay -\n *\n * @property {number}      size -\n *\n * @property {number}      zIndex -\n */\n","export function range() {\n    return {\n        contrast: 0,\n        delay: 0,\n        elevation: 1000,\n        isReturning: false,\n        isWait: false,\n        onlyX: false,\n        opacity: 1,\n        playbackRate: 1,\n        repeat: 1,\n        repeatDelay: 250,\n        saturate: 0,\n        tint: false,\n        tintColor: \"#FFFFFF\",\n        zIndex: 1,\n    }\n}","export function ontoken() {\n    return {\n        addTokenWidth: false,\n        anchor: \"0.5\",\n        contrast: 0,\n        delay: 0,\n        elevation: 1000,\n        fadeIn: 250,\n        fadeOut: 500,\n        isMasked: false,\n        isRadius: false,\n        isWait: false,\n        opacity: 1,\n        persistent: false,\n        playbackRate: 1,\n        playOn: \"default\",\n        repeat: 1,\n        repeatDelay: 250,\n        saturate: 0,\n        size: 1,\n        tint: false,\n        tintColor: \"#FFFFFF\",\n        unbindAlpha: false,\n        unbindVisibility: false,\n        zIndex: 1,\n    }\n}\n\n/**\n * @typedef {object} DataOnTokenOptions\n * \n * @property {boolean}     addTokenWidth -\n * \n * @property {number}      delay -\n *\n * @property {number}      elevation -\n *\n * @property {number}      fadeIn -\n *\n * @property {number}      fadeOut -\n *\n * @property {boolean}     isMasked -\n *\n * @property {boolean}     isRadius -\n *\n * @property {boolean}     isWait -\n *\n * @property {boolean}     persistent -\n *\n * @property {string}      playOn -\n *\n * @property {number}      repeat -\n *\n * @property {number}      repeatDelay -\n *\n * @property {number}      size -\n *\n * @property {boolean}     unbindAlpha -\n *\n * @property {boolean}     unbindVisibility -\n *\n * @property {number}      zIndex -\n */\n","export function templatefx() {\n    return {\n        contrast: 0,\n        delay: 0,\n        elevation: 1000,\n        isMasked: false,\n        isWait: false,\n        occlusionAlpha: 0.5,\n        occlusionMode: \"3\",\n        opacity: 1,\n        persistent: false,\n        persistType: \"sequencerground\",\n        playbackRate: 1,\n        removeTemplate: false,\n        repeat: 1,\n        repeatDelay: 250,\n        rotate: 0,\n        saturate: 0,\n        scale: \"1\",\n        tint: false,\n        tintColor: \"#FFFFFF\",\n        zIndex: 1,\n    }\n}\n\n/**\n * @typedef {object} DataTemplateFXOptions\n * \n * @property {number}      delay -\n *\n * @property {number}      elevation -\n *\n * @property {boolean}     isMasked -\n *\n * @property {boolean}     isWait -\n *\n * @property {number}      occlusionAlpha -\n *\n * @property {number}      occlusionMode -\n *\n * @property {number}      opacity -\n *\n * @property {boolean}     persistent -\n *\n * @property {string}      persistType -\n *\n * @property {boolean}     removeTemplate -\n *\n * @property {number}      repeat -\n *\n * @property {number}      repeatDelay -\n *\n * @property {number}      rotate -\n *\n * @property {number}      scaleX -\n *\n * @property {number}      scaleY -\n *\n * @property {number}      zIndex -\n */\n","export function aura() {\n    return {\n        addTokenWidth: true,\n        alpha: false,\n        alphaMax: 0.5,\n        alphaMin: -0.5,\n        alphaDuration: 1000,\n        breath: false,\n        breathMax: 1.05,\n        breathMin: 0.95,\n        breathDuration: 1000,\n        delay: 0,\n        elevation: 1000,\n        fadeIn: 250,\n        fadeOut: 500,\n        isRadius: true,\n        isWait: false,\n        opacity: 1,\n        playbackRate: 1,\n        playOn: \"source\",\n        size: 3,\n        tint: false,\n        tintColor: \"#FFFFFF\",\n        tintSaturate: 0,\n        unbindAlpha: false,\n        unbindVisibility: false,\n        zIndex: 1,\n    }\n}\n\n/**\n * @typedef {object} DataAuraOptions\n * \n * @property {boolean}     addTokenWidth -\n * \n * @property {number}      delay -\n *\n * @property {number}      elevation -\n *\n * @property {number}      fadeIn -\n *\n * @property {number}      fadeOut -\n *\n * @property {boolean}     ignoreTarget -\n *\n * @property {boolean}     isMasked -\n *\n * @property {boolean}     isWait -\n *\n * @property {number}      opacity -\n *\n * @property {number}      size -\n *\n * @property {boolean}     unbindAlpha -\n *\n * @property {boolean}     unbindVisibility -\n *\n * @property {number}      zIndex -\n */\n","export function aefx(aeType) {\n    if (aeType === \"ontoken\") {\n        return {\n            addTokenWidth: false,\n            anchor: \"0.5\",\n            delay: 0,\n            elevation: 1000,\n            fadeIn: 250,\n            fadeOut: 500,\n            isMasked: false,\n            isRadius: false,\n            isWait: false,\n            opacity: 1,\n            persistent: false,\n            playbackRate: 1,\n            playOn: \"source\",\n            repeat: 1,\n            repeatDelay: 250,\n            size: 1,\n            unbindAlpha: false,\n            unbindVisibility: false,\n            zIndex: 1,    \n        }\n    } else if (aeType === \"aura\") {\n        return {\n            addTokenWidth: true,\n            alpha: false,\n            alphaMax: 0.5,\n            alphaMin: -0.5,\n            alphaDuration: 1000,\n            breath: false,\n            breathMax: 1.05,\n            breathMin: 0.95,\n            breathDuration: 1000,    \n            delay: 0,\n            elevation: 1000,\n            fadeIn: 250,\n            fadeOut: 500,    \n            isRadius: false,\n            isWait: false,\n            opacity: 1,\n            playbackRate: 1,\n            playOn: \"source\",\n            size: 3,\n            tint: false,\n            tintColor: \"#FFFFFF\",\n            tintSaturate: 0,    \n            unbindAlpha: false,\n            unbindVisibility: false,\n            zIndex: 1,    \n        }\n    }\n}\n\n/**\n * @typedef {object} DataAEFXOnTokenOptions\n * \n * @property {boolean}     addTokenWidth -\n * \n * @property {number}      delay -\n *\n * @property {number}      elevation -\n *\n * @property {number}      fadeIn -\n *\n * @property {number}      fadeOut -\n *\n * @property {boolean}     isMasked -\n *\n * @property {boolean}     isRadius -\n *\n * @property {boolean}     isWait -\n *\n * @property {boolean}     persistent -\n *\n * @property {string}      playOn -\n *\n * @property {number}      repeat -\n *\n * @property {number}      repeatDelay -\n *\n * @property {number}      size -\n *\n * @property {boolean}     unbindAlpha -\n *\n * @property {boolean}     unbindVisibility -\n *\n * @property {number}      zIndex -\n */\n\n/**\n * @typedef {object} DataAEFXAuraOptions\n * \n * @property {boolean}     addTokenWidth -\n * \n * @property {number}      delay -\n *\n * @property {number}      elevation -\n *\n * @property {number}      fadeIn -\n *\n * @property {number}      fadeOut -\n *\n * @property {boolean}     ignoreTarget -\n *\n * @property {boolean}     isMasked -\n *\n * @property {boolean}     isWait -\n *\n * @property {number}      opacity -\n *\n * @property {number}      size -\n *\n * @property {boolean}     unbindAlpha -\n *\n * @property {boolean}     unbindVisibility -\n *\n * @property {number}      zIndex -\n */\n","import { Hashing } from \"#runtime/util\";\n\nimport * as common from \"../common\";\nimport * as options from \"../options\";\n\nexport function melee(current = {}) {\n        return {\n            id: current.id || Hashing.uuidv4(),\n            label: current.label || \"\",\n            levels3d: current.levels3d || common.levels3d(),\n            macro: current.macro || common.macro(),\n            meleeSwitch: common.meleeSwitch(),\n            menu: \"melee\",\n            primary: common.primary({\n                options: options.melee(),\n                video: { dbSection: \"melee\", menuType: 'weapon', animation: 'club', variant: '01', color: 'white' },\n            }),\n            secondary: current.secondary || common.secondary(),\n            soundOnly: current.soundOnly || {\n                sound: common.sound(),\n            },\n            source: current.source || common.source(),\n            target: current.target || common.target(),\n        }\n}\n","import { Hashing } from \"#runtime/util\";\n\nimport * as common from \"../common\";\nimport * as options from \"../options\";\n\nexport function range(current = {}) {\n        return {\n            id: current.id || Hashing.uuidv4(),\n            label: current.label,\n            levels3d: current.levels3d || common.levels3d(),\n            macro: current.macro || common.macro(),\n            menu: \"range\",\n            primary: common.primary({\n                options: options.range(),\n                video: { dbSection: \"range\", menuType: 'weapon', animation: 'arrow', variant: 'regular', color: 'regular' },\n            }),\n            secondary: current.secondary || common.secondary(),\n            soundOnly: current.soundOnly || {\n                sound: common.sound(),\n            },\n            source: current.source || common.source(),\n            target: current.target || common.target(),\n        }\n}\n","import { Hashing } from \"#runtime/util\";\n\nimport * as common from \"../common\";\nimport * as options from \"../options\";\n\nexport function ontoken(current = {}) {\n        return {\n            id: current.id || Hashing.uuidv4(),\n            label: current.label,\n            levels3d: current.levels3d || common.levels3d(),\n            macro: current.macro || common.macro(),\n            menu: \"ontoken\",\n            primary: common.primary({\n                options: options.ontoken(),\n                video: { dbSection: \"static\", menuType: 'spell', animation: 'curewounds', variant: '01', color: 'blue' },\n            }),\n            secondary: current.secondary || common.secondary(),\n            soundOnly: current.soundOnly || {\n                sound: common.sound(),\n            },\n            source: current.source || common.source(),\n            target: current.target || common.target(),\n        }\n}\n","import { Hashing } from \"#runtime/util\";\n\nimport * as common from \"../common\";\nimport * as options from \"../options\";\n\nexport function templatefx(current = {}) {\n    return {\n        id: current.id || Hashing.uuidv4(),\n        label: current.label,\n        macro: current.macro || common.macro(),\n        menu: \"templatefx\",\n        primary: common.primary({\n            options: options.templatefx(),\n            video: { dbSection: \"templatefx\", menuType: 'circle', animation: 'calllightning', variant: '01', color: 'blue' },\n        }),\n        secondary: current.secondary || common.secondary(),\n        soundOnly: current.soundOnly || {\n            sound: common.sound(),\n        },\n        source: current.source || common.source(),\n        target: current.target || common.target(),\n    }\n}\n","import { Hashing } from \"#runtime/util\";\n\nimport * as common from \"../common\";\nimport * as options from \"../options\";\n\nexport function aura(current = {}) {\n        return {\n            id: current.id || Hashing.uuidv4(),\n            label: current.label,\n            macro: current.macro || common.macro(),\n            menu: \"aura\",\n            primary: common.primary({\n                options: options.aura(),\n                video: { dbSection: \"static\", menuType: 'spell', animation: 'spiritguardians', variant: '01', color: 'yellowblue' },\n            }),\n            secondary: current.secondary || common.secondary(),\n            soundOnly: current.soundOnly || {\n                sound: common.sound(),\n            },\n            source: current.source || common.source(),\n            target: current.target || common.target(),\n        }\n}\n","import { Hashing } from \"#runtime/util\";\n\nimport * as common from \"../common\";\n\nexport function preset(current = {}, type) {\n    switch (type) {\n        case \"dualattach\":\n            return {\n                id: current.id || Hashing.uuidv4(),\n                data: {\n                    video: {\n                        dbSection: \"range\",\n                        menuType: \"weapon\",\n                        animation: \"arrow\",\n                        variant: \"regular\",\n                        color: \"regular\",\n                    },\n                    options: {\n                        elevation: 1000,\n                        onlyX: false,\n                        opacity: 1,\n                        playbackRate: 1,\n                    },\n                    sound: common.sound()\n                },\n                label: current.label || \"\",\n                macro: current.macro || common.macro(),\n                menu: 'preset',\n                presetType: current.presetType || \"\",\n                soundOnly: {\n                    sound: common.sound()\n                },\n            }\n        case \"proToTemp\":\n            return {\n                id: current.id || Hashing.uuidv4(),\n                data: {\n                    projectile: {\n                        dbSection: \"range\",\n                        menuType: \"spell\",\n                        animation: \"fireballbeam\",\n                        variant: \"01\",\n                        color: \"orange\",\n                        enableCustom: false,\n                        customPath: \"\",\n                        options: {\n                            elevation: 1000,\n                            opacity: 1,\n                            playbackRate: 1,\n                            repeat: 1,\n                            repeatDelay: 250,\n                            removeTemplate: false,\n                            wait: -1800,\n                        },\n                        sound: common.sound()\n                    },\n                    preExplosion: {\n                        enable: false,\n                        dbSection: \"static\",\n                        menuType: \"spell\",\n                        animation: \"curewounds\",\n                        variant: \"01\",\n                        color: \"blue\",\n                        options: {\n                            elevation: 1000,\n                            opacity: 1,\n                            playbackRate: 1,\n                            repeat: 1,\n                            repeatDelay: 250,\n                            scale: 1,\n                            wait: 0,\n                        },\n                        sound: common.sound()\n                    },\n                    explosion: {\n                        dbSection: \"static\",\n                        menuType: \"spell\",\n                        animation: \"fireball\",\n                        variant: \"explode\",\n                        color: \"orange\",\n                        options: {\n                            elevation: 1000,\n                            opacity: 1,\n                            playbackRate: 1,\n                            repeat: 1,\n                            repeatDelay: 250,\n                            scale: 1.25,\n                            wait: -1000,\n                        },\n                        sound: common.sound()\n                    },\n                    afterImage: {\n                        enable: false,\n                        customPath: \"\",\n                        options: {\n                            elevation: 0,\n                            persistent: false,\n                            scale: 1,\n                        }\n                    }\n                },\n                label: current.label || \"\",\n                macro: current.macro || common.macro(),\n                menu: 'preset',\n                presetType: current.presetType || \"\",\n                soundOnly: {\n                    sound: common.sound()\n                },\n                secondary: common.secondary(),\n                target: common.target(),\n            }\n        case \"teleportation\":\n            return {\n                id: current.id || Hashing.uuidv4(),\n                data: {\n                    start: {\n                        dbSection: \"static\",\n                        enabe: true,\n                        menuType: \"spell\",\n                        animation: \"mistystep\",\n                        variant: \"01\",\n                        color: \"blue\",\n                        options: {\n                            delay: 0,\n                            elevation: 1000,\n                            fadeIn: 250,\n                            fadeOut: 250,\n                            isMasked: false,\n                            opacity: 1,\n                            isRadius: false,\n                            playbackRate: 1,\n                            size: 1.5,\n                        },\n                    },\n                    between: {\n                        dbSection: \"range\",\n                        enable: false,\n                        menuType: \"weapon\",\n                        animation: \"arrow\",\n                        variant: \"regular\",\n                        color: \"regular\",\n                        options: {\n                            delay: 0,\n                            elevation: 1000,\n                            opacity: 1,\n                            playbackRate: 1,\n                        },\n                    },\n                    end: {\n                        dbSection: \"static\",\n                        enabe: true,\n                        menuType: \"spell\",\n                        animation: \"mistystep\",\n                        variant: \"02\",\n                        color: \"blue\",\n                        options: {\n                            delay: 500,\n                            elevation: 1000,\n                            fadeIn: 250,\n                            fadeOut: 250,\n                            isMasked: false,\n                            isRadius: false,\n                            opacity: 1,\n                            playbackRate: 1,\n                            size: 1.5,\n                        },\n                    },\n                    options: {\n                        range: 30,\n                        hideFromPlayers: false,\n                        measureType: \"alternating\",\n                        teleport: true,\n                        speed: 120,\n                        delayMove: 1000,\n                        alpha: 0,\n                        delayFade: 750,\n                        delayReturn: 250,\n                        checkCollision: true,\n                    },\n                    sound: {enable: false}\n                },\n                label: current.label || \"\",\n                macro: current.macro || common.macro(),\n                menu: 'preset',\n                presetType: current.presetType || \"\",\n                soundOnly: {\n                    sound: common.sound()\n                },\n            }\n        case \"thunderwave\":\n            return {\n                id: current.id || Hashing.uuidv4(),\n                data: {\n                    video: {\n                        dbSection: \"static\",\n                        menuType: \"spell\",\n                        animation: \"thunderwave\",\n                        variant: \"mid\",\n                        color: \"blue\",\n                    },\n                    options: {\n                        elevation: 1000,\n                        removeTemplate: false,\n                        repeat: 1,\n                        repeatDelay: 250,\n                        opacity: 1,\n                    }      ,\n                    sound: {enable: false},\n                },\n                label: current.label || \"\",\n                macro: current.macro || common.macro(),\n                menu: 'preset',\n                presetType: current.presetType || \"\",\n                soundOnly: {\n                    sound: common.sound()\n                },\n            }\n        default:\n            return {\n                id: current.id || Hashing.uuidv4(),\n                data: {\n                    projectile: {\n                        dbSection: \"range\",\n                        menuType: \"weapon\",\n                        animation: \"arrow\",\n                        variant: \"regular\",\n                        color: \"regular\",\n                        enableCustom: false,\n                        customPath: \"\",\n                        options: {\n                            elevation: 1000,\n                            opacity: 1,\n                            playbackRate: 1,\n                            repeat: 1,\n                            repeatDelay: 250,\n                            removeTemplate: false,\n                            wait: -1800,\n                        },\n                        sound: common.sound()\n                    },\n                    preExplosion: {\n                        dbSection: \"static\",\n                        menuType: \"spell\",\n                        animation: \"curewounds\",\n                        variant: \"01\",\n                        color: \"blue\",\n                        options: {\n                            elevation: 1000,\n                            opacity: 1,\n                            playbackRate: 1,\n                            repeat: 1,\n                            repeatDelay: 250,\n                            scale: 1,\n                            wait: 0,\n                        },\n                        enable: false,\n                        sound: common.sound()\n                    },\n                    explosion: {\n                        dbSection: \"static\",\n                        menuType: \"spell\",\n                        animation: \"curewounds\",\n                        variant: \"01\",\n                        color: \"blue\",\n                        options: {\n                            elevation: 1000,\n                            opacity: 1,\n                            playbackRate: 1,\n                            repeat: 1,\n                            repeatDelay: 250,\n                            scale: 1.25,\n                            wait: -1000,\n                        },\n                        sound: common.sound()\n                    },\n                    afterImage: {\n                        enable: false,\n                        customPath: \"\",\n                        options: {\n                            elevation: 0,\n                            persistent: false,\n                            scale: 1,\n                        }\n                    }\n                },\n                label: current.label || \"\",\n                macro: current.macro || common.macro(),\n                menu: 'preset',\n                presetType: current.presetType || \"proToTemp\",\n                soundOnly: {\n                    sound: common.sound()\n                },\n                secondary: common.secondary(),\n                target: common.target(),\n            }\n    }\n}\n","import { Hashing } from \"#runtime/util\";\n\nimport * as common from \"../common\";\nimport * as options from \"../options\";\n\nexport function aefx(current = {}, type) {\n    if (type === \"ontoken\") {\n        return {\n            id: current.id || Hashing.uuidv4(),\n            label: current.label || \"\",\n            activeEffectType: current.activeEffectType || \"ontoken\",\n            menu: 'aefx',\n            macro: current.macro || common.macro(),\n            primary: {\n                video: {\n                    dbSection: \"static\",\n                    menuType: \"spell\",\n                    animation: \"curewounds\",\n                    variant: \"01\",\n                    color: \"blue\",\n                    enableCustom: false,\n                    customPath: \"\",\n                },\n                options: options.aefx(\"ontoken\"),\n                sound: common.sound(),\n            },\n            secondary: current.secondary || common.secondary(),\n            soundOnly: current.soundOnly || {sound: common.sound()},\n            source: current.source || common.source(),\n        }\n    } else if (type === \"aura\") {\n        return {\n            id: current.id || Hashing.uuidv4(),\n            label: current.label || \"\",\n            activeEffectType: current.activeEffectType || \"ontoken\",\n            menu: 'aefx',\n            macro: current.macro || common.macro(),\n            primary: {\n                video: {\n                    dbSection: \"static\",\n                    menuType: \"spell\",\n                    animation: \"spiritguardians\",\n                    variant: \"01\",\n                    color: \"yellowblue\",\n                    enableCustom: false,\n                    customPath: \"\",\n                },\n                options: options.aefx(\"aura\"),\n                sound: common.sound(),\n            },\n            secondary: current.secondary || common.secondary(),\n            soundOnly: current.soundOnly || {sound: common.sound()},\n            source: current.source || common.source(),\n        }\n    } else {\n        return {\n            id: current.id || Hashing.uuidv4(),\n            label: current.label || \"\",\n            activeEffectType: current.activeEffectType || \"ontoken\",\n            menu: 'aefx',\n            macro: current.macro || common.macro(),\n            primary: {\n                video: {\n                    dbSection: \"static\",\n                    menuType: \"spell\",\n                    animation: \"curewounds\",\n                    variant: \"01\",\n                    color: \"blue\",\n                    enableCustom: false,\n                    customPath: \"\",\n                },\n                options: options.aefx(\"ontoken\"),\n                sound: common.sound(),\n            },\n            secondary: current.secondary || common.secondary(),\n            soundOnly: current.soundOnly || {sound: common.sound()},\n            source: current.source || common.source(),\n        }\n    }\n}\n","import { writable, get } from 'svelte/store';\nimport { isMinimalWritableStore } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { Strings } from '@typhonjs-fvtt/runtime/util';\nimport { isIterable, safeAccess } from '@typhonjs-fvtt/runtime/util/object';\n\nclass DynReducerUtils {\n    /**\n     * Checks for array equality between two arrays of numbers.\n     *\n     * @param a - Array A\n     *\n     * @param b - Array B\n     *\n     * @returns Arrays are equal.\n     */\n    static arrayEquals(a, b) {\n        if (a === b) {\n            return true;\n        }\n        /* c8 ignore next */\n        if (a === null || b === null) {\n            return false;\n        }\n        /* c8 ignore next */\n        if (a.length !== b.length) {\n            return false;\n        }\n        for (let cntr = a.length; --cntr >= 0;) {\n            /* c8 ignore next */\n            if (a[cntr] !== b[cntr]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Provides a solid string hashing algorithm.\n     *\n     * Sourced from: https://stackoverflow.com/a/52171480\n     *\n     * @param str - String to hash.\n     *\n     * @param seed - A seed value altering the hash.\n     *\n     * @returns Hash code.\n     */\n    static hashString(str, seed = 0) {\n        /* c8 ignore next */\n        if (str === void 0 || str === null) {\n            return 0;\n        }\n        let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\n        for (let ch, i = 0; i < str.length; i++) {\n            ch = str.charCodeAt(i);\n            h1 = Math.imul(h1 ^ ch, 2654435761);\n            h2 = Math.imul(h2 ^ ch, 1597334677);\n        }\n        h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n        h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n        return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n    }\n    /**\n     * Converts an unknown value for hashing purposes in {@link AdapterIndexer.calcHashUpdate}.\n     *\n     * Currently, objects / Map w/ object keys is not supported. Potentially can include `object-hash` to handle this\n     * case, but it is not common to use objects as keys in Maps.\n     *\n     * @param value - An unknown value to convert to a number.\n     */\n    static hashUnknown(value) {\n        if (value === null || value === void 0) {\n            return 0;\n        }\n        let result = 0;\n        switch (typeof value) {\n            case 'boolean':\n                result = value ? 1 : 0;\n                break;\n            case 'bigint':\n                result = Number(BigInt.asIntN(64, value));\n                break;\n            case 'function':\n                result = this.hashString(value.name);\n                break;\n            case 'number':\n                result = Number.isFinite(value) ? value : 0;\n                break;\n            case 'object':\n                // TODO: consider hashing an object IE `object-hash` and convert to number.\n                break;\n            case 'string':\n                result = this.hashString(value);\n                break;\n            case 'symbol':\n                result = this.hashString(Symbol.keyFor(value));\n                break;\n        }\n        return result;\n    }\n    /**\n     * @param target -\n     *\n     * @param Prototype -\n     *\n     * @returns target constructor function has Prototype.\n     */\n    static hasPrototype(target, Prototype) {\n        /* c8 ignore next */\n        if (typeof target !== 'function') {\n            return false;\n        }\n        if (target === Prototype) {\n            return true;\n        }\n        // Walk parent prototype chain. Check for descriptor at each prototype level.\n        for (let proto = Object.getPrototypeOf(target); proto; proto = Object.getPrototypeOf(proto)) {\n            if (proto === Prototype) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Provides a utility method to determine if the given data is iterable / implements iterator protocol.\n     *\n     * @param data - Data to verify as iterable.\n     *\n     * @returns Is data iterable.\n     */\n    static isIterable(data) {\n        return data !== null && data !== void 0 && typeof data === 'object' &&\n            typeof data[Symbol.iterator] === 'function';\n    }\n}\n\n/**\n * Provides the `derived` API for all dynamic reducers.\n */\nclass AdapterDerived {\n    #hostData;\n    #DerivedReducerCtor;\n    #parentIndex;\n    #derived = new Map();\n    #destroyed = false;\n    /**\n     * @param hostData - Hosted data structure.\n     *\n     * @param parentIndex - Any associated parent index API.\n     *\n     * @param DerivedReducerCtor - The default derived reducer constructor function.\n     */\n    constructor(hostData, parentIndex, DerivedReducerCtor) {\n        this.#hostData = hostData;\n        this.#parentIndex = parentIndex;\n        this.#DerivedReducerCtor = DerivedReducerCtor;\n        Object.freeze(this);\n    }\n    /**\n     * Creates a new derived reducer.\n     *\n     * @param options - Options defining the new derived reducer.\n     *\n     * @returns Newly created derived reducer.\n     */\n    create(options) {\n        if (this.#destroyed || this.#hostData === null) {\n            throw Error(`AdapterDerived.create error: this instance has been destroyed.`);\n        }\n        let name;\n        let rest = {};\n        let ctor;\n        const DerivedReducerCtor = this.#DerivedReducerCtor;\n        if (typeof options === 'string') {\n            name = options;\n            ctor = DerivedReducerCtor;\n        }\n        else if (typeof options === 'function' && DynReducerUtils.hasPrototype(options, DerivedReducerCtor)) {\n            ctor = options;\n        }\n        else if (typeof options === 'object' && options !== null) {\n            ({ name, ctor = DerivedReducerCtor, ...rest } = options);\n        }\n        else {\n            throw new TypeError(`AdapterDerived.create error: 'options' does not conform to allowed parameters.`);\n        }\n        if (!DynReducerUtils.hasPrototype(ctor, DerivedReducerCtor)) {\n            throw new TypeError(`AdapterDerived.create error: 'ctor' is not a '${DerivedReducerCtor?.name}'.`);\n        }\n        name = name ?? ctor?.name;\n        if (typeof name !== 'string') {\n            throw new TypeError(`AdapterDerived.create error: 'name' is not a string.`);\n        }\n        const derivedReducer = new ctor(this.#hostData, this.#parentIndex, rest);\n        this.#derived.set(name, derivedReducer);\n        // If the instantiated derived reducer has an `initialize` method then invoke it.\n        if (this.#hasInitialize(derivedReducer)) {\n            const { filters, sort, ...optionsRest } = rest;\n            derivedReducer.initialize(optionsRest);\n        }\n        return derivedReducer;\n    }\n    /**\n     * Removes all derived reducers and associated subscriptions.\n     */\n    clear() {\n        if (this.#destroyed) {\n            return;\n        }\n        for (const reducer of this.#derived.values()) {\n            reducer.destroy();\n        }\n        this.#derived.clear();\n    }\n    /**\n     * Deletes and destroys a derived reducer by name.\n     *\n     * @param name - Name of the derived reducer.\n     *\n     * @returns true if an element in the Map existed and has been removed, or false if the element does not exist.\n     */\n    delete(name) {\n        if (this.#destroyed) {\n            throw Error(`AdapterDerived.delete error: this instance has been destroyed.`);\n        }\n        const reducer = this.#derived.get(name);\n        if (reducer) {\n            reducer.destroy();\n        }\n        return this.#derived.delete(name);\n    }\n    /**\n     * Removes all derived reducers, subscriptions, and cleans up all resources.\n     */\n    destroy() {\n        if (this.#destroyed) {\n            return;\n        }\n        this.clear();\n        this.#hostData = null;\n        this.#parentIndex = null;\n        this.#destroyed = true;\n    }\n    /**\n     * Returns an existing derived reducer.\n     *\n     * @param name - Name of derived reducer.\n     *\n     * @returns Any associated derived reducer.\n     */\n    get(name) {\n        if (this.#destroyed) {\n            throw Error(`AdapterDerived.get error: this instance has been destroyed.`);\n        }\n        return this.#derived.get(name);\n    }\n    /**\n     * Type guard to check for presence of `initialize` method.\n     *\n     * @param instance - Instance to check.\n     */\n    #hasInitialize(instance) {\n        return typeof instance?.initialize === 'function';\n    }\n    /**\n     * Updates all managed derived reducer indexes.\n     *\n     * @param [force=false] - Force an update to subscribers.\n     */\n    update(force = false) {\n        if (this.#destroyed) {\n            return;\n        }\n        for (const reducer of this.#derived.values()) {\n            reducer.index.update(force);\n        }\n    }\n}\n\nclass AdapterFilters {\n    #filtersData;\n    #indexUpdate;\n    #mapUnsubscribe = new Map();\n    constructor(indexUpdate, filtersAdapter) {\n        this.#indexUpdate = indexUpdate;\n        this.#filtersData = filtersAdapter;\n        Object.freeze(this);\n    }\n    get length() { return this.#filtersData.filters.length; }\n    *[Symbol.iterator]() {\n        if (this.#filtersData.filters.length === 0) {\n            return;\n        }\n        for (const entry of this.#filtersData.filters) {\n            yield { ...entry };\n        }\n    }\n    add(...filters) {\n        /**\n         * Tracks the number of filters added that have subscriber functionality.\n         */\n        let subscribeCount = 0;\n        for (const filter of filters) {\n            const filterType = typeof filter;\n            if (filterType !== 'function' && (filterType !== 'object' || filter === null)) {\n                throw new TypeError(`AdapterFilters error: 'filter' is not a function or object.`);\n            }\n            let data;\n            let subscribeFn;\n            if (filterType === 'function') {\n                data = {\n                    id: void 0,\n                    filter: filter,\n                    weight: 1\n                };\n                subscribeFn = filter.subscribe;\n            }\n            else if (filterType === 'object') {\n                if ('filter' in filter) {\n                    if (typeof filter.filter !== 'function') {\n                        throw new TypeError(`AdapterFilters error: 'filter' attribute is not a function.`);\n                    }\n                    if (filter.weight !== void 0 && (typeof filter.weight !== 'number' ||\n                        filter.weight < 0 || filter.weight > 1)) {\n                        throw new TypeError(`AdapterFilters error: 'weight' attribute is not a number between '0 - 1' inclusive.`);\n                    }\n                    data = {\n                        id: filter.id !== void 0 ? filter.id : void 0,\n                        filter: filter.filter,\n                        weight: filter.weight || 1\n                    };\n                    subscribeFn = filter.filter.subscribe ?? filter.subscribe;\n                }\n                else {\n                    throw new TypeError(`AdapterFilters error: 'filter' attribute is not a function.`);\n                }\n                /* c8 ignore next 5 */ // TS type guard for `else` conditional.\n            }\n            else {\n                throw new TypeError(`AdapterFilters error: 'filter' is not defined.`);\n            }\n            // Find the index to insert where data.weight is less than existing values weight.\n            const index = this.#filtersData.filters.findIndex((value) => {\n                return data.weight < value.weight;\n            });\n            // If an index was found insert at that location.\n            if (index >= 0) {\n                this.#filtersData.filters.splice(index, 0, data);\n            }\n            else // push to end of filters.\n             {\n                this.#filtersData.filters.push(data);\n            }\n            if (typeof subscribeFn === 'function') {\n                const unsubscribe = subscribeFn(this.#indexUpdate);\n                // Ensure that unsubscribe is a function.\n                if (typeof unsubscribe !== 'function') {\n                    throw new TypeError('AdapterFilters error: Filter has subscribe function, but no unsubscribe function is returned.');\n                }\n                // Ensure that the same filter is not subscribed to multiple times.\n                if (this.#mapUnsubscribe.has(data.filter)) {\n                    throw new Error('AdapterFilters error: Filter added already has an unsubscribe function registered.');\n                }\n                this.#mapUnsubscribe.set(data.filter, unsubscribe);\n                subscribeCount++;\n            }\n        }\n        // Filters with subscriber functionality are assumed to immediately invoke the `subscribe` callback. If the\n        // subscriber count is less than the amount of filters added then automatically trigger an index update manually.\n        if (subscribeCount < filters.length) {\n            this.#indexUpdate(true);\n        }\n    }\n    clear() {\n        this.#filtersData.filters.length = 0;\n        // Unsubscribe from all filters with subscription support.\n        for (const unsubscribe of this.#mapUnsubscribe.values()) {\n            unsubscribe();\n        }\n        this.#mapUnsubscribe.clear();\n        this.#indexUpdate();\n    }\n    remove(...filters) {\n        const length = this.#filtersData.filters.length;\n        if (length === 0) {\n            return;\n        }\n        for (const data of filters) {\n            // Handle the case that the filter may either be a function or a filter entry / object.\n            const actualFilter = typeof data === 'function' ? data : data !== null && typeof data === 'object' ?\n                data.filter : void 0;\n            if (!actualFilter) {\n                continue;\n            }\n            for (let cntr = this.#filtersData.filters.length; --cntr >= 0;) {\n                if (this.#filtersData.filters[cntr].filter === actualFilter) {\n                    this.#filtersData.filters.splice(cntr, 1);\n                    // Invoke any unsubscribe function for given filter then remove from tracking.\n                    let unsubscribe;\n                    if (typeof (unsubscribe = this.#mapUnsubscribe.get(actualFilter)) === 'function') {\n                        unsubscribe();\n                        this.#mapUnsubscribe.delete(actualFilter);\n                    }\n                }\n            }\n        }\n        // Update the index a filter was removed.\n        if (length !== this.#filtersData.filters.length) {\n            this.#indexUpdate(true);\n        }\n    }\n    removeBy(callback) {\n        const length = this.#filtersData.filters.length;\n        if (length === 0) {\n            return;\n        }\n        if (typeof callback !== 'function') {\n            throw new TypeError(`AdapterFilters error: 'callback' is not a function.`);\n        }\n        this.#filtersData.filters = this.#filtersData.filters.filter((data) => {\n            const remove = callback.call(callback, { ...data });\n            if (remove) {\n                let unsubscribe;\n                if (typeof (unsubscribe = this.#mapUnsubscribe.get(data.filter)) === 'function') {\n                    unsubscribe();\n                    this.#mapUnsubscribe.delete(data.filter);\n                }\n            }\n            // Reverse remove boolean to properly filter / remove this filter.\n            return !remove;\n        });\n        if (length !== this.#filtersData.filters.length) {\n            this.#indexUpdate(true);\n        }\n    }\n    removeById(...ids) {\n        const length = this.#filtersData.filters.length;\n        if (length === 0) {\n            return;\n        }\n        this.#filtersData.filters = this.#filtersData.filters.filter((data) => {\n            let remove = 0;\n            for (const id of ids) {\n                remove |= (data.id === id ? 1 : 0);\n            }\n            // If not keeping invoke any unsubscribe function for given filter then remove from tracking.\n            if (!!remove) {\n                let unsubscribe;\n                if (typeof (unsubscribe = this.#mapUnsubscribe.get(data.filter)) === 'function') {\n                    unsubscribe();\n                    this.#mapUnsubscribe.delete(data.filter);\n                }\n            }\n            return !remove; // Swap here to actually remove the item via array filter method.\n        });\n        if (length !== this.#filtersData.filters.length) {\n            this.#indexUpdate(true);\n        }\n    }\n}\n\n/**\n * Provides construction and management of indexed data when there are parent indexes or filter / sort functions\n * applied.\n */\nclass AdapterIndexer {\n    derivedAdapter;\n    filtersData;\n    hostData;\n    hostUpdate;\n    indexData;\n    sortData;\n    sortFn;\n    destroyed = false;\n    /**\n     * @param hostData - Hosted data structure.\n     *\n     * @param hostUpdate - Host update function invoked on index updates.\n     *\n     * @param [parentIndexer] - Any associated parent index API.\n     *\n     * @returns Indexer adapter instance.\n     */\n    constructor(hostData, hostUpdate, parentIndexer) {\n        this.hostData = hostData;\n        this.hostUpdate = hostUpdate;\n        this.indexData = { index: null, hash: null, reversed: false, parent: parentIndexer };\n    }\n    /**\n     * @returns Returns whether the index is active.\n     */\n    get active() {\n        return this.filtersData.filters.length > 0 || this.sortData.compareFn !== null ||\n            this.indexData.parent?.active === true;\n    }\n    /**\n     * @returns Returns length of reduced index.\n     */\n    get length() {\n        return this.indexData.index ? this.indexData.index.length : 0;\n    }\n    // -------------------------------------------------------------------------------------------------------------------\n    /**\n     * Calculates a new hash value for the new index array if any. If the new index array is null then the hash value\n     * is set to null. Set calculated new hash value to the index adapter hash value.\n     *\n     * After hash generation compare old and new hash values and perform an update if they are different. If they are\n     * equal check for array equality between the old and new index array and perform an update if they are not equal.\n     *\n     * @param oldIndex - Old index array.\n     *\n     * @param oldHash - Old index hash value.\n     *\n     * @param [force=false] - When true forces an update to subscribers.\n     */\n    calcHashUpdate(oldIndex, oldHash, force = false) {\n        // Use force if a boolean otherwise default to false.\n        const actualForce = typeof force === 'boolean' ? force : /* c8 ignore next */ false;\n        let newHash = null;\n        const newIndex = this.indexData.index;\n        if (newIndex) {\n            for (let cntr = newIndex.length; --cntr >= 0;) {\n                newHash ^= DynReducerUtils.hashUnknown(newIndex[cntr]) + 0x9e3779b9 + (newHash << 6) + (newHash >> 2);\n            }\n        }\n        this.indexData.hash = newHash;\n        if (actualForce || (oldHash === newHash ? !DynReducerUtils.arrayEquals(oldIndex, newIndex) : true)) {\n            this.hostUpdate();\n        }\n    }\n    /**\n     * Destroys all resources.\n     */\n    destroy() {\n        if (this.destroyed) {\n            return;\n        }\n        this.hostData = null;\n        this.indexData.index = null;\n        this.indexData.hash = null;\n        this.indexData.reversed = false;\n        this.indexData.parent = null;\n        this.destroyed = true;\n    }\n    /**\n     * Store associated filter and sort data that are constructed after the indexer.\n     *\n     * @param filtersData - Associated AdapterFilters instance.\n     *\n     * @param sortData - Associated AdapterSort instance.\n     *\n     * @param derivedAdapter - Associated AdapterDerived instance.\n     */\n    initAdapters(filtersData, sortData, derivedAdapter) {\n        this.filtersData = filtersData;\n        this.sortData = sortData;\n        this.derivedAdapter = derivedAdapter;\n        this.sortFn = this.createSortFn();\n    }\n}\n\nclass AdapterSort {\n    #sortData;\n    #indexUpdate;\n    #unsubscribe;\n    constructor(indexUpdate, sortData) {\n        this.#indexUpdate = indexUpdate;\n        this.#sortData = sortData;\n        Object.freeze(this);\n    }\n    clear() {\n        const oldCompareFn = this.#sortData.compareFn;\n        this.#sortData.compareFn = null;\n        if (typeof this.#unsubscribe === 'function') {\n            this.#unsubscribe();\n            this.#unsubscribe = void 0;\n        }\n        // Only update index if an old compare function is set.\n        if (typeof oldCompareFn === 'function') {\n            this.#indexUpdate(true);\n        }\n    }\n    set(sort) {\n        if (typeof this.#unsubscribe === 'function') {\n            this.#unsubscribe();\n            this.#unsubscribe = void 0;\n        }\n        let compareFn;\n        let subscribeFn;\n        switch (typeof sort) {\n            case 'function':\n                compareFn = sort;\n                subscribeFn = sort.subscribe;\n                break;\n            case 'object':\n                // Early out if sort is null / noop.\n                if (sort === null) {\n                    break;\n                }\n                if (typeof sort.compare !== 'function') {\n                    throw new TypeError(`AdapterSort error: 'compare' attribute is not a function.`);\n                }\n                compareFn = sort.compare;\n                subscribeFn = sort.compare.subscribe ?? sort.subscribe;\n                break;\n        }\n        if (typeof compareFn === 'function') {\n            this.#sortData.compareFn = compareFn;\n        }\n        else {\n            const oldCompareFn = this.#sortData.compareFn;\n            this.#sortData.compareFn = null;\n            // Update index if the old compare function exists.\n            if (typeof oldCompareFn === 'function') {\n                this.#indexUpdate();\n            }\n            return;\n        }\n        if (typeof subscribeFn === 'function') {\n            this.#unsubscribe = subscribeFn(this.#indexUpdate);\n            // Ensure that unsubscribe is a function.\n            if (typeof this.#unsubscribe !== 'function') {\n                throw new Error(`AdapterSort error: sort has 'subscribe' function, but no 'unsubscribe' function is returned.`);\n            }\n        }\n        else {\n            // A sort function with subscriber functionality are assumed to immediately invoke the `subscribe` callback.\n            // Only manually update the index if there is no subscriber functionality.\n            this.#indexUpdate(true);\n        }\n    }\n}\n\nclass IndexerAPI {\n    #indexData;\n    /**\n     * Provides a getter to determine if the index is active.\n     */\n    active;\n    /**\n     * Provides length of reduced / indexed elements.\n     */\n    length;\n    /**\n     * Manually invoke an update of the index.\n     *\n     * @param force - Force update to any subscribers.\n     */\n    update;\n    constructor(adapterIndexer) {\n        this.#indexData = adapterIndexer.indexData;\n        this.update = adapterIndexer.update.bind(adapterIndexer);\n        // Defines getters on the public API to get the index hash, active state, and index length.\n        Object.defineProperties(this, {\n            active: { get: () => adapterIndexer.active },\n            length: { get: () => adapterIndexer.length }\n        });\n        Object.freeze(this);\n    }\n    get hash() {\n        return this.#indexData.hash;\n    }\n    *[Symbol.iterator]() {\n        const indexData = this.#indexData;\n        if (!indexData.index) {\n            return;\n        }\n        const reversed = indexData.reversed;\n        const length = indexData.index.length;\n        if (reversed) {\n            for (let cntr = length; --cntr >= 0;) {\n                yield indexData.index[cntr];\n            }\n        }\n        else {\n            for (let cntr = 0; cntr < length; cntr++) {\n                yield indexData.index[cntr];\n            }\n        }\n    }\n}\n\n/**\n */\nclass ArrayIndexer extends AdapterIndexer {\n    /**\n     * @inheritDoc\n     */\n    createSortFn() {\n        return (a, b) => {\n            const data = this.hostData?.[0];\n            const dataA = data?.[a];\n            const dataB = data?.[b];\n            /* c8 ignore next */\n            return dataA && dataB ? this.sortData.compareFn(dataA, dataB) : 0;\n        };\n    }\n    /**\n     * Provides the custom filter / reduce step that is ~25-40% faster than implementing with `Array.reduce`.\n     *\n     * Note: Other loop unrolling techniques like Duff's Device gave a slight faster lower bound on large data sets,\n     * but the maintenance factor is not worth the extra complication.\n     *\n     * @returns New filtered index array.\n     */\n    reduceImpl() {\n        const data = [];\n        const array = this.hostData?.[0];\n        if (!array) {\n            return data;\n        }\n        const filters = this.filtersData.filters;\n        let include = true;\n        const parentIndex = this.indexData.parent;\n        // Source index data is coming from an active parent index.\n        if (DynReducerUtils.isIterable(parentIndex) && parentIndex.active) {\n            for (const adjustedIndex of parentIndex) {\n                const value = array[adjustedIndex];\n                include = true;\n                for (let filCntr = 0, filLength = filters.length; filCntr < filLength; filCntr++) {\n                    if (!filters[filCntr].filter(value)) {\n                        include = false;\n                        break;\n                    }\n                }\n                if (include) {\n                    data.push(adjustedIndex);\n                }\n            }\n        }\n        else {\n            for (let cntr = 0, length = array.length; cntr < length; cntr++) {\n                include = true;\n                for (let filCntr = 0, filLength = filters.length; filCntr < filLength; filCntr++) {\n                    if (!filters[filCntr].filter(array[cntr])) {\n                        include = false;\n                        break;\n                    }\n                }\n                if (include) {\n                    data.push(cntr);\n                }\n            }\n        }\n        return data;\n    }\n    /**\n     * Update the reducer indexes. If there are changes subscribers are notified. If data order is changed externally\n     * pass in true to force an update to subscribers.\n     *\n     * @param [force=false] - When true forces an update to subscribers.\n     */\n    update(force = false) {\n        if (this.destroyed) {\n            return;\n        }\n        const oldIndex = this.indexData.index;\n        const oldHash = this.indexData.hash;\n        const array = this.hostData?.[0];\n        const parentIndex = this.indexData.parent;\n        // Clear index if there are no filters and no sort function or the index length doesn't match the item length.\n        if ((this.filtersData.filters.length === 0 && !this.sortData.compareFn) ||\n            (this.indexData.index && array?.length !== this.indexData.index.length)) {\n            this.indexData.index = null;\n        }\n        // If there are filters build new index.\n        if (this.filtersData.filters.length > 0) {\n            this.indexData.index = this.reduceImpl();\n        }\n        // If the index isn't built yet and there is an active parent index then create it from the parent.\n        if (!this.indexData.index && parentIndex?.active) {\n            this.indexData.index = [...parentIndex];\n        }\n        if (this.sortData.compareFn && Array.isArray(array)) {\n            // If there is no index then create one with keys matching host item length.\n            if (!this.indexData.index) {\n                this.indexData.index = [...Array(array.length).keys()];\n            }\n            this.indexData.index.sort(this.sortFn);\n        }\n        this.calcHashUpdate(oldIndex, oldHash, force);\n        // Update all derived reducers.\n        this.derivedAdapter?.update(force);\n    }\n}\n\n/**\n * Provides a public API for managing derived reducers.\n */\nclass DerivedListAPI {\n    clear;\n    create;\n    delete;\n    destroy;\n    get;\n    constructor(adapterDerived) {\n        this.clear = adapterDerived.clear.bind(adapterDerived);\n        this.create = adapterDerived.create.bind(adapterDerived);\n        this.delete = adapterDerived.delete.bind(adapterDerived);\n        this.destroy = adapterDerived.destroy.bind(adapterDerived);\n        this.get = adapterDerived.get.bind(adapterDerived);\n        Object.freeze(this);\n    }\n}\n\n/**\n * Provides the base implementation derived reducer for arrays / DynArrayReducer.\n *\n * Note: That you should never directly create an instance of a derived reducer, but instead use the\n * {@link DynArrayReducerDerived.initialize} function to set up any initial state in a custom derived reducer.\n *\n * @typeParam T `unknown` - Type of data. Defaults to `unknown` to enforce type safety when no type is specified.\n */\nclass DynArrayReducerDerived {\n    #array;\n    #derived;\n    #derivedPublicAPI;\n    #filters;\n    #filtersData = { filters: [] };\n    #index;\n    #indexPublicAPI;\n    #sort;\n    #sortData = { compareFn: null };\n    #subscribers = [];\n    #destroyed = false;\n    /**\n     * @param array - Data host array.\n     *\n     * @param parentIndex - Parent indexer.\n     *\n     * @param options - Any filters and sort functions to apply.\n     *\n     * @typeParam T `unknown` - Type of data.\n     *\n     * @private\n     */\n    constructor(array, parentIndex, options) {\n        this.#array = array;\n        this.#index = new ArrayIndexer(this.#array, this.#updateSubscribers.bind(this), parentIndex);\n        this.#indexPublicAPI = new IndexerAPI(this.#index);\n        this.#filters = new AdapterFilters(this.#indexPublicAPI.update, this.#filtersData);\n        this.#sort = new AdapterSort(this.#indexPublicAPI.update, this.#sortData);\n        this.#derived = new AdapterDerived(this.#array, this.#indexPublicAPI, DynArrayReducerDerived);\n        this.#derivedPublicAPI = new DerivedListAPI(this.#derived);\n        this.#index.initAdapters(this.#filtersData, this.#sortData, this.#derived);\n        const { filters, sort } = options;\n        if (filters !== void 0) {\n            if (!DynReducerUtils.isIterable(filters)) {\n                throw new TypeError(`DerivedArrayReducer error (DataDerivedOptions): 'filters' attribute is not iterable.`);\n            }\n            this.filters.add(...filters);\n        }\n        if (sort !== void 0) {\n            if (typeof sort !== 'function' && (typeof sort !== 'object' || sort === null)) {\n                throw new TypeError(`DerivedArrayReducer error (DataDerivedOptions): 'sort' attribute is not a function or object.`);\n            }\n            this.sort.set(sort);\n        }\n    }\n    /**\n     * @returns Derived public API.\n     */\n    get derived() { return this.#derivedPublicAPI; }\n    /**\n     * @returns The filters adapter.\n     */\n    get filters() { return this.#filters; }\n    /**\n     * @returns Returns the Indexer public API; is also iterable.\n     */\n    get index() { return this.#indexPublicAPI; }\n    /**\n     * @returns Returns whether this derived reducer is destroyed.\n     */\n    get destroyed() { return this.#destroyed; }\n    /**\n     * @returns Returns the main data items or indexed items length.\n     */\n    get length() {\n        const array = this.#array?.[0];\n        return this.#index.active ? this.index.length :\n            array ? array.length : 0;\n    }\n    /**\n     * @returns Returns current reversed state.\n     */\n    get reversed() { return this.#index.indexData.reversed; }\n    /**\n     * @returns The sort adapter.\n     */\n    get sort() { return this.#sort; }\n    /**\n     * Sets reversed state and notifies subscribers.\n     *\n     * @param reversed - New reversed state.\n     */\n    set reversed(reversed) {\n        if (typeof reversed !== 'boolean') {\n            throw new TypeError(`DerivedArrayReducer.reversed error: 'reversed' is not a boolean.`);\n        }\n        this.#index.indexData.reversed = reversed;\n        // Recalculate index and force an update to any subscribers.\n        this.index.update(true);\n    }\n    /**\n     * Removes all derived reducers, subscriptions, and cleans up all resources.\n     */\n    destroy() {\n        this.#destroyed = true;\n        // Remove any external data reference and perform a final update.\n        this.#array = null;\n        this.index.update(true);\n        // Remove all subscriptions.\n        this.#subscribers.length = 0;\n        this.#derived.destroy();\n        this.#index.destroy();\n        this.#filters.clear();\n        this.#sort.clear();\n    }\n    /**\n     * Provides a callback for custom derived reducers to initialize any data / custom configuration. This allows\n     * child classes to avoid implementing the constructor.\n     *\n     * @param [optionsRest] - Any additional custom options passed beyond {@link DynReducer.Options.Common}.\n     *\n     * @protected\n     */\n    initialize(optionsRest) { }\n    /**\n     * Provides an iterator for data stored in DynArrayReducerDerived.\n     *\n     * @returns Iterator for data stored in DynArrayReducerDerived.\n     */\n    *[Symbol.iterator]() {\n        const array = this.#array?.[0] ?? null;\n        if (this.#destroyed || array === null || array?.length === 0) {\n            return;\n        }\n        if (this.#index.active) {\n            for (const entry of this.index) {\n                yield array[entry];\n            }\n        }\n        else {\n            if (this.reversed) {\n                for (let cntr = array.length; --cntr >= 0;) {\n                    yield array[cntr];\n                }\n            }\n            else {\n                for (let cntr = 0; cntr < array.length; cntr++) {\n                    yield array[cntr];\n                }\n            }\n        }\n    }\n    // -------------------------------------------------------------------------------------------------------------------\n    /**\n     * Subscribe to this DerivedArrayReducer.\n     *\n     * @param handler - Callback function that is invoked on update / changes. Receives `this` reference.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            handler(this); // call handler with current value\n        }\n        // Return unsubscribe function.\n        return () => {\n            const existingIdx = this.#subscribers.findIndex((entry) => entry === handler);\n            if (existingIdx !== -1) {\n                this.#subscribers.splice(existingIdx, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers on changes.\n     */\n    #updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this);\n        }\n    }\n}\n\n/**\n * Provides a managed array with non-destructive reducing / filtering / sorting capabilities with subscription /\n * Svelte store support.\n *\n * _Note:_ In constructing a DynArrayReducer instance that arrays are treated as a special case. When an array is passed\n * in as `data` in the constructor it will be used as the host array and not copied. All non-array iterables otherwise\n * create a new array / copy.\n *\n * _Note:_\n * - The default type `unknown` ensures stricter type checking, preventing unintended operations on the data.\n * - If the type of data is known, explicitly specify the generic type to improve clarity and maintainability:\n *\n * @example\n * ```ts\n * // Using external array data as reducer host data.\n * const data = ['a', 'b', 'c'];\n * const reducer = new DynArrayReducer<string>(data);\n *\n * // Add new data externally.\n * data.push('d');\n *\n * // Update the index.\n * reducer.index.update();\n * ```\n *\n * @example\n * ```ts\n * // Explicit type specification.\n * const reducer = new DynArrayReducer<string>(['a', 'b', 'c']);\n * ```\n *\n * @example\n * ```ts\n * // Using the default type.\n * const reducer = new DynArrayReducer(); // Defaults to DynArrayReducer<unknown>\n * ```\n *\n * @typeParam T `unknown` - Type of data. Defaults to `unknown` to enforce type safety when no type is specified.\n */\nclass DynArrayReducer {\n    #array = [null];\n    #derived;\n    #derivedPublicAPI;\n    #filters;\n    #filtersData = { filters: [] };\n    #index;\n    #indexPublicAPI;\n    #sort;\n    #sortData = { compareFn: null };\n    #subscribers = [];\n    #destroyed = false;\n    /**\n     * Initializes DynArrayReducer. Any iterable is supported for initial data. Take note that if `data` is an array it\n     * will be used as the host array and not copied. All non-array iterables otherwise create a new array / copy.\n     *\n     * @param [data] - Data iterable to store if array or copy otherwise.\n     *\n     * @typeParam T `unknown` - Type of data.\n     */\n    constructor(data) {\n        let dataIterable;\n        let filters;\n        let sort;\n        if (data === null) {\n            throw new TypeError(`DynArrayReducer error: 'data' is not iterable.`);\n        }\n        if (data !== void 0 && typeof data !== 'object' && !DynReducerUtils.isIterable(data)) {\n            throw new TypeError(`DynArrayReducer error: 'data' is not iterable.`);\n        }\n        if (data !== void 0 && Symbol.iterator in data) {\n            dataIterable = data;\n        }\n        else if (data !== void 0 && ('data' in data || 'filters' in data || 'sort' in data)) {\n            if (data.data !== void 0 && !DynReducerUtils.isIterable(data.data)) {\n                throw new TypeError(`DynArrayReducer error (DataDynArray): 'data' attribute is not iterable.`);\n            }\n            dataIterable = data.data;\n            if (data.filters !== void 0) {\n                if (DynReducerUtils.isIterable(data.filters)) {\n                    filters = data.filters;\n                }\n                else {\n                    throw new TypeError(`DynArrayReducer error (DataDynArray): 'filters' attribute is not iterable.`);\n                }\n            }\n            if (data.sort !== void 0) {\n                if (typeof data.sort === 'function') {\n                    sort = data.sort;\n                }\n                else if (typeof data.sort === 'object' && data.sort !== null) {\n                    sort = data.sort;\n                }\n                else {\n                    throw new TypeError(`DynArrayReducer error (DataDynArray): 'sort' attribute is not a function or object.`);\n                }\n            }\n        }\n        // In the case of the main data being an array directly use the array otherwise create a copy.\n        if (dataIterable) {\n            this.#array[0] = Array.isArray(dataIterable) ? dataIterable : [...dataIterable];\n        }\n        this.#index = new ArrayIndexer(this.#array, this.#updateSubscribers.bind(this));\n        this.#indexPublicAPI = new IndexerAPI(this.#index);\n        this.#filters = new AdapterFilters(this.#indexPublicAPI.update, this.#filtersData);\n        this.#sort = new AdapterSort(this.#indexPublicAPI.update, this.#sortData);\n        this.#derived = new AdapterDerived(this.#array, this.#indexPublicAPI, DynArrayReducerDerived);\n        this.#derivedPublicAPI = new DerivedListAPI(this.#derived);\n        this.#index.initAdapters(this.#filtersData, this.#sortData, this.#derived);\n        // Add any filters and sort function defined by DataDynArray.\n        if (filters) {\n            this.filters.add(...filters);\n        }\n        if (sort) {\n            this.sort.set(sort);\n        }\n    }\n    /**\n     * Returns the internal data of this instance. Be careful!\n     *\n     * Note: if an array is set as initial data then that array is used as the internal data. If any changes are\n     * performed to the data externally do invoke `update` via {@link DynArrayReducer.index} with `true` to recalculate\n     * the index and notify all subscribers.\n     *\n     * @returns The internal data.\n     */\n    get data() { return this.#array[0]; }\n    /**\n     * @returns Derived public API.\n     */\n    get derived() { return this.#derivedPublicAPI; }\n    /**\n     * @returns The filters adapter.\n     */\n    get filters() { return this.#filters; }\n    /**\n     * @returns Returns the Indexer public API; is also iterable.\n     */\n    get index() { return this.#indexPublicAPI; }\n    /**\n     * @returns Returns whether this instance is destroyed.\n     */\n    get destroyed() { return this.#destroyed; }\n    /**\n     * @returns Returns the main data items or indexed items length.\n     */\n    get length() {\n        const array = this.#array[0];\n        return this.#index.active ? this.#indexPublicAPI.length :\n            array ? array.length : 0;\n    }\n    /**\n     * @returns Returns current reversed state.\n     */\n    get reversed() { return this.#index.indexData.reversed; }\n    /**\n     * @returns The sort adapter.\n     */\n    get sort() { return this.#sort; }\n    /**\n     * Sets reversed state and notifies subscribers.\n     *\n     * @param reversed - New reversed state.\n     */\n    set reversed(reversed) {\n        if (typeof reversed !== 'boolean') {\n            throw new TypeError(`DynArrayReducer.reversed error: 'reversed' is not a boolean.`);\n        }\n        this.#index.indexData.reversed = reversed;\n        // Recalculate index and force an update to any subscribers.\n        this.index.update(true);\n    }\n    /**\n     * Removes all derived reducers, subscriptions, and cleans up all resources.\n     */\n    destroy() {\n        if (this.#destroyed) {\n            return;\n        }\n        this.#destroyed = true;\n        this.#derived.destroy();\n        // Set the backing data to null and provide a final update.\n        this.#array = [null];\n        this.index.update(true);\n        // Remove all subscriptions.\n        this.#subscribers.length = 0;\n        this.#filters.clear();\n        this.#sort.clear();\n        this.#index.destroy();\n    }\n    /**\n     * Provides a callback for custom reducers to initialize any data / custom configuration. Depending on the consumer\n     * of `dynamic-reducer` this may be utilized allowing child classes to avoid implementing the constructor.\n     *\n     * @param [optionsRest] - Any additional custom options passed beyond {@link DynReducer.Options.Common}.\n     *\n     * @protected\n     */\n    /* c8 ignore next */\n    initialize(optionsRest) { }\n    /**\n     * Removes internal data and pushes new data. This does not destroy any initial array set to internal data unless\n     * `replace` is set to true.\n     *\n     * @param data - New data to set to internal data.\n     *\n     * @param [replace=false] - New data to set to internal data.\n     */\n    setData(data, replace = false) {\n        if (data !== null && !DynReducerUtils.isIterable(data)) {\n            throw new TypeError(`DynArrayReducer.setData error: 'data' is not iterable.`);\n        }\n        if (typeof replace !== 'boolean') {\n            throw new TypeError(`DynArrayReducer.setData error: 'replace' is not a boolean.`);\n        }\n        const array = this.#array[0];\n        // If the array isn't defined or 'replace' is true then replace internal data with new array or create an array\n        // from an iterable.\n        if (!Array.isArray(array) || replace) {\n            if (data) {\n                this.#array[0] = Array.isArray(data) ? data : [...data];\n            }\n        }\n        else {\n            if (data) {\n                // Remove all entries in internal data. This will not replace any initially set array.\n                array.length = 0;\n                // Add all new data.\n                array.push(...data);\n            }\n            else {\n                this.#array[0] = null;\n            }\n        }\n        // Force clear the index and always rebuild.\n        this.#index.indexData.index = null;\n        // Recalculate index and force an update to any subscribers.\n        this.index.update(true);\n    }\n    /**\n     * Add a subscriber to this DynArrayReducer instance.\n     *\n     * @param handler - Callback function that is invoked on update / changes. Receives `this` reference.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            handler(this); // call handler with current value\n        }\n        // Return unsubscribe function.\n        return () => {\n            const existingIdx = this.#subscribers.findIndex((entry) => entry === handler);\n            if (existingIdx !== -1) {\n                this.#subscribers.splice(existingIdx, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers on changes.\n     */\n    #updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this);\n        }\n    }\n    /**\n     * Provides an iterator for data stored in DynArrayReducer.\n     *\n     * @returns Iterator for data stored in DynArrayReducer.\n     */\n    *[Symbol.iterator]() {\n        const array = this.#array[0];\n        if (this.#destroyed || array === null || array?.length === 0) {\n            return;\n        }\n        if (this.#index.active) {\n            for (const entry of this.index) {\n                yield array[entry];\n            }\n        }\n        else {\n            if (this.reversed) {\n                for (let cntr = array.length; --cntr >= 0;) {\n                    yield array[cntr];\n                }\n            }\n            else {\n                for (let cntr = 0; cntr < array.length; cntr++) {\n                    yield array[cntr];\n                }\n            }\n        }\n    }\n}\n\n/**\n */\nclass MapIndexer extends AdapterIndexer {\n    /**\n     * @inheritDoc\n     */\n    createSortFn() {\n        return (a, b) => {\n            const data = this.hostData?.[0];\n            const dataA = data?.get(a);\n            const dataB = data?.get(b);\n            /* c8 ignore next */\n            return dataA && dataB ? this.sortData.compareFn(dataA, dataB) : 0;\n        };\n    }\n    /**\n     * Provides the custom filter / reduce step that is ~25-40% faster than implementing with `Array.reduce`.\n     *\n     * Note: Other loop unrolling techniques like Duff's Device gave a slight faster lower bound on large data sets,\n     * but the maintenance factor is not worth the extra complication.\n     *\n     * @returns New filtered index array.\n     */\n    reduceImpl() {\n        const data = [];\n        const map = this.hostData?.[0];\n        if (!map) {\n            return data;\n        }\n        const filters = this.filtersData.filters;\n        let include = true;\n        const parentIndex = this.indexData.parent;\n        // Source index data is coming from an active parent index.\n        if (DynReducerUtils.isIterable(parentIndex) && parentIndex.active) {\n            for (const key of parentIndex) {\n                const value = map.get(key);\n                include = true;\n                /* c8 ignore next */\n                if (value === undefined) {\n                    continue;\n                }\n                for (let filCntr = 0, filLength = filters.length; filCntr < filLength; filCntr++) {\n                    if (!filters[filCntr].filter(value)) {\n                        include = false;\n                        break;\n                    }\n                }\n                if (include) {\n                    data.push(key);\n                }\n            }\n        }\n        else {\n            for (const key of map.keys()) {\n                include = true;\n                const value = map.get(key);\n                /* c8 ignore next */\n                if (value === void 0) {\n                    continue;\n                }\n                for (let filCntr = 0, filLength = filters.length; filCntr < filLength; filCntr++) {\n                    if (!filters[filCntr].filter(value)) {\n                        include = false;\n                        break;\n                    }\n                }\n                if (include) {\n                    data.push(key);\n                }\n            }\n        }\n        return data;\n    }\n    /**\n     * Update the reducer indexes. If there are changes subscribers are notified. If data order is changed externally\n     * pass in true to force an update to subscribers.\n     *\n     * @param [force=false] - When true forces an update to subscribers.\n     */\n    update(force = false) {\n        if (this.destroyed) {\n            return;\n        }\n        const oldIndex = this.indexData.index;\n        const oldHash = this.indexData.hash;\n        const map = this.hostData?.[0];\n        const parentIndex = this.indexData.parent;\n        // Clear index if there are no filters and no sort function or the index length doesn't match the item length.\n        if ((this.filtersData.filters.length === 0 && !this.sortData.compareFn) ||\n            (this.indexData.index && map?.size !== this.indexData.index.length)) {\n            this.indexData.index = null;\n        }\n        // If there are filters build new index.\n        if (this.filtersData.filters.length > 0) {\n            this.indexData.index = this.reduceImpl();\n        }\n        // If the index isn't built yet and there is an active parent index then create it from the parent.\n        if (!this.indexData.index && parentIndex?.active) {\n            this.indexData.index = [...parentIndex];\n        }\n        if (this.sortData.compareFn && map instanceof Map) {\n            // If there is no index then create one with keys matching host item length.\n            if (!this.indexData.index) {\n                this.indexData.index = [...map.keys()];\n            }\n            this.indexData.index.sort(this.sortFn);\n        }\n        this.calcHashUpdate(oldIndex, oldHash, force);\n        // Update all derived reducers.\n        this.derivedAdapter?.update(force);\n    }\n}\n\n/**\n * Provides a public API for managing derived reducers.\n */\nclass DerivedMapAPI {\n    clear;\n    create;\n    delete;\n    destroy;\n    get;\n    constructor(adapterDerived) {\n        this.clear = adapterDerived.clear.bind(adapterDerived);\n        this.create = adapterDerived.create.bind(adapterDerived);\n        this.delete = adapterDerived.delete.bind(adapterDerived);\n        this.destroy = adapterDerived.destroy.bind(adapterDerived);\n        this.get = adapterDerived.get.bind(adapterDerived);\n        Object.freeze(this);\n    }\n}\n\n/**\n * Provides the base implementation derived reducer for Maps / DynMapReducer.\n *\n * Note: That you should never directly create an instance of a derived reducer, but instead use the\n * {@link DynMapReducerDerived.initialize} function to set up any initial state in a custom derived reducer.\n *\n * @typeParam K `unknown` - Key type. Defaults to `unknown` to enforce type safety when no type is specified.\n *\n * @typeParam T `unknown` - Type of data. Defaults to `unknown` to enforce type safety when no type is specified.\n */\nclass DynMapReducerDerived {\n    #map;\n    #derived;\n    #derivedPublicAPI;\n    #filters;\n    #filtersData = { filters: [] };\n    #index;\n    #indexPublicAPI;\n    #sort;\n    #sortData = { compareFn: null };\n    #subscribers = [];\n    #destroyed = false;\n    /**\n     * @param map - Data host Map.\n     *\n     * @param parentIndex - Parent indexer.\n     *\n     * @param options - Any filters and sort functions to apply.\n     *\n     * @typeParam K `unknown` - Key type.\n     *\n     * @typeParam T `unknown` - Type of data.\n     *\n     * @private\n     */\n    constructor(map, parentIndex, options) {\n        this.#map = map;\n        this.#index = new MapIndexer(this.#map, this.#updateSubscribers.bind(this), parentIndex);\n        this.#indexPublicAPI = new IndexerAPI(this.#index);\n        this.#filters = new AdapterFilters(this.#indexPublicAPI.update, this.#filtersData);\n        this.#sort = new AdapterSort(this.#indexPublicAPI.update, this.#sortData);\n        this.#derived = new AdapterDerived(this.#map, this.#indexPublicAPI, DynMapReducerDerived);\n        this.#derivedPublicAPI = new DerivedMapAPI(this.#derived);\n        this.#index.initAdapters(this.#filtersData, this.#sortData, this.#derived);\n        const { filters, sort } = options;\n        if (filters !== void 0) {\n            if (!DynReducerUtils.isIterable(filters)) {\n                throw new TypeError(`DerivedMapReducer error (DataDerivedOptions): 'filters' attribute is not iterable.`);\n            }\n            this.filters.add(...filters);\n        }\n        if (sort !== void 0) {\n            if (typeof sort !== 'function' && (typeof sort !== 'object' || sort === null)) {\n                throw new TypeError(`DerivedMapReducer error (DataDerivedOptions): 'sort' attribute is not a function or object.`);\n            }\n            this.sort.set(sort);\n        }\n    }\n    /**\n     * @returns Derived public API.\n     */\n    get derived() { return this.#derivedPublicAPI; }\n    /**\n     * @returns The filters adapter.\n     */\n    get filters() { return this.#filters; }\n    /**\n     * @returns Returns the Indexer public API; is also iterable.\n     */\n    get index() { return this.#indexPublicAPI; }\n    /**\n     * @returns Returns whether this derived reducer is destroyed.\n     */\n    get destroyed() { return this.#destroyed; }\n    /**\n     * @returns Returns the main data items or indexed items length.\n     */\n    get length() {\n        const map = this.#map?.[0];\n        return this.#index.active ? this.index.length :\n            map ? map.size : 0;\n    }\n    /**\n     * @returns Returns current reversed state.\n     */\n    get reversed() { return this.#index.indexData.reversed; }\n    /**\n     * @returns Returns the sort adapter.\n     */\n    get sort() { return this.#sort; }\n    /**\n     * Sets reversed state and notifies subscribers.\n     *\n     * @param reversed - New reversed state.\n     */\n    set reversed(reversed) {\n        if (typeof reversed !== 'boolean') {\n            throw new TypeError(`DerivedMapReducer.reversed error: 'reversed' is not a boolean.`);\n        }\n        this.#index.indexData.reversed = reversed;\n        // Recalculate index and force an update to any subscribers.\n        this.index.update(true);\n    }\n    /**\n     * Removes all derived reducers, subscriptions, and cleans up all resources.\n     */\n    destroy() {\n        this.#destroyed = true;\n        // Remove any external data reference and perform a final update.\n        this.#map = [null];\n        this.#index.update(true);\n        // Remove all subscriptions.\n        this.#subscribers.length = 0;\n        this.#derived.destroy();\n        this.#index.destroy();\n        this.#filters.clear();\n        this.#sort.clear();\n    }\n    /**\n     * Provides a callback for custom derived reducers to initialize any data / custom configuration. This allows\n     * child classes to avoid implementing the constructor.\n     *\n     * @param [optionsRest] - Any additional custom options passed beyond {@link DynDataOptions}.\n     *\n     * @protected\n     */\n    initialize(optionsRest) { }\n    /**\n     * Provides an iterator for data stored in DynMapReducerDerived.\n     *\n     * @returns Iterator for data stored in DynMapReducerDerived.\n     */\n    *[Symbol.iterator]() {\n        const map = this.#map?.[0] ?? null;\n        if (this.#destroyed || map === null || map?.size === 0) {\n            return;\n        }\n        if (this.#index.active) {\n            for (const key of this.index) {\n                yield map.get(key);\n            }\n        }\n        else {\n            if (this.reversed) {\n                // TODO: Not efficient due to creating temporary values array.\n                const values = [...map.values()];\n                for (let cntr = values.length; --cntr >= 0;) {\n                    yield values[cntr];\n                }\n            }\n            else {\n                for (const value of map.values()) {\n                    yield value;\n                }\n            }\n        }\n    }\n    // -------------------------------------------------------------------------------------------------------------------\n    /**\n     * Subscribe to this DerivedMapReducer.\n     *\n     * @param handler - Callback function that is invoked on update / changes. Receives `this` reference.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            handler(this); // call handler with current value\n        }\n        // Return unsubscribe function.\n        return () => {\n            const existingIdx = this.#subscribers.findIndex((entry) => entry === handler);\n            if (existingIdx !== -1) {\n                this.#subscribers.splice(existingIdx, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers on changes.\n     */\n    #updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this);\n        }\n    }\n}\n\n/**\n * Provides a managed {@link Map} with non-destructive reducing / filtering / sorting capabilities with subscription /\n * Svelte store support allowing for a {@link Map} to be treated like an iterable list.\n *\n * _Note:_\n * - The default type `unknown` ensures stricter type checking, preventing unintended operations on the data.\n * - If the type of data is known, explicitly specify the generic type to improve clarity and maintainability:\n *\n * @example\n * ```ts\n * const mapReducer = new DynMapReducer<number, string>(\n *     new Map([\n *         [1, 'banana'],\n *         [2, 'apple'],\n *         [3, 'cherry'],\n *     ])\n * );\n *\n * console.log([...mapReducer]); // Output: ['banana', 'apple', 'cherry']\n *\n * // Sort values alphabetically.\n * mapReducer.sort.set((a, b) => a.localeCompare(b));\n *\n * console.log([...mapReducer]); // Output: ['apple', 'banana', 'cherry']\n * ```\n *\n * @typeParam K `unknown` - Key type. Defaults to `unknown` to enforce type safety when no type is specified.\n *\n * @typeParam T `unknown` - Type of data. Defaults to `unknown` to enforce type safety when no type is specified.\n */\nclass DynMapReducer {\n    #map = [null];\n    #derived;\n    #derivedPublicAPI;\n    #filters;\n    #filtersData = { filters: [] };\n    #index;\n    #indexPublicAPI;\n    #sort;\n    #sortData = { compareFn: null };\n    #subscribers = [];\n    #destroyed = false;\n    /**\n     * Initializes DynMapReducer. Any iterable is supported for initial data. Take note that if `data` is an array it\n     * will be used as the host array and not copied. All non-array iterables otherwise create a new array / copy.\n     *\n     * @param [data] - Data iterable to store if array or copy otherwise.\n     *\n     * @typeParam K `unknown` - Key type.\n     *\n     * @typeParam T `unknown` - Type of data.\n     */\n    constructor(data) {\n        let dataMap;\n        let filters;\n        let sort;\n        if (data === null) {\n            throw new TypeError(`DynMapReducer error: 'data' is not an object or Map.`);\n        }\n        if (data !== void 0 && typeof data !== 'object' && !(data instanceof Map)) {\n            throw new TypeError(`DynMapReducer error: 'data' is not an object or Map.`);\n        }\n        if (data !== void 0 && data instanceof Map) {\n            dataMap = data;\n        }\n        else if (data !== void 0 && ('data' in data || 'filters' in data || 'sort' in data)) {\n            if (data.data !== void 0 && !(data.data instanceof Map)) {\n                throw new TypeError(`DynMapReducer error (DataDynMap): 'data' attribute is not a Map.`);\n            }\n            if (data.data instanceof Map) {\n                dataMap = data.data;\n            }\n            if (data.filters !== void 0) {\n                if (DynReducerUtils.isIterable(data.filters)) {\n                    filters = data.filters;\n                }\n                else {\n                    throw new TypeError(`DynMapReducer error (DataDynMap): 'filters' attribute is not iterable.`);\n                }\n            }\n            if (data.sort !== void 0) {\n                if (typeof data.sort === 'function') {\n                    sort = data.sort;\n                }\n                else if (typeof data.sort === 'object' && data.sort !== null) {\n                    sort = data.sort;\n                }\n                else {\n                    throw new TypeError(`DynMapReducer error (DataDynMap): 'sort' attribute is not a function or object.`);\n                }\n            }\n        }\n        // In the case of the main data being an array directly use the array otherwise create a copy.\n        if (dataMap) {\n            this.#map[0] = dataMap;\n        }\n        this.#index = new MapIndexer(this.#map, this.#updateSubscribers.bind(this));\n        this.#indexPublicAPI = new IndexerAPI(this.#index);\n        this.#filters = new AdapterFilters(this.#indexPublicAPI.update, this.#filtersData);\n        this.#sort = new AdapterSort(this.#indexPublicAPI.update, this.#sortData);\n        this.#derived = new AdapterDerived(this.#map, this.#indexPublicAPI, DynMapReducerDerived);\n        this.#derivedPublicAPI = new DerivedMapAPI(this.#derived);\n        this.#index.initAdapters(this.#filtersData, this.#sortData, this.#derived);\n        // Add any filters and sort function defined by DataDynMap.\n        if (filters) {\n            this.filters.add(...filters);\n        }\n        if (sort) {\n            this.sort.set(sort);\n        }\n    }\n    /**\n     * Returns the internal data of this instance. Be careful!\n     *\n     * Note: When a map is set as data then that map is used as the internal data. If any changes are performed to the\n     * data externally do invoke `update` via {@link DynMapReducer.index} with `true` to recalculate the  index and\n     * notify all subscribers.\n     *\n     * @returns The internal data.\n     */\n    get data() { return this.#map[0]; }\n    /**\n     * @returns Derived public API.\n     */\n    get derived() { return this.#derivedPublicAPI; }\n    /**\n     * @returns The filters adapter.\n     */\n    get filters() { return this.#filters; }\n    /**\n     * @returns Returns the Indexer public API; is also iterable.\n     */\n    get index() { return this.#indexPublicAPI; }\n    /**\n     * @returns Returns whether this instance is destroyed.\n     */\n    get destroyed() { return this.#destroyed; }\n    /**\n     * @returns Returns the main data items or indexed items length.\n     */\n    get length() {\n        const map = this.#map[0];\n        return this.#index.active ? this.#indexPublicAPI.length :\n            map ? map.size : 0;\n    }\n    /**\n     * @returns Returns current reversed state.\n     */\n    get reversed() { return this.#index.indexData.reversed; }\n    /**\n     * @returns The sort adapter.\n     */\n    get sort() { return this.#sort; }\n    /**\n     * Sets reversed state and notifies subscribers.\n     *\n     * @param reversed - New reversed state.\n     */\n    set reversed(reversed) {\n        if (typeof reversed !== 'boolean') {\n            throw new TypeError(`DynMapReducer.reversed error: 'reversed' is not a boolean.`);\n        }\n        this.#index.indexData.reversed = reversed;\n        // Recalculate index and force an update to any subscribers.\n        this.index.update(true);\n    }\n    /**\n     * Removes all derived reducers, subscriptions, and cleans up all resources.\n     */\n    destroy() {\n        if (this.#destroyed) {\n            return;\n        }\n        this.#destroyed = true;\n        this.#derived.destroy();\n        // Set the backing data to null and provide a final update.\n        this.#map = [null];\n        this.index.update(true);\n        // Remove all subscriptions.\n        this.#subscribers.length = 0;\n        this.#filters.clear();\n        this.#sort.clear();\n        this.#index.destroy();\n    }\n    /**\n     * Provides a callback for custom reducers to initialize any data / custom configuration. Depending on the consumer\n     * of `dynamic-reducer` this may be utilized allowing child classes to avoid implementing the constructor.\n     *\n     * @param [optionsRest] - Any additional custom options passed beyond {@link DynReducer.Options.Common}.\n     *\n     * @protected\n     */\n    /* c8 ignore next */\n    initialize(optionsRest) { }\n    /**\n     * Removes internal data and pushes new data. This does not destroy any initial array set to internal data unless\n     * `replace` is set to true.\n     *\n     * @param data - New data to set to internal data.\n     *\n     * @param [replace=false] - New data to set to internal data.\n     */\n    setData(data, replace = false) {\n        if (data !== null && !(data instanceof Map)) {\n            throw new TypeError(`DynMapReducer.setData error: 'data' is not iterable.`);\n        }\n        if (typeof replace !== 'boolean') {\n            throw new TypeError(`DynMapReducer.setData error: 'replace' is not a boolean.`);\n        }\n        const map = this.#map[0];\n        // If the array isn't defined or 'replace' is true then replace internal data with new array or create an array\n        // from an iterable.\n        if (!(map instanceof Map) || replace) {\n            this.#map[0] = data instanceof Map ? data : null;\n        }\n        else if (data instanceof Map && map instanceof Map) {\n            // Create a set of all current entry IDs.\n            const removeKeySet = new Set(map.keys());\n            for (const key of data.keys()) {\n                map.set(key, data.get(key));\n                if (removeKeySet.has(key)) {\n                    removeKeySet.delete(key);\n                }\n            }\n            // Remove entries that are no longer in data.\n            for (const key of removeKeySet) {\n                map.delete(key);\n            }\n        }\n        else if (data === null) {\n            this.#map[0] = null;\n        }\n        // Force clear the index and always rebuild.\n        this.#index.indexData.index = null;\n        // Recalculate index and force an update to any subscribers.\n        this.index.update(true);\n    }\n    /**\n     * Add a subscriber to this DynMapReducer instance.\n     *\n     * @param handler - Callback function that is invoked on update / changes. Receives `this` reference.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            handler(this); // call handler with current value\n        }\n        // Return unsubscribe function.\n        return () => {\n            const existingIdx = this.#subscribers.findIndex((entry) => entry === handler);\n            if (existingIdx !== -1) {\n                this.#subscribers.splice(existingIdx, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers on changes.\n     */\n    #updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this);\n        }\n    }\n    /**\n     * Provides an iterator for data stored in DynMapReducer.\n     *\n     * @returns Iterator for data stored in DynMapReducer.\n     */\n    *[Symbol.iterator]() {\n        const map = this.#map[0];\n        if (this.#destroyed || map === null || map?.size === 0) {\n            return;\n        }\n        if (this.#index.active) {\n            for (const key of this.index) {\n                yield map.get(key);\n            }\n        }\n        else {\n            if (this.reversed) {\n                // TODO: Not efficient due to creating temporary values array.\n                const values = [...map.values()];\n                for (let cntr = values.length; --cntr >= 0;) {\n                    yield values[cntr];\n                }\n            }\n            else {\n                for (const value of map.values()) {\n                    yield value;\n                }\n            }\n        }\n    }\n}\n\n/**\n * Creates a filter function to compare objects by a given accessor key against a regex test. The returned function\n * is also a writable Svelte store that builds a regex from the stores value.\n *\n * This filter function can be used w/ a dynamic reducer and bound as a store to input elements.\n *\n * @param accessors - Property key / accessors to lookup key to compare. To access deeper\n *        entries into the object format the accessor string with `.` between entries to walk.\n *\n * @param [opts] - Optional parameters.\n *\n * @param [opts.accessWarn=false] - When true warnings will be posted if accessor not retrieved.\n *\n * @param [opts.caseSensitive=false] - When true regex test is case-sensitive.\n *\n * @param [opts.store] - Use the provided minimal writable store to instead of creating a default `writable` store.\n *\n * @returns The query string filter.\n */\nfunction regexObjectQuery(accessors, { accessWarn = false, caseSensitive = false, store } = {}) {\n    let keyword = '';\n    let regex;\n    if (store !== void 0 && !isMinimalWritableStore(store)) {\n        throw new TypeError(`regexObjectQuery error: 'store' is not a minimal writable store.`);\n    }\n    const storeKeyword = store ? store : writable(keyword);\n    // If an existing store is provided then set initial values.\n    if (store) {\n        const current = get(store);\n        if (typeof current === 'string') {\n            keyword = Strings.normalize(current);\n            regex = new RegExp(Strings.escape(keyword), caseSensitive ? '' : 'i');\n        }\n        else {\n            store.set(keyword);\n        }\n    }\n    const filterQuery = Object.assign(\n    /**\n     * If there is no filter keyword / regex then do not filter otherwise filter based on the regex\n     * created from the search input element.\n     *\n     * @param data - Data object to test against regex.\n     *\n     * @returns Store filter state.\n     */\n    (data) => {\n        if (keyword === '' || !regex) {\n            return true;\n        }\n        if (isIterable(accessors)) {\n            for (const accessor of accessors) {\n                const value = safeAccess(data, accessor);\n                if (typeof value !== 'string') {\n                    if (accessWarn) {\n                        console.warn(`regexObjectQuery warning: could not access string data from '${accessor}'.`);\n                    }\n                    continue;\n                }\n                if (regex.test(Strings.normalize(value))) {\n                    return true;\n                }\n            }\n            return false;\n        }\n        else {\n            const value = safeAccess(data, accessors);\n            if (typeof value !== 'string') {\n                if (accessWarn) {\n                    console.warn(`regexObjectQuery warning: could not access string data from '${accessors}'.`);\n                }\n                return false;\n            }\n            return regex.test(Strings.normalize(value));\n        }\n    }, {\n        /**\n         * Create a custom store that changes when the search keyword changes.\n         *\n         * @param handler - A callback function that accepts strings.\n         *\n         * @returns Store unsubscribe function.\n         */\n        subscribe(handler) {\n            return storeKeyword.subscribe(handler);\n        },\n        /**\n         * @param value - A new value for the keyword / regex test.\n         */\n        set(value) {\n            if (typeof value === 'string') {\n                keyword = Strings.normalize(value);\n                regex = new RegExp(Strings.escape(keyword), caseSensitive ? '' : 'i');\n                storeKeyword.set(keyword);\n            }\n        }\n    });\n    /**\n     * Create a custom store that changes when the search keyword changes.\n     *\n     * @param handler - A callback function that accepts strings.\n     *\n     * @returns Store unsubscribe function.\n     */\n    filterQuery.subscribe = (handler) => {\n        return storeKeyword.subscribe(handler);\n    };\n    /**\n     * @param value - A new value for the keyword / regex test.\n     */\n    filterQuery.set = (value) => {\n        if (typeof value === 'string') {\n            keyword = Strings.normalize(value);\n            regex = new RegExp(Strings.escape(keyword), caseSensitive ? '' : 'i');\n            storeKeyword.set(keyword);\n        }\n    };\n    //\n    // /**\n    //  * If there is no filter keyword / regex then do not filter otherwise filter based on the regex\n    //  * created from the search input element.\n    //  *\n    //  * @param data - Data object to test against regex.\n    //  *\n    //  * @returns Store filter state.\n    //  */\n    // const filterQuery: ReturnType<DynReducerHelper.filters['regexObjectQuery']> = function(data: { [key: string]: any }): boolean\n    // {\n    //    if (keyword === '' || !regex) { return true; }\n    //\n    //    if (isIterable(accessors))\n    //    {\n    //       for (const accessor of accessors)\n    //       {\n    //          const value: any = safeAccess(data, accessor);\n    //          if (typeof value !== 'string')\n    //          {\n    //             if (accessWarn)\n    //             {\n    //                console.warn(`regexObjectQuery warning: could not access string data from '${accessor}'.`);\n    //             }\n    //\n    //             continue;\n    //          }\n    //\n    //          if (regex.test(Strings.normalize(value))) { return true; }\n    //       }\n    //\n    //       return false;\n    //    }\n    //    else\n    //    {\n    //       const value: any = safeAccess(data, accessors);\n    //       if (typeof value !== 'string')\n    //       {\n    //          if (accessWarn)\n    //          {\n    //             console.warn(`regexObjectQuery warning: could not access string data from '${accessors}'.`);\n    //          }\n    //\n    //          return false;\n    //       }\n    //\n    //       return regex.test(Strings.normalize(value));\n    //    }\n    // }\n    //\n    // /**\n    //  * Create a custom store that changes when the search keyword changes.\n    //  *\n    //  * @param handler - A callback function that accepts strings.\n    //  *\n    //  * @returns Store unsubscribe function.\n    //  */\n    // filterQuery.subscribe = (handler: Subscriber<string>): Unsubscriber =>\n    // {\n    //    return storeKeyword.subscribe(handler);\n    // };\n    //\n    // /**\n    //  * @param value - A new value for the keyword / regex test.\n    //  */\n    // filterQuery.set = (value: string): void =>\n    // {\n    //    if (typeof value === 'string')\n    //    {\n    //       keyword = Strings.normalize(value);\n    //       regex = new RegExp(Strings.escape(keyword), caseSensitive ? '' : 'i');\n    //       storeKeyword.set(keyword);\n    //    }\n    // };\n    return filterQuery;\n}\n\nconst filters = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    regexObjectQuery: regexObjectQuery\n});\n\n/**\n * Provides helper functions to create dynamic store driven filters and sort functions for dynamic reducers. The\n * returned functions are also Svelte stores and can be added to a reducer as well as used as a store.\n */\nclass DynReducerHelper {\n    constructor() { }\n    /**\n     * Returns the following filter functions:\n     * - regexObjectQuery(accessors, options); suitable for object reducers matching one or more property keys /\n     *   accessors against the store value as a regex. To access deeper entries into the object format the accessor\n     *   string with `.` between entries to walk. Optional parameters include logging access warnings, case sensitivity,\n     *   and passing in an existing store.\n     *\n     * @returns All available filters.\n     */\n    static get filters() { return filters; }\n}\n\nexport { DynArrayReducer, DynArrayReducerDerived, DynMapReducer, DynMapReducerDerived, DynReducerHelper };\n//# sourceMappingURL=index.js.map\n","import { tick } from 'svelte';\nimport { Hashing } from '@typhonjs-fvtt/runtime/util';\nimport { isPlainObject, isObject, hasPrototype } from '@typhonjs-fvtt/runtime/util/object';\nimport { DynMapReducer } from '@typhonjs-fvtt/runtime/svelte/store/reducer';\n\n/**\n * Provides TypeScript type guards for several Foundry document model classes and objects.\n *\n * @packageDocumentation\n */\n/**\n * @param doc - A potential Foundry document.\n *\n * @returns Whether the given object is a Foundry document.\n */\nfunction isDocument(doc) {\n    return doc !== void 0 && doc !== null && doc instanceof foundry.abstract.Document;\n}\n/**\n * @param collection - A potential Foundry document collection.\n *\n * @returns Whether the given object is a Foundry document collection.\n */\nfunction isDocumentCollection(collection) {\n    return collection !== void 0 && collection !== null &&\n        collection instanceof foundry.documents.abstract.DocumentCollection;\n}\n\n/**\n * Provides management of reactive embedded collections.\n *\n * @privateRemarks\n * TODO: Consider subscribing to TJSDocument rather than exposing {@link EmbeddedStoreManager.handleDocChange} and\n * {@link EmbeddedStoreManager.handleUpdate}\n */\nclass EmbeddedStoreManager {\n    /**\n     * RegExp for detecting CRUD updates for the associated document.\n     */\n    static #updateActionRegex = /(?<action>create|delete|update)(?<sep>\\.?)(?<name>\\w+)/;\n    /**\n     */\n    #name = new Map();\n    /**\n     * Source document.\n     */\n    #document;\n    /**\n     * Reverse lookup for older Foundry versions.\n     */\n    #collectionToDocName = new Map();\n    /**\n     * Valid embedded collection actions.\n     */\n    #embeddedNames = new Set();\n    /**\n     * @param document - The associated document holder.\n     */\n    constructor(document) {\n        this.#document = document;\n        this.handleDocChange();\n        Object.seal(this);\n    }\n    /**\n     * Create a reactive embedded collection store. When no options are provided the name of the embedded collection\n     * matches the document name.\n     *\n     * @param FoundryDoc - A Foundry document.\n     *\n     * @param [options] - Dynamic reducer create options.\n     *\n     * @typeParam D `Foundry Document`.\n     *\n     * @typeParam O `CreateOptions` - Embedded API create options.\n     */\n    create(FoundryDoc, options) {\n        const docName = FoundryDoc?.documentName;\n        if (typeof docName !== 'string') {\n            throw new TypeError(`EmbeddedStoreManager.create error: 'FoundryDoc' does not have a valid 'documentName' property.`);\n        }\n        const doc = this.#document[0];\n        let collection = null;\n        if (doc) {\n            try {\n                collection = doc.getEmbeddedCollection(docName);\n            }\n            catch (err) {\n                console.warn(`EmbeddedStoreManager.create error: No valid embedded collection for: ${docName}`);\n            }\n        }\n        let embeddedData = this.#name.get(docName);\n        if (!embeddedData) {\n            embeddedData = {\n                collection,\n                stores: new Map()\n            };\n            this.#name.set(docName, embeddedData);\n        }\n        /**\n         * Reducer name\n         */\n        let name;\n        /**\n         * Rest of common reducer options.\n         */\n        let rest = {};\n        /**\n         * Reducer constructor function.\n         */\n        let ctor;\n        if (typeof options === 'string') {\n            name = options;\n            ctor = DynMapReducer;\n        }\n        else if (typeof options === 'function' && hasPrototype(options, DynMapReducer)) {\n            ctor = options;\n        }\n        else if (isObject(options)) {\n            ({ name, ctor = DynMapReducer, ...rest } = options);\n        }\n        else {\n            name = docName;\n            ctor = DynMapReducer;\n        }\n        if (!hasPrototype(ctor, DynMapReducer)) {\n            throw new TypeError(`EmbeddedStoreManager.create error: 'ctor' is not a 'DynMapReducer'.`);\n        }\n        name = name ?? ctor?.name;\n        if (typeof name !== 'string') {\n            throw new TypeError(`EmbeddedStoreManager.create error: 'name' is not a string.`);\n        }\n        if (embeddedData.stores.has(name)) {\n            return embeddedData.stores.get(name);\n        }\n        else {\n            const reducerOptions = collection ? { data: collection, ...rest } : { ...rest };\n            const instance = new ctor(reducerOptions);\n            embeddedData.stores.set(name, instance);\n            // Invoke protected initialize method.\n            if (typeof instance?.initialize === 'function') {\n                instance.initialize(rest);\n            }\n            return instance;\n        }\n    }\n    /**\n     * Destroys one or more embedded collection reducers. When no `reducerName` is provided all reactive embedded\n     * collections are destroyed for the given document type.\n     *\n     * @param FoundryDoc - A Foundry document class constructor.\n     *\n     * @param [reducerName] - Optional name of a specific reducer to destroy.\n     *\n     * @typeParam D `Foundry Document`.\n     */\n    destroy(FoundryDoc, reducerName) {\n        let count = 0;\n        // Destroy all embedded stores\n        if (FoundryDoc === void 0) {\n            for (const embeddedData of this.#name.values()) {\n                embeddedData.collection = null;\n                for (const store of embeddedData.stores.values()) {\n                    store.destroy();\n                    count++;\n                }\n            }\n            this.#name.clear();\n        }\n        else {\n            const docName = FoundryDoc?.documentName;\n            if (typeof docName !== 'string') {\n                throw new TypeError(`EmbeddedStoreManager.delete error: 'FoundryDoc' does not have a valid 'documentName' property.`);\n            }\n            if (reducerName === void 0) {\n                const embeddedData = this.#name.get(docName);\n                if (embeddedData) {\n                    embeddedData.collection = null;\n                    for (const store of embeddedData.stores.values()) {\n                        store.destroy();\n                        count++;\n                    }\n                }\n                this.#name.delete(docName);\n            }\n            else if (reducerName === 'string') {\n                const embeddedData = this.#name.get(docName);\n                if (embeddedData) {\n                    const store = embeddedData.stores.get(reducerName);\n                    if (store) {\n                        store.destroy();\n                        count++;\n                    }\n                }\n            }\n        }\n        return count > 0;\n    }\n    /**\n     * Returns a specific existing embedded collection store. When no `reducerName` is provided the document name\n     * is used instead.\n     *\n     * @param FoundryDoc - A Foundry document class constructor.\n     *\n     * @param [reducerName] - Optional name of a specific reducer to get.\n     *\n     * @typeParam D `Foundry Document`.\n     *\n     * @returns The associated reactive embedded collection / reducer.\n     */\n    get(FoundryDoc, reducerName) {\n        const docName = FoundryDoc?.documentName;\n        if (typeof docName !== 'string') {\n            throw new TypeError(`EmbeddedStoreManager.get error: 'FoundryDoc' does not have a valid 'documentName' property.`);\n        }\n        const embeddedData = this.#name.get(docName);\n        if (embeddedData) {\n            return embeddedData.stores.get(reducerName ?? docName);\n        }\n    }\n    /**\n     * Updates all existing embedded collection stores with the associated embedded collection\n     */\n    handleDocChange() {\n        const doc = this.#document[0];\n        if (isDocument(doc)) {\n            const existingEmbeddedNames = new Set(this.#name.keys());\n            /**\n             * All embedded names from associated document.\n             */\n            const embeddedNames = Object.entries(doc.constructor?.metadata?.embedded ?? []);\n            this.#collectionToDocName.clear();\n            // Remove all previously stored embedded name CRUD keys.\n            this.#embeddedNames.clear();\n            for (const [docName, collectionName] of embeddedNames) {\n                // Remove processed embedded doc name from existingEmbeddedNames set.\n                existingEmbeddedNames.delete(docName);\n                // Update CRUD keys for v10.\n                this.#embeddedNames.add(`create${docName}`);\n                this.#embeddedNames.add(`delete${docName}`);\n                this.#embeddedNames.add(`update${docName}`);\n                // Update CRUD keys for v11.\n                this.#embeddedNames.add(`create.${collectionName}`);\n                this.#embeddedNames.add(`delete.${collectionName}`);\n                this.#embeddedNames.add(`update.${collectionName}`);\n                // Update CRUD keys for v12.\n                this.#embeddedNames.add(`create${collectionName}`);\n                this.#embeddedNames.add(`delete${collectionName}`);\n                this.#embeddedNames.add(`update${collectionName}`);\n                // v10 collection to doc name lookup.\n                this.#collectionToDocName.set(docName, docName);\n                this.#collectionToDocName.set(collectionName, docName);\n                let collection = null;\n                try {\n                    // Update any existing stores with the actual collection.\n                    collection = doc.getEmbeddedCollection(docName);\n                }\n                catch (err) {\n                    console.warn(`EmbeddedStoreManager.handleDocUpdate error: No valid embedded collection for: ${docName}`);\n                }\n                // Update EmbeddedData for new collection.\n                const embeddedData = this.#name.get(docName);\n                if (embeddedData) {\n                    // A bit funky here, but Foundry collections modify the Map type.\n                    embeddedData.collection = collection;\n                    // Update all existing stores.\n                    for (const store of embeddedData.stores.values()) {\n                        store.setData(embeddedData.collection, true);\n                    }\n                }\n            }\n            // Update all existing embedded collections with null data that aren't processed above.\n            for (const embeddedName of existingEmbeddedNames) {\n                const embeddedData = this.#name.get(embeddedName);\n                if (embeddedData) {\n                    embeddedData.collection = null;\n                    for (const store of embeddedData.stores.values()) {\n                        store.setData(null, true);\n                    }\n                }\n            }\n        }\n        else // Reset all embedded reducer stores to null data.\n         {\n            this.#collectionToDocName.clear();\n            this.#embeddedNames.clear();\n            for (const embeddedData of this.#name.values()) {\n                embeddedData.collection = null;\n                for (const store of embeddedData.stores.values()) {\n                    store.setData(null, true);\n                }\n            }\n        }\n    }\n    /**\n     * Handles updates to embedded stores parsing the document update action for valid embedded store types.\n     *\n     * On create, delete, update parse the type being modified then force index updates for the embedded type.\n     *\n     * @param action - Update action from document.\n     */\n    handleUpdate(action) {\n        if (!this.#embeddedNames.has(action)) {\n            return;\n        }\n        const match = EmbeddedStoreManager.#updateActionRegex.exec(action);\n        if (match && match.groups) {\n            const docOrCollectionName = match.groups.name;\n            const embeddedName = this.#collectionToDocName.get(docOrCollectionName);\n            const embeddedData = this.#name.get(embeddedName);\n            if (embeddedData) {\n                for (const store of embeddedData.stores.values()) {\n                    store.index.update(true);\n                }\n            }\n        }\n    }\n}\n\n/**\n * Provides a wrapper implementing the Svelte store / subscriber protocol around any Document / ClientMixinDocument.\n * This makes documents reactive in a Svelte component, but otherwise provides subscriber functionality external to\n * Svelte.\n *\n * @typeParam D `Foundry Document`.\n */\nclass TJSDocument {\n    /**\n     * Fake Application API that ClientDocumentMixin uses for document model callbacks.\n     */\n    #callbackAPI;\n    /**\n     * Wrapped document.\n     */\n    #document = [void 0];\n    /**\n     *\n     */\n    #embeddedStoreManager;\n    /**\n     *\n     */\n    #embeddedAPI;\n    /**\n     * UUIDv4 assigned to this instance.\n     */\n    #uuidv4;\n    /**\n     *\n     */\n    #options = {};\n    /**\n     * All current subscribers.\n     */\n    #subscribers = [];\n    /**\n     * Latest update options processed.\n     */\n    #updateOptions;\n    /**\n     * @param [document] - Document to wrap or TJSDocumentOptions.\n     *\n     * @param [options] - TJSDocument options.\n     */\n    constructor(document, options = {}) {\n        this.#uuidv4 = `tjs-document-${Hashing.uuidv4()}`;\n        this.#callbackAPI = {\n            close: this.#deleted.bind(this),\n            render: this.#updateSubscribers.bind(this)\n        };\n        if (isPlainObject(document)) // Handle case when only options are passed into ctor.\n         {\n            this.setOptions(document);\n        }\n        else {\n            this.setOptions(options);\n            this.set(document);\n        }\n    }\n    /**\n     * @returns {import('./types').EmbeddedAPI} Embedded store manager.\n     */\n    get embedded() {\n        if (!this.#embeddedAPI) {\n            this.#embeddedStoreManager = new EmbeddedStoreManager(this.#document);\n            this.#embeddedAPI = {\n                create: (doc, options) => this.#embeddedStoreManager.create(doc, options),\n                destroy: (doc, storeName) => this.#embeddedStoreManager.destroy(doc, storeName),\n                get: (doc, storeName) => this.#embeddedStoreManager.get(doc, storeName)\n            };\n        }\n        return this.#embeddedAPI;\n    }\n    /**\n     * @returns Returns the options passed on last update.\n     */\n    get updateOptions() {\n        return this.#updateOptions ?? { action: 'unknown', data: [] };\n    }\n    /**\n     * @returns Returns the UUIDv4 assigned to this store.\n     */\n    get uuidv4() { return this.#uuidv4; }\n    /**\n     * Register the callback API with the underlying Foundry document.\n     */\n    #callbackRegister() {\n        const doc = this.#document[0];\n        if (isDocument(doc) && isObject(doc?.apps) && !doc.apps[this.#uuidv4]) {\n            doc.apps[this.#uuidv4] = this.#callbackAPI;\n        }\n    }\n    /**\n     * Unregister the callback API with the underlying Foundry document.\n     */\n    #callbackUnregister() {\n        const doc = this.#document[0];\n        if (isDocument(doc)) {\n            delete doc?.apps?.[this.#uuidv4];\n        }\n    }\n    /**\n     * Handles cleanup when the document is deleted. Invoking any optional delete function set in the constructor.\n     *\n     * @returns Promise when completed.\n     */\n    async #deleted() {\n        const doc = this.#document[0];\n        // Check to see if the document is still in the associated collection to determine if actually deleted.\n        if (isDocument(doc) && !doc?.collection?.has(doc.id)) {\n            this.#setDocument(void 0);\n            if (typeof this.#options.preDelete === 'function') {\n                await this.#options.preDelete(doc);\n            }\n            this.#updateSubscribers(false, { action: 'delete' });\n            if (typeof this.#options.delete === 'function') {\n                await this.#options.delete(doc);\n            }\n            // Allow subscribers to be able to query `updateOptions` involving any reactive statements.\n            await tick();\n            this.#updateOptions = void 0;\n        }\n    }\n    /**\n     * Completely removes all internal subscribers, any optional delete callback, and unregisters from the\n     * ClientDocumentMixin `apps` tracking object.\n     */\n    destroy() {\n        if (this.#embeddedStoreManager) {\n            this.#embeddedStoreManager.destroy();\n            this.#embeddedStoreManager = void 0;\n            this.#embeddedAPI = void 0;\n        }\n        this.#setDocument(void 0);\n        this.#options.delete = void 0;\n        this.#options.preDelete = void 0;\n        this.#subscribers.length = 0;\n    }\n    /**\n     * @returns Current document\n     */\n    get() { return this.#document[0]; }\n    /**\n     * Attempts to create a Foundry UUID from standard drop data. This may not work for all systems.\n     *\n     * @param data - Drop transfer data.\n     *\n     * @param [opts] - Optional parameters.\n     *\n     * @param [opts.compendium=true] - Accept compendium documents.\n     *\n     * @param [opts.world=true] - Accept world documents.\n     *\n     * @param [opts.types] - Require the `data.type` to match entry in `types`.\n     *\n     * @returns Foundry UUID for drop data.\n     */\n    static getUUIDFromDataTransfer(data, { compendium = true, world = true, types = void 0 } = {}) {\n        if (!isObject(data)) {\n            return void 0;\n        }\n        if (Array.isArray(types) && !types.includes(data.type)) {\n            return void 0;\n        }\n        let uuid = void 0;\n        if (typeof data.uuid === 'string') // v10 and above provides a full UUID.\n         {\n            const isCompendium = data.uuid.startsWith('Compendium');\n            if (isCompendium && compendium) {\n                uuid = data.uuid;\n            }\n            else if (world) {\n                uuid = data.uuid;\n            }\n        }\n        return uuid;\n    }\n    /**\n     * Sets a new document target to be monitored. To unset use `undefined` or `null`.\n     *\n     * @param doc - New document to set.\n     *\n     * @param [options] - New document update options to set.\n     */\n    set(doc, options = {}) {\n        if (doc !== void 0 && doc !== null && !isDocument(doc)) {\n            throw new TypeError(`TJSDocument set error: 'document' is not a valid Document or undefined / null.`);\n        }\n        if (!isObject(options)) {\n            throw new TypeError(`TJSDocument set error: 'options' is not an object.`);\n        }\n        // Only post an update if the document has changed.\n        if (this.#setDocument(doc)) {\n            // Only add registration if there are current subscribers.\n            if (isDocument(doc) && this.#subscribers.length) {\n                this.#callbackRegister();\n            }\n            this.#updateSubscribers(false, {\n                ...options,\n                action: `tjs-set-${doc === void 0 || doc === null ? 'undefined' : 'new'}`\n            });\n        }\n    }\n    /**\n     * Internally sets the new document being tracked.\n     *\n     * @param doc -\n     *\n     * @returns {boolean} Whether the document changed.\n     */\n    #setDocument(doc) {\n        const changed = doc !== this.#document[0];\n        // Unregister before setting new document state.\n        if (changed) {\n            this.#callbackUnregister();\n        }\n        this.#document[0] = doc === void 0 || doc === null ? void 0 : doc;\n        if (changed && this.#embeddedStoreManager) {\n            this.#embeddedStoreManager.handleDocChange();\n        }\n        return changed;\n    }\n    /**\n     * Potentially sets new document from data transfer object.\n     *\n     * @param data - Document transfer data.\n     *\n     * @param [options] - Optional parameters for {@link TJSDocument.getUUIDFromDataTransfer}.\n     *\n     * @returns Returns true if new document set from data transfer blob.\n     */\n    async setFromDataTransfer(data, options) {\n        return this.setFromUUID(TJSDocument.getUUIDFromDataTransfer(data, options));\n    }\n    /**\n     * Sets the document by Foundry UUID performing a lookup and setting the document if found.\n     *\n     * @param {string}   uuid - A Foundry UUID to lookup.\n     *\n     * @param {import('./types').TJSDocumentUpdateOptions}   [options] - New document update options to set.\n     *\n     * @returns {Promise<boolean>} True if successfully set document from UUID.\n     */\n    async setFromUUID(uuid, options) {\n        if (typeof uuid !== 'string' || uuid.length === 0) {\n            return false;\n        }\n        try {\n            const doc = await globalThis.fromUuid(uuid);\n            if (doc) {\n                this.set(doc, options);\n                return true;\n            }\n        }\n        catch (err) { /**/ }\n        return false;\n    }\n    /**\n     * Sets options for this document wrapper / store.\n     *\n     * @param options - Options for TJSDocument.\n     */\n    setOptions(options) {\n        if (!isObject(options)) {\n            throw new TypeError(`TJSDocument error: 'options' is not a plain object.`);\n        }\n        // Verify valid values -------------\n        if (options.delete !== void 0 && options.delete !== null && typeof options.delete !== 'function') {\n            throw new TypeError(`TJSDocument error: 'delete' attribute in options is not a function or null.`);\n        }\n        if (options.preDelete !== void 0 && options.preDelete !== null && typeof options.preDelete !== 'function') {\n            throw new TypeError(`TJSDocument error: 'preDelete' attribute in options is not a function or null.`);\n        }\n        // Set any valid values -------------\n        if (options.delete !== void 0) {\n            this.#options.delete = options.delete ?? void 0;\n        }\n        if (options.preDelete !== void 0) {\n            this.#options.preDelete = options.preDelete ?? void 0;\n        }\n    }\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        let addedSubscriber = false;\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            addedSubscriber = true;\n        }\n        if (addedSubscriber) {\n            // Register callback with first subscriber.\n            if (this.#subscribers.length === 1) {\n                this.#callbackRegister();\n            }\n            const updateOptions = { action: 'tjs-subscribe', data: [] };\n            handler(this.#document[0], updateOptions); // Call handler with current value and update options.\n        }\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index !== -1) {\n                this.#subscribers.splice(index, 1);\n            }\n            // Unsubscribe from document callback if there are no subscribers.\n            if (this.#subscribers.length === 0) {\n                this.#callbackUnregister();\n            }\n        };\n    }\n    /**\n     * @param [force] - unused - signature from Foundry render function.\n     *\n     * @param [options] - Options from render call; will have document update context.\n     */\n    #updateSubscribers(force, options = {}) {\n        // Shallow copy w/ remapped keys.\n        const optionsRemap = {\n            action: (options.action ?? options.renderContext ?? 'tjs-unknown'),\n            data: (options.data ?? options.renderData ?? [])\n        };\n        // Coerce `data` as necessary into an array to standardize receiving processing.\n        if (!Array.isArray(optionsRemap.data)) {\n            optionsRemap.data = [optionsRemap.data];\n        }\n        this.#updateOptions = optionsRemap;\n        const subscribers = this.#subscribers;\n        const doc = this.#document[0];\n        for (let cntr = 0; cntr < subscribers.length; cntr++) {\n            subscribers[cntr](doc, optionsRemap);\n        }\n        if (this.#embeddedStoreManager) {\n            this.#embeddedStoreManager.handleUpdate(optionsRemap.action);\n        }\n    }\n}\n\n/**\n * Provides a wrapper implementing the Svelte store / subscriber protocol around any DocumentCollection. This makes\n * document collections reactive in a Svelte component, but otherwise provides subscriber functionality external to\n * Svelte.\n *\n * @typeParam C `Foundry Collection`.\n */\nclass TJSDocumentCollection {\n    /**\n     * Fake Application API that DocumentCollection uses for document model callbacks.\n     */\n    #callbackAPI;\n    /**\n     * Collection being wrapped.\n     */\n    #collection = void 0;\n    /**\n     * UUIDv4 to associate as key with wrapped collection.\n     */\n    #uuidv4;\n    /**\n     * Configuration options.\n     */\n    #options = {};\n    /**\n     * All current subscribers.\n     */\n    #subscribers = [];\n    /**\n     * Latest update options processed.\n     */\n    #updateOptions;\n    /**\n     * @param [collection] - Collection to wrap or TJSDocumentCollectionOptions.\n     *\n     * @param [options] - TJSDocumentCollection options.\n     */\n    constructor(collection, options = {}) {\n        this.#uuidv4 = `tjs-collection-${Hashing.uuidv4()}`;\n        this.#callbackAPI = {\n            uuid: this.#uuidv4,\n            close: this.#deleted.bind(this),\n            render: this.#updateSubscribers.bind(this)\n        };\n        if (isPlainObject(collection)) // Handle case when only options are passed into ctor.\n         {\n            this.setOptions(collection);\n        }\n        else {\n            this.setOptions(options);\n            this.set(collection);\n        }\n    }\n    /**\n     * Returns the options passed on last update.\n     *\n     * @returns Last update options.\n     */\n    get updateOptions() {\n        return this.#updateOptions ?? { action: 'unknown', data: [] };\n    }\n    /**\n     * Returns the UUIDv4 assigned to this store.\n     *\n     * @returns UUIDv4\n     */\n    get uuid() { return this.#uuidv4; }\n    /**\n     * Register the callback API with the underlying Foundry collection.\n     */\n    #callbackRegister() {\n        const collection = this.#collection;\n        if (isDocumentCollection(collection) && Array.isArray(collection?.apps)) {\n            const index = collection.apps.findIndex((sub) => sub === this.#callbackAPI);\n            if (index === -1) {\n                collection.apps.push(this.#callbackAPI);\n            }\n        }\n    }\n    /**\n     * Unregister the callback API with the underlying Foundry collection.\n     */\n    #callbackUnregister() {\n        const collection = this.#collection;\n        if (isDocumentCollection(this.#collection) && Array.isArray(collection?.apps)) {\n            const index = collection.apps.findIndex((sub) => sub === this.#callbackAPI);\n            if (index >= 0) {\n                collection.apps.splice(index, 1);\n            }\n        }\n    }\n    /**\n     * Handles cleanup when the collection is deleted. Invoking any optional delete function set in the constructor.\n     *\n     * @returns {Promise<void>}\n     */\n    async #deleted() {\n        const collection = this.#collection;\n        this.#callbackUnregister();\n        this.#collection = void 0;\n        // Only invoke handlers and subscribers if the collection was defined.\n        if (collection) {\n            if (typeof this.#options.preDelete === 'function') {\n                await this.#options.preDelete(collection);\n            }\n            this.#updateSubscribers(false, { action: 'delete' });\n            if (typeof this.#options.delete === 'function') {\n                await this.#options.delete(collection);\n            }\n        }\n        // Allow subscribers to be able to query `updateOptions` involving any reactive statements.\n        await tick();\n        this.#updateOptions = void 0;\n    }\n    /**\n     * Completely removes all internal subscribers, any optional delete callback, and unregisters from the\n     * DocumentCollection `apps` tracking array.\n     */\n    destroy() {\n        this.#callbackUnregister();\n        this.#collection = void 0;\n        this.#options.delete = void 0;\n        this.#options.preDelete = void 0;\n        this.#subscribers.length = 0;\n    }\n    /**\n     * @returns Current collection if any.\n     */\n    get() { return this.#collection; }\n    /**\n     * Sets a new document collection target to be monitored. To unset use `undefined` or `null`.\n     *\n     * @param collection - New collection to set.\n     *\n     * @param [options] - New collection update options to set.\n     */\n    set(collection, options = {}) {\n        if (collection !== void 0 && collection !== null && !isDocumentCollection(collection)) {\n            throw new TypeError(`TJSDocumentCollection set error: 'collection' is not a valid DocumentCollection or undefined.`);\n        }\n        if (!isObject(options)) {\n            throw new TypeError(`TJSDocument set error: 'options' is not an object.`);\n        }\n        const changed = this.#collection !== collection;\n        if (changed) {\n            this.#callbackUnregister();\n        }\n        this.#collection = collection === void 0 || collection === null ? void 0 : collection;\n        if (changed) {\n            if (isDocumentCollection(collection) && this.#subscribers.length) {\n                this.#callbackRegister();\n            }\n            this.#updateSubscribers(false, {\n                data: [],\n                ...options,\n                action: `tjs-set-${collection === void 0 || collection === null ? 'undefined' : 'new'}`\n            });\n        }\n    }\n    /**\n     * Sets options for this collection wrapper / store.\n     *\n     * @param options - Options for TJSDocumentCollection.\n     */\n    setOptions(options) {\n        if (!isObject(options)) {\n            throw new TypeError(`TJSDocumentCollection error: 'options' is not an object.`);\n        }\n        // Verify valid values -------------\n        if (options.delete !== void 0 && options.delete !== null && typeof options.delete !== 'function') {\n            throw new TypeError(`TJSDocumentCollection error: 'delete' attribute in options is not a function or null.`);\n        }\n        if (options.preDelete !== void 0 && options.preDelete !== null && typeof options.preDelete !== 'function') {\n            throw new TypeError(`TJSDocumentCollection error: 'preDelete' attribute in options is not a function or null.`);\n        }\n        // Set any valid values -------------\n        if (options.delete !== void 0) {\n            this.#options.delete = options.delete ?? void 0;\n        }\n        if (options.preDelete !== void 0) {\n            this.#options.preDelete = options.delete ?? void 0;\n        }\n    }\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        let addedSubscriber = false;\n        const currentIdx = this.#subscribers.findIndex((entry) => entry === handler);\n        if (currentIdx === -1) {\n            this.#subscribers.push(handler);\n            addedSubscriber = true;\n        }\n        if (addedSubscriber) {\n            // Register callback with first subscriber.\n            if (this.#subscribers.length === 1) {\n                this.#callbackRegister();\n            }\n            const collection = this.#collection;\n            const updateOptions = { action: 'tjs-subscribe', data: [] };\n            handler(collection, updateOptions); // Call handler with current value and update options.\n        }\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index !== -1) {\n                this.#subscribers.splice(index, 1);\n            }\n            // Unsubscribe from collection if there are no subscribers.\n            if (this.#subscribers.length === 0) {\n                this.#callbackUnregister();\n            }\n        };\n    }\n    /**\n     * @param force - unused - signature from Foundry render function.\n     *\n     * @param [options] - Options from render call; will have collection update context.\n     */\n    #updateSubscribers(force, options = {}) {\n        // Shallow copy w/ remapped keys.\n        const optionsRemap = {\n            action: (options.action ?? options.renderContext ?? 'tjs-unknown'),\n            data: (options.data ?? options.renderData ?? [])\n        };\n        // Coerce `data` as necessary into an array to standardize receiving processing.\n        if (!Array.isArray(optionsRemap.data)) {\n            optionsRemap.data = [optionsRemap.data];\n        }\n        this.#updateOptions = optionsRemap;\n        const subscribers = this.#subscribers;\n        const collection = this.#collection;\n        for (let cntr = 0; cntr < subscribers.length; cntr++) {\n            subscribers[cntr](collection, optionsRemap);\n        }\n    }\n}\n\nexport { TJSDocument, TJSDocumentCollection };\n//# sourceMappingURL=index.js.map\n","import { Timing } from '@typhonjs-fvtt/runtime/util';\nimport { isObject } from '@typhonjs-fvtt/runtime/util/object';\nimport { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { A11yHelper } from '@typhonjs-fvtt/runtime/util/a11y';\nimport { nextAnimationFrame } from '@typhonjs-fvtt/runtime/util/animate';\n\n/**\r\n * Defines a higher order function returning an action that triggers WAAPI / `Element.animate` animations from\r\n * provided keyframes and options in response to a given event. The default event is the `click` event. You may change\r\n * that to any\r\n *\r\n * @param {import('./types').ComposableActionOptions.AnimateWAAPI} [options] - Optional parameters.\r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/animate\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API/Keyframe_Formats\r\n *\r\n * @returns {(import('svelte/action').Action<\r\n *    HTMLElement,\r\n *    import('svelte/action').ActionReturn<import('./types').ComposableActionOptions.AnimateWAAPI>\r\n * >)} Actual `animateWAAPI` Action.\r\n */\r\nfunction animateWAAPI({ debounce, enabled = true, duration = 600, event = 'click', keyframes = [],\r\n keyframeOptions, strategy = 'cancel' } = {})\r\n{\r\n   return (element, initialOptions) =>\r\n   {\r\n      /** @type {Animation} */\r\n      let animation;\r\n\r\n      /**\r\n       * Defines the animation finished / canceled operation clearing the existing animation reference.\r\n       */\r\n      function animationFinished()\r\n      {\r\n         if (animation)\r\n         {\r\n            animation.effect = void 0;\r\n            animation = void 0;\r\n         }\r\n      }\r\n\r\n      /**\r\n       * Creates WAAPI animation.\r\n       */\r\n      function createAnimation()\r\n      {\r\n         if (!enabled) { return; }\r\n\r\n         if (animation !== void 0)\r\n         {\r\n            switch (strategy)\r\n            {\r\n               default:\r\n               case 'cancel':\r\n                  if (animation?.playState !== 'finished')\r\n                  {\r\n                     animation.cancel();\r\n                     animationFinished();\r\n                  }\r\n                  break;\r\n\r\n               case 'exclusive':\r\n                  // Exclusive animations simply return immediately as an animation is already in progress.\r\n                  return;\r\n            }\r\n         }\r\n\r\n         try\r\n         {\r\n            // Always use main realm / window for animation even when cross-realm.\r\n\r\n            const effect = new window.KeyframeEffect(element, keyframes, isObject(keyframeOptions) ? keyframeOptions :\r\n             duration);\r\n\r\n            animation = new window.Animation(effect);\r\n            animation.onfinish = animationFinished;\r\n            animation.play();\r\n         }\r\n         catch { animation = void 0; }\r\n      }\r\n\r\n      /**\r\n       * Updates options.\r\n       *\r\n       * @param {import('./types').ComposableActionOptions.AnimateWAAPI} newOptions - Options to update.\r\n       */\r\n      function updateOptions(newOptions)\r\n      {\r\n         if (typeof newOptions?.debounce === 'number' && debounce !== newOptions.debounce)\r\n         {\r\n            element.removeEventListener(event, eventFn);\r\n\r\n            eventFn = Number.isInteger(debounce) && debounce > 0 ? Timing.debounce(createAnimation, debounce) :\r\n               createAnimation;\r\n\r\n            element.addEventListener(event, eventFn);\r\n         }\r\n\r\n         if (typeof newOptions?.enabled === 'boolean') { enabled = newOptions.enabled; }\r\n\r\n         if (typeof newOptions?.duration === 'number') { duration = newOptions.duration; }\r\n\r\n         if (typeof newOptions?.event === 'string' && event !== newOptions.event)\r\n         {\r\n            element.removeEventListener(event, eventFn);\r\n\r\n            event = newOptions.event;\r\n\r\n            element.addEventListener(event, eventFn);\r\n         }\r\n\r\n         if (Array.isArray(newOptions?.keyframes) || isObject(newOptions?.keyframes))\r\n         {\r\n            keyframes = newOptions.keyframes;\r\n         }\r\n\r\n         if (isObject(newOptions?.keyframeOptions)) { keyframeOptions = newOptions.keyframeOptions; }\r\n\r\n         if (typeof newOptions?.strategy === 'string' && strategy !== newOptions.strategy)\r\n         {\r\n            strategy = newOptions.strategy;\r\n         }\r\n      }\r\n\r\n      let eventFn = Number.isInteger(debounce) && debounce > 0 ? Timing.debounce(createAnimation, debounce) :\r\n       createAnimation;\r\n\r\n      element.addEventListener(event, eventFn);\r\n\r\n      // Update options with any action assigned initial options.\r\n      if (isObject(initialOptions)) { updateOptions(initialOptions); }\r\n\r\n      return {\r\n         update: updateOptions,\r\n         destroy: () => element.removeEventListener(event, eventFn)\r\n      };\r\n   };\r\n}\n\n/**\r\n * Combines multiple composable actions.\r\n *\r\n * Note: The update function passes the same variable to all update functions of each action.\r\n *\r\n * @privateRemarks\r\n * TODO: This is a naive implementation and will be further refined in the near future.\r\n *\r\n * @param {...import('svelte/action').Action} actions - One or more composable action functions to combine.\r\n *\r\n * @returns {import('svelte/action').Action<HTMLElement, any>} Composed action.\r\n */\r\nfunction composable(...actions)\r\n{\r\n   return (element, options) =>\r\n   {\r\n      let lifecycle = actions.map((action) => action(element, options));\r\n\r\n      return {\r\n         destroy: () =>\r\n         {\r\n            for (const action of lifecycle)\r\n            {\r\n               if (typeof action.destroy === 'function') { action.destroy(); }\r\n            }\r\n\r\n            lifecycle = void 0;\r\n         },\r\n         update: (parameters) =>\r\n         {\r\n            for (const action of lifecycle)\r\n            {\r\n               if (typeof action.update === 'function') { action.update(parameters); }\r\n            }\r\n         }\r\n      };\r\n   };\r\n}\n\n/**\n * Defines the classic Material Design ripple effect as an action. `ripple` is a wrapper around the returned action.\n * This allows it to be easily used as a prop.\n *\n * Note: A negative one translateZ transform is applied to the added spans allowing other content to be layered on top\n * with a positive translateZ.\n *\n * Note: The ripple effect requires the `efx` element to have overflow hidden. This is set inline when the effect is\n * applied.\n *\n * Note: A CustomEvent `efx-trigger` is handled in cases when explicit triggering is necessary. This event should\n * have the actual source event as a property of `detail`.\n *\n * Styling: There is a single CSS variable `--tjs-action-ripple-background` that can be set to control the background.\n *\n * @param {object}   [opts] - Optional parameters.\n *\n * @param {string}   [opts.background='rgba(255, 255, 255, 0.7)'] - A valid CSS background attribute.\n *\n * @param {number}   [opts.duration=600] - Duration in milliseconds.\n *\n * @param {boolean}  [opts.enabled=true] - Enabled state.\n *\n * @param {Iterable<string>}  [opts.events=['click', 'keyup']] - DOM event to bind element to respond with the ripple\n *                                                                  effect.\n *\n * @param {string}   [opts.keyCode='Enter'] - Key code to trigger for any applicable key events.\n *\n * @param {boolean}  [opts.contextmenu=false] - Add triggering for context menu key and click.\n *\n * @param {number}   [opts.debounce=undefined] - Add a debounce to incoming events in milliseconds.\n *\n * @returns {(import('svelte/action').Action<\n *    HTMLElement,\n *    import('svelte/action').ActionReturn<import('./types').ComposableActionOptions.Ripple>\n * >)} Actual `ripple` Action.\n */\nfunction ripple({ background = 'rgba(255, 255, 255, 0.7)', contextmenu = false, debounce, duration = 600,\n enabled = true, events = ['click', 'keyup'], keyCode = 'Enter' } = {})\n{\n   return (element, initialOptions) =>\n   {\n      // Ripple requires the efx element to have the overflow hidden due to rendering content outside the boundary.\n      element.style.overflow = 'hidden';\n\n      /**\n       * Creates the ripple effect.\n       *\n       * @param {MouseEvent|KeyboardEvent}   e -\n       */\n      function createRipple(e)\n      {\n         if (!enabled) { return; }\n\n         const elementRect = element.getBoundingClientRect();\n\n         const diameter = Math.max(elementRect.width, elementRect.height);\n         const radius = diameter / 2;\n\n         let left, top;\n\n         // Firefox currently (11/24) does not correctly determine the location of a keyboard originated\n         // context menu location, so default to 0 instead of using `clientX` / `clientY`.\n         if (e?.button !== 2 && e.type === 'contextmenu')\n         {\n            left = '0';\n            top = '0';\n         }\n         else\n         {\n            // Find the adjusted click location relative to center or if no `clientX/Y` parameters choose center.\n            left = e.clientX ? `${e.clientX - (elementRect.left + radius)}px` : '0';\n            top = e.clientY ? `${e.clientY - (elementRect.top + radius)}px` : '0';\n         }\n\n         const span = CrossWindow.getDocument(element).createElement('span');\n\n         span.style.position = 'absolute';\n         span.style.width = `${diameter}px`;\n         span.style.height = `${diameter}px`;\n         span.style.left = left;\n         span.style.top = top;\n\n         span.style.background = `var(--tjs-action-ripple-background, ${background})`;\n         span.style.borderRadius = '50%';\n         span.style.pointerEvents = 'none';\n         span.style.transform = 'translateZ(-1px)';\n\n         element.prepend(span);\n\n         try\n         {\n            // Always use main realm / window for animation even when cross-realm.\n\n            const effect = new window.KeyframeEffect(span,\n               [\n                  {  // from\n                     transform: 'scale(.7)',\n                     opacity: 0.5,\n                     filter: 'blur(2px)'\n                  },\n                  {  // to\n                     transform: 'scale(4)',\n                     opacity: 0,\n                     filter: 'blur(5px)'\n                  }\n               ],\n               duration\n            );\n\n            const animation = new window.Animation(effect);\n\n            animation.onfinish = () =>\n            {\n               if (span) { span.remove(); }\n            };\n\n            animation.play();\n         }\n         catch\n         {\n            if (span) { span.remove(); }\n         }\n      }\n\n      /**\n       * Handles a custom event trigger `efx-trigger`. The `CustomEvent` should have an `event` object accessible from\n       * `detail`.\n       *\n       * @param {CustomEvent} event - CustomEvent.\n       */\n      function customHandler(event)\n      {\n         const actual = event?.detail?.event;\n\n         if (CrossWindow.isUserInputEvent(actual)) { createRipple(actual); }\n\n         event.preventDefault();\n         event.stopPropagation();\n      }\n\n      /**\n       * Handles any key event and only triggers the ripple effect if key code matches.\n       *\n       * @param {KeyboardEvent}  event -\n       */\n      function keyHandler(event)\n      {\n         if (!enabled) { return; }\n\n         if (event?.code === keyCode) { createRipple(event); }\n      }\n\n      /**\n       * Updates options.\n       *\n       * @param {import('./types').ComposableActionOptions.Ripple} newOptions - Options to update.\n       */\n      function updateOptions(newOptions)\n      {\n         if (typeof newOptions?.enabled === 'boolean') { enabled = newOptions.enabled; }\n      }\n\n      const eventFn = Number.isInteger(debounce) && debounce > 0 ? Timing.debounce(createRipple, debounce) :\n       createRipple;\n\n      const customEventFn = Number.isInteger(debounce) && debounce > 0 ? Timing.debounce(customHandler, debounce) :\n       customHandler;\n\n      const keyEventFn = Number.isInteger(debounce) && debounce > 0 ? Timing.debounce(keyHandler, debounce) :\n       keyHandler;\n\n      for (const event of events)\n      {\n         if (['keydown', 'keyup'].includes(event))\n         {\n            element.addEventListener(event, keyEventFn);\n         }\n         else\n         {\n            element.addEventListener(event, eventFn);\n         }\n      }\n\n      element.addEventListener('efx-trigger', customEventFn);\n\n      if (contextmenu) { element.addEventListener('contextmenu', eventFn); }\n\n      // Update options with any action assigned initial options.\n      if (isObject(initialOptions)) { updateOptions(initialOptions); }\n\n      return {\n         update: updateOptions,\n         destroy: () =>\n         {\n            for (const event of events)\n            {\n               if (['keydown', 'keyup'].includes(event))\n               {\n                  element.removeEventListener(event, keyEventFn);\n               }\n               else\n               {\n                  element.removeEventListener(event, eventFn);\n               }\n            }\n\n            element.removeEventListener('efx-trigger', customEventFn);\n\n            if (contextmenu) { element.removeEventListener('contextmenu', eventFn); }\n         }\n      };\n   };\n}\n\n/**\n * Defines the classic Material Design ripple effect as an action that is attached to an elements focus and blur events.\n * `rippleFocus` is a wrapper around the returned action. This allows it to be easily used as a prop.\n *\n * Note: A negative one translateZ transform is applied to the added spans allowing other content to be layered on top\n * with a positive translateZ.\n *\n * Note: The ripple effect requires the `efx` element to have overflow hidden. This is set inline when the effect is\n * applied.\n *\n * If providing the `selector` option a target child element will be registered for the focus events otherwise the\n * first child is targeted with a final fallback of the element assigned to this action.\n *\n * Styling: There is a single CSS variable `--tjs-action-ripple-background-focus` that can be set to control the\n * background with a fallback to `--tjs-action-ripple-background`.\n *\n * @param {object}   [opts] - Optional parameters.\n *\n * @param {number}   [opts.duration=300] - Duration in milliseconds.\n *\n * @param {boolean}  [opts.enabled=true] - Enabled state.\n *\n * @param {string}   [opts.background='rgba(255, 255, 255, 0.7)'] - A valid CSS background attribute.\n *\n * @param {string}   [opts.selector] - A valid CSS selector string.\n *\n * @returns {(import('svelte/action').Action<\n *    HTMLElement,\n *    import('svelte/action').ActionReturn<import('./types').ComposableActionOptions.RippleFocus>\n * >)} Actual `rippleFocus` Action.\n */\nfunction rippleFocus({ background = 'rgba(255, 255, 255, 0.7)', duration = 300, enabled = true, selector } = {})\n{\n   return (element, initialOptions) =>\n   {\n      // Ripple requires the efx element to have the overflow hidden due to rendering content outside the boundary.\n      element.style.overflow = 'hidden';\n\n      const targetEl = typeof selector === 'string' ? element.querySelector(selector) :\n       A11yHelper.isFocusTarget(element.firstChild) ? element.firstChild : element;\n\n      /**\n       * Holds any reference to targetEl active window when focused.\n       *\n       * @type {Window}\n       */\n      let activeWindow = void 0;\n\n      /**\n       * True when `targetEl` is the activeElement when Window blurs.\n       *\n       * @type {boolean}\n       */\n      let windowBlurActiveFocus = false;\n\n      let clientX = -1;\n      let clientY = -1;\n\n      /** @type {HTMLSpanElement[]} */\n      const activeSpans = [];\n\n      /**\n       * WAAPI ripple animation on blur.\n       */\n      function blurRipple(event, force = false)\n      {\n         if (!enabled) { return; }\n\n         // When clicking outside the browser window or to another tab `document.activeElement` remains\n         // the same despite blur being invoked; IE the target element.\n         if (!force && (activeSpans.length === 0 || targetEl === CrossWindow.getActiveElement(targetEl))) { return; }\n\n         for (const span of activeSpans)\n         {\n            try\n            {\n               // Always use main realm / window for animation even when cross-realm.\n\n               const effect = new window.KeyframeEffect(span,\n                  [\n                     {  // from\n                        transform: 'scale(3)',\n                        opacity: 0.3,\n                     },\n                     {  // to\n                        transform: 'scale(.7)',\n                        opacity: 0.0,\n                     }\n                  ],\n                  {\n                     duration,\n                     fill: 'forwards'\n                  }\n               );\n\n               const animation = new window.Animation(effect);\n\n               animation.onfinish = () =>\n               {\n                  if (span) { span.remove(); }\n               };\n\n               animation.play();\n            }\n            catch\n            {\n               if (span) { span.remove(); }\n            }\n         }\n\n         // Remove all active spans as they are now animating out.\n         activeSpans.length = 0;\n\n         // Sanity to clean up event listener despite it being `once`.\n         activeWindow?.removeEventListener?.('blur', blurRippleForced);\n         activeWindow = void 0;\n      }\n\n      /**\n       * Invoked by window blur event to force blur ripple when active window loses focus.\n       */\n      function blurRippleForced(event)\n      {\n         // If targetEl is the active element when Window blurs keep track of this state to defer focus when the Window\n         // regains focus.\n         if (CrossWindow.isActiveElement(targetEl)) { windowBlurActiveFocus = true; }\n\n         // Force blur\n         blurRipple(event, true);\n      }\n\n      /**\n       * WAAPI ripple animation on focus.\n       */\n      async function focusRipple()\n      {\n         // If the window was blurred and regains focus a 2 rAF delay occurs to recheck if `targetEl` is the active\n         // element. This handles the case when the exiting active element receives automatic focus despite another\n         // element being activated when the browser window is focused again ensuring that the proper actual active\n         // element receives the focus animation.\n         if (windowBlurActiveFocus)\n         {\n            windowBlurActiveFocus = false;\n\n            await nextAnimationFrame(2);\n\n            if (!CrossWindow.isActiveElement(targetEl)) { return; }\n         }\n\n         if (!enabled) { return; }\n\n         // If already focused and the span exists do not create another ripple effect.\n         if (activeSpans.length > 0) { return; }\n\n         const elementRect = element.getBoundingClientRect();\n\n         // The order of events don't always occur with a pointer event first. In this case use the center of the\n         // element as the click point. Mostly this is seen when the focused target element has a followup event off\n         // the app / screen. If the next pointer down occurs on the target element the focus callback occurs before\n         // pointer down in Chrome and Firefox.\n         const actualX = clientX >= 0 ? clientX : elementRect.left + (elementRect.width / 2);\n         const actualY = clientY >= 0 ? clientY : elementRect.top + (elementRect.height / 2);\n\n         const diameter = Math.max(elementRect.width, elementRect.height);\n         const radius = diameter / 2;\n         const left = `${actualX - (elementRect.left + radius)}px`;\n         const top = `${actualY - (elementRect.top + radius)}px`;\n\n         const span = CrossWindow.getDocument(element).createElement('span');\n\n         span.style.position = 'absolute';\n         span.style.width = `${diameter}px`;\n         span.style.height = `${diameter}px`;\n         span.style.left = left;\n         span.style.top = top;\n\n         span.style.background =\n          `var(--tjs-action-ripple-background-focus, var(--tjs-action-ripple-background, ${background}))`;\n\n         span.style.borderRadius = '50%';\n         span.style.pointerEvents = 'none';\n         span.style.transform = 'translateZ(-1px)';\n\n         element.prepend(span);\n\n         try\n         {\n            // Always use main realm / window for animation even when cross-realm.\n\n            const effect = new window.KeyframeEffect(span,\n               [\n                  {  // from\n                     transform: 'scale(.7)',\n                     opacity: 0.5,\n                  },\n                  {  // to\n                     transform: 'scale(3)',\n                     opacity: 0.3,\n                  }\n               ],\n               {\n                  duration,\n                  fill: 'forwards'\n               }\n            );\n\n            const animation = new window.Animation(effect);\n            animation.play();\n\n            activeSpans.push(span);\n\n            // Forced blur ripple when current window is blurred.\n            activeWindow = targetEl.ownerDocument.defaultView;\n            activeWindow.addEventListener('blur', blurRippleForced, { once: true });\n         }\n         catch\n         {\n            if (span) { span.remove(); }\n         }\n\n         // Reset stored pointer position.\n         clientX = clientY = -1;\n      }\n\n      /**\n       * Store the pointer down location for the origination of the ripple.\n       *\n       * @param {PointerEvent} e - A PointerEvent.\n       */\n      function onPointerDown(e)\n      {\n         if (!enabled) { return; }\n\n         clientX = e.clientX;\n         clientY = e.clientY;\n      }\n\n      /**\n       * Updates options.\n       *\n       * @param {import('./types').ComposableActionOptions.RippleFocus} newOptions - Options to update.\n       */\n      function updateOptions(newOptions)\n      {\n         if (typeof newOptions?.enabled === 'boolean' && enabled !== newOptions?.enabled)\n         {\n            enabled = newOptions.enabled;\n            if (!enabled) { blurRipple(); }\n         }\n      }\n\n      targetEl.addEventListener('pointerdown', onPointerDown);\n      targetEl.addEventListener('blur', blurRipple);\n      targetEl.addEventListener('focus', focusRipple);\n\n      // Update options with any action assigned initial options.\n      if (isObject(initialOptions)) { updateOptions(initialOptions); }\n\n      return {\n         update: updateOptions,\n         destroy: () =>\n         {\n            targetEl.removeEventListener('pointerdown', onPointerDown);\n            targetEl.removeEventListener('blur', blurRipple);\n            targetEl.removeEventListener('focus', focusRipple);\n\n            activeWindow?.removeEventListener?.('blur', blurRippleForced);\n            activeWindow = void 0;\n         }\n      };\n   };\n}\n\nexport { animateWAAPI, composable, ripple, rippleFocus };\n//# sourceMappingURL=index.js.map\n","import { FoundryStyles }   from '@typhonjs-fvtt/runtime/svelte/application';\nimport { StyleManager }    from '@typhonjs-fvtt/runtime/util/dom/style';\n\n/**\n * Provides global CSS variable configuration based on Foundry styles loaded.\n */\nclass FVTTConfigure\n{\n   static #initialized = false;\n\n   static initialize()\n   {\n      if (this.#initialized) { return; }\n\n      // Remove `0.2.x` and below root styles. -- TODO: REMOVE AT `0.5.0`\n      document?.['#__tjs-root-styles']?.remove?.();\n\n      const manager = StyleManager.create({\n         id: '__tjs-standard-vars',\n         version: '0.0.2',\n         layerName: 'variables.tjs-standard-vars',\n         rules: {\n            // Ideally `:root` would be used, but Foundry defines dark them CSS vars in `body`. For scoping reasons\n            // `body` must be used to make these core vars accessible to TRL CSS vars.\n            themeDark: 'body, .themed.theme-dark',\n            themeLight: '.themed.theme-light'\n         }\n      });\n\n      // Early out if the style manager version is outdated.\n      if (!manager?.isConnected)\n      {\n         this.#initialized = true;\n         return;\n      }\n\n      this.#initialized = true;\n\n      const themeDarkRoot = manager.get('themeDark');\n      const themeLight = manager.get('themeLight');\n\n      // Initialize constants for any theme.\n      this.#rootConstants(themeDarkRoot);\n\n      // Initialize TRL action variables.\n      this.#actions(themeDarkRoot, themeLight);\n\n      // Initialize TRL button variables.\n      this.#buttons(themeDarkRoot, themeLight);\n\n      // Initialize generic component variables.\n      this.#component(themeDarkRoot, themeLight);\n\n      // TRL form / input components.\n      this.#form(themeDarkRoot, themeLight);\n\n      // All popup / menu components.\n      this.#popup(themeDarkRoot, themeLight);\n\n      // Handle `PopOut!` module hooks to allow applications to pop out to their own browser window ------------------\n\n      Hooks.on('PopOut:loading', (app, popout) =>\n      {\n         // Clone and load the `standard` library CSS variables into the new window document regardless of the app type.\n         popout.document.addEventListener('DOMContentLoaded',\n          () => manager.clone({ document: popout.document, force: true }));\n      });\n   }\n\n   /**\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeDarkRoot -\n    *\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeLight -\n    */\n   static #actions(themeDarkRoot, themeLight)\n   {\n      /**\n       * Assign all TyphonJS CSS variables to Foundry defaults.\n       */\n\n      themeDarkRoot.setProperties({\n         '--tjs-action-ripple-background': 'linear-gradient(64.5deg, rgba(245, 116, 185, 1) 40%, rgba(89, 97, 223, 1) 60%)',\n      });\n\n      themeLight.setProperties({\n         '--tjs-action-ripple-background': 'rgba(0, 0, 0, 0.35)',\n      });\n   }\n\n   /**\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeDarkRoot -\n    *\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeLight -\n    */\n   static #buttons(themeDarkRoot, themeLight)\n   {\n      const opts = { camelCase: true };\n\n      const propsDark = FoundryStyles.ext.get('.themed.theme-dark button', opts);\n      const propsLight = FoundryStyles.ext.get('.themed.theme-light button', opts);\n\n      const propsButton = FoundryStyles.ext.get('button', opts);\n\n      themeDarkRoot.setProperties({\n         // Constant properties\n         '--tjs-form-button-font-family': propsButton?.fontFamily ?? 'var(--font-sans)',\n         '--tjs-form-button-font-size': propsButton?.fontSize ?? 'var(--font-size-14)',\n         '--tjs-form-button-transition': propsButton?.transition ?? '0.5s',\n\n         // Unique TRL properties.\n         '--tjs-icon-button-background-hover': 'rgba(255, 255, 255, 0.15)',\n         '--tjs-icon-button-background-selected': 'rgba(255, 255, 255, 0.25)',\n\n         // Themed properties\n         '--tjs-icon-button-color': propsDark?.['--button-text-color'] ?? 'var(--color-light-3)',\n         '--tjs-icon-button-color-hover': propsDark?.['--button-hover-text-color'] ?? 'var(--color-light-1)'\n      });\n\n      themeLight.setProperties({\n         // Unique TRL properties.\n         '--tjs-icon-button-background-hover': 'rgba(0, 0, 0, 0.15)',\n         '--tjs-icon-button-background-selected': 'rgba(0, 0, 0, 0.25)',\n\n         // Themed properties\n         '--tjs-icon-button-color': propsLight?.['--button-text-color'] ?? 'var(--color-dark-1)',\n         '--tjs-icon-button-color-hover': 'var(--tjs-icon-button-color)'   // Core light theme doesn't have an appropriate highlight.\n      });\n   }\n\n   /**\n    * Generic reusable component variables.\n    *\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeDarkRoot -\n    *\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeLight -\n    */\n   static #component(themeDarkRoot, themeLight)\n   {\n      // Root / dark theme.\n      {\n         /**\n          * All input related components including: TJSSelect,\n          */\n         const props = FoundryStyles.ext.get('input[type=\"text\"]', {\n            camelCase: true,\n            resolve: '.themed.theme-dark input'\n         });\n\n         themeDarkRoot.setProperties({\n            // Constants across dark / light theme:\n            '--tjs-component-border-radius': props?.borderRadius ?? '4px',\n\n            '--tjs-side-slide-layer-item-border-color-hover': 'var(--color-warm-2)',\n            '--tjs-side-slide-layer-item-color': 'var(--color-text-secondary)',\n            '--tjs-side-slide-layer-item-color-hover': 'var(--color-text-primary)',\n            '--tjs-side-slide-layer-item-host-color': 'var(--color-text-primary)',\n\n            // Color / theme related.\n            '--tjs-component-border': '1px solid var(--color-cool-3)',   // Core dark theme does not have input borders.\n            '--tjs-component-overlay-background': 'rgba(208, 184, 163, 0.1)',\n\n            '--tjs-side-slide-layer-item-background': 'rgba(180, 180, 180, 0.3)',\n            '--tjs-side-slide-layer-item-border': 'solid 2px rgba(60, 60, 60, 0.9)',\n            '--tjs-side-slide-layer-item-host-background': 'linear-gradient(135deg, rgba(90, 90, 90, 0.95) 10%, rgba(52, 51, 52, 0.95) 90%)',\n            '--tjs-side-slide-layer-item-host-border': 'solid 2px rgba(80, 80, 80, 0.9)'\n         });\n      }\n\n      // Light theme overrides.\n\n      {\n         /**\n          * All input related components including: TJSSelect,\n          */\n         const props = FoundryStyles.ext.get('input[type=\"text\"]', {\n            camelCase: true,\n            resolve: '.themed.theme-light input'\n         });\n\n         themeLight.setProperties({\n            // Color / theme related.\n            '--tjs-component-border': props?.border ?? '1px solid var(--color-dark-6)',\n            '--tjs-component-overlay-background': 'rgba(0, 0, 0, 0.1)',\n\n            '--tjs-side-slide-layer-item-background': 'rgba(180, 180, 180, 0.7)',\n            '--tjs-side-slide-layer-item-border': 'solid 2px rgba(100, 100, 100, 0.9)',\n            '--tjs-side-slide-layer-item-host-background': 'linear-gradient(135deg, rgba(180, 180, 180, 0.9) 10%, rgba(217, 216, 200, 0.9) 90%)',\n            '--tjs-side-slide-layer-item-host-border': 'solid 2px rgba(120, 120, 120, 0.9)',\n         });\n      }\n   }\n\n   /**\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeDarkRoot -\n    *\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeLight -\n    */\n   static #form(themeDarkRoot, themeLight)\n   {\n      // Root / dark theme.\n      {\n         /**\n          * All input related components including: TJSSelect,\n          */\n         const props = FoundryStyles.ext.get('input[type=\"text\"]', {\n            camelCase: true,\n            resolve: '.themed.theme-dark input'\n         });\n\n         const propsFocus = FoundryStyles.ext.get(['input[type=\"text\"]', 'input[type=\"text\"]:focus'], {\n            camelCase: true,\n            resolve: ['.themed.theme-dark input', '.themed.theme-dark input:focus']\n         });\n\n         const propsPlaceholder = FoundryStyles.ext.get('::placeholder', {\n            camelCase: true,\n            resolve: '.themed.theme-dark input'\n         });\n\n         themeDarkRoot.setProperties({\n            // Constants across dark / light theme:\n            '--tjs-input-height': props?.height ?? 'var(--input-height)',\n            '--tjs-input-line-height': props?.lineHeight ?? 'var(--input-height)',\n            '--tjs-input-padding': props?.padding ?? '0px 0.5rem',\n            '--tjs-input-width': props?.width ?? '100%',\n            '--tjs-input-border-radius': props?.borderRadius ?? '4px',\n\n            // Color / theme related.\n            '--tjs-input-background': props?.background ?? 'var(--color-cool-4)',\n            '--tjs-input-color': props?.color ?? 'var(--color-light-3)',\n            '--tjs-input-color-focus': propsFocus?.color ?? 'var(--color-light-1)',\n            '--tjs-input-outline': props?.outline ?? 'transparent solid 1px',\n            '--tjs-input-outline-focus': propsFocus?.outline ?? '2px solid var(--color-cool-3)',\n            '--tjs-input-outline-offset-focus': propsFocus?.outlineOffset ?? '-2px',\n            '--tjs-input-placeholder-color': propsPlaceholder?.color ?? 'var(--color-light-5)',\n            '--tjs-input-transition': props?.transition ?? 'outline-color 0.5s',\n\n            // Set default values that are only to be referenced and not set.\n            '--_tjs-default-input-height': props?.height ?? 'var(--input-height)',\n\n            // Set directly / no lookup:\n            '--tjs-input-checkbox-border': 'none',\n            '--tjs-input-range-border': 'none',\n         });\n      }\n\n      // Light theme overrides.\n\n      {\n         /**\n          * All input related components including: TJSSelect,\n          */\n         const props = FoundryStyles.ext.get('input[type=\"text\"]', {\n            camelCase: true,\n            resolve: '.themed.theme-light input'\n         });\n\n         const propsFocus = FoundryStyles.ext.get(['input[type=\"text\"]', 'input[type=\"text\"]:focus'], {\n            camelCase: true,\n            resolve: ['.themed.theme-light input', '.themed.theme-light input:focus']\n         });\n\n         const propsPlaceholder = FoundryStyles.ext.get('::placeholder', {\n            camelCase: true,\n            resolve: '.themed.theme-light input'\n         });\n\n         themeLight.setProperties({\n            // Color / theme related.\n            '--tjs-input-background': props?.background ?? 'rgba(0, 0, 0, 0.1)',\n            '--tjs-input-border': props?.border ?? '1px solid var(--color-dark-6)',\n            '--tjs-input-color': props?.color ?? 'var(--color-dark-2)',\n            '--tjs-input-color-focus': propsFocus?.color ?? 'var(--color-dark-1)',\n            '--tjs-input-outline': props?.outline ?? 'var(--color-warm-2)',\n            '--tjs-input-outline-focus': propsFocus?.outline ?? '2px solid var(--color-warm-2)',\n            '--tjs-input-outline-offset-focus': propsFocus?.outlineOffset ?? '-2px',\n            '--tjs-input-placeholder-color': propsPlaceholder?.color ?? 'var(--color-dark-4)',\n         });\n      }\n   }\n\n   /**\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeDarkRoot -\n    *\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeLight -\n    */\n   static #popup(themeDarkRoot, themeLight)\n   {\n      const propsMenuItem = FoundryStyles.ext.get('#context-menu li.context-item', { camelCase: true });\n\n      const propsMenuDark = FoundryStyles.ext.get('#context-menu', {\n         camelCase: true,\n         resolve: ['.themed.theme-dark #context-menu']\n      });\n\n      const propsMenuItemDark = FoundryStyles.ext.get('#context-menu li.context-item:hover', {\n         camelCase: true,\n         resolve: ['.themed.theme-dark #context-menu']\n      });\n\n      const propsMenuLight = FoundryStyles.ext.get('#context-menu', {\n         camelCase: true,\n         resolve: ['.themed.theme-light #context-menu']\n      });\n\n      const propsMenuItemLight = FoundryStyles.ext.get('#context-menu li.context-item:hover', {\n         camelCase: true,\n         resolve: ['.themed.theme-light #context-menu']\n      });\n\n      themeDarkRoot.setProperties({\n         // Direct mapping for TJSContextMenu overrides.\n         '--tjs-context-menu-background': 'var(--tjs-menu-background)',\n         '--tjs-context-menu-border': 'var(--tjs-menu-border)',\n         '--tjs-context-menu-border-radius': 'var(--tjs-menu-border-radius)',\n         '--tjs-context-menu-box-shadow': 'var(--tjs-menu-box-shadow)',\n         '--tjs-context-menu-color': 'var(--tjs-menu-color)',\n         '--tjs-context-menu-font-size': 'var(--tjs-menu-font-size)',\n\n         '--tjs-context-menu-item-background-highlight': 'var(--tjs-menu-item-background-highlight)',\n         '--tjs-context-menu-item-border-highlight': 'var(--tjs-menu-item-border-highlight)',\n         '--tjs-context-menu-item-color-highlight': 'var(--tjs-menu-item-color-highlight)',\n\n         // Constant applied across dark / light\n         '--tjs-menu-item-border': propsMenuItem?.border ?? '1px solid transparent',\n         '--tjs-menu-item-line-height': propsMenuItem?.lineHeight ?? '15px',\n         '--tjs-menu-item-padding': propsMenuItem?.padding ?? '8px',\n\n         '--tjs-context-menu-item-border': 'var(--tjs-menu-item-border)',\n         '--tjs-context-menu-item-line-height': 'var(--tjs-menu-item-line-height)',\n         '--tjs-context-menu-item-padding': 'var(--tjs-menu-item-padding)',\n\n         // Dark theme\n\n         '--tjs-menu-background': propsMenuDark?.background ?? 'var(--color-cool-5)',\n         '--tjs-menu-border': propsMenuDark?.border ?? '1px solid var(--color-cool-3)',\n         '--tjs-menu-border-radius': propsMenuDark?.borderRadius ?? '5px',\n         '--tjs-menu-box-shadow': propsMenuDark?.boxShadow ?? 'rgba(0, 0, 0, 0.45) 0px 3px 6px',\n         '--tjs-menu-color': propsMenuDark?.color ?? 'var(--color-text-secondary)',\n         '--tjs-menu-font-size': propsMenuItem?.fontSize ?? 'var(--font-size-12)',\n\n         '--tjs-menu-item-background-highlight': propsMenuItemDark?.background ?? 'var(--color-dark-1)',\n         '--tjs-menu-item-border-highlight': propsMenuItemDark?.border ?? '1px solid var(--color-cool-4)',\n         '--tjs-menu-item-color-highlight': propsMenuItemDark?.color ?? 'var(--color-text-emphatic)',\n\n         // `popup` is for components that are slightly elevated, but connected to an application;\n         // see: TJSMenu / TJSContextMenu / TJSColordPicker\n         '--tjs-default-popup-background': propsMenuDark?.background ?? 'var(--color-cool-5)',\n         '--tjs-default-popup-border': propsMenuDark?.border ?? '1px solid var(--color-cool-3)',\n         '--tjs-default-popup-box-shadow': propsMenuDark?.boxShadow ?? 'rgba(0, 0, 0, 0.45) 0px 3px 6px',\n         '--tjs-default-popup-primary-color': propsMenuDark?.color ?? 'var(--color-text-secondary)',\n         '--tjs-default-popup-highlight-color': propsMenuItemDark?.color ?? 'var(--color-text-emphatic)',\n\n         // `popover` is for components that are elevated and independent; see: TJSContextMenu\n         '--tjs-default-popover-border': propsMenuDark?.border ?? '1px solid var(--color-border-dark, #000)',\n         '--tjs-default-popover-box-shadow': '0 0 10px var(--color-shadow-dark, #000)',\n      });\n\n      themeLight.setProperties({\n         // Direct mapping for TJSContextMenu overrides.\n         '--tjs-context-menu-background': 'var(--tjs-menu-background)',\n         '--tjs-context-menu-border': 'var(--tjs-menu-border)',\n         '--tjs-context-menu-border-radius': 'var(--tjs-menu-border-radius)',\n         '--tjs-context-menu-box-shadow': 'var(--tjs-menu-box-shadow)',\n         '--tjs-context-menu-color': 'var(--tjs-menu-color)',\n         '--tjs-context-menu-font-size': 'var(--tjs-menu-font-size)',\n\n         '--tjs-context-menu-item-border': 'var(--tjs-menu-item-border)',\n         '--tjs-context-menu-item-background-highlight': 'var(--tjs-menu-item-background-highlight)',\n         '--tjs-context-menu-item-border-highlight': 'var(--tjs-menu-item-border-highlight)',\n         '--tjs-context-menu-item-color-highlight': 'var(--tjs-menu-item-color-highlight)',\n\n         '--tjs-menu-background': propsMenuLight?.background ?? '#d9d8c8',\n         '--tjs-menu-border': propsMenuLight?.border ?? '1px solid #999',\n         '--tjs-menu-border-radius': propsMenuLight?.borderRadius ?? '5px',\n         '--tjs-menu-box-shadow': propsMenuLight?.boxShadow ?? 'rgba(0, 0, 0, 0.45) 0px 3px 6px',\n         '--tjs-menu-color': propsMenuLight?.color ?? 'var(--color-text-secondary)',\n\n         '--tjs-menu-item-background-highlight': propsMenuItemLight?.background ?? '#f0f0e0',\n         '--tjs-menu-item-border-highlight': propsMenuItemLight?.border ?? '1px solid #999',\n         '--tjs-menu-item-color-highlight': propsMenuItemLight?.color ?? 'var(--color-text-emphatic)',\n\n         '--tjs-default-popup-background': propsMenuLight?.background ?? '#d9d8c8',\n         '--tjs-default-popup-border': propsMenuLight?.border ?? '1px solid #999',\n         '--tjs-default-popup-box-shadow': propsMenuLight?.boxShadow ?? 'rgba(0, 0, 0, 0.45) 0px 3px 6px',\n         '--tjs-default-popup-primary-color': propsMenuLight?.color ?? 'var(--color-text-secondary)',\n         '--tjs-default-popup-highlight-color': propsMenuItemLight?.color ?? 'var(--color-text-emphatic)',\n      });\n   }\n\n   /**\n    * @param {import('@typhonjs-fvtt/runtime/util/dom/style').StyleManager.RuleManager}  themeDarkRoot -\n    */\n   static #rootConstants(themeDarkRoot)\n   {\n      /**\n       * Assign all TyphonJS thematic CSS reversals for core Foundry styles.\n       */\n      themeDarkRoot.setProperties({\n         // For checkbox Foundry core styles override.\n         '--tjs-input-checkbox-appearance': 'none',\n      });\n\n      /**\n       * Assign all TyphonJS thematic CSS variables.\n       */\n\n      themeDarkRoot.setProperties({\n         // For components w/ transparent background checkered pattern.\n         '--tjs-checkerboard-background-dark': 'rgb(205, 205, 205)',\n         '--tjs-checkerboard-background-10': `url('data:image/svg+xml;utf8,<svg preserveAspectRatio=\"none\"  viewBox=\"0 0 10 10\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"0\" y=\"0\" width=\"5\" height=\"5\" fill=\"transparent\" /><rect x=\"5\" y=\"5\" width=\"5\" height=\"5\" fill=\"transparent\" /><rect x=\"5\" y=\"0\" width=\"5\" height=\"5\" fill=\"white\" /><rect x=\"0\" y=\"5\" width=\"5\" height=\"5\" fill=\"white\" /></svg>') 0 0 / 10px 10px, var(--tjs-checkerboard-background-dark, rgb(205, 205, 205))`\n      });\n   }\n}\n\nFVTTConfigure.initialize();\n","<script>\n   /**\n    * ### CSS Variables\n    * ```\n    * --tjs-default-text-shadow-focus-hover: system default\n    * --tjs-default-outline-focus-visible: undefined; global replacement for focus-visible outline.\n    *\n    * --tjs-button-background\n    * --tjs-button-background-focus\n    * --tjs-button-background-focus-visible\n    * --tjs-button-background-hover\n    * --tjs-button-background-selected\n    * --tjs-button-border\n    * --tjs-button-border-radius\n    * --tjs-button-border-width\n    * --tjs-button-box-shadow-focus-visible\n    * --tjs-button-clip-path\n    * --tjs-button-clip-path-hover\n    * --tjs-button-clip-path-focus\n    * --tjs-button-cursor-disabled\n    * --tjs-button-diameter\n    * --tjs-button-outline-focus-visible\n    * --tjs-button-text-shadow-focus: undefined\n    * --tjs-button-text-shadow-hover: undefined\n    * --tjs-button-transition\n    * --tjs-button-transition-focus-visible\n    *\n    * --tjs-icon-button-background\n    * --tjs-icon-button-background-focus\n    * --tjs-icon-button-background-focus-visible\n    * --tjs-icon-button-background-hover\n    * --tjs-icon-button-background-selected\n    * --tjs-icon-button-border\n    * --tjs-icon-button-border-radius\n    * --tjs-icon-button-border-width\n    * --tjs-icon-button-box-shadow-focus-visible\n    * --tjs-icon-button-clip-path\n    * --tjs-icon-button-clip-path-focus\n    * --tjs-icon-button-clip-path-hover\n    * --tjs-icon-button-diameter\n    * --tjs-icon-button-outline-focus-visible\n    * --tjs-icon-button-text-shadow-focus: undefined\n    * --tjs-icon-button-text-shadow-hover: undefined\n    * --tjs-icon-button-transition\n    * --tjs-icon-button-transition-focus-visible\n    * ```\n    * @componentDocumentation\n    */\n   import { createEventDispatcher } from 'svelte';\n\n   import { inlineSvg }             from '@typhonjs-fvtt/runtime/svelte/action/dom/inline-svg';\n   import { applyStyles }           from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { popoverTooltip }        from '@typhonjs-fvtt/runtime/svelte/action/dom/tooltip';\n   import { AssetValidator }        from '@typhonjs-fvtt/runtime/util/browser';\n   import { isObject }              from '@typhonjs-fvtt/runtime/util/object';\n\n   export let button = void 0;\n\n   export let enabled = void 0;\n   export let icon = void 0;\n   export let tooltip = void 0;\n   export let tooltipDirection = void 0;\n   export let styles = void 0;\n   export let efx = void 0;\n   export let keyCode = void 0;\n   export let onPress = void 0;\n   export let onContextMenu = void 0;\n   export let clickPropagate = void 0;\n\n   const dispatch = createEventDispatcher();\n\n   const s_EFX_DEFAULT = () => {};\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: enabled = isObject(button) && typeof button.enabled === 'boolean' ? button.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: icon = isObject(button) && typeof button.icon === 'string' ? button.icon :\n    typeof icon === 'string' ? icon : void 0;\n\n   $: tooltip = isObject(button) && typeof button.tooltip === 'string' ? button.tooltip :\n    typeof tooltip === 'string' ? tooltip : '';\n\n   $: tooltipDirection = isObject(button) && typeof button.tooltipDirection === 'string' ? button.tooltipDirection :\n    typeof tooltipDirection === 'string' ? tooltipDirection : void 0;\n\n   $: styles = isObject(button) && isObject(button.styles) ? button.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: efx = isObject(button) && typeof button.efx === 'function' ? button.efx :\n    typeof efx === 'function' ? efx : s_EFX_DEFAULT;\n\n   $: keyCode = isObject(button) && typeof button.keyCode === 'string' ? button.keyCode :\n    typeof keyCode === 'string' ? keyCode : 'Enter';\n\n   $: onPress = isObject(button) && typeof button.onPress === 'function' ? button.onPress :\n    typeof onPress === 'function' ? onPress : void 0;\n\n   $: onContextMenu = isObject(button) && typeof button.onContextMenu === 'function' ? button.onContextMenu :\n    typeof onContextMenu === 'function' ? onContextMenu : void 0;\n\n   $: clickPropagate = isObject(button) && typeof button.clickPropagate === 'boolean' ? button.clickPropagate :\n    typeof clickPropagate === 'boolean' ? clickPropagate : false;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   let iconType;\n\n   $:\n   {\n      const result = AssetValidator.parseMedia({ url: icon, mediaTypes: AssetValidator.MediaTypes.img_svg });\n      iconType = result.valid ? result.elementType : 'font';\n   }\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /**\n    * Handle click event.\n    *\n    * @param {MouseEvent}    event -\n    */\n   function onClick(event)\n   {\n      if (!enabled) { return; }\n\n      // Ignore click events from `button` element coming from the keyboard.\n      if (event.detail === 0)\n      {\n         event.preventDefault();\n         event.stopImmediatePropagation();\n\n         return;\n      }\n\n      if (typeof onPress === 'function') { onPress({ event }); }\n\n      dispatch('press', { event });\n\n      if (!clickPropagate)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * @param {MouseEvent}   event -\n    */\n   function onContextMenuPress(event)\n   {\n      if (!enabled) { return; }\n\n      if (typeof onContextMenu === 'function') { onContextMenu({ event }); }\n\n      if (!clickPropagate)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * Consume / stop propagation of key down when key codes match.\n    *\n    * @param {KeyboardEvent}    event -\n    */\n   function onKeydown(event)\n   {\n      if (!enabled) { return; }\n\n      if (event.code === keyCode)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * Handle press event if key codes match.\n    *\n    * @param {KeyboardEvent}    event -\n    */\n   function onKeyup(event)\n   {\n      if (!enabled) { return; }\n\n      if (event.code === keyCode)\n      {\n         if (typeof onPress === 'function') { onPress({ event }); }\n\n         dispatch('press', { event });\n\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n</script>\n\n<!-- svelte-ignore a11y-click-events-have-key-events -->\n<div class=tjs-icon-button\n     class:disabled={!enabled}\n     use:applyStyles={styles}>\n    <button on:click={onClick}\n       on:contextmenu={onContextMenuPress}\n       on:keydown={onKeydown}\n       on:keyup={onKeyup}\n       on:click\n       on:contextmenu\n       tabindex={enabled ? 0 : null}\n       use:popoverTooltip={{ tooltip, direction: tooltipDirection }}\n       use:efx={{ enabled }}>\n       {#if icon}\n          {#if iconType === 'font'}\n             <i class={`icon ${icon}`}></i>\n          {:else if iconType === 'img'}\n             <img src={icon} alt=\"\" class=icon>\n          {:else if iconType === 'svg'}\n             <svg use:inlineSvg={{ src: icon }} class=icon></svg>\n          {/if}\n       {/if}\n    </button>\n</div>\n\n<style>\n    div {\n        pointer-events: none;\n        display: block;\n        flex: 0 0 var(--tjs-icon-button-diameter, var(--tjs-button-diameter, 2.5em));\n        height: var(--tjs-icon-button-diameter, var(--tjs-button-diameter, 2.5em));\n        width: var(--tjs-icon-button-diameter, var(--tjs-button-diameter, 2.5em));\n        align-self: center;\n        text-align: center;\n        user-select: none;\n        -webkit-tap-highlight-color: var(--tjs-default-webkit-tap-highlight-color, transparent);\n    }\n\n    div.disabled button {\n       color: #4b4a44; /* TODO replace with cssVariables default */\n       cursor: var(--tjs-button-cursor-disabled, var(--tjs-cursor-default, default));\n    }\n\n    div.disabled button:hover {\n       background: none;\n       clip-path: none;\n       text-shadow: none;\n    }\n\n    button {\n        display: inline-flex;\n        pointer-events: initial;\n        position: relative;\n\n        width: 100%;\n        height: 100%;\n\n        min-height: unset;\n        min-width: unset;\n\n        appearance: var(--tjs-icon-button-appearance, none);\n        background: var(--tjs-icon-button-background, var(--tjs-button-background));\n        border: var(--tjs-icon-button-border, var(--tjs-button-border));\n        border-radius: var(--tjs-icon-button-border-radius, var(--tjs-button-border-radius, 50%));\n        border-width: var(--tjs-icon-button-border-width, var(--tjs-button-border-width));\n        clip-path: var(--tjs-icon-button-clip-path, var(--tjs-button-clip-path, none));\n        color: var(--tjs-icon-button-color, currentColor);\n        cursor: var(--tjs-cursor-pointer, pointer);\n        font-family: var(--tjs-icon-button-font-family, var(--tjs-button-font-family));\n        font-size: var(--tjs-icon-button-font-size, var(--tjs-button-font-size, inherit));\n        margin: var(--tjs-icon-button-margin);\n        padding: var(--tjs-icon-button-padding, 20%);\n        transform-style: preserve-3d;\n        transition: var(--tjs-icon-button-transition, var(--tjs-button-transition, background 0.2s ease-in-out, clip-path 0.2s ease-in-out));\n        text-decoration: none;\n        user-select: none;\n    }\n\n    button:focus {\n        background: var(--tjs-icon-button-background-focus, none);\n        box-shadow: var(--tjs-icon-button-box-shadow-focus, none);\n        outline: var(--tjs-icon-button-outline-focus, none);\n        text-shadow: var(--tjs-icon-button-text-shadow-focus, var(--tjs-button-text-shadow-focus, var(--tjs-default-text-shadow-focus-hover)));\n        clip-path: var(--tjs-icon-button-clip-path-focus, var(--tjs-icon-button-clip-path, var(--tjs-button-clip-path-focus, var(--tjs-button-clip-path, none))));\n    }\n\n    button:focus-visible {\n        background: var(--tjs-icon-button-background-focus-visible, var(--tjs-button-background-focus-visible));\n        box-shadow: var(--tjs-icon-button-box-shadow-focus-visible, var(--tjs-button-box-shadow-focus-visible, var(--tjs-default-box-shadow-focus-visible)));\n        outline: var(--tjs-icon-button-outline-focus-visible, var(--tjs-button-outline-focus-visible, var(--tjs-default-outline-focus-visible, revert)));\n        transition: var(--tjs-icon-button-transition-focus-visible, var(--tjs-button-transition-focus-visible, var(--tjs-default-transition-focus-visible)));\n    }\n\n    button:hover {\n        background: var(--tjs-icon-button-background-hover, var(--tjs-button-background-hover));\n        clip-path: var(--tjs-icon-button-clip-path-hover, var(--tjs-icon-button-clip-path, var(--tjs-button-clip-path-hover, var(--tjs-button-clip-path, none))));\n        color: var(--tjs-icon-button-color-hover, currentColor);\n        text-shadow: var(--tjs-icon-button-text-shadow-hover, var(--tjs-button-text-shadow-hover, var(--tjs-default-text-shadow-focus-hover)));\n    }\n\n    .icon {\n        display: inline-flex;\n        justify-content: center;\n        align-items: center;\n        width: 100%;\n        height: 100%;\n        border-radius: var(--tjs-icon-button-border-radius, var(--tjs-button-border-radius, 50%));\n        transform: translateZ(1px);\n    }\n</style>\n","<script>\n   /**\n    * ### CSS Variables\n    *\n    * ```\n    * --tjs-default-text-shadow-focus-hover: system default\n    * --tjs-default-outline-focus-visible: undefined; global replacement for focus-visible outline.\n    *\n    * --tjs-button-background\n    * --tjs-button-background-focus\n    * --tjs-button-background-focus-visible\n    * --tjs-button-background-hover\n    * --tjs-button-background-selected\n    * --tjs-button-border\n    * --tjs-button-border-radius\n    * --tjs-button-border-width\n    * --tjs-button-box-shadow-focus-visible\n    * --tjs-button-clip-path\n    * --tjs-button-clip-path-focus\n    * --tjs-button-clip-path-hover\n    * --tjs-button-cursor-disabled\n    * --tjs-button-diameter\n    * --tjs-button-outline-focus-visible\n    * --tjs-button-text-shadow-focus: undefined\n    * --tjs-button-text-shadow-hover: undefined\n    * --tjs-button-transition\n    * --tjs-button-transition-focus-visible\n    *\n    * --tjs-icon-button-background\n    * --tjs-icon-button-background-focus\n    * --tjs-icon-button-background-focus-visible\n    * --tjs-icon-button-background-hover\n    * --tjs-icon-button-background-selected\n    * --tjs-icon-button-border\n    * --tjs-icon-button-border-radius\n    * --tjs-icon-button-border-width\n    * --tjs-icon-button-box-shadow-focus-visible\n    * --tjs-icon-button-clip-path\n    * --tjs-icon-button-clip-path-focus\n    * --tjs-icon-button-clip-path-hover\n    * --tjs-icon-button-diameter\n    * --tjs-icon-button-outline-focus-visible\n    * --tjs-icon-button-text-shadow-focus: undefined\n    * --tjs-icon-button-text-shadow-hover: undefined\n    * --tjs-icon-button-transition\n    * --tjs-icon-button-transition-focus-visible\n    * ```\n    * @componentDocumentation\n    */\n   import { createEventDispatcher }    from 'svelte';\n\n   import { inlineSvg }                from '@typhonjs-fvtt/runtime/svelte/action/dom/inline-svg';\n   import { applyStyles }              from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { popoverTooltip }           from '@typhonjs-fvtt/runtime/svelte/action/dom/tooltip';\n   import { isMinimalWritableStore }   from '@typhonjs-fvtt/runtime/svelte/store/util';\n   import { AssetValidator }           from '@typhonjs-fvtt/runtime/util/browser';\n   import { isObject }                 from '@typhonjs-fvtt/runtime/util/object';\n\n   export let button = void 0;\n\n   export let enabled = void 0;\n   export let icon = void 0;\n   export let tooltip = void 0;\n   export let tooltipDirection = void 0;\n   export let tooltipSelected = void 0;\n   export let store = void 0;\n   export let styles = void 0;\n   export let efx = void 0;\n   export let keyCode = void 0;\n   export let onPress = void 0;\n   export let onClose = void 0;\n   export let onContextMenu = void 0;\n   export let clickPropagate = void 0;\n\n   const dispatch = createEventDispatcher();\n\n   const s_EFX_DEFAULT = () => {};\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: enabled = isObject(button) && typeof button.enabled === 'boolean' ? button.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: icon = isObject(button) && typeof button.icon === 'string' ? button.icon :\n    typeof icon === 'string' ? icon : void 0;\n\n   $: tooltip = isObject(button) && typeof button.tooltip === 'string' ? button.tooltip :\n    typeof tooltip === 'string' ? tooltip : '';\n\n   $: tooltipDirection = isObject(button) && typeof button.tooltipDirection === 'string' ? button.tooltipDirection :\n    typeof tooltipDirection === 'string' ? tooltipDirection : void 0;\n\n   $: tooltipSelected = isObject(button) && typeof button.tooltipSelected === 'string' ? button.tooltipSelected :\n    typeof tooltipSelected === 'string' ? tooltipSelected : '';\n\n   $: store = isObject(button) && isMinimalWritableStore(button.store) ? button.store : isMinimalWritableStore(store) ?\n    store : void 0;\n\n   $: styles = isObject(button) && isObject(button.styles) ? button.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: efx = isObject(button) && typeof button.efx === 'function' ? button.efx :\n    typeof efx === 'function' ? efx : s_EFX_DEFAULT;\n\n   $: keyCode = isObject(button) && typeof button.keyCode === 'string' ? button.keyCode :\n    typeof keyCode === 'string' ? keyCode : 'Enter';\n\n   $: onPress = isObject(button) && typeof button.onPress === 'function' ? button.onPress :\n    typeof onPress === 'function' ? onPress : void 0;\n\n   $: onClose = isObject(button) && typeof button.onClose === 'function' ? button.onClose :\n    typeof onClose === 'function' ? onClose : void 0;\n\n   $: onContextMenu = isObject(button) && typeof button.onContextMenu === 'function' ? button.onContextMenu :\n    typeof onContextMenu === 'function' ? onContextMenu : void 0;\n\n   $: clickPropagate = isObject(button) && typeof button.clickPropagate === 'boolean' ? button.clickPropagate :\n    typeof clickPropagate === 'boolean' ? clickPropagate : false;\n\n   let buttonEl;\n   let selected = false;\n\n   $: if (store) { selected = $store; }\n\n   $: if (store && !enabled) { $store = false; }\n\n   // Chose the current tooltip when `selected` changes; if there is no `tooltipSelected` fallback to `tooltip`.\n   $: tooltipCurrent = selected && tooltipSelected !== '' ? tooltipSelected : tooltip\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   let iconType;\n\n   $:\n   {\n      const result = AssetValidator.parseMedia({ url: icon, mediaTypes: AssetValidator.MediaTypes.img_svg });\n      iconType = result.valid ? result.elementType : 'font';\n   }\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /**\n    * Handle click event.\n    *\n    * @param {MouseEvent}    event -\n    */\n   function onClick(event)\n   {\n      if (!enabled) { return; }\n\n      // Ignore click events from `button` element coming from the keyboard.\n      if (event.detail === 0)\n      {\n         event.preventDefault();\n         event.stopImmediatePropagation();\n\n         return;\n      }\n\n      selected = !selected;\n      if (store) { store.set(selected); }\n\n      if (typeof onPress === 'function') { onPress({ event, selected }); }\n\n      dispatch('press', { event, selected });\n\n      if (!clickPropagate)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * @param {MouseEvent}   event -\n    */\n   function onContextMenuPress(event)\n   {\n      if (!enabled) { return; }\n\n      if (typeof onContextMenu === 'function') { onContextMenu({ event, selected }); }\n\n      if (!clickPropagate)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * In this case we can't set pointer-events: none for the div due to the slotted component, so process clicks on the\n    * div in respect to clickPropagate.\n    *\n    * @param {MouseEvent} event -\n    */\n   function onClickDiv(event)\n   {\n      if (!enabled) { return; }\n\n      if (!clickPropagate)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * Handles `close:popup` event from any children components like TJSMenu.\n    */\n   function onClosePopup(event)\n   {\n      selected = false;\n      if (store) { store.set(false); }\n\n      if (typeof onClose === 'function') { onClose({ event, selected }); }\n\n      // The close event was triggered from a key press, so focus the anchor element / button.\n      if (typeof event?.detail?.keyboardFocus === 'boolean' && event.detail.keyboardFocus && buttonEl?.isConnected)\n      {\n         buttonEl.focus();\n\n         event.stopPropagation();\n         event.preventDefault();\n      }\n   }\n\n   /**\n    * Consume / stop propagation of key down when key codes match.\n    *\n    * @param {KeyboardEvent}    event -\n    */\n   function onKeydown(event)\n   {\n      if (!enabled) { return; }\n\n      if (event.code === keyCode)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * Handle press event if key codes match.\n    *\n    * @param {KeyboardEvent}    event -\n    */\n   function onKeyup(event)\n   {\n      if (!enabled) { return; }\n\n      if (event.code === keyCode)\n      {\n         selected = !selected;\n         if (store) { store.set(selected); }\n\n         if (typeof onPress === 'function') { onPress({ event, selected }); }\n\n         dispatch('press', { event, selected });\n\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n</script>\n\n<!-- svelte-ignore a11y-click-events-have-key-events a11y-interactive-supports-focus -->\n<div class=tjs-toggle-icon-button\n     class:disabled={!enabled}\n     on:click={onClickDiv}\n     on:close:popup={onClosePopup}\n     use:applyStyles={styles}\n     role=button>\n   <!-- svelte-ignore a11y-missing-attribute -->\n   <button bind:this={buttonEl}\n      class:selected\n      on:click={onClick}\n      on:contextmenu={onContextMenuPress}\n      on:keydown={onKeydown}\n      on:keyup={onKeyup}\n      on:click\n      on:contextmenu\n      tabindex={enabled ? 0 : null}\n      use:popoverTooltip={{ tooltip: tooltipCurrent, direction: tooltipDirection }}\n      use:efx={{ enabled }}>\n      {#if icon}\n         {#if iconType === 'font'}\n            <i class={`icon ${icon}`} class:selected></i>\n         {:else if iconType === 'img'}\n            <img src={icon} alt=\"\" class=icon class:selected>\n         {:else if iconType === 'svg'}\n            <svg use:inlineSvg={{ src: icon }} class=icon class:selected></svg>\n         {/if}\n      {/if}\n   </button>\n   {#if selected}\n      <slot />\n   {/if}\n</div>\n\n<style>\n   div {\n      display: block;\n      position: relative;\n      flex: 0 0 var(--tjs-icon-button-diameter, var(--tjs-button-diameter, 2.5em));\n      height: var(--tjs-icon-button-diameter, var(--tjs-button-diameter, 2.5em));\n      width: var(--tjs-icon-button-diameter, var(--tjs-button-diameter, 2.5em));\n      align-self: center;\n      text-align: center;\n      user-select: none;\n      -webkit-tap-highlight-color: var(--tjs-default-webkit-tap-highlight-color, transparent);\n   }\n\n   div.disabled button {\n      color: #4b4a44; /* TODO replace with cssVariables default */\n      cursor: var(--tjs-button-cursor-disabled, var(--tjs-cursor-default, default));\n   }\n\n   div.disabled button:hover {\n      background: none;\n      clip-path: none;\n      text-shadow: none;\n   }\n\n   button {\n      display: inline-flex;\n      pointer-events: initial;\n      position: relative;\n\n      width: 100%;\n      height: 100%;\n\n      min-height: unset;\n      min-width: unset;\n\n      appearance: var(--tjs-icon-button-appearance, none);\n      background: var(--tjs-icon-button-background, var(--tjs-button-background));\n      border: var(--tjs-icon-button-border, var(--tjs-button-border));\n      border-radius: var(--tjs-icon-button-border-radius, var(--tjs-button-border-radius, 50%));\n      border-width: var(--tjs-icon-button-border-width, var(--tjs-button-border-width));\n      clip-path: var(--tjs-icon-button-clip-path, var(--tjs-button-clip-path, none));\n      color: var(--tjs-icon-button-color, currentColor);\n      cursor: var(--tjs-cursor-pointer, pointer);\n      font-family: var(--tjs-icon-button-font-family, var(--tjs-button-font-family));\n      font-size: var(--tjs-icon-button-font-size, var(--tjs-button-font-size, inherit));\n      margin: var(--tjs-icon-button-margin);\n      padding: var(--tjs-icon-button-padding, 20%);\n      transform-style: preserve-3d;\n      transition: var(--tjs-icon-button-transition, var(--tjs-button-transition, background 0.2s ease-in-out, clip-path 0.2s ease-in-out));\n      text-decoration: none;\n      user-select: none;\n   }\n\n   button:focus {\n      background: var(--tjs-icon-button-background-focus, none);\n      box-shadow: var(--tjs-icon-button-box-shadow-focus, none);\n      outline: var(--tjs-icon-button-outline-focus, none);\n      text-shadow: var(--tjs-icon-button-text-shadow-focus, var(--tjs-button-text-shadow-focus, var(--tjs-default-text-shadow-focus-hover)));\n      clip-path: var(--tjs-icon-button-clip-path-focus, var(--tjs-icon-button-clip-path, var(--tjs-button-clip-path-focus, var(--tjs-button-clip-path, none))));\n   }\n\n   button:focus-visible {\n      background: var(--tjs-icon-button-background-focus-visible, var(--tjs-button-background-focus-visible));\n      box-shadow: var(--tjs-icon-button-box-shadow-focus-visible, var(--tjs-button-box-shadow-focus-visible, var(--tjs-default-box-shadow-focus-visible)));\n      outline: var(--tjs-icon-button-outline-focus-visible, var(--tjs-button-outline-focus-visible, var(--tjs-default-outline-focus-visible, revert)));\n      transition: var(--tjs-icon-button-transition-focus-visible, var(--tjs-button-transition-focus-visible, var(--tjs-default-transition-focus-visible)));\n   }\n\n   button:hover {\n      background: var(--tjs-icon-button-background-hover, var(--tjs-button-background-hover));\n      clip-path: var(--tjs-icon-button-clip-path-hover, var(--tjs-icon-button-clip-path, var(--tjs-button-clip-path-hover, var(--tjs-button-clip-path, none))));\n      color: var(--tjs-icon-button-color-hover, currentColor);\n      text-shadow: var(--tjs-icon-button-text-shadow-hover, var(--tjs-button-text-shadow-hover, var(--tjs-default-text-shadow-focus-hover)));\n   }\n\n   button.selected {\n      background: var(--tjs-icon-button-background-selected, var(--tjs-button-background-selected));\n      clip-path: var(--tjs-icon-button-clip-path-selected, var(--tjs-icon-button-clip-path, var(--tjs-button-clip-path-selected, none)));\n   }\n\n   .icon {\n      display: inline-flex;\n      justify-content: center;\n      align-items: center;\n      width: 100%;\n      height: 100%;\n      border-radius: var(--tjs-icon-button-border-radius, var(--tjs-button-border-radius, 50%));\n      transform: translateZ(1px);\n   }\n</style>\n","/**\r\n * Recursive function that finds the closest parent stacking context.\r\n * See also https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\r\n *\r\n * Original author: Kerry Liu / https://github.com/gwwar\r\n *\r\n * @see https://github.com/gwwar/z-context/blob/master/content-script.js\r\n * @see https://github.com/gwwar/z-context/blob/master/LICENSE\r\n *\r\n * @param {Element} node -\r\n *\r\n * @param {Window} [activeWindow=globalThis] The target active window as applicable.\r\n *\r\n * @returns {StackingContext | undefined} The closest parent stacking context or undefined if none.\r\n *\r\n */\r\nfunction getStackingContext(node, activeWindow = globalThis)\r\n{\r\n   const activeDocument = activeWindow.document;\r\n\r\n   // the root element (HTML).\r\n   if (!node || node.nodeName === 'HTML')\r\n   {\r\n      return { node: activeDocument.documentElement, reason: 'root' };\r\n   }\r\n\r\n   // handle shadow root elements.\r\n   if (node.nodeName === '#document-fragment')\r\n   {\r\n      return getStackingContext(node.host);\r\n   }\r\n\r\n   const computedStyle = activeWindow.getComputedStyle(node);\r\n\r\n   // position: fixed or sticky.\r\n   if (computedStyle.position === 'fixed' || computedStyle.position === 'sticky')\r\n   {\r\n      return { node, reason: `position: ${computedStyle.position}` };\r\n   }\r\n\r\n   // positioned (absolutely or relatively) with a z-index value other than \"auto\".\r\n   if (computedStyle.zIndex !== 'auto' && computedStyle.position !== 'static')\r\n   {\r\n      return { node, reason: `position: ${computedStyle.position}; z-index: ${computedStyle.zIndex}` };\r\n   }\r\n\r\n   // elements with an opacity value less than 1.\r\n   if (computedStyle.opacity !== '1')\r\n   {\r\n      return { node, reason: `opacity: ${computedStyle.opacity}` };\r\n   }\r\n\r\n   // elements with a transform value other than \"none\".\r\n   if (computedStyle.transform !== 'none')\r\n   {\r\n      return { node, reason: `transform: ${computedStyle.transform}` };\r\n   }\r\n\r\n   // elements with a mix-blend-mode value other than \"normal\".\r\n   if (computedStyle.mixBlendMode !== 'normal')\r\n   {\r\n      return { node, reason: `mixBlendMode: ${computedStyle.mixBlendMode}` };\r\n   }\r\n\r\n   // elements with a filter value other than \"none\".\r\n   if (computedStyle.filter !== 'none')\r\n   {\r\n      return { node, reason: `filter: ${computedStyle.filter}` };\r\n   }\r\n\r\n   // elements with a perspective value other than \"none\".\r\n   if (computedStyle.perspective !== 'none')\r\n   {\r\n      return { node, reason: `perspective: ${computedStyle.perspective}` };\r\n   }\r\n\r\n   // elements with a clip-path value other than \"none\".\r\n   if (computedStyle.clipPath !== 'none')\r\n   {\r\n      return { node, reason: `clip-path: ${computedStyle.clipPath} ` };\r\n   }\r\n\r\n   // elements with a mask value other than \"none\".\r\n   const mask = computedStyle.mask || computedStyle.webkitMask;\r\n   if (mask !== 'none' && mask !== undefined)\r\n   {\r\n      return { node, reason: `mask:  ${mask}` };\r\n   }\r\n\r\n   // elements with a mask-image value other than \"none\".\r\n   const maskImage = computedStyle.maskImage || computedStyle.webkitMaskImage;\r\n   if (maskImage !== 'none' && maskImage !== undefined)\r\n   {\r\n      return { node, reason: `mask-image: ${maskImage}` };\r\n   }\r\n\r\n   // elements with a mask-border value other than \"none\".\r\n   const maskBorder = computedStyle.maskBorder || computedStyle.webkitMaskBorder;\r\n   if (maskBorder !== 'none' && maskBorder !== undefined)\r\n   {\r\n      return { node, reason: `mask-border: ${maskBorder}` };\r\n   }\r\n\r\n   // elements with isolation set to \"isolate\".\r\n   if (computedStyle.isolation === 'isolate')\r\n   {\r\n      return { node, reason: `isolation: ${computedStyle.isolation}` };\r\n   }\r\n\r\n   // transform or opacity in will-change even if you don't specify values for these attributes directly.\r\n   if (computedStyle.willChange === 'transform' || computedStyle.willChange === 'opacity')\r\n   {\r\n      return { node, reason: `willChange: ${computedStyle.willChange}` };\r\n   }\r\n\r\n   // elements with -webkit-overflow-scrolling set to \"touch\".\r\n   if (computedStyle.webkitOverflowScrolling === 'touch')\r\n   {\r\n      return { node, reason: '-webkit-overflow-scrolling: touch' };\r\n   }\r\n\r\n   // an item with a z-index value other than \"auto\".\r\n   if (computedStyle.zIndex !== 'auto')\r\n   {\r\n      const parentStyle = activeWindow.getComputedStyle(node.parentNode);\r\n      // with a flex|inline-flex parent.\r\n      if (parentStyle.display === 'flex' || parentStyle.display === 'inline-flex')\r\n      {\r\n         return { node, reason: `flex-item; z-index: ${computedStyle.zIndex}` };\r\n         // with a grid parent.\r\n      }\r\n      else if (parentStyle.grid !== 'none / none / none / row / auto / auto')\r\n      {\r\n         return { node, reason: `child of grid container; z-index: ${computedStyle.zIndex}` };\r\n      }\r\n   }\r\n\r\n   // contain with a value of layout, or paint, or a composite value that includes either of them\r\n   const contain = computedStyle.contain;\r\n   if (['layout', 'paint', 'strict', 'content'].indexOf(contain) > -1 ||\r\n    contain.indexOf('paint') > -1 ||\r\n    contain.indexOf('layout') > -1\r\n   )\r\n   {\r\n      return { node, reason: `contain: ${contain}` };\r\n   }\r\n\r\n   return getStackingContext(node.parentNode);\r\n}\n\nexport { getStackingContext };\n//# sourceMappingURL=index.js.map\n","<script>\n   /**\n    * Provides a reusable absolute and block / flexbox positioned focus indicator for accessibility / keyboard\n    * navigation across components. `TJSFocusIndicator` is used in menus like {@link TJSMenu} /\n    * {@link TJSContextMenu} and for folders like {@link TJSIconFolder} and {@link TJSSvgFolder} in the standard\n    * library. This focus indicator is also available for 3rd party implementation for external consumers. By default,\n    * the `span` element is configured for block / flexbox usage. Set the prop `absolute` to `true` and absolute\n    * positioning is enabled. In this case make sure the parent element containing `TJSFocusIndicator` has\n    * `relative` positioning. There are several CSS variables that are available to alter the appearance.\n    *\n    * @example\n    * ```svelte\n    * // The following is an example of use case from {@link TJSMenu} which uses absolute positioning:\n    *\n    * <ol>\n    *   <li class=\"tjs-menu-item\"\n    *       role=menuitem\n    *       tabindex=0>\n    *     <TJSFocusIndicator absolute={true} />\n    *   </li>\n    * </ol>\n    *\n    * <styl>\n    *   .tjs-menu-item {\n    *     display: flex;\n    *     position: relative;\n    *   }\n    *\n    *   .tjs-menu-item:focus-visible, .tjs-menu-item:focus-within:has(:focus-visible) {\n    *      --tjs-focus-indicator-background: currentColor;\n    *   }\n    * </styl>\n    * ```\n    *\n    * @componentDocumentation\n    */\n\n   /**\n    * When true, absolute positioning is enabled.\n    *\n    * @type {boolean}\n    */\n   export let absolute = false;\n</script>\n\n<span class=tjs-focus-indicator class:absolute={absolute}></span>\n\n<style>\n   .tjs-focus-indicator {\n      position: var(--tjs-focus-indicator-position);\n\n      height: var(--tjs-focus-indicator-height);\n      width: var(--tjs-focus-indicator-width, 0.25em);\n      flex: 0 0 var(--tjs-focus-indicator-width, 0.25em);\n\n      pointer-events: none;\n      touch-action: none;\n\n      align-self: var(--tjs-focus-indicator-align-self, stretch);\n      background: var(--tjs-focus-indicator-background, transparent);\n      border: var(--tjs-focus-indicator-border, none);\n      border-radius: var(--tjs-focus-indicator-border-radius, 0.1em);\n\n      transition: var(--tjs-focus-indicator-transition, none);\n   }\n\n   .tjs-focus-indicator.absolute {\n      position: var(--tjs-focus-indicator-position, absolute);\n      left: var(--tjs-focus-indicator-left, 2px);\n      top: var(--tjs-focus-indicator-top, calc((100% - var(--tjs-focus-indicator-height, 80%)) / 2));\n      right: var(--tjs-focus-indicator-right, unset);\n\n      height: var(--tjs-focus-indicator-height, 80%);\n   }\n</style>\n","<script>\n   /**\n    * Provides a component to wrap focus to the first focusable element in the given `elementRoot` prop. Place this\n    * component as the last child in `elementRoot`.\n    *\n    * @componentDocumentation\n    */\n   import { A11yHelper }    from '@typhonjs-fvtt/runtime/util/a11y';\n\n   /** @type {HTMLElement} */\n   export let elementRoot = void 0;\n\n   /** @type {boolean} */\n   export let enabled = true;\n\n   let ignoreElements, wrapEl;\n\n   $: if (wrapEl) { ignoreElements = new Set([wrapEl]); }\n\n   function onFocus()\n   {\n      // Early out if not enabled.\n      if (!enabled) { return; }\n\n      if (A11yHelper.isFocusTarget(elementRoot))\n      {\n         const firstFocusEl = A11yHelper.getFirstFocusableElement(elementRoot, ignoreElements);\n\n         if (A11yHelper.isFocusTarget(firstFocusEl) && firstFocusEl !== wrapEl)\n         {\n            firstFocusEl.focus();\n         }\n         else\n         {\n            // No focus target found, so focus elementRoot.\n            elementRoot.focus();\n         }\n      }\n   }\n</script>\n\n<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<div bind:this={wrapEl} class=tjs-focus-wrap tabindex={enabled ? 0 : null} on:focus={onFocus}></div>\n\n<style>\n    div {\n        width: 0;\n        height: 0;\n        flex: 0;\n    }\n\n    div:focus {\n        outline: none;\n    }\n</style>\n","<script>\n   /**\n    * TJSMenu provides a menu component that can be slotted into toggle components like TJSToggleIconButton and\n    * TJSToggleLabel.\n    *\n    * TJSMenu supports a flexible data driven way to construct the menu items. Depending on the item data that is passed\n    * into the menu you can define 4 types of items: 'icon / label', 'image / label', 'class / Svelte component', and\n    * 'separator / hr'. TJSMenu also accepts a main slot allowing the entire menu contents to be replaced with a custom\n    * component as well as named slots `before` and `after` which place named components before or after the main menu\n    * data driven items.\n    *\n    * ----------------------------------------------------------------------------------------------------------------\n    * Exported props include:\n    *\n    * - `menu` ({@link TJSMenuData.Menu}): An object defining all properties of a menu including potentially data driven\n    * minimal Svelte configuration objects (`slotAfter`, `slotBefore`, and `slotDefault`) providing default\n    * component implementations.\n    *\n    * Or in lieu of passing the folder object you can assign these props directly:\n    * - `items`: An iterable list of {@link TJSMenuData.Items}; defines data driven menu items.\n    *\n    * - `offset`: Optional X / Y offsets for the menu display.\n    *\n    * - `styles`: Styles to be applied inline via `applyStyles` action.\n    *\n    * - `efx`: Currently unused; for any future action effects.\n    *\n    * - `keyCode`: The key code to activate menu items.\n    *\n    * - `transitionOptions`: Custom transition options for duration and easing function.\n    *\n    * ----------------------------------------------------------------------------------------------------------------\n    * ### Events\n    *\n    * There is a single that is fired and bubbled up through parent elements:\n    *\n    * - `close:popup` - A CustomEvent fired when the menu closes allowing any parent components to update state. The\n    *                 `detail` data may have two optional fields of data including `keyboardFocus` / boolean if the\n    *                  close action originated from keyboard navigation and the other is `target` / HTMLElement that is\n    *                  the original event target for the close action.\n    *\n    * ----------------------------------------------------------------------------------------------------------------\n    *\n    * ### Styling\n    * To style this component use `.tjs-menu` as the base selector.\n    *\n    * There are several local CSS variables that you can use to change the appearance dynamically. Either use\n    * CSS props or pass in a `styles` object w/ key / value props to set to the details. The default fallback variables\n    * target both TJSMenu and TJSContextMenu. The few `popup` defaults target first level overlaid components inside an\n    * application.\n    *\n    * ### CSS Variables\n    * ```\n    * The following CSS variables are supported, but not defined by default:\n    *\n    * --tjs-menu-background - fallback: --tjs-default-menu-background; fallback: --tjs-default-popup-background; default: #23221d\n    * --tjs-menu-border - fallback: --tjs-default-popup-border; default: 1px solid #000\n    * --tjs-menu-border-radius - fallback: --tjs-default-popup-border-radius; default: 5px\n    * --tjs-menu-box-shadow - fallback: --tjs-default-popup-box-shadow; default: 0 0 2px #000\n    * --tjs-menu-primary-color - fallback: --tjs-default-menu-primary-color; fallback: --tjs-default-popup-primary-color; default: #b5b3a4\n    * --tjs-menu-max-width - fallback: --tjs-default-menu-max-width; default: 360px\n    * --tjs-menu-min-width - fallback: --tjs-default-menu-min-width; default: 20px\n    * --tjs-menu-z-index - fallback: --tjs-default-popup-z-index; default: 100\n    *\n    * The following CSS variables define attributes for the data driven menu items.\n    *\n    * All menu items:\n    * --tjs-menu-item-line-height - fallback: --tjs-default-menu-item-line-height; default: 2em\n    * --tjs-menu-item-padding - fallback: --tjs-default-menu-item-padding; default: 0 0.5em 0 0\n    *\n    * Icon / Image menu items (considered a button item):\n    * --tjs-menu-item-button-gap - fallback: --tjs-default-menu-item-button-gap; default: 0.25em\n    * --tjs-menu-item-highlight-color - fallback: --tjs-default-menu-highlight-color; fallback: --tjs-default-popup-highlight-color; default: #f0f0e0\n    * --tjs-menu-item-cursor-hover - fallback: --tjs-default-menu-cursor-hover; fallback: --tjs-cursor-pointer\n    * --tjs-menu-item-text-shadow-focus-hover - fallback: --tjs-default-text-shadow-focus-hover; default: 0 0 8px red\n    *\n    * Specific targeting for the label of button items (allows control of wrapping / set `white-space` to `nowrap`):\n    * --tjs-menu-item-label-overflow - fallback: --tjs-default-menu-item-label-overflow; default: hidden\n    * --tjs-menu-item-label-text-overflow - fallback: --tjs-default-menu-item-label-text-overflow; default: ellipsis\n    * --tjs-menu-item-label-white-space - fallback: --tjs-default-menu-item-label-white-space; default: undefined\n    *\n    * Icon menu item:\n    * --tjs-menu-item-icon-height - fallback: --tjs-default-menu-item-icon-height; default: 1.25em\n    * --tjs-menu-item-icon-width - fallback: --tjs-default-menu-item-icon-width; default: 1.25em\n    *\n    * Separator / HR:\n    * --tjs-menu-hr-margin - fallback: --tjs-default-hr-margin; default: 0 0.25em\n    * --tjs-menu-hr-border-top - fallback: --tjs-default-hr-border-top; default: 1px solid #555\n    * --tjs-menu-hr-border-bottom - fallback: --tjs-default-hr-border-bottom; default: 1px solid #444\n    * ```\n    * @componentDocumentation\n    */\n\n   import {\n      onDestroy,\n      onMount }                  from 'svelte';\n\n   import { inlineSvg }          from '@typhonjs-fvtt/runtime/svelte/action/dom/inline-svg';\n   import { applyStyles }        from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { slideFade }          from '@typhonjs-fvtt/runtime/svelte/transition';\n   import { TJSSvelte }          from '@typhonjs-fvtt/runtime/svelte/util';\n   import { A11yHelper }         from '@typhonjs-fvtt/runtime/util/a11y';\n   import {\n      AssetValidator,\n      CrossWindow }              from '@typhonjs-fvtt/runtime/util/browser';\n   import { getStackingContext } from '@typhonjs-fvtt/runtime/util/dom/layout';\n   import { localize }           from '@typhonjs-fvtt/runtime/util/i18n';\n\n   import {\n      isIterable,\n      isObject }                 from '@typhonjs-fvtt/runtime/util/object';\n\n   import {\n      TJSFocusIndicator,\n      TJSFocusWrap }             from '@typhonjs-fvtt/standard/component/dom/focus';\n\n   /** @type {import('./types').TJSMenuData.Menu} */\n   export let menu = void 0;\n\n   /** @type {Iterable<import('./types').TJSMenuData.Items> | (() => Iterable<import('./types').TJSMenuData.Items>)} */\n   export let items = void 0;\n\n   /** @type {HTMLElement | string} */\n   export let focusEl = void 0;\n\n   /** @type {{ x?: number, y?: number }} */\n   export let offset = void 0;\n\n   /** @type {{ [key: string]: string | null }} */\n   export let styles = void 0;\n\n   /** @type {Function} */\n   export let efx = void 0;\n\n   /** @type {string} */\n   export let keyCode = void 0;\n\n   /** @type {{ duration: number, easing: Function }} */\n   export let transitionOptions = void 0;\n\n   const s_DEFAULT_OFFSET = { x: 0, y: 0 };\n\n   // Provides options to `A11yHelper.getFocusableElements` to ignore TJSFocusWrap by CSS class.\n   const s_IGNORE_CLASSES = { ignoreClasses: ['tjs-focus-wrap'] };\n\n   /**\n    * @type {Window} The current active Window or `globalThis`.\n    *\n    * Supports registering to the active window / document body for when an underlying application is popped out in a\n    * unique browser window.\n    */\n   let activeWindow\n\n   /** @type {Iterable<import('./types').TJSMenuData.Items>} */\n   let allItems;\n\n   /**\n    * When true, label only menu items will be indented.\n    *\n    * @type {boolean}\n    */\n   let hasIcon = false;\n\n   $: {\n      const itemFn = isObject(menu) && typeof menu.items === 'function' ? menu.items :\n       typeof items === 'function' ? items : void 0;\n\n      let itemList;\n\n      if (itemFn)\n      {\n         itemList = itemFn();\n\n         if (!isIterable(itemList))\n         {\n            throw new TypeError(`TJSMenu error: 'items' function did not return an iterable list.`);\n         }\n      }\n      else\n      {\n          itemList = isObject(menu) && isIterable(menu.items) ? menu.items :\n           isIterable(items) ? items : [];\n      }\n\n      hasIcon = false;\n\n      const tempItems = [];\n\n      let cntr = -1;\n\n      for (const item of itemList)\n      {\n         cntr++;\n         if (!isObject(item)) { throw new TypeError(`TJSMenu error: 'item[${cntr}]' is not an object.`); }\n\n         // Filter items for any condition that prevents display.\n         if (typeof item.condition === 'function' && !item.condition()) { continue; }\n         if (typeof item.condition === 'boolean' && !item.condition) { continue; }\n\n         let type;\n\n         if (TJSSvelte.config.isConfigEmbed(item.svelte)) { type = 'class'; }\n         else if (typeof item.icon === 'string')\n         {\n            const result = AssetValidator.parseMedia({ url: item.icon, mediaTypes: AssetValidator.MediaTypes.img_svg });\n            type = result.valid ? result.elementType : 'font';\n\n            hasIcon = true;\n         }\n         else if (item.icon === void 0 && typeof item.label === 'string') { type = 'label'; }\n         else if (typeof item.separator === 'string')\n         {\n            if (item.separator !== 'hr')\n            {\n               throw new Error (\n                `TJSMenu error: 'item[${cntr}]' has unknown separator type; only 'hr' is currently supported.`)\n            }\n\n            type = 'separator-hr';\n         }\n\n         if (type === void 0) { throw new TypeError(`TJSMenu error: Unknown type for 'item[${cntr}]'.`); }\n\n         tempItems.push({ ...item, '#type': type });\n      }\n\n      allItems = tempItems;\n   }\n\n   $: focusEl = isObject(menu) && A11yHelper.isFocusSource(menu.focusEl) ? menu.focusEl :\n    A11yHelper.isFocusSource(focusEl) ? focusEl : void 0;\n\n   $: offset = isObject(menu) && isObject(menu.offset) ? menu.offset :\n    isObject(offset) ? offset : s_DEFAULT_OFFSET;\n\n   $: styles = isObject(menu) && isObject(menu.styles) ? menu.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: efx = isObject(menu) && typeof menu.efx === 'function' ? menu.efx :\n    typeof efx === 'function' ? efx : () => {};\n\n   $: keyCode = isObject(menu) && typeof menu.keyCode === 'string' ? menu.keyCode :\n    typeof keyCode === 'string' ? keyCode : 'Enter';\n\n   $: transitionOptions = isObject(menu) && isObject(menu.transitionOptions) ? menu.transitionOptions :\n    isObject(transitionOptions) ? transitionOptions : { duration: 120, easing: 'quintOut' };\n\n   // Bound to the nav element / menu.\n   let menuEl;\n\n   // Stores if this context menu is closed.\n   let closed = false;\n\n   // Stores any associated `focusSource` options to pass to menu callbacks when menu was activated by keys.\n   /** @type {import('@typhonjs-fvtt/runtime/util/a11y').A11yFocusSource} */\n   let focusSource = void 0;\n\n   // Stores if menu has keyboard focus; detected on mount, when tab navigation occurs, and used to set `keyboardFocus`\n   // for close event.\n   let hasKeyboardFocus = false;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   // Event bindings\n   // Bind to `document.body` to receive pointer down & scroll wheel events to close the context menu.\n   // Bind to 'window' to close context menu when browser window is blurred.\n\n   onDestroy(() =>\n   {\n      // To support cases when the active window may be a popped out browser register directly.\n      activeWindow?.document.body.removeEventListener('pointerdown', onClose, true);\n      activeWindow?.document.body.removeEventListener('wheel', onClose, true);\n      activeWindow?.removeEventListener('blur', onWindowBlur);\n      activeWindow?.removeEventListener('resize', onWindowBlur);\n\n      focusEl = void 0;\n      focusSource = void 0;\n   });\n\n   onMount(() =>\n   {\n      // Store active window.\n      activeWindow = CrossWindow.getWindow(menuEl);\n\n      // To support cases when the active window may be a popped out browser unregister directly.\n      activeWindow.document.body.addEventListener('pointerdown', onClose, true);\n      activeWindow.document.body.addEventListener('wheel', onClose, true);\n      activeWindow.addEventListener('blur', onWindowBlur);\n      activeWindow.addEventListener('resize', onWindowBlur);\n\n      /** @type {HTMLElement} */\n      const activeEl = activeWindow.document.activeElement;\n\n      /** @type {HTMLElement} */\n      const parentEl = menuEl.parentElement;\n\n      // Determine if the parent element to the menu contains the active element and that it is explicitly focused\n      // via `:focus-visible` / keyboard navigation. If so then explicitly focus the first menu item possible.\n      if (CrossWindow.isHTMLElement(parentEl) && CrossWindow.isHTMLElement(activeEl) && parentEl.contains(activeEl) &&\n        activeEl.matches(':focus-visible'))\n      {\n         const firstFocusEl = A11yHelper.getFirstFocusableElement(menuEl);\n\n         if  (CrossWindow.isHTMLElement(firstFocusEl) && !firstFocusEl.classList.contains('tjs-focus-wrap'))\n         {\n            firstFocusEl.focus();\n            hasKeyboardFocus = true;\n         }\n         else\n         {\n            // Silently focus the menu element so that keyboard handling functions.\n            menuEl.focus();\n         }\n      }\n      else\n      {\n         // Silently focus the menu element so that keyboard handling functions.\n         menuEl.focus();\n      }\n\n      // Create focus source from `focusEl` when provided and fallback to `activeEl` which is the previous active\n      // element before menu is displayed.\n      if (activeEl || focusEl)\n      {\n         const focusElements = [];\n\n         if (focusEl) { focusElements.push(focusEl); }\n         if (activeEl) { focusElements.push(activeEl); }\n\n         focusSource = {\n            focusEl: focusElements\n         };\n      }\n   });\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /**\n    * Provides a custom transform allowing inspection of the element to change positioning styles based on the\n    * height / width of the element and the containing stacking context element. This allows the menu to expand left or\n    * right when the menu exceeds the bounds of the containing stacking context element.\n    *\n    * @param {HTMLElement} node - nav element.\n    *\n    * @returns {import('svelte/transition').TransitionConfig} Transition object.\n    */\n   function animate(node)\n   {\n      const result = getStackingContext(node.parentElement, activeWindow);\n      if (!result?.node)\n      {\n         console.warn(`'TJSMenu.animate warning: Could not locate parent stacking context element.`);\n         return;\n      }\n\n      const stackingContextRect = result?.node.getBoundingClientRect();\n      const stackingContextRight = stackingContextRect.x + stackingContextRect.width;\n\n      const nodeRect = node.getBoundingClientRect();\n      const parentRect = node.parentElement.getBoundingClientRect();\n\n      const adjustedOffset = {...s_DEFAULT_OFFSET, ...offset};\n\n      node.style.top = `${adjustedOffset.y + parentRect.height}px`;\n\n      // Check to make sure that the menu width does not exceed the right side of the stacking context element.\n      // If not open to the right.\n      if (parentRect.x + nodeRect.width < stackingContextRight)\n      {\n         node.style.left = `${adjustedOffset.x}px`;\n         node.style.removeProperty('right');\n      }\n      else // Open left.\n      {\n         node.style.right = `${adjustedOffset.x}px`;\n         node.style.removeProperty('left');\n      }\n\n      return slideFade(node, transitionOptions);\n   }\n\n   /**\n    * Handles item `onPress` invocation and applying immediate focus automatically if a `truthy` result is not\n    * returned as a result from the `onPress` callback signaling a focus continuation.\n    *\n    * @param {KeyboardEvent | PointerEvent}  event - Originating event.\n    *\n    * @param {import('./types').TJSMenuData.Menu.Item}  item - Target menu item.\n    */\n   function handleOnPress(event, item)\n   {\n      if (!event) { return; }\n\n      if (typeof item?.onPress === 'function')\n      {\n         Promise.resolve(item.onPress({ event, item, focusSource })).then((result) =>\n         {\n            // Coerce result to boolean.\n            const focusDeferred = !!result;\n\n            // Potentially apply focus source automatically if no deferral signaled.\n            if (!focusDeferred) { A11yHelper.applyFocusSource(focusSource); }\n         });\n      }\n      else\n      {\n         // Apply focus immediately.\n         A11yHelper.applyFocusSource(focusSource);\n      }\n   }\n\n   /**\n    * Invokes a function on click of a menu item then fires the `close` event and automatically runs the outro\n    * transition and destroys the component.\n    *\n    * @param {PointerEvent}    event - PointerEvent.\n    *\n    * @param {import('./types').TJSMenuData.Items} [item] - Menu item data.\n    */\n   function onClick(event, item)\n   {\n      handleOnPress(event, item);\n\n      if (!closed)\n      {\n         closed = true;\n         menuEl.dispatchEvent(new CustomEvent('close:popup', { bubbles: true, cancelable: true }));\n      }\n   }\n\n   /**\n    * Determines if a pointer event is pressed outside the menu which closes the menu. Use a bubbling custom event\n    * `close:popup` and attach the original target. The TRL application shells will respond to this event to handle\n    * any additional automatic focus management.\n    *\n    * @param {PointerEvent}   event - Pointer event from document body click.\n    */\n   async function onClose(event)\n   {\n      // Early out if the pointer down is inside the menu element.\n      if (event.target === menuEl || menuEl?.contains(event.target)) { return; }\n\n      if (event.target === menuEl?.parentElement || menuEl?.parentElement.contains(event.target)) { return; }\n\n      if (!closed)\n      {\n         closed = true;\n\n         menuEl?.dispatchEvent(new CustomEvent('close:popup', {\n            bubbles: true,\n            cancelable: true,\n            detail: { target: event.target }\n         }));\n      }\n   }\n\n   /**\n    * Handle key commands for closing the menu ('Esc') and reverse focus cycling via 'Shift-Tab'. Also stop propagation\n    * for the key code assigned for menu item selection ('Enter').\n    *\n    * @param {KeyboardEvent}  event - KeyboardEvent.\n    */\n   function onKeydownMenu(event)\n   {\n      // Handle menu item keyCode selection.\n      if (event.code === keyCode)\n      {\n         event.stopPropagation();\n         return;\n      }\n\n      switch(event.code)\n      {\n         case 'Tab':\n            event.stopPropagation();\n\n            // Handle reverse focus cycling with `<Shift-Tab>`.\n            if (event.shiftKey)\n            {\n               // Collect all focusable elements from `elementRoot` and ignore TJSFocusWrap.\n               const allFocusable = A11yHelper.getFocusableElements(menuEl, s_IGNORE_CLASSES);\n\n               // Find first and last focusable elements.\n               const firstFocusEl = allFocusable.length > 0 ? allFocusable[0] : void 0;\n               const lastFocusEl = allFocusable.length > 0 ? allFocusable[allFocusable.length - 1] : void 0;\n\n               // Only cycle focus to the last keyboard focusable app element if `elementRoot` or first focusable\n               // element is the active element.\n               if (menuEl === activeWindow.document.activeElement ||\n                firstFocusEl === activeWindow.document.activeElement)\n               {\n                  if (CrossWindow.isHTMLElement(lastFocusEl) && firstFocusEl !== lastFocusEl)\n                  {\n                     lastFocusEl.focus();\n                  }\n\n                  event.preventDefault();\n               }\n            }\n\n            break;\n\n         default:\n            // Any other key stop propagation preventing any global key handlers from responding.\n            event.stopPropagation();\n            break;\n      }\n   }\n\n   /**\n    * Handle key commands for closing the menu ('Esc') and reverse focus cycling via 'Shift-Tab'. Also stop propagation\n    * for the key code assigned for menu item selection ('Enter').\n    *\n    * @param {KeyboardEvent}  event - KeyboardEvent.\n    */\n   function onKeyupMenu(event)\n   {\n      switch (event.code)\n      {\n         case 'Escape':\n            if (!closed)\n            {\n               closed = true;\n               menuEl?.dispatchEvent(new CustomEvent('close:popup',\n                { bubbles: true, cancelable: true, detail: { keyboardFocus: hasKeyboardFocus } }));\n            }\n\n            event.preventDefault();\n            event.stopPropagation();\n            break;\n      }\n   }\n\n   /**\n    * Handle key presses on menu items.\n    *\n    * @param {KeyboardEvent}     event - KeyboardEvent.\n    *\n    * @param {import('./types').TJSMenuData.Items}   [item] - Menu item data.\n    */\n   function onKeyupItem(event, item)\n   {\n      if (event.code === keyCode)\n      {\n         handleOnPress(event, item);\n\n         if (!closed)\n         {\n            closed = true;\n\n            event.preventDefault();\n            event.stopPropagation();\n\n            menuEl?.dispatchEvent(new CustomEvent('close:popup',\n             { bubbles: true, cancelable: true, detail: { keyboardFocus: hasKeyboardFocus } }));\n         }\n      }\n   }\n\n   /**\n    * Closes menu when browser window is blurred.\n    */\n   function onWindowBlur()\n   {\n      if (!closed)\n      {\n         A11yHelper.applyFocusSource(focusSource);\n\n         closed = true;\n         menuEl?.dispatchEvent(new CustomEvent('close:popup', { bubbles: true, cancelable: true }));\n      }\n   }\n</script>\n\n<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n<nav class=tjs-menu\n     bind:this={menuEl}\n     on:click|preventDefault|stopPropagation={() => null}\n     on:keydown|stopPropagation={onKeydownMenu}\n     on:keyup|preventDefault|stopPropagation={onKeyupMenu}\n     on:pointerdown|stopPropagation={() => null}\n     on:pointerup|stopPropagation={() => null}\n     transition:animate|global\n     use:applyStyles={styles}\n     use:efx\n     tabindex=-1\n   >\n\n   <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n   <ol class=tjs-menu-items role=menu>\n      <!-- TJSMenu supports hosting a slot for menu content -->\n      <slot>\n         {#if TJSSvelte.config.isConfigEmbed(menu?.slotDefault)}\n            <svelte:component this={menu.slotDefault.class} {...(isObject(menu?.slotDefault?.props) ? menu.slotDefault.props : {})} />\n         {/if}\n      </slot>\n\n      {#if $$slots.before}\n         <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n         <li class=tjs-menu-item\n             on:click={(event) => onClick(event)}\n             on:keyup={(event) => onKeyupItem(event)}\n             role=menuitem\n             tabindex=0>\n            <TJSFocusIndicator absolute={true} />\n            <slot name=before>\n               {#if TJSSvelte.config.isConfigEmbed(menu?.slotBefore)}\n                  <svelte:component this={menu.slotBefore.class} {...(isObject(menu?.slotBefore?.props) ? menu.slotBefore.props : {})} />\n               {/if}\n            </slot>\n         </li>\n      {/if}\n      {#each allItems as item}\n         {#if item['#type'] === 'class'}\n            <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n            <li class=\"tjs-menu-item tjs-menu-item-button\"\n                on:click={(event) => onClick(event, item)}\n                on:keyup={(event) => onKeyupItem(event, item)}\n                role=menuitem\n                tabindex=0>\n               <TJSFocusIndicator absolute={true} />\n               <svelte:component this={item.svelte.class} {...(isObject(item.svelte.props) ? item.svelte.props : {})} />\n            </li>\n         {:else if item['#type'] === 'font'}\n            <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n            <li class=\"tjs-menu-item tjs-menu-item-button\"\n                 on:click={(event) => onClick(event, item)}\n                 on:keyup={(event) => onKeyupItem(event, item)}\n                 role=menuitem\n                 tabindex=0>\n               <TJSFocusIndicator absolute={true} />\n               <i class={item.icon}></i>\n               <span class=tjs-menu-item-label>{localize(item.label)}</span>\n            </li>\n         {:else if item['#type'] === 'img'}\n            <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n            <li class=\"tjs-menu-item tjs-menu-item-button\"\n                 on:click={(event) => onClick(event, item)}\n                 on:keyup={(event) => onKeyupItem(event, item)}\n                 role=menuitem\n                 tabindex=0>\n               <TJSFocusIndicator absolute={true} />\n               <img src={item.icon} alt={item.imageAlt}>\n               <span class=tjs-menu-item-label>{localize(item.label)}</span>\n            </li>\n         {:else if item['#type'] === 'label'}\n            <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n            <li class=\"tjs-menu-item tjs-menu-item-button\"\n                on:click={(event) => onClick(event, item)}\n                on:keyup={(event) => onKeyupItem(event, item)}\n                role=menuitem\n                tabindex=0>\n               <TJSFocusIndicator absolute={true} />\n               <span class=tjs-menu-item-label class:has-icons={hasIcon}>{localize(item.label)}</span>\n            </li>\n         {:else if item['#type'] === 'separator-hr'}\n            <hr>\n         {:else if item['#type'] === 'svg'}\n            <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n            <li class=\"tjs-menu-item tjs-menu-item-button\"\n                on:click={(event) => onClick(event, item)}\n                on:keyup={(event) => onKeyupItem(event, item)}\n                role=menuitem\n                tabindex=0>\n               <TJSFocusIndicator absolute={true} />\n               <svg use:inlineSvg={{ src: item.icon }}></svg>\n               <span class=tjs-menu-item-label>{localize(item.label)}</span>\n            </li>\n         {/if}\n      {/each}\n      {#if $$slots.after}\n         <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n         <li class=\"tjs-menu-item tjs-menu-item-button\"\n             on:click={(event) => onClick(event)}\n             on:keyup={(event) => onKeyupItem(event)}\n             role=menuitem\n             tabindex=0>\n            <TJSFocusIndicator absolute={true} />\n            <slot name=after>\n               {#if TJSSvelte.config.isConfigEmbed(menu?.slotAfter)}\n                  <svelte:component this={menu.slotAfter.class} {...(isObject(menu?.slotAfter?.props) ? menu.slotAfter.props : {})} />\n               {/if}\n            </slot>\n         </li>\n      {/if}\n   </ol>\n   <TJSFocusWrap elementRoot={menuEl} />\n</nav>\n\n<style>\n   /**\n    * Allow click through any `svg` element.\n    */\n   svg {\n      pointer-events: none;\n   }\n\n   .tjs-menu {\n      position: absolute;\n      width: max-content;\n      height: max-content;\n\n      background: var(--tjs-menu-background);\n      border: var(--tjs-menu-border);\n      border-radius: var(--tjs-menu-border-radius);\n      box-shadow: var(--tjs-menu-box-shadow);\n      color: var(--tjs-menu-color);\n      font-size: var(--tjs-menu-font-size);\n      max-width: var(--tjs-menu-max-width, 360px);\n      min-width: var(--tjs-menu-min-width, 20px);\n\n      text-align: start;\n\n      /* Defines z-index in local stacking context */\n      z-index: var(--tjs-menu-z-index, var(--tjs-default-popup-z-index, 100));\n   }\n\n   .tjs-menu:focus-visible {\n      outline: var(--tjs-default-a11y-outline-focus-visible, 2px solid transparent);\n   }\n\n   .tjs-menu-items {\n      margin: 0;\n      padding: 0;\n   }\n\n   .tjs-menu-items hr {\n      margin-block-start: 0;\n      margin-block-end: 0;\n      margin: var(--tjs-menu-hr-margin, var(--tjs-default-hr-margin, 0 0.25em));\n      border-top: var(--tjs-menu-hr-border-top, var(--tjs-default-hr-border-top, 1px solid #555));\n      border-bottom: var(--tjs-menu-hr-border-bottom, var(--tjs-default-hr-border-bottom, 1px solid #444));\n   }\n\n   .tjs-menu-item {\n      display: flex;\n      position: relative;\n\n      align-items: center;\n      border: var(--tjs-menu-item-border);\n      line-height: var(--tjs-menu-item-line-height, 1em);\n      margin: var(--tjs-menu-item-margin, 0);\n      padding: var(--tjs-menu-item-padding, 0.5em);\n   }\n\n   /* Disable default outline for focus visible / within */\n   .tjs-menu-item:focus-within, .tjs-menu-item:focus-visible {\n      outline: none;\n   }\n\n   .tjs-menu-item i {\n      text-align: center;\n      width: var(--tjs-menu-item-icon-width, var(--tjs-default-menu-item-icon-width, 1.25em));\n   }\n\n   .tjs-menu-item img, .tjs-menu-item svg {\n      width: var(--tjs-menu-item-icon-width, var(--tjs-default-menu-item-icon-width, 1.25em));\n      height: var(--tjs-menu-item-icon-height, var(--tjs-default-menu-item-icon-height, 1.25em));\n   }\n\n   .tjs-menu-item-button {\n      gap: var(--tjs-menu-item-button-gap, var(--tjs-default-menu-item-button-gap, 0.5em));\n   }\n\n   .tjs-menu-item-button:hover {\n      background: var(--tjs-menu-item-background-highlight);\n      border: var(--tjs-menu-item-border-highlight);\n      color: var(--tjs-menu-item-color-highlight);\n      cursor: var(--tjs-menu-item-cursor-hover, var(--tjs-cursor-pointer, pointer));\n      text-shadow: var(--tjs-menu-item-text-shadow-focus-hover);\n   }\n\n   .tjs-menu-item-button:focus-visible, .tjs-menu-item-button:focus-within:has(:focus-visible) {\n      background: var(--tjs-menu-item-background-highlight);\n      border: var(--tjs-menu-item-border-highlight);\n      color: var(--tjs-menu-item-color-highlight);\n      text-shadow: var(--tjs-menu-item-text-shadow-focus-hover);\n   }\n\n   /* Enable focus indicator / TJSFocusIndicator */\n   /* Note: the use of `has` pseudo-selector that requires a child with :focus-visible */\n   .tjs-menu-item:focus-visible, .tjs-menu-item:focus-within:has(:focus-visible) {\n      --tjs-focus-indicator-background: var(--tjs-menu-item-focus-indicator-background, currentColor);\n   }\n\n   .tjs-menu-item-label {\n      overflow: var(--tjs-menu-item-label-overflow, var(--tjs-default-menu-item-label-overflow, hidden));\n      text-overflow: var(--tjs-menu-item-label-text-overflow, var(--tjs-default-menu-item-label-text-overflow, ellipsis));\n      white-space: var(--tjs-menu-item-label-white-space, var(--tjs-default-menu-item-label-white-space));\n   }\n\n   .tjs-menu-item-label.has-icons {\n      padding-left: calc(var(--tjs-menu-item-icon-width, 1.25em) + var(--tjs-menu-item-button-gap, 0.5em));\n   }\n</style>\n","<script>\n   /**\n    * TJSContextMenuImpl provides a context menu implementation component that is not meant to be directly used as it is\n    * controlled as a single browser wide context menu from {@link TJSContextMenu} that is imported via:\n    * `import { TJSContextMenu } from '@typhonjs-fvtt/standard/application';` The front end for TJSContextMenuImpl processes data and\n    * invokes / manages a single context menu.\n    *\n    * TJSContextMenuImpl supports a flexible data driven way to construct the menu items with the same format as\n    * {@link TJSMenu}. Depending on the item data that is passed into the menu you can define 4 types of items:\n    * 'icon / label', 'image / label', 'class / Svelte component', and 'separator / hr'. The main difference is that\n    * TJSContextMenu does not support default or named slots.\n    *\n    * ### Exported props\n    * - `menu` ({@link TJSMenuData.Menu}): An object defining all properties of a menu.\n    *\n    * Or in lieu of passing the folder object you can assign these props directly:\n    *\n    * - `items`: An iterable list of {@link TJSMenuData.Items}; defines data driven menu items.\n    *\n    * - `styles`: Styles to be applied inline via `applyStyles` action.\n    *\n    * - `efx`: Currently unused; for any future action effects.\n    *\n    * - `keyCode`: The key code to activate menu items.\n    *\n    * - `focusSource`: A `A11yFocusSource` object containing the target element to return focus to on close.\n    *\n    * - `transitionOptions`: Custom transition options for duration and easing function.\n    *\n    * ### Events\n    *\n    * There is a single that is fired and _not_ bubbled up through parent elements:\n    * - `close`- Fired when the menu closes allowing {@link TJSContextMenu} to clean up resources.\n    *\n    * ### CSS Variables\n    *\n    * Styling: To style this component use `.tjs-context-menu` as the base selector.\n    *\n    * There are several local CSS variables that you can use to change the appearance dynamically. Either use\n    * CSS props or pass in a `styles` object w/ key / value props to set to the details. The default fallback variables\n    * target both TJSMenu and TJSContextMenu. The few `popover` defaults target components that independently pop over\n    * other elements browser wide.\n    *\n    * ```\n    * The following CSS variables are supported, but not defined by default\n    * --tjs-context-menu-background - fallback: --tjs-default-menu-background; fallback: --tjs-default-popup-background; default: #23221d\n    * --tjs-context-menu-border - fallback: --tjs-default-popup-border; default: 1px solid #000\n    * --tjs-context-menu-border-radius - fallback: --tjs-default-popup-border-radius; default: 5px\n    * --tjs-context-menu-box-shadow - fallback: --tjs-default-popup-box-shadow; default: 0 0 2px #000\n    * --tjs-context-menu-primary-color - fallback: --tjs-default-menu-primary-color; fallback: --tjs-default-popup-primary-color; default: #b5b3a4\n    * --tjs-context-menu-max-width - fallback: --tjs-default-menu-max-width; default: 360px\n    * --tjs-context-menu-min-width - fallback: --tjs-default-menu-min-width; default: 20px\n    *\n    * The following CSS variables define attributes for the data driven menu items.\n    *\n    * All menu items:\n    * --tjs-context-menu-item-line-height - fallback: --tjs-default-menu-item-line-height; default: 2em\n    * --tjs-context-menu-item-padding - fallback: --tjs-default-menu-item-padding; default: 0 0.5em 0 0\n    *\n    * Icon / Image menu items (considered a button item):\n    * --tjs-context-menu-item-button-gap - fallback: --tjs-default-menu-item-button-gap; default: 0.25em\n    * --tjs-context-menu-item-highlight-color - fallback: --tjs-default-menu-highlight-color; fallback: --tjs-default-popup-highlight-color; default: #f0f0e0\n    * --tjs-context-menu-item-text-shadow-focus-hover - fallback: --tjs-default-text-shadow-focus-hover; default: 0 0 8px red\n    *\n    * Specific targeting for the label of button items (allows control of wrapping / set `white-space` to `nowrap`):\n    * --tjs-context-menu-item-label-overflow - fallback: --tjs-default-menu-item-label-overflow; default: hidden\n    * --tjs-context-menu-item-label-text-overflow - fallback: --tjs-default-menu-item-label-text-overflow; default: ellipsis\n    * --tjs-context-menu-item-label-white-space - fallback: --tjs-default-menu-item-label-white-space; default: undefined\n    *\n    * Icon menu item:\n    * --tjs-context-menu-item-icon-height - fallback: --tjs-default-menu-item-icon-height; default: 1.25em\n    * --tjs-context-menu-item-icon-width - fallback: --tjs-default-menu-item-icon-width; default: 1.25em\n    *\n    * Separator / HR:\n    * --tjs-context-menu-hr-margin - fallback: --tjs-default-hr-margin; default: 0 0.25em\n    * --tjs-context-menu-hr-border-top - fallback: --tjs-default-hr-border-top; default: 1px solid #555\n    * --tjs-context-menu-hr-border-bottom - fallback: --tjs-default-hr-border-bottom; default: 1px solid #444\n    * ```\n    * @componentDocumentation\n    * @internal\n    */\n\n   import {\n      createEventDispatcher,\n      onDestroy,\n      onMount }               from 'svelte';\n\n   import { inlineSvg }       from '@typhonjs-fvtt/runtime/svelte/action/dom/inline-svg';\n   import { applyStyles }     from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { slideFade }       from '@typhonjs-fvtt/runtime/svelte/transition';\n   import { TJSSvelte }       from '@typhonjs-fvtt/runtime/svelte/util';\n\n   import { A11yHelper }      from '@typhonjs-fvtt/runtime/util/a11y';\n   import { CrossWindow }     from '@typhonjs-fvtt/runtime/util/browser';\n   import { localize }        from '@typhonjs-fvtt/runtime/util/i18n';\n   import { isObject }        from '@typhonjs-fvtt/runtime/util/object';\n\n   import {\n      TJSFocusIndicator,\n      TJSFocusWrap }          from '@typhonjs-fvtt/standard/component/dom/focus';\n\n   export let id = '';\n\n   export let x = 0;\n\n   export let y = 0;\n\n   export let offsetX = 2;\n\n   export let offsetY = 2;\n\n   /** @type {string[]} */\n   export let classes = [];\n\n   /**\n    * When true, label only menu items will be indented.\n    *\n    * @type {boolean}\n    */\n   export let hasIcon = false;\n\n   /**\n    * @type {import('../types').TJSMenuData.Items[]}\n    */\n   export let items = [];\n\n   /** @type {{ [key: string]: string | null }} */\n   export let styles = void 0;\n\n   /** @type {string} */\n   export let keyCode = void 0;\n\n   /** @type {import('@typhonjs-fvtt/runtime/util/a11y').A11yFocusSource} */\n   export let focusSource = void 0;\n\n   /** @type {{ duration: number, easing: import('@typhonjs-fvtt/runtime/svelte/easing').EasingFunction }} */\n   export let transitionOptions = void 0;\n\n   /**\n    * @type {Window} The active window the context menu is displaying inside.\n    */\n   export let activeWindow = globalThis;\n\n   /**\n    * @type {number} Subtracted when menu is adjusted upwards and configured by the `alignBottom` option in\n    *       `TJSContextMenu`.\n    */\n   export let targetElHeight = 0;\n\n   /**\n    * @type {number} Added when menu is adjusted leftward and configured by the `alignBottom` option in\n    *       `TJSContextMenu`.\n    */\n   export let targetElWidth = 0;\n\n   /**\n    * This component. Set externally removing dependence on `current_component`.\n    *\n    * @type {import('svelte').SvelteComponent}\n    * @internal\n    */\n   export let current_component = void 0;\n\n   // Provides options to `A11yHelper.getFocusableElements` to ignore TJSFocusWrap by CSS class.\n   const s_IGNORE_CLASSES = { ignoreClasses: ['tjs-focus-wrap'] };\n\n   // Dispatches `close` event.\n   const dispatch = createEventDispatcher();\n\n   // Bound to the nav element / menu.\n   let menuEl;\n\n   // Stores if this context menu is closed.\n   let closed = false;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   // Event bindings\n   // Bind to `document.body` to receive pointer down & scroll wheel events to close the context menu.\n   // Bind to 'window' to close context menu when browser window is blurred.\n\n   onDestroy(() =>\n   {\n      // To support cases when the active window may be a popped out browser register directly.\n      activeWindow.document.body.removeEventListener('pointerdown', onClose, true);\n      activeWindow.document.body.removeEventListener('wheel', onCloseWheel, true);\n      activeWindow.removeEventListener('blur', onWindowBlur);\n      activeWindow.removeEventListener('resize', onWindowBlur);\n\n      focusSource = void 0;\n   });\n\n   onMount(() =>\n   {\n      // To support cases when the active window may be a popped out browser unregister directly.\n      activeWindow.document.body.addEventListener('pointerdown', onClose, true);\n      activeWindow.document.body.addEventListener('wheel', onCloseWheel, true);\n      activeWindow.addEventListener('blur', onWindowBlur);\n      activeWindow.addEventListener('resize', onWindowBlur);\n\n      const keyboardFocus = focusSource?.source === 'keyboard';\n\n      // If the focus options designate that the source of the context menu came from the keyboard then focus the first\n      // menu item on mount.\n      if (keyboardFocus)\n      {\n         const firstFocusEl = A11yHelper.getFirstFocusableElement(menuEl);\n\n         if (CrossWindow.isHTMLElement(firstFocusEl) && !firstFocusEl.classList.contains('tjs-focus-wrap'))\n         {\n            firstFocusEl.focus();\n         }\n         else\n         {\n            // Silently focus the menu element so that keyboard handling functions.\n            menuEl.focus();\n         }\n      }\n      else\n      {\n         // Silently focus the menu element so that keyboard handling functions.\n         menuEl.focus();\n      }\n   });\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /**\n    * Provides a custom animate callback allowing inspection of the element to change positioning styles based on the\n    * height / width of the element and `document.body`. This allows the context menu to expand up when the menu\n    * is outside the height bound of `document.body` and expand to the left if width is greater than `document.body`.\n    *\n    * @param {HTMLElement} node - nav element.\n    *\n    * @returns {import('svelte/transition').TransitionConfig} Transition object.\n    */\n   function animate(node)\n   {\n      // Must enable popout state in the action so that bounds checking below works.\n      node.showPopover();\n\n      const browserClientWidth = activeWindow.document.body.clientWidth;\n      const browserClientHeight = activeWindow.document.body.clientHeight;\n\n      const expandLeft = (x + node.clientWidth) > browserClientWidth;\n      const expandUp = (y + node.clientHeight) > browserClientHeight;\n\n      const adjustedX = expandLeft ? Math.min(x + offsetX + targetElWidth, browserClientWidth) :\n       Math.max(x - offsetX, 0);\n\n      const adjustedY = expandUp ? Math.min(y + offsetY - targetElHeight, browserClientHeight) :\n       Math.max(y - offsetY, 0);\n\n      node.style.top = expandUp ? null : `${adjustedY}px`;\n      node.style.bottom = expandUp ? `${browserClientHeight - adjustedY}px` : null;\n\n      node.style.left = expandLeft ? null : `${adjustedX}px`;\n      node.style.right = expandLeft ? `${browserClientWidth - adjustedX}px` : null;\n\n      return slideFade(node, transitionOptions);\n   }\n\n   /**\n    * Handles item `onPress` invocation and applying immediate focus automatically if a `truthy` result is not\n    * returned as a result from the `onPress` callback signaling a focus continuation.\n    *\n    * @param {KeyboardEvent | PointerEvent}  event - Originating event.\n    *\n    * @param {import('../types').TJSMenuData.Menu.Item}  item - Target menu item.\n    */\n   function handleOnPress(event, item)\n   {\n      if (!event) { return; }\n\n      if (typeof item?.onPress === 'function')\n      {\n         Promise.resolve(item.onPress({ event, item, focusSource })).then((result) =>\n         {\n            // Coerce result to boolean.\n            const focusDeferred = !!result;\n\n            // Potentially apply focus source automatically if no deferral signaled.\n            if (!focusDeferred) { A11yHelper.applyFocusSource(focusSource); }\n         });\n      }\n      else\n      {\n         // Apply focus immediately.\n         A11yHelper.applyFocusSource(focusSource);\n      }\n   }\n\n   /**\n    * Invokes a function on click of a menu item then fires the `close` event and automatically runs the outro\n    * transition and destroys the component.\n    *\n    * @param {PointerEvent} event - PointerEvent.\n    *\n    * @param {import('../types').TJSMenuData.Items} item - Function to invoke on click.\n    */\n   function onClick(event, item)\n   {\n      handleOnPress(event, item);\n\n      if (!closed)\n      {\n         dispatch('close:contextmenu');\n         closed = true;\n         TJSSvelte.util.outroAndDestroy(current_component);\n      }\n   }\n\n   /**\n    * Determines if a pointer pressed to the document body closes the context menu. If the click occurs outside the\n    * context menu then fire the `close` event and run the outro transition then destroy the component.\n    *\n    * @param {PointerEvent | MouseEvent}  event - Pointer or mouse event from document body click / scroll wheel.\n    *\n    * @param {boolean}                    [isWheel=false] - True when scroll wheel; do not perform 2nd early out test.\n    */\n   function onClose(event, isWheel = false)\n   {\n      // Early out if the pointer down is inside the menu element.\n      if (event.target === menuEl || menuEl?.contains(event.target)) { return; }\n\n      // Early out if the event page X / Y is the same as this context menu.\n      if (!isWheel && Math.floor(event.pageX) === x && Math.floor(event.pageY) === y) { return; }\n\n      if (!closed)\n      {\n         dispatch('close:contextmenu');\n         closed = true;\n         TJSSvelte.util.outroAndDestroy(current_component);\n      }\n   }\n\n   /**\n    * Provides an explicit function for direct event registration.\n    *\n    * @param {WheelEvent}  event -\n    */\n   function onCloseWheel(event)\n   {\n      onClose(event, true);\n   }\n\n   /**\n    * Handle key commands for closing the menu ('Esc') and reverse focus cycling via 'Shift-Tab'. Also stop propagation\n    * for the key code assigned for menu item selection ('Enter').\n    *\n    * @param {KeyboardEvent}  event - KeyboardEvent.\n    */\n   function onKeydownMenu(event)\n   {\n      // Handle menu item keyCode selection.\n      if (event.code === keyCode)\n      {\n         event.stopPropagation();\n         return;\n      }\n\n      switch (event.code)\n      {\n         case 'Tab':\n            event.stopPropagation();\n\n            // Handle reverse focus cycling with `<Shift-Tab>`.\n            if (event.shiftKey)\n            {\n               // Collect all focusable elements from `elementRoot` and ignore TJSFocusWrap.\n               const allFocusable = A11yHelper.getFocusableElements(menuEl, s_IGNORE_CLASSES);\n\n               // Find first and last focusable elements.\n               const firstFocusEl = allFocusable.length > 0 ? allFocusable[0] : void 0;\n               const lastFocusEl = allFocusable.length > 0 ? allFocusable[allFocusable.length - 1] : void 0;\n\n               // Only cycle focus to the last keyboard focusable app element if `elementRoot` or first focusable\n               // element is the active element.\n               if (menuEl === activeWindow.document.activeElement ||\n                firstFocusEl === activeWindow.document.activeElement)\n               {\n                  if (CrossWindow.isHTMLElement(lastFocusEl) && firstFocusEl !== lastFocusEl)\n                  {\n                     lastFocusEl.focus();\n                  }\n\n                  event.preventDefault();\n               }\n            }\n\n            break;\n\n         default:\n            // Any other key stop propagation preventing any global key handlers from responding.\n            event.stopPropagation();\n            break;\n      }\n   }\n\n   /**\n    * Handle key commands for closing the menu ('Esc') and reverse focus cycling via 'Shift-Tab'. Also stop propagation\n    * for the key code assigned for menu item selection ('Enter').\n    *\n    * @param {KeyboardEvent}  event - KeyboardEvent.\n    */\n   function onKeyupMenu(event)\n   {\n      switch (event.code)\n      {\n         case 'ContextMenu':\n         case 'Escape':\n            event.preventDefault();\n            event.stopPropagation();\n\n            if (!closed)\n            {\n               let localFocusSource = focusSource;\n\n               // Note: Due to the differences between browsers a small delay is added before applying any previous\n               // focus source. Browsers like Firefox will trigger a `contextmenu` event in response to the keyboard\n               // `ContextMenu` event and this will be received by any previous focus source which is not desired.\n               setTimeout(() =>\n               {\n                  A11yHelper.applyFocusSource(localFocusSource);\n                  localFocusSource = void 0;\n               }, 50);\n\n               closed = true;\n               dispatch('close:contextmenu');\n               TJSSvelte.util.outroAndDestroy(current_component);\n            }\n            break;\n      }\n   }\n\n   /**\n    * Handle key presses on menu items.\n    *\n    * @param {KeyboardEvent}     event - KeyboardEvent.\n    *\n    * @param {import('./types').TJSMenuData.Items}   item - Menu item data.\n    */\n   function onKeyupItem(event, item)\n   {\n      if (event.code === keyCode)\n      {\n         handleOnPress(event, item);\n\n         if (!closed)\n         {\n            closed = true;\n            dispatch('close:contextmenu');\n            TJSSvelte.util.outroAndDestroy(current_component);\n\n            event.preventDefault();\n            event.stopPropagation();\n         }\n      }\n   }\n\n   /**\n    * Closes context menu when browser window is blurred.\n    */\n   function onWindowBlur()\n   {\n      if (!closed)\n      {\n         A11yHelper.applyFocusSource(focusSource);\n\n         dispatch('close:contextmenu');\n         closed = true;\n         TJSSvelte.util.outroAndDestroy(current_component);\n      }\n   }\n</script>\n\n<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n<nav id={id}\n     class=\"tjs-context-menu {classes.join(' ')}\"\n     bind:this={menuEl}\n     on:contextmenu|preventDefault|stopPropagation\n     on:click|preventDefault|stopPropagation\n     on:keydown|stopPropagation={onKeydownMenu}\n     on:keyup|preventDefault|stopPropagation={onKeyupMenu}\n     popover=manual\n     transition:animate|global\n     use:applyStyles={styles}\n     tabindex=-1>\n\n    <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n    <ol class=tjs-context-menu-items role=menu>\n        {#each items as item}\n            {#if item['#type'] === 'class'}\n                <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n                <li class=\"tjs-context-menu-item tjs-context-menu-item-button\"\n                    on:click={(event) => onClick(event, item)}\n                    on:keyup={(event) => onKeyupItem(event, item)}\n                    role=menuitem\n                    tabindex=0>\n                    <TJSFocusIndicator absolute={true} />\n                    <svelte:component this={item.svelte.class} {...(isObject(item.svelte.props) ? item.svelte.props : {})} />\n                </li>\n            {:else if item['#type'] === 'font'}\n                <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n                <li class=\"tjs-context-menu-item tjs-context-menu-item-button\"\n                    on:click={(event) => onClick(event, item)}\n                    on:keyup={(event) => onKeyupItem(event, item)}\n                    role=menuitem\n                    tabindex=0>\n                    <TJSFocusIndicator absolute={true} />\n                    <i class={item.icon}></i>\n                    <span class=tjs-context-menu-item-label>{localize(item.label)}</span>\n                </li>\n            {:else if item['#type'] === 'img'}\n                <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n                <li class=\"tjs-context-menu-item tjs-context-menu-item-button\"\n                    on:click={(event) => onClick(event, item)}\n                    on:keyup={(event) => onKeyupItem(event, item)}\n                    role=menuitem\n                    tabindex=0>\n                    <TJSFocusIndicator absolute={true} />\n                    <img src={item.icon} alt={item.imageAlt}>\n                    <span class=tjs-context-menu-item-label>{localize(item.label)}</span>\n                </li>\n            {:else if item['#type'] === 'label'}\n                <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n                <li class=\"tjs-context-menu-item tjs-context-menu-item-button\"\n                    on:click={(event) => onClick(event, item)}\n                    on:keyup={(event) => onKeyupItem(event, item)}\n                    role=menuitem\n                    tabindex=0>\n                    <TJSFocusIndicator absolute={true} />\n                    <span class=tjs-context-menu-item-label class:has-icons={hasIcon}>{localize(item.label)}</span>\n                </li>\n            {:else if item['#type'] === 'separator-hr'}\n                <hr>\n            {:else if item['#type'] === 'svg'}\n               <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->\n               <li class=\"tjs-context-menu-item tjs-context-menu-item-button\"\n                   on:click={(event) => onClick(event, item)}\n                   on:keyup={(event) => onKeyupItem(event, item)}\n                   role=menuitem\n                   tabindex=0>\n                  <TJSFocusIndicator absolute={true} />\n                  <svg use:inlineSvg={{ src: item.icon }}></svg>\n                  <span class=tjs-context-menu-item-label>{localize(item.label)}</span>\n               </li>\n            {/if}\n        {/each}\n    </ol>\n    <TJSFocusWrap elementRoot={menuEl} />\n</nav>\n\n<style>\n    /**\n     * Allow click through any `svg` element.\n     */\n    svg {\n        pointer-events: none;\n    }\n\n    .tjs-context-menu {\n        position: fixed;\n        width: fit-content;\n        height: max-content;\n        overflow: hidden;\n\n        margin: 0;\n        inset: unset;\n\n        background: var(--tjs-context-menu-background);\n        border: var(--tjs-context-menu-border);\n        border-radius: var(--tjs-context-menu-border-radius);\n        box-shadow: var(--tjs-context-menu-box-shadow);\n        color: var(--tjs-context-menu-color);\n        font-size: var(--tjs-context-menu-font-size);\n        max-width: var(--tjs-context-menu-max-width, 360px);\n        min-width: var(--tjs-context-menu-min-width, 20px);\n        padding: var(--tjs-context-menu-padding, 0);\n\n        text-align: start;\n    }\n\n    .tjs-context-menu:focus-visible {\n        outline: var(--tjs-default-a11y-outline-focus-visible, 2px solid transparent);\n    }\n\n    .tjs-context-menu-items {\n        list-style: none;\n        margin: 0;\n        padding: 0;\n    }\n\n    .tjs-context-menu-items hr {\n        margin-block-start: 0;\n        margin-block-end: 0;\n        margin: var(--tjs-context-menu-hr-margin, var(--tjs-default-hr-margin, 0 0.25em));\n        border-top: var(--tjs-context-menu-hr-border-top, var(--tjs-default-hr-border-top, 1px solid #555));\n        border-bottom: var(--tjs-context-menu-hr-border-bottom, var(--tjs-default-hr-border-bottom, 1px solid #444));\n    }\n\n    .tjs-context-menu-item {\n        display: flex;\n        position: relative;\n\n        align-items: center;\n        border: var(--tjs-context-menu-item-border);\n        line-height: var(--tjs-context-menu-item-line-height, 1em);\n        margin: var(--tjs-context-menu-item-margin, 0);\n        padding: var(--tjs-context-menu-item-padding, 0.5em);\n    }\n\n    /* Disable default outline for focus visible / within */\n    .tjs-context-menu-item:focus-within, .tjs-context-menu-item:focus-visible {\n        outline: var(--tjs-default-a11y-outline-focus-visible, 2px solid transparent);\n    }\n\n    .tjs-context-menu-item i {\n        text-align: center;\n        width: var(--tjs-context-menu-item-icon-width, var(--tjs-default-menu-item-icon-width, 1.25em));\n    }\n\n    .tjs-context-menu-item img, .tjs-context-menu-item svg {\n        width: var(--tjs-context-menu-item-icon-width, var(--tjs-default-menu-item-icon-width, 1.25em));\n        height: var(--tjs-context-menu-item-icon-height, var(--tjs-default-menu-item-icon-height, 1.25em));\n    }\n\n    .tjs-context-menu-item-button {\n        gap: var(--tjs-context-menu-item-button-gap, var(--tjs-default-menu-item-button-gap, 0.5em));\n    }\n\n    .tjs-context-menu-item-button:hover {\n        background: var(--tjs-context-menu-item-background-highlight);\n        border: var(--tjs-context-menu-item-border-highlight);\n        color: var(--tjs-context-menu-item-color-highlight);\n        cursor: var(--tjs-context-menu-item-cursor-hover, var(--tjs-cursor-pointer, pointer));\n        text-shadow: var(--tjs-context-menu-item-text-shadow-focus-hover);\n    }\n\n    .tjs-context-menu-item-button:focus-visible, .tjs-context-menu-item-button:focus-within:has(:focus-visible) {\n        background: var(--tjs-context-menu-item-background-highlight);\n        border: var(--tjs-context-menu-item-border-highlight);\n        color: var(--tjs-context-menu-item-color-highlight);\n        text-shadow: var(--tjs-context-menu-item-text-shadow-focus-hover);\n    }\n\n    /* Enable focus indicator for focus-within */\n    /* Note: the use of `has` pseudo-selector that requires a child with :focus-visible */\n    .tjs-context-menu-item:focus-visible, .tjs-context-menu-item:focus-within:has(:focus-visible) {\n       --tjs-focus-indicator-background: var(--tjs-context-menu-item-focus-indicator-background, currentColor);\n    }\n\n    .tjs-context-menu-item-label {\n        overflow: var(--tjs-context-menu-item-label-overflow, var(--tjs-default-menu-item-label-overflow, hidden));\n        text-overflow: var(--tjs-context-menu-item-label-text-overflow, var(--tjs-default-menu-item-label-text-overflow, ellipsis));\n        white-space: var(--tjs-context-menu-item-label-white-space, var(--tjs-default-menu-item-label-white-space));\n    }\n\n    .tjs-context-menu-item-label.has-icons {\n       padding-left: calc(var(--tjs-context-menu-item-icon-width, 1.25em) + var(--tjs-context-menu-item-button-gap, 0.5em));\n    }\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n    export let section;\n    export let section02;\n\n    let { animation, category, idx } = getContext('animation-data');\n\n    $: isCustom = $animation[section][section02].enableCustom;\n\n    const label = game.i18n.localize('autoanimations.menus.custom')\n    function removeMetaData() {\n       delete $animation.metaData\n   }\n</script>\n\n<table class=\"c\">\n    <tr>\n        <td style=\"border: none;\">\n            <div class=\"flexrow\">\n                <label for=\"\" class=\"aa-customFont\">{label}</label>\n                <input\n                type=\"checkbox\"\n                id=\"{section} {section02} {animation._data.id}\"\n                bind:checked={$animation[section][section02].enableCustom}\n                on:change={() => removeMetaData()}\n                />\n            </div>\n        </td>\n        <td style=\" border: none\" class={isCustom ? \"\" : \"aa-disableOpacity\"}>\n            <input\n            disabled={!isCustom}\n            type=\"text\"\n            bind:value={$animation[section][section02].customPath}\n            on:change={() => removeMetaData()}\n            style=\"font-weight:normal; font-size:small; border-radius: 5px;text-align:left; width: 100%;\"\n            />\n        </td>\n        <td style=\"border: none\" class={isCustom ? \"\" : \"aa-disableOpacity\"}>\n            <i class=\"fas fa-file-import\"\n               title=\"File Picker\"\n               style=\"font-size:1.5em\"\n               on:click|preventDefault={() => category.selectCustom(section, section02, idx)}\n               role=presentation\n            />\n            <i class=\"fas fa-database\"\n               title=\"Sequencer Database Viewer\"\n               style=\"font-size:1.5em;margin-left: 5px\"\n               on:click|preventDefault={() => category.openSequencerViewer()}\n               role=presentation\n            />\n        </td>\n    </tr>\n</table>\n\n<style lang=\"scss\">\n    table.c label {\n        margin-top: .2em;\n    }\n    .aa-customFont {\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-weight: bold;\n        font-size: 1.5em;\n    }\n    input[type=checkbox]{\n        max-width: 1.5em;\n    }\n    input[type=checkbox]:checked::after{\n        content: \"\";\n    }\n        input[type=checkbox]:checked::before{\n                    background-color: black !important;\n    }\n</style>\n","<script>\n    export let title;\n</script>\n\n<div class=\"aa-SectionHeader\">\n    <div class=\"flexcol\">\n        <label for=\"\">{title}</label>\n    </div>\n</div>\n\n<style lang=\"scss\">\n    .aa-SectionHeader {\n        border-bottom: 2px solid rgba(181, 69, 52, 0.35);\n        margin-bottom: -5px;\n        margin-right: 5%;\n        margin-left: 5%;\n        label {\n            align-self: center;\n            font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n            font-size: 23px;\n            font-weight: bold;\n            text-align: center;\n            margin-right: 6%;\n            margin-left: 6%;\n            color: black;\n            padding-top: 2px;\n        }\n    }\n</style>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n    import { getContext }   from \"svelte\";\n\n    import CustomPicker from \"./CustomPicker.svelte\";\n    import SectionHeader from \"./SectionHeader.svelte\";\n\n    //export let animation;\n    export let section;\n    export let section02 = \"video\";\n    export let title;\n    //export let idx;\n    //export let category;\n\n    let { animation, category, idx } = getContext('animation-data');\n\n    function typeUpdate() {\n        $animation[section][section02].animation = category.animationMenu[$animation[section][section02].dbSection][$animation[section][section02].menuType][0][0];\n        $animation[section][section02].variant = category.variantMenu[$animation[section][section02].dbSection][$animation[section][section02].menuType][$animation[section][section02].animation][0][0];\n        $animation[section][section02].color = category.colorMenu[$animation[section][section02].dbSection][$animation[section][section02].menuType][$animation[section][section02].animation][$animation[section][section02].variant][0][0];\n    }\n    function animationUpdate() {\n        $animation[section][section02].variant = category.variantMenu[$animation[section][section02].dbSection][$animation[section][section02].menuType][$animation[section][section02].animation][0][0];\n        $animation[section][section02].color = category.colorMenu[$animation[section][section02].dbSection][$animation[section][section02].menuType][$animation[section][section02].animation][$animation[section][section02].variant][0][0];\n    }\n    function variantUpdate() {\n        $animation[section][section02].color = category.colorMenu[$animation[section][section02].dbSection][$animation[section][section02].menuType][$animation[section][section02].animation][$animation[section][section02].variant][0][0];\n    }\n\n    $: dbSection = $animation[section][section02].dbSection;\n    $: menuType = $animation[section][section02].menuType;\n    $: anim = $animation[section][section02].animation;\n    $: variant = $animation[section][section02].variant;\n\n</script>\n\n<SectionHeader {title} />\n<div class=\"aaSelect\">\n    <table class={`aaMenu ${$animation[section][section02].enableCustom ? 'aa-disableOpacity' : \"\"}`}>\n        <tr>\n            <td>\n            </td>\n            <td>\n                <!--Type Menu-->\n                <div>\n                    <label for=\"\">{localize(\"autoanimations.menus.type\")}</label>\n                </div>\n                <div class=\"flexcol\">\n                    <select\n                        bind:value={$animation[section][section02].menuType}\n                        on:change={async () =>\n                            //await category.menuTypeChange(section, idx, section02, dbSection)\n                            typeUpdate()\n                        }\n                    >\n                        {#each category.typeMenu[$animation[section][section02].dbSection] ?? [] as [key, name]}\n                            <option value={key}>{name}</option>\n                        {/each}\n                    </select>\n                </div>\n            </td>\n            <td>\n\n            </td>\n        </tr>\n        <tr>\n            <td>\n                <div>\n                    <label for=\"\">{localize(\"autoanimations.menus.animation\")}</label>\n                </div>\n                <div class=\"flexcol\">\n                    <select\n                        bind:value={$animation[section][section02].animation}\n                        on:change={async () =>\n                                //await category.animationChange(section, idx, section02, dbSection)\n                                animationUpdate()\n                            }\n                    >\n                        {#each category.animationMenu[dbSection]?.[menuType] ?? [] as [key, name]}\n                            <option value={key}>{name}</option>\n                        {/each}\n                    </select>\n                </div>\n            </td>\n            <td>\n                <!--Variant Menu-->\n                <div>\n                    <label for=\"\">{localize(\"autoanimations.menus.variant\")}</label>\n                </div>\n                <div class=\"flexcol\">\n                    <select\n                        bind:value={$animation[section][section02].variant}\n                        on:change={async () =>\n                                //await category.variantChange(section, idx, section02, dbSection)\n                                variantUpdate()\n                            }\n                    >\n                        {#each category.variantMenu[dbSection]?.[menuType]?.[anim] ?? [] as [key, name]}\n                            <option value={key}>{name}</option>\n                        {/each}\n                    </select>\n                </div>\n            </td>\n            <td>\n                <!--Color Menu-->\n                <div>\n                    <label for=\"\">{localize(\"autoanimations.menus.color\")}</label>\n                </div>\n                <div class=\"flexcol\">\n                    <select bind:value={$animation[section][section02].color}>\n                        {#each category.colorMenu[dbSection]?.[menuType]?.[anim]?.[variant] ?? [] as [key, name]}\n                            <option value={key}>{name}</option>\n                        {/each}\n                    </select>\n                </div>\n            </td>\n        </tr>\n    </table>\n</div>\n<CustomPicker {section} {section02} />\n\n<style lang=\"scss\">\n</style>\n","import { resizeObserver } from '@typhonjs-fvtt/runtime/svelte/action/dom/observer';\nimport { isMinimalWritableStore, subscribeFirstRest } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { Timing } from '@typhonjs-fvtt/runtime/util';\nimport { nextAnimationFrame } from '@typhonjs-fvtt/runtime/util/animate';\nimport { isObject } from '@typhonjs-fvtt/runtime/util/object';\nimport { tick } from 'svelte';\nimport { writable } from 'svelte/store';\n\n/**\r\n * Provides an action to save `scrollTop` / `scrollLeft` of an element with scrollbars. This action should be used on\r\n * the scrollable element and must include writable stores that holds the active store for the current `scrollTop` /\r\n * `scrollLeft` value.\r\n *\r\n * You may switch the stores externally and this action will update based on the newly set store. This is useful for\r\n * instance providing a select box that controls the scrollable container switching between multiple lists of data\r\n * serializing scroll position between each.\r\n *\r\n * @param {HTMLElement} node - The target scrollable HTML element.\r\n *\r\n * @param {import('./types').DOMPropActionOptions.ApplyScroll} options - Options.\r\n *\r\n * @returns {(import('svelte/action').ActionReturn<import('./types').DOMPropActionOptions.ApplyScroll>)} Lifecycle\r\n *          functions.\r\n */\r\nfunction applyScroll(node, options = {})\r\n{\r\n   const storeUpdateLeft = (value) => storeUpdate(value, 'scrollLeft');\r\n   const storeUpdateTop = (value) => storeUpdate(value, 'scrollTop');\r\n\r\n   /** @type {import('#runtime/svelte/store/util').MinimalWritable<number>} */\r\n   let storeLeft, storeTop;\r\n\r\n   /** @type {Function} */\r\n   let unsubscribeLeft, unsubscribeTop;\r\n\r\n   /**\r\n    * Save element `scrollLeft` / `scrollTop` to the current stores.\r\n    */\r\n   function onScroll()\r\n   {\r\n      if (node.isConnected)\r\n      {\r\n         storeLeft?.set?.(node.scrollLeft);\r\n         storeTop?.set?.(node.scrollTop);\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Update `scrollLeft` / `scrollTop` stores from options and configures subscribers.\r\n    *\r\n    * @param {import('./types').DOMPropActionOptions.ApplyScroll} newOptions -\r\n    */\r\n   function setOptions(newOptions)\r\n   {\r\n      if (!isObject(newOptions)) { throw new TypeError(`applyScroll error: 'options' must be an object.`); }\r\n\r\n      if (newOptions.scrollLeft !== void 0 && !isMinimalWritableStore(newOptions.scrollLeft))\r\n      {\r\n         throw new TypeError(`applyScroll error: 'storeLeft' must be a minimal writable Svelte store.`);\r\n      }\r\n\r\n      if (newOptions.scrollTop !== void 0 && !isMinimalWritableStore(newOptions.scrollTop))\r\n      {\r\n         throw new TypeError(`applyScroll error: 'scrollTop' must be a minimal writable Svelte store.`);\r\n      }\r\n\r\n      if (storeLeft !== newOptions.scrollLeft)\r\n      {\r\n         unsubscribeLeft?.();\r\n         unsubscribeLeft = void 0;\r\n         storeLeft = newOptions.scrollLeft;\r\n\r\n         if (isMinimalWritableStore(storeLeft)) { unsubscribeLeft = storeLeft.subscribe(storeUpdateLeft); }\r\n      }\r\n\r\n      if (storeTop !== newOptions.scrollTop)\r\n      {\r\n         unsubscribeTop?.();\r\n         unsubscribeTop = void 0;\r\n         storeTop = newOptions.scrollTop;\r\n\r\n         if (isMinimalWritableStore(storeTop)) { unsubscribeTop = storeTop.subscribe(storeUpdateTop); }\r\n      }\r\n   }\r\n\r\n   /**\r\n    * Updates element `scrollLeft` / `scrollTop`.\r\n    *\r\n    * @param {number}   value - Value to set.\r\n    *\r\n    * @param {'scrollLeft' | 'scrollTop'} prop - Property to update.\r\n    */\r\n   async function storeUpdate(value, prop)\r\n   {\r\n      if (!Number.isFinite(value)) { return; }\r\n\r\n      await nextAnimationFrame(2);  // Ensure DOM is patched.\r\n\r\n      if (!node.isConnected) { return; }  // Element might have been replaced.\r\n\r\n      node[prop] = Math.max(0, value);\r\n   }\r\n\r\n   // Immediate initialization ---------------------------------------------------------------------------------------\r\n\r\n   setOptions(options);\r\n\r\n   // Ignore first resize callback.\r\n   let ignoreResize = true;\r\n\r\n   let resizeControl = resizeObserver(node, Timing.debounce(() =>\r\n   {\r\n      // Ignore first resize observed callback.\r\n      if (ignoreResize) { ignoreResize = false; return; }\r\n\r\n      if (node.isConnected)\r\n      {\r\n         storeLeft?.set?.(node.scrollLeft);\r\n         storeTop?.set?.(node.scrollTop);\r\n      }\r\n   }, 750));\r\n\r\n   // Setup debounced scroll event handler.\r\n   const debounceFn = Timing.debounce((e) => onScroll(), 750);\r\n\r\n   node.addEventListener('scroll', debounceFn);\r\n\r\n   // Action return --------------------------------------------------------------------------------------------------\r\n\r\n   return {\r\n      /**\r\n       * @param {import('./types').DOMPropActionOptions.ApplyScroll} newOptions - New options.\r\n       */\r\n      update: (newOptions) => setOptions(newOptions),\r\n\r\n      destroy: () =>\r\n      {\r\n         ignoreResize = true;\r\n\r\n         node.removeEventListener('scroll', debounceFn);\r\n\r\n         resizeControl.destroy();\r\n         resizeControl = void 0;\r\n\r\n         storeLeft = void 0;\r\n         storeTop = void 0;\r\n\r\n         unsubscribeLeft?.();\r\n         unsubscribeTop?.();\r\n         unsubscribeLeft = void 0;\r\n         unsubscribeTop = void 0;\r\n      }\r\n   };\r\n}\n\n/**\n * Provides a toggle action for `details` HTML elements. The boolean store when provided controls open / closed state.\n * Animation is accomplished using WAAPI controlling the height of the details element. It should be noted that this\n * animation may cause layout thrashing (reflows) depending on the amount of DOM elements on the page though this\n * doesn't occur under most situations. Animation can be toggled on / off with the `animate` option.\n *\n * It is not necessary to bind the store to the `open` attribute of the associated details element.\n *\n * When the action is triggered to close the details element a data attribute `closing` is set to `true`. This allows\n * any associated closing transitions to start immediately.\n *\n * @param {HTMLDetailsElement} details - The `details` element.\n *\n * @param {import('./types').DOMPropActionOptions.ToggleDetails} - Options.\n *\n * @returns {import('svelte/action').ActionReturn<import('./types').DOMPropActionOptions.ToggleDetails>} Lifecycle\n *          functions.\n */\nfunction toggleDetails(details, { store, animate = true, clickActive = true, enabled = true } = {})\n{\n   // Add closing data. Useful for animating chevron immediately while closing.\n   details.dataset.closing = 'false';\n\n   /** @type {HTMLElement} */\n   const summaryEl = details.querySelector('summary');\n\n   /** @type {HTMLElement} */\n   let contentEl = null;\n\n   // Find the first child that is not a summary element; this is the content element. When animating overflow is\n   // set to `hidden` to prevent scrollbars from activating.\n   for (const child of details.children)\n   {\n      if (child.tagName !== 'SUMMARY')\n      {\n         contentEl = child;\n         break;\n      }\n   }\n\n   /** @type {Animation} */\n   let animation;\n\n   /** @type {boolean} */\n   let open = details.open;  // eslint-disable-line no-shadow\n\n   /** @type {import('svelte/store').Unsubscriber} */\n   let unsubscribe;\n\n   // Create store instance if not provided.\n   if (!isMinimalWritableStore(store)) { store = writable(false); }\n\n   if (store)\n   {\n      // The store sets initial open state and handles animation on further changes.\n      unsubscribe = subscribeFirstRest(store, (value) =>\n      {\n         if (enabled && typeof value === 'boolean')\n         {\n            open = value;\n            details.open = open;\n         }\n      }, async (value) =>\n      {\n         if (enabled && typeof value === 'boolean')\n         {\n            open = value;\n\n            // Await `tick` to allow any conditional logic in the template to complete updating before handling animation.\n            await tick();\n\n            handleAnimation();\n         }\n      });\n   }\n\n   /**\n    * @param {number} a -\n    *\n    * @param {number} b -\n    *\n    * @param {boolean} value -\n    */\n   function animateWAAPI(a, b, value)\n   {\n      // Must guard when `b - a === 0`; add a small epsilon and wrap with Math.max.\n      const duration = Math.max(0, 30 * Math.log(Math.abs(b - a) + Number.EPSILON));\n\n      if (animate)\n      {\n         details.style.overflow = 'hidden';\n         if (contentEl) { contentEl.style.overflow = 'hidden'; }\n\n         animation = details.animate(\n            {\n               height: [`${a}px`, `${b}px`]\n            },\n            {\n               duration,\n               easing: 'ease-out'\n            }\n         );\n\n         animation.onfinish = () =>\n         {\n            details.open = value;\n            details.dataset.closing = 'false';\n            details.style.overflow = null;\n            if (contentEl) { contentEl.style.overflow = null; }\n         };\n      }\n      else\n      {\n         details.open = value;\n         details.dataset.closing = 'false';\n         details.style.overflow = null;\n         if (contentEl) { contentEl.style.overflow = null; }\n      }\n   }\n\n   const noop = () => void 0;\n\n   /**\n    * Handles animation coordination based on current state.\n    */\n   function handleAnimation()\n   {\n      if (animate)\n      {\n         if (open)\n         {\n            const a = details.offsetHeight;\n            if (animation)\n            {\n               animation.cancel();\n               animation.effect = null;\n               animation.onfinish = noop;\n            }\n            details.open = true;\n            const b = details.offsetHeight;\n\n            animateWAAPI(a, b, true);\n         }\n         else\n         {\n            const a = details.offsetHeight;\n            if (animation)\n            {\n               animation.cancel();\n               animation.effect = null;\n               animation.onfinish = noop;\n            }\n            const b = summaryEl.offsetHeight;\n\n            details.dataset.closing = 'true';\n\n            animateWAAPI(a, b, false);\n         }\n      }\n      else\n      {\n         details.open = open;\n      }\n   }\n\n   /**\n    * @param {MouseEvent} e - A mouse event.\n    */\n   function handleClick(e)\n   {\n      if (clickActive && enabled)\n      {\n         e.preventDefault();\n\n         // Simply set the store to the opposite of current open state and the callback above handles animation.\n         store.set(!open);\n      }\n   }\n\n   summaryEl.addEventListener('click', handleClick);\n\n   return {\n      update(options)\n      {\n         if (typeof options.animate === 'boolean') { animate = options.animate; }\n\n         if (typeof options.clickActive === 'boolean') { clickActive = options.clickActive; }\n\n         if (typeof options.enabled === 'boolean') { enabled = options.enabled; }\n\n         if (isMinimalWritableStore(options.store) && options.store !== store)\n         {\n            if (typeof unsubscribe === 'function') { unsubscribe(); }\n            store = options.store;\n\n            // The store sets initial open state and handles animation on further changes.\n            unsubscribe = subscribeFirstRest(store, (value) =>\n            {\n               if (enabled && typeof value === 'boolean')\n               {\n                  open = value;\n                  details.open = open;\n               }\n            }, async (value) =>\n            {\n               if (enabled && typeof value === 'boolean')\n               {\n                  open = value;\n\n                  // Await `tick` to allow any conditional logic in the template to complete updating before handling animation.\n                  await tick();\n\n                  handleAnimation();\n               }\n            });\n         }\n      },\n      destroy()\n      {\n         if (typeof unsubscribe === 'function') { unsubscribe(); }\n         summaryEl.removeEventListener('click', handleClick);\n      }\n   };\n}\n\nexport { applyScroll, toggleDetails };\n//# sourceMappingURL=index.js.map\n","<script>\n   /**\n    * TJSFolder provides a collapsible folder using the details and summary HTMLElements.\n    *\n    * This is a slotted component. The default slot is the collapsible contents. There are also two additional optional\n    * named slots available for the summary element. `label` allows setting custom content with the fallback being the\n    * `label` string. Additionally, `summary-end` allows a component or text to be slotted after the label. This can be\n    * useful for say an \"expand all\" button.\n    *\n    * ----------------------------------------------------------------------------------------------------------------\n    * ### Exported props\n    *\n    * - `folder` ({@link TJSFolder.Data}): An object defining all properties of a folder including potentially data\n    * driven minimal Svelte configuration objects (`slotDefault`, `slotLabel`, and `slotSummaryEnd`) providing default\n    * component implementations.\n    *\n    * Or in lieu of passing the folder object you can assign these props directly:\n    *\n    * - `id`: Anything used for an ID.\n    *\n    * -`label`: The label name of the folder; string.\n    *\n    * -`store`: The store tracking the open / close state: Writable<boolean>\n    *\n    * -`styles`: Styles to be applied inline via `applyStyles` action.\n    *\n    * ----------------------------------------------------------------------------------------------------------------\n    * ### Events\n    *\n    * There are several events that are fired and / or bubbled up through parent elements. There are four\n    * custom events that pass a details object including: `the details element, id, label, and store`.\n    *\n    * The following events are bubbled up such that assigning a listener in any parent component receives them\n    * from all children folders:\n    *\n    * - `click` - Basic MouseEvent of folder being clicked.\n    *\n    * - `keydown` - Key down event.\n    *\n    * - `keyup` - Key up event.\n    *\n    * - `closeAny` - Triggered when any child folder is closed w/ details object.\n    *\n    * - `openAny` - Triggered when any child folder is opened w/ details object.\n    *\n    * The following events do not propagate / bubble up and can be registered with:\n    *\n    * - `close` - Triggered when direct descendent folder is closed w/ details object.\n    *\n    * - `open` - Triggered when direct descendent folder is opened w/ details object.\n    *\n    * ----------------------------------------------------------------------------------------------------------------\n    * Styling: To style this component use `details.tjs-folder` as a selector. Each element also contains data\n    * attributes for `id` and `label`.\n    *\n    * There are several local CSS variables that you can use to change the appearance dynamically. Either use\n    * CSS props or pass in a `styles` object w/ key / value props to set to the details element.\n    *\n    * ### CSS Variables\n    * The following CSS variables are supported, but not defined by default:\n    *\n    * ```\n    * Details element (attributes follow `--tjs-folder-details-`):\n    * --tjs-folder-details-margin-left: -0.4em;\n    * --tjs-folder-details-padding-left: 0.4em; set for children to indent more;\n    *\n    * Summary element (attributes follow `--tjs-folder-summary-`):\n    * --tjs-folder-summary-background-blend-mode: initial\n    * --tjs-folder-summary-background: none\n    * --tjs-folder-summary-background-open - fallback: --tjs-folder-summary-background; default: inherit\n    * --tjs-folder-summary-border: none\n    * --tjs-folder-summary-border-radius: 0\n    * --tjs-folder-summary-border-width: initial\n    * --tjs-folder-summary-color: inherit\n    * --tjs-folder-summary-font-size: inherit\n    * --tjs-folder-summary-font-weight: bold\n    * --tjs-folder-summary-font-family: inherit\n    * --tjs-folder-summary-gap: 0.125em\n    * --tjs-folder-summary-padding: 0.25em\n    * --tjs-folder-summary-text-shadow: none\n    * --tjs-folder-summary-transition: background 0.1s\n    * --tjs-folder-summary-width: fit-content; wraps content initially, set to 100% or other width measurement\n    *\n    * Summary element (disabled):\n    * --tjs-folder-summary-disabled-color: inherit\n    * --tjs-folder-summary-disabled-cursor: default\n    *\n    * Summary element (focus visible):\n    * --tjs-folder-summary-box-shadow-focus-visible - fallback: --tjs-default-box-shadow-focus-visible\n    * --tjs-folder-summary-outline-focus-visible - fallback: --tjs-default-outline-focus-visible; default: revert\n    * --tjs-folder-summary-transition-focus-visible - fallback: --tjs-default-transition-focus-visible\n    *\n    * Summary SVG / chevron element (attributes follow `--tjs-folder-summary-chevron-`):\n    *\n    * The width and height use multiple fallback variables before setting a default of 1.25em. You can provide\n    * `--tjs-folder-summary-chevron-size`. If not provided then the chevron dimensions are set by\n    * `--tjs-folder-summary-font-size`; default: 1.25em.\n    *\n    * --tjs-folder-summary-chevron-border-radius: 0\n    * --tjs-folder-summary-chevron-color: currentColor\n    * --tjs-folder-summary-chevron-opacity: 0.2; Opacity when not hovering.\n    * --tjs-folder-summary-chevron-opacity-focus-visible: 1; When summary focus-visible.\n    * --tjs-folder-summary-chevron-opacity-hover: 1; Opacity when hovering.\n    * --tjs-folder-summary-chevron-margin: 0;\n    * --tjs-folder-summary-chevron-transition: opacity 0.2s, transform 0.1s\n    * --tjs-folder-summary-chevron-rotate-closed: -90deg; rotation angle when closed.\n    * --tjs-folder-summary-chevron-rotate-open: 0; rotation angle when open.\n    *\n    * Summary label element (attributes follow `--tjs-folder-summary-label-):\n    *\n    * By default, the label element does not wrap and uses ellipsis for text overflow.\n    *\n    * --tjs-folder-summary-label-overflow: hidden\n    * --tjs-folder-summary-label-text-overflow: ellipsis\n    * --tjs-folder-summary-label-white-space: nowrap\n    * --tjs-folder-summary-label-width: fit-content\n    *\n    * Default label (focus visible):\n    * --tjs-folder-summary-label-text-shadow-focus-visible - fallback: --tjs-default-text-shadow-focus-hover; default: revert\n    *\n    * Contents element (attributes follow `--tjs-folder-contents-`):\n    * --tjs-folder-contents-background-blend-mode: initial\n    * --tjs-folder-contents-background: none\n    * --tjs-folder-contents-border: none\n    * --tjs-folder-contents-margin: 0 0 0 -0.4em\n    *\n    * Padding is set directly by `--tjs-folder-contents-padding` or follows the following calculation:\n    * `0 0 0 calc(var(--tjs-folder-summary-font-size, 1em) * 0.8)`\n    *\n    * If neither `--tjs-folder-contents-padding` or `--tjs-folder-summary-font-size` is defined the default is\n    * `1em * 0.8`.\n    * ```\n    * @componentDocumentation\n    */\n\n   import { onDestroy }          from 'svelte';\n\n   import { writable }           from 'svelte/store';\n\n   import { toggleDetails }      from '@typhonjs-fvtt/runtime/svelte/action/dom/properties';\n   import { applyStyles }        from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n\n   import {\n      isMinimalWritableStore,\n      subscribeIgnoreFirst }     from '@typhonjs-fvtt/runtime/svelte/store/util';\n\n   import { TJSSvelte }          from '@typhonjs-fvtt/runtime/svelte/util';\n   import { CrossWindow }        from '@typhonjs-fvtt/runtime/util/browser';\n   import { localize }           from '@typhonjs-fvtt/runtime/util/i18n';\n   import { isObject }           from '@typhonjs-fvtt/runtime/util/object';\n\n   import { TJSFocusIndicator }  from '@typhonjs-fvtt/standard/component/dom/focus';\n\n   /** @type {import('./types').TJSFolder.Data} */\n   export let folder = void 0;\n\n   /** @type {boolean} */\n   export let animate = void 0;\n\n   /** @type {boolean} */\n   export let enabled = void 0;\n\n   /** @type {string} */\n   export let id = void 0;\n\n   /** @type {string} */\n   export let label = void 0;\n\n   /** @type {string} */\n   export let keyCode = void 0;\n\n   /** @type {import('./types').TJSFolder.InternalOptions} */\n   export let options = void 0;\n\n   /** @type {import('@typhonjs-fvtt/runtime/svelte/store/util').MinimalWritable<boolean>} */\n   export let store = void 0;\n\n   /** @type {object} */\n   export let styles = void 0;\n\n   /** @type {(data?: { event?: KeyboardEvent | PointerEvent }) => void} */\n   export let onClose = void 0;\n\n   /** @type {(data?: { event?: KeyboardEvent | PointerEvent }) => void} */\n   export let onOpen = void 0;\n\n   /** @type {(data?: { event?: PointerEvent }) => void} */\n   export let onContextMenu = void 0;\n\n   /** @type {import('./types').TJSFolder.InternalOptions} */\n   const localOptions = {\n      chevronOnly: false,\n      focusChevron: false,\n      focusIndicator: false,\n      strategy: 'remove'\n   }\n\n   let detailsEl, labelEl, summaryEl, svgEl;\n   let storeUnsubscribe;\n\n   $: animate = isObject(folder) && typeof folder.animate === 'boolean' ? folder.animate :\n    typeof animate === 'boolean' ? animate : true;\n\n   $: enabled = isObject(folder) && typeof folder.enabled === 'boolean' ? folder.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: id = isObject(folder) && typeof folder.id === 'string' ? folder.id :\n    typeof id === 'string' ? id : void 0;\n\n   $: label = isObject(folder) && typeof folder.label === 'string' ? folder.label :\n    typeof label === 'string' ? label : '';\n\n   $: keyCode = isObject(folder) && typeof folder.keyCode === 'string' ? folder.keyCode :\n    typeof keyCode === 'string' ? keyCode : 'Enter';\n\n   $: {\n      options = isObject(folder) && isObject(folder.options) ? folder.options :\n       isObject(options) ? options : {};\n\n      if (typeof options?.chevronOnly === 'boolean') { localOptions.chevronOnly = options.chevronOnly; }\n      if (typeof options?.focusChevron === 'boolean') { localOptions.focusChevron = options.focusChevron; }\n      if (typeof options?.focusIndicator === 'boolean') { localOptions.focusIndicator = options.focusIndicator; }\n      if (options?.strategy === 'remove' || options?.strategy === 'hidden')\n      {\n         localOptions.strategy = options.strategy;\n      }\n   }\n\n   $: {\n      store = isObject(folder) && isMinimalWritableStore(folder.store) ? folder.store :\n       isMinimalWritableStore(store) ? store : writable(false);\n\n      if (typeof storeUnsubscribe === 'function') { storeUnsubscribe(); }\n\n      // Manually subscribe to store in order to trigger only on changes; avoids initial dispatch on mount as `detailsEl`\n      // is not set yet. Directly dispatch custom events as Svelte 3 does not support bubbling of custom events by\n      // `createEventDispatcher`.\n      storeUnsubscribe = subscribeIgnoreFirst(store, ((value) =>\n      {\n         if (detailsEl)\n         {\n            detailsEl.dispatchEvent(createEvent(value ? 'open' : 'close'));\n            detailsEl.dispatchEvent(createEvent(value ? 'openAny' : 'closeAny', true));\n         }\n      }));\n   }\n\n   $: styles = isObject(folder) && isObject(folder.styles) ? folder.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: onClose = isObject(folder) && typeof folder.onClose === 'function' ? folder.onClose :\n    typeof onClose === 'function' ? onClose : void 0;\n\n   $: onOpen = isObject(folder) && typeof folder.onOpen === 'function' ? folder.onOpen :\n    typeof onOpen === 'function' ? onOpen : void 0;\n\n   $: onContextMenu = isObject(folder) && typeof folder.onContextMenu === 'function' ? folder.onContextMenu :\n    typeof onContextMenu === 'function' ? onContextMenu : void 0;\n\n   // For performance reasons when the folder is closed the main slot is not rendered.\n   // When the folder is closed `visible` is set to false with a slight delay to allow the closing animation to\n   // complete.\n   let visible = $store;\n   let timeoutId;\n\n   $: if (!$store)\n   {\n      timeoutId = setTimeout(() => visible = false, 500);\n   }\n   else\n   {\n      clearTimeout(timeoutId);\n      visible = true;\n   }\n\n   onDestroy(() => storeUnsubscribe());\n\n   /**\n    * Create a CustomEvent with details object containing relevant element and props.\n    *\n    * @param {string}   type - Event name / type.\n    *\n    * @param {boolean}  [bubbles=false] - Does the event bubble.\n    *\n    * @returns {CustomEvent<import('./types').TJSFolder.EventData>}\n    */\n   function createEvent(type, bubbles = false)\n   {\n      return new CustomEvent(type, {\n         detail: { element: detailsEl, folder, id, label, store },\n         bubbles\n      });\n   }\n\n   /**\n    * Handles opening / closing the details element from either click or keyboard event when summary focused.\n    *\n    * @param {KeyboardEvent | PointerEvent} event - Event.\n    *\n    * @param {boolean} [fromKeyboard=false] - True when event is coming from keyboard. This is used to ignore the\n    * chevronOnly click event handling.\n    */\n   function handleOpenClose(event, fromKeyboard = false)\n   {\n      const target = event.target;\n\n      const chevronTarget = target === svgEl || svgEl.contains(target);\n\n      if (target === summaryEl || target === labelEl || chevronTarget)\n      {\n         if (!fromKeyboard && localOptions.chevronOnly && !chevronTarget)\n         {\n            event.preventDefault();\n            event.stopPropagation();\n            return;\n         }\n\n         $store = !$store;\n\n         if ($store && typeof onOpen === 'function')\n         {\n            onOpen({ event, element: detailsEl, folder, id, label, store });\n         }\n         else if (!$store && typeof onClose === 'function')\n         {\n            onClose({ event, element: detailsEl, folder, id, label, store });\n         }\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n   }\n\n   /**\n    * Detects whether the summary click came from a pointer / mouse device or the keyboard. If from the keyboard and\n    * the active element is `summaryEl` then no action is taken and `onKeyDown` will handle the key event to open /\n    * close the detail element.\n    *\n    * @param {PointerEvent|MouseEvent} event\n    */\n   function onClickSummary(event)\n   {\n      if (!enabled) { return; }\n\n      // Firefox sends a `click` event / non-standard response so check for mozInputSource equaling 6 (keyboard) or\n      // a negative pointerId from Chromium and prevent default. This allows `onKeyUp` to handle any open / close\n      // action.\n      if (summaryEl === CrossWindow.getActiveElement(event) && (event?.pointerId === -1 || event?.mozInputSource === 6))\n      {\n         event.preventDefault();\n         event.stopPropagation();\n         return;\n      }\n\n      handleOpenClose(event);\n   }\n\n   /**\n    * Handles a context menu press forwarding the event to the handler.\n    *\n    * @param {PointerEvent} event - PointerEvent.\n    */\n   function onContextMenuPress(event)\n   {\n      if (!enabled) { return; }\n\n      if (typeof onContextMenu === 'function')\n      {\n         onContextMenu({ event, element: detailsEl, folder, id, label, store });\n      }\n   }\n\n   /**\n    * Detect if the key event came from the active tabbed / focused summary element and `options.keyCode` matches.\n    *\n    * @param {KeyboardEvent} event -\n    */\n   function onKeyDown(event)\n   {\n      if (!enabled) { return; }\n\n      if (summaryEl === CrossWindow.getActiveElement(event) && event.code === keyCode)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * Detect if the key event came from the active tabbed / focused summary element and `options.keyCode` matches.\n    *\n    * @param {KeyboardEvent} event -\n    */\n   function onKeyUp(event)\n   {\n      if (!enabled) { return; }\n\n      if (summaryEl === CrossWindow.getActiveElement(event) && event.code === keyCode)\n      {\n         handleOpenClose(event, true);\n\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * Handle receiving bubbled event from summary or content to close details / content.\n    */\n   function onLocalClose(event)\n   {\n      event.preventDefault();\n      event.stopPropagation();\n\n      store.set(false);\n   }\n\n   /**\n    * Handle receiving bubbled event from summary bar to open details / content.\n    */\n   function onLocalOpen(event)\n   {\n      event.preventDefault();\n      event.stopPropagation();\n\n      store.set(true);\n   }\n</script>\n\n<!-- Note: the manual control of the `open` state `on:toggle`. This circumvents the automatic browser handling when\nclicking on the `summary` element allowing any child element to use `on:click|stopPropagation` to prevent clicks from\nchanging the open state.  -->\n\n<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n<details class=tjs-svg-folder\n         bind:this={detailsEl}\n\n         on:close={onLocalClose}\n         on:open={onLocalOpen}\n         on:toggle={() => detailsEl.open = $store}\n\n         on:click\n         on:keydown\n         on:keyup\n         on:open\n         on:close\n         on:openAny\n         on:closeAny\n\n         use:toggleDetails={{ store, animate, clickActive: false }}\n         use:applyStyles={styles}\n         data-id={id}\n         data-label={label}\n         data-closing='false'>\n   <!-- Note: the use of `tabindex` set to `-1` instead of `null` when not enabled as summary elements are\n        automatically focusable. -->\n   <!-- svelte-ignore a11y-no-redundant-roles -->\n   <summary bind:this={summaryEl}\n            on:click={onClickSummary}\n            on:contextmenu={onContextMenuPress}\n            on:keydown|capture={onKeyDown}\n            on:keyup|capture={onKeyUp}\n            class:disabled={!enabled}\n            class:default-cursor={localOptions.chevronOnly}\n            class:remove-focus-visible={localOptions.focusIndicator || localOptions.focusChevron}\n            role=button\n            tabindex={enabled ? 0 : -1}>\n      <svg bind:this={svgEl} viewBox=\"0 0 24 24\" class:focus-chevron={localOptions.focusChevron}>\n         <path fill=currentColor\n               stroke=currentColor\n               style=\"stroke-linejoin: round; stroke-width: 3;\"\n               d=\"M5,8L19,8L12,15Z\"\n         />\n      </svg>\n\n      {#if localOptions.focusIndicator}\n         <TJSFocusIndicator />\n      {/if}\n\n      <slot name=label>\n         {#if TJSSvelte.config.isConfigEmbed(folder?.slotLabel)}\n            <svelte:component this={folder.slotLabel.class} {...(isObject(folder?.slotLabel?.props) ? folder.slotLabel.props : {})} />\n         {:else}\n            <div bind:this={labelEl} class=label>{localize(label)}</div>\n         {/if}\n      </slot>\n\n      <slot name=\"summary-end\">\n         {#if TJSSvelte.config.isConfigEmbed(folder?.slotSummaryEnd)}\n            <svelte:component this={folder.slotSummaryEnd.class} {...(isObject(folder?.slotSummaryEnd?.props) ? folder.slotSummaryEnd.props : {})} />\n         {/if}\n      </slot>\n   </summary>\n\n   {#if localOptions.strategy === 'remove'}\n      <div class=contents>\n      {#if visible}\n         <slot>\n            {#if TJSSvelte.config.isConfigEmbed(folder?.slotDefault)}\n               <svelte:component this={folder.slotDefault.class} {...(isObject(folder?.slotDefault?.props) ? folder.slotDefault.props : {})} />\n            {/if}\n         </slot>\n      {/if}\n      </div>\n   {:else}\n      <div class=contents class:hidden={!visible} aria-hidden={!visible}>\n         <slot>\n            {#if TJSSvelte.config.isConfigEmbed(folder?.slotDefault)}\n               <svelte:component this={folder.slotDefault.class} {...(isObject(folder?.slotDefault?.props) ? folder.slotDefault.props : {})} />\n            {/if}\n         </slot>\n      </div>\n   {/if}\n</details>\n\n<style>\n   details {\n      margin-left: var(--tjs-folder-details-margin-left, -0.4em);\n      padding-left: var(--tjs-folder-details-padding-left, 0.4em); /* Set for children folders to increase indent */\n   }\n\n   /**\n    * Dev note: Be aware of the `::details-content` pseudo-selector change to `block`. The explicit `.contents` div does\n    * use `flex` by default.\n    * https://issues.chromium.org/issues/379214835#comment6\n    */\n\n   summary {\n      display: flex;\n      position: relative;\n      align-items: center;\n      background-blend-mode: var(--tjs-folder-summary-background-blend-mode, initial);\n      background: var(--tjs-folder-summary-background, none);\n      border: var(--tjs-folder-summary-border, none);\n      border-radius: var(--tjs-folder-summary-border-radius, 0);\n      border-width: var(--tjs-folder-summary-border-width, initial);\n      color: var(--tjs-folder-summary-color, inherit);\n      cursor: var(--tjs-cursor-pointer, pointer);\n      font-size: var(--tjs-folder-summary-font-size, inherit);\n      font-weight: var(--tjs-folder-summary-font-weight, bold);\n      font-family: var(--tjs-folder-summary-font-family, inherit);\n      gap: var(--tjs-folder-summary-gap, 0.125em);\n      list-style: none;\n      margin: var(--tjs-folder-summary-margin, 0 0 0 -0.4em);\n      padding: var(--tjs-folder-summary-padding, 0.25em) 0;\n      text-shadow: var(--tjs-folder-summary-text-shadow, none);\n      transition: var(--tjs-folder-summary-transition, background 0.1s);\n      user-select: none;\n      width: var(--tjs-folder-summary-width, fit-content);\n   }\n\n   /* For Safari */\n   summary::-webkit-details-marker {\n      display: none;\n   }\n\n   .default-cursor {\n      cursor: var(--tjs-cursor-default, default);\n   }\n\n   summary svg {\n      flex-shrink: 0;\n      width: var(--tjs-folder-summary-chevron-size, var(--tjs-folder-summary-font-size, 1.25em));\n      height: var(--tjs-folder-summary-chevron-size, var(--tjs-folder-summary-font-size, 1.25em));\n      border-radius: var(--tjs-folder-summary-chevron-border-radius, 0);\n      color: var(--tjs-folder-summary-chevron-color, currentColor);\n      cursor: var(--tjs-cursor-pointer, pointer);\n      opacity: var(--tjs-folder-summary-chevron-opacity, 0.2);\n      margin: var(--tjs-folder-summary-chevron-margin, 0);\n      transition: var(--tjs-folder-summary-chevron-transition, opacity 0.2s, transform 0.1s);\n      transform: var(--tjs-folder-summary-chevron-rotate-closed, rotate(-90deg));\n   }\n\n   summary.disabled {\n      color: var(--tjs-folder-summary-disabled-color, inherit);\n      cursor: var(--tjs-folder-summary-disabled-cursor, var(--tjs-cursor-default, default));\n   }\n\n   summary.disabled svg {\n      color: var(--tjs-folder-summary-disabled-color, currentColor);\n      cursor: var(--tjs-folder-summary-disabled-cursor, var(--tjs-cursor-default, default));\n   }\n\n   summary:focus-visible {\n      box-shadow: var(--tjs-folder-summary-box-shadow-focus-visible, var(--tjs-default-box-shadow-focus-visible));\n      outline: var(--tjs-folder-summary-outline-focus-visible, var(--tjs-default-outline-focus-visible, revert));\n      transition: var(--tjs-folder-summary-transition-focus-visible, var(--tjs-default-transition-focus-visible));\n   }\n\n   summary:focus-visible .label {\n      text-shadow: var(--tjs-folder-summary-label-text-shadow-focus-visible, var(--tjs-default-text-shadow-focus-hover, revert));\n   }\n\n   summary:focus-visible {\n      --tjs-focus-indicator-background: var(--tjs-folder-summary-focus-indicator-background, currentColor);\n   }\n\n   summary:focus-visible svg {\n      opacity: var(--tjs-folder-summary-chevron-opacity-focus-visible, 1);\n   }\n\n   summary:focus-visible svg.focus-chevron {\n      outline: var(--tjs-folder-summary-outline-focus-visible, var(--tjs-default-outline-focus-visible, revert));\n      transition: var(--tjs-folder-summary-transition-focus-visible, var(--tjs-default-transition-focus-visible));\n   }\n\n   summary:focus-visible.remove-focus-visible {\n      outline: none;\n   }\n\n   summary:hover:not(.disabled) svg {\n      opacity: var(--tjs-folder-summary-chevron-opacity-hover, 1);\n   }\n\n   details[open] > summary {\n      background: var(--tjs-folder-summary-background-open, var(--tjs-folder-summary-background, inherit));\n   }\n\n   [open]:not(details[data-closing='true']) > summary svg {\n      transform: rotate(var(--tjs-folder-summary-chevron-rotate-open, 0));\n   }\n\n   .contents {\n      display: var(--tjs-folder-contents-display, flex);\n      flex-direction: var(--tjs-folder-contents-flex-direction, column);\n      gap: var(--tjs-folder-contents-gap);\n      position: relative;\n      background-blend-mode: var(--tjs-folder-contents-background-blend-mode, initial);\n      background: var(--tjs-folder-contents-background, none);\n      border: var(--tjs-folder-contents-border, none);\n      border-left: var(--tjs-folder-contents-border-left, none);\n      margin: var(--tjs-folder-contents-margin, 0 0 0 -0.4em);\n      padding: var(--tjs-folder-contents-padding, 0 0 0 calc(var(--tjs-folder-summary-font-size, 1em) * 0.8));\n   }\n\n   .contents::before {\n      content: '';\n      position: absolute;\n      width: 0;\n      height: calc(100% + 0.65em);\n      left: 0;\n      top: -0.65em;\n   }\n\n   .contents.hidden {\n      display: none;\n   }\n\n   .label {\n      overflow: var(--tjs-folder-summary-label-overflow, hidden);\n      text-overflow: var(--tjs-folder-summary-label-text-overflow, ellipsis);\n      white-space: var(--tjs-folder-summary-label-white-space, nowrap);\n      width: var(--tjs-folder-summary-label-width, fit-content);\n   }\n\n   summary:focus-visible + .contents::before {\n      height: 100%;\n      top: 0;\n   }\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n    let { animation } = getContext('animation-data');\n    export let section = \"primary\";\n    export let field;\n    export let label;\n    export let isDisabled = \"\";\n    export let placeholder = 1;\n    export let step = 1;\n\n</script>\n\n<div class=\"{isDisabled}\">\n    <div>\n        <label for=\"\">{label}</label>\n    </div>\n    <div>\n        <input\n            type=\"number\"\n            bind:value={$animation[section].options[field]}\n            placeholder={placeholder}\n            step={step}\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n\n</style>","<script>\n    import { localize }     from \"#runtime/util/i18n\";\n    import { getContext }   from \"svelte\";\n\n    let { animation } = getContext('animation-data');\n    export let section = \"primary\";\n\n    $: isAbsolute = $animation[section].options.isAbsolute;\n\n</script>\n\n<div>\n    <div>\n        <label for=\"Relative {section} {animation._data.id}\" style=\"font-size:10px\" class={`aaLabelBorder ${isAbsolute ? \"aaIsSelected\" : \"\"}`}>ABS</label>\n        <input\n            id=\"Relative {section} {animation._data.id}\"\n            type=\"checkbox\"\n            style=\"display:none\"\n            bind:checked={$animation[section].options.isAbsolute}\n        />\n        <label for=\"\" style=\"font-size:13px\">{localize('autoanimations.menus.elevation')} </label>\n    </div>\n    <div>\n        <input\n            type=\"number\"\n            bind:value={$animation[section].options.elevation}\n            placeholder=1000\n            step=1\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n    .aaLabelBorder {\n        color: rgba(91, 91, 91, 0.623);\n        border-radius: 5px;\n        border: 1px solid rgba(91, 91, 91, 0.623);\n        padding: 1px 5px 1px 5px;\n    }\n    .aaIsSelected {\n        color: black;\n        border: 1px solid black;\n    }\n\n</style>\n","<script>\n\n    import { getContext }   from \"svelte\";\n    let { animation } = getContext('animation-data');\n    export let section = \"primary\";\n    export let field = \"opacity\";\n    export let min = 0;\n    export let max = 1;\n    export let step = 0.01;\n    export let placeDefault = 1;\n\n    export let label = game.i18n.localize(\"autoanimations.menus.effect\") + \" \" + game.i18n.localize(\"autoanimations.menus.opacity\")\n\n</script>\n\n<div class=\"flexcol\">\n    <label for=\"\">{label}</label\n    >\n    <div\n        style=\"display: flex; margin-right: 1.5em; margin-left: 1.5em;\"\n    >\n        <input\n            type=\"number\"\n            bind:value={$animation[section].options[field]}\n            placeholder={placeDefault}\n            min={min}\n            max={max}\n            step={step}\n        />\n        <input\n            style=\"border:none; background:none;margin-left: 3px;\"\n            type=\"range\"\n            min={min}\n            max={max}\n            step={step}\n            bind:value={$animation[section].options[field]}\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n\n</style>","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n</script>\n\n<table id=\"aa-options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n    <tr>\n        <th colspan=\"2\"> Melee Options</th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Source Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Default 1: Set the playback speed of the animation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")}</strong>\n        </td>\n        <td>\n            Causes the effect to be repeated <strong>N</strong> times, with an optional delay.\n            A Repeat of 1 only plays the effect once.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td> Sets the Delay between each Repeat in milliseconds. </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")}</strong>\n        </td>\n        <td>\n            Sets the scale of the effect. Inital scale is based off of the\n            Token Size.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.delay\")} / {localize(\"autoanimations.menus.wait\")}</strong>\n        </td>\n        <td> <strong>Delay</strong> causes the start of the animation section to be delayed (milliseconds) <br> <br>\n            <strong>Wait</strong> causes the following animation section to play AFTER the current is finished. Accepts Negative and Positive Numbers </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.z-index\")}</strong>\n        </td>\n        <td> Index of the animation when they are played at the same elevation </td>\n    </tr>\n</table>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n</script>\n\n<table id=\"aa-options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n    <tr>\n        <th colspan=\"2\"> Range Options</th>\n    </tr>\n    <tr>\n        <td>\n            <strong>{localize(\"autoanimations.menus.animation\")} {localize(\"autoanimations.menus.source\")}</strong>\n        </td>\n        <td>\n            <strong>Experimental</strong> <br> <strong>Available only in the Global Automatic Recognition Menu for DnD5e and PF2e!</strong> <br>\n            Use this for Spells like Black Tentacles and Storm Sphere to use a placed persistent Animation as the Source of a ranged attack <br>\n            Requires an entry in both the Templates and Ranged menu that match for the Item.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.only\")} X</strong>\n        </td>\n        <td>\n            When using a \"custom\" animation, this allows you to keep the Y scale of the video constant.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Default 1: Set the playback speed of the animation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.randomOffset\")}</strong>\n        </td>\n        <td>\n            Randomly offsets the impact point within the bounds of the Target\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")}</strong>\n        </td>\n        <td>\n            Causes the effect to be repeated <strong>N</strong> times, with an optional delay.\n            A Repeat of 1 only plays the effect once.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td> Sets the Delay between each Repeat in milliseconds. </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.return\")} {localize(\"autoanimations.menus.animation\")}</strong>\n        </td>\n        <td>\n            For built-in Select menus ONLY. If a \"return\" animation is availble for the given Weapon, enabling this will play it.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.animations.reverse\")} {localize(\"autoanimations.menus.animation\")}</strong>\n        </td>\n        <td>\n            Reverse the Animation to start from the Target and go to the Source Token\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.delay\")} / {localize(\"autoanimations.menus.wait\")}</strong>\n        </td>\n        <td> <strong>Delay</strong> causes the start of the animation section to be delayed (milliseconds) <br> <br>\n            <strong>Wait</strong> causes the following animation section to play AFTER the current is finished. Accepts Negative and Positive Numbers </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.z-index\")}</strong>\n        </td>\n        <td> Index of the animation when they are played at the same elevation </td>\n    </tr>\n</table>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n</script>\n\n<table id=\"aa-options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n    <tr>\n        <th colspan=\"2\"> On Token Options</th>\n    </tr>\n    <tr>\n        <td>\n            <strong>{localize(\"autoanimations.menus.anchor\")}</strong>\n        </td>\n        <td>\n            Adjust the anchor position of the Effect. Default: 0.5 is center. Accepts two numbers separated by a comma. Ex: 0.5, 1 returns x: 0.5, y:1, and using one number such as 0.5 returns x: 0.5, y: 0.5\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Source Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.fadeIn\")}</strong>\n        </td>\n        <td> Sets the fadeIn time of the effect in milliseconds </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.fadeOut\")}</strong>\n        </td>\n        <td> Sets the fadeOut time of the effect in milliseconds </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.mask\")}</strong>\n        </td>\n        <td>\n            If enabled, the effect will be masked to the given Object\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.persistant\")}</strong>\n        </td>\n        <td>\n            This will cause the effect to become permanent on the canvas.\n            You can end the effect with the Sequencer Effect Manager.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Default 1: Set the playback speed of the animation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playOn\")}</strong>\n        </td>\n        <td> Tells A-A how to play this animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")}</strong>\n        </td>\n        <td>\n            Causes the effect to be repeated <strong>N</strong> times, with an optional delay.\n            A Repeat of 1 only plays the effect once.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td> Sets the Delay between each Repeat in milliseconds. </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")} / {localize(\"autoanimations.menus.radius\")}</strong>\n        </td>\n        <td>\n            <strong>Scale: </strong>Sets the scale of the effect. Inital scale is based off of the\n            Token Size. <br> <br>\n            <strong>Radius: </strong>Set the radius of the effect in Grid Squares\n        </td>\n    </tr>\n    <tr>\n        <td>\n            <strong>{localize(\"autoanimations.menus.sideImpact\")}</strong>\n        </td>\n        <td>\n            Where available, causes the effect to be rotated back towards the Source Token. Primarily useful for the JB2A \"side fracture\" type effects\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.add\")} {localize(\"autoanimations.menus.token\")} {localize(\"autoanimations.menus.width\")}</strong>\n        </td>\n        <td>\n            Adds the Token width into the Size calculation for Animations set with \"Radius\"\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.bind\") + \" \" + localize(\"autoanimations.menus.alpha\")}</strong>\n        </td>\n        <td>\n            <strong>Persistent Effects Only:</strong> If enabled, the Alpha level of the Effect will match that\n            of the Token or Object (This overrides any Opacity settings).\n            Unchecked will use the Opacity level for the effect\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.bind\") + \" \" + localize(\"autoanimations.menus.visibility\")}</strong>\n        </td>\n        <td>\n            <strong>Persistent Effects Only:</strong> If enabled, the Visibility of the Effect will match that of\n            the Token or Object. Unchecked will make the effect always visible\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.delay\")} / {localize(\"autoanimations.menus.wait\")}</strong>\n        </td>\n        <td> <strong>Delay</strong> causes the start of the animation section to be delayed (milliseconds) <br> <br>\n            <strong>Wait</strong> causes the following animation section to play AFTER the current is finished. Accepts Negative and Positive Numbers </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.z-index\")}</strong>\n        </td>\n        <td> Index of the animation when they are played at the same elevation </td>\n    </tr>\n</table>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n</script>\n\n<table id=\"aa-options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n    <tr>\n        <th colspan=\"2\"> Templates Options</th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Adjust Rotation</strong>\n        </td>\n        <td> Adjusts the rotation of the animation </td>\n    </tr>\n    <tr>\n        <td>\n            <strong>{localize(\"autoanimations.menus.anchor\")}</strong>\n        </td>\n        <td>\n            Adjust the anchor position of the Effect. Default: <strong>0.5, 0.5</strong> for Square/Circle Templates, <strong>0, 0.5</strong> for Cone/Ray templates. <br>\n            Accepts two numbers separated by a comma. Ex: <strong>0.5, 1</strong> returns x: 0.5, y:1, and using one number such as <strong>0.5</strong> returns x: 0.5, y: 0.5\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Source Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.mask\")}</strong>\n        </td>\n        <td>\n            If enabled, the effect will be masked to the Template\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.variants.above\")} {localize(\"autoanimations.animTypes.templatefx\")}</strong>\n        </td>\n        <td>\n            This setting will override Elevation to play the animation Above the template using the .aboveLightning() Sequencer method\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Default 1: Set the playback speed of the animation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.remove\")}</strong>\n        </td>\n        <td>\n            Removes the Template immediately after placement on the game canvas.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")}</strong>\n        </td>\n        <td>\n            Causes the effect to be repeated <strong>N</strong> times, with an optional delay.\n            A Repeat of 1 only plays the effect once.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td> Sets the Delay between each Repeat in milliseconds. </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")}</strong>\n        </td>\n        <td>\n            Sets the Scale of the Effect. Default: 1. Accepts two numbers separated by a comma. Ex: 1, 2 to set the X and Y scaling x: 1, y:2, or a Single number to set both as the same scale.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.persistant\")}</strong>\n        </td>\n        <td>\n            This will cause the effect to become permanent on the canvas.\n            You can end the effect with the Sequencer Effect Manager.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.delay\")} / {localize(\"autoanimations.menus.wait\")}</strong>\n        </td>\n        <td> <strong>Delay</strong> causes the start of the animation section to be delayed (milliseconds) <br> <br>\n            <strong>Wait</strong> causes the following animation section to play AFTER the current is finished. Accepts Negative and Positive Numbers </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.variants.xray\")}</strong>\n        </td>\n        <td> This will cause the effect to ignore vision-based masking </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.z-index\")}</strong>\n        </td>\n        <td> Index of the animation when they are played at the same elevation </td>\n    </tr>\n    <tr>\n        <th colspan=\"2\" style=\"background: rgba(17, 0, 148, .5)\"> Persistent Options </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.persistant\")} {localize(\"autoanimations.menus.type\")}</strong>\n        </td>\n        <td>\n            <table id=\"options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n                <tr>\n                    <th colspan=\"2\"> If Persistent is enabled, you can choose the type here. </th>\n                </tr>\n                <tr>\n                    <td class=\"aa-table\">\n                        <strong>{localize(\"autoanimations.menus.overheadtile\")}</strong>\n                    </td>\n                    <td>\n                        Creates effect as an Overhead Tile\n                    </td>\n                </tr>\n                <tr>\n                    <td class=\"aa-table\">\n                        <strong>{localize(\"autoanimations.menus.groundtile\")}</strong>\n                    </td>\n                    <td>\n                        Creates Effect as a Tile below tokens\n                    </td>\n                </tr>\n                <tr>\n                    <td class=\"aa-table\">\n                        <strong>{localize(\"autoanimations.menus.sequencereffect\")}</strong>\n                    </td>\n                    <td>\n                        Creates a Persistent Sequencer effect\n                    </td>\n                </tr>\n                <tr>\n                    <td class=\"aa-table\">\n                        <strong>{localize(\"autoanimations.menus.attachtotemplate\")}</strong>\n                    </td>\n                    <td>\n                        Creates a Persistent Sequencer effect and attaches to the template (draggable)\n                    </td>\n                </tr>\n            </table>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.occlusionMode\")}</strong>\n        </td>\n        <td>\n            If Persistent and Type is set to Overhead Tile, choose the Occlusion Mode\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.occlusionAlpha\")}</strong>\n        </td>\n        <td>\n            If Persistent and Type is set to Overhead Tile, choose the Occlusion Alpha\n        </td>\n    </tr>\n</table>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n</script>\n\n<table id=\"aa-options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n    <tr>\n        <th colspan=\"2\"> Aura Options</th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.add\")} {localize(\"autoanimations.menus.token\")} {localize(\"autoanimations.menus.width\")}</strong>\n        </td>\n        <td>\n            Adds the Token width into the Size calculation for Animations set with \"Radius\"\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Source Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.ignoreTargets\")}</strong>\n        </td>\n        <td>\n            Disregards targets and always plays this effect on the Source Token\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.mask\")}</strong>\n        </td>\n        <td>\n            If enabled, the effect will be masked to the given Object\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Default 1: Set the playback speed of the animation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.radius\")}</strong>\n        </td>\n        <td>\n            <strong>Radius: </strong>Set the radius of the effect in Grid Squares\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.delay\")} / {localize(\"autoanimations.menus.wait\")}</strong>\n        </td>\n        <td> <strong>Delay</strong> causes the start of the animation section to be delayed (milliseconds) <br> <br>\n            <strong>Wait</strong> causes the following animation section to play AFTER the current is finished. Accepts Negative and Positive Numbers </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.bind\") + \" \" + localize(\"autoanimations.menus.alpha\")}</strong>\n        </td>\n        <td>\n            <strong>Persistent Effects Only:</strong> If enabled, the Alpha level of the Effect will match that\n            of the Token or Object (This overrides any Opacity settings).\n            Unchecked will use the Opacity level for the effect\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.bind\") + \" \" + localize(\"autoanimations.menus.visibility\")}</strong>\n        </td>\n        <td>\n            <strong>Persistent Effects Only:</strong> If enabled, the Visibility of the Effect will match that of\n            the Token or Object. Unchecked will make the effect always visible\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.z-index\")}</strong>\n        </td>\n        <td> Index of the animation when they are played at the same elevation </td>\n    </tr>\n</table>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n    export let presetStore;\n\n    let headerList = [\n        {\n            label: \"Projectile to Template\",\n            section: \"proToTemp\",\n        },\n        {\n            label: \"Dual Attach\",\n            section: \"dualattach\",\n        },\n        {\n            label: \"Teleportation\",\n            section: \"teleportation\",\n        },\n        {\n            label: \"Thunderwave 5e\",\n            section: \"thunderwave\",\n        },\n    ];\n</script>\n\n<header>\n    <ul>\n        {#each headerList as section}\n            <li\n                class:active={$presetStore === section.section}\n                on:click={() => ($presetStore = section.section)}\n                role=presentation\n            >\n                {section.label}\n            </li>\n            <span />\n        {/each}\n    </ul>\n</header>\n\n{#if $presetStore === 'proToTemp'}\n<table class=\"aa-options-table\">\n    <tr>\n        <th colspan=\"2\">\n            Projectile to Template\n        </th>\n    </tr>\n    <tr>\n        <th colspan=\"2\" style=\"background: rgba(17, 0, 148, .5)\">\n            Projectile Animation\n        </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Source Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Default 1: Set the playback speed of the animation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")}</strong>\n        </td>\n        <td>\n            Causes the effect to be repeated <strong>N</strong> times, with an optional delay.\n            A Repeat of 1 only plays the effect once.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td> Sets the Delay between each Repeat in milliseconds. </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.remove\")}</strong>\n        </td>\n        <td>\n            Removes the Template immediately after placement on the game canvas.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.wait\")}</strong>\n        </td>\n        <td>\n            Causes the following animation section to play AFTER the current is finished. Accepts Negative and Positive Numbers\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <th colspan=\"2\" style=\"background: rgba(17, 0, 148, .5)\">\n            Explosion / Pre-Explosion Animation\n        </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Source Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Default 1: Set the playback speed of the animation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")}</strong>\n        </td>\n        <td>\n            Causes the effect to be repeated <strong>N</strong> times, with an optional delay.\n            A Repeat of 1 only plays the effect once.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td> Sets the Delay between each Repeat in milliseconds. </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")}</strong>\n        </td>\n        <td>\n            Sets the scale of the effect. Inital scale is based off of the\n            Token Size.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.wait\")}</strong>\n        </td>\n        <td>\n            Causes the following animation section to play AFTER the current is finished. Accepts Negative and Positive Numbers\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <th colspan=\"2\" style=\"background: rgba(17, 0, 148, .5)\">\n            After Image\n        </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.persistant\")}</strong>\n        </td>\n        <td>\n            This will cause the effect to become permanent on the canvas.\n            You can end the effect with the Sequencer Effect Manager.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")}</strong>\n        </td>\n        <td>\n            Sets the scale of the effect. Inital scale is based off of the\n            Token Size.\n        </td>\n    </tr>\n</table>\n{/if}\n\n{#if $presetStore === 'dualattach'}\n<table>\n    <colgroup>\n        <col span=\"1\" style=\"width: 20%;\">\n        <col span=\"1\" style=\"width: 50%;\">\n    </colgroup>\n    <tr>\n        <th colspan=\"2\">\n            Dual Attach\n        </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Speeds up or Slows down the Animation effect. Positive numbers only\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.only\")} X</strong>\n        </td>\n        <td>\n            Limits the Y scaling of the effect to no changes\n        </td>\n    </tr>\n</table>\n{/if}\n\n{#if $presetStore === 'teleportation'}\n<table class=\"aa-options-table\">\n    <tr>\n        <th colspan=\"2\">\n            Teleportation\n        </th>\n    </tr>\n    <tr>\n        <th colspan=\"2\" style=\"background: rgba(17, 0, 148, .5)\">\n            Movement Options\n        </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Range Marker</strong>\n        </td>\n        <td> Determines if Measurement type to be used. Alternating vs Equidistant </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Hide from Players</strong>\n        </td>\n        <td> Causes the Range Marker to be hidden from Players. Only a GM can configure this </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.animTypes.range\")}</strong>\n        </td>\n        <td>\n            Distance limitation for the Teleportation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Teleport Token</strong>\n        </td>\n        <td>\n            Toggle whether the Token should be teleported or moved\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Delay Movement</strong>\n        </td>\n        <td>\n            Sets the delay before the Token should move\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Speed</strong>\n        </td>\n        <td>\n            If not teleporting, set the speed for token movement\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Token Alpha</strong>\n        </td>\n        <td>\n            Sets the Opacity the token should fade to\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Delay Fade Out</strong>\n        </td>\n        <td>\n            Sets the delay for when the token should begin changin Opacity\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Delay Fade In</strong>\n        </td>\n        <td>\n            Sets the delay for when the Token should return to full opacity (minimum 250)\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>Check for Collision</strong>\n        </td>\n        <td>\n            Checks the path for any collisions with walls, and does not move if any are found\n        </td>\n    </tr>\n    <tr>\n        <th colspan=\"2\" style=\"background: rgba(17, 0, 148, .5)\">\n            Start / End Animation\n        </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.mask\")}</strong>\n        </td>\n        <td>\n            If enabled, the effect will be masked to the given Object\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")} / {localize(\"autoanimations.menus.radius\")}</strong>\n        </td>\n        <td>\n            <strong>Scale: </strong>Sets the scale of the effect. Inital scale is based off of the\n            Token Size. <br> <br>\n            <strong>Radius: </strong>Set the radius of the effect in Grid Squares\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.fadeIn\")}</strong>\n        </td>\n        <td> Sets the fadeIn time of the effect in milliseconds </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.fadeOut\")}</strong>\n        </td>\n        <td> Sets the fadeOut time of the effect in milliseconds </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Default 1: Set the playback speed of the animation\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td>\n            Causes the start of the animation section to be delayed (milliseconds)\n        </td>\n    </tr>\n    <tr>\n        <th colspan=\"2\" style=\"background: rgba(17, 0, 148, .5)\">\n            Between Animation\n        </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.playbackRate\")}</strong>\n        </td>\n        <td>\n            Speeds up or Slows down the Animation effect. Positive numbers only\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td>\n            Causes the start of the animation section to be delayed (milliseconds)\n        </td>\n    </tr>\n</table>\n{/if}\n\n{#if $presetStore === 'thunderwave'}\n<table class=\"aa-options-table\">\n    <tr>\n        <th colspan=\"2\">\n            Thunderwave\n        </th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.elevation\")}</strong>\n        </td>\n        <td> Set the Elevation for the Animation relative to the Token. Elevation of \"0\" is below the token <br>\n            <strong>ABS</strong>: <i>If Enabled, switches Elevation to be Absolute and disregard the Token elevation</i>\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")}</strong>\n        </td>\n        <td>\n            Causes the effect to be repeated <strong>N</strong> times, with an optional delay.\n            A Repeat of 1 only plays the effect once.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td> Sets the Delay between each Repeat in milliseconds. </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.effect\")} {localize(\"autoanimations.menus.opacity\")}</strong>\n        </td>\n        <td> Set the Alpha (transparency) level of the Animation </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")} X</strong>\n        </td>\n        <td>\n            Sets the X Scale of the effect\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")} Y</strong>\n        </td>\n        <td>\n            Sets the Y Scale of the effect\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.remove\")}</strong>\n        </td>\n        <td>\n            Removes the Template immediately after placement on the game canvas.\n        </td>\n    </tr>\n</table>\n{/if}\n\n<style lang='scss'>\n    header {\n        flex: none;\n        padding: 0.5em 0.5em;\n\n        background: rgb(204, 204, 204);\n        border: 1px solid rgb(100, 100, 100);\n        border-radius: 1em;\n        margin-top: 10px;\n        height: 40px;\n        width: 100%;\n\n        ul {\n            display: flex;\n            flex-wrap: nowrap;\n            justify-content: center;\n            align-items: center;\n            height: 100%;\n\n            list-style-type: none;\n            padding: 0;\n            margin: 0;\n\n            li {\n                margin: auto;\n\n                color: rgb(50, 50, 50);\n\n                font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n                font-size: 1.3em;\n                font-weight: bold;\n                vertical-align: middle;\n\n                white-space: nowrap;\n                transition: all 0.2s ease-in-out;\n\n                &.active {\n                    text-shadow: 0 0 5px rgba(255, 0, 0, 0.687);\n                }\n                &:hover:not(.active) {\n                    transform: scale(1.05);\n                }\n            }\n\n            span:not(:last-child) {\n                display: inline-block;\n                width: 1px;\n                height: 75%;\n                background: rgb(100, 100, 100);\n            }\n        }\n    }\n</style>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n</script>\n\n<table id=\"aa-options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n    <tr>\n        <th colspan=\"2\"> 3D Canvas Options</th>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.color\")}</strong>\n        </td>\n        <td> Set the dual color options for the Particle effect </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.speed\")}</strong>\n        </td>\n        <td>\n            Sets the speed of the particle effect\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")}</strong>\n        </td>\n        <td>\n            Causes the effect to be repeated <strong>N</strong> times, with an optional delay.\n            A Repeat of 1 only plays the effect once.\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</strong>\n        </td>\n        <td> Sets the Delay between each Repeat in milliseconds. </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.scale\")}</strong>\n        </td>\n        <td> Set the scale of the Particle Effect </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.arc\")}</strong>\n        </td>\n        <td> Determine the arcing amplitude of the effect </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.alpha\")}</strong>\n        </td>\n        <td>\n            Set the Alpha/Opacity level of the effect\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.gravity\")}</strong>\n        </td>\n        <td>\n            Determines the falling speeed for the particles\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.mass\")}</strong>\n        </td>\n        <td>\n            Sets the overall Particle size\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.life\")}</strong>\n        </td>\n        <td>\n            How long the particle last in milliseconds\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.emiterSize\")}</strong>\n        </td>\n        <td>\n            Size of the emitter source\n        </td>\n    </tr>\n    <tr>\n        <td class=\"aa-table\">\n            <strong>{localize(\"autoanimations.menus.rate\")}</strong>\n        </td>\n        <td>\n            Rate at which the particles are spawned\n        </td>\n    </tr>\n</table>\n","<script>\n    import { getContext } from \"svelte\";\n\n    import { localize } from \"#runtime/util/i18n\";\n\n    import OptionsInformation from \"./OptionsInformation.svelte\";\n\n    import * as options from \"./sections\";\n\n    export let storageStore;\n    export let tabStore;\n    export let presetStore = \"proToTemp\";\n\n    let headerList = [\n        {\n            label: \"autoanimations.animTypes.melee\",\n            icon: \"fas fa-shield-alt\",\n            section: \"melee\",\n        },\n        {\n            label: \"autoanimations.animTypes.range\",\n            icon: \"fas fa-people-arrows\",\n            section: \"range\",\n        },\n        {\n            label: \"autoanimations.animTypes.ontoken\",\n            icon: \"fas fa-child\",\n            section: \"ontoken\",\n        },\n        {\n            label: \"autoanimations.animTypes.templatefx\",\n            icon: \"fas fa-shapes\",\n            section: \"templatefx\",\n        },\n        {\n            label: \"autoanimations.animTypes.aura\",\n            icon: \"fab fa-creative-commons-by\",\n            section: \"aura\",\n        },\n        {\n            label: \"autoanimations.app.aaAutorec-preset.label\",\n            icon: \"fas fa-gift\",\n            section: \"preset\",\n        },\n        {\n            label: \"autoanimations.menus.3dcanvas\",\n            icon: \"fas fa-cube\",\n            section: \"canvas3d\",\n        },\n    ];\n\n    const { application } = getContext(\"#external\");\n\n    // Application position store reference. Stores need to be a top level variable to be accessible for reactivity.\n    const position = application.position;\n\n    // A debounced callback that serializes application state after 500-millisecond delay.\n    const storeAppState = foundry.utils.debounce(\n        () => ($storageStore = application.state.current()),\n        500\n    );\n\n    // Reactive statement to invoke debounce callback on Position changes.\n    $: storeAppState($position);\n</script>\n\n<header>\n    <ul>\n        {#each headerList as section}\n            <li\n                class:active={$tabStore === section.section}\n                on:click={() => ($tabStore = section.section)}\n                role=presentation\n            >\n                <i class={section.icon} />{localize(section.label)}\n            </li>\n            <span />\n        {/each}\n    </ul>\n</header>\n\n<main>\n    <div class=\"aa-options-info\">\n        {#if $tabStore === \"preset\"}\n            <svelte:component this={options[$tabStore]} {presetStore}/>\n        {:else}\n            <svelte:component this={options[$tabStore]} />\n        {/if}\n    </div>\n</main>\n\n<style lang=\"scss\">\n    header {\n        flex: none;\n        padding: 0.5em 0.5em;\n\n        background: rgb(204, 204, 204);\n        border-bottom: 1px solid rgb(100, 100, 100);\n\n        position: absolute;\n        height: 40px;\n        width: 100%;\n\n        ul {\n            display: flex;\n            flex-wrap: nowrap;\n            justify-content: center;\n            align-items: center;\n            height: 100%;\n\n            list-style-type: none;\n            padding: 0;\n            margin: 0;\n\n            li {\n                margin: auto;\n\n                color: rgb(50, 50, 50);\n\n                font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n                font-size: 1.1em;\n                font-weight: bold;\n                vertical-align: middle;\n\n                white-space: nowrap;\n                transition: all 0.2s ease-in-out;\n\n                &.active {\n                    text-shadow: 0 0 5px rgba(255, 0, 0, 0.687);\n                }\n                &:hover:not(.active) {\n                    transform: scale(1.05);\n                }\n\n                i {\n                    margin-right: 0.25em;\n                }\n            }\n\n            span:not(:last-child) {\n                display: inline-block;\n                width: 1px;\n                height: 75%;\n                background: rgb(100, 100, 100);\n            }\n        }\n    }\n    .aa-options-info {\n        font-size: small;\n    }\n\n    main {\n        position: absolute;\n        top: 70px;\n        bottom: 0;\n        width: 100%;\n        overflow-y: auto;\n        padding: 0 3%;\n        padding-bottom: 10px;\n        scrollbar-width: thin; // For Firefox\n    }\n</style>\n","/**\n * Defines the main constants for module name and label.\n *\n * @type {{moduleId: string, moduleLabel: string}}\n */\nconst constants = {\n   moduleId: \"autoanimations\",\n   moduleLabel: \"Automated Animations\"\n};\n\n/**\n * @type {AASessionConstants} Defines all the module session storage static constants.\n */\nconst sessionConstants = {\n   activeEffectAppState: `${constants.moduleId}.active-effect.app-state`,\n   itemAppState: `${constants.moduleId}.item.app-state`,\n   optionsInfoAppState: `${constants.moduleId}.options-info.app-state`,\n   videoPreviewAppState: `${constants.moduleId}.video-preview.app-state`,\n};\n\nexport { constants, sessionConstants };\n\n/**\n * @typedef {object} AASessionConstants\n *\n * @property {string} activeEffectAppState - Stores the app state / position for AEMenuApp.\n *\n * @property {string} itemAppState - Stores the app state / position for ItemMenuApp.\n *\n * @property {string} optionsInfoAppState - Stores the app state / position of the OptionsInformation dialog.\n *\n * @property {string} videoPreviewAppState - Stores the app state / position of the VideoPreview dialog.\n */\n","import { TJSSessionStorage  } from \"#runtime/svelte/store/web-storage\";\n\nexport const aaSessionStorage = new TJSSessionStorage();\n","import { writable }         from \"svelte/store\";\n\nimport { TJSDialog }        from '#runtime/svelte/application';\n\nimport OptionsInfo          from './optionsInfo/optionsInfo.svelte';\n\nimport { sessionConstants } from \"#constants\";\nimport { aaSessionStorage } from \"#sessionStorage\";\n\nexport default class OptionsDialog extends TJSDialog {\n    static #app;\n    static #tabStore = writable(\"melee\");\n    static #presetStore = writable(\"proToTemp\")\n\n    constructor(data) {\n        super({\n            title: 'Options Info',\n            resizable:true,\n            content: {\n                class: OptionsInfo,\n                props: {\n                    ...data,\n                    storageStore: aaSessionStorage.getStore(sessionConstants.optionsInfoAppState),\n                    tabStore: OptionsDialog.#tabStore,\n                    presetStore: OptionsDialog.#presetStore,\n                }\n            },\n        });\n\n        try\n        {\n            // Attempt to parse session storage item and set to application state.\n            this.state.set(aaSessionStorage.getItem(sessionConstants.optionsInfoAppState));\n        }\n        catch (err) { /**/ }\n    }\n\n    static get defaultOptions() {\n        return foundry.utils.mergeObject(super.defaultOptions, {\n            minimizable: true,\n            width: 600,\n            height: 600,\n            closeOnSubmit: true,\n            id: `OptionsInformation`,\n            themeName: 'light'\n        })\n    }\n\n    /**\n     * Close the instance of OptionsInformation and remove reference to single static app reference.\n     *\n     * @inheritDoc\n     */\n    async close(options) {\n        await super.close(options);\n\n        OptionsDialog.#app = void 0;\n    }\n\n    /**\n     * Show a single static instance of OptionsInformation; if it is already open then bring it to top.\n     */\n    static show(tabId, presetId) {\n        OptionsDialog.#tabStore.set(tabId);\n        OptionsDialog.#presetStore.set(presetId || \"proToTemp\");\n\n        if (this.#app)\n        {\n            this.#app.bringToTop();\n        }\n        else\n        {\n            this.#app = new OptionsDialog().render(true, { focus: true });\n        }\n    }\n}\n","<script>\n    import { getContext }   from \"svelte\";\n\n    let { animation } = getContext('animation-data');\n    export let section = \"primary\";\n    export let field = \"delay\";\n    export let isDisabled = \"\";\n    export let placeholder = 0;\n    export let step = 1;\n\n    $: isWait = $animation[section].options.isWait;\n\n    const delayLabel = game.i18n.localize(\"autoanimations.menus.delay\");\n    const waitLabel = game.i18n.localize(\"autoanimations.menus.wait\");\n\n    function switchWait() {\n        if (!animation._data[section].options.isWait) { return; }\n        $animation[section].options.isWait = false;\n    }\n    function switchDelay() {\n        if (animation._data[section].options.isWait) { return; }\n        $animation[section].options.isWait = true;\n    }\n</script>\n\n<div class=\"{isDisabled}\">\n    <div>\n        <label for=\"\" class={`aaLabelBorder ${!isWait ? \"aaIsSelected\" : \"\"}`} on:click={() => switchWait()} role=presentation>{delayLabel}</label>\n        <label for=\"\"> &nbsp|&nbsp </label>\n        <label for=\"\" class={`aaLabelBorder ${isWait ? \"aaIsSelected\" : \"\"}`} on:click={() => switchDelay()} role=presentation>{waitLabel}</label>\n    </div>\n    <div>\n        <input\n            type=\"number\"\n            bind:value={$animation[section].options[field]}\n            placeholder={placeholder}\n            step={step}\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n    .aaLabelBorder {\n        color: rgba(91, 91, 91, 0.623);\n        border-radius: 5px;\n        border: 1px solid rgba(91, 91, 91, 0.623);\n        padding: 1px 5px 1px 5px;\n    }\n    .aaIsSelected {\n        color: black;\n        border: 1px solid black;\n    }\n</style>\n","<script>\n   /**\n    * Provides a convenient scrollable container / DIV that always allows keyboard scroll navigation by stopping\n    * propagation of page up / down key events when the active element is or is contained by the container.\n    *\n    * Auto serialization of scroll state is handled by providing a store / `scrollTop`.\n    *\n    * A main slot is provided for a content component, but a fallback allows a child content component to be defined\n    * by the `class` and `props` fields in {@link TJSScrollContainerData}.\n    *\n    * @componentDocumentation\n    */\n\n   import { applyScroll }              from '@typhonjs-fvtt/runtime/svelte/action/dom/properties';\n   import { applyStyles }              from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { isMinimalWritableStore }   from '@typhonjs-fvtt/runtime/svelte/store/util';\n   import { TJSSvelte }                from '@typhonjs-fvtt/runtime/svelte/util';\n   import { CrossWindow }              from '@typhonjs-fvtt/runtime/util/browser';\n   import { isObject }                 from '@typhonjs-fvtt/runtime/util/object';\n\n   /** @type {import('.').TJSScrollContainerData} */\n   export let container = void 0;\n\n   /** @type {boolean} */\n   export let allowTabFocus = void 0;\n\n   /** @type {boolean} */\n   export let keyPropagate = void 0;\n\n   /** @type {(data: { event: KeyboardEvent | PointerEvent }) => void} */\n   export let onContextMenu = void 0;\n\n   /** @type {import('@typhonjs-fvtt/runtime/svelte/store/util').MinimalWritable<number>} */\n   export let scrollLeft = void 0;\n\n   /** @type {import('@typhonjs-fvtt/runtime/svelte/store/util').MinimalWritable<number>} */\n   export let scrollTop = void 0;\n\n   /** @type {{ [key: string]: string | null }} */\n   export let styles = void 0;\n\n   $: allowTabFocus = isObject(container) && typeof container.allowTabFocus === 'boolean' ? container.allowTabFocus :\n    typeof allowTabFocus === 'boolean' ? allowTabFocus : false;\n\n   $: keyPropagate = isObject(container) && typeof container.keyPropagate === 'boolean' ? container.keyPropagate :\n    typeof keyPropagate === 'boolean' ? keyPropagate : false;\n\n   $: onContextMenu = isObject(container) && typeof container.onContextMenu === 'function' ? container.onContextMenu :\n    typeof onContextMenu === 'function' ? onContextMenu : void 0;\n\n   $: scrollLeft = isObject(container) && isMinimalWritableStore(container.scrollLeft) ? container.scrollLeft :\n    isMinimalWritableStore(scrollLeft) ? scrollLeft : void 0;\n\n   $: scrollTop = isObject(container) && isMinimalWritableStore(container.scrollTop) ? container.scrollTop :\n    isMinimalWritableStore(scrollTop) ? scrollTop : void 0;\n\n   $: styles = isObject(container) && isObject(container.styles) ? container.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: svelte = isObject(container) && TJSSvelte.config.isConfigEmbed(container.svelte) ? container.svelte : void 0;\n\n   /** @type {HTMLElement} */\n   let containerEl;\n\n   /**\n    * Handle context menu callback.\n    *\n    * @param {PointerEvent | KeyboardEvent}   event -\n    */\n   function onContextMenuPress(event)\n   {\n      if (typeof onContextMenu === 'function')\n      {\n         onContextMenu({ event });\n\n         event.preventDefault();\n      }\n   }\n\n   /**\n    * Stops propagation against any global key handlers when focus is inside the container for page up / down key\n    * events.\n    *\n    * @param {KeyboardEvent}  event - A KeyboardEvent.\n    */\n   function onKeydown(event)\n   {\n      if (keyPropagate) { return; }\n\n      switch (event.code)\n      {\n         case 'ArrowDown':\n         case 'ArrowLeft':\n         case 'ArrowRight':\n         case 'ArrowUp':\n         case 'End':\n         case 'Home':\n         case 'PageDown':\n         case 'PageUp':\n         case 'Space':\n         {\n            const activeEl = CrossWindow.getActiveElement(event);\n            if (activeEl === containerEl || containerEl.contains(activeEl)) { event.stopPropagation(); }\n\n            break;\n         }\n      }\n   }\n\n   /**\n    * Stops propagation against any global key handlers when focus is inside the container for page up / down key\n    * events.\n    *\n    * @param {KeyboardEvent}  event - A KeyboardEvent.\n    */\n   function onKeyup(event)\n   {\n      if (keyPropagate) { return; }\n\n      switch (event.code)\n      {\n         case 'ArrowDown':\n         case 'ArrowLeft':\n         case 'ArrowRight':\n         case 'ArrowUp':\n         case 'End':\n         case 'Home':\n         case 'PageDown':\n         case 'PageUp':\n         case 'Space':\n         {\n            const activeEl = CrossWindow.getActiveElement(event);\n            if (activeEl === containerEl || containerEl.contains(activeEl)) { event.stopPropagation(); }\n\n            break;\n         }\n      }\n   }\n\n   /**\n    * Handles stopping propagation and silently focusing the container element so key commands function.\n    *\n    * @param {WheelEvent}  event - A WheelEvent.\n    */\n   function onWheel(event)\n   {\n      event.stopPropagation();\n\n      const activeEl = CrossWindow.getActiveElement(event);\n      if (activeEl !== containerEl && !containerEl.contains(activeEl)) { containerEl.focus(); }\n   }\n</script>\n\n<!-- svelte-ignore a11y-no-noninteractive-element-interactions a11y-no-noninteractive-tabindex -->\n<div class=\"tjs-scroll-container tjs-a11y-focusable\"\n     bind:this={containerEl}\n     on:contextmenu={onContextMenuPress}\n     on:keydown={onKeydown}\n     on:keyup={onKeyup}\n     on:wheel={onWheel}\n     use:applyScroll={{ scrollLeft, scrollTop }}\n     use:applyStyles={styles}\n     role=region\n     tabindex={allowTabFocus ? 0 : -1}>\n   <slot>\n      {#if svelte}\n         <svelte:component this={svelte.class} {...(isObject(svelte.props) ? svelte.props : {})} />\n      {/if}\n   </slot>\n</div>\n\n<style>\n   .tjs-scroll-container {\n      display: var(--tjs-scroll-container-display, flex);\n      flex: var(--tjs-scroll-container-flex, 1);\n      flex-direction: var(--tjs-scroll-container-flex-direction, column);\n      flex-wrap: var(--tjs-scroll-container-flex-wrap, nowrap);\n      gap: var(--tjs-scroll-container-gap, 0);\n\n      background: var(--tjs-scroll-container-background);\n      border: var(--tjs-scroll-container-border);\n      border-radius: var(--tjs-scroll-container-border-radius);\n      box-shadow: var(--tjs-scroll-container-box-shadow);\n      color: var(--tjs-scroll-container-color, inherit);\n\n      margin: var(--tjs-scroll-container-margin, 0);\n      padding: var(--tjs-scroll-container-padding, 0);\n\n      overflow: var(--tjs-scroll-container-overflow, auto);\n      overscroll-behavior: var(--tjs-scroll-container-overscroll-behavior, contain);\n\n      scrollbar-gutter: var(--tjs-scroll-container-scrollbar-gutter, stable);\n      scrollbar-color: var(--tjs-scroll-container-scrollbar-color, inherit);\n      scrollbar-width: var(--tjs-scroll-container-scrollbar-width, thin);\n\n      transition: var(--tjs-scroll-container-transition);\n   }\n\n   .tjs-scroll-container:focus {\n      background: var(--tjs-scroll-container-background-focus, var(--tjs-scroll-container-background));\n      border: var(--tjs-scroll-container-border-focus, var(--tjs-scroll-container-border));\n      border-radius: var(--tjs-scroll-container-border-radius-focus, var(--tjs-scroll-container-border-radius));\n      box-shadow: var(--tjs-scroll-container-box-shadow-focus, var(--tjs-scroll-container-box-shadow));\n   }\n\n   .tjs-scroll-container:focus-visible {\n      outline: var(--tjs-scroll-container-outline-focus-visible, 2px solid transparent);\n   }\n\n   .tjs-scroll-container[tabindex=\"0\"]:focus-visible {\n      background: var(--tjs-scroll-container-background-focus-visible, var(--tjs-scroll-container-background));\n      border: var(--tjs-scroll-container-border-focus-visible, var(--tjs-scroll-container-border));\n      border-radius: var(--tjs-scroll-container-border-radius-focus-visible, var(--tjs-scroll-container-border-radius));\n      box-shadow: var(--tjs-scroll-container-box-shadow-focus-visible, var(--tjs-scroll-container-box-shadow));\n   }\n</style>\n","import { fade } from 'svelte/transition';\nimport { TJSDialog } from '@typhonjs-fvtt/runtime/svelte/application';\nimport { TJSGlassPane } from '@typhonjs-fvtt/runtime/svelte/component/application';\nimport { TJSSvelte } from '@typhonjs-fvtt/runtime/svelte/util';\nimport { nextAnimationFrame } from '@typhonjs-fvtt/runtime/util/animate';\nimport { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { A11yHelper } from '@typhonjs-fvtt/runtime/util/a11y';\nimport { ManagedPromise } from '@typhonjs-fvtt/runtime/util/async';\nimport { isIterable, isObject } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\n * Provides managed control of the Foundry {@link fvtt.FilePicker} app simplifying asynchronous use cases. While the stock\n * FilePicker provides a callback it is not easy to make it asynchronous given that a user can close the app.\n * FVTTFilePickerControl enables a fully asynchronous workflow controlling one FilePicker instance at a time. When\n * {@link FVTTFilePickerControl.browse} is invoked any previous FilePicker instance is closed and Promise resolved.\n *\n * Additionally, the file picker app is modified to work in modal context w/ TJSGlassPane along with any managing\n * associated dialog instances displayed. A very powerful capability is to display a modal FilePicker app instance.\n *\n * For extended options available for {@link FVTTFilePickerControl.browse} see {@link FVTTFilePickerBrowseOptions}.\n * It is highly recommended that you provide a unique CSS ID for each file picker instance invoked.\n * A use case where you should use FVTTFilePickerControl is to invoke {@link FVTTFilePickerControl.close}\n * in an `onDestroy` Svelte callback to close any open file picker apps associated w/ UI layout components you design.\n *\n * A demo example is available in `essential-svelte-esm`:\n * {@link https://github.com/typhonjs-fvtt-demo/essential-svelte-esm}\n *\n * Several ready-made Svelte components are available that are designed around FVTTFilePickerControl.\n *\n * Please see the following Svelte components that can be imported from `#standard/component/fvtt/filepicker/button`:\n *\n * @see TJSFileButton - A standard form button element.\n * @see TJSFileIconButton - Uses TJSIconButton for display.\n * @see TJSFileSlotButton - Provides a slotted button where you can provide any containing content.\n */\nclass FVTTFilePickerControl\n{\n   /**\n    * The deferred definition of the TRL file picker class. The class is deferred in creation until initial usage\n    * as some external platforms like `The Forge` replace the core Foundry file picker class instance.\n    *\n    * @type {null}\n    */\n   static #TJSFilePickerClass = null;\n\n   /**\n    * The single file picker instance allowing only one open file picker app at a time.\n    *\n    * @type {TJSFilePicker}\n    */\n   static #filepickerApp;\n\n   static #managedPromise = new ManagedPromise();\n\n   /**\n    * @returns {boolean} Test if the current user can browse files.\n    */\n   static get canBrowse()\n   {\n      return game.world && game.user.can('FILES_BROWSE');\n   }\n\n   /**\n    * Brings any non-modal / glasspane file picker to top. Returning if it is the active file picker.\n    *\n    * @param {string} [id] - The ID of the file picker app.\n    *\n    * @returns {boolean} Whether the file picker app is brought to top.\n    */\n   static bringToFront(id)\n   {\n      // Handle the case when no `id` is defined and potentially bring any file picker app to top.\n      if (id === void 0 && this.#filepickerApp)\n      {\n         // Only invoke `bringToFront` if the file picker app is not contained in a glasspane.\n         if (!this.#filepickerApp?.hasGlasspane)\n         {\n            this.#filepickerApp?.bringToFront?.();\n            this.#filepickerApp?.maximize?.();\n         }\n         return true;\n      }\n\n      if (typeof id !== 'string')\n      {\n         throw new TypeError(`FVTTFilePickerControl.bringToFront error: 'id' is not a string.`);\n      }\n\n      let result = false;\n\n      if (this.#filepickerApp && this.#filepickerApp.trlId === id)\n      {\n         // Only invoke `bringToFront` if the file picker app is not contained in a glasspane.\n         if (!this.#filepickerApp?.hasGlasspane)\n         {\n            this.#filepickerApp?.bringToFront?.();\n            this.#filepickerApp?.maximize?.();\n         }\n\n         result = true;\n      }\n\n      return result;\n   }\n\n   /**\n    * Creates a new Foundry FilePicker app to browse and return a file path selection.\n    *\n    * @param {FVTTFilePickerBrowseOptions} [options] - FVTTFilePickerControl browse options. This may also include any\n    *        Application options.\n    *\n    * @param {KeyboardEvent | MouseEvent} [event] - An event to inspect for focus management when a modal file picker\n    *        is launched.\n    *\n    * @returns {Promise<string|null>} The file picker / browse result.\n    */\n   static async browse(options = {}, event)\n   {\n      if (!this.canBrowse) { return null; }\n\n      return this.#browseImpl(options, event);\n   }\n\n   /**\n    * Closes the file picker with optional `id` of a specific file picker app to close. You may also provide a list of\n    * app IDs to close. When provided only the file picker app instance with a matching ID will be closed.\n    *\n    * Note: When `close` is invoked w/ no `id` parameter any current file picker app is closed.\n    *\n    * @param {string | Iterable<string>}  [id] - Specific IDs to match against any current visible file picker app.\n    */\n   static close(id)\n   {\n      if (id !== void 0 && typeof id !== 'string' && !isIterable(id))\n      {\n         throw new TypeError(`FVTTFilePickerControl.close error: 'id' is not a string or list of strings.`);\n      }\n\n      if (this.#filepickerApp === void 0) { return; }\n\n      let close = false;\n\n      if (id !== void 0)\n      {\n         if (typeof id === 'string' && this.#filepickerApp.trlId === id)\n         {\n            close = true;\n         }\n         else if (isIterable(id))\n         {\n            for (const appId of id)\n            {\n               if (typeof appId === 'string' && this.#filepickerApp.trlId === appId)\n               {\n                  close = true;\n               }\n            }\n         }\n      }\n      else\n      {\n         close = true;\n      }\n\n      if (close) { this.#filepickerApp?.close?.(); }\n   }\n\n   /**\n    * Creates a new Foundry FilePicker app to browse and return a file path selection.\n    *\n    * @param {FVTTFilePickerBrowseOptions} [options] - FVTTFilePickerControl browse options. This may also include any\n    *        Application options.\n    *\n    * @param {KeyboardEvent | MouseEvent} [event] - An event to inspect for focus management when a modal file picker\n    *        is launched.\n    *\n    * @returns {Promise<string | null>} The file picker / browse result.\n    */\n   static async #browseImpl(options, event)\n   {\n      if (options?.glasspaneId !== void 0 && typeof options.glasspaneId !== 'string')\n      {\n         throw new TypeError(`FVTTFilePickerControl.browse error: 'glasspaneId' is not a string.`);\n      }\n\n      if (options?.zIndex !== void 0 && !Number.isInteger(options?.zIndex) && options?.zIndex < 0)\n      {\n         throw new TypeError(`FVTTFilePickerControl.browse error: 'zIndex' is not a positive integer.`);\n      }\n\n      if (event !== void 0 && !CrossWindow.isUserInputEvent(event))\n      {\n         throw new TypeError(\n          `FVTTFilePickerControl.browse error: 'event' is not a KeyboardEvent, MouseEvent, or PointerEvent.`);\n      }\n\n      // Store the explicit zIndex / glasspaneId. This may be modified if the file picker is to be modal.\n      let glasspaneId = options?.glasspaneId;\n\n      // If there is an existing glasspaneId to promote to then force the z-index to above everything else.\n      const zIndex = glasspaneId ? Number.MAX_SAFE_INTEGER : options?.zIndex;\n\n      // Handle the case when an existing file picker app is visible.\n      if (this.#filepickerApp)\n      {\n         const element = this.#filepickerApp?.element;\n         if (element instanceof HTMLElement && element.isConnected)\n         {\n            // Immediately hide window by setting a negative z-index.\n            element.style.zIndex = `${Number.MIN_SAFE_INTEGER}`;\n         }\n\n         // Make sure the app is closed and promise is resolved. Execution will continue below.\n         await this.#filepickerApp?.close?.();\n      }\n\n      // Handle the case when multiple invocations of `FVTTFilePickerControl.browse` in quick succession. When the managed\n      // Promise is still active resolve immediately with no results.\n      if (this.#managedPromise.isActive) { return Promise.resolve(null); }\n\n      const promise = this.#managedPromise.create();\n\n      promise.finally(() => this.#filepickerApp = void 0);\n\n      // Handle modal case -------------------------------------------------------------------------------------------\n\n      const modalOptions = isObject(options?.modalOptions) ? options.modalOptions : {};\n\n      // If there is an existing glasspane is specified do not create a new glasspane.\n      if (typeof glasspaneId === 'string')\n      {\n         const gpEl = document.querySelector(`#${glasspaneId}`);\n         if (gpEl)\n         {\n            // Capture and act first on `glasspane:keydown:escape` closing the file picker, but stopping any modal\n            // dialog underneath from closing as well.\n            gpEl.addEventListener('glasspane:keydown:escape', (event) =>\n            {\n               event.preventDefault();\n               event.stopImmediatePropagation();\n\n               this.#filepickerApp?.close?.();\n            }, { capture: true, once: true });\n\n            // If `closeOnInput` is true register a listener on the existing glasspane for the `glasspane:pointerdown`\n            // event to close the file picker app.\n            if (typeof modalOptions?.closeOnInput === 'boolean' && modalOptions?.closeOnInput)\n            {\n               gpEl.addEventListener('glasspane:pointerdown', () => this.#filepickerApp?.close?.(), { once: true });\n            }\n         }\n         else\n         {\n            console.warn(`FVTTFilePickerControl.browse warning: Could not locate glasspane for CSS ID: ${glasspaneId}`);\n         }\n      }\n\n      // Otherwise, if there isn't an existing glasspane specified and `modal` is true then create a new TJSGlassPane\n      // component.\n      else if (typeof options?.modal === 'boolean' && options.modal)\n      {\n         glasspaneId = 'fvtt-file-picker-glasspane';\n\n         const gp = new TJSGlassPane({\n            target: document.body,\n            props: {\n               id: glasspaneId,\n               background: typeof modalOptions?.background === 'string' ? modalOptions.background : void 0,\n               closeOnInput: typeof modalOptions?.closeOnInput === 'boolean' ? modalOptions.closeOnInput : void 0,\n               transition: modalOptions?.transition ?? fade,\n               transitionOptions: modalOptions?.transitionOptions ?? { duration: 200 },\n               styles: isObject(modalOptions?.styles) ? modalOptions?.styles : void 0\n            }\n         });\n\n         // When `closeOnInput` is true and a click on the glasspane occurs close the file picker app.\n         gp.$on('glasspane:close', () => this.#filepickerApp?.close?.());\n\n         // Close the file picker whenever the escape key is pressed.\n         gp.$on('glasspane:keydown:escape', () => this.#filepickerApp?.close?.());\n\n         // Destroy the glasspane component when the Promise is resolved.\n         promise.finally(() => TJSSvelte.util.outroAndDestroy(gp));\n      }\n\n      // If an event is defined determine a potential focus source. When the file picker app is closed this element\n      // resumes focus.\n      const focusSource = glasspaneId && event ? A11yHelper.getFocusSource({ event }) : void 0;\n\n      // -------------------------------------------------------------------------------------------------------------\n\n      const TJSFilePickerClass = this.#TJSFilePickerClass ? this.#TJSFilePickerClass : this.#createFilePickerClass();\n\n      // The core Foundry file picker sadly has styles based on `#file-picker`, so providing a unique external CSS ID is\n      // not advised. TJSFilePicker tracks IDs via `trlId` getter instead.\n      const trlId = options.id ? options.id : void 0;\n\n      // Remove any `id` from options to preserve default `#file-picker` ID from Foundry core file picker.\n      delete options.id;\n\n      this.#filepickerApp = new TJSFilePickerClass({\n         popOutModuleDisable: true,\n         minimizable: false,\n         ...options,\n\n         callback: (result) =>\n         {\n            this.#managedPromise.resolve(result);\n         }\n      }, this.#managedPromise, { focusSource, glasspaneId, trlId, zIndex });\n\n      await this.#filepickerApp.browse();\n\n      const startMs = performance.now();\n\n      // By awaiting for the next N animation frames the app has been rendered. This is typically 1-3 `rAF`, but in\n      // certain cases under heavy load this may be 4 or 5 `rAF`.\n      for (let cntr = 0; cntr < 100; cntr++)\n      {\n         await nextAnimationFrame();\n         if (this.#filepickerApp?.element) { break; }\n      }\n\n      if (this.#filepickerApp?.element === void 0)\n      {\n         const waitMs = performance.now() - startMs;\n         console.warn(`FVTTFilePickerControl.browse warning: Core file picker did not display in ${waitMs} ms.`);\n         this.#managedPromise.resolve(void 0);\n         this.#filepickerApp.close();\n         return promise;\n      }\n\n      // Potentially move app inside glasspane.\n      if (typeof glasspaneId === 'string')\n      {\n         const gpContainerEl = document.querySelector(`#${glasspaneId} .tjs-glass-pane-container`);\n         if (gpContainerEl)\n         {\n            gpContainerEl.appendChild(this.#filepickerApp.element);\n         }\n         else\n         {\n            console.warn(`FVTTFilePickerControl.browse warning: Could not locate glasspane for CSS ID: ${glasspaneId}`);\n         }\n\n         // For modal dialogs prevent the window header from being draggable.\n         const headerEl = this.#filepickerApp.element.querySelector('.window-header');\n         if (headerEl)\n         {\n            headerEl.classList.remove('draggable');\n            headerEl.addEventListener('pointerdown', (event) => event.stopPropagation(), true);\n         }\n      }\n\n      // Directly modify the zIndex to be above everything else when supplied.\n      if (Number.isInteger(zIndex))\n      {\n         this.#filepickerApp.element.style.zIndex = `${zIndex}`;\n      }\n\n      return promise;\n   }\n\n   static #createFilePickerClass()\n   {\n      /**\n       * Extends FilePicker to handle resolving the managed Promise on app close, explicitly center the app when shown above\n       * a modal / glasspane, and manage any associated dialogs.\n       */\n      this.#TJSFilePickerClass = class TJSFilePicker extends foundry.applications.apps.FilePicker.implementation\n      {\n         /** @type {TJSDialog} */\n         #createDirectoryApp;\n\n         /** @type {import('#runtime/util/browser').A11yFocusSource} */\n         #focusSource;\n\n         /** @type {string} */\n         #glasspaneId;\n\n         /** @type {ManagedPromise} */\n         #managedPromise;\n\n         #trlId = void 0;\n\n         /** @type {number} */\n         #zIndex;\n\n         constructor(options, managedPromise, { focusSource, glasspaneId, trlId, zIndex } = {})\n         {\n            super({\n               ...options,\n               actions: { makeDirectory: TJSFilePicker.#onMakeDirectory },\n               window: { minimizable: typeof glasspaneId !== 'string' } // When modal prevent minimizing.\n            });\n\n            this.#focusSource = focusSource;\n            this.#glasspaneId = glasspaneId;\n            this.#managedPromise = managedPromise;\n            this.#trlId = trlId;\n            this.#zIndex = zIndex;\n         }\n\n         /**\n          * @returns {boolean} Convenience getter for `FVTTFilePickerControl.bringToFront`.\n          */\n         get hasGlasspane() { return typeof this.#glasspaneId === 'string'; }\n\n         /**\n          * Any `id` field set in initial options to track and close this file picker instance.\n          *\n          * @returns {string | undefined}\n          */\n         get trlId() { return this.#trlId; }\n\n         /**\n          * Always focus first input when `bringToFront` is invoked.\n          */\n         bringToFront()\n         {\n            // Early out when modal as `super.bringToFront` will modify z-index.\n            if (typeof this.#glasspaneId === 'string') { return; }\n\n            super.bringToFront();\n         }\n\n         /**\n          * Overridden close method that resolves the managed Promise w/ null and closes any associated create directory\n          * dialog.\n          *\n          * @param {object}   options - Application close options.\n          *\n          * @returns {Promise<void>}\n          */\n         async close(options)\n         {\n            // Close any associated create directory dialog.\n            this.#createDirectoryApp?.close?.();\n            this.#createDirectoryApp = void 0;\n\n            this.#managedPromise?.resolve?.(null);\n            this.#managedPromise = void 0;\n\n            // Make window content overflow hidden to avoid any scrollbars appearing in default Application close animation.\n            const content = this.element?.querySelector('.window-content');\n            if (content) { content.style.overflow = 'hidden'; }\n\n            await super.close(options);\n\n            // Apply any stored focus options and then remove them from options.\n            if (this.#focusSource)\n            {\n               A11yHelper.applyFocusSource(this.#focusSource);\n               this.#focusSource = void 0;\n            }\n         }\n\n         /**\n          * Present the user with a dialog to create a subdirectory within their currently browsed file storage location.\n          *\n          * @param {object} source     The data source being browsed\n          *\n          * @private\n          */\n         async #createDirectoryDialog(source)\n         {\n            // Return early if there is an existing create subfolder / directory dialog.\n            if (this.#createDirectoryApp) { return; }\n\n            const labelText = game.i18n.localize(\"FILES.DirectoryName.Label\");\n            const placeholder = game.i18n.localize(\"FILES.DirectoryName.Placeholder\");\n\n            const form = `<form class=\"dialog-form standard-form\" autocomplete=off><div class=\"form-group\">\n               <label for=\"create-directory-name\">${labelText}</label>\n               <div class=\"form-fields\">\n               <input id=\"create-directory-name\" type=\"text\" name=\"dirname\" placeholder=\"${placeholder}\" required autofocus>\n               </div></div></form>`;\n\n            // The initial target is document.body, but if there is a glasspane container the dialog `svelte.target` is set.\n            let dialogTargetEl = globalThis.document.body;\n\n            // Potentially find any associated glasspane container element and make that dialog Svelte component mount target.\n            if (typeof this.#glasspaneId === 'string')\n            {\n               const gpContainerEl = document.querySelector(`#${this.#glasspaneId} .tjs-glass-pane-container`);\n               if (gpContainerEl)\n               {\n                  dialogTargetEl = gpContainerEl;\n               }\n               else\n               {\n                  console.warn(`TJSFilePicker.#createDirectoryDialog warning: Could not locate glasspane for CSS ID: ${\n                     this.#glasspaneId}`);\n               }\n            }\n\n            this.#createDirectoryApp = new TJSDialog({\n               draggable: false,\n               zIndex: Number.MAX_SAFE_INTEGER,\n               title: game.i18n.localize('FILES.CreateSubfolder'),\n               content: form,\n               focusFirst: true,\n               minimizable: false,\n               buttons: {\n                  onYes: {\n                     icon: 'fas fa-check',\n                     label: 'CONTROLS.CommonCreate',\n                     onPress: async ({ application }) =>\n                     {\n                        const html = application.elementContent;\n\n                        const dirname = html.querySelector('input').value;\n                        const path = [source.target, dirname].filterJoin('/');\n                        try\n                        {\n                           await this.constructor.createDirectory(this.activeSource, path, { bucket: source.bucket });\n                        }\n                        catch (err)\n                        {\n                           ui.notifications.error(err.message);\n                        }\n                        return this.browse(this.target);\n                     }\n                  },\n                  onNo: {\n                     icon: 'fas fa-times',\n                     label: 'Cancel'\n                  }\n               }\n            }, {\n               headerIcon: 'fa-solid fa-folder-plus',\n               popOutModuleDisable: true,\n\n               svelte: { target: dialogTargetEl }\n            });\n\n            // Use wait to be able to remove the reference when any result is chosen.\n            await this.#createDirectoryApp.wait();\n            this.#createDirectoryApp = void 0;\n         }\n\n         /**\n          * Create a new subdirectory in the current working directory.\n          *\n          * @this {TJSFilePicker}\n          */\n         static async #onMakeDirectory()\n         {\n            await this.#createDirectoryDialog(this.source);\n         }\n\n         /**\n          * Overridden to explicitly center the file picker app when displayed above a modal / glasspane.\n          *\n          * @param {object}   pos - Position object.\n          *\n          * @returns {{left: number, top: number, width: number, height: number, scale: number}} Position object.\n          */\n         setPosition(pos = {})\n         {\n            const currentPos = super.setPosition(pos);\n\n            if (this.#glasspaneId)\n            {\n               const top = (globalThis.innerHeight - currentPos.height) / 2;\n\n               this.element.style.top = `${top}px`;\n               super.setPosition({ top });\n               currentPos.top = top;\n            }\n\n            return currentPos;\n         }\n      };\n\n      return this.#TJSFilePickerClass;\n   }\n}\n\n/**\n * @typedef {object} FVTTFilePickerBrowseOptions - Foundry {@link fvtt.FilePicker} w/ expanded\n *          FVTTFilePickerControl options.\n *\n * @property {string} [type='any']         A type of file to target, in 'audio', 'image', 'video', 'imagevideo',\n *                                         'folder', 'font', 'graphics', 'text', or 'any'.\n *\n * @property {string} [current]            The current file path being modified, if any.\n *\n * @property {string} [activeSource=data]  A current file source in 'data', 'public', or 's3'.\n *\n * @property {Function} [callback]         A callback function to trigger once a file has been selected.\n *\n * @property {boolean} [allowUpload=true]  A flag which permits explicitly disallowing upload, true by default.\n *\n * @property {Map<string, fvtt.FavoriteFolder>} [favorites] A map of favorite folder configuration objects.\n *\n * @property {string} [displayMode]        The picker display mode in FilePicker.DISPLAY_MODES.\n *\n * @property {boolean} [tileSize=false]    Display the tile size configuration.\n *\n * @property {string[]} [redirectToRoot]   Redirect to the root directory rather than starting in the source directory\n *                                         of one of these files.\n *\n * @property {string} [id]                 A specific unique CSS app ID.\n *\n * @property {string} [glasspaneId]        Provide the CSS ID of the glasspane to move the file picker app to after opening.\n *\n * @property {boolean} [modal]             When true a modal file picker will be opened.\n *\n * @property {({\n *    background: string,\n *    closeOnInput: boolean,\n *    styles: { [key: string]: string | null },\n *    transition: import('#runtime/svelte/transition').TransitionFunction,\n *    transitionOptions: { [key: string]: any }\n * })} [modalOptions]                      Options for the modal glasspane / TJSGlasspane component.\n *\n * @property {({ urlString: string }) => void} [onURLString] Optional function invoked when URL string changes.\n *\n * @property {({ urlString: string }) => Promise<boolean>} [onValidateURLString] Optional validation function of\n * selected URL string.\n *\n * @property {import('#runtime/svelte/store/util').MinimalWritable<string>} [store] A minimal writable store that is\n * set with result.\n *\n * @property {number} [zIndex]             Provides an explicit `z-index` for the file picker app.\n */\n\nexport { FVTTFilePickerControl };\n//# sourceMappingURL=index.js.map\n","<script>\n   /**\n    * @privateRemarks\n    * TODO: Add description\n    *\n    * @componentDocumentation\n    */\n\n   import { createEventDispatcher } from 'svelte';\n\n   import { inlineSvg }             from '@typhonjs-fvtt/runtime/svelte/action/dom/inline-svg';\n   import { applyStyles }           from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { popoverTooltip }        from '@typhonjs-fvtt/runtime/svelte/action/dom/tooltip';\n   import { TJSSvelte }             from '@typhonjs-fvtt/runtime/svelte/util';\n   import { AssetValidator }        from '@typhonjs-fvtt/runtime/util/browser';\n   import { localize }              from '@typhonjs-fvtt/runtime/util/i18n';\n   import { isObject }              from '@typhonjs-fvtt/runtime/util/object';\n\n   export let button = void 0;\n\n   // Button props --------------------------------------------------------------------------------------------------\n\n   export let enabled = void 0;\n\n   export let icon = void 0;\n\n   export let label = void 0;\n\n   export let tooltip = void 0;\n\n   export let tooltipDirection = void 0;\n\n   export let styles = void 0;\n\n   export let keyCode = void 0;\n\n   export let efx = void 0;\n\n   export let onPress = void 0;\n   export let onContextMenu = void 0;\n   export let clickPropagate = void 0;\n\n   const dispatch = createEventDispatcher();\n\n   const s_EFX_DEFAULT = () => void 0;\n\n   let efxEl;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: enabled = isObject(button) && typeof button.enabled === 'boolean' ? button.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: icon = isObject(button) && typeof button.icon === 'string' ? button.icon :\n    typeof icon === 'string' ? icon : void 0;\n\n   $: label = isObject(button) && (typeof button.label === 'string' || TJSSvelte.config.isConfigEmbed(button.label)) ?\n    button.label :\n     (typeof label === 'string' || TJSSvelte.config.isConfigEmbed(label)) ? label : void 0;\n\n   $: tooltip = isObject(button) && typeof button.tooltip === 'string' ? button.tooltip :\n    typeof tooltip === 'string' ? tooltip : void 0;\n\n   $: tooltipDirection = isObject(button) && typeof button.tooltipDirection === 'string' ? button.tooltipDirection :\n    typeof tooltipDirection === 'string' ? tooltipDirection : void 0;\n\n   $: styles = isObject(button) && isObject(button.styles) ? button.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: keyCode = isObject(button) && typeof button.keyCode === 'string' ? button.keyCode :\n    typeof keyCode === 'string' ? keyCode : 'Enter';\n\n   $: efx = isObject(button) && typeof button.efx === 'function' ? button.efx :\n    typeof efx === 'function' ? efx : s_EFX_DEFAULT;\n\n   $: onPress = isObject(button) && typeof button.onPress === 'function' ? button.onPress :\n    typeof onPress === 'function' ? onPress : void 0;\n\n   $: onContextMenu = isObject(button) && typeof button.onContextMenu === 'function' ? button.onContextMenu :\n    typeof onContextMenu === 'function' ? onContextMenu : void 0;\n\n   $: clickPropagate = isObject(button) && typeof button.clickPropagate === 'boolean' ? button.clickPropagate :\n    typeof clickPropagate === 'boolean' ? clickPropagate : false;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   let iconType;\n\n   $:\n   {\n      const result = AssetValidator.parseMedia({ url: icon, mediaTypes: AssetValidator.MediaTypes.img_svg });\n      iconType = result.valid ? result.elementType : 'font';\n   }\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /**\n    * @param {PointerEvent}    event - PointerEvent\n    */\n   function onClick(event)\n   {\n      // Ignore click events from `button` element coming from the keyboard.\n      if (event.detail === 0)\n      {\n         event.preventDefault();\n         event.stopImmediatePropagation();\n\n         return;\n      }\n\n      if (typeof onPress === 'function') { onPress({ event }); }\n\n      dispatch('press', { event });\n\n      if (!clickPropagate)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * @param {PointerEvent}   event - PointerEvent\n    */\n   function onContextMenuPress(event)\n   {\n      if (typeof onContextMenu === 'function')\n      {\n         // Because the efx is not the key event listener forward on a new event to trigger effect.\n         if (efxEl) { efxEl.dispatchEvent(new MouseEvent('contextmenu')); }\n\n         onContextMenu({ event });\n      }\n\n      if (!clickPropagate)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n\n   /**\n    * Consume / stop propagation of key down when key codes match.\n    *\n    * @param {KeyboardEvent}    event -\n    */\n   function onKeydown(event)\n   {\n      if (event.code === keyCode)\n      {\n         event.preventDefault();\n         event.stopPropagation();\n      }\n\n      // Always prevent the button element from triggering the `click` event on `Enter` key down.\n      if (event.code === 'Enter' || event.code === 'Space') { event.preventDefault(); }\n   }\n\n   /**\n    * Handle press event if key codes match.\n    *\n    * @param {KeyboardEvent}    event -\n    */\n   function onKeyup(event)\n   {\n      if (event.code === keyCode)\n      {\n         // Because the efx is not the key event listener forward on a new event to trigger effect.\n         if (efxEl) { efxEl.dispatchEvent(new KeyboardEvent(event.type, { key: event.key, code: event.code })); }\n\n         if (typeof onPress === 'function') { onPress({ event }); }\n\n         dispatch('press', { event });\n\n         event.preventDefault();\n         event.stopPropagation();\n      }\n   }\n</script>\n\n<button class=tjs-form-button\n        on:click={onClick}\n        on:contextmenu={onContextMenuPress}\n        on:keydown={onKeydown}\n        on:keyup={onKeyup}\n        on:click\n        on:contextmenu\n        on:press\n        disabled={!enabled}\n        use:popoverTooltip={{ tooltip, direction: tooltipDirection }}\n        use:applyStyles={styles}>\n   <span class=tjs-form-button-efx bind:this={efxEl} use:efx={{ enabled }}>\n      <span class=tjs-form-button-span>\n         {#if icon}\n            {#if iconType === 'font'}\n               <i class={`icon ${icon}`}></i>\n            {:else if iconType === 'img'}\n               <img src={icon} alt=\"\" class=icon>\n            {:else if iconType === 'svg'}\n               <svg use:inlineSvg={{ src: icon }} class=icon></svg>\n            {/if}\n         {/if}\n\n         {#if $$slots.default}\n            <slot />\n         {:else if typeof label === 'string'}\n            {localize(label)}\n         {:else if TJSSvelte.config.isConfigEmbed(label)}\n            <svelte:component this={label.class} {...(isObject(label.props) ? label.props : {})} />\n         {/if}\n      </span>\n   </span>\n</button>\n\n<style>\n   .tjs-form-button-efx {\n      display: flex;\n      justify-content: center;\n      transform-style: preserve-3d;\n      width: 100%;\n      height: 100%;\n   }\n\n   .tjs-form-button-efx .tjs-form-button-span {\n      transform: translateZ(1px);\n   }\n\n   .tjs-form-button-span {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: var(--tjs-form-button-gap, 0.25em);\n      padding: var(--tjs-form-button-padding, 6px);\n      height: var(--tjs-form-button-height, var(--tjs-input-height, inherit));\n      line-height: var(--tjs-form-button-height, var(--tjs-input-height, inherit));\n   }\n\n   button {\n      /* TODO: cssVariables defaults v2: Consider setting default values from Foundry styles via TJSStyleManager / cssVariables defined in root index.js\n      /*background: var(--tjs-form-button-background, var(--tjs-button-background));*/\n      /*border: var(--tjs-form-button-border, var(--tjs-button-border));*/\n      /*border-radius: var(--tjs-form-button-border-radius, var(--tjs-button-border-radius));*/\n      /*border-width: var(--tjs-form-button-border-width, var(--tjs-button-border-width));*/\n\n      cursor: var(--tjs-cursor-pointer, pointer);\n      font-family: var(--tjs-form-button-font-family, var(--tjs-button-font-family));\n      font-size: var(--tjs-form-button-font-size, var(--tjs-button-font-size, inherit));\n      height: var(--tjs-form-button-height, var(--tjs-input-height, inherit));\n      min-width: var(--tjs-form-button-height, var(--tjs-input-height, 100%));\n      width: var(--tjs-form-button-width, 100%);\n\n      min-height: unset;\n\n      padding: 0;\n      user-select: none;\n      transition: var(--tjs-form-button-transition);\n      -webkit-tap-highlight-color: var(--tjs-default-webkit-tap-highlight-color, transparent);\n   }\n\n   button:disabled {\n      cursor: var(--tjs-button-cursor-disabled, var(--tjs-input-cursor-disabled, default));\n      filter: var(--tjs-form-button-filter-disabled, var(--tjs-button-filter-disabled, grayscale(100%) contrast(50%)));\n      pointer-events: none;\n   }\n\n   button:disabled > * {\n      text-shadow: var(--tjs-form-button-text-shadow-disabled, var(--tjs-default-text-shadow-disabled, none));\n      pointer-events: none;\n   }\n\n   button:hover {\n      box-shadow: var(--tjs-form-button-box-shadow-hover, var(--tjs-default-box-shadow-hover));\n      outline: var(--tjs-form-button-outline-hover, var(--tjs-default-outline-hover, revert));\n      text-shadow: var(--tjs-form-button-text-shadow-hover, var(--tjs-default-text-shadow-hover, inherit));\n   }\n\n   button:focus-visible {\n      box-shadow: var(--tjs-form-button-box-shadow-focus-visible, var(--tjs-default-box-shadow-focus-visible));\n      outline: var(--tjs-form-button-outline-focus-visible, var(--tjs-default-outline-focus-visible, revert));\n      transition: var(--tjs-form-button-transition-focus-visible, var(--tjs-default-transition-focus-visible));\n      text-shadow: var(--tjs-form-button-text-shadow-focus-visible, var(--tjs-default-text-shadow-focus-hover, inherit));\n   }\n\n   .icon {\n      display: inline-flex;\n      justify-content: center;\n      align-items: center;\n\n      /* Set icon height and max-width based on input height - 2x padding */\n      height: calc(var(--tjs-input-height) - (var(--tjs-form-button-padding, 6px) * 2));\n      max-width: calc(var(--tjs-input-height) - (var(--tjs-form-button-padding, 6px) * 2));\n   }\n</style>\n","import { TJSSvelte } from '@typhonjs-fvtt/runtime/svelte/util';\n\n/**\n * Provides a helper utility to verify if a label prop is valid for the TJSSlotLabel component.\n */\nexport class TJSSlotLabelUtil\n{\n   /**\n    * Test if the given label is valid data / prop for the TJSSlotLabel component.\n    */\n   static isValid(label)\n   {\n      return typeof label === 'string' || TJSSvelte.config.isConfigEmbed(label);\n   }\n}\n","<script>\n   /**\n    * Provides a slotted component wrapped in a label element. The `label` prop can either be a string or a Svelte\n    * configuration object to be used as the label text. The label element uses `display: contents` which ignores the\n    * label element and lays out the children as if the label element does not exist which is perfect for a grid layout.\n    * Optionally, there are CSS variables available to change the `display` and additional flex layout configuration\n    * possibilities.\n    *\n    * ### CSS Variables\n    *\n    * The following CSS variables control the associated styles with the default values:\n    *\n    * ```\n    * For layout:\n    * -----------------------------------------------------\n    * --tjs-slot-label-display - contents\n    * --tjs-slot-label-flex - unset\n    * --tjs-slot-label-flex-direction - unset\n    * --tjs-slot-label-flex-wrap - unset\n    *\n    * For text / string label:\n    * -----------------------------------------------------\n    * --tjs-slot-label-color - inherit\n    * --tjs-slot-label-font-family - inherit\n    * --tjs-slot-label-font-size - inherit\n    * --tjs-slot-label-line-height - inherit\n    * --tjs-slot-label-text-align - right\n    * --tjs-slot-label-white-space - nowrap\n    * ```\n    * @componentDocumentation\n    */\n\n   import { TJSSvelte }          from '@typhonjs-fvtt/runtime/svelte/util';\n   import { localize }           from '@typhonjs-fvtt/runtime/util/i18n';\n   import { isObject }           from '@typhonjs-fvtt/runtime/util/object';\n\n   import { TJSSlotLabelUtil }   from './TJSSlotLabelUtil.js';\n\n   export let label = void 0;\n\n   /** @type {boolean} */\n   export let enabled = void 0;\n\n   /**\n    * Set to `true` to use the `pointer` cursor over label.\n    *\n    * @type {boolean}\n    */\n   export let isPointer = void 0;\n\n   $: label = TJSSlotLabelUtil.isValid(label) ? label : void 0;\n\n   $: enabled = isObject(label) && typeof label.enabled === 'boolean' ? label.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: isPointer = isObject(label) && typeof label.isPointer === 'boolean' ? label.isPointer :\n    typeof isPointer === 'boolean' ? isPointer : false;\n</script>\n\n{#if label}\n   <!-- svelte-ignore a11y-label-has-associated-control -->\n   <label class=tjs-slot-label>\n      {#if typeof label === 'string'}\n         <span class=tjs-slot-label-span\n               class:is-pointer={isPointer}\n               class:disabled={!enabled}>\n            {localize(label)}\n         </span>\n      {:else if TJSSvelte.config.isConfigEmbed(label)}\n         <svelte:component this={label.class} {...(isObject(label.props) ? label.props : {})} {enabled} />\n      {/if}\n\n      <slot />\n   </label>\n{:else}\n   <slot />\n{/if}\n\n<style>\n   label {\n      display: var(--tjs-slot-label-display, contents);\n\n      align-items: var(--tjs-slot-label-align-items, center);\n      cursor: var(--tjs-cursor-default, default);\n\n      /* Unset, but available when 'display' is changed */\n      flex: var(--tjs-slot-label-flex, unset);\n      flex-direction: var(--tjs-slot-label-flex-direction, unset);\n      flex-wrap: var(--tjs-slot-label-flex-wrap, unset);\n      gap: var(--tjs-slot-label-gap, unset);\n      justify-content: var(--tjs-slot-label-justify-content, unset);\n   }\n\n   span {\n      color: var(--tjs-slot-label-span-color, inherit);\n      font-family: var(--tjs-slot-label-span-font-family, inherit);\n      font-size: var(--tjs-slot-label-span-font-size, inherit);\n      line-height: var(--tjs-slot-label-span-line-height, inherit);\n      text-align: var(--tjs-slot-label-span-text-align, right);\n      white-space: var(--tjs-slot-label-span-white-space, nowrap);\n   }\n\n   span.is-pointer:not(.disabled) {\n      cursor: var(--tjs-cursor-pointer, pointer);\n   }\n\n   span.disabled {\n      cursor: var(--tjs-slot-label-cursor-disabled, var(--tjs-cursor-default, default));\n      filter: var(--tjs-slot-label-filter-disabled, grayscale(100%) contrast(20%) brightness(120%));\n   }\n</style>\n","<script>\n   /**\n    * Provides a data driven checkbox input w/ label.\n    *\n    * ### CSS Variables:\n    * ```\n    * --tjs-input-appearance\n    * --tjs-input-border\n    * --tjs-input-border-radius\n    * --tjs-input-border-disabled\n    * --tjs-input-box-shadow-focus\n    * --tjs-input-box-shadow-focus-visible\n    * --tjs-input-cursor\n    * --tjs-input-cursor-disabled\n    * --tjs-input-flex\n    * --tjs-input-outline-focus-visible\n    * --tjs-input-outline-offset\n    * --tjs-input-transition-focus-visible\n    * --tjs-input-transition-hover\n    *\n    * --tjs-input-checkbox-appearance\n    * --tjs-input-checkbox-background\n    * --tjs-input-checkbox-border\n    * --tjs-input-checkbox-border-radius\n    * --tjs-input-checkbox-border-disabled\n    * --tjs-input-checkbox-box-shadow-focus\n    * --tjs-input-checkbox-box-shadow-focus-visible\n    * --tjs-input-checkbox-cursor\n    * --tjs-input-checkbox-cursor-disabled\n    * --tjs-input-checkbox-diameter\n    * --tjs-input-checkbox-flex\n    * --tjs-input-checkbox-height\n    * --tjs-input-checkbox-outline-hover\n    * --tjs-input-checkbox-outline-focus-visible\n    * --tjs-input-checkbox-outline-offset\n    * --tjs-input-checkbox-transition-focus-visible\n    * --tjs-input-checkbox-transition-hover\n    * --tjs-input-checkbox-width\n    * ```\n    * @componentDocumentation\n    */\n\n   import { writable }                 from 'svelte/store';\n\n   import { applyStyles }              from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { isMinimalWritableStore }   from '@typhonjs-fvtt/runtime/svelte/store/util';\n   import { isObject }                 from '@typhonjs-fvtt/runtime/util/object';\n\n   import {\n      TJSSlotLabel,\n      TJSSlotLabelUtil }               from '@typhonjs-fvtt/standard/component/label';\n\n   export let input = void 0;\n\n   export let enabled = void 0;\n   export let label = void 0;\n   export let readonly = void 0;\n   export let store = void 0;\n   export let styles = void 0;\n\n   export let efx = void 0;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: enabled = isObject(input) && typeof input.enabled === 'boolean' ? input.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: label = isObject(input) && TJSSlotLabelUtil.isValid(input.label) ? input.label :\n    TJSSlotLabelUtil.isValid(label) ? label : void 0;\n\n   $: readonly = isObject(input) && typeof input.readonly === 'boolean' ? input.readonly :\n    typeof readonly === 'boolean' ? readonly : false;\n\n   $: store = isObject(input) && isMinimalWritableStore(input.store) ? input.store :\n    isMinimalWritableStore(store) ? store : writable(void 0);\n\n   $: styles = isObject(input) && isObject(input.styles) ? input.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: efx = isObject(input) && typeof input.efx === 'function' ? input.efx :\n    typeof efx === 'function' ? efx : () => {};\n</script>\n\n<TJSSlotLabel {label} {enabled} isPointer={true}>\n   <div class=tjs-input-container use:efx use:applyStyles={styles} on:pointerdown>\n      <input class=tjs-input\n             type=checkbox\n             bind:checked={$store}\n             on:pointerdown\n             disabled={!enabled}\n             {readonly}\n      />\n   </div>\n</TJSSlotLabel>\n\n<style>\n    /* TODO: cssVariable defaults */\n\n    .tjs-input-container {\n       display: grid;\n       place-items: center;\n       pointer-events: none;\n       transform-style: preserve-3d;\n\n       background: var(--tjs-input-checkbox-background, var(--tjs-input-background));\n       border-radius: var(--tjs-input-checkbox-border-radius, var(--tjs-input-border-radius));\n       flex: var(--tjs-input-checkbox-flex, 0 0 20px);\n       margin: var(--tjs-input-checkbox-margin, var(--tjs-input-margin));\n       width: var(--tjs-input-checkbox-diameter, var(--tjs-input-checkbox-width, 20px));\n       height: var(--tjs-input-checkbox-diameter, var(--tjs-input-checkbox-height, 20px));\n    }\n\n    input {\n       pointer-events: initial;\n       display: inline-block;\n       position: relative;\n\n       /*TODO: hard coded Foundry CSS var as default*/\n       accent-color: var(--tjs-input-checkbox-accent-color, var(--color-checkbox-checked));\n\n       appearance: var(--tjs-input-checkbox-appearance, var(--tjs-input-appearance, auto));\n\n       border: var(--tjs-input-checkbox-border, var(--tjs-input-border));\n       border-radius: var(--tjs-input-checkbox-border-radius, var(--tjs-input-border-radius));\n\n       margin: var(--tjs-input-checkbox-margin, 0);\n\n       outline-offset: var(--tjs-input-checkbox-outline-offset, var(--tjs-input-outline-offset));\n\n       cursor: var(--tjs-input-checkbox-cursor, var(--tjs-input-cursor, var(--tjs-cursor-pointer, pointer)));\n\n       transform: translateZ(1px);\n       transition: var(--tjs-input-checkbox-transition);\n    }\n\n    input:disabled {\n       border: var(--tjs-input-checkbox-border-disabled, var(--tjs-input-border-disabled, none));\n       cursor: var(--tjs-input-checkbox-cursor-disabled, var(--tjs-input-cursor-disabled, var(--tjs-cursor-default, default)));\n       pointer-events: none;\n    }\n\n    input:focus {\n       outline: var(--tjs-input-checkbox-outline-focus, var(--tjs-default-outline-focus, unset));\n       box-shadow: var(--tjs-input-checkbox-box-shadow-focus, var(--tjs-input-box-shadow-focus, unset));\n    }\n\n    /* checkbox requires an additional `:hover:focus-visible` field to control outline when focused and hovering */\n    input:hover:focus-visible {\n       box-shadow: var(--tjs-input-checkbox-box-shadow-focus-visible, var(--tjs-default-box-shadow-focus-visible));\n       outline: var(--tjs-input-checkbox-outline-focus-visible, var(--tjs-default-outline-focus-visible, revert));\n       transition: var(--tjs-input-checkbox-transition-focus-visible, var(--tjs-default-transition-focus-visible));\n    }\n\n    input:focus-visible {\n       box-shadow: var(--tjs-input-checkbox-box-shadow-focus-visible, var(--tjs-default-box-shadow-focus-visible));\n       outline: var(--tjs-input-checkbox-outline-focus-visible, var(--tjs-default-outline-focus-visible, revert));\n       transition: var(--tjs-input-checkbox-transition-focus-visible, var(--tjs-default-transition-focus-visible));\n    }\n\n    input:hover {\n       box-shadow: var(--tjs-input-checkbox-box-shadow-hover, var(--tjs-default-box-shadow-hover));\n       outline: var(--tjs-input-checkbox-outline-hover, var(--tjs-default-outline-hover, revert));\n    }\n</style>\n","<script>\n   /**\n    * A number input type.\n    *\n    * ### CSS Variables:\n    * ```\n    * --tjs-input-appearance\n    * --tjs-input-background\n    * --tjs-input-border\n    * --tjs-input-border-radius\n    * --tjs-input-border-disabled\n    * --tjs-input-box-shadow-focus\n    * --tjs-input-box-shadow-focus-visible\n    * --tjs-input-caret-color\n    * --tjs-input-color\n    * --tjs-input-color-disabled\n    * --tjs-input-cursor\n    * --tjs-input-cursor-disabled\n    * --tjs-input-flex\n    * --tjs-input-font-family\n    * --tjs-input-font-size\n    * --tjs-input-height\n    * --tjs-input-line-height\n    * --tjs-input-padding\n    * --tjs-input-placeholder-color\n    * --tjs-input-outline-focus-visible\n    * --tjs-input-outline-offset\n    * --tjs-input-overflow\n    * --tjs-input-text-align\n    * --tjs-input-transition-focus-visible\n    * --tjs-input-value-invalid-color\n    * --tjs-input-width\n    *\n    * --tjs-input-number-appearance\n    * --tjs-input-number-background\n    * --tjs-input-number-border\n    * --tjs-input-number-border-radius\n    * --tjs-input-number-border-disabled\n    * --tjs-input-number-box-shadow-focus\n    * --tjs-input-number-box-shadow-focus-visible\n    * --tjs-input-number-caret-color\n    * --tjs-input-number-color\n    * --tjs-input-number-color-disabled\n    * --tjs-input-number-cursor\n    * --tjs-input-number-cursor-disabled\n    * --tjs-input-number-flex\n    * --tjs-input-number-font-family\n    * --tjs-input-number-font-size\n    * --tjs-input-number-height\n    * --tjs-input-number-line-height\n    * --tjs-input-number-outline-focus-visible\n    * --tjs-input-number-outline-offset\n    * --tjs-input-number-overflow\n    * --tjs-input-number-padding\n    * --tjs-input-number-placeholder-color\n    * --tjs-input-number-text-align\n    * --tjs-input-number-transition-focus-visible\n    * --tjs-input-number-value-invalid-color\n    * --tjs-input-number-width\n    *\n    * Webkit unique variables:\n    * --tjs-input-number-webkit-inner-spin-button-appearance\n    * --tjs-input-number-webkit-inner-spin-button-opacity\n    * --tjs-input-number-webkit-outer-spin-button-appearance\n    * --tjs-input-number-webkit-outer-spin-button-opacity\n    * ```\n    * @componentDocumentation\n    */\n\n   import { writable }        from 'svelte/store';\n\n   import { applyStyles }     from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n\n   import {\n      isMinimalWritableStore,\n      isReadableStore }       from '@typhonjs-fvtt/runtime/svelte/store/util';\n\n   import { localize }        from '@typhonjs-fvtt/runtime/util/i18n';\n   import { isObject }        from '@typhonjs-fvtt/runtime/util/object';\n\n   import {\n      TJSSlotLabel,\n      TJSSlotLabelUtil }      from '@typhonjs-fvtt/standard/component/label';\n\n   export let input = void 0;\n\n   export let enabled = void 0;\n   export let label = void 0;\n   export let options = void 0;\n   export let max = void 0;\n   export let min = void 0;\n   export let placeholder = void 0;\n   export let readonly = void 0;\n   export let step = void 0;\n   export let store = void 0;\n   export let storeIsValid = void 0;\n   export let styles = void 0;\n\n   export let efx = void 0;\n\n   const localOptions = {\n      blurOnEnterKey: true,\n      blurOnEscKey: false,\n      cancelOnEscKey: false,\n      innerSpinButton: false\n   }\n\n   let inputEl;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: enabled = isObject(input) && typeof input.enabled === 'boolean' ? input.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: label = isObject(input) && TJSSlotLabelUtil.isValid(input.label) ? input.label :\n    TJSSlotLabelUtil.isValid(label) ? label : void 0;\n\n   $: {\n      options = isObject(input) && isObject(input.options) ? input.options :\n       isObject(options) ? options : {};\n\n      if (typeof options?.blurOnEnterKey === 'boolean') { localOptions.blurOnEnterKey = options.blurOnEnterKey; }\n      if (typeof options?.blurOnEscKey === 'boolean') { localOptions.blurOnEscKey = options.blurOnEscKey; }\n      if (typeof options?.cancelOnEscKey === 'boolean') { localOptions.cancelOnEscKey = options.cancelOnEscKey; }\n\n      if (typeof options?.innerSpinButton === 'boolean') {\n         // Also consider `readonly` state disabling inner spin buttons if true.\n         localOptions.innerSpinButton = options.innerSpinButton && !readonly;\n      }\n   }\n\n   $: max = isObject(input) && typeof input.max === 'number' ? input.max :\n    typeof max === 'number' ? max : void 0;\n\n   $: min = isObject(input) && typeof input.min === 'number' ? input.min :\n    typeof min === 'number' ? min : void 0;\n\n   $: placeholder = isObject(input) && typeof input.placeholder === 'string' ? localize(input.placeholder) :\n    typeof placeholder === 'string' ? localize(placeholder) : void 0;\n\n   $: readonly = isObject(input) && typeof input.readonly === 'boolean' ? input.readonly :\n    typeof readonly === 'boolean' ? readonly : false;\n\n   $: step = isObject(input) && typeof input.step === 'number' ? input.step :\n    typeof step === 'number' ? step : void 0;\n\n   $: store = isObject(input) && isMinimalWritableStore(input.store) ? input.store :\n    isMinimalWritableStore(store) ? store : writable(void 0);\n\n   $: storeIsValid = isObject(input) && isReadableStore(input.storeIsValid) ? input.storeIsValid :\n    isReadableStore(storeIsValid) ? storeIsValid : writable(true);\n\n   $: styles = isObject(input) && isObject(input.styles) ? input.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: efx = isObject(input) && typeof input.efx === 'function' ? input.efx :\n    typeof efx === 'function' ? efx : () => {};\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /** @type {number|null} */\n   let initialValue;\n\n   /**\n    * Save initial value on focus. Convert to number or null the same way that Svelte does for binding `value`.\n    */\n   function onFocusIn()\n   {\n      if (localOptions.cancelOnEscKey)\n      {\n         initialValue = inputEl.value === '' ? null : globalThis.parseFloat(inputEl.value);\n      }\n   }\n\n   /**\n    * Blur input on enter key down.\n    *\n    * @param {KeyboardEvent} event -\n    */\n   function onKeyDown(event)\n   {\n      if (localOptions.blurOnEnterKey && event.code === 'Enter')\n      {\n         event.preventDefault();\n         event.stopPropagation();\n\n         initialValue = void 0;\n\n         inputEl.blur();\n         return;\n      }\n\n      if (event.code === 'Escape')\n      {\n         if (localOptions.cancelOnEscKey && (initialValue === null || typeof initialValue === 'number'))\n         {\n            store.set(initialValue);\n         }\n\n         if (localOptions.blurOnEscKey)\n         {\n            event.preventDefault();\n            event.stopPropagation();\n\n            initialValue = void 0;\n            inputEl.blur();\n         }\n      }\n   }\n</script>\n\n<TJSSlotLabel {label} {enabled}>\n   <div class=tjs-input-container use:efx use:applyStyles={styles} on:pointerdown>\n       <input class=tjs-input\n              type=number\n              bind:this={inputEl}\n              bind:value={$store}\n              class:inner-spin-button={localOptions.innerSpinButton}\n              class:is-value-invalid={!$storeIsValid}\n              max={max}\n              min={min}\n              step={step}\n              disabled={!enabled}\n              {placeholder}\n              {readonly}\n              on:focusin={onFocusIn}\n              on:keydown={onKeyDown}\n       />\n   </div>\n</TJSSlotLabel>\n\n<style>\n    .tjs-input-container {\n        display: block;\n        pointer-events: none;\n        transform-style: preserve-3d;\n\n        background: var(--tjs-input-number-background, var(--tjs-input-background));\n        border-radius: var(--tjs-input-number-border-radius, var(--tjs-input-border-radius));\n        flex: var(--tjs-input-number-flex, var(--tjs-input-flex));\n        margin: var(--tjs-input-number-margin, var(--tjs-input-margin));\n        height: var(--tjs-input-number-height, var(--tjs-input-height));\n        width: var(--tjs-input-number-width, var(--tjs-input-width));\n    }\n\n    .is-value-invalid {\n        color: var(--tjs-input-number-value-invalid-color, var(--tjs-input-value-invalid-color, red));\n    }\n\n    input {\n        pointer-events: initial;\n        display: inline-block;\n        position: relative;\n\n        /* For Firefox `textfield` is the default to remove inner spin buttons. Set to `auto` to show them. */\n        appearance: var(--tjs-input-number-appearance, var(--tjs-input-appearance, textfield));\n\n        background: transparent;\n\n        border: var(--tjs-input-number-border, var(--tjs-input-border));\n        border-radius: var(--tjs-input-number-border-radius, var(--tjs-input-border-radius));\n\n        width: 100%;\n        height: 100%;\n\n        padding: var(--tjs-input-number-padding, var(--tjs-input-padding, initial));\n\n        color: var(--tjs-input-number-color, var(--tjs-input-color, inherit));\n        caret-color: var(--tjs-input-number-caret-color, var(--tjs-input-caret-color));\n        font-family: var(--tjs-input-number-font-family, var(--tjs-input-font-family, inherit));\n        font-size: var(--tjs-input-number-font-size, var(--tjs-input-font-size, inherit));\n        line-height: var(--tjs-input-number-line-height, var(--tjs-input-line-height, inherit));\n        text-align: var(--tjs-input-number-text-align, var(--tjs-input-text-align));\n\n        cursor: var(--tjs-input-number-cursor, var(--tjs-input-cursor, var(--tjs-cursor-text, text)));\n\n        outline: var(--tjs-input-text-outline, var(--tjs-input-outline));\n        outline-offset: var(--tjs-input-text-outline-offset, var(--tjs-input-outline-offset));\n        transition: var(--tjs-input-text-transition, var(--tjs-input-transition));\n\n        transform: translateZ(1px);\n    }\n\n    input:disabled {\n       border: var(--tjs-input-number-border-disabled, var(--tjs-input-border-disabled, none));\n       color: var(--tjs-input-number-color-disabled, var(--tjs-input-color-disabled, revert));\n       cursor: var(--tjs-input-number-cursor-disabled, var(--tjs-input-cursor-disabled, var(--tjs-cursor-default, default)));\n       pointer-events: none;\n    }\n\n    input:focus {\n        box-shadow: var(--tjs-input-number-box-shadow-focus, var(--tjs-input-box-shadow-focus, unset));\n        color: var(--tjs-input-number-color-focus, var(--tjs-input-color-focus, inherit));\n        outline: var(--tjs-input-text-outline-focus, var(--tjs-input-outline-focus));\n        outline-offset: var(--tjs-input-text-outline-offset-focus, var(--tjs-input-outline-offset-focus));\n    }\n\n    input::placeholder {\n        color: var(--tjs-input-number-placeholder-color, var(--tjs-input-placeholder-color, inherit));\n    }\n\n    /* For Webkit */\n    input::-webkit-inner-spin-button {\n        appearance: var(--tjs-input-number-webkit-inner-spin-button-appearance, inherit);\n        opacity: var(--tjs-input-number-webkit-inner-spin-button-opacity, inherit);\n    }\n\n    input::-webkit-outer-spin-button {\n        appearance: var(--tjs-input-number-webkit-outer-spin-button-appearance, inherit);\n        opacity: var(--tjs-input-number-webkit-outer-spin-button-opacity, inherit);\n    }\n\n    /* `localOptions` support classes ------------------------------------------------------------------------------- */\n\n    /* `localOptions.innerSpinButton` true */\n    input.inner-spin-button {\n       --tjs-input-number-appearance: auto;\n       --tjs-input-number-webkit-inner-spin-button-appearance: auto;\n    }\n</style>\n","<script>\n   /**\n    * ### CSS Variables:\n    * ```\n    * --tjs-input-appearance\n    * --tjs-input-background\n    * --tjs-input-border\n    * --tjs-input-border-radius\n    * --tjs-input-border-disabled\n    * --tjs-input-box-shadow-focus\n    * --tjs-input-box-shadow-focus-visible\n    * --tjs-input-caret-color\n    * --tjs-input-color\n    * --tjs-input-color-disabled\n    * --tjs-input-cursor\n    * --tjs-input-cursor-disabled\n    * --tjs-input-flex\n    * --tjs-input-font-family\n    * --tjs-input-font-size\n    * --tjs-input-height\n    * --tjs-input-line-height\n    * --tjs-input-padding\n    * --tjs-input-placeholder-color\n    * --tjs-input-outline-focus-visible\n    * --tjs-input-outline-offset\n    * --tjs-input-overflow\n    * --tjs-input-range-align\n    * --tjs-input-transition-focus-visible\n    * --tjs-input-value-invalid-color\n    * --tjs-input-width\n    *\n    * --tjs-input-range-appearance\n    * --tjs-input-range-background\n    * --tjs-input-range-border\n    * --tjs-input-range-border-radius\n    * --tjs-input-range-border-disabled\n    * --tjs-input-range-box-shadow-focus\n    * --tjs-input-range-box-shadow-focus-visible\n    * --tjs-input-range-caret-color\n    * --tjs-input-range-color\n    * --tjs-input-range-color-disabled\n    * --tjs-input-range-cursor\n    * --tjs-input-range-cursor-disabled\n    * --tjs-input-range-flex\n    * --tjs-input-range-font-family\n    * --tjs-input-range-font-size\n    * --tjs-input-range-height\n    * --tjs-input-range-line-height\n    * --tjs-input-range-outline-focus-visible\n    * --tjs-input-range-outline-offset\n    * --tjs-input-range-overflow\n    * --tjs-input-range-padding\n    * --tjs-input-range-placeholder-color\n    * --tjs-input-range-slider-track-box-shadow\n    * --tjs-input-range-slider-track-box-shadow-focus\n    * --tjs-input-range-text-align\n    * --tjs-input-range-slider-thumb-box-shadow\n    * --tjs-input-range-slider-thumb-box-shadow-focus\n    * --tjs-input-range-transition-focus-visible\n    * --tjs-input-range-value-invalid-color\n    * --tjs-input-range-width\n    * ```\n    * @componentDocumentation\n    */\n   import { writable }                 from 'svelte/store';\n\n   import { applyStyles }              from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { isMinimalWritableStore }   from '@typhonjs-fvtt/runtime/svelte/store/util';\n   import { isObject }                 from '@typhonjs-fvtt/runtime/util/object';\n   import { CrossWindow }              from '@typhonjs-fvtt/runtime/util/browser';\n\n   import {\n      TJSSlotLabel,\n      TJSSlotLabelUtil }               from '@typhonjs-fvtt/standard/component/label';\n\n   export let input = void 0;\n\n   export let enabled = void 0;\n   export let label = void 0;\n   export let options = void 0;\n   export let max = void 0;\n   export let min = void 0;\n   export let readonly = void 0;\n   export let step = void 0;\n   export let store = void 0;\n   export let styles = void 0;\n\n   export let efx = void 0;\n\n   const localOptions = {\n      blurOnEnterKey: true,\n      blurOnEscKey: false,\n      cancelOnEscKey: false\n   }\n\n   /** @type {HTMLElement} */\n   let inputEl;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: enabled = isObject(input) && typeof input.enabled === 'boolean' ? input.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: label = isObject(input) && TJSSlotLabelUtil.isValid(input.label) ? input.label :\n    TJSSlotLabelUtil.isValid(label) ? label : void 0;\n\n   $: max = isObject(input) && typeof input.max === 'number' ? input.max :\n    typeof max === 'number' ? max : 100;\n\n   $: min = isObject(input) && typeof input.min === 'number' ? input.min :\n    typeof min === 'number' ? min : 0;\n\n   $: {\n      options = isObject(input) && isObject(input.options) ? input.options :\n       isObject(options) ? options : {};\n\n      if (typeof options?.blurOnEnterKey === 'boolean') { localOptions.blurOnEnterKey = options.blurOnEnterKey; }\n      if (typeof options?.blurOnEscKey === 'boolean') { localOptions.blurOnEscKey = options.blurOnEscKey; }\n      if (typeof options?.cancelOnEscKey === 'boolean') { localOptions.cancelOnEscKey = options.cancelOnEscKey; }\n   }\n\n   $: readonly = isObject(input) && typeof input.readonly === 'boolean' ? input.readonly :\n    typeof readonly === 'boolean' ? readonly : false;\n\n   $: step = isObject(input) && typeof input.step === 'number' ? input.step :\n    typeof step === 'number' ? step : 1;\n\n   $: store = isObject(input) && isMinimalWritableStore(input.store) ? input.store :\n    isMinimalWritableStore(store) ? store : writable(void 0);\n\n   $: styles = isObject(input) && isObject(input.styles) ? input.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: efx = isObject(input) && typeof input.efx === 'function' ? input.efx :\n    typeof efx === 'function' ? efx : () => {};\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /** @type {number} */\n   let initialValue;\n\n   /**\n    * Tracks the captured initial `pointerdown` time when `cancelOnEscKey` is active to prevent the subsequent `focusin`\n    * event from storing the initial new value.\n    */\n   let initialPointerdownTime = 0;\n\n   /**\n    * Handle the case when keyboard navigation focuses the input element. Avoid setting initial value again based on\n    * timing from `onPointerdown`.\n    */\n   function onFocusin()\n   {\n      const focusTime = performance.now();\n\n      if (focusTime - initialPointerdownTime < 100) { return; }\n\n      initialValue = localOptions.cancelOnEscKey ? globalThis.parseFloat(inputEl.value) : void 0;\n   }\n\n   /**\n    * Handle various key options.\n    *\n    * @param {KeyboardEvent} event -\n    */\n   function onKeydown(event)\n   {\n      if (localOptions.blurOnEnterKey && event.code === 'Enter')\n      {\n         event.preventDefault();\n         event.stopPropagation();\n\n         initialValue = void 0;\n\n         inputEl.blur();\n         return;\n      }\n\n      if (event.code === 'Escape')\n      {\n         if (localOptions.cancelOnEscKey && typeof initialValue === 'number')\n         {\n            store.set(initialValue);\n         }\n\n         if (localOptions.blurOnEscKey)\n         {\n            event.preventDefault();\n            event.stopPropagation();\n\n            initialValue = void 0;\n            inputEl.blur();\n         }\n      }\n   }\n\n   /**\n    * When `cancelOnEscKey` is active capture the initial value before it changes and store current time to\n    * avoid taking the initial value after focus.\n    *\n    * @param {PointerEvent} event -\n    */\n   function onPointerdown(event)\n   {\n      if (localOptions.cancelOnEscKey && inputEl !== CrossWindow.getActiveElement(event))\n      {\n         initialValue = globalThis.parseFloat(inputEl.value);\n         initialPointerdownTime = performance.now();\n      }\n   }\n</script>\n\n<TJSSlotLabel {label} {enabled}>\n   <div class=tjs-input-container use:efx use:applyStyles={styles} on:pointerdown>\n      <input class=tjs-input\n             type=range\n             bind:this={inputEl}\n             bind:value={$store}\n             disabled={!enabled}\n             {min}\n             {max}\n             {readonly}\n             {step}\n             on:focusin={onFocusin}\n             on:keydown={onKeydown}\n             on:pointerdown|capture={onPointerdown}\n      />\n   </div>\n</TJSSlotLabel>\n\n<style>\n    .tjs-input-container {\n        display: block;\n        pointer-events: none;\n        transform-style: preserve-3d;\n\n        background: var(--tjs-input-range-background);\n        border-radius: var(--tjs-input-range-border-radius, var(--tjs-input-border-radius));\n        flex: var(--tjs-input-range-flex, var(--tjs-input-flex));\n        margin: var(--tjs-input-range-margin, var(--tjs-input-margin));\n        height: var(--tjs-input-range-height, var(--tjs-input-height));\n        width: var(--tjs-input-range-width, var(--tjs-input-width));\n    }\n\n    input {\n        pointer-events: initial;\n        display: inline-block;\n        position: relative;\n\n        appearance: var(--tjs-input-range-appearance, var(--tjs-input-appearance, unset));\n\n        background: transparent;\n\n        border: var(--tjs-input-range-border, var(--tjs-input-border));\n        border-radius: var(--tjs-input-range-border-radius, var(--tjs-input-border-radius));\n\n        width: 100%;\n        height: 100%;\n\n        padding: var(--tjs-input-range-padding, var(--tjs-input-padding, initial));\n\n        color: var(--tjs-input-range-color, var(--tjs-input-color, inherit));\n        caret-color: var(--tjs-input-range-caret-color, var(--tjs-input-caret-color));\n        font-family: var(--tjs-input-range-font-family, var(--tjs-input-font-family, inherit));\n        font-size: var(--tjs-input-range-font-size, var(--tjs-input-font-size, inherit));\n        line-height: var(--tjs-input-range-line-height, var(--tjs-input-line-height, inherit));\n        outline-offset: var(--tjs-input-range-outline-offset, var(--tjs-input-outline-offset));\n        text-align: var(--tjs-input-range-text-align, var(--tjs-input-range-align));\n\n        cursor: var(--tjs-input-range-cursor, var(--tjs-input-cursor, var(--tjs-cursor-pointer, pointer)));\n\n        transform: translateZ(1px);\n    }\n\n    input:disabled {\n       border: var(--tjs-input-range-border-disabled, var(--tjs-input-border-disabled, none));\n       color: var(--tjs-input-range-color-disabled, var(--tjs-input-color-disabled, revert));\n       cursor: var(--tjs-input-range-cursor-disabled, var(--tjs-input-cursor-disabled, var(--tjs-cursor-default, default)));\n       filter: var(--tjs-input-range-filter-disabled, var(--tjs-input-filter-disabled, grayscale(100%) contrast(20%) brightness(140%)));\n       pointer-events: none;\n    }\n\n    input::-webkit-slider-runnable-track {\n       box-shadow: var(--tjs-input-range-slider-track-box-shadow, revert);\n    }\n\n    input::-webkit-slider-thumb {\n       box-shadow: var(--tjs-input-range-slider-thumb-box-shadow, revert);\n    }\n\n    input:focus {\n       box-shadow: var(--tjs-input-range-box-shadow-focus, var(--tjs-input-box-shadow-focus, unset));\n       color: var(--tjs-input-range-color-focus, var(--tjs-input-color-focus, inherit));\n    }\n\n    input:focus::-webkit-slider-runnable-track {\n       box-shadow: var(--tjs-input-range-slider-track-box-shadow-focus, revert);\n    }\n\n    input:focus::-webkit-slider-thumb {\n       box-shadow: var(--tjs-input-range-slider-thumb-box-shadow-focus, revert);\n    }\n\n    input:focus-visible {\n        box-shadow: var(--tjs-input-range-box-shadow-focus-visible, var(--tjs-input-box-shadow-focus-visible, unset));\n        outline: var(--tjs-input-range-outline-focus-visible, var(--tjs-input-outline-focus-visible));\n        transition: var(--tjs-input-range-transition-focus-visible, var(--tjs-input-transition-focus-visible));\n    }\n\n    input::placeholder {\n        color: var(--tjs-input-range-placeholder-color, var(--tjs-input-placeholder-color, inherit));\n    }\n</style>\n","<script>\n   /**\n    * Provides a combined {@link TJSInputRange} / {@link TJSInputNumber} component with a single slotted label wrapper.\n    * This is a convenience component enabling easy hook up of a range + number input from the same data source.\n    *\n    * There is no explicit layout defined. The `input` data is forwarded on to both range / number components with\n    * the exception that `readonly` only applies to the number input.\n    *\n    * Note: The `efx` animation action applies to both the range / number inputs.\n    *\n    * @componentDocumentation\n    */\n   import { writable }                 from 'svelte/store';\n\n   import { isMinimalWritableStore }   from '@typhonjs-fvtt/runtime/svelte/store/util';\n   import { isObject }                 from '@typhonjs-fvtt/runtime/util/object';\n\n   import {\n      TJSSlotLabel,\n      TJSSlotLabelUtil }               from '@typhonjs-fvtt/standard/component/label';\n\n   import TJSInputNumber               from './TJSInputNumber.svelte';\n   import TJSInputRange                from './TJSInputRange.svelte';\n\n   export let input = void 0;\n\n   export let enabled = void 0;\n   export let label = void 0;\n   export let options = void 0;\n   export let max = void 0;\n   export let min = void 0;\n   export let readonly = void 0;\n   export let step = void 0;\n   export let store = void 0;\n   export let styles = void 0;\n\n   export let efxRange = void 0;\n   export let efxNumber = void 0;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: enabled = isObject(input) && typeof input.enabled === 'boolean' ? input.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: label = isObject(input) && TJSSlotLabelUtil.isValid(input.label) ? input.label :\n    TJSSlotLabelUtil.isValid(label) ? label : void 0;\n\n   $: max = isObject(input) && typeof input.max === 'number' ? input.max :\n    typeof max === 'number' ? max : 100;\n\n   $: min = isObject(input) && typeof input.min === 'number' ? input.min :\n    typeof min === 'number' ? min : 0;\n\n   $: options = isObject(input) && isObject(input.options) ? input.options : isObject(options) ? options : {};\n\n   $: readonly = isObject(input) && typeof input.readonly === 'boolean' ? input.readonly :\n    typeof readonly === 'boolean' ? readonly : false;\n\n   $: step = isObject(input) && typeof input.step === 'number' ? input.step :\n    typeof step === 'number' ? step : 1;\n\n   $: store = isObject(input) && isMinimalWritableStore(input.store) ? input.store :\n    isMinimalWritableStore(store) ? store : writable(void 0);\n\n   $: styles = isObject(input) && isObject(input.styles) ? input.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: efxNumber = isObject(input) && typeof input.efxNumber === 'function' ? input.efxNumber :\n    typeof efxNumber === 'function' ? efxNumber : () => {};\n\n   $: efxRange = isObject(input) && typeof input.efxRange === 'function' ? input.efxRange :\n    typeof efxRange === 'function' ? efxRange : () => {};\n</script>\n\n<TJSSlotLabel {label} {enabled}>\n   <TJSInputRange label={false} {enabled} efx={efxRange} {max} {min} {options} {step} {store} {styles} />\n   <TJSInputNumber label={false} {enabled} efx={efxNumber} {max} {min} {options} {readonly} {step} {store} {styles} />\n</TJSSlotLabel>\n","<script>\n   /**\n    * A generic input type has issues w/ 2-way binding w/ Svelte.\n    * https://github.com/sveltejs/svelte/issues/3921\n    *\n    * A \"hack\" is used to set the type on the input element: `{...{ type }}`\n    *\n    * Only use this component for text inputs presently. More work to come.\n    *\n    * ### CSS Variables:\n    * ```\n    * --tjs-input-appearance\n    * --tjs-input-background\n    * --tjs-input-border\n    * --tjs-input-border-radius\n    * --tjs-input-border-disabled\n    * --tjs-input-box-shadow-focus\n    * --tjs-input-box-shadow-focus-visible\n    * --tjs-input-caret-color\n    * --tjs-input-color\n    * --tjs-input-color-disabled\n    * --tjs-input-cursor\n    * --tjs-input-cursor-disabled\n    * --tjs-input-flex\n    * --tjs-input-font-family\n    * --tjs-input-font-size\n    * --tjs-input-height\n    * --tjs-input-line-height\n    * --tjs-input-padding\n    * --tjs-input-placeholder-color\n    * --tjs-input-outline-focus-visible\n    * --tjs-input-outline-offset\n    * --tjs-input-overflow\n    * --tjs-input-text-align\n    * --tjs-input-transition-focus-visible\n    * --tjs-input-value-invalid-color\n    * --tjs-input-width\n    *\n    * --tjs-input-text-appearance\n    * --tjs-input-text-background\n    * --tjs-input-text-border\n    * --tjs-input-text-border-radius\n    * --tjs-input-text-border-disabled\n    * --tjs-input-text-box-shadow-focus\n    * --tjs-input-text-box-shadow-focus-visible\n    * --tjs-input-text-caret-color\n    * --tjs-input-text-color\n    * --tjs-input-text-color-disabled\n    * --tjs-input-text-cursor\n    * --tjs-input-text-cursor-disabled\n    * --tjs-input-text-flex\n    * --tjs-input-text-font-family\n    * --tjs-input-text-font-size\n    * --tjs-input-text-height\n    * --tjs-input-text-line-height\n    * --tjs-input-text-outline-focus-visible\n    * --tjs-input-text-outline-offset\n    * --tjs-input-text-overflow\n    * --tjs-input-text-padding\n    * --tjs-input-text-placeholder-color\n    * --tjs-input-text-text-align\n    * --tjs-input-text-transition-focus-visible\n    * --tjs-input-text-value-invalid-color\n    * --tjs-input-text-width\n    * ```\n    * @componentDocumentation\n    */\n   import { writable }        from 'svelte/store';\n\n   import { applyStyles }     from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n\n   import {\n      isMinimalWritableStore,\n      isReadableStore }       from '@typhonjs-fvtt/runtime/svelte/store/util';\n\n   import { localize }        from '@typhonjs-fvtt/runtime/util/i18n';\n   import { isObject }        from '@typhonjs-fvtt/runtime/util/object';\n\n   import {\n      TJSSlotLabel,\n      TJSSlotLabelUtil }      from '@typhonjs-fvtt/standard/component/label';\n\n   export let input = void 0;\n\n   export let enabled = void 0;\n   export let label = void 0;\n   export let options = void 0;\n   export let placeholder = void 0;\n   export let readonly = void 0;\n   export let store = void 0;\n   export let storeIsValid = void 0;\n   export let styles = void 0;\n   export let type = void 0;\n\n   export let efx = void 0;\n\n   const localOptions = {\n      blurOnEnterKey: true,\n      blurOnEscKey: false,\n      cancelOnEscKey: false,\n      clearOnEscKey: false\n   }\n\n   let inputEl;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: {\n      type = isObject(input) && typeof input.type === 'string' ? input.type :\n       typeof type === 'string' ? type : 'text';\n\n      switch (type)\n      {\n         case 'email':\n         case 'password':\n         case 'search':\n         case 'text':\n         case 'url':\n            break;\n\n         default:\n            throw new Error(\n             `'TJSInputText only supports text input types: 'email', 'password', 'search', 'text', 'url'.`);\n      }\n   }\n\n   $: enabled = isObject(input) && typeof input.enabled === 'boolean' ? input.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n\n   $: label = isObject(input) && TJSSlotLabelUtil.isValid(input.label) ? input.label :\n    TJSSlotLabelUtil.isValid(label) ? label : void 0;\n\n   $: {\n      options = isObject(input) && isObject(input.options) ? input.options :\n       isObject(options) ? options : {};\n\n      if (typeof options?.blurOnEnterKey === 'boolean') { localOptions.blurOnEnterKey = options.blurOnEnterKey; }\n      if (typeof options?.blurOnEscKey === 'boolean') { localOptions.blurOnEscKey = options.blurOnEscKey; }\n      if (typeof options?.cancelOnEscKey === 'boolean') { localOptions.cancelOnEscKey = options.cancelOnEscKey; }\n      if (typeof options?.clearOnEscKey === 'boolean') { localOptions.clearOnEscKey = options.clearOnEscKey; }\n   }\n\n   $: placeholder = isObject(input) && typeof input.placeholder === 'string' ? localize(input.placeholder) :\n    typeof placeholder === 'string' ? localize(placeholder) : void 0;\n\n   $: readonly = isObject(input) && typeof input.readonly === 'boolean' ? input.readonly :\n    typeof readonly === 'boolean' ? readonly : false;\n\n   $: store = isObject(input) && isMinimalWritableStore(input.store) ? input.store :\n    isMinimalWritableStore(store) ? store : writable(void 0);\n\n   $: storeIsValid = isObject(input) && isReadableStore(input.storeIsValid) ? input.storeIsValid :\n    isReadableStore(storeIsValid) ? storeIsValid : writable(true);\n\n   $: styles = isObject(input) && isObject(input.styles) ? input.styles :\n    isObject(styles) ? styles : void 0;\n\n   $: efx = isObject(input) && typeof input.efx === 'function' ? input.efx :\n    typeof efx === 'function' ? efx : () => {};\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   let initialValue;\n\n   /**\n    * Store initial value when `cancelOnEscKey` is enabled.\n    */\n   function onFocusin()\n   {\n      initialValue = localOptions.cancelOnEscKey ? inputEl.value : void 0;\n   }\n\n   /**\n    * Blur input on enter key down.\n    *\n    * @param {KeyboardEvent} event -\n    */\n   function onKeydown(event)\n   {\n      if (localOptions.blurOnEnterKey && event.code === 'Enter')\n      {\n         event.preventDefault();\n         event.stopPropagation();\n\n         initialValue = void 0;\n\n         inputEl.blur();\n         return;\n      }\n\n      if (event.code === 'Escape')\n      {\n         if (localOptions.cancelOnEscKey && typeof initialValue === 'string')\n         {\n            store.set(initialValue);\n         }\n         else if (localOptions.clearOnEscKey)\n         {\n            store.set('');\n\n            initialValue = '';\n         }\n\n         if (localOptions.blurOnEscKey)\n         {\n            event.preventDefault();\n            event.stopPropagation();\n\n            initialValue = void 0;\n            inputEl.blur();\n         }\n      }\n   }\n</script>\n\n<TJSSlotLabel {label} {enabled}>\n   <div class=tjs-input-container use:efx use:applyStyles={styles} on:pointerdown>\n      <input class=tjs-input\n             {...{ type }}\n             bind:this={inputEl}\n             bind:value={$store}\n             class:is-value-invalid={!$storeIsValid}\n             disabled={!enabled}\n             {placeholder}\n             {readonly}\n             on:focusin={onFocusin}\n             on:keydown={onKeydown}\n      />\n   </div>\n</TJSSlotLabel>\n\n<style>\n    .tjs-input-container {\n        display: block;\n        pointer-events: none;\n        transform-style: preserve-3d;\n\n        background: var(--tjs-input-text-background, var(--tjs-input-background));\n        border-radius: var(--tjs-input-text-border-radius, var(--tjs-input-border-radius));\n        flex: var(--tjs-input-text-flex, var(--tjs-input-flex));\n        margin: var(--tjs-input-text-margin, var(--tjs-input-margin));\n        height: var(--tjs-input-text-height, var(--tjs-input-height));\n        width: var(--tjs-input-text-width, var(--tjs-input-width));\n    }\n\n    .is-value-invalid {\n        color: var(--tjs-input-text-value-invalid-color, var(--tjs-input-value-invalid-color, red));\n    }\n\n    input {\n        pointer-events: initial;\n        display: inline-block;\n        position: relative;\n\n        appearance: var(--tjs-input-text-appearance, var(--tjs-input-appearance, auto));\n\n        background: transparent;\n\n        border: var(--tjs-input-text-border, var(--tjs-input-border));\n        border-radius: var(--tjs-input-text-border-radius, var(--tjs-input-border-radius));\n\n        width: 100%;\n        height: 100%;\n\n        padding: var(--tjs-input-text-padding, var(--tjs-input-padding, initial));\n\n        color: var(--tjs-input-text-color, var(--tjs-input-color, inherit));\n        caret-color: var(--tjs-input-text-caret-color, var(--tjs-input-caret-color));\n        font-family: var(--tjs-input-text-font-family, var(--tjs-input-font-family, inherit));\n        font-size: var(--tjs-input-text-font-size, var(--tjs-input-font-size, inherit));\n        line-height: var(--tjs-input-text-line-height, var(--tjs-input-line-height, inherit));\n        text-align: var(--tjs-input-text-text-align, var(--tjs-input-text-align));\n\n        cursor: var(--tjs-input-text-cursor, var(--tjs-input-cursor, var(--tjs-cursor-text, text)));\n\n        transform: translateZ(1px);\n\n        outline: var(--tjs-input-text-outline, var(--tjs-input-outline));\n        outline-offset: var(--tjs-input-text-outline-offset, var(--tjs-input-outline-offset));\n        transition: var(--tjs-input-text-transition, var(--tjs-input-transition));\n    }\n\n    input:disabled {\n       border: var(--tjs-input-text-border-disabled, var(--tjs-input-border-disabled, none));\n       color: var(--tjs-input-text-color-disabled, var(--tjs-input-color-disabled, revert));\n       cursor: var(--tjs-input-text-cursor-disabled, var(--tjs-input-cursor-disabled, var(--tjs-cursor-default, default)));\n       pointer-events: none;\n    }\n\n    input:focus {\n        box-shadow: var(--tjs-input-text-box-shadow-focus, var(--tjs-input-box-shadow-focus, unset));\n        color: var(--tjs-input-text-color-focus, var(--tjs-input-color-focus, inherit));\n        outline: var(--tjs-input-text-outline-focus, var(--tjs-input-outline-focus));\n        outline-offset: var(--tjs-input-text-outline-offset-focus, var(--tjs-input-outline-offset-focus));\n    }\n\n    input::placeholder {\n        color: var(--tjs-input-text-placeholder-color, var(--tjs-input-placeholder-color, inherit));\n    }\n</style>\n","<script>\n   /**\n    * ### CSS Variables\n    * ```\n    * --tjs-input-appearance\n    * --tjs-input-background\n    * --tjs-input-border\n    * --tjs-input-border-radius\n    * --tjs-input-border-disabled\n    * --tjs-input-box-shadow-focus\n    * --tjs-input-box-shadow-focus-visible\n    * --tjs-input-color\n    * --tjs-input-color-disabled\n    * --tjs-input-cursor\n    * --tjs-input-cursor-disabled\n    * --tjs-input-flex\n    * --tjs-input-font-family\n    * --tjs-input-font-size\n    * --tjs-input-height\n    * --tjs-input-line-height\n    * --tjs-input-outline-focus-visible\n    * --tjs-input-outline-offset\n    * --tjs-input-overflow\n    * --tjs-input-text-overflow\n    * --tjs-input-transition-focus-visible\n    * --tjs-input-width\n    *\n    * --tjs-select-appearance\n    * --tjs-select-background\n    * --tjs-select-border\n    * --tjs-select-border-radius\n    * --tjs-select-border-disabled\n    * --tjs-select-box-shadow-focus\n    * --tjs-select-box-shadow-focus-visible\n    * --tjs-select-color\n    * --tjs-select-color-disabled\n    * --tjs-select-cursor\n    * --tjs-select-cursor-disabled\n    * --tjs-select-flex\n    * --tjs-select-font-family\n    * --tjs-select-font-size\n    * --tjs-select-height\n    * --tjs-select-line-height\n    * --tjs-select-outline-focus-visible\n    * --tjs-select-outline-offset\n    * --tjs-select-overflow\n    * --tjs-select-text-overflow\n    * --tjs-select-transition-focus-visible\n    * --tjs-select-width\n    *\n    * --tjs-select-option-background; fallback: --tjs-default-popup-background; default: #23221d\n    * --tjs-select-option-color; fallback: --tjs-default-popup-primary-color; default: #b5b3a4\n    * ```\n    * @componentDocumentation\n    */\n\n   /**\n    * Note: A Svelte reactivity bug / issue is worked around below. Due to the several reactive statements over handling\n    * props when binding the store directly to the select element the #each block of options causes the compiler to\n    * incorrectly invalidate / run the reactive statements again for `options` and `select` on any changes to the select\n    * element. Running the `select` reactive statements causes the store statement to be run again causing the store to\n    * be unsubscribed and subscribed to. Technically this isn't a problem, but the workaround solution of using an\n    * on:change instead of bind in this instance fixes it.\n    *\n    * @see https://github.com/sveltejs/svelte/issues/4933\n    * @see https://dev.to/isaachagoel/svelte-reactivity-gotchas-solutions-if-you-re-using-svelte-in-production-you-should-read-this-3oj3\n    */\n\n   import { onMount }                  from 'svelte';\n   import { writable }                 from 'svelte/store';\n\n   import { applyStyles }              from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n   import { isMinimalWritableStore }   from '@typhonjs-fvtt/runtime/svelte/store/util';\n   import { localize }                 from '@typhonjs-fvtt/runtime/util/i18n';\n   import { isObject }                 from '@typhonjs-fvtt/runtime/util/object';\n\n   import {\n      TJSSlotLabel,\n      TJSSlotLabelUtil }               from '@typhonjs-fvtt/standard/component/label';\n\n   export let select = void 0;\n\n   export let enabled = void 0;\n   export let label = void 0;\n   export let selected = void 0;\n   export let options = void 0;\n   export let store = void 0;\n   export let styles = void 0;\n\n   export let efx = void 0;\n\n   const s_DEFAULT_EFX = () => {};\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   $: enabled = isObject(select) && typeof select.enabled === 'boolean' ? select.enabled :\n    typeof enabled === 'boolean' ? enabled : true;\n   $: label = isObject(select) && TJSSlotLabelUtil.isValid(select.label) ? select.label :\n    TJSSlotLabelUtil.isValid(label) ? label : void 0;\n   $: selected = isObject(select) && typeof select.selected === 'string' ? select.selected :\n    typeof selected === 'string' ? selected : void 0;\n   $: options = isObject(select) && Array.isArray(select.options) ? select.options :\n    Array.isArray(options) ? options : [];\n   $: store = isObject(select) && isMinimalWritableStore(select.store) ? select.store :\n    isMinimalWritableStore(store) ? store : writable(void 0);\n   $: styles = isObject(select) && isObject(select.styles) ? select.styles :\n    isObject(styles) ? styles : void 0;\n   $: efx = isObject(select) && typeof select.efx === 'function' ? select.efx :\n    typeof efx === 'function' ? efx : s_DEFAULT_EFX;\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   onMount(() =>\n   {\n      // On mount verify that the current store value is included in options otherwise check the `selected` value if set\n      // and if this initial value is in the list of options then set it as the default option.\n      if (selected && store && !options.includes($store) && options.includes(selected)) { store.set(selected); }\n   });\n</script>\n\n<TJSSlotLabel {label} {enabled}>\n   <div on:change class=tjs-select-container use:efx use:applyStyles={styles} on:pointerdown>\n      <!-- Please see note at top / above on why on:change is used over `bind:value={$store}`. -->\n      <select on:change\n              class=tjs-select\n              class:has-efx={efx !== s_DEFAULT_EFX}\n              bind:value={$store}\n              disabled={!enabled}>\n         {#each options as option}\n            <option class=tjs-select-option value={option.value}>\n               {localize(option.label ?? option.value)}\n            </option>\n         {/each}\n      </select>\n   </div>\n</TJSSlotLabel>\n\n<style>\n   .tjs-select-container {\n      pointer-events: none;\n      display: block;\n      transform-style: preserve-3d;\n\n      background: var(--tjs-select-background, var(--tjs-input-background));\n      border-radius: var(--tjs-select-border-radius, var(--tjs-input-border-radius));\n      flex: var(--tjs-select-flex, var(--tjs-input-flex));\n      margin: var(--tjs-select-margin, var(--tjs-input-margin));\n      height: var(--tjs-select-height, var(--tjs-input-height));\n      width: var(--tjs-select-width, var(--tjs-input-width));\n   }\n\n   select {\n      pointer-events: initial;\n      display: inline-block;\n      position: relative;\n\n      appearance: var(--tjs-select-appearance, var(--tjs-input-appearance, auto));\n\n      background: transparent;\n\n      border: var(--tjs-select-border, var(--tjs-input-border));\n      border-radius: var(--tjs-select-border-radius, var(--tjs-input-border-radius));\n\n      width: 100%;\n      height: 100%;\n\n      padding: var(--tjs-select-padding, var(--tjs-input-padding, initial));\n\n      color: var(--tjs-select-color, var(--tjs-input-color, inherit));\n      font-family: var(--tjs-select-font-family, var(--tjs-input-font-family, inherit));\n      font-size: var(--tjs-select-font-size, var(--tjs-input-font-size, inherit));\n      line-height: var(--tjs-select-line-height, var(--tjs-input-line-height, inherit));\n      text-align: var(--tjs-select-text-align, var(--tjs-input-text-align));\n      text-overflow: var(--tjs-select-text-overflow, var(--tjs-input-text-overflow, ellipsis));\n\n      cursor: var(--tjs-select-cursor, var(--tjs-input-cursor, var(--tjs-cursor-pointer, pointer)));\n\n      transform: translateZ(1px);\n\n      outline: var(--tjs-select-outline, var(--tjs-input-outline));\n      outline-offset: var(--tjs-select-outline-offset, var(--tjs-input-outline-offset));\n      transition: var(--tjs-select-transition, var(--tjs-input-transition));\n   }\n\n   /* Special case for Firefox. When no `efx` are applied set select background so that options are styled correct. */\n   select:not(.has-efx) {\n      background: var(--tjs-select-background, var(--tjs-input-background));\n   }\n\n   select option {\n      background: var(--tjs-select-option-background, var(--tjs-select-background, var(--tjs-input-background)));\n      color: var(--tjs-select-option-color, inherit);\n      font-family: var(--tjs-select-option-font-family, inherit);\n   }\n\n   select:disabled {\n      color: var(--tjs-select-color-disabled, var(--tjs-input-color-disabled, revert));\n      cursor: var(--tjs-select-cursor-disabled, var(--tjs-input-cursor-disabled, var(--tjs-cursor-default, default)));\n      pointer-events: none;\n   }\n\n   select:focus {\n      box-shadow: var(--tjs-select-box-shadow-focus, var(--tjs-input-box-shadow-focus, unset));\n      color: var(--tjs-select-color-focus, var(--tjs-input-color-focus, inherit));\n      outline: var(--tjs-select-outline-focus, var(--tjs-input-outline-focus));\n      outline-offset: var(--tjs-select-outline-offset-focus, var(--tjs-input-outline-offset-focus));\n   }\n</style>\n","<script>\n   /**\n    * Provides a generic \"input\" component that creates the specific input component based on 'type'. If no `type`\n    * property is available in the input object `text` is the default.\n    *\n    * You may optionally define a label either as `input.label` or through the `label` prop as a string. The label\n    * element uses `display: contents` which ignores the label element and lays out the children as if the\n    * label element does not exist which is perfect for a grid layout.\n    *\n    * The available `type` props include:\n    * ```\n    * - `button`: A standard button.\n    * - `checkbox`: A checkbox input.\n    * - `number`: A number input.\n    * - `range`: A range input.\n    * - `range-number`: A range + number input.\n    * - `select`: A select input.\n    *\n    * The following types are forwarded onto a standard text input: `email`, `password`, `search`, `text`, `url`.\n    * ```\n    *\n    * ### CSS Variables\n    *\n    * The following CSS variables control the associated styles with the default values:\n    * ```\n    * --tjs-input-label-display - content\n    * --tjs-input-label-text-align - right\n    * --tjs-input-label-white-space - nowrap\n    * ```\n    * @componentDocumentation\n    */\n\n   import { isObject }     from '@typhonjs-fvtt/runtime/util/object';\n\n   import TJSButton           from '../button/TJSButton.svelte';\n\n   import TJSInputCheckbox    from './TJSInputCheckbox.svelte';\n   import TJSInputNumber      from './TJSInputNumber.svelte';\n   import TJSInputRange       from './TJSInputRange.svelte';\n   import TJSInputRangeNumber from './TJSInputRangeNumber.svelte';\n   import TJSInputText        from './TJSInputText.svelte';\n\n   import TJSSelect           from '../select/TJSSelect.svelte';\n\n   export let input = void 0;\n\n   export let type = void 0;\n\n   let component;\n\n   let passedProps = {};\n\n   $: {\n      // Some components need to reassign `input` to another prop name. Warnings are only generated w/ the Vite dev server.\n      passedProps = Object.assign({}, $$props);\n\n      // Remove the `type` prop used locally.\n      delete passedProps.type;\n\n      type = isObject(input) && typeof input.type === 'string' ? input.type :\n       typeof type === 'string' ? type : 'text';\n\n      switch (type)\n      {\n         case 'button':\n            // Reassign prop `input` to `button`.\n            passedProps.button = input;\n            delete passedProps.input;\n\n            component = TJSButton;\n            break;\n\n         case 'checkbox':\n            component = TJSInputCheckbox;\n            break;\n\n         case 'number':\n            component = TJSInputNumber;\n            break;\n\n         case 'range':\n            component = TJSInputRange;\n            break;\n\n         case 'range-number':\n            component = TJSInputRangeNumber;\n            break;\n\n         case 'email':\n         case 'password':\n         case 'search':\n         case 'text':\n         case 'url':\n            component = TJSInputText;\n            break;\n\n\n         case 'select':\n            // Reassign prop `input` to `select`.\n            passedProps.select = input;\n            delete passedProps.input;\n\n            component = TJSSelect;\n            break;\n\n         default:\n            throw new Error(`'TJSInput' currently only supports the following input types: 'button', 'checkbox', ` +\n             `'email', 'number', 'password', 'range', 'range-number', 'search', 'select', 'text', and 'url'.`);\n      }\n   }\n</script>\n\n{#if type === 'button'}\n   <svelte:component this={component} on:click on:press on:contextmenu {...passedProps} />\n{:else if type === 'select'}\n   <svelte:component this={component} {...passedProps} />\n{:else}\n   <svelte:component this={component} {...passedProps} />\n{/if}\n\n\n","<script>\n   /**\n    * --tjs-settings-entry-margin - 0 0 1rem 0\n    *\n    * --tjs-settings-entry-label-color - inherit\n    * --tjs-settings-entry-label-font-size - inherit\n    * --tjs-settings-entry-label-line-height - var(--form-field-height) / Foundry variable\n    *\n    * --tjs-settings-entry-hint-color - var(--color-text-dark-secondary) / Foundry variable\n    * --tjs-settings-entry-hint-font-size - var(--font-size-12) / Foundry variable\n    * --tjs-settings-entry-hint-line-height - var(--line-height-16) / Foundry variable\n    * --tjs-settings-entry-hint-margin - 0.5em 0\n    *\n    * @privateRemarks\n    * TODO: replace range input support below w/ TJSInputRange when available.\n    */\n   import { FVTTFilePickerControl } from '@typhonjs-fvtt/standard/application/control/filepicker';\n\n   import { TJSIconButton }         from '@typhonjs-fvtt/standard/component/button';\n\n   import {\n      TJSInput,\n      TJSSelect }                   from '@typhonjs-fvtt/standard/component/form';\n\n   /** @type {object} */\n   export let setting = void 0;\n\n   const store = setting.store;\n\n   async function onFilePicker()\n   {\n      const result = await FVTTFilePickerControl.browse({\n         modal: true,\n         type: setting.filePicker,\n         current: setting.value\n      });\n\n      if (result) { $store = result; }\n   }\n</script>\n\n<section class=tjs-settings-entry>\n    <label for={setting.id}>{setting.name}</label>\n    <div class:checkbox={setting.componentType === 'checkbox'}>\n        {#if setting.componentType === 'checkbox'}\n            <input type=checkbox id={setting.id} bind:checked={$store} />\n        {:else if setting.componentType === 'number'}\n            <TJSInput input={setting.inputData} />\n        {:else if setting.componentType === 'range'}\n            <input type=range id={setting.id} min={setting.range.min} max={setting.range.max} step={setting.range.step} bind:value={$store} />\n            <span class=range-value>{$store}</span>\n        {:else if setting.componentType === 'select'}\n            <TJSSelect select={setting.selectData} />\n        {:else if setting.componentType === 'text'}\n            <TJSInput input={setting.inputData} />\n        {/if}\n        {#if setting.filePicker}\n            <TJSIconButton button={setting.buttonData} on:click={onFilePicker} />\n        {/if}\n    </div>\n    {#if setting.hint}\n        <p class=hint>{setting.hint}</p>\n    {/if}\n</section>\n\n<style>\n    div {\n        display: flex;\n        flex-direction: row;\n        flex-wrap: nowrap;\n        flex: 3;\n        justify-content: flex-end;\n        align-items: center;\n    }\n\n    div.checkbox {\n        flex: 0\n    }\n\n    label {\n        color: var(--tjs-settings-entry-label-color, inherit);\n        font-size: var(--tjs-settings-entry-label-font-size, inherit);\n        line-height: var(--tjs-settings-entry-label-line-height, var(--form-field-height));\n        flex: 2;\n    }\n\n    input[type=range] {\n        margin-left: 0.25em;\n    }\n\n    span.range-value {\n        display: block;\n        flex: 0 1 fit-content;\n        text-align: center;\n        border: var(--tjs-input-border, 1px solid var(--color-border-light-primary));\n        border-radius: var(--tjs-input-border-radius);\n        padding: 0.25em;\n        margin-left: 0.5em;\n    }\n\n    p {\n        flex: 0 0 100%;\n        color: var(--tjs-settings-entry-hint-color, var(--color-text-dark-secondary));\n        font-size: var(--tjs-settings-entry-hint-font-size, var(--font-size-12));\n        line-height: var(--tjs-settings-entry-hint-line-height, var(--line-height-16));\n        margin: var(--tjs-settings-entry-hint-margin, 0.5em 0);\n        min-height: 1rem;\n    }\n\n    section {\n        clear: both;\n        display: flex;\n        flex-direction: row;\n        flex-wrap: wrap;\n        align-items: center;\n    }\n\n    section:not(:last-child) {\n        margin: var(--tjs-settings-entry-margin, 0 0 1rem 0);\n    }\n</style>\n","<script>\n   /**\n    * `TJSSettingsEdit` provides the main Svelte component to display and modify settings registered with\n    * `TJSGameSettingsWithUI`. Refer to the documentation in `TJSGameSettings.register` and\n    * `TJSGameSettings.registerAll`. Adding custom defined sections is accomplished with\n    * `TJSGameSettingsWithUI.uiControl.addSection`. You must pass an instance of `TJSGameSettingsWithUI` as the\n    * `settings` prop.\n    *\n    * Note: to group settings into specific folders instead of a single top level section use the `folder` option when\n    * registering settings with TJSGameSettings. Also, please refer to the extra folder options described by\n    * `TJSGameSettingsWithUI.uiControl.addSection`.\n    *\n    * The other prop `options` is an object instance defined by `TJSSettingsCreateOptions`. This allows you to\n    * associate a `TJSWebStorage` instance that automatically will track open / closed state of any section\n    * folders configured along with the scrolling position of the scrollbar.\n    *\n    * `TJSSettingsEdit` supports two additional named slots `settings-header` and `settings-footer` allowing you to\n    * set Svelte components as a fixed header and / or footer to the main scrollable settings content.\n    *\n    * When `TJSSettingsEdit` is displayed the UI display data is generated from `TJSGameSettingsWithUI.uiControl`\n    * automatically. When the `TJSSettingsEdit` component is destroyed any settings registered for UI display will be\n    * checked for `requiresReload` setting option. If the setting has changed while `TJSSettingsEdit` is displayed a\n    * modal dialog is opened to inform the user that a setting changed that requires reloading.\n    *\n    * If you need an easy to use slotted component that allows swapping from the main slot and `TJSSettingsEdit` please\n    * refer to {@link TJSSettingsSwap}.\n    *\n    * ### CSS Variables\n    *\n    * CSS variables available include the following options:\n    *\n    * ```\n    * Top level 'main' element:\n    * --tjs-settings-section-background - none\n    *\n    * Scrollable div element:\n    * --tjs-settings-padding - 0\n    *\n    * Each section element for a grouping of settings:\n    * --tjs-settings-section-background - none\n    * --tjs-settings-section-border - none\n    * --tjs-settings-section-border-radius - 0\n    * --tjs-settings-section-margin-bottom - 0.75em\n    * --tjs-settings-section-padding - 0.5em\n    * ```\n    * @componentDocumentation\n    */\n\n   import { onDestroy }          from 'svelte';\n\n   import { applyStyles }        from '@typhonjs-fvtt/runtime/svelte/action/dom/style';\n\n   import { TJSSvelte }          from '@typhonjs-fvtt/runtime/svelte/util';\n   import { isObject }           from '@typhonjs-fvtt/runtime/util/object';\n\n   import { TJSScrollContainer } from '@typhonjs-fvtt/standard/component/container';\n   import { TJSSvgFolder }       from '@typhonjs-fvtt/standard/component/folder';\n\n   import SettingEntry           from './SettingEntry.svelte';\n\n   /** @type {import('@typhonjs-fvtt/standard/store/fvtt/settings').TJSGameSettingsWithUI} */\n   export let settings = void 0;\n\n   /** @type {import('@typhonjs-fvtt/standard/store/fvtt/settings').TJSSettingsCreateOptions} */\n   export let options = void 0;\n\n   /**\n    * Optional inline styles applied to the main element; useful for setting CSS variables.\n    *\n    * @type {object}\n    */\n   export let styles = void 0;\n\n   const uiSettings = settings.uiControl.create(options);\n\n   onDestroy(() => uiSettings.destroy());\n</script>\n\n<main class=tjs-settings use:applyStyles={styles}>\n   <slot name=settings-header {settings} {options} {uiSettings} />\n   <TJSScrollContainer scrollTop={uiSettings.storeScrollbar}>\n      {#if uiSettings.topLevel.length}\n         <section class=tjs-settings-section>\n            {#each uiSettings.topLevel as setting (setting.key)}\n               <SettingEntry {setting} />\n            {/each}\n         </section>\n      {/if}\n      {#each uiSettings.folders as folder}\n         <section class=tjs-settings-section>\n            <TJSSvgFolder label={folder.label} store={folder.store}>\n               {#each folder.settings as setting (setting.key)}\n                  <SettingEntry {setting} />\n               {/each}\n            </TJSSvgFolder>\n         </section>\n      {/each}\n      {#each uiSettings.sections as section}\n         <section class=tjs-settings-section use:applyStyles={section.styles}>\n            {#if section.folder}\n               <TJSSvgFolder folder={section.folder}>\n                  <svelte:component this={section.class} {...(isObject(section.props) ? section.props : {})}/>\n\n                  <svelte:fragment slot=summary-end>\n                     {#if TJSSvelte.config.isConfigEmbed(section?.folder?.summaryEnd)}\n                        <svelte:component this={section.folder.summaryEnd.class} {...(isObject(section?.folder?.summaryEnd?.props) ? section.folder.summaryEnd.props : {})}/>\n                     {/if}\n                  </svelte:fragment>\n               </TJSSvgFolder>\n            {:else}\n               <svelte:component this={section.class} {...(isObject(section.props) ? section.props : {})}/>\n            {/if}\n         </section>\n      {/each}\n   </TJSScrollContainer>\n   <slot name=settings-footer {settings} {options} {uiSettings} />\n</main>\n\n<style>\n   main {\n      --tjs-scroll-container-padding: var(--tjs-settings-padding, 0);\n\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n      background: var(--tjs-settings-background, none);\n   }\n\n   section {\n      background: var(--tjs-settings-section-background, none);\n      border: var(--tjs-settings-section-border, none);\n      border-radius: var(--tjs-settings-section-border-radius, 0);\n      padding: var(--tjs-settings-section-padding, 0.5em);\n   }\n\n   section:not(:last-child) {\n      margin-bottom: var(--tjs-settings-section-margin-bottom, 0.75em);\n   }\n</style>\n","<script>\n   /**\n    * `TJSSettingsSwap` provides a convenience component to swap a main slotted component with `TJSSettingsEdit`.\n    *\n    * The component props are the same and documented in {@link TJSSettingsEdit}. The only difference is that to\n    * support slot forwarding for `TJSSettingsEdit` is that you define the `settings-header` and `settings-footer` slots\n    * inside the `TJSSettingsSwap` content.\n    *\n    * Controlling the swap state is accessible from `TJSGameSettingsWithUI.uiControl.showSettings` accessor\n    * (get or set). This allows for instance the creation of an app header button to swap between the main slotted\n    * component and `TJSSettingsEdit`.\n    *\n    * @componentDocumentation\n    */\n\n   import TJSSettingsEdit from './TJSSettingsEdit.svelte';\n\n   /** @type {import('@typhonjs-fvtt/standard/store/fvtt/settings').TJSGameSettingsWithUI} */\n   export let settings = void 0;\n\n   /** @type {import('@typhonjs-fvtt/standard/store/fvtt/settings').TJSSettingsCreateOptions} */\n   export let options = void 0;\n\n   const showSettings = settings.uiControl.stores.showSettings;\n</script>\n\n{#if $showSettings}\n    <TJSSettingsEdit {settings} {options}>\n        <slot name=settings-header slot=settings-header {settings} {options} {uiSettings} let:uiSettings />\n        <slot name=settings-footer slot=settings-footer {settings} {options} {uiSettings} let:uiSettings />\n    </TJSSettingsEdit>\n{:else}\n    <slot/>\n{/if}\n","<script>\n   import { ripple }        from \"#standard/action/animate/composable\";\n\n   import { TJSIconButton } from \"#standard/component/button\";\n\n   export let category;\n\n   // TODO: LOCALIZE THESE STRINGS\n   const stringCloseAll = game.i18n.localize(\"autoanimations.menus.close\") + \" \" + game.i18n.localize(\"autoanimations.menus.all\");\n   //const stringOpenAll = \"Open All\";\n\n   let icon, title, allOpen;\n\n   $: dataReducer = category.dataReducer;\n\n   //$: storeAllFoldersOpened = category.stores.allFoldersOpened;\n   /*\n   $: {\n      allOpen = $storeAllFoldersOpened;\n\n      icon = allOpen ? 'fas fa-angle-double-up' : 'fas fa-angle-double-down';\n      title = allOpen ? stringCloseAll : stringOpenAll;\n   }\n   */\n   icon = 'fas fa-angle-double-up';\n   title = stringCloseAll;\n   const button = {\n      efx: ripple(),\n      styles: { \"margin-left\": \"0.5em\", \"margin-right\": \"auto\" },\n   };\n\n   function onClick()\n   {\n      //const newState = !allOpen;\n\n      // Update folderState for all visible animation stores.\n      //for (const animationStore of $dataReducer) { animationStore.folderState = newState; }\n      for (const animationStore of $dataReducer) { animationStore.folderState = false; }\n   }\n</script>\n\n<TJSIconButton {button} {icon} {title} on:click={onClick}/>\n\n","import { TJSDialog } from \"#runtime/svelte/application\";\n\n/**\n * Creates the items for the overflow menu.\n *\n * @param {CategoryStore} category - Associated category store.\n *\n * @returns {object[]} Overflow menu items.\n */\nexport function createOverflowItems(category) {\n   return [\n      {\n         label: \"Delete All\", // TODO: localize,\n         icon: \"far fa-trash-alt\",\n         onPress: async () => {\n            const result = await TJSDialog.confirm({\n               title: \"Delete All Animations?\",\n               content: `Are you sure you want to delete all animations from '${category.label}'?`,\n               draggable: false,\n               modal: false,\n            }, { themeName: 'light' });\n\n            if (result) {\n               category.clearEntries();\n            }\n         },\n      },\n   ];\n}\n","<script>\n    import {\n       ripple,\n       rippleFocus }                from \"#standard/action/animate/composable\";\n\n    import {\n       TJSIconButton,\n       TJSToggleIconButton }        from \"#standard/component/button\";\n\n    import { TJSInput }             from \"#standard/component/form\";\n\n    import { TJSMenu }              from \"#standard/component/menu\";\n\n    import { Hashing }              from \"#runtime/util\";\n\n    import ButtonOpenCloseAll       from \"./ButtonOpenCloseAll.svelte\";\n    import { createOverflowItems }  from \"./createOverflowItems.js\";\n\n    //import * as addDefaultData from \"./addSections.js\"\n    import * as newSection from \"../../store/default-data/newSection\"\n    /** @type {CategoryStore} */\n    export let category;\n\n    const buttonAdd = {\n       icon: \"fas fa-plus\",\n       efx: ripple(),\n       title: \"autoanimations.menus.add\"\n    };\n\n    const input = {\n       store: category.filterSearch,\n       efx: rippleFocus(),\n       placeholder: \"autoanimations.menus.search\",\n       type: \"search\"\n    };\n\n    const buttonSort = {\n       icon: \"fas fa-sort-alpha-down\",\n       efx: ripple(),\n       styles: { \"margin-left\": \"auto\" },\n       title: \"autoanimations.menus.sortmenu\"\n    };\n\n    const buttonOverflow = {\n       icon: 'fas fa-ellipsis-v',\n       efx: ripple(),\n       styles: { 'margin-left': '0.5em' }\n    };\n\n    $: menu = {\n       items: createOverflowItems(category),\n    }\n\n    $: menuTab = category.key.split(\"-\")[1];\n\n    function addEntry() {\n      let newData = newSection[menuTab]()\n      //newData.id = Hashing.uuidv4();\n      category.createEntry(newData)\n    }\n</script>\n\n<header>\n    <TJSIconButton button={buttonAdd} on:click={() => addEntry()} />\n    <ButtonOpenCloseAll {category} />\n    <TJSInput {input} />\n    <TJSIconButton button={buttonSort} on:click={() => category.sortAlpha()} />\n    <TJSToggleIconButton button={buttonOverflow}>\n        <TJSMenu {menu} />\n    </TJSToggleIconButton>\n</header>\n\n<style lang=scss>\n  header {\n    display: flex;\n    flex-wrap: nowrap;\n    justify-content: center;\n    align-items: center;\n\n    padding: 0.25em 0.25em;\n\n    background: rgba(199, 199, 199, 0.85);\n    border-bottom: 2px solid rgb(100, 100, 100);\n\n    height: fit-content;\n    width: 100%;\n\n    // TJSInput styles\n    --tjs-input-text-align: center;\n    --tjs-input-border: 1.5px outset rgba(0, 0, 0, 0.5);\n    --tjs-input-border-radius: 1em;\n    --tjs-input-width: 70%;\n  }\n</style>\n","import { getEasingFunc } from '@typhonjs-fvtt/runtime/svelte/easing';\nimport { TJSSvelte } from '@typhonjs-fvtt/runtime/svelte/util';\nimport { A11yHelper } from '@typhonjs-fvtt/runtime/util/a11y';\nimport { CrossWindow, AssetValidator } from '@typhonjs-fvtt/runtime/util/browser';\nimport { ThemeObserver } from '@typhonjs-fvtt/runtime/util/dom/theme';\nimport { isIterable, isObject } from '@typhonjs-fvtt/runtime/util/object';\nimport { TJSContextMenuImpl } from '@typhonjs-fvtt/standard/component/menu';\n\n/**\n * Provides and manages browser window wide context menu functionality. The best way to create a context menu is to\n * attach the source KeyboardEvent or MouseEvent / PointerEvent as data in {@link TJSContextMenu.create}. This allows\n * proper keyboard handling across browsers supporting the context menu key. A A11yFocusSource data object is generated\n * which allows tracking of the source element that triggered the context menu allowing focus to return to the source\n * when the context menu is closed. This A11yFocusSource object is also forwarded on through the `onPress` callback and\n * is intended to be supplied as `SvelteApplication` options particularly for modal dialogs allowing focus to return\n * to the original source after the modal dialog is closed.\n */\nclass TJSContextMenu\n{\n   /**\n    * Stores any active context menu.\n    */\n   static #contextMenu = void 0;\n\n   /**\n    * @hideconstructor\n    */\n   constructor()\n   {\n      throw new Error('TJSContextMenu constructor: This is a static class and should not be constructed.');\n   }\n\n   /**\n    * Creates and manages a browser wide context menu. The best way to create the context menu is to pass in the source\n    * DOM event as it is processed for the location of the context menu to display. Likewise, an A11yFocusSource object\n    * is generated that allows focus to be returned to the source location. You may supply a default focus target as a\n    * fallback via `focusEl`.\n    *\n    * @param {object}      opts - Optional parameters.\n    *\n    * @param {PointerEvent | MouseEvent | KeyboardEvent}  [opts.event] - The source PointerEvent, MouseEvent or\n    *        KeyboardEvent. It is highly recommended to pass the originating DOM event for automatic configuration.\n    *\n    * @param {(\n    *    Iterable<import('#standard/component/menu').TJSMenuData.Items> |\n    *    (() => Iterable<import('#standard/component/menu').TJSMenuData.Items>)\n    * )} [opts.items] - Menu items list of function returning a menu item list to display.\n    *\n    * @param {number}      [opts.x] - X position override for the top / left of the menu.\n    *\n    * @param {number}      [opts.y] - Y position override for the top / left of the menu.\n    *\n    * @param {number}      [opts.offsetX=2] - Small positive number offset for context menu so the pointer / mouse is\n    *        over the menu on display.\n    *\n    * @param {number}      [opts.offsetY=2] - Small positive number offset for context menu so the pointer / mouse is\n    *        over the menu on display.\n    *\n    * @param {boolean}     [opts.anchorToEventTarget=false] - Align context menu to the `event.target` element. This\n    *        will usually display the context menu aligned at the bottom left of the target element with automatic\n    *        alignment adjustments when the menu opens to the left or upwards.\n    *\n    * @param {Iterable<string>}    [opts.classes] - Additional custom CSS classes to add to the menu. This allows CSS\n    *        style targeting.\n    *\n    * @param {boolean}     [opts.focusDebug] - When true the associated A11yFocusSource object will log focus target\n    *        data when applied.\n    *\n    * @param {HTMLElement|string} [opts.focusEl] - A specific HTMLElement or selector string as the default focus\n    *        target.\n    *\n    * @param {string}      [opts.keyCode='Enter'] - Key to select menu items.\n    *\n    * @param {string}      [opts.id] - A custom CSS ID to add to the menu. This allows CSS style targeting.\n    *\n    * @param {Function}    [opts.onClose] - A function that is invoked when the context menu is closed. Useful for any\n    *        state based changes such as CSS highlighting of context menu invoking element.\n    *\n    * @param {boolean}     [opts.onPressApplyFocus=false] When true, any focus source derived from the associated\n    *        `event` or defined `focusEl` is applied automatically in response to menu item presses.\n    *\n    * @param {{ [key: string]: string | null }}  [opts.styles] - Optional inline styles to apply.\n    *\n    * @param {number}      [opts.duration] - Transition option for duration of transition in milliseconds;\n    *        default: `120ms`.\n    *\n    * @param {import('#runtime/svelte/easing').EasingReference}   [opts.easing] - Transition option for ease. Either an\n    *        easing function or easing function name.\n    *\n    * @param {Window}      [opts.activeWindow] - The active browser window that the context menu is displaying inside.\n    *        When you pass an `event` this is determined automatically.\n    */\n   static create({ event, items, x, y, offsetX = 2, offsetY = 2, anchorToEventTarget = false, classes = [],\n    focusDebug = false, focusEl, keyCode = 'Enter', id = '', onClose, onPressApplyFocus = false, styles, duration = 120,\n     easing, activeWindow })\n   {\n      if (TJSContextMenu.#contextMenu !== void 0) { return; }\n\n      // Perform duck typing on event constructor name.\n      if (event !== void 0 && !CrossWindow.isUserInputEvent(event))\n      {\n         throw new TypeError(\n          `TJSContextMenu.create error: 'event' is not a KeyboardEvent, MouseEvent, or PointerEvent.`);\n      }\n\n      if (!event && (typeof x !== 'number' || typeof y !== 'number'))\n      {\n         throw new Error(`TJSContextMenu.create error: No event or absolute X / Y position not defined.`);\n      }\n\n      if (typeof anchorToEventTarget !== 'boolean')\n      {\n         throw new TypeError(`TJSContextMenu.create error: 'anchorToEventTarget' is not a boolean.`);\n      }\n\n      if (anchorToEventTarget === true && !event)\n      {\n         throw new TypeError(\n          `TJSContextMenu.create error: 'anchorToEventTarget' when 'true' requires 'event' to be defined.`);\n      }\n\n      if (Number.isFinite(offsetX) && offsetX < 0)\n      {\n         throw new TypeError(`TJSContextMenu.create error: offsetX is not a positive number.`);\n      }\n\n      if (Number.isFinite(offsetY) && offsetY < 0)\n      {\n         throw new TypeError(`TJSContextMenu.create error: offsetY is not a positive number.`);\n      }\n\n      if (!Number.isInteger(duration) || duration < 0)\n      {\n         throw new TypeError(`TJSContextMenu.create error: 'duration' is not a positive integer.`);\n      }\n\n      // If `activeWindow` is not defined determine it from the given event.\n      if (activeWindow === void 0 && event !== void 0) { activeWindow = CrossWindow.getWindow(event); }\n\n      if (!CrossWindow.isWindow(activeWindow))\n      {\n         throw new TypeError(`TJSContextMenu.create error: 'activeWindow' is not a Window.`);\n      }\n\n      if (typeof id !== 'string')\n      {\n         throw new TypeError(`TJSContextMenu.create error: 'id' is not a string.`);\n      }\n\n      if (onClose !== void 0 && typeof onClose !== 'function')\n      {\n         throw new TypeError(`TJSContextMenu.create error: 'onClose' is not a function.`);\n      }\n\n      if (typeof onPressApplyFocus !== 'boolean')\n      {\n         throw new TypeError(`TJSContextMenu.create error: 'onPressApplyFocus' is not a boolean.`);\n      }\n\n      if (!isIterable(classes))\n      {\n         throw new TypeError(`TJSContextMenu.create error: 'classes' is not a list of strings.`);\n      }\n\n      const processedItems = TJSContextMenu.#processItems(items);\n\n      // No applicable menu items. Abort showing the menu.\n      if (processedItems.length === 0) { return; }\n\n      const hasIcon = processedItems.some((entry) => entry['#type'] === 'font' || entry['#type'] === 'svg');\n\n      // Used for `anchorToEventTarget` storing target element width / height and defining `x / y` for bottom left\n      // positioning.\n      let targetElHeight = 0, targetElWidth = 0;\n\n      if (anchorToEventTarget)\n      {\n         ({ x, y, targetElHeight, targetElWidth } = this.#calcAnchorToEventTarget(event, activeWindow, x, y));\n      }\n\n      const focusSource = A11yHelper.getFocusSource({ event, x, y, focusEl, debug: focusDebug });\n\n      const easingFn = getEasingFunc(easing, { default: false });\n\n      // Retrieve any additional platform theme classes depending on event target.\n      const themedClasses = ThemeObserver.nearestThemedTokens({\n         element: event?.target,\n         output: new Set(classes),\n         override: false,\n         strict: true\n      });\n\n      // Create the new context menu with the last click x / y point.\n      TJSContextMenu.#contextMenu = new TJSContextMenuImpl({\n         target: activeWindow.document.body,\n         intro: true,\n         props: {\n            x: focusSource.x,\n            y: focusSource.y,\n            offsetX,\n            offsetY,\n            hasIcon,\n            items: processedItems,\n            classes: Array.from(themedClasses),\n            focusSource,\n            keyCode,\n            id,\n            styles,\n            transitionOptions: { duration, easing: easingFn },\n            activeWindow,\n            onPressApplyFocus,\n            targetElHeight,\n            targetElWidth\n         }\n      });\n\n      TJSContextMenu.#contextMenu.$set({ current_component: TJSContextMenu.#contextMenu });\n\n      // Register an event listener to remove any active context menu if closed from a menu selection or pointer\n      // down event to `document.body`.\n      TJSContextMenu.#contextMenu.$on('close:contextmenu', () =>\n      {\n         TJSContextMenu.#contextMenu = void 0;\n\n         if (typeof onClose === 'function') { onClose(); }\n      });\n   }\n\n   /**\n    * Find bottom / left viewport coordinates for current target element of event.\n    *\n    * @param {PointerEvent | MouseEvent | KeyboardEvent} event -\n    *\n    * @param {Window}   activeWindow -\n    *\n    * @param {number}   [x] -\n    *\n    * @param {number}   [y] -\n    *\n    * @returns {{ x: number, y: number, targetElHeight: number, targetElWidth: number }} X / Y viewport coordinates\n    *          aligned to the event target element bottom / left in addition to the target element height / width for\n    *          when the context menu is repositioned due to constraints.\n    */\n   static #calcAnchorToEventTarget(event, activeWindow, x, y)\n   {\n      let targetElHeight = 0, targetElWidth = 0, targetX, targetY;\n\n      const rect = (event?.currentTarget ?? event?.target)?.getBoundingClientRect?.();\n\n      if (rect)\n      {\n         targetX = rect.left + activeWindow.scrollX;\n         targetY = rect.bottom + activeWindow.scrollY;\n         targetElHeight = rect.height;\n         targetElWidth = rect.width;\n      }\n\n      // Allow any defined x / y to take precedence.\n      return { x: x ?? targetX, y: y ?? targetY, targetElHeight, targetElWidth };\n   }\n\n   /**\n    * Processes menu item data for conditions and evaluating the type of menu item.\n    *\n    * @param {(\n    *    Iterable<import('#standard/component/menu').TJSMenuData.Items> |\n    *    (() => Iterable<import('#standard/component/menu').TJSMenuData.Items>)\n    * )} items - Menu item data of function returning items.\n    *\n    * @returns {object[]} Processed menu items.\n    */\n   static #processItems(items)\n   {\n      let itemList;\n\n      if (typeof items === 'function')\n      {\n         itemList = items();\n\n         if (!isIterable(itemList))\n         {\n            throw new TypeError(`TJSContextMenu error: 'items' function did not return an iterable list.`);\n         }\n      }\n      else\n      {\n         itemList = isIterable(items) ? items : [];\n      }\n\n      const tempItems = [];\n\n      let cntr = -1;\n\n      for (const item of itemList)\n      {\n         cntr++;\n         if (!isObject(item)) { throw new TypeError(`TJSContextMenu error: 'item[${cntr}]' is not an object.`); }\n\n         // Filter items for any condition that prevents display.\n         if (typeof item.condition === 'function' && !item.condition()) { continue; }\n         if (typeof item.condition === 'boolean' && !item.condition) { continue; }\n\n         let type;\n\n         if (TJSSvelte.config.isConfigEmbed(item?.svelte)) { type = 'class'; }\n         else if (typeof item.icon === 'string')\n         {\n            const result = AssetValidator.parseMedia({ url: item.icon, mediaTypes: AssetValidator.MediaTypes.img_svg });\n            type = result.valid ? result.elementType : 'font';\n         }\n         else if (item.icon === void 0 && typeof item.label === 'string') { type = 'label'; }\n         else if (typeof item.separator === 'string')\n         {\n            if (item.separator !== 'hr')\n            {\n               throw new Error(\n                `TJSContextMenu error: 'item[${cntr}]' has unknown separator type; only 'hr' is currently supported.`);\n            }\n\n            type = 'separator-hr';\n         }\n\n         if (type === void 0) { throw new TypeError(`TJSContextMenu error: Unknown type for 'item[${cntr}]'.`); }\n\n         tempItems.push({ ...item, '#type': type });\n      }\n\n      return tempItems;\n   }\n}\n\nexport { TJSContextMenu };\n//# sourceMappingURL=index.js.map\n","<script>\n    import { ripple }         from \"#standard/action/animate/composable\";\n\n    import { TJSContextMenu } from \"#standard/application/menu\";\n    import { TJSIconButton }  from \"#standard/component/button\";\n\n    export let menu;\n    export let info = {};\n\n    const buttonOverflow = {\n        icon: 'fas fa-ellipsis-v',\n        efx: ripple(),\n        styles: { 'margin-left': '0.5em' },\n        clickPropagate: false,   // Necessary to capture click for Firefox.\n\n        onPress: ({ event }) =>\n        {\n           TJSContextMenu.create({\n              event,\n              anchorToEventTarget: true,\n              items: menu.items\n           })\n        }\n    };\n</script>\n\n<div class=\"quickView\">\n    <i class={info?.icon} title={info.title}></i>\n</div>\n<div>\n    <TJSIconButton button={buttonOverflow} slot=summary-end />\n</div>\n\n<style lang=\"scss\">\n    .quickView {\n        margin-left: 5px;\n        font-size: 13px;\n    }\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { ripple }           from \"#standard/action/animate/composable\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n\n    const { application } = getContext(\"#external\");\n\n    export let animation;\n\n\n    if (!animation._data.advanced) {\n        $animation.advanced = {\n            exactMatch: false,\n            excludedTerms: [],\n            excludedType: {\n                enabled: false,\n                path: \"\",\n                property: \"\",\n            }\n        };\n    }\n\n    $: isExactMatch = $animation.advanced.exactMatch;\n    $: excludedTerms = $animation.advanced.excludedTerms;\n\n    function addSection() {\n        $animation.advanced.excludedTerms = [...excludedTerms, \"\"]\n    }\n    function removeThis(idx) {\n        excludedTerms.splice(idx, 1);\n        $animation.advanced.excludedTerms = [...excludedTerms]\n    }\n\n    const removeButton = {\n       icon: \"far fa-trash-can\",\n       efx: ripple(),\n       title: \"Delete\"\n    };\n\n</script>\n\n<header>\n    <div style=\"text-align: center; font-size: 1.5em\">\n        <label for=\"\">{localize(\"autoanimations.menus.advanced\")} {localize(\"autoanimations.menus.recognition\")} {localize(\"autoanimations.menus.features\")}</label>\n    </div>\n</header>\n<table class=\"c\">\n    <tr>\n        <th colspan=\"2\">\n            <div>\n                <input\n                    type=\"checkbox\"\n                    bind:checked={$animation.advanced.exactMatch}\n                />\n                <label for=\"\" style=\"font-size: 1.25em\">{localize(\"autoanimations.menus.forceExact\")}?</label>\n            </div>\n        </th>\n    </tr>\n</table>\n<table class=\"c\">\n    <tr>\n        <th colspan=\"2\" style=\"padding-top: 1em\">\n            <div class={isExactMatch ? \"aa-disableOpacity\" : \"\"}>\n                <div>\n                    <label for=\"\" style=\"font-size: 1.25em\">{localize(\"autoanimations.menus.excludedSearchWords\")}</label>\n                </div>\n                {#each $animation.advanced.excludedTerms as term, i}\n                <div class=\"flexrow\">\n                    <input type=text bind:value={term}/>\n                    <TJSIconButton button={removeButton} on:click={() => removeThis(i)} />\n                </div>\n                {/each}\n                <button on:click={() => addSection()}>Add</button>\n            </div>\n        </th>\n    </tr>\n</table>\n<table class=\"c\">\n    <tr>\n        <th colspan=\"2\" style=\"padding-top: 1em;\">\n            <div>\n                <input\n                    type=\"checkbox\"\n                    bind:checked={$animation.advanced.excludedType.enabled}\n                />\n                <label for=\"\" style=\"font-size: 1.25em;\">{localize(\"autoanimations.menus.exclude\")} {localize(\"autoanimations.menus.item\")} {localize(\"autoanimations.menus.property\")}</label>\n            </div>\n        </th>\n    </tr>\n    <tr class={$animation.advanced.excludedType.enabled ? \"\" : \"aa-disableOpacity\"}>\n        <th>\n            <div style=\"margin-top: 1.5em\">\n                item.\n            </div>\n        </th>\n        <th>\n            <div class=\"flexrow\">\n                <div>\n                    {localize(\"autoanimations.menus.path\")}\n                    <input type=text style=\"text-align: left\" bind:value={$animation.advanced.excludedType.path}/>\n                </div>\n                <div>\n                    {localize(\"autoanimations.menus.property\")}\n                    <input type=text bind:value={$animation.advanced.excludedType.property}/>\n                </div>\n            </div>\n        </th>\n    </tr>\n</table>\n<div class=\"aa-list\" />\n\n<style lang=\"scss\">\n    table label {\n        position: relative;\n        bottom: 0.3em;\n        font-weight: bold;\n    }\n    table.c {\n        width: 100%;\n    }\n</style>\n","import { TJSDialog } from \"#runtime/svelte/application\";\n\nimport AdvancedAutorec from \"./advancedSearch/AdvancedAutorec.svelte\";\n\n/**\n * Creates the items for the overflow menu.\n *\n * @param {AnimationStore} animation - Associated animation store.\n *\n * @param {CategoryStore} category - Associated category store.\n *\n * @returns {object[]} Overflow menu items.\n */\nexport function createOverflowItems(animation, category) {\n   return [\n      {\n         label: \"autoanimations.menus.duplicate\",\n         icon: \"far fa-clone\",\n         onPress: () => category.duplicateEntry(animation.id),\n      },\n      {\n         label: \"Delete\", // TODO: localize,\n         icon: \"far fa-trash-alt\",\n         onPress: async () => {\n            const label = animation.label !== \"\" ? `'${animation.label}'` : \"'No Item Name'\";\n\n            const result = await TJSDialog.confirm({\n               title: \"Delete Animation?\",\n               content: `Are you sure you want to delete: ${label}`,\n               draggable: false,\n               modal: false,\n            }, { themeName: 'light' });\n\n            if (result) {\n               category.deleteEntry(animation.id);\n            }\n         },\n      },\n      {\n         label: \"Metadata\",\n         icon: \"fas fa-heart-pulse\",\n         onPress: () => animation.getSource(),\n      },\n      {\n         label: \"Advanced\",\n         icon: \"fab fa-searchengin\",\n         onPress: () => {\n            new TJSDialog({\n               modal: false,\n               title: \"Advanced Features: \" + `${animation._data.label}`,\n               content: {\n                  class: AdvancedAutorec,\n                  props: {\n                     animation,\n                  },\n               },\n               defaultYes: false,\n            }, { themeName: 'light' }).render(true);\n\n            return true;\n         },\n      },\n   ];\n}\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n    import { getContext }   from \"svelte\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n\n    let { animation, category, idx } = getContext('animation-data');\n\n    let section = \"soundOnly\";\n\n    $: isValid = $animation.soundOnly.sound.enable && $animation.soundOnly.sound.file\n</script>\n\n\n<div class=\"aa-soundOnly-border\">\n    <div style=\"padding-top: 10px\">\n        <h1>\n            {localize(\"autoanimations.menus.sound\")}\n            {localize(\"autoanimations.menus.only\")}\n        </h1>\n    </div>\n    <div class=\"aa-Sound-container\">\n        <div style=\"grid-row: 1/2; grid-column: 1/2\">\n                <i\n                    class={`fas fa-music aa-blue ${isValid ? \"\" : \"aa-disableOpacity\"}`}\n                    style=\"font-size: 1.5em;\"\n                    title=\"Play Sound\"\n                    on:click={() => category.playSound(animation._data[section].sound)}\n                    role=presentation\n                />\n        </div>\n        <div style=\"grid-row: 1/2; grid-column: 2/3\">\n            <input\n                type=\"text\"\n                bind:value={$animation.soundOnly.sound.file}\n                style=\"font-weight:normal; font-size:small\"\n            />\n        </div>\n        <div style=\"grid-row: 1/2; grid-column: 3/4\">\n            <i class=\"fas fa-file-import\"\n               title=\"File Picker\"\n               style=\"font-size:1.5em\"\n               on:click|preventDefault={() => category.selectSound(section, idx)}\n               role=presentation\n            />\n        </div>\n    </div>\n    <table class=\"d\" style=\"padding-left: 2em; padding-right: 2em\">\n        <tr>\n            <td>\n                <!--Set Start Time-->\n                <div>\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.start\")}\n                        {localize(\"autoanimations.menus.time\")} (ms)</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.soundOnly.sound.startTime}\n                        placeholder=\"0\"\n                        step=\"0.01\"\n                    />\n                </div>\n            </td>\n            <td>\n                <!--Set Volume-->\n                <div>\n                    <label for=\"\"\n                        >{localize(\n                            \"autoanimations.menus.volume\"\n                        )}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.soundOnly.sound.volume}\n                        placeholder=\"0.5\"\n                        step=\"0.01\"\n                    />\n                </div>\n            </td>\n            <td>\n                <!--Set Delay-->\n                <div>\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.delay\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.soundOnly.sound.delay}\n                        placeholder=\"0\"\n                        step=\"0.01\"\n                    />\n                </div>\n            </td>\n        </tr>\n        <tr>\n            <td>\n                <!--Set Repeats-->\n                <div>\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.repeat\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.soundOnly.sound.repeat}\n                        placeholder=\"1\"\n                        step=\"1\"\n                    />\n                </div>\n            </td>\n            <td>\n                <!--Set Repeat Delay-->\n                <div>\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.soundOnly.sound.repeatDelay}\n                        placeholder=\"250\"\n                        step=\"1\"\n                    />\n                </div>\n            </td>\n        </tr>\n    </table>\n</div>\n\n<style lang=\"scss\">\n    h1 {\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-size: x-large;\n        font-weight: bold;\n        text-align: center;\n        margin-right: 5%;\n        margin-left: 5%;\n    }\n    .aa-soundOnly-border {\n        margin-right: 3%;\n        margin-left: 3%;\n        border: 3px solid rgba(21, 86, 21, 0.6);\n        border-radius: 5px;\n        background: rgb(200 200 200);\n        margin-bottom: 15px;\n        padding-bottom: 15px;\n    }\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize } from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import { gameSettings } from \"#gameSettings\";\n\n    //export let animation;\n    //export let category;\n    export let section;\n    //export let idx;\n\n    let { animation, category, idx } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    // If the Sound object was not set, set it now\n    if (!$animation[section].sound) {\n        $animation[section].sound = {\n            enable: false,\n            delay: 0,\n            file: \"\",\n            repeat: 1,\n            repeatDelay: 250,\n            startTime: 0,\n            volume: 0.75\n        }\n    }\n\n    $: isValid =\n        $animation[section].sound.file && $animation[section].sound.enable;\n\n    function checkMeta() {\n        delete $animation.metaData\n    }\n</script>\n\n<div class=\"aa-sound-border\">\n    <TJSSvgFolder {folder} label={localize(\"autoanimations.menus.sound\")} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Sound On/Off\"\n                bind:checked={$animation[section].sound.enable}\n                on:change={() => checkMeta()}\n            />\n        </div>\n        <div\n            class={!$animation[section].sound.enable ? \"aa-disableOpacity\" : \"\"}\n        >\n            <div class=\"aa-Sound-container\">\n                <div style=\"grid-row: 1/2; grid-column: 1/2\">\n                    <i class=\"fas fa-music aa-blue {isValid ? '' : 'aa-disableOpacity'}\"\n                       style=\"font-size: 1.5em;\"\n                       title=\"Play Sound\"\n                       on:click={() => category.playSound(animation._data[section].sound)}\n                       role=presentation\n                    />\n                </div>\n                <div style=\"grid-row: 1/2; grid-column: 2/3\">\n                    <input\n                        type=\"text\"\n                        bind:value={$animation[section].sound.file}\n                        style=\"font-weight:normal; font-size:small\"\n                    />\n                </div>\n                <div style=\"grid-row: 1/2; grid-column: 3/4\">\n                    <i class=\"fas fa-file-import\"\n                       title=\"File Picker\"\n                       style=\"font-size:1.5em\"\n                       on:click|preventDefault={() => category.selectSound(section, idx)}\n                       role=presentation\n                    />\n                </div>\n            </div>\n            <table class=\"d\">\n                <tr>\n                    <td>\n                        <!--Set Start Time-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.start\")}\n                                {localize(\"autoanimations.menus.time\")} (ms)</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section].sound.startTime}\n                                placeholder=\"0\"\n                                step=\"0.01\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Volume-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.volume\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section].sound.volume}\n                                placeholder=\"0.5\"\n                                step=\"0.01\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Delay-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.delay\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section].sound.delay}\n                                placeholder=\"0\"\n                                step=\"0.01\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <!--Set Repeats-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.repeat\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section].sound.repeat}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Repeat Delay-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section].sound.repeatDelay}\n                                placeholder=\"250\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n    let { animation } = getContext('animation-data');\n    export let section;\n    export let field;\n    export let isDisabled = \"\";\n    export let placeholder = 1;\n    export let step = 1;\n\n    $: isRadius = $animation[section].options.isRadius;\n\n    const scaleLabel = game.i18n.localize(\"autoanimations.menus.scale\");\n    const radiusLabel = game.i18n.localize(\"autoanimations.menus.radius\");\n\n    function switchScale() {\n        if (!animation._data[section].options.isRadius) { return; }\n        $animation[section].options.isRadius = false;\n    }\n    function switchRadius() {\n        if (animation._data[section].options.isRadius) { return; }\n        $animation[section].options.isRadius = true;\n    }\n</script>\n\n<div class=\"{isDisabled}\">\n    <div>\n        <label for=\"\" class={`aaLabelBorder ${!isRadius ? \"aaIsSelected\" : \"\"}`} on:click={() => switchScale()} role=presentation>{scaleLabel}</label>\n        <label for=\"\"> &nbsp|&nbsp </label>\n        <label for=\"\" class={`aaLabelBorder ${isRadius ? \"aaIsSelected\" : \"\"}`} on:click={() => switchRadius()} role=presentation>{radiusLabel}</label>\n    </div>\n    <div>\n        <input\n            type=\"number\"\n            bind:value={$animation[section].options[field]}\n            placeholder={placeholder}\n            step={step}\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n    .aaLabelBorder {\n        color: rgba(91, 91, 91, 0.623);\n        border-radius: 5px;\n        border: 1px solid rgba(91, 91, 91, 0.623);\n        padding: 1px 5px 1px 5px;\n    }\n    .aaIsSelected {\n        color: black;\n        border: 1px solid black;\n    }\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"./inputComponents/NumberInput.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import ScaleRadius          from \"./inputComponents/ScaleRadius.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n    import WaitDelay            from \"./inputComponents/WaitDelay.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1.em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\"\n        },\n        clickPropagate: false\n    }\n\n    $: isRadius = $animation.source.options.isRadius;\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"ontoken\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation {animation} section=\"source\" />\n                </td>\n                <td>\n                    <!--Set Number of times the animation plays-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\")}\n                        section=\"source\"\n                        field=\"repeat\"\n                    />\n                </td>\n                <td>\n                    <!--Set delay between repeats-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.delay\")}\n                        section=\"source\"\n                        field=\"repeatDelay\"\n                        placeholder=\"250\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set OnlyX-->\n                    <div>\n                        <label for=\"SMasked {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.mask\")}\n                            <input\n                                type=\"checkbox\"\n                                id=\"SMasked {animation._data.id}\"\n                                bind:checked={$animation.source.options\n                                    .isMasked}\n                            />\n                        </label>\n                    </div>\n                </td>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} section=\"source\" />\n                </td>\n                <td>\n                    <!--Set the Z-Index of the Animation-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.z-index\")}\n                        section=\"source\"\n                        field=\"zIndex\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Size of Animation-->\n                    <ScaleRadius\n                        {animation}\n                        section=\"source\"\n                        field=\"size\"\n                        step=\"0.01\"\n                    />\n                </td>\n                <td>\n                    <!--Add Token Width-->\n                    <div class={isRadius ? \"\" : \"aa-disableOpacity\"}>\n                        <label for=\"SWidth {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.add\")}\n                            {localize(\"autoanimations.menus.token\")}\n                            {localize(\"autoanimations.menus.width\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"SWidth {animation._data.id}\"\n                            bind:checked={$animation.source.options.addTokenWidth}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.anchor\")}</label>\n                    </div>\n                    <div>\n                        <input type=\"text\" placeholder=\"0.5\" bind:value={$animation.source.options.anchor}>\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeIn\")}\n                    section=\"source\"\n                    field=\"fadeIn\"\n                    placeholder=250\n                />\n                </td>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"source\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeOut\")}\n                    section=\"source\"\n                    field=\"fadeOut\"\n                    placeholder=500\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Persistence-->\n                    <div>\n                        <label for=\"Persist {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.persistant\")}\n                            <input\n                                type=\"checkbox\"\n                                id=\"Persist {animation._data.id}\"\n                                bind:checked={$animation.source.options.persistent}\n                            />\n                        </label>\n                    </div>\n                </td>\n                <td>\n                    <!--Set Delay for proceeding animation-->\n                    <WaitDelay\n                        {animation}\n                        section=\"source\"\n                    />\n                </td>\n                <td></td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize }     from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import Opacity          from \"./inputComponents/Opacity.svelte\";\n\n    import { gameSettings } from \"#gameSettings\";\n\n    export let section = \"primary\";\n\n    //export let animation;\n    let { animation } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    $: tintEnabled = $animation[section].options.tint;\n\n    </script>\n\n<div class=\"aa-effect-border\">\n    <TJSSvgFolder\n        {folder}\n        label={localize(\"autoanimations.menus.colorTint\")}\n        animate={$uiAnimation}\n    >\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Enable Color Tint\"\n                bind:checked={$animation[section].options.tint}\n            />\n        </div>\n        <table class={`d ${tintEnabled ? \"\" : \"aa-disableOpacity\"}`}>\n            <tr>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} label={localize(\"autoanimations.menus.contrast\")} field=\"contrast\" min=\"0\" max=\"1\" placeDefault=0 {section}/>\n                </td>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} label={localize(\"autoanimations.menus.saturation\")} field=\"saturation\" min=\"-1\" max=\"1\" placeDefault=0 {section}/>\n                </td>\n                <td>\n                    <div class=\"flexcol\">\n                        <input\n                            type=\"Text\"\n                            style=\"width: 10em; margin: auto\"\n                            bind:value={$animation[section].options.tintColor}\n                        />\n                    </div>\n                    <div class=\"form-group\">\n                        <input\n                            type=\"color\"\n                            data-edit=\"color\"\n                            id=\"tint\"\n                            style=\"width: 10em;margin-left: 0;\"\n                            bind:value={$animation[section].options.tintColor}\n                        />\n                    </div>\n                </td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize } from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import SoundSettings from \"./SoundSettings.svelte\";\n    import VideoSelect from \"./VideoSelect.svelte\";\n    import SourceFxOptions from \"./options/SourceFXOptions.svelte\";\n    import EffectColor from \"./options/EffectColor.svelte\";\n\n    import { gameSettings } from \"#gameSettings\";\n\n    //export let animation;\n    //export let idx;\n    //export let category;\n    let { animation, category, idx } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    let title = \"Source\" + \" \" + game.i18n.localize(\"autoanimations.menus.animation\")\n\n    const folderOptions = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n    function checkMeta() {\n        delete $animation.metaData\n    }\n\n</script>\n\n<div class=\"aa-section-border\">\n    <TJSSvgFolder\n        folder={folderOptions}\n        label={localize(\"autoanimations.menus.source\") + \" \" + localize(\"autoanimations.menus.animation\")}\n        animate={$uiAnimation}\n    >\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Source FX On/Off\"\n                bind:checked={$animation.source.enable}\n                on:change={() => checkMeta()}\n            />\n        </div>\n        <div class={!$animation.source.enable ? \"aa-isDisabled\" : \"\"}>\n            <VideoSelect {animation} section=\"source\" {title} {idx} {category}/>\n            <SourceFxOptions {animation} />\n            <svelte:component this={EffectColor} section=\"source\" />\n            <SoundSettings {animation} {category} {idx} section=\"source\" />\n        </div>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n    .aa-isDisabled {\n        pointer-events: none;\n        opacity: 0.4;\n    }\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"./inputComponents/NumberInput.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import ScaleRadius          from \"./inputComponents/ScaleRadius.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\"\n        },\n        clickPropagate: false\n    }\n\n    $: persistent = $animation.target.options.persistent;\n    $: isRadius = $animation.target.options.isRadius;\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"ontoken\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation {animation} section=\"target\" />\n                </td>\n                <td>\n                    <!--Set Number of times the animation plays-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\")}\n                        section=\"target\"\n                        field=\"repeat\"\n                        isDisabled={persistent ? \"aa-disableOpacity\" : \"\"}\n                    />\n                </td>\n                <td>\n                    <!--Set delay between repeats-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.delay\")}\n                        section=\"target\"\n                        field=\"repeatDelay\"\n                        placeholder=\"250\"\n                        isDisabled={persistent ? \"aa-disableOpacity\" : \"\"}\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set OnlyX-->\n                    <div>\n                        <label for=\"TPersist {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.persistant\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"TPersist {animation._data.id}\"\n                            bind:checked={$animation.target.options.persistent}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Visibility Binding-->\n                    <div\n                        class=\"{persistent\n                            ? ''\n                            : 'aa-disableOpacity'}\"\n                    >\n                        <label for=\"TVis {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\")}\n                            {localize(\"autoanimations.menus.visibility\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"TVis {animation._data.id}\"\n                            bind:checked={$animation.target.options\n                                .unbindVisibility}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Alpha Binding-->\n                    <div\n                        class=\"{persistent\n                            ? ''\n                            : 'aa-disableOpacity'}\"\n                    >\n                        <label for=\"TAlpha {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\")}\n                            {localize(\"autoanimations.menus.alpha\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"TAlpha {animation._data.id}\"\n                            bind:checked={$animation.target.options.unbindAlpha}\n                        />\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Masking-->\n                    <div>\n                        <label for=\"SMasked {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.mask\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"SMasked {animation._data.id}\"\n                            bind:checked={$animation.target.options.isMasked}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} section=\"target\"/>\n                </td>\n                <td>\n                    <!--Set the Z-Index of the Animation-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.z-index\")}\n                        section=\"target\"\n                        field=\"zIndex\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Size of Animation-->\n                    <ScaleRadius\n                        {animation}\n                        section=\"target\"\n                        field=\"size\"\n                        step=\"0.01\"\n                    />\n                </td>\n                <td>\n                    <!--Add Token Width-->\n                    <div class={isRadius ? \"\" : \"aa-disableOpacity\"}>\n                        <label for=\"TWidth {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.add\")}\n                            {localize(\"autoanimations.menus.token\")}\n                            {localize(\"autoanimations.menus.width\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"TWidth {animation._data.id}\"\n                            bind:checked={$animation.target.options.addTokenWidth}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeIn\")}\n                    section=\"target\"\n                    field=\"fadeIn\"\n                    placeholder=250\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeOut\")}\n                    section=\"target\"\n                    field=\"fadeOut\"\n                    placeholder=500\n                    />\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.anchor\")}</label>\n                    </div>\n                    <div>\n                        <input type=\"text\" placeholder=\"0.5\" bind:value={$animation.target.options.anchor}>\n                    </div>\n                </td>\n                <td>\n                    <!--Set Masking-->\n                    <div>\n                        <label for=\"TarRotate {animation._data.id}\"\n                            >{localize('autoanimations.menus.sideImpact')}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"TarRotate {animation._data.id}\"\n                            bind:checked={$animation.target.options.rotateSource}\n                        />\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"target\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n                <td>\n                    <!--Set Delay for proceeding animation-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.delay\")}\n                        section=\"target\"\n                        field=\"delay\"\n                    />\n                </td>\n                <td></td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize } from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import SoundSettings from \"./SoundSettings.svelte\";\n    import VideoSelect from \"./VideoSelect.svelte\";\n    import TargetFxOptions from \"./options/TargetFXOptions.svelte\";\n    import EffectColor from \"./options/EffectColor.svelte\";\n\n    import { gameSettings } from \"#gameSettings\";\n\n    //export let animation;\n    //export let idx;\n    //export let category;\n    let { animation, category, idx } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    let title = \"Target\" + \" \" + game.i18n.localize(\"autoanimations.menus.animation\")\n\n    const folderOptions = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n    function checkMeta() {\n        delete $animation.metaData\n    }\n\n</script>\n\n<div class=\"aa-section-border\">\n    <TJSSvgFolder\n        folder={folderOptions}\n        label={localize(\"autoanimations.menus.target\") + \" \" + localize(\"autoanimations.menus.animation\")}\n        animate={$uiAnimation}\n    >\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Target FX On/Off\"\n                bind:checked={$animation.target.enable}\n                on:change={() => checkMeta()}\n            />\n        </div>\n        <div class={!$animation.target?.enable ? \"aa-isDisabled\" : \"\"}>\n            <VideoSelect {animation} section=\"target\" {title} {idx} {category}/>\n            <TargetFxOptions {animation} />\n            <svelte:component this={EffectColor} section=\"target\" />\n            <SoundSettings {animation} {category} {idx} section=\"target\" />\n        </div>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n    .aa-isDisabled {\n        pointer-events: none;\n        opacity: 0.4;\n    }\n</style>\n","import { writable }         from 'svelte/store';\n\nexport const currentStore = writable(void 0)","<script>\n    import { localize } from \"#runtime/util/i18n\";\n    import { getContext }   from \"svelte\";\n\n    import { currentStore } from \"./videoPreview/previewStore.js\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n    export let type = \"autorec\";\n\n    export let show3d = false;\n\n    let { animation, category } = getContext('animation-data');\n\n    $: currentIDX = category.stores.videoIDX;\n\n    //$: currentCategory = category.stores.currentCategory;\n\n    let canvas3dActive = game.modules.get(\"levels-3d-preview\")?.active ? \"\" : \"aa-disableOpacity\";\n\n    async function seePreview() {\n        if (type === \"item\") {\n            currentIDX.set(\"item\");\n        } else {\n            const index = category._data.findIndex(x => x.id === $animation.id)\n            currentIDX.set(index);\n        }\n        currentStore.set(category);\n        category.loadPreviews(category);\n    }\n\n    function removeMetaData() {\n       delete $animation.metaData\n   }\n</script>\n\n<div class=\"aa-autorec-headerButton\">\n    <div style=\"grid-row:1/2; grid-column:1/2\" class=\"sectionButton\" >\n        <label for=\"\" on:click={() => seePreview()} role=presentation>\n            {localize(\"autoanimations.menus.preview\")}\n            <i class=\"fas fa-film fa-lg aa-zoom\" />\n        </label>\n    </div>\n    <div style=\"grid-row:1/2; grid-column:2/3\" class=\"sectionButton {canvas3dActive}\">\n        <label for=\"\" on:click={() => (show3d = !show3d)} role=presentation\n            >{localize(\"autoanimations.menus.3dcanvas\")}\n            <i\n                class=\"fas fa-cube fa-lg {show3d ? 'aa-green' : ''}\"\n            /></label\n        >\n    </div>\n    <div style=\"grid-row:1/2; grid-column:3/4\" class=\"sectionButton\">\n        <label for=\"SoundOnly {animation._data.id}\"\n            >{localize(\"autoanimations.menus.sound\")}\n            {localize(\"autoanimations.menus.only\")}\n            <i\n                class=\"fas fa-music fa-lg {$animation.soundOnly.sound\n                    .enable\n                    ? 'aa-green'\n                    : ''}\"\n            />\n        </label>\n        <input\n            type=\"checkbox\"\n            hidden\n            id=\"SoundOnly {animation._data.id}\"\n            bind:checked={$animation.soundOnly.sound.enable}\n            on:change={() => removeMetaData()}\n        />\n    </div>\n    <div style=\"grid-row:1/2; grid-column:4/5\" class=\"sectionButton\">\n        <label for=\"Macro {animation._data.id}\"\n            >{localize(\"autoanimations.menus.add\")}\n            {localize(\"autoanimations.menus.macro\")}\n            <i\n                class=\"far fa-keyboard fa-lg {$animation.macro.enable\n                    ? 'aa-green'\n                    : ''}\"\n            />\n        </label>\n        <input\n            type=\"checkbox\"\n            hidden\n            id=\"Macro {animation._data.id}\"\n            bind:checked={$animation.macro.enable}\n            on:change={() => removeMetaData()}\n        />\n    </div>\n</div>\n\n<style lang=\"scss\">\n    .aa-autorec-headerButton label {\n        font-size: small;\n    }\n    .sectionButton {\n        background: rgba(0, 0, 0, 0.17);\n        padding: .2em;\n        border-radius: 1em;\n    }\n    .sectionButton:hover {\n        background: rgba(0, 0, 0, 0.25);\n        text-shadow: 0 0 1px rgba(255, 0, 0, 0.427);\n        zoom: 1.05;\n    }\n</style>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n    import { getContext }   from \"svelte\";\n\n    import { currentStore } from \"./videoPreview/previewStore.js\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n    export let type = \"autorec\";\n\n    let { animation, category } = getContext('animation-data');\n\n    $: currentIDX = category.stores.videoIDX;\n\n    async function seePreview() {\n        if (type === \"item\") {\n            currentIDX.set(\"item\");\n        } else {\n            const index = category._data.findIndex(x => x.id === $animation.id)\n            currentIDX.set(index);\n        }\n        currentStore.set(category);\n        category.loadPreviews(category);\n    }\n\n    //$: macroEnabled = $animation.macro.enable;\n    //$: macroSetting = $animation.macro.playWhen;\n\n    /*\n    $: {\n        if (macroEnabled && macroSetting === \"2\") {\n            animation._data.soundOnly.sound.enable = false;\n        }\n    }\n    */\n   function removeMetaData() {\n       delete $animation.metaData\n   }\n</script>\n\n<div class=\"aa-autorec-headerButton02\">\n    <div style=\"grid-row:1/2; grid-column:1/2\" class=\"sectionButton\">\n        <label for=\"\" on:click={() => seePreview()}\n               role=presentation\n            >{localize(\"autoanimations.menus.preview\")}\n            <i class=\"fas fa-film fa-lg aa-zoom\" /></label\n        >\n    </div>\n    <div style=\"grid-row:1/2; grid-column:2/3\" class=\"sectionButton\">\n        <label for=\"SoundOnly {animation._data.id}\"\n            >{localize(\"autoanimations.menus.sound\")}\n            {localize(\"autoanimations.menus.only\")}\n            <i\n                class=\"fas fa-music fa-lg aa-zoom {$animation.soundOnly.sound\n                    .enable\n                    ? 'aa-green'\n                    : ''}\"\n            />\n        </label>\n        <input\n            type=\"checkbox\"\n            hidden\n            id=\"SoundOnly {animation._data.id}\"\n            bind:checked={$animation.soundOnly.sound.enable}\n            on:change={() => removeMetaData()}\n        />\n    </div>\n    <div style=\"grid-row:1/2; grid-column:3/4\" class=\"sectionButton\">\n        <label for=\"Macro {animation._data.id}\"\n            >{localize(\"autoanimations.menus.add\")}\n            {localize(\"autoanimations.menus.macro\")}\n            <i\n                class=\"far fa-keyboard fa-lg aa-zoom {$animation.macro.enable\n                    ? 'aa-green'\n                    : ''}\"\n            />\n        </label>\n        <input\n            type=\"checkbox\"\n            hidden\n            id=\"Macro {animation._data.id}\"\n            bind:checked={$animation.macro.enable}\n            on:change={() => removeMetaData()}\n        />\n    </div>\n</div>\n\n<style lang=\"scss\">\n    .aa-autorec-headerButton02 label {\n        font-size: small;\n    }\n    .aa-autorec-headerButton02 {\n        display: grid;\n        grid-template-columns: 33.33% 33.33% 33.33%;\n        margin-right: 6%;\n        margin-left: 3%;\n        grid-gap: 2%;\n        grid-template-rows: 30px;\n        padding-bottom: 5px;\n        text-align: center;\n        align-items: center;\n        color: black;\n    }\n    .sectionButton {\n        background: rgba(0, 0, 0, 0.17);\n        padding: 0.2em;\n        border-radius: 1em;\n    }\n    .sectionButton:hover {\n        background: rgba(0, 0, 0, 0.25);\n        text-shadow: 0 0 1px rgba(255, 0, 0, 0.427);\n        zoom: 1.05;\n    }\n</style>\n","<script>\n    /**\n     * Credit to Wasp for the Compendium macro filtering!\n     */\n    import { localize } from \"#runtime/util/i18n\";\n    import { writable } from \"svelte/store\";\n    import { getContext }   from \"svelte\";\n\n    //export let animation;\n    //export let category;\n    let { animation, category } = getContext('animation-data');\n\n    $: macro = $animation.macro.name;\n\n    export let macro;\n\n    let macros = writable([]);\n\n    const id = foundry.utils.randomID() + \"-list\";\n\n    function filterMacros() {\n\n      let allResults = Array.from(game.macros)\n        .map(m => ({\n          id: m.id,\n          name: m.name\n        }));\n\n      const compendiums = Array.from(game.packs)\n        .filter(pack => pack.documentName === \"Macro\")\n        .map(pack => ({\n          id: pack.metadata.id,\n          name: \"Compendium.\" + pack.metadata.id\n        }))\n\n      allResults = allResults.concat(compendiums);\n\n      allResults = allResults.filter(m => {\n        return m.name?.toLowerCase().includes(macro?.toLowerCase()) || !macro\n      })\n\n      if (macro?.startsWith(\"Compendium.\") && allResults.length === 1) {\n        allResults = Array.from(game.packs.get(allResults[0].id).index).map(m => {\n          return {\n            id: allResults[0].id + \".\" + m._id,\n            name: allResults[0].name + \".\" + m.name\n          }\n        });\n      }\n      macros.set(allResults);\n    }\n</script>\n\n<div class=\"aa-flexrow\">\n    <input type=\"text\"\n        class=\"aa-MacroInput\"\n           list={id}\n           bind:value={$animation.macro.name}\n           style=\"flex:1; margin-right:5px;\"\n           placeholder={localize('autoanimations.menus.insertMacro')}\n           on:keyup={() => { filterMacros() }}\n           on:change={() => { filterMacros() }}\n           on:focus={() => filterMacros()}\n    />\n    <datalist id={id}>\n      {#each $macros as m (m.id)}\n        <option value={m.name}>{m.text ?? \"\"}</option>\n      {/each}\n    </datalist>\n    <i title=\"Open Macro\"\n       style=\"font-size: 20px; flex:0;\"\n       class=\"fas fa-edit aa-zoom\"\n       on:click={() => category.openMacro(animation._data.macro.name)}\n       role=presentation>\n    </i>\n</div>\n\n<style>\n    .aa-MacroInput {\n        height: 1em;\n        padding: 10px;\n        font-size: 14px;\n    }\n    .aa-flexrow {\n        display:flex;\n        flex-direction: row;\n        flex-wrap: wrap;\n        justify-content: flex-start;\n        margin-bottom: .25em;\n    }\n</style>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n    import { getContext }   from \"svelte\";\n    import AutoCompleteMacro from \"./AutoCompleteMacro.svelte\";\n\n    //export let animation;\n    //export let category;\n\n    let { animation, category } = getContext('animation-data');\n\n    function removeMetaData() {\n       delete $animation.metaData\n   }\n</script>\n\n<div class=\"aa-macro-border\">\n    <div style=\"padding-top: 3px\">\n        <h1>{localize(\"autoanimations.menus.macro\")}</h1>\n    </div>\n    <div class=\"aa-macro\">\n        <div class=\"flexcol\" style=\"grid-row: 1 / 2;grid-column: 2 / 3;\">\n            <label for=\"\">{localize(\"autoanimations.menus.playwhen\")}</label>\n            <select\n                bind:value={$animation.macro.playWhen}\n                style=\"text-align: center;width: 100%;\"\n                on:change={() => removeMetaData()}\n            >\n                <option value=\"0\"\n                    >{localize(\"autoanimations.menus.macroconcurrent\")}</option\n                >\n                <option value=\"1\"\n                    >{localize(\"autoanimations.menus.awaitmacro\")}</option\n                >\n                <option value=\"2\"\n                    >{localize(\"autoanimations.menus.macroonly\")}</option\n                >\n                <option value=\"3\"\n                >{localize(\"autoanimations.menus.await\")} {localize(\"autoanimations.menus.animation\")}</option\n                >\n            </select>\n        </div>\n    </div>\n    <AutoCompleteMacro {animation} {category}/>\n    <div style='text-align:center'>\n        <label for=\"\">{localize(\"autoanimations.menus.args\")}</label>\n    </div>\n    <div class=\"flexrow\">\n        <textarea bind:value={$animation.macro.args} style=\"margin-bottom: 1em\"></textarea>\n    </div>\n\n</div>\n\n<style lang=\"scss\">\n    .aa-macro {\n        display: grid;\n        grid-template-columns: 20% 60% 20%;\n        grid-gap: 5px;\n        align-items: center;\n        margin-right: 2%;\n        margin-bottom: 1em;\n        font-size: medium;\n    }\n    .aa-macro select {\n        text-align: center;\n        min-height: 2em;\n        border-radius: 10px;\n        align-self: center;\n    }\n    h1 {\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-size: x-large;\n        font-weight: bold;\n        text-align: center;\n        margin-right: 5%;\n        margin-left: 5%;\n    }\n    .aa-macro-border {\n        padding-left: 5%;\n        padding-right: 5%;\n        margin-right: 3%;\n        margin-left: 3%;\n        border: 3px solid rgba(21, 86, 21, 0.6);\n        border-radius: 5px;\n        background: rgb(200 200 200);\n        margin-bottom: 5px;\n        label {\n            align-self: center;\n            font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n            font-size: 20px;\n        }\n    }\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize } from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    //import SoundSettings from \"./SoundSettings.svelte\";\n    import VideoSelect from \"./VideoSelect.svelte\";\n    import Sound from \"./SoundSettings.svelte\"\n\n    import { aaReturnWeapons } from \"../../../database/jb2a-menu-options.js\"\n\n    import { gameSettings } from \"#gameSettings\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n\n    let { animation, category, idx } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folderOptions = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    const title = \"Switch Animation\";\n\n    $: switchType = $animation.meleeSwitch.options.switchType;\n    $: disableSection = switchType !== \"custom\";\n    $: detect = $animation.meleeSwitch.options.detect;\n\n    //$: shouldShow = menuType === \"weapon\" && aaReturnWeapons.includes(anim) ? true : false;\n    $: anim = $animation.primary.video.animation;\n    $: switchAnim = $animation.meleeSwitch.video.animation;\n    $: shouldShow = switchType === \"on\" ? aaReturnWeapons.includes(anim) : switchType === \"custom\" ? aaReturnWeapons.includes(switchAnim) : false;\n</script>\n\n<div class=\"aa-sound-border\">\n    <TJSSvgFolder folder={folderOptions} label=\"Range Switch\" animate={$uiAnimation}>\n        <div\n            slot=\"summary-end\"\n            style=\"position:relative; left: 10px\"\n            class=\"flexcol\"\n        >\n            <select\n                bind:value={$animation.meleeSwitch.options.switchType}\n                style=\"width:6em\"\n            >\n                <option value=\"on\"\n                    >{localize(\"autoanimations.settings.ON\")}</option\n                >\n                <option value=\"off\"\n                    >{localize(\"autoanimations.settings.OFF\")}</option\n                >\n                <option value=\"custom\"\n                    >{localize(\"autoanimations.menus.custom\")}</option\n                >\n            </select>\n        </div>\n        <div class={disableSection ? \"aa-disableOpacity\" : \"\"}>\n            <VideoSelect\n                {animation}\n                section=\"meleeSwitch\"\n                {title}\n                {idx}\n                {category}\n            />\n        </div>\n        <div class={switchType === \"off\" ? \"aa-disableOpacity\" : \"\"}>\n            <div class=\"aa-options-border\">\n                <table class=\"d\">\n                    <tr>\n                        <td>\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\n                                        \"autoanimations.menus.rangeDetect\"\n                                    )}</label\n                                >\n                            </div>\n                            <div class=\"flexcol\">\n                                <select\n                                    bind:value={$animation.meleeSwitch.options\n                                        .detect}\n                                    style=\"margin:auto\"\n                                >\n                                    <option value=\"automatic\"\n                                        >{localize(\n                                            \"autoanimations.menus.automatic\"\n                                        )}</option\n                                    >\n                                    <option value=\"manual\"\n                                        >{localize(\n                                            \"autoanimations.menus.manual\"\n                                        )}</option\n                                    >\n                                </select>\n                            </div>\n                        </td>\n                        <td>\n                            <div\n                                class={detect === \"automatic\"\n                                    ? \"aa-disableOpacity\"\n                                    : \"\"}\n                            >\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.gridSquares\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.meleeSwitch\n                                            .options.range}\n                                        placeholder=\"2\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td>\n                            <!--Set Return animation-->\n                            <div class={`form-group ${shouldShow ? \"\" : \"aa-disableOpacity\"}`}>\n                                <label for=\"OnlyX {animation._data.id}\"\n                                    >{localize(\"autoanimations.menus.return\")} {localize(\"autoanimations.menus.animation\")}\n                                </label>\n                                <input\n                                    type=\"checkbox\"\n                                    id=\"OnlyX {animation._data.id}\"\n                                    bind:checked={$animation.meleeSwitch.options.isReturning}\n                                />\n                            </div>\n                        </td>\n                    </tr>\n                </table>\n            </div>\n        </div>\n        <div class={switchType === \"off\" ? \"aa-disableOpacity\" : \"\"}>\n            <Sound {animation} {category} {idx} section=\"meleeSwitch\" />\n        </div>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize } from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import { gameSettings } from \"#gameSettings\";\n\n    //export let animation;\n    //export let category;\n    export let section;\n    export let section02;\n    //export let idx;\n\n    let { animation, category, idx } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    // If the Sound object was not set, set it now\n    if (!$animation[section][section02].sound) {\n        $animation[section][section02].sound = {\n            enable: false,\n            delay: 0,\n            file: \"\",\n            repeat: 1,\n            repeatDelay: 250,\n            startTime: 0,\n            volume: 0.75\n        }\n    }\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    $: isValid = $animation[section][section02].sound.file && $animation[section][section02].sound.enable\n\n    function checkMeta() {\n        delete $animation.metaData\n    }\n\n</script>\n\n<div class=\"aa-sound-border\">\n    <TJSSvgFolder\n        {folder}\n        label={localize(\"autoanimations.menus.sound\")}\n        animate={$uiAnimation}\n    >\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Sound On/Off\"\n                bind:checked={$animation[section][section02].sound.enable}\n                on:change={() => checkMeta()}\n            />\n        </div>\n        <div class={!$animation[section][section02].sound.enable ? \"aa-disableOpacity\" : \"\"}>\n            <div class=\"aa-Sound-container\">\n                <div style=\"grid-row: 1/2; grid-column: 1/2\">\n                        <i\n                            class={`fas fa-music aa-blue ${isValid ? \"\" : \"aa-disableOpacity\"}`}\n                            style=\"font-size: 1.5em;\"\n                            title=\"Play Sound\"\n                            on:click={() => category.playSound(animation._data[section][section02].sound)}\n                            role=presentation\n                        />\n                </div>\n                <div style=\"grid-row: 1/2; grid-column: 2/3\">\n                    <input\n                        type=\"text\"\n                        bind:value={$animation[section][section02].sound.file}\n                        style=\"font-weight:normal; font-size:small\"\n                    />\n                </div>\n                <div style=\"grid-row: 1/2; grid-column: 3/4\">\n                    <i class=\"fas fa-file-import\"\n                       title=\"File Picker\"\n                       style=\"font-size:1.5em\"\n                       on:click|preventDefault={() => category.selectSoundNested(section, section02, idx)}\n                       role=presentation\n                    />\n                </div>\n            </div>\n            <table class=\"d\">\n                <tr>\n                    <td>\n                        <!--Set Start Time-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.start\")}\n                                {localize(\"autoanimations.menus.time\")} (ms)</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section][section02].sound.startTime}\n                                placeholder=\"0\"\n                                step=\"0.01\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Volume-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.volume\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section][section02].sound.volume}\n                                placeholder=\"0.5\"\n                                step=\"0.01\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Delay-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.delay\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section][section02].sound.delay}\n                                placeholder=\"0\"\n                                step=\"0.01\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <!--Set Repeats-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.repeat\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section][section02].sound.repeat}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Repeat Delay-->\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.repeat\")} {localize(\"autoanimations.menus.delay\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation[section][section02].sound.repeatDelay}\n                                placeholder=\"250\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"./inputComponents/NumberInput.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import ScaleRadius          from \"./inputComponents/ScaleRadius.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n    import WaitDelay            from \"./inputComponents/WaitDelay.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1.em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\"\n        },\n        clickPropagate: false\n    }\n\n    $: isRadius = $animation.secondary.options.isRadius;\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"ontoken\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation {animation} section=\"secondary\" />\n                </td>\n                <td>\n                    <!--Set Number of times the animation plays-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\")}\n                        section=\"secondary\"\n                        field=\"repeat\"\n                    />\n                </td>\n                <td>\n                    <!--Set delay between repeats-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.delay\")}\n                        section=\"secondary\"\n                        field=\"repeatDelay\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Masking-->\n                    <div>\n                        <label for=\"EMasked {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.mask\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"EMasked {animation._data.id}\"\n                            bind:checked={$animation.secondary.options.isMasked}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} section=\"secondary\"/>\n                </td>\n                <td>\n                    <!--Set the Z-Index of the Animation-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.z-index\")}\n                        section=\"secondary\"\n                        field=\"zIndex\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Size of Animation-->\n                    <ScaleRadius\n                        {animation}\n                        section=\"secondary\"\n                        field=\"size\"\n                        placeholder=\"1.5\"\n                        step=\"0.01\"\n                    />\n                </td>\n                <td>\n                    <!--Add Token Width-->\n                    <div class={isRadius ? \"\" : \"aa-disableOpacity\"}>\n                        <label for=\"Width2 {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.add\")}\n                            {localize(\"autoanimations.menus.token\")}\n                            {localize(\"autoanimations.menus.width\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Width2 {animation._data.id}\"\n                            bind:checked={$animation.secondary.options.addTokenWidth}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeIn\")}\n                    section=\"secondary\"\n                    field=\"fadeIn\"\n                    placeholder=250\n                />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeOut\")}\n                    section=\"secondary\"\n                    field=\"fadeOut\"\n                    placeholder=250\n                />\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.anchor\")}</label>\n                    </div>\n                    <div>\n                        <input type=\"text\" placeholder=\"0.5\" bind:value={$animation.secondary.options.anchor}>\n                    </div>\n                </td>\n                <td>\n                    <!--Set Masking-->\n                    <div>\n                        <label for=\"SecRotate {animation._data.id}\"\n                            >{localize('autoanimations.menus.sideImpact')}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"SecRotate {animation._data.id}\"\n                            bind:checked={$animation.secondary.options.rotateSource}\n                        />\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"secondary\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n                <td>\n                    <!--Set Delay for proceeding animation-->\n                    <WaitDelay\n                        {animation}\n                        section=\"secondary\"\n                    />\n                </td>\n                <td></td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize } from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import SoundSettings from \"./SoundSettings.svelte\";\n    import VideoSelect from \"./VideoSelect.svelte\";\n    import SecondaryOptions from \"./options/SecondaryOptions.svelte\";\n    import EffectColor from \"./options/EffectColor.svelte\";\n\n    import { gameSettings } from \"#gameSettings\";\n\n    //export let animation;\n    //export let idx;\n    //export let category;\n\n    let { animation, category, idx } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    let title = \"Secondary\" + \" \" + game.i18n.localize(\"autoanimations.menus.animation\")\n\n    const folderOptions = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n    function checkMeta() {\n        delete $animation.metaData\n    }\n\n</script>\n\n<div class=\"aa-section-border\">\n    <TJSSvgFolder\n        folder={folderOptions}\n        label={localize(\"autoanimations.variants.secondary\") + \" \" + localize(\"autoanimations.menus.animation\")}\n        animate={$uiAnimation}\n    >\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Secondary On/Off\"\n                bind:checked={$animation.secondary.enable}\n                on:change={() => checkMeta()}\n            />\n        </div>\n        <div class={!$animation.secondary.enable ? \"aa-isDisabled\" : \"\"}>\n            <VideoSelect {animation} section=\"secondary\" {title} {idx} {category}/>\n            <SecondaryOptions {animation} />\n            <svelte:component this={EffectColor} section=\"secondary\"/>\n            <SoundSettings {animation} {category} {idx} section=\"secondary\" />\n        </div>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n    .aa-isDisabled {\n        pointer-events: none;\n        opacity: 0.4;\n    }\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    let tokenAnimations = game.Levels3DPreview?.CONFIG?.tokenAnimations || {\n        bow: {},\n        breath: {},\n        buff: {},\n        charge: {},\n        debuff: {},\n        knockback: {},\n        shake: {},\n        slash: {},\n        swipe: {},\n        twirl: {},\n    };\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    if (typeof $animation.levels3d.data.autoSize !== \"boolean\") {\n  $animation.levels3d.data.autoSize = true;\n}\n\n    const folder = {\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    const optionsInfo = {\n       icon: \"fas fa-info-circle\",\n       title: \"autoanimations.menus.quickReference\",\n       styles: {\n          \"--tjs-icon-button-diameter\": \"1.em\",\n          position: \"relative\",\n          left: \"10px\",\n          bottom: \"-2px\",\n          color: \"rgba(50, 79, 245, 0.5)\"\n       },\n        clickPropagate: false\n    }\n\n    $: type = $animation.levels3d.type;\n</script>\n{#if type !== \"token\"}\n        <div class=\"aa-options-border\" style=\"margin-top: .5em;\">\n            <h1>Colors</h1>\n            <table class=\"d\" style=\"padding-right: 4em; padding-left: 4em\">\n                <tr>\n                    <td>\n                        <div class=\"flexcol\">\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.color\")} 01\n                            </label>\n                            <input\n                                type=\"Text\"\n                                style=\"width: 10em; margin: auto\"\n                                bind:value={$animation.levels3d.data.color01}\n                            />\n                        </div>\n                        <div class=\"form-group\">\n                            <input\n                                type=\"color\"\n                                data-edit=\"color\"\n                                id=\"tint\"\n                                style=\"width: 10em;margin-left: 0;\"\n                                bind:value={$animation.levels3d.data.color01}\n                            />\n                        </div>\n                    </td>\n                    {#if type !== \"sprite\"}\n                    <td>\n                        <div class=\"flexcol\">\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.color\")} 02\n                            </label>\n                            <input\n                                type=\"Text\"\n                                style=\"width: 10em; margin: auto\"\n                                bind:value={$animation.levels3d.data.color02}\n                            />\n                        </div>\n                        <div class=\"form-group\">\n                            <input\n                                type=\"color\"\n                                data-edit=\"color\"\n                                id=\"tint\"\n                                style=\"width: 10em;margin-left: 0;\"\n                                bind:value={$animation.levels3d.data.color02}\n                            />\n                        </div>\n                    </td>\n                    {/if}\n                </tr>\n            </table>\n        </div>\n    <div class=\"aa-options-border\">\n        <TJSSvgFolder {folder} animate={$uiAnimation}>\n            <div slot=\"summary-end\">\n                <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"canvas3d\")}/>\n            </div>\n            <table class=\"d\">\n                <tr>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\"autoanimations.menus.speed\")}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.speed}\n                                    placeholder=\"5\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\n                                        \"autoanimations.menus.repeat\"\n                                    )}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.repeat}\n                                    placeholder=\"1\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\"autoanimations.menus.delay\")}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.delay}\n                                    placeholder=\"0\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\"autoanimations.menus.scale\")}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.scale}\n                                    placeholder=\"1\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\"autoanimations.menus.arc\")}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.arc}\n                                    placeholder=\"5\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\"autoanimations.menus.alpha\")}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.alpha}\n                                    placeholder=\"0.5\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\n                                        \"autoanimations.menus.gravity\"\n                                    )}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.gravity}\n                                    placeholder=\"0\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\"autoanimations.menus.duration\")}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.duration}\n                                    placeholder=\"3000\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\"autoanimations.menus.life\")}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.life}\n                                    placeholder=\"500\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\n                                        \"autoanimations.menus.emiterSize\"\n                                    )}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data\n                                        .emittersize}\n                                    placeholder=\"0.0001\"\n                                    step=\".0001\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                    <td>\n                        <div class=\"flex-row\">\n                            <div>\n                                <label for=\"\"\n                                    >{localize(\"autoanimations.menus.rate\")}</label\n                                >\n                            </div>\n                            <div>\n                                <input\n                                    type=\"number\"\n                                    bind:value={$animation.levels3d.data.rate}\n                                    placeholder=\"10\"\n                                    step=\".01\"\n                                />\n                            </div>\n                        </div>\n                    </td>\n                    <td>\n                            <label for=\"3dRotateTowards {animation._data.id}\"\n                                >{localize(\"autoanimations.menus.rotateTowards\")}\n                            </label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"3dRotateTowards {animation._data.id}\"\n                                bind:checked={$animation.levels3d.data.rotateTowards}\n                            />\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <label for=\"3dautoSize {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.autoSize\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"3dautoSize {animation._data.id}\"\n                            bind:checked={$animation.levels3d.data.autoSize}\n                        />\n                </td>\n                <td>\n                    <label for=\"3donCenter {animation._data.id}\"\n                        >{localize(\"autoanimations.menus.onCenter\")}\n                    </label>\n                    <input\n                        type=\"checkbox\"\n                        id=\"3donCenter {animation._data.id}\"\n                        bind:checked={$animation.levels3d.data.onCenter}\n                    />\n            </td>\n                </tr>\n                {#if $animation.levels3d.type === \"sprite\"}\n                <tr>\n                    <td>\n                        <div>\n                            <label for=\"\">{localize(\"autoanimations.menus.rotation\")} X</label>\n                        </div>\n                        <div>\n                            <input\n                            type=number\n                            bind:value={$animation.levels3d.data.rotationX}\n                            placeholder=0\n                        />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\">{localize(\"autoanimations.menus.rotation\")} Y</label>\n                        </div>\n                        <div>\n                            <input\n                            type=number\n                            bind:value={$animation.levels3d.data.rotationY}\n                            placeholder=0\n                        />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\">{localize(\"autoanimations.menus.rotation\")} Z</label>\n                        </div>\n                        <div>\n                            <input\n                            type=number\n                            bind:value={$animation.levels3d.data.rotationZ}\n                            placeholder=0\n                        />\n                        </div>\n                    </td>\n                </tr>\n                {/if}\n            </table>\n        </TJSSvgFolder>\n    </div>\n{:else}\n    <h1>{localize(\"autoanimations.menus.token\")} {localize(\"autoanimations.menus.animation\")}</h1>\n    <div class=\"aa-options-border\">\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.type\")}</label>\n                    </div>\n                    <div>\n                        <select\n                            bind:value={$animation.levels3d.data.animationType}\n                        >\n                            {#each Object.keys(tokenAnimations) as tokenAnim}\n                                <option value={tokenAnim}\n                                    >{localize(\n                                        `autoanimations.tokenAnimations.${tokenAnim}`\n                                    )}</option\n                                >\n                            {/each}\n                        </select>\n                    </div>\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.playOn\")}</label>\n                    </div>\n                    <div>\n                        <select\n                            bind:value={$animation.levels3d.data.playOn}\n                        >\n                            <option value=\"source\">{localize(\"autoanimations.menus.source\")}</option>\n                            <option value=\"target\">{localize(\"autoanimations.menus.target\")}</option>\n                            <option value=\"default\">{localize(\"autoanimations.menus.targetDefault\")}</option>\n                            <option value=\"both\">{localize(\"autoanimations.menus.both\")}</option>\n                        </select>\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <div class=\"flex-row\">\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.repeat\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.levels3d.data.repeat}\n                                placeholder=\"1\"\n                                step=\".01\"\n                            />\n                        </div>\n                    </div>\n                </td>\n                <td>\n                    <div class=\"flex-row\">\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.resetTime\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.levels3d.data.resetTime}\n                                placeholder=\"100\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </div>\n                </td>\n            </tr>\n        </table>\n    </div>\n{/if}\n\n<style lang=\"scss\">\n    h1 {\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-size: x-large;\n        font-weight: bold;\n        text-align: center;\n        margin-right: 5%;\n        margin-left: 5%;\n        color: black;\n        margin-top: 5px;\n    }\n</style>\n","<script>\n   import { getContext } from \"svelte\";\n\n   import { localize } from \"#runtime/util/i18n\";\n\n   import { FVTTFilePickerControl } from \"#standard/application/control/filepicker\";\n\n   import { TJSIconButton } from \"#standard/component/button\";\n   import { TJSSvgFolder } from \"#standard/component/folder\";\n\n   import OptionsDialog from \"./optionsInfoDialog.js\";\n\n   import { gameSettings } from \"#gameSettings\";\n\n   //export let animation;\n   let { animation } = getContext(\"animation-data\");\n\n   /**\n    * Game setting store to control folder animation.\n    */\n   const uiAnimation = gameSettings.getStore(\"uiAnimation\");\n\n   if (typeof $animation.levels3d.secondary.data.autoSize !== \"boolean\") {\n      $animation.levels3d.secondary.data.autoSize = true;\n   }\n\n   if (!$animation.levels3d.secondary.data.spritePath) {\n      $animation.levels3d.secondary.data.spritePath = \"modules/levels-3d-preview/assets/particles/dust.png\";\n   }\n\n   let pEffects = game.Levels3DPreview?.CONFIG.PARTICLE_SYSTEMS?.TARGET_ONLY_PARTICLE_SYSTEMS || {};\n\n   const folder = {\n      label: game.i18n.localize(\"autoanimations.menus.options\"),\n      styles: {\n         \"--tjs-summary-font-family\": '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n         \"--tjs-summary-font-size\": \"1.1em\",\n         \"--tjs-summary-chevron-size\": \"0.7em\",\n      },\n   };\n\n   const optionsInfo = {\n      icon: \"fas fa-info-circle\",\n      title: \"autoanimations.menus.quickReference\",\n      styles: {\n         \"--tjs-icon-button-diameter\": \"1.em\",\n         position: \"relative\",\n         left: \"10px\",\n         bottom: \"-2px\",\n         color: \"rgba(50, 79, 245, 0.5)\",\n      },\n      clickPropagate: false,\n   };\n   const folderOptions = {\n      styles: {\n         \"--tjs-summary-font-family\": '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n         \"--tjs-summary-font-size\": \"1.1em\",\n         \"--tjs-summary-chevron-size\": \"0.7em\",\n      },\n   };\n\n   async function selectCustom() {\n      const current = animation._data.levels3d.secondary.data.spritePath;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"any\",\n         current,\n      });\n\n      if (path) {\n         $animation.levels3d.secondary.data.spritePath = path;\n      }\n   }\n\n   $: isEnabled = $animation.levels3d.secondary.enable;\n</script>\n\n<TJSSvgFolder folder={folderOptions} label={localize(\"autoanimations.animations.explosion\")} animate={$uiAnimation}>\n   <div slot=\"summary-end\">\n      <input\n         on:click|stopPropagation\n         type=\"checkbox\"\n         style=\"align-self:center\"\n         title=\"Toggle Secondary On/Off\"\n         bind:checked={$animation.levels3d.secondary.enable}\n      />\n   </div>\n   <div class=\"flexcol\" style=\"align-items: center;\">\n      <label for=\"\">{localize(\"autoanimations.menus.type\")}</label>\n      <select bind:value={$animation.levels3d.secondary.data.type}>\n         {#each Object.keys(pEffects) as effect}\n            <option value={effect}>{localize(`levels3dpreview.particleSystems.${effect}`)}</option>\n         {/each}\n      </select>\n   </div>\n   <table class=\"c\">\n      <tr>\n         <td style=\"width: 6em; border: none;\">\n            <div class=\"flexrow\">\n               <label for=\"\" class=\"aa-customFont\">{localize(\"autoanimations.menus.sprite\")}</label>\n            </div>\n         </td>\n         <td style=\" border: none\">\n            <input\n               type=\"text\"\n               bind:value={$animation.levels3d.secondary.data.spritePath}\n               style=\"font-weight:normal; font-size:small; border-radius: 5px;text-align:left; width: 100%\"\n            />\n         </td>\n         <td style=\"width: 4em;border: none\">\n            <i\n               class=\"fas fa-file-import\"\n               title=\"File Picker\"\n               style=\"font-size:1.5em\"\n               on:click|preventDefault={() => selectCustom()}\n               role=\"presentation\"\n            />\n         </td>\n      </tr>\n   </table>\n   <div class={isEnabled ? \"\" : \"aa-disableOpacity\"}>\n      <div class=\"aa-options-border\" style=\"margin-top: .5em;\">\n         <h1>Colors</h1>\n         <table class=\"d\" style=\"padding-right: 4em; padding-left: 4em\">\n            <tr>\n               <td>\n                  <div class=\"flexcol\">\n                     <label for=\"\">{localize(\"autoanimations.menus.color\")} 01 </label>\n                     <input\n                        type=\"Text\"\n                        style=\"width: 10em; margin: auto\"\n                        bind:value={$animation.levels3d.secondary.data.color01}\n                     />\n                  </div>\n                  <div class=\"form-group\">\n                     <input\n                        type=\"color\"\n                        data-edit=\"color\"\n                        id=\"tint\"\n                        style=\"width: 10em;margin-left: 0;\"\n                        bind:value={$animation.levels3d.secondary.data.color01}\n                     />\n                  </div>\n               </td>\n               <td>\n                  <div class=\"flexcol\">\n                     <label for=\"\">{localize(\"autoanimations.menus.color\")} 02 </label>\n                     <input\n                        type=\"Text\"\n                        style=\"width: 10em; margin: auto\"\n                        bind:value={$animation.levels3d.secondary.data.color02}\n                     />\n                  </div>\n                  <div class=\"form-group\">\n                     <input\n                        type=\"color\"\n                        data-edit=\"color\"\n                        id=\"tint\"\n                        style=\"width: 10em;margin-left: 0;\"\n                        bind:value={$animation.levels3d.secondary.data.color02}\n                     />\n                  </div>\n               </td>\n            </tr>\n         </table>\n      </div>\n      <div class=\"aa-options-border\">\n         <TJSSvgFolder {folder} animate={$uiAnimation}>\n            <div slot=\"summary-end\">\n               <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"canvas3d\")} />\n            </div>\n\n            <table class=\"d\">\n               <tr>\n                  <td>\n                     <div class=\"flex-row\">\n                        <div>\n                           <label for=\"\">{localize(\"autoanimations.menus.speed\")}</label>\n                        </div>\n                        <div>\n                           <input\n                              type=\"number\"\n                              bind:value={$animation.levels3d.secondary.data.speed}\n                              placeholder=\"5\"\n                              step=\".01\"\n                           />\n                        </div>\n                     </div>\n                  </td>\n                  <td>\n                     <div class=\"flex-row\">\n                        <div>\n                           <label for=\"\">{localize(\"autoanimations.menus.scale\")}</label>\n                        </div>\n                        <div>\n                           <input\n                              type=\"number\"\n                              bind:value={$animation.levels3d.secondary.data.scale}\n                              placeholder=\"0.7\"\n                              step=\".01\"\n                           />\n                        </div>\n                     </div>\n                  </td>\n                  <td>\n                     <div class=\"flex-row\">\n                        <div>\n                           <label for=\"\">{localize(\"autoanimations.menus.alpha\")}</label>\n                        </div>\n                        <div>\n                           <input\n                              type=\"number\"\n                              bind:value={$animation.levels3d.secondary.data.alpha}\n                              placeholder=\"0.5\"\n                              step=\".01\"\n                           />\n                        </div>\n                     </div>\n                  </td>\n               </tr>\n               <tr>\n                  <td>\n                     <div class=\"flex-row\">\n                        <div>\n                           <label for=\"\">{localize(\"autoanimations.menus.gravity\")}</label>\n                        </div>\n                        <div>\n                           <input\n                              type=\"number\"\n                              bind:value={$animation.levels3d.secondary.data.gravity}\n                              placeholder=\"0\"\n                              step=\".01\"\n                           />\n                        </div>\n                     </div>\n                  </td>\n                  <td>\n                     <div class=\"flex-row\">\n                        <div>\n                           <label for=\"\">{localize(\"autoanimations.menus.duration\")}</label>\n                        </div>\n                        <div>\n                           <input\n                              type=\"number\"\n                              bind:value={$animation.levels3d.secondary.data.duration}\n                              placeholder=\"3000\"\n                              step=\".01\"\n                           />\n                        </div>\n                     </div>\n                  </td>\n                  <td>\n                     <div class=\"flex-row\">\n                        <div>\n                           <label for=\"\">{localize(\"autoanimations.menus.life\")}</label>\n                        </div>\n                        <div>\n                           <input\n                              type=\"number\"\n                              bind:value={$animation.levels3d.secondary.data.life}\n                              placeholder=\"500\"\n                              step=\".01\"\n                           />\n                        </div>\n                     </div>\n                  </td>\n               </tr>\n               <tr>\n                  <td>\n                     <div class=\"flex-row\">\n                        <div>\n                           <label for=\"\">{localize(\"autoanimations.menus.emiterSize\")}</label>\n                        </div>\n                        <div>\n                           <input\n                              type=\"number\"\n                              bind:value={$animation.levels3d.secondary.data.emittersize}\n                              placeholder=\"0.0001\"\n                              step=\".0001\"\n                           />\n                        </div>\n                     </div>\n                  </td>\n                  <td>\n                     <div class=\"flex-row\">\n                        <div>\n                           <label for=\"\">{localize(\"autoanimations.menus.rate\")}</label>\n                        </div>\n                        <div>\n                           <input\n                              type=\"number\"\n                              bind:value={$animation.levels3d.secondary.data.rate}\n                              placeholder=\"10\"\n                              step=\".01\"\n                           />\n                        </div>\n                     </div>\n                  </td><td>\n                     <label for=\"3dautoSize {animation._data.id}\">{localize(\"autoanimations.menus.autoSize\")} </label>\n                     <input\n                        type=\"checkbox\"\n                        id=\"3dautoSize {animation._data.id}\"\n                        bind:checked={$animation.levels3d.secondary.data.autoSize}\n                     />\n                  </td>\n               </tr>\n               <tr>\n                  <td>\n                     <label for=\"3donCenter {animation._data.id}\">{localize(\"autoanimations.menus.onCenter\")} </label>\n                     <input\n                        type=\"checkbox\"\n                        id=\"3donCenter {animation._data.id}\"\n                        bind:checked={$animation.levels3d.secondary.data.onCenter}\n                     />\n                  </td>\n                  <td></td>\n                  <td></td>\n               </tr>\n            </table>\n         </TJSSvgFolder>\n      </div>\n   </div>\n</TJSSvgFolder>\n\n<style lang=\"scss\">\n   h1 {\n      font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n      font-size: x-large;\n      font-weight: bold;\n      text-align: center;\n      margin-right: 5%;\n      margin-left: 5%;\n      color: black;\n      margin-top: 5px;\n   }\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize }     from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import { gameSettings } from \"#gameSettings\";\n\n    //export let animation;\n    let { animation } = getContext(\"animation-data\");\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1.em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\",\n        },\n        clickPropagate: false,\n    };\n    const folderOptions = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    let tokenAnimations = game.Levels3DPreview?.CONFIG?.tokenAnimations || {\n        bow: {},\n        breath: {},\n        buff: {},\n        charge: {},\n        debuff: {},\n        knockback: {},\n        shake: {},\n        slash: {},\n        swipe: {},\n        twirl: {},\n    };\n\n    if (!$animation.levels3d.tokens) {\n        $animation.levels3d.tokens = {\n            enable: false,\n            source: false,\n            target: false,\n            sourceType: \"twirl\",\n            sourcePlay: \"start\",\n            targetType: \"shake\",\n            targetPlay: \"end\"\n        };\n    }\n\n    $: isEnabled = $animation.levels3d.tokens.enable;\n</script>\n\n<TJSSvgFolder folder={folderOptions} label={`${localize(\"autoanimations.menus.token\")} ${localize(\"autoanimations.menus.animation\")}`} animate={$uiAnimation}>\n    <div slot=\"summary-end\">\n        <input\n            on:click|stopPropagation\n            type=\"checkbox\"\n            style=\"align-self:center\"\n            title=\"Toggle Secondary On/Off\"\n            bind:checked={$animation.levels3d.tokens.enable}\n        />\n    </div>\n    <div class=\"aa-options-border {isEnabled ? '' : 'aa-disableOpacity'}\">\n        <table class=\"c\">\n            <tr>\n                <td>\n                    <div>\n                        <label for=\"3DSourceAnim {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.source\")} {localize(\"autoanimations.menus.token\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            style=\"margin: auto\"\n                            id=\"3DSourceAnim {animation._data.id}\"\n                            bind:checked={$animation.levels3d.tokens.source}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <div\n                        class={$animation.levels3d?.tokens?.source\n                            ? \"\"\n                            : \"aa-disableOpacity\"}\n                    >\n                        <div>\n                            <label for=\"\">{localize(\"autoanimations.menus.type\")}</label>\n                        </div>\n                        <div>\n                            <select\n                                bind:value={$animation.levels3d.tokens.sourceType}\n                            >\n                                {#each Object.keys(tokenAnimations) as sourceAnim}\n                                    <option value={sourceAnim}\n                                        >{localize(\n                                            `autoanimations.tokenAnimations.${sourceAnim}`\n                                        )}</option\n                                    >\n                                {/each}\n                            </select>\n                        </div>\n                    </div>\n                </td>\n                <td>\n                    <div\n                        class={$animation.levels3d?.tokens?.source\n                            ? \"\"\n                            : \"aa-disableOpacity\"}\n                    >\n                        <div>\n                            <label for=\"\">{localize(\"autoanimations.menus.playOn\")}</label>\n                        </div>\n                        <div>\n                            <select\n                            bind:value={$animation.levels3d.tokens.sourcePlay}\n                            >\n                                <option value=\"start\">{localize(`autoanimations.menus.start`)}</option>\n                                <option value=\"end\">{localize(`autoanimations.menus.end`)}</option>\n                                <option value=\"both\">{localize(`autoanimations.menus.both`)}</option>\n                            </select>\n                        </div>\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <label for=\"3DTargetAnim {animation._data.id}\"\n                        >{localize(\"autoanimations.menus.target\")} {localize(\"autoanimations.menus.token\")}\n                    </label>\n                    <input\n                        type=\"checkbox\"\n                        style=\"margin: auto\"\n                        id=\"3DTargetAnim {animation._data.id}\"\n                        bind:checked={$animation.levels3d.tokens.target}\n                    />\n                </td>\n                <td>\n                    <div\n                        class={$animation.levels3d?.tokens?.target\n                            ? \"\"\n                            : \"aa-disableOpacity\"}\n                    >\n                        <div>\n                            <label for=\"\">{localize(\"autoanimations.menus.type\")}</label>\n                        </div>\n                        <div>\n                            <select\n                                bind:value={$animation.levels3d.tokens.targetType}\n                            >\n                                {#each Object.keys(tokenAnimations) as targetAnim}\n                                    <option value={targetAnim}\n                                        >{localize(\n                                            `autoanimations.tokenAnimations.${targetAnim}`\n                                        )}</option\n                                    >\n                                {/each}\n                            </select>\n                        </div>\n                    </div>\n                </td>\n                <td>\n                    <div\n                        class={$animation.levels3d?.tokens?.target\n                            ? \"\"\n                            : \"aa-disableOpacity\"}\n                    >\n                        <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.playOn\")}</label>\n                        </div>\n                        <div>\n                            <select\n                                bind:value={$animation.levels3d.tokens.targetPlay}\n                            >\n                                <option value=\"start\">{localize(`autoanimations.menus.start`)}</option>\n                                <option value=\"end\">{localize(`autoanimations.menus.end`)}</option>\n                                <option value=\"both\">{localize(`autoanimations.menus.both`)}</option>\n                            </select>\n                        </div>\n                    </div>\n                </td>\n            </tr>\n        </table>\n    </div>\n</TJSSvgFolder>\n\n<style lang=\"scss\">\n</style>\n","<script>\n   import { getContext } from \"svelte\";\n\n   import { localize } from \"#runtime/util/i18n\";\n\n   import { FVTTFilePickerControl } from \"#standard/application/control/filepicker\";\n\n   import Canvas3dOptions from \"./options/Canvas3dOptions.svelte\";\n   import Canvas3DSecondary from \"./options/Canvas3DSecondary.svelte\";\n   import Canvas3DTokenAnimation from \"./options/Canvas3DAnimation.svelte\";\n\n   import SoundSettings from \"./SoundSettings.svelte\";\n\n   //export let animation;\n   //export let category;\n   //export let idx\n   let { animation, category, idx } = getContext(\"animation-data\");\n\n   let pEffects = game.Levels3DPreview?.CONFIG.PARTICLE_SYSTEMS?.ALL_PARTICLE_SYSTEMS_WITHOPTS || {};\n\n   function setSprite(type) {\n      let spritePath;\n      switch (type) {\n         case \"explosion\":\n            spritePath = \"modules/levels-3d-preview/assets/particles/dust.png\";\n            break;\n         case \"sprite\":\n            spritePath = \"modules/canvas3dcompendium/assets/Tiles/RPG%20Items/Arrow_Golden.glb\";\n            break;\n         default:\n            spritePath = \"modules/levels-3d-preview/assets/particles/emberssmall.png\";\n      }\n      $animation.levels3d.data.spritePath = spritePath;\n   }\n\n   async function selectCustom() {\n      const current = animation._data.levels3d.data.spritePath;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"any\",\n         current,\n      });\n\n      if (path) {\n         $animation.levels3d.data.spritePath = path;\n      }\n   }\n\n   $: type = $animation.levels3d.type;\n   $: isEnabled = $animation.levels3d.enable;\n</script>\n\n<h1>3D Canvas Particle Animations</h1>\n<h3>Requires the 3D Canvas Module by Ripper</h3>\n<table class=\"c\">\n   <td style=\"width: 20%; vertical-align: bottom; border:none\">\n      <div class=\"flexrow\">\n         <label for=\"Canvas3D {animation._data.id}\">Enable</label>\n         <input\n            type=\"checkbox\"\n            style=\"position:relative; left: -10px\"\n            id=\"Canvas3D {animation._data.id}\"\n            bind:checked={$animation.levels3d.enable}\n         />\n      </div>\n   </td>\n   <td style=\"width: 60%; border:none\" class={isEnabled ? \"\" : \"aa-disableOpacity\"}>\n      <div class=\"flexcol\" style=\"align-items: center;\">\n         <label for=\"\">{localize(\"autoanimations.menus.type\")}</label>\n         <select bind:value={$animation.levels3d.type} on:change={() => setSprite(animation._data.levels3d.type)}>\n            <option value=\"token\"\n               >{localize(`autoanimations.menus.token`)} {localize(`autoanimations.menus.animation`)}</option\n            >\n            {#each Object.keys(pEffects) as effect}\n               {#if effect.includes(\"optgroup\")}\n                  <optgroup label={localize(`levels3dpreview.particleSystems.${effect}`)} />\n               {:else}\n                  <option value={effect}>{localize(`levels3dpreview.particleSystems.${effect}`)}</option>\n               {/if}\n            {/each}\n         </select>\n      </div>\n   </td>\n   <td style=\"width: 20%; border:none\" />\n</table>\n<div class=\"aa-section-border {isEnabled ? '' : 'aa-disableOpacity'}\">\n   {#if type !== \"token\"}\n      <table class=\"c\">\n         <tr>\n            <td style=\"width: 6em; border: none;\">\n               <div class=\"flexrow\">\n                  <label for=\"\" class=\"aa-customFont\">{localize(\"autoanimations.menus.sprite\")}</label>\n               </div>\n            </td>\n            <td style=\" border: none\">\n               <input\n                  type=\"text\"\n                  bind:value={$animation.levels3d.data.spritePath}\n                  style=\"font-weight:normal; font-size:small; border-radius: 5px;text-align:left; width: 100%\"\n               />\n            </td>\n            <td style=\"width: 4em;border: none\">\n               <i\n                  class=\"fas fa-file-import\"\n                  title=\"File Picker\"\n                  style=\"font-size:1.5em\"\n                  on:click|preventDefault={() => selectCustom()}\n                  role=\"presentation\"\n               />\n            </td>\n         </tr>\n      </table>\n   {/if}\n   <Canvas3dOptions {animation} />\n   <SoundSettings {animation} {category} {idx} section=\"levels3d\" />\n</div>\n{#if type !== \"token\"}\n   <div class=\"aa-section-border {isEnabled ? '' : 'aa-disableOpacity'}\">\n      <Canvas3DSecondary {animation} />\n   </div>\n   <div class=\"aa-section-border {isEnabled ? '' : 'aa-disableOpacity'}\">\n      <Canvas3DTokenAnimation {animation} />\n   </div>\n{/if}\n\n<style lang=\"scss\">\n   h1 {\n      font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n      font-size: x-large;\n      font-weight: bold;\n      text-align: center;\n      margin-right: 5%;\n      margin-left: 5%;\n      color: black;\n      margin-top: 5px;\n   }\n   h3 {\n      font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n      font-size: medium;\n      text-align: center;\n      margin-right: 5%;\n      margin-left: 5%;\n      color: black;\n      border: none;\n   }\n\n   table.c label {\n      margin-top: 0.2em;\n      font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n      font-weight: bold;\n      font-size: 1.5em;\n   }\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"./inputComponents/NumberInput.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n    import WaitDelay            from \"./inputComponents/WaitDelay.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1.em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\"\n        },\n        clickPropagate: false\n    }\n\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"melee\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation {animation} section=\"primary\" />\n                </td>\n                <td>\n                    <!--Set Number of times the animation plays-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\")}\n                        section=\"primary\"\n                        field=\"repeat\"\n                    />\n                </td>\n                <td>\n                    <!--Set delay between repeats-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.delay\")}\n                        section=\"primary\"\n                        field=\"repeatDelay\"\n                        placeholder=\"250\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} />\n                </td>\n                <td>\n                    <!--Set the Z-Index of the Animation-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.z-index\")}\n                        section=\"primary\"\n                        field=\"zIndex\"\n                    />\n                </td>\n                <td>\n                    <!--Set Scale of Animation. Not rendered if Anim Type is Templates-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.scale\")}\n                        section=\"primary\"\n                        field=\"size\"\n                        step=\"0.01\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"primary\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n                <td>\n                    <WaitDelay {animation}/>\n                </td>\n                <td></td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"./inputComponents/NumberInput.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n    import WaitDelay            from \"./inputComponents/WaitDelay.svelte\";\n\n    import { aaReturnWeapons }  from \"../../../../database/jb2a-menu-options.js\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    //export let category;\n    let { animation, category} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1.em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\"\n        },\n        clickPropagate: false\n    }\n\n    $: menuType = $animation.primary.video.menuType;\n    $: anim = $animation.primary.video.animation;\n    $: shouldShow = menuType === \"weapon\" && aaReturnWeapons.includes(anim) ? true : false;\n    $: isCustom = $animation.primary.video.enableCustom;\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"range\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation {animation} section=\"primary\" />\n                </td>\n                <td>\n                    <!--Set Number of times the animation plays-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\")}\n                        section=\"primary\"\n                        field=\"repeat\"\n                    />\n                </td>\n                <td>\n                    <!--Set delay between repeats-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.delay\")}\n                        section=\"primary\"\n                        field=\"repeatDelay\"\n                        placeholder=\"250\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set OnlyX-->\n                    <div class={isCustom ? \"\" : \"aa-disableOpacity\"}>\n                        <label for=\"OnlyX {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.only\")} X\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"OnlyX {animation._data.id}\"\n                            bind:checked={$animation.primary.options.onlyX}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} />\n                </td>\n                <td>\n                    <!--Set the Z-Index of the Animation-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.z-index\")}\n                        section=\"primary\"\n                        field=\"zIndex\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Return animation-->\n                    <div class={shouldShow ? \"\" : \"aa-disableOpacity\"}>\n                        <label for=\"OnlyX {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.return\")} {localize(\"autoanimations.menus.animation\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"OnlyX {animation._data.id}\"\n                            bind:checked={$animation.primary.options.isReturning}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Random Offset-->\n                    <div>\n                        <label for=\"RandomOffset {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.randomOffset\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"RandomOffset {animation._data.id}\"\n                            bind:checked={$animation.primary.options.randomOffset}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"primary\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Reverse Animation (Switch Source/Target)-->\n                    <div>\n                        <label for=\"TempSource {animation._data.id}\"\n                            >{localize(\"autoanimations.animations.reverse\")} {localize(\"autoanimations.menus.animation\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"TempSource {animation._data.id}\"\n                            bind:checked={$animation.primary.options.reverse}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <WaitDelay {animation}/>\n                </td>\n                {#if category.stores.animationSourceOption}\n                <td>\n                    <!--Set Source as Template Animation: EXPERITMENTAL-->\n                    <div>\n                        <label for=\"TempSource {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.animation\")} {localize(\"autoanimations.menus.source\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"TempSource {animation._data.id}\"\n                            bind:checked={$animation.primary.options.animationSource}\n                        />\n                    </div>\n                </td>\n                {:else}\n                <td></td>\n                {/if}\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"./inputComponents/NumberInput.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import ScaleRadius          from \"./inputComponents/ScaleRadius.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n    import WaitDelay            from \"./inputComponents/WaitDelay.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1.em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\"\n        },\n        clickPropagate: false\n    }\n\n    $: persistent = $animation.primary.options.persistent;\n    $: isRadius = $animation.primary.options.isRadius;\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"ontoken\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation {animation} section=\"primary\" />\n                </td>\n                <td>\n                    <!--Set Number of times the animation plays-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\")}\n                        section=\"primary\"\n                        field=\"repeat\"\n                        isDisabled={persistent ? \"aa-disableOpacity\" : \"\"}\n                    />\n                </td>\n                <td>\n                    <!--Set delay between repeats-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.delay\")}\n                        section=\"primary\"\n                        field=\"repeatDelay\"\n                        isDisabled={persistent ? \"aa-disableOpacity\" : \"\"}\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Persistence-->\n                        <label for=\"Persist {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.persistant\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Persist {animation._data.id}\"\n                            bind:checked={$animation.primary.options.persistent}\n                        />\n                </td>\n                <td>\n                    <!--Set Visibility Binding-->\n                    <div\n                        class=\"{persistent\n                            ? ''\n                            : 'aa-disableOpacity'}\"\n                    >\n                        <label for=\"Vis {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\")}\n                            {localize(\"autoanimations.menus.visibility\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Vis {animation._data.id}\"\n                            bind:checked={$animation.primary.options\n                                .unbindVisibility}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Alpha Binding-->\n                    <div\n                        class=\"{persistent\n                            ? ''\n                            : 'aa-disableOpacity'}\"\n                    >\n                        <label for=\"Alpha {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\")}\n                            {localize(\"autoanimations.menus.alpha\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Alpha {animation._data.id}\"\n                            bind:checked={$animation.primary.options\n                                .unbindAlpha}\n                        />\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Masking-->\n                    <div>\n                        <label for=\"Masked {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.mask\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Masked {animation._data.id}\"\n                            bind:checked={$animation.primary.options.isMasked}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} />\n                </td>\n                <td>\n                    <!--Set Z-Index of Animation-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.z-index\")}\n                        section=\"primary\"\n                        field=\"zIndex\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Size of Animation-->\n                    <ScaleRadius\n                        {animation}\n                        section=\"primary\"\n                        field=\"size\"\n                        step=\"0.01\"\n                    />\n                </td>\n                <td>\n                    <!--Add Token Width-->\n                    <div class={isRadius ? \"\" : \"aa-disableOpacity\"}>\n                        <label for=\"Width {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.add\")}\n                            {localize(\"autoanimations.menus.token\")}\n                            {localize(\"autoanimations.menus.width\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Width {animation._data.id}\"\n                            bind:checked={$animation.primary.options.addTokenWidth}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeIn\")}\n                    section=\"primary\"\n                    field=\"fadeIn\"\n                    placeholder=250\n                    step=\"0.01\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeOut\")}\n                    section=\"primary\"\n                    field=\"fadeOut\"\n                    placeholder=500\n                    step=\"0.01\"\n                    />\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.anchor\")}</label>\n                    </div>\n                    <div>\n                        <input type=\"text\" placeholder=\"0.5\" bind:value={$animation.primary.options.anchor}>\n                    </div>\n                </td>\n                <td>\n                    <!--Choose how to play the animation-->\n                    <div>\n                        <div>\n                            <label for=\"\">{localize(\"autoanimations.menus.playOn\")}</label>\n                        </div>\n                        <div>\n                            <select\n                                bind:value={$animation.primary.options.playOn}\n                                style=\"width:90%; height: 1em\"\n                            >\n                                <option value=\"source\"\n                                >{localize(\"autoanimations.menus.source\")}</option\n                                >\n                                <option value=\"target\"\n                                    >{localize(\"autoanimations.menus.target\")}</option\n                                >\n                                <option value=\"default\"\n                                    >{localize(\n                                        \"autoanimations.menus.targetDefault\"\n                                    )}</option\n                                >\n                                <option value=\"both\"\n                                    >{localize(\"autoanimations.menus.both\")}</option\n                                >\n                            </select>\n                        </div>\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"primary\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n                <td>\n                    <WaitDelay {animation}/>\n                </td>\n                <td></td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"./inputComponents/NumberInput.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n    import WaitDelay            from \"./inputComponents/WaitDelay.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1.em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\"\n        },\n        clickPropagate: false\n    };\n\n    $: persistent = $animation.primary.options.persistent;\n\n    $: currentType = $animation.primary.video.menuType;\n\n    $: persistType = $animation.primary.options.persistType;\n\n    $: isAttached = persistent && persistType === \"attachtemplate\";\n\n    $: menuType = $animation.primary.video.menuType;\n\n    $: defaultAnchor = menuType === \"cone\" || menuType ===\"ray\"\n                                ? \"0, 0.5\"\n                                : \"0.5, 0.5\"\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"templatefx\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation {animation} section=\"primary\" />\n                </td>\n                <td>\n                    <!--Set Number of times the animation plays-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\")}\n                        section=\"primary\"\n                        field=\"repeat\"\n                        isDisabled={persistent ? \"aa-disableOpacity\" : \"\"}\n                    />\n                </td>\n                <td>\n                    <!--Set delay between repeats-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.repeat\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.delay\")}\n                        section=\"primary\"\n                        field=\"repeatDelay\"\n                        isDisabled={persistent ? \"aa-disableOpacity\" : \"\"}\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Masking-->\n                    <div>\n                        <label for=\"Masked {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.mask\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Masked {animation._data.id}\"\n                            bind:checked={$animation.primary.options.isMasked}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.scale\")}</label>\n                    </div>\n                    <div>\n                        <input type=\"text\" placeholder=\"1\" bind:value={$animation.primary.options.scale}>\n                    </div>\n                </td>\n                <td class={isAttached ? \"aa-disableOpacity\" : \"\"}>\n                    <!--Remove Template-->\n                    <div>\n                        <label for=\"Remove {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.remove\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Remove {animation._data.id}\"\n                            bind:checked={$animation.primary.options\n                                .removeTemplate}\n                        />\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} />\n                </td>\n                <td>\n                    <!--Set Z-Index of Animation-->\n                    <NumberInput\n                        {animation}\n                        label={localize(\"autoanimations.menus.z-index\")}\n                        section=\"primary\"\n                        field=\"zIndex\"\n                    />\n                </td>\n                <td>\n                    <!--Adjust Rotation of Effect-->\n                    <NumberInput\n                        {animation}\n                        label=\"Adjust Rotation\"\n                        section=\"primary\"\n                        field=\"rotate\"\n                        placeholder=0\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"primary\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n                <td>\n                    <!--Play Animation Above Template-->\n                    <div>\n                        <label for=\"aboveTemplate {animation._data.id}\"\n                            >{localize(\"autoanimations.variants.above\")} {localize(\"autoanimations.animTypes.templatefx\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"aboveTemplate {animation._data.id}\"\n                            bind:checked={$animation.primary.options\n                                .aboveTemplate}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.anchor\")}</label>\n                    </div>\n                    <div>\n                        <input type=\"text\" placeholder={defaultAnchor} bind:value={$animation.primary.options.anchor}>\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Ignore vision-based masking-->\n                    <div>\n                        <label for=\"xray {animation._data.id}\"\n                            >{localize(\"autoanimations.variants.xray\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"xray {animation._data.id}\"\n                            bind:checked={$animation.primary.options\n                                .xray}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <WaitDelay {animation}/>\n                </td>\n                <td></td>\n            </tr>\n        </table>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Persistence-->\n                    <div>\n                        <label for=\"Persist {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.persistant\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Persist {animation._data.id}\"\n                            bind:checked={$animation.primary.options.persistent}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Choose Persistent Type-->\n                    <div\n                        class=\"{!persistent\n                            ? 'aa-disableOpacity'\n                            : ''}\"\n                    >\n                        <div>\n                        <label for=\"\"\n                            >{localize(\"autoanimations.menus.persistant\")}\n                            {localize(\"autoanimations.menus.type\")}</label\n                        >\n                        </div>\n                        <div>\n                        <select\n                            bind:value={$animation.primary.options.persistType}\n                            style=\"width:11em; height: 1em\"\n                        >\n                            <option value=\"sequencerground\"\n                                >{localize(\n                                    \"autoanimations.menus.sequencereffect\"\n                                )}</option\n                            >\n                            <option value=\"attachtemplate\"\n                                >{localize(\n                                    \"autoanimations.menus.attachtotemplate\"\n                                )}</option\n                            >\n                            {#if currentType === \"circle\" || currentType === \"square\"}\n                                <option value=\"overheadtile\"\n                                    >{localize(\n                                        \"autoanimations.menus.overheadtile\"\n                                    )}</option\n                                >\n                                <option value=\"groundtile\"\n                                    >{localize(\n                                        \"autoanimations.menus.groundtile\"\n                                    )}</option\n                                >\n                            {/if}\n                        </select>\n                        </div>\n                    </div>\n                </td>\n            </tr>\n            {#if persistType === \"overheadtile\" && persistent}\n                <tr>\n                    <td>\n                        <!--Set Occlusion Mode-->\n                        <div class=\"flexcol\">\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.occlusionMode\"\n                                )}</label\n                            >\n                            <select\n                                bind:value={$animation.primary.options\n                                    .occlusionMode}\n                                style=\"text-align: center;align-self: center;width: 13em\"\n                            >\n                                <option value=\"3\"\n                                    >{localize(\n                                        \"autoanimations.menus.occlusion03\"\n                                    )}</option\n                                >\n                                <option value=\"1\"\n                                    >{localize(\n                                        \"autoanimations.menus.occlusion01\"\n                                    )}</option\n                                >\n                                <option value=\"2\"\n                                    >{localize(\n                                        \"autoanimations.menus.occlusion02\"\n                                    )}</option\n                                >\n                                <option value=\"0\"\n                                    >{localize(\n                                        \"autoanimations.menus.occlusion00\"\n                                    )}</option\n                                >\n                            </select>\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Occlusion Alpha-->\n                        <div class=\"flexcol\">\n                            <label for=\"aaOpacity\"\n                                >{localize(\n                                    \"autoanimations.menus.occlusionAlpha\"\n                                )}</label\n                            >\n                            <div\n                                style=\"display: flex; margin-right: 2em; margin-left: 2em;\"\n                            >\n                                <input\n                                    type=\"number\"\n                                    id=\"aaOpacity\"\n                                    bind:value={$animation.primary.options\n                                        .occlusionAlpha}\n                                    placeholder=\"1\"\n                                    min=\"0\"\n                                    max=\"1\"\n                                    step=\"0.01\"\n                                />\n                                <input\n                                    style=\"border:none; background:none;margin-left: 3px\"\n                                    type=\"range\"\n                                    min=\"0\"\n                                    max=\"1\"\n                                    step=\"0.01\"\n                                    bind:value={$animation.primary.options\n                                        .occlusionAlpha}\n                                />\n                            </div>\n                        </div>\n                    </td>\n                </tr>\n            {/if}\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"./inputComponents/NumberInput.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"./optionsInfoDialog.js\";\n    import WaitDelay            from \"./inputComponents/WaitDelay.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n        icon: \"fas fa-info-circle\",\n        title: \"autoanimations.menus.quickReference\",\n        styles: {\n            \"--tjs-icon-button-diameter\": \"1.em\",\n            position: \"relative\",\n            left: \"10px\",\n            bottom: \"-2px\",\n            color: \"rgba(50, 79, 245, 0.5)\"\n        },\n        clickPropagate: false\n    }\n\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"aura\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation {animation} section=\"primary\" />\n                </td>\n                <td>\n                    <!--Set Visibility Binding-->\n                    <div>\n                        <label for=\"Vis {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\")} {localize(\"autoanimations.menus.visibility\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Vis {animation._data.id}\"\n                            bind:checked={$animation.primary.options.unbindVisibility}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Alpha Binding-->\n                    <div>\n                        <label for=\"Alpha {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\")} {localize(\"autoanimations.menus.alpha\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Alpha {animation._data.id}\"\n                            bind:checked={$animation.primary.options.unbindAlpha}\n                        />\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} />\n                </td>\n                <td>\n                    <!--Set Z-Index-->\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.z-index\")}\n                    section=\"primary\"\n                    field=\"zIndex\"\n                    step=\"1\"\n                />\n                </td>\n                <td>\n                    <!--Choose how to play the animation-->\n                    <div>\n                        <div>\n                            <label for=\"\">{localize(\"autoanimations.menus.playOn\")}</label>\n                        </div>\n                        <div>\n                            <select\n                                bind:value={$animation.primary.options.playOn}\n                                style=\"width:90%; height: 1em\"\n                            >\n                                <option value=\"source\"\n                                >{localize(\"autoanimations.menus.source\")}</option\n                                >\n                                <option value=\"target\"\n                                    >{localize(\"autoanimations.menus.target\")}</option\n                                >\n                                <option value=\"default\"\n                                    >{localize(\n                                        \"autoanimations.menus.targetDefault\"\n                                    )}</option\n                                >\n                                <option value=\"both\"\n                                    >{localize(\"autoanimations.menus.both\")}</option\n                                >\n                            </select>\n                        </div>\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Radius of Animation-->\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.radius\")}\n                    section=\"primary\"\n                    field=\"size\"\n                    step=\"0.01\"\n                />\n                </td>\n                <td>\n                    <!--Add Token Width-->\n                    <div>\n                        <label for=\"Width {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.add\")}\n                            {localize(\"autoanimations.menus.token\")}\n                            {localize(\"autoanimations.menus.width\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Width {animation._data.id}\"\n                            bind:checked={$animation.primary.options.addTokenWidth}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Fade In time-->\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeIn\")}\n                    section=\"primary\"\n                    field=\"fadeIn\"\n                    step=\"1\"\n                />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Fade Out time-->\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.fadeOut\")}\n                    section=\"primary\"\n                    field=\"fadeOut\"\n                    step=\"1\"\n                />\n                </td>\n                <td>\n                    <WaitDelay {animation}/>\n                </td>\n                <td>\n                    <NumberInput\n                    {animation}\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"primary\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n   import { getContext }   from \"svelte\";\n\n    import { localize } from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import NumberInput      from \"./inputComponents/NumberInput.svelte\";\n    import Opacity          from \"./inputComponents/Opacity.svelte\";\n\n   import { gameSettings }  from \"#gameSettings\";\n\n    //export let animation;\n    let { animation} = getContext('animation-data');\n\n   /**\n    * Game setting store to control folder animation.\n    */\n   const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: \"Effects\",\n    };\n\n    $: tintEnabled = $animation.primary.options.tint;\n    $: breathEnabled = $animation.primary.options.breath;\n    $: alphaEnabled = $animation.primary.options.alpha;\n\n    </script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <table class=\"d\">\n            <tr>\n                <th></th>\n                <th style=\"text-align:center;\">\n                    <div class=\"flexrow\">\n                        <label for=\"\" style=\"font-size: 1.2em\">{localize('autoanimations.menus.color')} {localize('autoanimations.menus.tint')}</label>\n                        <input\n                        type=\"checkbox\"\n                        style=\"position:relative; right: 10px;bottom: 2px\"\n                        id=\"Filter {animation._data.id}\"\n                        bind:checked={$animation.primary.options.tint}\n                        />\n                    </div>\n                </th>\n                <th></th>\n            </tr>\n            <tr>\n                <td>\n                </td>\n                <td class={tintEnabled ? \"\" : \"aa-disableOpacity\"}>\n                    <!--Set Animation Opacity-->\n                    <Opacity {animation} label={localize(\"autoanimations.menus.saturate\")} field=\"tintSaturate\" min=\"-1\" max=\"1\"/>\n                </td>\n                <td class={tintEnabled ? \"\" : \"aa-disableOpacity\"}>\n                    <div class=\"flexcol\">\n                        <input\n                            type=\"Text\"\n                            style=\"width: 10em; margin: auto\"\n                            bind:value={$animation.primary.options.tintColor}\n                        />\n                    </div>\n                    <div class=\"form-group\">\n                        <input\n                            type=\"color\"\n                            data-edit=\"color\"\n                            id=\"tint\"\n                            style=\"width: 10em;margin-left: 0;\"\n                            bind:value={$animation.primary.options.tintColor}\n                        />\n                    </div>\n                </td>\n            </tr>\n        </table>\n        <table class=\"d\">\n            <tr>\n                <th>\n                </th>\n                <th style=\"text-align:center\">\n                    <div class=\"flexrow\">\n                    <label for=\"\" style=\"font-size: 1.2em\">Breath Effect</label>\n                    <input\n                    type=\"checkbox\"\n                    style=\"position:relative; right: 10px;bottom: 2px\"\n                    id=\"Breath {animation._data.id}\"\n                    bind:checked={$animation.primary.options.breath}\n                />\n                    </div>\n                </th>\n                <th style=\"align-content: center;font-weight: normal\">\n                </th>\n            </tr>\n            <tr class={breathEnabled ? \"\" : \"aa-disableOpacity\"}>\n                <td>\n                    <!--Set Fade In time-->\n                    <NumberInput\n                    {animation}\n                    label=From\n                    section=\"primary\"\n                    field=\"breathMin\"\n                    step=\"0.01\"\n                />\n                </td>\n                <td>\n                    <!--Set Fade In time-->\n                    <NumberInput\n                    {animation}\n                    label=To\n                    section=\"primary\"\n                    field=\"breathMax\"\n                    step=\"0.01\"\n                />\n                </td>\n                <td>\n                    <!--Set Fade In time-->\n                    <NumberInput\n                    {animation}\n                    label=Duration\n                    section=\"primary\"\n                    field=\"breathDuration\"\n                    step=\"1\"\n                />\n                </td>\n            </tr>\n        </table>\n        <table class=\"d\">\n            <tr>\n                <th>\n                </th>\n                <th style=\"text-align:center\">\n                    <div class=\"flexrow\">\n                    <label for=\"\" style=\"font-size: 1.2em\">Alpha Effect</label>\n                    <input\n                            type=\"checkbox\"\n                            style=\"position:relative; right: 10px; bottom: 2px\"\n                            id=\"Fade {animation._data.id}\"\n                            bind:checked={$animation.primary.options.alpha}\n                        />\n                    </div>\n                </th>\n                <th></th>\n            </tr>\n            <tr class={alphaEnabled ? \"\" : \"aa-disableOpacity\"}>\n                <td>\n                    <!--Set Fade In time-->\n                    <NumberInput\n                    {animation}\n                    label=From\n                    section=\"primary\"\n                    field=\"alphaMin\"\n                    step=\"0.01\"\n                />\n                </td>\n                <td>\n                    <!--Set Fade In time-->\n                    <NumberInput\n                    {animation}\n                    label=To\n                    section=\"primary\"\n                    field=\"alphaMax\"\n                    step=\"0.01\"\n                />\n                </td>\n                <td>\n                    <!--Set Fade In time-->\n                    <NumberInput\n                    {animation}\n                    label=Duration\n                    section=\"primary\"\n                    field=\"alphaDuration\"\n                    step=\"1\"\n                />\n                </td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n    import * as settings    from \"../Components\";\n    import * as options     from \"../Components/options\"\n\n    //export let animation;\n    //export let idx = 0;\n    //export let category;\n    export let fromMenu = 'autorec';\n\n    $: show3d = false;\n    let { animation } = getContext('animation-data');\n\n    let title =\n        game.i18n.localize(\"autoanimations.menus.primary\") +\n        \" \" +\n        game.i18n.localize(\"autoanimations.menus.animation\");\n\n    $: soundOnly = $animation.soundOnly.sound.enable;\n    $: macroEnabled = $animation.macro.enable;\n    $: macroPlay = $animation.macro.playWhen;\n</script>\n\n<svelte:component this={settings.SectionButtons01} bind:show3d type={fromMenu}/>\n{#if show3d && !soundOnly}\n    <svelte:component this={settings.Canvas3D} />\n{:else}\n    <div hidden={!soundOnly}>\n        <svelte:component this={settings.SoundOnly} />\n    </div>\n    <div hidden={!macroEnabled}>\n        <svelte:component this={settings.Macro} />\n    </div>\n    <div hidden={soundOnly || (macroEnabled && macroPlay === \"2\")}>\n            <svelte:component this={settings.Source} />\n            <div class=\"aa-primary-border\">\n                <svelte:component this={settings.Video} {title} section=\"primary\"/>\n                <svelte:component this={options.Melee} />\n                <svelte:component this={options.EffectColor} />\n                <svelte:component this={settings.Sound} section=\"primary\" />\n                <svelte:component this={settings.MeleeSwitch} />\n            </div>\n            <svelte:component this={settings.Secondary} />\n            <svelte:component this={settings.Target} />\n    </div>\n{/if}\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n    import * as settings    from \"../Components\";\n    import * as options     from \"../Components/options\"\n\n    //export let animation;\n    //export let idx = 0;\n    //export let category;\n    export let fromMenu = 'autorec';\n    let { animation } = getContext('animation-data');\n\n    $: show3d = false;\n\n    let title =\n        game.i18n.localize(\"autoanimations.menus.primary\") +\n        \" \" +\n        game.i18n.localize(\"autoanimations.menus.animation\");\n\n    $: soundOnly = $animation.soundOnly.sound.enable;\n    $: macroEnabled = $animation.macro.enable;\n    $: macroPlay = $animation.macro.playWhen;\n</script>\n\n<svelte:component this={settings.SectionButtons01} bind:show3d type={fromMenu}/>\n{#if show3d && !soundOnly}\n    <svelte:component this={settings.Canvas3D} />\n{:else}\n    <div hidden={!soundOnly}>\n        <svelte:component this={settings.SoundOnly} />\n    </div>\n    <div hidden={!macroEnabled}>\n        <svelte:component this={settings.Macro} />\n    </div>\n    <div hidden={soundOnly || (macroEnabled && macroPlay === \"2\")}>\n        <svelte:component this={settings.Source} />\n            <div class=\"aa-primary-border\">\n                <svelte:component this={settings.Video} {title} section=\"primary\"/>\n                <svelte:component this={options.Range} />\n                <svelte:component this={options.EffectColor} />\n                <svelte:component this={settings.Sound} section=\"primary\" />\n            </div>\n            <svelte:component this={settings.Secondary} />\n            <svelte:component this={settings.Target} />\n    </div>\n{/if}\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n    import * as settings    from \"../Components\";\n    import * as options     from \"../Components/options\"\n\n    //export let animation;\n    //export let idx = 0;\n    //export let category;\n    export let fromMenu = 'autorec';\n    let { animation } = getContext('animation-data');\n\n    $: show3d = false;\n\n    let title =\n        game.i18n.localize(\"autoanimations.menus.primary\") +\n        \" \" +\n        game.i18n.localize(\"autoanimations.menus.animation\");\n\n    $: soundOnly = $animation.soundOnly.sound.enable;\n    $: macroEnabled = $animation.macro.enable;\n    $: macroPlay = $animation.macro.playWhen;\n</script>\n\n<svelte:component this={settings.SectionButtons01} bind:show3d type={fromMenu}/>\n{#if show3d && !soundOnly}\n    <svelte:component this={settings.Canvas3D} />\n{:else}\n    <div hidden={!soundOnly}>\n        <svelte:component this={settings.SoundOnly} />\n    </div>\n    <div hidden={!macroEnabled}>\n        <svelte:component this={settings.Macro} />\n    </div>\n    <div hidden={soundOnly || (macroEnabled && macroPlay === \"2\")}>\n        <svelte:component this={settings.Source} />\n        <div class=\"aa-primary-border\">\n            <svelte:component this={settings.Video} {title} section=\"primary\"/>\n            <svelte:component this={options.OnToken} />\n            <svelte:component this={options.EffectColor} />\n            <svelte:component this={settings.Sound} section=\"primary\" />\n        </div>\n        <svelte:component this={settings.Secondary} />\n        <div class={$animation.primary.options.playOn === \"source\" ? \"aa-disableOpacity\" : \"\"}>\n            <svelte:component this={settings.Target} />\n        </div>\n</div>\n{/if}\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n    import * as settings    from \"../Components\";\n    import * as options     from \"../Components/options\"\n\n    //export let animation;\n    //export let idx = 0;\n    //export let category;\n    export let fromMenu = 'autorec';\n    let { animation } = getContext('animation-data');\n\n    let title =\n        game.i18n.localize(\"autoanimations.menus.primary\") +\n        \" \" +\n        game.i18n.localize(\"autoanimations.menus.animation\");\n\n    $: soundOnly = $animation.soundOnly.sound.enable;\n    $: macroEnabled = $animation.macro.enable;\n    $: macroPlay = $animation.macro.playWhen;\n</script>\n\n<svelte:component this={settings.SectionButtons02} type={fromMenu}/>\n<div hidden={!soundOnly}>\n    <svelte:component this={settings.SoundOnly} />\n</div>\n<div hidden={!macroEnabled}>\n    <svelte:component this={settings.Macro} />\n</div>\n<div hidden={soundOnly || (macroEnabled && macroPlay === \"2\")}>\n    <svelte:component this={settings.Source} />\n        <div class=\"aa-primary-border\">\n            <svelte:component this={settings.Video} {title} section=\"primary\"/>\n            <svelte:component this={options.TemplateFX} />\n            <svelte:component this={options.EffectColor} />\n            <svelte:component this={settings.Sound} section=\"primary\" />\n        </div>\n        <svelte:component this={settings.Secondary} />\n        <svelte:component this={settings.Target} />\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n    import * as settings    from \"../Components\";\n    import * as options     from \"../Components/options\"\n\n    //export let animation;\n    //export let idx = 0;\n    //export let category;\n    export let fromMenu = 'autorec';\n    let { animation } = getContext('animation-data');\n\n    let title =\n        game.i18n.localize(\"autoanimations.menus.primary\") +\n        \" \" +\n        game.i18n.localize(\"autoanimations.menus.animation\");\n\n    $: soundOnly = $animation.soundOnly.sound.enable;\n    $: macroEnabled = $animation.macro.enable;\n    $: macroPlay = $animation.macro.playWhen;\n</script>\n\n<svelte:component this={settings.SectionButtons02} type={fromMenu}/>\n<div hidden={!soundOnly}>\n    <svelte:component this={settings.SoundOnly} />\n</div>\n<div hidden={!macroEnabled}>\n    <svelte:component this={settings.Macro} />\n</div>\n<div hidden={soundOnly || (macroEnabled && macroPlay === \"2\")}>\n    <svelte:component this={settings.Source} />\n    <div class=\"aa-primary-border\">\n        <svelte:component this={settings.Video} {title} section=\"primary\"/>\n        <svelte:component this={options.Aura} />\n        <svelte:component this={options.AuraEffects} />\n        <svelte:component this={settings.Sound} section=\"primary\" />\n    </div>\n    <svelte:component this={settings.Secondary} />\n    <svelte:component this={settings.Target} />\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    //export let animation;\n    let { animation } = getContext('animation-data');\n\n    const label = game.i18n.localize(\"autoanimations.menus.effect\") + \" \" + game.i18n.localize(\"autoanimations.menus.opacity\")\n\n</script>\n\n<div class=\"flexcol\">\n    <label for=\"\">{label}</label\n    >\n    <div\n        style=\"display: flex; margin-right: 1.5em; margin-left: 1.5em;\"\n    >\n        <input\n            type=\"number\"\n            bind:value={$animation.data.options.opacity}\n            placeholder=\"1\"\n            min=\"0\"\n            max=\"1\"\n            step=\"0.01\"\n        />\n        <input\n            style=\"border:none; background:none;margin-left: 3px;\"\n            type=\"range\"\n            min=\"0\"\n            max=\"1\"\n            step=\"0.01\"\n            bind:value={$animation.data.options.opacity}\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n\n</style>","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import VideoSelect          from \"../Components/VideoSelect.svelte\";\n    import SoundSettings        from \"../Components/SoundSettings.svelte\";\n    import Opacity              from \"./inputComponents/Opacity02.svelte\";\n    import OptionsDialog        from \"../Components/options/optionsInfoDialog.js\";\n    import Elevation            from \"../Components/options/inputComponents/Elevation.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n    let { animation } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n       icon: \"fas fa-info-circle\",\n       title: \"autoanimations.menus.quickReference\",\n       styles: {\n          \"--tjs-icon-button-diameter\": \"1.em\",\n          position: \"relative\",\n          left: \"10px\",\n          bottom: \"-2px\",\n          color: \"rgba(50, 79, 245, 0.5)\"\n       }\n    };\n\n    $: isCustom = $animation.data.video.enableCustom;\n</script>\n\n<div class=\"aa-section-border\">\n    <VideoSelect title=\"Dual Attach\" section=\"data\" />\n    <div class=\"aa-options-border\">\n        <TJSSvgFolder {folder} animate={$uiAnimation}>\n            <div slot=\"summary-end\">\n                <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"preset\", \"dualattach\")}/>\n            </div>\n            <table class=\"d\">\n                <tr>\n                    <td>\n                        <Elevation {animation} section=\"data\" />\n                    </td>\n                    <td>\n                        <Opacity {animation} />\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.playbackRate\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.options\n                                    .playbackRate}\n                                placeholder=\"1\"\n                                step=\".01\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td />\n                    <td>\n                        <!--Set Only X Scaling-->\n                        <div class={!isCustom ? \"aa-disableOpacity\" : \"\"}>\n                            <label for=\"Remove {animation._data.id}\"\n                                >{localize(\"autoanimations.menus.only\")} X\n                            </label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"Remove {animation._data.id}\"\n                                bind:checked={$animation.data.options.onlyX}\n                            />\n                        </div>\n                    </td>\n                    <td />\n                </tr>\n            </table>\n        </TJSSvgFolder>\n    </div>\n    <SoundSettings section=\"data\" />\n</div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    //export let animation;\n    export let section;\n    export let field = \"opacity\";\n    export let label = game.i18n.localize(\"autoanimations.menus.effect\") + \" \" + game.i18n.localize(\"autoanimations.menus.opacity\")\n    let { animation } = getContext('animation-data');\n\n\n</script>\n\n<div class=\"flexcol\">\n    <label for=\"\">{label}</label\n    >\n    <div\n        style=\"display: flex; margin-right: 1.5em; margin-left: 1.5em;\"\n    >\n        <input\n            type=\"number\"\n            bind:value={$animation.data[section].options[field]}\n            placeholder=\"1\"\n            min=\"0\"\n            max=\"1\"\n            step=\"0.01\"\n        />\n        <input\n            style=\"border:none; background:none;margin-left: 3px;\"\n            type=\"range\"\n            min=\"0\"\n            max=\"1\"\n            step=\"0.01\"\n            bind:value={$animation.data[section].options[field]}\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n\n</style>","<script>\n    import { localize }     from \"#runtime/util/i18n\";\n    import { getContext }   from \"svelte\";\n\n    //export let animation;\n    export let section = \"primary\";\n    let { animation } = getContext('animation-data');\n\n    $: isAbsolute = $animation.data[section].options.isAbsolute;\n\n</script>\n\n<div>\n    <div>\n        <label for=\"Relative {section} {animation._data.id}\" style=\"font-size:10px\" class={`aaLabelBorder ${isAbsolute ? \"aaIsSelected\" : \"\"}`}>ABS</label>\n        <input\n            id=\"Relative {section} {animation._data.id}\"\n            type=\"checkbox\"\n            style=\"display:none\"\n            bind:checked={$animation.data[section].options.isAbsolute}\n        />\n        <label for=\"\" style=\"font-size:13px\">{localize('autoanimations.menus.elevation')} </label>\n    </div>\n    <div>\n        <input\n            type=\"number\"\n            bind:value={$animation.data[section].options.elevation}\n            placeholder=1000\n            step=1\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n    .aaLabelBorder {\n        color: rgba(91, 91, 91, 0.623);\n        border-radius: 5px;\n        border: 1px solid rgba(91, 91, 91, 0.623);\n        padding: 1px 5px 1px 5px;\n    }\n    .aaIsSelected {\n        color: black;\n        border: 1px solid black;\n    }\n\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import SectionHeader        from \"../Components/SectionHeader.svelte\";\n    import VideoSelect          from \"../Components/VideoSelect.svelte\";\n    import SoundSettings        from \"../Components/SoundSettingsNested.svelte\";\n    import Opacity              from \"./inputComponents/Opacity.svelte\";\n    import Elevation            from \"./inputComponents/Elevation.svelte\";\n    import OptionsDialog        from \"../Components/options/optionsInfoDialog.js\";\n    import * as settings        from \"../Components\"\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n\n    let { animation, category, idx } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const title = \"Projectile to Template\";\n\n    const styling = {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        }\n\n    const optionsInfo = {\n       icon: \"fas fa-info-circle\",\n       title: \"autoanimations.menus.quickReference\",\n       styles: {\n          \"--tjs-icon-button-diameter\": \"1.em\",\n          position: \"relative\",\n          left: \"10px\",\n          bottom: \"-2px\",\n          color: \"rgba(50, 79, 245, 0.5)\"\n       }\n    };\n\n    const folder = {\n        styles: styling,\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n    const afterImage = {\n        styles: styling,\n        label: \"After Image/Video\",\n    }\n    const preExplode = {\n        styles: styling,\n        label: \"Pre Explosion\",\n    }\n\n</script>\n\n<div class=\"aa-section-border\">\n    <VideoSelect\n        section=\"data\"\n        section02=\"projectile\"\n        title=\"Projectile\"\n    />\n    <div class=\"aa-options-border\">\n        <TJSSvgFolder {folder} animate={$uiAnimation}>\n            <div slot=\"summary-end\">\n                <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"preset\", \"proToTemp\")}/>\n            </div>\n            <table class=\"d\">\n                <tr>\n                    <td>\n                        <Elevation section=\"projectile\" />\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.repeat\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.projectile.options.repeat}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize('autoanimations.menus.repeat')} {localize(\"autoanimations.menus.delay\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.projectile.options.repeatDelay}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <!--Set Masking-->\n                        <div>\n                            <label for=\"Remove {animation._data.id}\"\n                                >{localize(\"autoanimations.menus.remove\")}\n                            </label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"Remove {animation._data.id}\"\n                                bind:checked={$animation.data.projectile.options.removeTemplate}\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.wait\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.projectile.options.wait}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Animation Opacity-->\n                        <Opacity {animation} section=\"projectile\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <!--Set Random Offset-->\n                        <div>\n                            <label for=\"RandomOffset {animation._data.id}\"\n                                >{localize(\"autoanimations.menus.randomOffset\")}\n                            </label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"RandomOffset {animation._data.id}\"\n                                bind:checked={$animation.data.projectile.options.randomOffset}\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.playbackRate\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.projectile.options.playbackRate}\n                                placeholder=\"1\"\n                                step=\".01\"\n                            />\n                        </div>\n                    </td>\n                    <td></td>\n                </tr>\n            </table>\n        </TJSSvgFolder>\n    </div>\n    <SoundSettings section=\"data\" section02=\"projectile\" />\n</div>\n\n<div class=\"aa-section-border\">\n    <TJSSvgFolder folder={preExplode} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Source FX On/Off\"\n                bind:checked={$animation.data.preExplosion.enable}\n            />\n        </div>\n        <div class={$animation.data.preExplosion.enable ? \"\" : \"aa-disableOpacity\"}>\n            <VideoSelect\n            section=\"data\"\n            section02=\"preExplosion\"\n            title=\"Pre Explosion\"\n            />\n            <div class=\"aa-options-border\">\n                <TJSSvgFolder {folder} animate={$uiAnimation}>\n                    <table class=\"d\">\n                        <tr>\n                            <td>\n                                <Elevation section=\"preExplosion\" />\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.repeat\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.preExplosion.options.repeat}\n                                        placeholder=\"1\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize('autoanimations.menus.repeat')} {localize(\"autoanimations.menus.delay\")}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.preExplosion.options.repeatDelay}\n                                        placeholder=\"1\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.scale\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.preExplosion.options.scale}\n                                        placeholder=\"1\"\n                                        step=\".01\"\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.wait\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.preExplosion.options.wait}\n                                        placeholder=\"1\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <!--Set Animation Opacity-->\n                                <Opacity {animation} section=\"preExplosion\"/>\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                <!--Play Animation Above Template-->\n                                <div>\n                                    <label for=\"aboveTemplatePre {animation._data.id}\"\n                                        >{localize(\"autoanimations.variants.above\")} {localize(\"autoanimations.animTypes.templatefx\")}\n                                    </label>\n                                    <input\n                                        type=\"checkbox\"\n                                        id=\"aboveTemplatePre {animation._data.id}\"\n                                        bind:checked={$animation.data.preExplosion.options.aboveTemplate}\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\"autoanimations.menus.playbackRate\")}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.preExplosion.options.playbackRate}\n                                        placeholder=\"1\"\n                                        step=\".01\"\n                                    />\n                                </div>\n                            </td>\n                            <td></td>\n                        </tr>\n                    </table>\n                </TJSSvgFolder>\n            </div>\n            <SoundSettings section=\"data\" section02=\"preExplosion\" />\n        </div>\n    </TJSSvgFolder>\n</div>\n\n<div class=\"aa-section-border\">\n    <VideoSelect\n        section=\"data\"\n        section02=\"explosion\"\n        title=\"Primary Explosion\"\n    />\n    <div class=\"aa-options-border\">\n        <TJSSvgFolder {folder} animate={$uiAnimation}>\n            <table class=\"d\">\n                <tr>\n                    <td>\n                        <Elevation section=\"explosion\" />\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.repeat\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.explosion.options.repeat}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize('autoanimations.menus.repeat')} {localize(\"autoanimations.menus.delay\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.explosion.options.repeatDelay}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.scale\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.explosion.options.scale}\n                                placeholder=\"1\"\n                                step=\".01\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.wait\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.explosion.options.wait}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <!--Set Animation Opacity-->\n                        <Opacity {animation} section=\"explosion\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <!--Play Animation Above Template-->\n                        <div>\n                            <label for=\"aboveTemplateExp {animation._data.id}\"\n                                >{localize(\"autoanimations.variants.above\")} {localize(\"autoanimations.animTypes.templatefx\")}\n                            </label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"aboveTemplateExp {animation._data.id}\"\n                                bind:checked={$animation.data.explosion.options.aboveTemplate}\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.playbackRate\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.explosion.options.playbackRate}\n                                placeholder=\"1\"\n                                step=\".01\"\n                            />\n                        </div>\n                    </td>\n                    <td></td>\n                </tr>\n            </table>\n        </TJSSvgFolder>\n    </div>\n    <SoundSettings section=\"data\" section02=\"explosion\" />\n</div>\n<div class=\"aa-section-border\">\n    <TJSSvgFolder folder={afterImage} animate={$uiAnimation}>\n        <SectionHeader title=\"After Image\" />\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Source FX On/Off\"\n                bind:checked={$animation.data.afterImage.enable}\n            />\n        </div>\n        <div class={$animation.data.afterImage.enable ? \"\" : \"aa-disableOpacity\"}>\n        <div class=\"aa-customAnim-container\">\n            <div class=\"aa-custom\" style=\"grid-row: 1/2; grid-column: 1/4; padding-top: 5px\">\n                <input\n                    type=\"text\"\n                    bind:value={$animation.data.afterImage.customPath}\n                    style=\"font-weight:normal; font-size:small; border-radius: 5px; border: 1px solid grey\"\n                />\n            </div>\n            <div class=\"aa-custom\" style=\"grid-row: 1/2; grid-column: 4/5\">\n                <i class=\"fas fa-file-import\"\n                   title=\"File Picker\"\n                   style=\"font-size:1.5em\"\n                   on:click|preventDefault={() => category.selectCustom(\"data\", \"afterImage\", idx)}\n                   role=presentation\n                />\n                <i class=\"fas fa-database\"\n                   title=\"Sequencer Database Viewer\"\n                   style=\"font-size:1.5em;margin-left: 10px\"\n                   on:click|preventDefault={() => category.openSequencerViewer()}\n                   role=presentation\n                />\n\n            </div>\n        </div>\n        <div class=\"aa-options-border\">\n            <table class=\"d\">\n                <tr>\n                    <td>\n                        <Elevation section=\"afterImage\" />\n                    </td>\n                    <td>\n                        <!--Set Persistence-->\n                        <div>\n                            <label for=\"Persist {animation._data.id}\"\n                                >{localize(\"autoanimations.menus.persistant\")}\n                            </label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"Persist {animation._data.id}\"\n                                bind:checked={$animation.data.afterImage.options.persistent}\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.scale\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.afterImage.options.scale}\n                                placeholder=\"1\"\n                                step=\".01\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n    </TJSSvgFolder>\n</div>\n\n<svelte:component this={settings.Secondary} />\n<svelte:component this={settings.Target} />\n\n<style lang=\"scss\">\n    .aa-customAnim-container {\n        display: grid;\n        grid-template-columns: 22% 31.375% 31.375% 12.5%;\n        grid-gap: 1%;\n        padding-top: 5px;\n        padding-bottom: 5px;\n        align-items: center;\n        margin-right: 6%;\n        margin-left: 3%;\n        font-size: small;\n        font-weight: bold;\n    }\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    //export let animation;\n    let { animation } = getContext('animation-data');\n\n    export let section;\n    export let field;\n    export let isDisabled = \"\";\n    export let placeholder = 1;\n    export let step = 1;\n\n    $: isRadius = $animation.data[section].options.isRadius;\n\n    const scaleLabel = game.i18n.localize(\"autoanimations.menus.scale\");\n    const radiusLabel = game.i18n.localize(\"autoanimations.menus.radius\");\n\n    function switchScale() {\n        if (!animation._data.data[section].options.isRadius) { return; }\n        $animation.data[section].options.isRadius = false;\n    }\n    function switchRadius() {\n        if (animation._data.data[section].options.isRadius) { return; }\n        $animation.data[section].options.isRadius = true;\n    }\n</script>\n\n<div class=\"{isDisabled}\">\n    <div>\n        <label for=\"\" class={`aaLabelBorder ${!isRadius ? \"aaIsSelected\" : \"aaNotSelected\"}`} on:click={() => switchScale()} role=presentation>{scaleLabel}</label>\n        <label for=\"\"> &nbsp|&nbsp </label>\n        <label for=\"\" class={`aaLabelBorder ${isRadius ? \"aaIsSelected\" : \"aaNotSelected\"}`} on:click={() => switchRadius()} role=presentation>{radiusLabel}</label>\n    </div>\n    <div>\n        <input\n            type=\"number\"\n            bind:value={$animation.data[section].options[field]}\n            placeholder={placeholder}\n            step={step}\n        />\n    </div>\n</div>\n\n<style lang='scss'>\n    .aaLabelBorder {\n        border-radius: 5px;\n        padding: 1px 5px 1px 5px;\n    }\n    .aaIsSelected {\n        border: 1px solid black;\n    }\n    .aaNotSelected {\n        border: 1px solid rgba(115, 115, 115, 0.623);\n    }\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n\n    import { localize }     from \"#runtime/util/i18n\";\n\n    import { TJSSvgFolder } from \"#standard/component/folder\";\n\n    import VideoSelect      from \"../Components/VideoSelect.svelte\";\n    import Opacity          from \"./inputComponents/Opacity.svelte\";\n    import Elevation        from \"./inputComponents/Elevation.svelte\";\n    import OptionsDialog    from \"../Components/options/optionsInfoDialog.js\";\n    import ScaleRadius      from \"./inputComponents/ScaleRadius.svelte\";\n    import SoundSettings    from \"../Components/SoundSettings.svelte\";\n\n    import { gameSettings } from \"#gameSettings\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n    let { animation } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const styling = {\n        \"--tjs-summary-font-family\":\n            '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n        \"--tjs-summary-font-size\": \"1.1em\",\n        \"--tjs-summary-chevron-size\": \"0.7em\",\n    };\n    const betweenFolder = {\n        styles: styling,\n        label:\n            game.i18n.localize(\"autoanimations.menus.between\") +\n            \" \" +\n            game.i18n.localize(\"autoanimations.menus.animation\"),\n    };\n\n    const startFolder = {\n        styles: styling,\n        label:\n            game.i18n.localize(\"autoanimations.menus.start\") +\n            \" \" +\n            game.i18n.localize(\"autoanimations.menus.animation\"),\n    };\n\n    const endFolder = {\n        styles: styling,\n        label:\n            game.i18n.localize(\"autoanimations.menus.end\") +\n            \" \" +\n            game.i18n.localize(\"autoanimations.menus.animation\"),\n    };\n\n    const isGM = game.user.isGM;\n</script>\n\n<div class=\"aa-options-border\" style=\"padding-left: 1em; padding-right: 1em\">\n    <div class=\"aa-SectionHeader\" style=\"text-align:center\">\n        <div>\n            <label for=\"\"\n                >{localize(\"autoanimations.menus.movement\") +\n                    \" \" +\n                    localize(\"autoanimations.menus.options\")}</label\n            >\n            <i\n                class=\"fas fa-info-circle aa-blue\"\n                style=\"font-size: 1.2em\"\n                title=\"Quick Reference\"\n                on:click={() => OptionsDialog.show(\"preset\", \"teleportation\")}\n                role=presentation\n            />\n        </div>\n    </div>\n    <table class=\"d\">\n        <tr>\n            <td>\n                <div>\n                    <label for=\"\">Range Marker</label>\n                </div>\n                <div class=\"flexcol\">\n                    <select\n                        bind:value={$animation.data.options.measureType}\n                        style=\"width: 95%; align-self: center\"\n                    >\n                        <option value=\"alternating\"\n                            >{localize(\n                                \"autoanimations.menuTypes.circle\"\n                            )}</option\n                        >\n                        <option value=\"equidistant\"\n                            >{localize(\n                                \"autoanimations.menuTypes.square\"\n                            )}</option\n                        >\n                    </select>\n                </div>\n            </td>\n            <td class={isGM ? \"\" : \"aa-disableOpacity\"}>\n                <div>\n                    <label for=\"Hide {animation._data.id}\"\n                        >{localize(\"autoanimations.menus.hideBorder\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"checkbox\"\n                        id=\"Hide {animation._data.id}\"\n                        bind:checked={$animation.data.options.hideFromPlayers}\n                    />\n                </div>\n            </td>\n            <td>\n                <div>\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.ranged\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.data.options.range}\n                        placeholder=\"30\"\n                        step=\".01\"\n                    />\n                </div>\n            </td>\n        </tr>\n        <tr>\n            <td>\n                <div>\n                    <label for=\"Hide {animation._data.id}\"\n                        >{localize(\"autoanimations.menus.teleport\")}\n                        {localize(\"autoanimations.menus.token\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"checkbox\"\n                        id=\"Hide {animation._data.id}\"\n                        bind:checked={$animation.data.options.teleport}\n                    />\n                </div>\n            </td>\n            <td>\n                <div>\n                    <label for=\"\">Delay Movement</label>\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.data.options.delayMove}\n                        placeholder=\"30\"\n                        step=\".01\"\n                    />\n                </div>\n            </td>\n            <td\n                class={$animation.data.options.teleport\n                    ? \"aa-disableOpacity\"\n                    : \"\"}\n            >\n                <div>\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.speed\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.data.options.speed}\n                        placeholder=\"30\"\n                        step=\".01\"\n                    />\n                </div>\n            </td>\n        </tr>\n        <tr>\n            <td>\n                <div class=\"flexcol\">\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.token\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.alpha\")}</label\n                    >\n                    <div\n                        style=\"display: flex; margin-right: 1.5em; margin-left: 1.5em;\"\n                    >\n                        <input\n                            type=\"number\"\n                            bind:value={$animation.data.options.alpha}\n                            placeholder=\"1\"\n                            min=\"0\"\n                            max=\"1\"\n                            step=\"0.01\"\n                        />\n                        <input\n                            style=\"border:none; background:none;margin-left: 3px;\"\n                            type=\"range\"\n                            min=\"0\"\n                            max=\"1\"\n                            step=\"0.01\"\n                            bind:value={$animation.data.options.alpha}\n                        />\n                    </div>\n                </div>\n            </td>\n            <td>\n                <div>\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.delay\")}\n                        {localize(\"autoanimations.menus.fadeOut\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.data.options.delayFade}\n                        placeholder=\"1\"\n                        step=\"1\"\n                    />\n                </div>\n            </td>\n            <td>\n                <div>\n                    <label for=\"\"\n                        >{localize(\"autoanimations.menus.delay\")}\n                        {localize(\"autoanimations.menus.fadeIn\")}</label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"number\"\n                        bind:value={$animation.data.options.delayReturn}\n                        placeholder=\"1\"\n                        step=\"1\"\n                    />\n                </div>\n            </td>\n        </tr>\n        <tr>\n            <td></td>\n            <td>\n                <div>\n                    <label for=\"Collision {animation._data.id}\"\n                        >{localize(\"autoanimations.menus.checkCollision\")}\n                        </label\n                    >\n                </div>\n                <div>\n                    <input\n                        type=\"checkbox\"\n                        id=\"Collision {animation._data.id}\"\n                        bind:checked={$animation.data.options.checkCollision}\n                    />\n                </div>\n            </td>\n            <td></td>\n        </tr>\n    </table>\n</div>\n<SoundSettings section=\"data\" />\n<div class=\"aa-section-border\">\n    <TJSSvgFolder folder={startFolder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Source FX On/Off\"\n                bind:checked={$animation.data.start.enable}\n            />\n        </div>\n        <div class={$animation.data.start.enable ? \"\" : \"aa-disableOpacity\"}>\n            <VideoSelect\n                title=\"Start Animation\"\n                section=\"data\"\n                section02=\"start\"\n            />\n            <div class=\"aa-options-border\">\n                <TJSSvgFolder {folder} animate={$uiAnimation}>\n                    <table class=\"d\">\n                        <tr>\n                            <td>\n                                <!--Set Masking-->\n                                <div>\n                                    <label for=\"Masked {animation._data.id}\"\n                                        >{localize(\"autoanimations.menus.mask\")}\n                                    </label>\n                                    <input\n                                        type=\"checkbox\"\n                                        id=\"Masked {animation._data.id}\"\n                                        bind:checked={$animation.data.start\n                                            .options.isMasked}\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <Elevation section=\"start\" />\n                            </td>\n                            <td>\n                                <!--Set Size of Animation-->\n                                <ScaleRadius\n                                    section={\"start\"}\n                                    field={\"size\"}\n                                    step=\"0.01\"\n                                />\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                <!--Set Animation Opacity-->\n                                <Opacity section=\"start\" />\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.fadeIn\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.start\n                                            .options.fadeIn}\n                                        placeholder=\"1\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.fadeOut\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.start\n                                            .options.fadeOut}\n                                        placeholder=\"1\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                <div>\n                                    <label for=\"\">{localize(\"autoanimations.menus.playbackRate\")}</label>\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.start.options.playbackRate}\n                                        placeholder=\"1\"\n                                        step=\".1\"\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.delay\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.start\n                                            .options.delay}\n                                        placeholder=\"250\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                            <td />\n                        </tr>\n                    </table>\n                </TJSSvgFolder>\n            </div>\n        </div>\n    </TJSSvgFolder>\n</div>\n<div class=\"aa-section-border\">\n    <TJSSvgFolder folder={betweenFolder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Source FX On/Off\"\n                bind:checked={$animation.data.between.enable}\n            />\n        </div>\n        <div class={$animation.data.between.enable ? \"\" : \"aa-disableOpacity\"}>\n            <VideoSelect\n                title={localize(\"autoanimations.menus.between\") +\n                    \" \" +\n                    localize(\"autoanimations.menus.animation\")}\n                section=\"data\"\n                section02=\"between\"\n            />\n            <div class=\"aa-options-border\">\n                <TJSSvgFolder {folder} animate={$uiAnimation}>\n                    <table class=\"d\">\n                        <tr>\n                            <td>\n                                <Elevation section=\"between\" />\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.playbackRate\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.between\n                                            .options.playbackRate}\n                                        placeholder=\"1\"\n                                        step=\".01\"\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <!--Set Animation Opacity-->\n                                <Opacity section=\"between\" />\n                            </td>\n                        </tr>\n                        <tr>\n                            <td />\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.delay\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.between\n                                            .options.delay}\n                                        placeholder=\"250\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                            <td />\n                        </tr>\n                    </table>\n                </TJSSvgFolder>\n            </div>\n        </div>\n    </TJSSvgFolder>\n</div>\n<div class=\"aa-section-border\">\n    <TJSSvgFolder folder={endFolder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <input\n                on:click|stopPropagation\n                type=\"checkbox\"\n                style=\"align-self:center\"\n                title=\"Toggle Source FX On/Off\"\n                bind:checked={$animation.data.end.enable}\n            />\n        </div>\n        <div class={$animation.data.end.enable ? \"\" : \"aa-disableOpacity\"}>\n            <VideoSelect\n                title=\"End Animation\"\n                section=\"data\"\n                section02=\"end\"\n            />\n            <div class=\"aa-options-border\">\n                <TJSSvgFolder {folder} animate={$uiAnimation}>\n                    <table class=\"d\">\n                        <tr>\n                            <td>\n                                <!--Set Masking-->\n                                <div>\n                                    <label for=\"Masked {animation._data.id}\"\n                                        >{localize(\"autoanimations.menus.mask\")}\n                                    </label>\n                                    <input\n                                        type=\"checkbox\"\n                                        id=\"Masked {animation._data.id}\"\n                                        bind:checked={$animation.data.end\n                                            .options.isMasked}\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <Elevation section=\"end\" />\n                            </td>\n                            <td>\n                                <!--Set Size of Animation-->\n                                <ScaleRadius\n                                    section={\"end\"}\n                                    field={\"size\"}\n                                    step=\"0.01\"\n                                />\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                <!--Set Animation Opacity-->\n                                <Opacity section=\"end\" />\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.fadeIn\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.end.options\n                                            .fadeIn}\n                                        placeholder=\"1\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.fadeOut\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.end.options\n                                            .fadeOut}\n                                        placeholder=\"1\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                <div>\n                                    <label for=\"\">{localize(\"autoanimations.menus.playbackRate\")}</label>\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.end.options.playbackRate}\n                                        placeholder=\"1\"\n                                        step=\".1\"\n                                    />\n                                </div>\n                            </td>\n                            <td>\n                                <div>\n                                    <label for=\"\"\n                                        >{localize(\n                                            \"autoanimations.menus.delay\"\n                                        )}</label\n                                    >\n                                </div>\n                                <div>\n                                    <input\n                                        type=\"number\"\n                                        bind:value={$animation.data.end.options\n                                            .delay}\n                                        placeholder=\"250\"\n                                        step=\"1\"\n                                    />\n                                </div>\n                            </td>\n                            <td />\n                        </tr>\n                    </table>\n                </TJSSvgFolder>\n            </div>\n        </div>\n    </TJSSvgFolder>\n</div>\n\n<style lang=\"scss\">\n    .aa-SectionHeader {\n        border-bottom: 2px solid rgba(181, 69, 52, 0.5);\n        margin-right: 5%;\n        margin-left: 5%;\n        margin-bottom: 5px;\n        label {\n            align-self: center;\n            font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n            font-size: x-large;\n            font-weight: bold;\n            text-align: center;\n            margin-right: 6%;\n            margin-left: 6%;\n            color: black;\n            padding: 2px;\n        }\n    }\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import SectionHeader        from \"../Components/SectionHeader.svelte\";\n    import SoundSettings        from \"../Components/SoundSettings.svelte\";\n    import Elevation            from \"../Components/options/inputComponents/Elevation.svelte\";\n    import Opacity              from \"./inputComponents/Opacity02.svelte\";\n    import OptionsDialog        from \"../Components/options/optionsInfoDialog.js\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n    let { animation, category, idx } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const title = \"Thunderwave 5e\";\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n       icon: \"fas fa-info-circle\",\n       title: \"autoanimations.menus.quickReference\",\n       styles: {\n          \"--tjs-icon-button-diameter\": \"1.em\",\n          position: \"relative\",\n          left: \"10px\",\n          bottom: \"-2px\",\n          color: \"rgba(50, 79, 245, 0.5)\"\n       }\n    };\n</script>\n\n<div class=\"aa-section-border\">\n    <SectionHeader {title} />\n    <div class=\"aa-3wide aa-select-label\">\n        <div class=\"flexcol\" style=\"grid-row: 1/2; grid-column: 2/3; margin-bottom: 1em\">\n            <label for=\"\" style=\"align-self:center; font-size:1.2em\">{localize(\"autoanimations.menus.color\")}</label>\n            <select bind:value={$animation.data.video.color}>\n                {#each category.colorMenu.templatefx.square.thunderwave.mid as [key, name]}\n                    <option value={key}>{name}</option>\n                {/each}\n            </select>\n        </div>\n    </div>\n    <div class=\"aa-options-border\">\n        <TJSSvgFolder {folder} animate={$uiAnimation}>\n            <div slot=\"summary-end\">\n                <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"preset\", \"thunderwave\")}/>\n            </div>\n            <table class=\"d\">\n                <tr>\n                    <td>\n                        <Elevation section=\"data\" />\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\n                                    \"autoanimations.menus.repeat\"\n                                )}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.options.repeat}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                    <td>\n                        <div>\n                            <label for=\"\"\n                                >{localize(\"autoanimations.menus.delay\")}</label\n                            >\n                        </div>\n                        <div>\n                            <input\n                                type=\"number\"\n                                bind:value={$animation.data.options.repeatDelay}\n                                placeholder=\"1\"\n                                step=\"1\"\n                            />\n                        </div>\n                    </td>\n                </tr>\n                <tr>\n                    <td>\n                        <Opacity />\n                    </td>\n                    <td>\n                        <!--Set Only X Scaling-->\n                        <div>\n                            <label for=\"Remove {animation._data.id}\"\n                                >{localize(\"autoanimations.menus.remove\")}\n                            </label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"Remove {animation._data.id}\"\n                                bind:checked={$animation.data.options.removeTemplate}\n                            />\n                        </div>\n                    </td>\n                    <td></td>\n                </tr>\n            </table>\n        </TJSSvgFolder>\n    </div>\n    <SoundSettings section=\"data\" />\n\n</div>\n\n<style lang=\"scss\">\n    .aa-3wide {\n        display: grid;\n        grid-template-columns: 32.67% 32.67% 32.67%;\n        grid-gap: 1%;\n        align-items: end;\n        margin-right: 3%;\n        margin-left: 3%;\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-weight: bold;\n        justify-items: center;\n        color: black;\n    }\n</style>\n","<script>\n    import { localize }         from \"#runtime/util/i18n\";\n    import { getContext }       from \"svelte\";\n\n    import DualAttach           from \"../Presets/DualAttach.svelte\"\n    import ProjectileToTemplate from \"../Presets/ProjectileToTemplate.svelte\";\n    import Teleportation        from \"../Presets/Teleportation.svelte\";\n    import Thunderwave          from \"../Presets/Thunderwave.svelte\";\n    import SectionButtons       from \"../Components/SectionButtons02.svelte\";\n    import Macro                from \"../Components/Macro.svelte\";\n    import SoundOnly            from \"../Components/SoundOnly.svelte\";\n    import { preset }           from \"../../_AutorecMenu/store/default-data/newSection/preset.js\"\n    //import * as reset           from \"../Presets/presetDefaults\";\n\n    //export let animation;\n    //export let category;\n    //export let idx = 0;\n    export let fromMenu = 'autorec';\n    let { animation } = getContext('animation-data');\n\n    let presetType = $animation.presetType || \"proToTemp\";\n\n    let presetContent = {\n        dualattach: {\n            component: DualAttach,\n        },\n        proToTemp: {\n            component: ProjectileToTemplate,\n        },\n        teleportation: {\n            component: Teleportation,\n        },\n        thunderwave: {\n            component: Thunderwave,\n        },\n        \"\": {},\n    };\n\n    let presetRoute = presetContent[presetType].component\n    $: presetRoute;\n\n    function changePreset() {\n        let newData = preset({}, $animation.presetType)\n        switch (animation._data.presetType) {\n            case \"dualattach\":\n                $animation.data = newData.data;\n                delete $animation.secondary;\n                delete $animation.target;\n                presetRoute = presetContent.dualattach.component;\n                break;\n            case \"teleportation\":\n                $animation.data = newData.data;\n                delete $animation.secondary;\n                delete $animation.target;\n                presetRoute = presetContent.teleportation.component;\n                break;\n            case \"thunderwave\":\n                $animation.data = newData.data;\n                delete $animation.secondary;\n                delete $animation.target;\n                presetRoute = presetContent.thunderwave.component;\n                break;\n            case \"proToTemp\":\n                $animation.data = newData.data;\n                $animation.secondary = newData.secondary;\n                $animation.target = newData.target;\n                presetRoute = presetContent.proToTemp.component;\n                break;\n        }\n    }\n\n    $: soundOnly = $animation.soundOnly.sound.enable;\n    $: macroEnabled = $animation.macro.enable;\n    $: macroPlay = $animation.macro.playWhen;\n</script>\n\n<SectionButtons type={fromMenu}  />\n<div hidden={!soundOnly}>\n    <SoundOnly />\n</div>\n<div hidden={!macroEnabled}>\n    <Macro />\n</div>\n<div hidden={soundOnly || (macroEnabled && macroPlay === \"2\")}>\n        <div class=\"aa-pickAnim\">\n            <div\n                class=\"flexcol\"\n                style=\"grid-row: 2 / 3;grid-column: 2 / 3;margin-bottom: 0.75em;\"\n            >\n                <label for=\"1\"\n                    >{localize(\"autoanimations.menus.preset\")}\n                    {localize(\"autoanimations.menus.type\")}</label\n                >\n                <select\n                    bind:value={$animation.presetType}\n                    on:change={() => changePreset()}\n                    style=\"background-color: rgba(21, 154, 169, 0.4);width: 95%;\"\n                >\n                    <option value=\"dualattach\"\n                        >{localize(\n                            \"autoanimations.presetTypes.dualattach\"\n                        )}</option\n                    >\n                    <option value=\"proToTemp\"\n                        >{localize(\n                            \"autoanimations.presetTypes.proToTemp\"\n                        )}</option\n                    >\n                    <option value=\"teleportation\"\n                        >{localize(\n                            \"autoanimations.presetTypes.animTeleportation\"\n                        )}</option\n                    >\n                    <option value=\"thunderwave\"\n                        >{localize(\"autoanimations.presetTypes.thunderwave\")} D&D\n                        5e</option\n                    >\n                </select>\n            </div>\n        </div>\n        <svelte:component this={presetRoute} />\n</div>\n\n<style lang=\"scss\">\n    .aa-pickAnim {\n        display: grid;\n        grid-template-columns: 25% 50% 25%;\n        padding: 5px;\n        margin-right: 5%;\n        margin-left: 5%;\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-size: large;\n        font-weight: bold;\n        color: black;\n    }\n    .aa-pickAnim select {\n        text-align: center;\n        font-weight: bold;\n        min-height: 2em;\n        border-radius: 50%;\n        align-self: center;\n        background-color: rgba(21, 154, 169, 0.4);\n    }\n    .aa-pickAnim label {\n        align-self: center;\n    }\n</style>\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"../../Components/options/inputComponents/NumberInput.svelte\";\n    import Elevation            from \"../../Components/options/inputComponents/Elevation.svelte\";\n    import ScaleRadius          from \"../../Components/options/inputComponents/ScaleRadius.svelte\";\n    import Opacity              from \"../../Components/options/inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"../../Components/options/optionsInfoDialog.js\";\n    import WaitDelay            from \"../../Components/options/inputComponents/WaitDelay.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n       icon: \"fas fa-info-circle\",\n       title: \"autoanimations.menus.quickReference\",\n       styles: {\n          \"--tjs-icon-button-diameter\": \"1.em\",\n          position: \"relative\",\n          left: \"10px\",\n          bottom: \"-2px\",\n          color: \"rgba(50, 79, 245, 0.5)\"\n       }\n    };\n\n    $: persistent = $animation.primary.options.persistent;\n    //$: isRadius = $animation.data.options.isRadius;\n\n    const addWidth = game.i18n.localize(\"autoanimations.menus.add\") + \" \" + game.i18n.localize(\"autoanimations.menus.token\") + \" \" + game.i18n.localize(\"autoanimations.menus.width\");\n\n    $: isRadius = $animation.primary.options.isRadius;\n\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"ontoken\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation section=\"primary\" />\n                </td>\n                <td>\n                    <!--Set Number of times the animation plays-->\n                    <NumberInput\n                        label={localize(\"autoanimations.menus.repeat\")}\n                        section={\"primary\"}\n                        field={\"repeat\"}\n                        isDisabled={persistent ? \"aa-disableOpacity\" : \"\"}\n                    />\n                </td>\n                <td>\n                    <!--Set delay between repeats-->\n                    <NumberInput\n                        label={localize(\"autoanimations.menus.repeat\") +\n                            \" \" +\n                            localize(\"autoanimations.menus.delay\")}\n                        section={\"primary\"}\n                        field={\"repeatDelay\"}\n                        isDisabled={persistent ? \"aa-disableOpacity\" : \"\"}\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Persistence-->\n                    <div>\n                        <label for=\"Persist {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.persistant\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Persist {animation._data.id}\"\n                            bind:checked={$animation.primary.options.persistent}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Visibility Binding-->\n                    <div\n                        class=\"{persistent\n                            ? ''\n                            : 'aa-disableOpacity'}\"\n                    >\n                        <label for=\"Vis {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\")}\n                            {localize(\"autoanimations.menus.visibility\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Vis {animation._data.id}\"\n                            bind:checked={$animation.primary.options\n                                .unbindVisibility}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Alpha Binding-->\n                    <div\n                        class=\"{persistent\n                            ? ''\n                            : 'aa-disableOpacity'}\"\n                    >\n                        <label for=\"Alpha {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\")}\n                            {localize(\"autoanimations.menus.alpha\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Alpha {animation._data.id}\"\n                            bind:checked={$animation.primary.options\n                                .unbindAlpha}\n                        />\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Masking-->\n                    <div>\n                        <label for=\"Masked {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.mask\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Masked {animation._data.id}\"\n                            bind:checked={$animation.primary.options.isMasked}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity />\n                </td>\n                <td>\n                    <!--Set Z-Index of Animation-->\n                    <NumberInput\n                        label={localize(\"autoanimations.menus.z-index\")}\n                        section={\"primary\"}\n                        field={\"zIndex\"}\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Scale of Animation. Not rendered if Anim Type is Templates-->\n                    <ScaleRadius\n                        section={\"primary\"}\n                        field={\"size\"}\n                        step=\"0.01\"\n                    />\n                </td>\n                <td>\n                    <!--Add Token Width-->\n                    <div class={isRadius ? \"\" : \"aa-disableOpacity\"}>\n                        <label for=\"Width {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.add\")}\n                            {localize(\"autoanimations.menus.token\")}\n                            {localize(\"autoanimations.menus.width\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Width {animation._data.id}\"\n                            bind:checked={$animation.primary.options.addTokenWidth}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <NumberInput\n                    label={localize(\"autoanimations.menus.fadeIn\")}\n                    section=\"primary\"\n                    field=\"fadeIn\"\n                    placeholder=250\n                    step=\"0.01\"\n                    />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    label={localize(\"autoanimations.menus.fadeOut\")}\n                    section=\"primary\"\n                    field=\"fadeOut\"\n                    placeholder=500\n                    step=\"0.01\"\n                    />\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.anchor\")}</label>\n                    </div>\n                    <div>\n                        <input type=\"text\" placeholder=\"0.5\" bind:value={$animation.primary.options.anchor}>\n                    </div>\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\"><strong>{localize(\"autoanimations.menus.playOn\")}</strong></label>\n                    </div>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.source\")}</label>\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <NumberInput\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"primary\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n                <td>\n                    <WaitDelay section=\"primary\"/>\n                </td>\n                <td></td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n","<script>\n    import VideoSelect      from \"../Components/VideoSelect.svelte\";\n    import OnTokenOptions   from \"./options/OnTokenOptions.svelte\";\n    import SoundSettings    from \"../Components/SoundSettings.svelte\";\n    import ExtraSource      from \"../Components/ExtraSource.svelte\";\n    import Secondary        from \"../Components/Secondary.svelte\";\n    import EffectColor      from \"../Components/options/EffectColor.svelte\";\n    import { getContext }   from \"svelte\";\n\n    let { animation } = getContext('animation-data');\n    //export let idx = 0;\n    //export let category;\n\n    let title =\n        game.i18n.localize(\"autoanimations.menus.primary\") +\n        \" \" +\n        game.i18n.localize(\"autoanimations.menus.animation\");\n\n</script>\n\n    <div hidden={$animation.macro.enable && $animation.macro.playWhen === \"2\"}>\n        <ExtraSource />\n        <div class=\"aa-primary-border\">\n            <VideoSelect section=\"primary\" {title} />\n            <OnTokenOptions />\n            <svelte:component this={EffectColor} />\n            <SoundSettings section=\"primary\" />\n        </div>\n        <Secondary  />\n    </div>\n\n<style lang=\"scss\">\n</style>\n","<script>\n    import { localize }     from \"#runtime/util/i18n\";\n    import { getContext }   from \"svelte\";\n\n    import BuildAeOnToken   from \"../ActiveEffects/BuildAEOnToken.svelte\";\n    import BuildAeAura      from \"../ActiveEffects/BuildAEAura.svelte\";\n    import SectionButtons   from \"../Components/SectionButtons02.svelte\";\n    import Macro            from \"../Components/Macro.svelte\";\n    import SoundOnly        from \"../Components/SoundOnly.svelte\";\n    import { aefx }         from \"../../_AutorecMenu/store/default-data/newSection/aefx.js\"\n\n    //export let animation;\n    //export let category;\n    //export let idx;\n    export let fromMenu = 'autorec';\n    let { animation } = getContext('animation-data');\n\n    $: activeEffectType = $animation.activeEffectType;\n\n    let aeContent = {\n        ontoken: {\n            component: BuildAeOnToken,\n        },\n        aura: {\n            component: BuildAeAura,\n        },\n        \"\": {},\n    };\n\n    $: activeEffectRoute = aeContent[activeEffectType].component;\n\n    function changeAE() {\n        let newData = aefx({}, animation._data.activeEffectType)\n        switch (animation._data.activeEffectType) {\n            case \"ontoken\":\n                $animation.primary = newData.primary;\n                break;\n            case \"aura\":\n                $animation.primary = newData.primary;\n                break;\n        }\n    }\n\n    $: soundOnly = $animation.soundOnly.sound.enable;\n    $: macroEnabled = $animation.macro.enable;\n</script>\n\n<SectionButtons type={fromMenu} />\n<div hidden={!soundOnly}>\n    <SoundOnly />\n</div>\n<div hidden={!macroEnabled}>\n    <Macro  />\n</div>\n<div hidden={soundOnly}>\n    <div hidden={$animation.macro.enable && $animation.macro.playWhen === \"2\"}>\n        <div class=\"aa-pickAnim\">\n            <div\n                class=\"flexcol\"\n                style=\"grid-row: 2 / 3;grid-column: 2 / 3;margin-bottom: 1em;\"\n            >\n                <label for=\"\"\n                    >{localize(\"autoanimations.menus.animation\")}\n                    {localize(\"autoanimations.menus.type\")}</label\n                >\n                <select\n                    bind:value={$animation.activeEffectType}\n                    on:change={() => changeAE()}\n                    style=\"background-color: rgba(21, 154, 169, 0.4);width: 12em;\"\n                >\n                    <option value=\"ontoken\"\n                        >{localize(\"autoanimations.animTypes.ontoken\")}</option\n                    >\n                    <option value=\"aura\"\n                        >{localize(\"autoanimations.animTypes.aura\")}</option\n                    >\n                </select>\n            </div>\n        </div>\n        <svelte:component this={activeEffectRoute} />\n    </div>\n</div>\n\n<style lang=\"scss\">\n    .aa-pickAnim {\n        display: grid;\n        grid-template-columns: 25% 50% 25%;\n        margin-right: 5%;\n        margin-left: 5%;\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-size: large;\n        font-weight: bold;\n        color: black;\n    }\n    .aa-pickAnim select {\n        text-align: center;\n        font-weight: bold;\n        min-height: 2em;\n        border-radius: 50%;\n        align-self: center;\n        background-color: rgba(21, 154, 169, 0.4);\n    }\n    .aa-pickAnim label {\n        align-self: center;\n    }\n</style>\n","import BuildMelee            from \"./BuildMelee.svelte\";\nimport BuildRange            from \"./BuildRange.svelte\";\nimport BuildOnToken          from \"./BuildOnToken.svelte\";\nimport BuildTemplateFx       from \"./BuildTemplateFX.svelte\";\nimport BuildAura             from \"./BuildAura.svelte\";\nimport BuildPreset           from \"./BuildPreset.svelte\";\nimport BuildActiveEffects    from \"./BuildActiveEffects.svelte\";\n\n/**\n * Selects the appropriate build menu component for the given category key.\n *\n * @param categoryKey\n * @returns {*}\n */\nexport function selectBuildMenu(categoryKey) {\n   let component;\n\n   switch (categoryKey) {\n      case \"aaAutorec-melee\":\n         component = BuildMelee;\n         break;\n\n      case \"aaAutorec-range\":\n         component = BuildRange;\n         break;\n\n      case \"aaAutorec-ontoken\":\n         component = BuildOnToken;\n         break;\n\n      case \"aaAutorec-templatefx\":\n         component = BuildTemplateFx;\n         break;\n\n      case \"aaAutorec-aura\":\n         component = BuildAura;\n         break;\n\n      case \"aaAutorec-preset\":\n         component = BuildPreset;\n         break;\n\n      case \"aaAutorec-aefx\":\n         component = BuildActiveEffects;\n         break;\n\n      default:\n         throw new Error(`'selectBuildMenu' error: unknown category key: ${categoryKey}`);\n   }\n\n   return component;\n}\n","<script>\n   import { setContext }            from \"svelte\";\n\n   import {\n      ripple,\n      rippleFocus }                 from \"#standard/action/animate/composable\";\n\n   import { TJSSvgFolder }          from \"#standard/component/folder\";\n   import { TJSInput }              from \"#standard/component/form\";\n\n   import OverflowSlot              from \"./OverflowSlot.svelte\";\n\n   import { createOverflowItems }   from \"./createOverflowItems.js\";\n\n   import { selectBuildMenu }       from \"../../../Menus/BuildMenu/selectBuildMenu.js\";\n\n   import { gameSettings }          from \"#gameSettings\";\n\n   /** @type {AnimationStore} */\n   export let animation = void 0;\n\n   /** @type {CategoryStore} */\n   export let category = void 0;\n\n   //** Menu builder set in the Category List. Determines which menu set will be rendered*/\n   export let idx = void 0;\n\n   setContext('animation-data', {animation, category, idx})\n\n   /**\n    * Game setting store to control folder animation.\n    */\n   const uiAnimation = gameSettings.getStore('uiAnimation');\n\n   /**\n    * @type {object} Defines folder data for TJSIconFolder.\n    */\n   const folder = {\n      options: { chevronOnly: true },\n      store: animation.stores.folderOpen\n   };\n\n   const input = {\n      store: animation.stores.label,\n      efx: rippleFocus(),\n      placeholder: \"autoanimations.menus.itemName\",\n      options: { cancelOnEscKey: true }\n   };\n\n   const buttonOverflow = {\n      icon: 'fas fa-ellipsis-v',\n      efx: ripple(),\n      styles: { 'margin-left': '0.5em' },\n      clickPropagate: false   // Necessary to capture click for Firefox.\n   };\n\n   const menu = {\n      items: createOverflowItems(animation, category),\n   };\n\n   $: isExactMatch = $animation.advanced?.exactMatch;\n   $: excludedTerms = $animation.advanced?.excludedTerms;\n   $: exactMatchButton = {\n       icon: isExactMatch ? \"fas fa-equals\" : excludedTerms?.length ? \"fas fa-not-equal\" : \"\",\n       title: isExactMatch ? \"Exact Match\" : excludedTerms?.length ? \"Has Excluded Terms\" : \"\",\n    };\n</script>\n\n<div class=animation>\n   <TJSSvgFolder {folder} animate={$uiAnimation}>\n         <TJSInput {input} slot=label />\n         <OverflowSlot info={exactMatchButton} {menu} slot=summary-end />\n         <svelte:component this={selectBuildMenu(category.key)} {animation} {idx} {category} />\n   </TJSSvgFolder>\n</div>\n\n<style lang=scss>\n  div {\n    background: rgba(199, 199, 199, 0.85);\n    border: 2px solid rgba(0, 0, 0, 0.75);\n    border-radius: 0.75em;\n\n    height: fit-content;\n    width: 100%;\n\n    // TJSIconFolder styles\n    --tjs-summary-width: 98%;\n    --tjs-summary-margin: 0 0 0 1%;\n\n    // TJSInput styles\n    --tjs-input-text-align: center;\n    --tjs-input-border: 1.5px outset rgba(0, 0, 0, 0.5);\n    --tjs-input-border-radius: 1em;\n    --tjs-input-flex: 1;\n  }\n</style>\n","<script>\n    import { TJSScrollContainer }   from \"#standard/component/container\";\n\n    import Animation                from \"../animation/Animation.svelte\";\n\n    /** @type {CategoryStore} */\n    export let category;\n\n    $: dataReducer = category.dataReducer;\n\n    /**\n     * When the data reducer count changes or there is any folder open / close changes invoke `calcAllFolderState`.\n     * This is debounced as the all open / closed button may adjust many folder states.\n     *\n     * @type {Function}\n     */\n    const onFolderChange = foundry.utils.debounce(() => category.calcAllFolderState(), 100);\n\n    $: onFolderChange($dataReducer);\n</script>\n\n<TJSScrollContainer scrollTop={category.stores.scrollTop}>\n   <main on:openAny={onFolderChange}\n         on:closeAny={onFolderChange}>\n      {#each [...$dataReducer] as animation, idx (animation.id)}\n         <section>\n            <Animation {animation} {idx} {category}/>\n         </section>\n      {/each}\n   </main>\n</TJSScrollContainer>\n\n<style lang=scss>\n   main {\n      display: flex;\n      flex-direction: column;\n      gap: 3px;\n\n      padding: 1rem 0.5rem 1rem 1rem;\n   }\n\n   section {\n      height: fit-content;\n      width: 100%;\n   }\n</style>\n","<script>\n    import { getContext }   from \"svelte\";\n    import { localize }     from \"#runtime/util/i18n\";\n\n    import { AAAutorecManager } from \"./AAAutorecManager.js\"\n\n    const { application } = getContext(\"#external\");\n\n    export let type;\n    export let menu;\n\n    let allMenus = false, melee, range, ontoken, templatefx, aura, preset, aefx;\n\n    $: melee = range = ontoken = templatefx = aura = preset = aefx = allMenus;\n\n    function importSelected() {\n        let selectedMenus = {\n            melee,\n            range,\n            ontoken,\n            templatefx,\n            aura,\n            preset,\n            aefx\n        }\n        if (type === \"merge\") {\n            mergeMenus(selectedMenus);\n        } else if (type === \"overwrite\") {\n            overwriteMenus(selectedMenus);\n        }\n        application.close();\n    }\n\n    async function mergeMenus(selectedMenus) {\n        let isValid = validateJson(menu);\n        if (!isValid) {\n            custom_error(\"You did not provide a valid JSON!\");\n            return;\n        }\n        const menuData = JSON.parse(menu)\n\n        function validateJson(json) {\n        try {\n            JSON.parse(json);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n        AAAutorecManager.mergeMenus(menuData, {...selectedMenus})\n    }\n\n    async function overwriteMenus(selectedMenus) {\n        AAAutorecManager.overwriteMenus(menu, {shouldSubmit: true, ...selectedMenus})\n    }\n</script>\n\n<header>\n    <div style=\"text-align: center; font-size: 1.5em\">\n        <label for=\"\">Choose Menus Import</label>\n    </div>\n</header>\n<table class=\"e\">\n    <tr>\n        <th colspan=\"2\">\n            <div>\n                <input\n                    type=\"checkbox\"\n                    bind:checked={allMenus}\n                />\n                <label for=\"\">Check / Uncheck All</label>\n            </div>\n        </th>\n    </tr>\n    <tr>\n        <td>\n            <div>\n                <input type=\"checkbox\" bind:checked={melee} />\n                <label for=\"\"\n                    >{localize(\"autoanimations.animTypes.melee\")}</label\n                >\n            </div>\n        </td>\n        <td>\n            <div>\n                <input type=\"checkbox\" bind:checked={range} />\n                <label for=\"\"\n                    >{localize(\"autoanimations.animTypes.range\")}</label\n                >\n            </div>\n        </td>\n    </tr>\n    <tr>\n        <td>\n            <div>\n                <input type=\"checkbox\" bind:checked={ontoken} />\n                <label for=\"\"\n                    >{localize(\"autoanimations.animTypes.ontoken\")}</label\n                >\n            </div>\n        </td>\n        <td>\n            <div>\n                <input type=\"checkbox\" bind:checked={templatefx} />\n                <label for=\"\"\n                    >{localize(\"autoanimations.animTypes.templatefx\")}</label\n                >\n            </div>\n        </td>\n    </tr>\n    <tr>\n        <td>\n            <div>\n                <input type=\"checkbox\" bind:checked={aura} />\n                <label for=\"\"\n                    >{localize(\"autoanimations.animTypes.aura\")}</label\n                >\n            </div>\n        </td>\n        <td>\n            <div>\n                <input type=\"checkbox\" bind:checked={preset} />\n                <label for=\"\"\n                    >{localize(\"autoanimations.animTypes.preset\")}</label\n                >\n            </div>\n        </td>\n    </tr>\n    <tr>\n        <td>\n            <div>\n                <input type=\"checkbox\" bind:checked={aefx} />\n                <label for=\"\">{localize(\"autoanimations.animTypes.aefx\")}</label\n                >\n            </div>\n        </td>\n    </tr>\n</table>\n<div class=\"aa-list\" />\n\n<footer>\n    <button on:click={() => importSelected()}>Import</button>\n</footer>\n\n<style lang=\"scss\">\n    table label {\n        position: relative;\n        bottom: 0.3em;\n        font-weight: bold;\n    }\n</style>\n","<script>\n   import { getContext } from \"svelte\";\n\n   import { TJSDialog } from \"#runtime/svelte/application\";\n   import { localize } from \"#runtime/util/i18n\";\n\n   import { AAAutorecManager } from \"./AAAutorecManager\";\n   import ImportMenus from \"./ImportMenus.svelte\";\n\n   const { application } = getContext(\"#external\");\n\n   async function restoreDefault() {\n      TJSDialog.confirm({\n         modal: false,\n         title: \"WARNING!!\",\n         content: `<p style=\"font-weight: bold; text-align: center; font-size: medium;\">This will ERASE your current Menu. ARE YOU SURE?</p>\n                    <br>\n                    <p style=\"text-align: center; font-size: small;\">A Backup will be Exported for Insurance</p> `,\n         onYes: () => setDefault(),\n         onNo: () => console.log(\"Exiting without default restore\"),\n         defaultYes: false,\n      }, { themeName: 'light' });\n\n      async function setDefault() {\n         AAAutorecManager.exportMenu(\"-backup\");\n         Hooks.call(\"AutomaticAnimations.Clear.Data\");\n         application.close();\n      }\n   }\n\n   async function mergeMenu() {\n      TJSDialog.confirm({\n         title: \"WARNING!!\",\n         modal: false,\n         content: `<p style=\"text-align:center\">This will <strong>Merge</strong> menus and is <strong>IRREVERSIBLE. Continue?</strong></p>`,\n         onYes: () => getFiles(),\n         onNo: () => console.log(\"Exiting without default restore\"),\n         defaultYes: false,\n      }, { themeName: 'light' });\n\n      async function getFiles() {\n         const content = await renderTemplate(\"modules/autoanimations/htmlTemplate/import-data.html\", {\n            entity: \"autoanimations\",\n            name: \"aaAutorec\",\n         });\n         TJSDialog.prompt({\n            title: \"Merge Menus\",\n            content: content,\n            modal: false,\n            onOk: ({ application: app }) => {\n               //@ts-ignore\n               const form = app.element.find(\"form\")[0];\n               if (!form.data.files.length) return ui.notifications?.error(\"You did not upload a data file!\");\n               readTextFromFile(form.data.files[0]).then(async (json) => {\n                  selectMenus(json, \"merge\");\n                  await application.close();\n               });\n            },\n         }, { themeName: 'light' });\n      }\n   }\n\n   function selectMenus(json, option) {\n      new TJSDialog({\n         modal: false,\n         title: \"IMPORT SETTINGS\",\n         content: {\n            class: ImportMenus,\n            props: {\n               type: option,\n               menu: json,\n            },\n         },\n         defaultYes: false,\n      }, { themeName: 'light' }).render(true);\n   }\n\n   async function overwriteMenu() {\n      TJSDialog.confirm({\n         title: \"WARNING!!\",\n         modal: false,\n         content: `<p style=\"text-align:center\">This will <strong>ERASE</strong> your current menu and is <strong>IRREVERSIBLE. Continue?</strong></p>`,\n         onYes: () => getFiles(),\n         onNo: () => console.log(\"Exiting without overwrite\"),\n         defaultYes: false,\n      }, { themeName: 'light' });\n\n      async function getFiles() {\n         const content = await renderTemplate(\"modules/autoanimations/htmlTemplate/import-data.html\", {\n            entity: \"autoanimations\",\n            name: \"aaAutorec\",\n         });\n         TJSDialog.prompt({\n            title: \"Overwrite Menu\",\n            content: content,\n            modal: false,\n            onOk: ({ application: app }) => {\n               const form = app.element.find(\"form\")[0];\n               if (!form.data.files.length) return ui.notifications?.error(\"You did not upload a data file!\");\n               readTextFromFile(form.data.files[0]).then(async (json) => {\n                  selectMenus(json, \"overwrite\");\n                  await application.close();\n               });\n            },\n         }, { themeName: 'light' });\n      }\n   }\n\n   async function exportMenu() {\n      AAAutorecManager.exportMenu(`-${game.system.id}`);\n      application.close();\n   }\n</script>\n\n<div class=\"flexcol aa-tabs\">\n   <div style=\"grid-row:1/2;grid-column:1/2\">\n      <button on:click={() => restoreDefault()} class=\"aa-orange\"\n         >{localize(\"autoanimations.settings.restoreDefault\")}</button\n      >\n   </div>\n   <div style=\"grid-row:1/2;grid-column:2/3\">\n      <label for=\"\">{localize(\"autoanimations.settings.restoreHint\")}</label>\n   </div>\n</div>\n<div class=\"flexcol aa-tabs\">\n   <div style=\"grid-row:2/3;grid-column:1/2\">\n      <button on:click|preventDefault={() => mergeMenu(\"merge\")} class=\"aa-green\">\n         {localize(\"autoanimations.menus.merge\")}\n         {localize(\"autoanimations.menus.menu\")}\n      </button>\n   </div>\n   <div style=\"grid-row:2/3;grid-column:2/3\">\n      <label for=\"\">{localize(\"autoanimations.settings.mergeHint\")}</label>\n   </div>\n</div>\n<div class=\"flexcol aa-tabs\">\n   <div style=\"grid-row:3/4;grid-column:1/2\">\n      <button on:click={() => overwriteMenu(\"overwrite\")} class=\"aa-red\"\n         >{localize(\"autoanimations.menus.overwrite\")}\n         {localize(\"autoanimations.menus.menu\")}</button\n      >\n   </div>\n   <div style=\"grid-row:3/4;grid-column:2/3\">\n      <label for=\"\">{localize(\"autoanimations.settings.overwriteHint\")}</label>\n   </div>\n</div>\n<div class=\"flexcol aa-tabs\">\n   <div style=\"grid-row:4/5;grid-column:1/2\">\n      <button on:click|preventDefault={() => exportMenu()} class=\"aa-blue\"\n         >{localize(\"autoanimations.menus.export\")}\n         {localize(\"autoanimations.menus.menu\")}</button\n      >\n   </div>\n   <div style=\"grid-row:4/5;grid-column:2/3\">\n      <label for=\"\">{localize(\"autoanimations.settings.exportHint\")}</label>\n   </div>\n</div>\n\n<style lang=\"scss\">\n   .aa-green {\n      background-color: rgba(25, 175, 2, 0.4);\n   }\n   .aa-orange {\n      background-color: rgba(219, 132, 2, 0.4);\n   }\n   .aa-red {\n      background-color: rgba(219, 38, 2, 0.4);\n   }\n   .aa-blue {\n      background-color: rgba(21, 154, 169, 0.4);\n   }\n   .aa-tabs {\n      display: grid;\n      grid-template-columns: 40% 59%;\n      grid-gap: 1%;\n      padding: 5px;\n      align-items: center;\n      align-content: center;\n      border: 2px inset grey;\n      background: rgb(190, 190, 190);\n      border-radius: 5px;\n      margin-bottom: 5px;\n   }\n   .aa-tabs button {\n      border-radius: 10px;\n      border: 2px groove rgb(204, 204, 204);\n      font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n      font-weight: bold;\n      font-size: large;\n      color: black;\n      line-height: 2em;\n   }\n</style>\n","import { TJSDialog }        from \"#runtime/svelte/application\";\n\nimport MenuManagerContent   from \"./MenuManager.svelte\";\n\nexport default class MenuManager extends TJSDialog {\n    static #app\n\n    /** @inheritDoc */\n    constructor()\n    {\n        super({\n            title: 'Menu Manager',\n            resizable: false,\n            content: {\n                class: MenuManagerContent,\n            }\n        }, {\n            id: `Autorec-Menu-Manager`,\n            minimizable: false,\n            width: 'auto',\n            height: 'auto',\n            themeName: 'light'\n        });\n    }\n\n    /**\n     * @inheritDoc\n     */\n    async close(options) {\n        Object.values(ui.windows).filter(app => app.id === \"Options-Information\" ||\n         app.id === \"Autorec-Video-Preview\").forEach(app => app.close());\n\n        MenuManager.#app = void 0;\n\n        return super.close(options);\n    }\n\n    /**\n     * Show a single static instance of MenuManager; if it is already open then bring it to top.\n     */\n    static show() {\n        if (this.#app)\n        {\n            this.#app.bringToTop();\n        }\n        else\n        {\n            this.#app = new MenuManager().render(true, { focus: true });\n        }\n    }\n}\n","import { DynArrayReducer } from '@typhonjs-fvtt/runtime/svelte/store/reducer';\nimport { isMinimalWritableStore, subscribeIgnoreFirst } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { Hashing, Timing } from '@typhonjs-fvtt/runtime/util';\nimport { isObject, hasGetter, klona } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\n * Provides a base implementation for store entries in {@link ArrayObjectStore}.\n *\n * In particular providing the required getting / accessor for the 'id' property.\n */\nclass ObjectEntryStore {\n    /**\n     */\n    #data;\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     * Invoked by ArrayObjectStore to provide custom duplication. Override this static method in your entry store.\n     *\n     * @param data - A copy of local data w/ new ID already set.\n     *\n     * @param arrayStore - The source ArrayObjectStore instance.\n     */\n    static duplicate(data, arrayStore) { } // eslint-disable-line no-unused-vars\n    /**\n     * @param data -\n     */\n    constructor(data) {\n        if (!isObject(data)) {\n            throw new TypeError(`'data' is not an object.`);\n        }\n        this.#data = data;\n        // If `id` is missing then add it.\n        if (typeof this.#data.id !== 'string') {\n            this.#data.id = Hashing.uuidv4();\n        }\n        if (!Hashing.isUuidv4(this.#data.id)) {\n            throw new Error(`'data.id' (${this.#data.id}) is not a valid UUIDv4 string.`);\n        }\n    }\n    /**\n     * @returns The object data tracked by this store.\n     */\n    get _data() { return this.#data; }\n    /**\n     * @returns The ID attribute in object data tracked by this store.\n     */\n    get id() { return this.#data.id; }\n    /**\n     * @returns A JSON data object for the backing data. The default implementation directly returns the backing private\n     *          data object. You may override this method to clone the data via {@link ObjectEntryStore._data}.\n     */\n    toJSON() {\n        return this.#data;\n    }\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        this.#subscribers.push(handler); // add handler to the array of subscribers\n        handler(this.#data); // call handler with current value\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index >= 0) {\n                this.#subscribers.splice(index, 1);\n            }\n        };\n    }\n    /**\n     * Update subscribers of this store. Useful for child implementations.\n     */\n    _updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this.#data);\n        }\n    }\n}\n\n/**\n * @typeParam S - Store type.\n */\nclass ArrayObjectStore {\n    /**\n     */\n    #data = [];\n    /**\n     */\n    #dataMap = new Map();\n    /**\n     */\n    #dataReducer;\n    /**\n     */\n    #manualUpdate;\n    /**\n     */\n    #StoreClass;\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     */\n    #updateSubscribersBound;\n    /**\n     * @returns The default object entry store constructor that can facilitate the creation of the required\n     *          {@link ArrayObjectStore.Options.Config.StoreClass} and generic `T` type parameter.\n     */\n    static get EntryStore() { return ObjectEntryStore; }\n    /**\n     * @param options - ArrayObjectStore options.\n     */\n    constructor({ StoreClass, childDebounce = 250, dataReducer = false, manualUpdate = false }) {\n        if (!Number.isInteger(childDebounce) || childDebounce < 0 || childDebounce > 1000) {\n            throw new TypeError(`'childDebounce' must be an integer between and including 0 - 1000.`);\n        }\n        if (typeof manualUpdate !== 'boolean') {\n            throw new TypeError(`'manualUpdate' is not a boolean.`);\n        }\n        if (!isMinimalWritableStore(StoreClass.prototype)) {\n            throw new TypeError(`'StoreClass' is not a minimal writable store constructor.`);\n        }\n        if (!hasGetter(StoreClass.prototype, 'id')) {\n            throw new TypeError(`'StoreClass' does not have a getter accessor for 'id' property.`);\n        }\n        this.#manualUpdate = manualUpdate;\n        this.#StoreClass = StoreClass;\n        if (dataReducer) {\n            this.#dataReducer = new DynArrayReducer({ data: this.#data });\n        }\n        // Prepare a debounced callback that is used for all child store entry subscriptions.\n        this.#updateSubscribersBound = childDebounce === 0 ? this.updateSubscribers.bind(this) :\n            Timing.debounce((update) => this.updateSubscribers(update), childDebounce);\n    }\n    /**\n     * Provide an iterator for public access to entry stores.\n     *\n     * @returns iterator\n     */\n    *[Symbol.iterator]() {\n        if (this.#data.length === 0) {\n            return;\n        }\n        for (const entryStore of this.#data) {\n            yield entryStore;\n        }\n    }\n    /**\n     * @returns The internal data array tracked allowing child classes direct access.\n     */\n    get _data() { return this.#data; }\n    /**\n     * @returns The data reducer.\n     */\n    get dataReducer() {\n        if (!this.#dataReducer) {\n            throw new Error(`'dataReducer' is not initialized; did you forget to specify 'dataReducer' as true in constructor options?`);\n        }\n        return this.#dataReducer;\n    }\n    /**\n     * @returns The length of all data.\n     */\n    get length() { return this.#data.length; }\n    /**\n     * Removes all child store entries.\n     */\n    clearEntries() {\n        for (const storeEntryData of this.#dataMap.values()) {\n            storeEntryData.unsubscribe();\n        }\n        this.#dataMap.clear();\n        this.#data.length = 0;\n        this.updateSubscribers();\n    }\n    /**\n     * Creates a new store from given data.\n     *\n     * @param entryData - Entry data.\n     *\n     * @returns The store\n     */\n    createEntry(entryData) {\n        if (!isObject(entryData)) {\n            throw new TypeError(`'entryData' is not an object.`);\n        }\n        if (typeof entryData.id !== 'string') {\n            entryData.id = Hashing.uuidv4();\n        }\n        if (this.#data.findIndex((entry) => entry.id === entryData.id) >= 0) {\n            throw new Error(`'entryData.id' (${entryData.id}) already in this ArrayObjectStore instance.`);\n        }\n        // The required `id` is added to `entryData` if not defined.\n        const store = this.#createStore(entryData);\n        this.updateSubscribers();\n        return store;\n    }\n    /**\n     * Add a new store entry from the given data.\n     *\n     * @param entryData - Entry data.\n     *\n     * @returns New store entry instance.\n     */\n    #createStore(entryData) {\n        const store = new this.#StoreClass(entryData, this);\n        if (!Hashing.isUuidv4(store.id)) {\n            throw new Error(`'store.id' (${store.id}) is not a UUIDv4 compliant string.`);\n        }\n        const unsubscribe = subscribeIgnoreFirst(store, this.#updateSubscribersBound);\n        this.#data.push(store);\n        this.#dataMap.set(store.id, { store, unsubscribe });\n        return store;\n    }\n    /**\n     * Deletes a given entry store by ID from this world setting array store instance.\n     *\n     * @param id - ID of entry to delete.\n     *\n     * @returns Delete operation successful.\n     */\n    deleteEntry(id) {\n        const result = this.#deleteStore(id);\n        if (result) {\n            this.updateSubscribers();\n        }\n        return result;\n    }\n    #deleteStore(id) {\n        if (typeof id !== 'string') {\n            throw new TypeError(`'id' is not a string.`);\n        }\n        const storeEntryData = this.#dataMap.get(id);\n        if (storeEntryData) {\n            storeEntryData.unsubscribe();\n            this.#dataMap.delete(id);\n            const index = this.#data.findIndex((entry) => entry.id === id);\n            if (index >= 0) {\n                this.#data.splice(index, 1);\n            }\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Duplicates an entry store by the given ID.\n     *\n     * @param {string}   id - UUIDv4 string.\n     *\n     * @returns {*} Instance of StoreClass.\n     */\n    duplicateEntry(id) {\n        if (typeof id !== 'string') {\n            throw new TypeError(`'id' is not a string.`);\n        }\n        const storeEntryData = this.#dataMap.get(id);\n        if (storeEntryData) {\n            const data = klona(storeEntryData.store.toJSON());\n            data.id = Hashing.uuidv4();\n            // Allow StoreClass to statically perform any specialized duplication.\n            this.#StoreClass?.duplicate?.(data, this);\n            return this.createEntry(data);\n        }\n        return void 0;\n    }\n    /**\n     * Find an entry in the backing child store array.\n     *\n     * @param predicate - A predicate function.\n     *\n     * @returns Found entry in array or undefined.\n     */\n    findEntry(predicate) {\n        return this.#data.find(predicate);\n    }\n    /**\n     * Finds an entry store instance by 'id' / UUIDv4.\n     *\n     * @param id - A UUIDv4 string.\n     *\n     * @returns Entry store instance.\n     */\n    getEntry(id) {\n        const storeEntryData = this.#dataMap.get(id);\n        return storeEntryData ? storeEntryData.store : void 0;\n    }\n    /**\n     * Sets the children store data by 'id', adds new entry store instances, or removes entries that are no longer in the\n     * update list.\n     *\n     * @param updateList -\n     */\n    set(updateList) {\n        if (!Array.isArray(updateList)) {\n            console.warn(`ArrayObjectStore.set warning: aborting set operation as 'updateList' is not an array.`);\n            return;\n        }\n        // Create a set of all current entry IDs.\n        const removeIDSet = new Set(this.#dataMap.keys());\n        let rebuildIndex = false;\n        for (let updateIndex = 0; updateIndex < updateList.length; updateIndex++) {\n            const updateData = updateList[updateIndex];\n            const id = updateData.id;\n            if (typeof id !== 'string') {\n                throw new Error(`'updateData.id' is not a string.`);\n            }\n            const localIndex = this.#data.findIndex((entry) => entry.id === id);\n            if (localIndex >= 0) {\n                const localEntry = this.#data[localIndex];\n                // Update the entry data.\n                localEntry.set(updateData);\n                // Must move to correct position\n                if (localIndex !== updateIndex) {\n                    // Remove from current location.\n                    this.#data.splice(localIndex, 1);\n                    if (updateIndex < this.#data.length) {\n                        // Insert at new location.\n                        this.#data.splice(updateIndex, 0, localEntry);\n                    }\n                    else {\n                        // Local data length is less than update data index; rebuild index.\n                        rebuildIndex = true;\n                    }\n                }\n                // Delete from removeIDSet as entry is still in local data.\n                removeIDSet.delete(id);\n            }\n            else {\n                this.#createStore(updateData);\n            }\n        }\n        if (rebuildIndex) {\n            // Must invoke unsubscribe for all child stores.\n            for (const storeEntryData of this.#dataMap.values()) {\n                storeEntryData.unsubscribe();\n            }\n            this.#data.length = 0;\n            this.#dataMap.clear();\n            for (const updateData of updateList) {\n                this.#createStore(updateData);\n            }\n        }\n        else {\n            // Remove entries that are no longer in data.\n            for (const id of removeIDSet) {\n                this.#deleteStore(id);\n            }\n        }\n        this.updateSubscribers();\n    }\n    toJSON() {\n        return this.#data;\n    }\n    // -------------------------------------------------------------------------------------------------------------------\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        this.#subscribers.push(handler); // add handler to the array of subscribers\n        handler(this.#data); // call handler with current value\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index >= 0) {\n                this.#subscribers.splice(index, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers.\n     *\n     * @param [update] -\n     */\n    updateSubscribers(update = void 0) {\n        const updateGate = typeof update === 'boolean' ? update : !this.#manualUpdate;\n        if (updateGate) {\n            for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n                this.#subscribers[cntr](this.#data);\n            }\n        }\n        // This will update the filtered data and `dataReducer` store and forces an update to subscribers.\n        if (this.#dataReducer) {\n            this.#dataReducer.index.update(true);\n        }\n    }\n}\n\n/**\n * @typeParam S - Store type.\n */\nclass CrudArrayObjectStore extends ArrayObjectStore {\n    /**\n     */\n    #crudDispatch;\n    /**\n     */\n    #extraData;\n    /**\n     * @param options - CrudArrayObjectStore options.\n     */\n    constructor({ crudDispatch, extraData, ...rest }) {\n        // 'manualUpdate' is set to true if 'crudUpdate' is defined, but can be overridden by `...rest`.\n        super({\n            manualUpdate: typeof crudDispatch === 'function',\n            ...rest,\n        });\n        if (crudDispatch !== void 0 && typeof crudDispatch !== 'function') {\n            throw new TypeError(`'crudDispatch' is not a function.`);\n        }\n        if (extraData !== void 0 && !isObject(extraData)) {\n            throw new TypeError(`'extraData' is not an object.`);\n        }\n        this.#crudDispatch = crudDispatch;\n        this.#extraData = extraData ?? {};\n    }\n    /**\n     * Removes all child store entries.\n     */\n    clearEntries() {\n        super.clearEntries();\n        if (this.#crudDispatch) {\n            this.#crudDispatch({ action: 'clear', ...this.#extraData });\n        }\n    }\n    /**\n     * Creates a new store from given data.\n     *\n     * @param entryData -\n     *\n     * @returns Associated store with entry data.\n     */\n    createEntry(entryData) {\n        const store = super.createEntry(entryData);\n        if (store && this.#crudDispatch) {\n            this.#crudDispatch({\n                action: 'create',\n                ...this.#extraData,\n                id: store.id,\n                data: store.toJSON()\n            });\n        }\n        return store;\n    }\n    /**\n     * Deletes a given entry store by ID from this world setting array store instance.\n     *\n     * @param id - ID of entry to delete.\n     *\n     * @returns Delete operation successful.\n     */\n    deleteEntry(id) {\n        const result = super.deleteEntry(id);\n        if (result && this.#crudDispatch) {\n            this.#crudDispatch({ action: 'delete', ...this.#extraData, id });\n        }\n        return result;\n    }\n    /**\n     * Updates subscribers, but provides special handling when a `crudDispatch` function is attached. When `update` is\n     * an object with a valid UUIDv4 string as the id property the `crudDispatch` function is invoked along with the\n     * data payload.\n     *\n     * @param [update] - A boolean indicating that subscribers should be notified otherwise\n     */\n    updateSubscribers(update = void 0) {\n        if (this.#crudDispatch && isObject(update) && Hashing.isUuidv4(update.id)) {\n            const result = this.#crudDispatch({\n                action: 'update',\n                ...this.#extraData,\n                id: update.id,\n                data: update // TODO: Consider using klona to clone data.\n            });\n            // If the crudDispatch function returns a boolean then invoke 'ArrayObjectStore.updateSubscribers' with it.\n            super.updateSubscribers(typeof result === 'boolean' ? result : update);\n        }\n        else {\n            super.updateSubscribers(update);\n        }\n    }\n}\n\n/**\n * Defines a {@link CrudArrayObjectStore} with streamlined configuration through {@link TJSGameSettings} to register\n * a world game setting. WorldArrayObjectStore is automatically associated as the store receiving updates with the\n * associated game setting.\n *\n * @typeParam S - Store type.\n */\nclass WorldArrayObjectStore extends CrudArrayObjectStore {\n    /**\n     * Game setting 'key' field.\n     */\n    #key;\n    /**\n     * Game setting 'namespace' field.\n     */\n    #namespace;\n    /**\n     * @param options - WorldArrayObjectStore Options.\n     */\n    constructor({ namespace, key, defaultData = [], gameSettings, ...rest }) {\n        super({\n            ...rest,\n            extraData: { namespace, key }\n        });\n        if (typeof key !== 'string') {\n            throw new TypeError(`'key' is not a string.`);\n        }\n        if (typeof namespace !== 'string') {\n            throw new TypeError(`'namespace' is not a string.`);\n        }\n        this.#namespace = namespace;\n        this.#key = key;\n        if (!Array.isArray(defaultData)) {\n            throw new TypeError(`'defaultData' is not an array.`);\n        }\n        // Define default `id` if not provided in `defaultData` then create a random `UUIDv4` value.\n        for (const entry of defaultData) {\n            if (typeof entry.id !== 'string') {\n                entry.id = Hashing.uuidv4();\n            }\n        }\n        if (gameSettings) {\n            gameSettings.register({\n                namespace,\n                key,\n                store: this,\n                options: {\n                    scope: 'world',\n                    config: false,\n                    default: Array.isArray(defaultData) ? defaultData : [],\n                    type: Array,\n                    name: key\n                }\n            });\n        }\n    }\n    /**\n     * @returns The Foundry game setting key.\n     */\n    get key() { return this.#key; }\n    /**\n     * @returns The Foundry game setting namespace.\n     */\n    get namespace() { return this.#namespace; }\n}\n\nexport { WorldArrayObjectStore };\n//# sourceMappingURL=index.js.map\n","<script>\n\timport { onMount } from 'svelte';\n\t\n\texport let dbPath;\n\n\tlet textarea = dbPath;\n\t\n\tonMount(() => {\n\t\ttextarea.select();\n\t\tdocument.execCommand('copy');\n\t});\n</script>\n\n<textarea bind:value={dbPath} bind:this={textarea}></textarea>","export function getPreviewFile(data) {\n    if (data.includes(\"undefined\")) { return; }\n    let seqFiles = Sequencer.Database.getEntry(data, {softFail: true});\n    if (Array.isArray(seqFiles)) {\n        seqFiles = seqFiles[0].file;\n        if (Array.isArray(seqFiles)) {\n            return seqFiles[0].file;\n        }\n        if (isObject(seqFiles)) {\n            if (Array.isArray(seqFiles[\"15ft\"])) {\n                seqFiles = seqFiles[\"15ft\"];\n                return seqFiles[0];\n            }\n            seqFiles = seqFiles[\"15ft\"]\n            return seqFiles[0];\n        }\n        return seqFiles;\n    }\n    if (isObject(seqFiles.file)) {\n        if (Array.isArray(seqFiles.file[\"15ft\"])) {\n            seqFiles = seqFiles.file[\"15ft\"];\n            return seqFiles[0];\n        }\n        return seqFiles.file[\"15ft\"];\n    }\n    return seqFiles.file;\n    function isObject(test) {\n        return typeof test === \"object\";\n    }\n}\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n    import { getPreviewFile } from \"./getPreviewFile.js\";\n    import { currentStore } from \"./previewStore.js\";\n\n    import { getContext } from \"svelte\";\n\n    export let storageStore = void 0;\n\n    $: newStore = $currentStore;\n\n    $: videoIDX = $currentStore.stores.videoIDX;\n\n\n    $: idx = $videoIDX;\n\n    $: animationSection = idx === \"item\" ? newStore : $newStore[idx];\n\n    $: animation = $animationSection;\n\n    $: previewType = idx === \"item\" ? \"Item\" : \"Autorec\";\n\n    const { application } = getContext(\"#external\");\n\n    // Compiling Source data if present\n    $: enableSource = animation.source?.enable;\n    $: sCustom = animation.source?.video?.enableCustom;\n    $: sCustomPath = animation.source?.video?.customPath;\n    $: sDbSection = animation.source?.video?.dbSection;\n    $: sMenuType = animation.source?.video?.menuType;\n    $: sAnim = animation.source?.video?.animation;\n    $: sVariant = animation.source?.video?.variant;\n    $: sColor = animation.source?.video?.color;\n    $: sCompiledPath = sCustom && sCustomPath\n                    ? sCustomPath\n                    : sColor === \"random\"\n                    ? `autoanimations.${sDbSection}.${sMenuType}.${sAnim}.${sVariant}`\n                    : `autoanimations.${sDbSection}.${sMenuType}.${sAnim}.${sVariant}.${sColor}`\n    $: sFilePath = sCustom && sCustomPath && sCustomPath.split(\".\").length < 3\n                    ? sCustomPath\n                    : getPreviewFile(sCompiledPath)\n\n    // Compiling Primary data if present\n    $: name = animation.label;\n    $: custom = animation.primary?.video?.enableCustom;\n    $: customPath = animation.primary?.video?.customPath;\n    $: dbSection = animation.primary?.video?.dbSection;\n    $: menuType = animation.primary?.video?.menuType;\n    $: anim = animation.primary?.video?.animation;\n    $: variant = animation.primary?.video?.variant;\n    $: color = animation.primary?.video?.color;\n    $: compiledPath = custom && customPath\n                    ? customPath\n                    : color === \"random\"\n                    ? `autoanimations.${dbSection}.${menuType}.${anim}.${variant}`\n                    : `autoanimations.${dbSection}.${menuType}.${anim}.${variant}.${color}`\n    $: filePath = custom && customPath && customPath.split(\".\").length < 3\n                    ? customPath\n                    : getPreviewFile(compiledPath)\n\n    // Compiling Secondary data if present\n    $: enableSecondary = animation.secondary?.enable ?? false;\n    $: eCustom = animation.secondary?.video?.enableCustom;\n    $: eCustomPath = animation.secondary?.video?.customPath;\n    $: eDbSection = animation.secondary?.video?.dbSection;\n    $: eMenuType = animation.secondary?.video?.menuType;\n    $: eAnim = animation.secondary?.video?.animation;\n    $: eVariant = animation.secondary?.video?.variant;\n    $: eColor = animation.secondary?.video?.color;\n    $: eCompiledPath = eCustom && eCustomPath\n                    ? eCustomPath\n                    : color === \"random\"\n                    ? `autoanimations.${eDbSection}.${eMenuType}.${eAnim}.${eVariant}`\n                    : `autoanimations.${eDbSection}.${eMenuType}.${eAnim}.${eVariant}.${eColor}`\n    $: eFilePath = eCustom && eCustomPath && eCustomPath.split(\".\").length < 3\n                    ? eCustomPath\n                    : getPreviewFile(eCompiledPath)\n\n    // Compiling Target data if present\n    $: enableTarget = animation.target?.enable ?? false;\n    $: tCustom = animation.target?.video?.enableCustom;\n    $: tCustomPath = animation.target?.video?.customPath;\n    $: tDbSection = animation.target?.video?.dbSection;\n    $: tMenuType = animation.target?.video?.menuType;\n    $: tAnim = animation.target?.video?.animation;\n    $: tVariant = animation.target?.video?.variant;\n    $: tColor = animation.target?.video?.color;\n    $: tCompiledPath = tCustom && tCustomPath\n                    ? tCustomPath\n                    : sColor === \"random\"\n                    ? `autoanimations.${tDbSection}.${tMenuType}.${tAnim}.${tVariant}`\n                    : `autoanimations.${tDbSection}.${tMenuType}.${tAnim}.${tVariant}.${tColor}`\n    $: tFilePath = tCustom && tCustomPath && tCustomPath.split(\".\").length < 3\n                    ? tCustomPath\n                    : getPreviewFile(tCompiledPath)\n\n    // Compiling the Preset data if present\n\n    // Dual Attach and Thunderwave\n    $: daCustom = animation.data?.video?.enableCustom;\n    $: daCustomPath = animation.data?.video?.customPath;\n    $: daDbSection = animation.data?.video?.dbSection;\n    $: daMenuType = animation.data?.video?.menuType;\n    $: daAnim = animation.data?.video?.animation;\n    $: daVariant = animation.data?.video?.variant;\n    $: daColor = animation.data?.video?.color;\n    $: daCompiledPath = daCustom && daCustomPath\n                    ? daCustomPath\n                    : daColor === \"random\"\n                    ? `autoanimations.${daDbSection}.${daMenuType}.${daAnim}.${daVariant}`\n                    : `autoanimations.${daDbSection}.${daMenuType}.${daAnim}.${daVariant}.${daColor}`\n    $: dafilePath = daCustom && daCustomPath && daCustomPath.split(\".\").length < 3\n                    ? daCustomPath\n                    : getPreviewFile(daCompiledPath)\n\n    // Teleportation\n    // Start animation\n    $: tpsCustom = animation.data?.start?.enableCustom;\n    $: tpsCustomPath = animation.data?.start?.customPath;\n    $: tpsDbSection = animation.data?.start?.dbSection;\n    $: tpsMenuType = animation.data?.start?.menuType;\n    $: tpsAnim = animation.data?.start?.animation;\n    $: tpsVariant = animation.data?.start?.variant;\n    $: tpsColor = animation.data?.start?.color;\n    $: tpsCompiledPath = tpsCustom && tpsCustomPath\n                    ? tpsCustomPath\n                    : tpsColor === \"random\"\n                    ? `autoanimations.${tpsDbSection}.${tpsMenuType}.${tpsAnim}.${tpsVariant}`\n                    : `autoanimations.${tpsDbSection}.${tpsMenuType}.${tpsAnim}.${tpsVariant}.${tpsColor}`\n    $: tpsfilePath = tpsCustom && tpsCustomPath && tpsCustomPath.split(\".\").length < 3\n                    ? tpsCustomPath\n                    : getPreviewFile(tpsCompiledPath)\n\n    // Between Animation\n    $: tpbCustom = animation.data?.between?.enableCustom;\n    $: tpbCustomPath = animation.data?.between?.customPath;\n    $: tpbDbSection = animation.data?.between?.dbSection;\n    $: tpbMenuType = animation.data?.between?.menuType;\n    $: tpbAnim = animation.data?.between?.animation;\n    $: tpbVariant = animation.data?.between?.variant;\n    $: tpbColor = animation.data?.between?.color;\n    $: tpbCompiledPath = tpbCustom && tpbCustomPath\n                    ? tpbCustomPath\n                    : tpbColor === \"random\"\n                    ? `autoanimations.${tpbDbSection}.${tpbMenuType}.${tpbAnim}.${tpbVariant}`\n                    : `autoanimations.${tpbDbSection}.${tpbMenuType}.${tpbAnim}.${tpbVariant}.${tpbColor}`\n    $: tpbfilePath = tpbCustom && tpbCustomPath && tpbCustomPath.split(\".\").length < 3\n                    ? tpbCustomPath\n                    : getPreviewFile(tpbCompiledPath)\n\n    // End Animation\n    $: tpeCustom = animation.data?.end?.enableCustom;\n    $: tpeCustomPath = animation.data?.end?.customPath;\n    $: tpeDbSection = animation.data?.end?.dbSection;\n    $: tpeMenuType = animation.data?.end?.menuType;\n    $: tpeAnim = animation.data?.end?.animation;\n    $: tpeVariant = animation.data?.end?.variant;\n    $: tpeColor = animation.data?.end?.color;\n    $: tpeCompiledPath = tpeCustom && tpeCustomPath\n                    ? tpeCustomPath\n                    : tpeColor === \"random\"\n                    ? `autoanimations.${tpeDbSection}.${tpeMenuType}.${tpeAnim}.${tpeVariant}`\n                    : `autoanimations.${tpeDbSection}.${tpeMenuType}.${tpeAnim}.${tpeVariant}.${tpeColor}`\n    $: tpefilePath = tpeCustom && tpeCustomPath && tpeCustomPath.split(\".\").length < 3\n                    ? tpeCustomPath\n                    : getPreviewFile(tpeCompiledPath)\n\n    // Projectile to Template\n    //Projectile\n    $: pCustom = animation.data?.projectile?.enableCustom;\n    $: pCustomPath = animation.data?.projectile?.customPath;\n    $: pDbSection = animation.data?.projectile?.dbSection;\n    $: pMenuType = animation.data?.projectile?.menuType;\n    $: pAnim = animation.data?.projectile?.animation;\n    $: pVariant = animation.data?.projectile?.variant;\n    $: pColor = animation.data?.projectile?.color;\n    $: pCompiledPath = pCustom && pCustomPath\n                    ? pCustomPath\n                    : pColor === \"random\"\n                    ? `autoanimations.${pDbSection}.${pMenuType}.${pAnim}.${pVariant}`\n                    : `autoanimations.${pDbSection}.${pMenuType}.${pAnim}.${pVariant}.${pColor}`\n    $: pfilePath = pCustom && pCustomPath && pCustomPath.split(\".\").length < 3\n                    ? pCustomPath\n                    : getPreviewFile(pCompiledPath)\n\n    // Pre-Explosion\n    $: e1Custom = animation.data?.preExplosion?.enableCustom;\n    $: e1CustomPath = animation.data?.preExplosion?.customPath;\n    $: e1DbSection = animation.data?.preExplosion?.dbSection;\n    $: e1MenuType = animation.data?.preExplosion?.menuType;\n    $: e1Anim = animation.data?.preExplosion?.animation;\n    $: e1Variant = animation.data?.preExplosion?.variant;\n    $: e1Color = animation.data?.preExplosion?.color;\n    $: e1CompiledPath = e1Custom && e1CustomPath\n                    ? e1CustomPath\n                    : e1Color === \"random\"\n                    ? `autoanimations.${e1DbSection}.${e1MenuType}.${e1Anim}.${e1Variant}`\n                    : `autoanimations.${e1DbSection}.${e1MenuType}.${e1Anim}.${e1Variant}.${e1Color}`\n    $: e1filePath = e1Custom && e1CustomPath && e1CustomPath.split(\".\").length < 3\n                    ? e1CustomPath\n                    : getPreviewFile(e1CompiledPath)\n\n    // Explosion\n    $: e2Custom = animation.data?.explosion?.enableCustom;\n    $: e2CustomPath = animation.data?.explosion?.customPath;\n    $: e2DbSection = animation.data?.explosion?.dbSection;\n    $: e2MenuType = animation.data?.explosion?.menuType;\n    $: e2Anim = animation.data?.explosion?.animation;\n    $: e2Variant = animation.data?.explosion?.variant;\n    $: e2Color = animation.data?.explosion?.color;\n    $: e2CompiledPath = e2Custom && e2CustomPath\n                    ? e2CustomPath\n                    : e2Color === \"random\"\n                    ? `autoanimations.${e2DbSection}.${e2MenuType}.${e2Anim}.${e2Variant}`\n                    : `autoanimations.${e2DbSection}.${e2MenuType}.${e2Anim}.${e2Variant}.${e2Color}`\n    $: e2filePath = e2Custom && e2CustomPath && e2CustomPath.split(\".\").length < 3\n                    ? e2CustomPath\n                    : getPreviewFile(e2CompiledPath)\n\n    // Application position store reference. Stores need to be a top level variable to be accessible for reactivity.\n    const position = application.position;\n\n    // A debounced callback that serializes application state after 500-millisecond delay.\n    const storeAppState = foundry.utils.debounce(() => $storageStore = application.state.current(), 500);\n\n    // Reactive statement to invoke debounce callback on Position changes.\n    $: storeAppState($position);\n</script>\n\n<div class=\"flexcol\">\n    <label class=\"aa-section-label\" for=\"\">{name}</label>\n    <label for=\"\" style=\"align-self: center; font-size: 14px\"><i>{previewType} {localize(\"autoanimations.menus.preview\")}</i></label>\n</div>\n{#if animation.primary}\n<div class=\"flexcol aa-full-preview\">\n    {#if enableSource}\n        <div class=\"flexcol\">\n            <label for=\"\">{localize(\"autoanimations.menus.source\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={sFilePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n    {/if}\n    <div class=\"flexcol\" >\n        <label for=\"\">{localize(\"autoanimations.menus.primary\")}</label>\n        <div class=\"aa-video-overlay\">\n            <video\n                class=\"aaVideoPreview\"\n                src={filePath}\n                autoplay=\"autoplay\"\n                controls\n                controlsList=\"nodownload\"\n                disablepictureinpicture\n                loop\n            >\n                <track kind=\"captions\" />\n            </video>\n        </div>\n    </div>\n    {#if enableSecondary}\n        <div class=\"flexcol\">\n            <label for=\"\">{localize(\"autoanimations.variants.secondary\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={eFilePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n    {/if}\n    {#if enableTarget}\n        <div class=\"flexcol\">\n            <label for=\"\">{localize(\"autoanimations.menus.target\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={tFilePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n    {/if}\n\n</div>\n{/if}\n{#if animation.data && animation.presetType === \"dualattach\" || animation.presetType === \"thunderwave\"}\n    <div class=\"flexcol aa-full-preview\">\n        {#if animation.data.video}\n            <div class=\"flexcol\" >\n                <label for=\"\">{localize(\"autoanimations.menus.primary\")}</label>\n                <div class=\"aa-video-overlay\">\n                    <video\n                        class=\"aaVideoPreview\"\n                        src={dafilePath}\n                        autoplay=\"autoplay\"\n                        controls\n                        controlsList=\"nodownload\"\n                        disablepictureinpicture\n                        loop\n                    >\n                        <track kind=\"captions\" />\n                    </video>\n                </div>\n            </div>\n        {/if}\n    </div>\n{/if}\n{#if animation.data && animation.presetType === \"teleportation\"}\n    <div class=\"flexcol aa-full-preview\">\n        {#if animation.data?.start?.enable}\n        <div class=\"flexcol\" >\n            <label for=\"\">{localize(\"autoanimations.menus.start\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={tpsfilePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n        {/if}\n        {#if animation.data?.between?.enable}\n        <div class=\"flexcol\" >\n            <label for=\"\">{localize(\"autoanimations.menus.between\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={tpbfilePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n        {/if}\n        {#if animation.data?.end?.enable}\n        <div class=\"flexcol\" >\n            <label for=\"\">{localize(\"autoanimations.menus.end\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={tpefilePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n        {/if}\n    </div>\n{/if}\n{#if animation.data && animation.presetType === \"proToTemp\"}\n    <div class=\"flexcol aa-full-preview\">\n        <div class=\"flexcol\" >\n            <label for=\"\">{localize(\"autoanimations.menus.projectile\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={pfilePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n        {#if animation.data?.preExplosion?.enable}\n        <div class=\"flexcol\" >\n            <label for=\"\">{localize(\"autoanimations.menus.pre\")} {localize(\"autoanimations.menus.explosion\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={e1filePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n        {/if}\n        <div class=\"flexcol\" >\n            <label for=\"\">{localize(\"autoanimations.menus.explosion\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={e2filePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n        {#if enableSecondary}\n        <div class=\"flexcol\">\n            <label for=\"\">{localize(\"autoanimations.variants.secondary\")}</label>\n            <div class=\"aa-video-overlay\">\n                <video\n                    class=\"aaVideoPreview\"\n                    src={eFilePath}\n                    autoplay=\"autoplay\"\n                    controls\n                    controlsList=\"nodownload\"\n                    disablepictureinpicture\n                    loop\n                >\n                    <track kind=\"captions\" />\n                </video>\n            </div>\n        </div>\n        {/if}\n        {#if enableTarget}\n            <div class=\"flexcol\">\n                <label for=\"\">{localize(\"autoanimations.menus.target\")}</label>\n                <div class=\"aa-video-overlay\">\n                    <video\n                        class=\"aaVideoPreview\"\n                        src={tFilePath}\n                        autoplay=\"autoplay\"\n                        controls\n                        controlsList=\"nodownload\"\n                        disablepictureinpicture\n                        loop\n                    >\n                        <track kind=\"captions\" />\n                    </video>\n                </div>\n            </div>\n        {/if}\n    </div>\n{/if}\n\n<style lang=\"scss\">\n    .aa-full-preview {\n        padding: 5px;\n        align-items: center;\n        width: 100%;\n        margin-right: 2%;\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-weight: bold;\n    }\n    .aaVideoPreview {\n        border: 3px ridge #a1a1a1;\n        border-radius: 30px;\n        padding: 5px;\n        width: 210px;   // 210 x 210 fits all 4 video previews vertically in `1080P` monitor.\n        height: 210px;\n        display: block;\n        margin: 0 auto;\n        background: rgb(78, 78, 78);\n    }\n    .aa-full-preview label {\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-size: 21px;\n        font-weight: normal;\n        align-self: center;\n    }\n    .aa-section-label {\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-size: 25px;\n        font-weight: bold;\n        align-self: center;\n    }\n    .aa-video-overlay {\n        border-radius: 30px;\n        box-shadow: 5px 8px 6px 0 rgb(0, 0, 0, 0.5);\n        margin-bottom: 6px;\n    }\n</style>\n","import { TJSDialog } from '#runtime/svelte/application';\n\nimport FullVideoPreview from \"./autorecPreviews.svelte\";\n\nimport { sessionConstants } from \"#constants\";\nimport { aaSessionStorage } from \"#sessionStorage\";\n\nexport default class TotalPreview extends TJSDialog {\n    static #app;\n\n    constructor(data) {\n        super({\n            title: 'Video Preview',\n            resizable: true,\n            zIndex: null,\n            content: {\n                class: FullVideoPreview,\n                props: {\n                    ...data,\n                    storageStore: aaSessionStorage.getStore(sessionConstants.videoPreviewAppState)\n                }\n            }\n        }, { minimizable: false });\n\n        try\n        {\n            // Attempt to parse session storage item and set to application state.\n            this.state.set(aaSessionStorage.getItem(sessionConstants.videoPreviewAppState));\n        }\n        catch (err) { /**/ }\n    }\n\n    static get defaultOptions() {\n        return foundry.utils.mergeObject(super.defaultOptions, {\n            minimizable: true,\n            width: \"auto\",\n            height: \"auto\",\n            closeOnSubmit: true,\n            id: `AA-Video-Preview`,\n            themeName: 'light'\n        })\n    }\n\n    /**\n     * Close the instance of TotalVideo and remove reference to single static app reference.\n     *\n     * @inheritDoc\n     */\n    async close(options) {\n        await super.close(options);\n\n        TotalPreview.#app = void 0;\n    }\n\n    /**\n     * Show a single static instance of TotalVideo; if it is already open then bring it to top.\n     */\n    static show() {\n        if (this.#app)\n        {\n            this.#app.bringToTop();\n        }\n        else\n        {\n            this.#app = new TotalPreview().render(true, { focus: true });\n        }\n    }\n}\n","import { writable } from \"svelte/store\";\n\nimport { localize } from \"#runtime/util/i18n\";\n\nimport { WorldArrayObjectStore } from \"#runtime/svelte/store/fvtt/settings/world\";\nimport { DynReducerHelper } from \"#runtime/svelte/store/reducer\";\n\nimport { FVTTFilePickerControl } from \"#standard/application/control/filepicker\";\n\nimport { constants } from \"#constants\";\nimport { gameSettings } from \"#gameSettings\";\nimport { aaSessionStorage } from \"#sessionStorage\";\n\nimport CopyClipBoard from \"../../../Menus/Components/copyOnClick.svelte\";\nimport VideoPreview from \"../../../Menus/Components/videoPreview/videoPreview.js\";\n\nimport {\n   newTypeMenu,\n   newNameMenu,\n   newVariantMenu,\n   newColorMenu,\n   aaReturnWeapons,\n} from \"../../../../database/jb2a-menu-options.js\";\n\nexport class CategoryStore extends WorldArrayObjectStore {\n   /**\n    * A filter function / Svelte store that can be used with DynArrayReducer and set as a store to TJSInput.\n    *\n    * @type {import('#runtime/svelte/store/reducer').DynReducerHelper.FilterFn.regexObjectQuery}\n    */\n   static #filterSearch = DynReducerHelper.filters.regexObjectQuery(\"label\");\n\n   /**\n    * @type {CategoryStores}\n    */\n   #stores;\n\n   /**\n    * @param {string}   key -\n    *\n    * @param {typeof import('svelte/store').Writable} StoreClass -\n    *\n    * @param {object[]} [defaultData] -\n    */\n   constructor(key, StoreClass, defaultData = []) {\n      super({\n         gameSettings,\n         namespace: constants.moduleId,\n         key,\n         StoreClass,\n         defaultData,\n         dataReducer: true,\n      });\n\n      this.dataReducer.filters.add(CategoryStore.#filterSearch);\n\n      this.#stores = {\n         allFoldersOpened: writable(void 0),\n\n         scrollTop: aaSessionStorage.getStore(`${constants.moduleId}-category-scrolltop-${key}`, 0),\n         // This allow setting the current Index of the section for the Video Preview app\n         videoIDX: writable(void 0),\n\n         animationSourceOption: game.system.id === \"dnd5e\" || game.system.id === \"pf2e\" || game.system.id === \"sf2e\",\n      };\n   }\n\n   get filterSearch() {\n      return CategoryStore.#filterSearch;\n   }\n\n   get icon() {\n      return localize(`autoanimations.app.${this.key}.icon`);\n   }\n\n   get label() {\n      return localize(`autoanimations.app.${this.key}.label`);\n   }\n\n   /**\n    * @returns {CategoryStores}\n    */\n   get stores() {\n      return this.#stores;\n   }\n\n   /**\n    * In this case this solution is better than creating a derived store from the AnimationStore sessionStorage folder\n    * state. The below code uses the current dataReducer count and is also triggered by any open / close of any children\n    * folders. The calculation for \"all folders open\" can short circuit on the first false / closed value.\n    */\n   calcAllFolderState() {\n      let allFoldersOpened = true;\n\n      for (const store of this.dataReducer) {\n         if (!(allFoldersOpened &= store.folderState)) {\n            break;\n         }\n      }\n\n      this.#stores.allFoldersOpened.set(!!allFoldersOpened);\n   }\n\n   /**\n    * Sorts data entries by name attribute.\n    */\n   sortAlpha() {\n      this._data.sort((a, b) => {\n         const aLabel = a?.label ?? \"\";\n         const bLabel = b?.label ?? \"\";\n         return aLabel.localeCompare(bLabel);\n      });\n\n      this.updateSubscribers();\n   }\n\n   loadPreviews() {\n      VideoPreview.show();\n   }\n\n   getMenuDB(section, idx, isOnToken) {\n      let menuDB = isOnToken\n         ? \"static\"\n         : this._data[idx]._data.menu === \"ontoken\" || this._data[idx]._data.menu === \"aura\"\n         ? \"static\"\n         : this._data[idx]._data.menu;\n      menuDB = section === \"secondary\" ? \"static\" : menuDB;\n      return menuDB;\n   }\n\n   menuTypeList(menuDB = \"static\") {\n      return newTypeMenu[menuDB] || [];\n   }\n   animationList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[idx]._data[section][section02].menuType;\n\n      return newNameMenu[menuDB][menuType] || [];\n   }\n   variantList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[idx]._data[section][section02].menuType;\n      let animation = this._data[idx]._data[section][section02].animation;\n\n      return newVariantMenu[menuDB][menuType]?.[animation] || [];\n   }\n   colorList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[idx]._data[section][section02].menuType;\n      let animation = this._data[idx]._data[section][section02].animation;\n      let variant = this._data[idx]._data[section][section02].variant;\n\n      return newColorMenu[menuDB][menuType]?.[animation]?.[variant] || [];\n   }\n\n   async databaseToClipboard(section, idx, section02, dbSection) {\n      const dbPath = await this.getDBPath(section, idx, section02, dbSection);\n      const app = new CopyClipBoard({\n         target: document.getElementById(\"clipboard\"),\n         props: { dbPath },\n      });\n      app.$destroy();\n   }\n\n   async getDBPath(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[idx]._data[section][section02].menuType;\n      let animation = this._data[idx]._data[section][section02].animation;\n      let variant = this._data[idx]._data[section][section02].variant;\n      let color = this._data[idx]._data[section][section02].color;\n      return color === \"random\"\n         ? `autoanimations.${menuDB}.${menuType}.${animation}.${variant}`\n         : `autoanimations.${menuDB}.${menuType}.${animation}.${variant}.${color}`;\n   }\n   menuTypeChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      delete this._data[idx]._data.metaData;\n      let menuType = this._data[idx]._data[section][section02].menuType;\n      this._data[idx]._data[section][section02].animation = newNameMenu[menuDB][menuType][0][0];\n\n      let animation = this._data[idx]._data[section][section02].animation;\n      this._data[idx]._data[section][section02].variant = newVariantMenu[menuDB][menuType][animation][0][0];\n\n      let variant = this._data[idx]._data[section][section02].variant;\n      this._data[idx]._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0];\n   }\n\n   animationChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      delete this._data[idx]._data.metaData;\n      let menuType = this._data[idx]._data[section][section02].menuType;\n      let animation = this._data[idx]._data[section][section02].animation;\n      this._data[idx]._data[section][section02].variant = newVariantMenu[menuDB][menuType][animation][0][0];\n\n      let variant = this._data[idx]._data[section][section02].variant;\n      this._data[idx]._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0];\n   }\n\n   variantChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      delete this._data[idx]._data.metaData;\n      let menuType = this._data[idx]._data[section][section02].menuType;\n      let animation = this._data[idx]._data[section][section02].animation;\n      let variant = this._data[idx]._data[section][section02].variant;\n      this._data[idx]._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0];\n   }\n\n   get typeMenu() {\n      return newTypeMenu;\n   }\n   get animationMenu() {\n      return newNameMenu;\n   }\n   get variantMenu() {\n      return newVariantMenu;\n   }\n   get colorMenu() {\n      return newColorMenu;\n   }\n   get returnWeapons() {\n      return aaReturnWeapons;\n   }\n\n   async openMacro(data) {\n      if (!data) {\n         ui.notifications.info(`Automated Animations: Cannot locate Macro ${data}`);\n         return;\n      }\n      // Credit to Wasp, Zhell, Gazkhan and MrVauxs for the code in this section\n      if (data.startsWith(\"Compendium\")) {\n         let packArray = data.split(\".\");\n         let pack = game.packs.get(`${packArray[1]}.${packArray[2]}`);\n         if (!pack) {\n            ui.notifications.info(`Autoanimations | Compendium ${packArray[1]}.${packArray[2]} was not found`);\n            return;\n         }\n         let macroFilter = pack.index.filter((m) => m.name === packArray[3]);\n         if (!macroFilter.length) {\n            ui.notifications.info(\n               `Autoanimations | A macro named ${packArray[3]} was not found in Compendium ${packArray[1]}.${packArray[2]}`\n            );\n            return;\n         }\n         let macroDocument = await pack.getDocument(macroFilter[0]._id);\n         macroDocument.sheet.render(true);\n      } else {\n         if (!data) {\n            return;\n         }\n         let getTest = game.macros.getName(data);\n         if (!getTest) {\n            ui.notifications.info(`Autoanimations | Could not find the macro named ${data}`);\n            return;\n         }\n         game.macros.getName(data).sheet.render(true);\n      }\n   }\n\n   playSound(data) {\n      const currentSection = data || {};\n      const file = currentSection?.file;\n      const volume = currentSection?.volume ?? 0.75;\n      const startTime = currentSection?.startTime ?? 0;\n      new Sequence().sound().file(file).volume(volume).startTime(startTime).play();\n   }\n\n   async selectCustom(section, section02 = \"video\", idx) {\n      const current = this._data[idx]._data[section][section02].customPath;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"imagevideo\",\n         current,\n      });\n\n      if (path) {\n         this._data[idx]._data[section][section02].customPath = path;\n         this._data[idx]._updateSubscribers();\n      }\n   }\n\n   async selectSound(section, idx) {\n      const current = this._data[idx]._data[section].sound.file;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"audio\",\n         current,\n      });\n\n      if (path) {\n         this._data[idx]._data[section].sound.file = path;\n         this._data[idx]._updateSubscribers();\n      }\n   }\n\n   async selectSoundNested(section, section02, idx) {\n      const current = this._data[idx]._data[section][section02].sound.file;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"audio\",\n         current,\n      });\n\n      if (path) {\n         this._data[idx]._data[section][section02].sound.file = path;\n         this._data[idx]._updateSubscribers();\n      }\n   }\n\n   openSequencerViewer() {\n      Sequencer.DatabaseViewer.show();\n   }\n}\n\n/**\n * @typedef {object} CategoryStores\n *\n * @property {import('svelte/store').Writable<boolean>} allFoldersOpen - True when all visible folders are open.\n *\n * @property {import('svelte/store').Writable<number>} scrollTop - Stores current scroll top.\n */\n","import { propertyStore } from \"#runtime/svelte/store/writable-derived\";\n\nimport { FVTTFilePickerControl } from \"#standard/application/control/filepicker\";\n\nimport { CategoryStore } from \"../category/CategoryStore.js\";\n\nimport { constants } from \"#constants\";\nimport { aaSessionStorage } from \"#sessionStorage\";\n\n/*\nimport {\n   aaTypeMenu,\n   aaNameMenu,\n   aaVariantMenu,\n   aaColorMenu,\n} from \"../../../../animation-functions/databases/jb2a-menu-options.js\";\n*/\n\nexport class AnimationStore extends CategoryStore.EntryStore {\n   /** @type {AnimationPropertyStores} */\n   #stores;\n\n   #sessionStorage = {};\n\n   /**\n    * @param {object}   data -\n    */\n   constructor(data = {}) {\n      super(data);\n\n      // Save sessionStorage ID.\n      this.#sessionStorage.folderOpen = `${constants.moduleId}-anim-folder-${this.id}`;\n\n      this.#stores = {\n         folderOpen: aaSessionStorage.getStore(this.#sessionStorage.folderOpen, false),\n\n         label: propertyStore(this, \"label\"),\n      };\n   }\n\n   /**\n    * Invoked by WorldArrayObjectStore to provide custom duplication.\n    *\n    * @param {object}   data - A copy of local data w/ new ID already set.\n    *\n    * @param {CategoryStore} categoryStore - The source WorldArrayObjectStore instance.\n    */\n   static duplicate(data, categoryStore) {\n      // Provide a unique label appending an indexed counter.\n      if (typeof data?.label === \"string\") {\n         let cntr = 1;\n         const baseName = data.label ?? \"\";\n         delete data.metaData;\n         do {\n            data.label = `${baseName}-${cntr++}`;\n         } while (categoryStore.findEntry((entry) => entry.label === data.label) !== void 0);\n      }\n   }\n\n   /**\n    * @returns {AnimationPropertyStores}\n    */\n   get stores() {\n      return this.#stores;\n   }\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /**\n    * @returns {boolean} Current folder open state.\n    */\n   get folderState() {\n      return aaSessionStorage.getItem(this.#sessionStorage.folderOpen);\n   }\n\n   /**\n    * @returns {string}\n    */\n   get label() {\n      return this._data.label ?? \"\";\n   }\n\n   /**\n    * @param {boolean}  folderOpen - Sets folder opened state.\n    */\n   set folderState(folderOpen) {\n      this.#stores.folderOpen.set(folderOpen);\n   }\n\n   /**\n    * @param {string} label -\n    */\n   set label(label) {\n      this.#stores.label.set(label);\n   }\n\n   /**\n    * @param {object}   data -\n    */\n   set(data) {\n      if (data.label !== void 0) {\n         if (typeof data.label !== \"string\") {\n            throw new TypeError(`'data.label' is not a string.`);\n         }\n         this._data.label = data.label;\n      }\n\n      if (game.user.isGM) this._updateSubscribers();\n   }\n\n   async selectCustom(section, section02 = \"video\") {\n      const current = this._data[section][section02].customPath;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"imagevideo\",\n         current,\n      });\n\n      if (path) {\n         this._data[section][section02].customPath = path;\n         this._updateSubscribers();\n      }\n   }\n\n   async selectSound(section) {\n      const current = this._data[section].sound.file;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"audio\",\n         current,\n      });\n\n      if (path) {\n         this._data[section].sound.file = path;\n         this._updateSubscribers();\n      }\n   }\n\n   async getSource() {\n      if (!this._data.metaData) {\n         ui.notifications.info(`Automated Animations | No Defined MetaData on this Entry`);\n      } else {\n         console.log(this._data.metaData);\n         ui.notifications.info(\"Automated Animations | MetaData logged to Dev Console\");\n         Hooks.callAll(\"AutomatedAnimations.metaData\", this._data);\n      }\n   }\n}\n\n/**\n * @typedef {object} AnimationPropertyStores\n *\n * @property {import('svelte/store').Writable<boolean>} folderOpen - Session storage folder open store.\n *\n * @property {import('svelte/store').Writable<string>} label - Animation label.\n */\n","import { writable }        from \"svelte/store\";\n\nimport { AnimationStore }  from \"./animation/AnimationStore.js\";\nimport { CategoryStore }   from \"./category/CategoryStore.js\";\n\nimport { loadDefault }     from \"./default-data\";\n\nclass AutoRecStores {\n   /** @type {CategoryStore[]} */\n   #categories = [];\n\n   /**\n    * Provides a writable store with the selected CategoryStore.\n    *\n    * @type {import('svelte/store').Writable<CategoryStore>}\n    */\n   #selected;\n\n   /** @type {CategoryStore} */\n   #aefx;\n\n   /** @type {CategoryStore} */\n   #aura;\n\n   /** @type {CategoryStore} */\n   #melee;\n\n   /** @type {CategoryStore} */\n   #ontoken;\n\n   /** @type {CategoryStore} */\n   #preset;\n\n   /** @type {CategoryStore} */\n   #range;\n\n   /** @type {CategoryStore} */\n   #templatefx;\n\n   constructor() {\n   }\n\n   /**\n    * @returns {CategoryStore[]}\n    */\n   get categories() { return this.#categories; }\n\n   /**\n    * @returns {import('svelte/store').Writable<CategoryStore>}\n    */\n   get selected() { return this.#selected; }\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /** @returns {CategoryStore} */\n   get aefx() { return this.#aefx; }\n\n   /** @returns {CategoryStore} */\n   get aura() { return this.#aura; }\n\n   /** @returns {CategoryStore} */\n   get melee() { return this.#melee; }\n\n   /** @returns {CategoryStore} */\n   get preset() { return this.#preset; }\n\n   /** @returns {CategoryStore} */\n   get range() { return this.#range; }\n\n   /** @returns {CategoryStore} */\n   get ontoken() { return this.#ontoken; }\n\n   /** @returns {CategoryStore} */\n   get templatefx() { return this.#templatefx; }\n\n   /**\n    * Initializes all stores and registers settings for each store.\n    */\n   initialize() {\n      const cat = this.#categories;\n\n      // Pushing in order of top menu bar category selection.\n      cat.push(this.#melee = new CategoryStore('aaAutorec-melee', AnimationStore, loadDefault(\"melee\")));\n      cat.push(this.#range = new CategoryStore('aaAutorec-range', AnimationStore, loadDefault(\"range\")));\n      cat.push(this.#ontoken = new CategoryStore('aaAutorec-ontoken', AnimationStore, loadDefault(\"ontoken\")));\n      cat.push(this.#templatefx = new CategoryStore('aaAutorec-templatefx', AnimationStore, loadDefault(\"templatefx\")));\n      cat.push(this.#aura = new CategoryStore('aaAutorec-aura', AnimationStore, loadDefault(\"aura\")));\n      cat.push(this.#preset = new CategoryStore('aaAutorec-preset', AnimationStore, loadDefault(\"preset\")));\n      cat.push(this.#aefx = new CategoryStore('aaAutorec-aefx', AnimationStore, loadDefault(\"aefx\")));\n\n      this.#selected = writable(this.#melee);\n   }\n}\n\nexport const autoRecStores = new AutoRecStores();\n","<script>\n    import CategoryControl      from \"./CategoryControl.svelte\";\n    import CategoryList         from \"./CategoryList.svelte\";\n    import { getContext } from \"svelte\";\n    import { TJSIconButton, TJSToggleIconButton } from \"#standard/component/button\";\n\n    import MenuManager from \"./menuManager/MenuManagerApp.js\"\n    import { autoRecStores }    from \"../../store/AutoRecStores.js\";\n\n    const selected = autoRecStores.selected;\n\n    const bottomLabel = game.i18n.localize(\"autoanimations.menus.menuManager\")\n\n    const { application } = getContext(\"#external\");\n</script>\n\n<header>\n    <ul>\n    {#each autoRecStores.categories as category}\n        <li class:active={$selected === category} on:click={() => $selected = category} role=presentation>\n            <i class={category.icon} />{category.label}\n        </li>\n        <span />\n    {/each}\n    </ul>\n</header>\n\n<CategoryControl category={$selected} />\n<CategoryList category={$selected} />\n\n<footer class=\"aa-AutorecManager\" on:click={() => MenuManager.show()} role=presentation>\n  <ul >\n    {bottomLabel}\n    </ul>\n</footer>\n<style lang=scss>\n  header {\n    flex: none;\n    padding: 0.5em 0.5em;\n\n    background: rgb(204, 204, 204);\n    border-bottom: 1px solid rgb(100, 100, 100);\n\n    height: fit-content;\n    width: 100%;\n\n    ul {\n      display: flex;\n      flex-wrap: nowrap;\n      justify-content: center;\n      align-items: center;\n      height: 100%;\n\n      list-style-type: none;\n      padding: 0;\n      margin: 0;\n\n      li {\n        margin: auto;\n\n        color: rgb(50, 50, 50);\n        cursor: pointer;\n\n        font-family: \"Modesto Condensed\", \"Palatino Linotype\", serif;\n        font-size: 1.1em;\n        font-weight: bold;\n        vertical-align: middle;\n\n        white-space: nowrap;\n        transition: all .2s ease-in-out;\n\n        &.active { text-shadow: 0 0 5px rgba(255, 0, 0, 0.687); }\n        &:hover:not(.active) { transform: scale(1.05); }\n\n        i { margin-right: 0.25em; }\n      }\n\n      span:not(:last-child) {\n        display: inline-block;\n        width: 1px;\n        height: 75%;\n        background: rgb(100, 100, 100);\n      }\n    }\n  }\n  footer {\n    flex: none;\n    padding: 0.5em 0.5em;\n    cursor: pointer;\n\n    background: rgb(159, 160, 160);\n    transition: background .5s;\n    border-top: 1px solid rgb(100, 100, 100);\n\n    height: 40px;\n    width: 100%;\n\n    margin-top: auto;\n\n    font-size: 1em;\n    font-weight: bold;\n    ul {\n      display: flex;\n      flex-wrap: nowrap;\n      justify-content: center;\n      align-items: center;\n      height: 100%;\n\n      padding: 0;\n      margin: 0;\n    }\n  }\n  footer:hover {\n      text-shadow: 0 0 3px rgba(255, 0, 0, 0.4);\n      //background: linear-gradient(64.5deg, rgb(167, 167, 167) 40%, rgb(120, 120, 120) 60% );\n      background: rgb(145, 145, 145);\n  }\n\n</style>\n\n","<script>\n    import { onDestroy } from \"svelte\";\n\n    let imageEl;\n\n    Hooks.on(\"hotbarDrop\", hotbarDrop);\n\n    onDestroy(() => Hooks.off(\"hotbarDrop\", hotbarDrop));\n\n    function hotbarDrop(hotbar, data, slot) {\n        let handled = false;\n\n        if (data?.type === \"AutomaticAnimationMacro\") {\n            handled = true;\n\n           // Wrap the handling code in an async IIFE.\n           (async () => {\n\n              // The macro script data to open the quest via the public QuestAPI.\n              const command = `Hooks.call(\"AA.Open.AutorecSetting\");`;\n\n              const macroData = {\n                 name: \"A-A Automatic Recognition Menu\",\n                 type: \"script\",\n                 command,\n                 img: \"modules/autoanimations/assets/icons/aa-icon.webp\"\n              };\n\n              // Search for an already existing macro with the same command.\n              let macro = game.macros.contents.find((m) => m.command === command);\n\n              // If not found then create a new macro with the command.\n              if (!macro) {\n                 macro = await Macro.create(macroData, { displaySheet: false });\n              }\n\n              // Assign the macro to the hotbar.\n              await game.user.assignHotbarMacro(macro, slot);\n           })();\n        }\n\n        return handled;\n    }\n\n    function onDragStart(event) {\n       const dataTransfer = { type: \"AutomaticAnimationMacro\" };\n       event.dataTransfer.dropEffect = \"move\";\n       event.dataTransfer.setDragImage(imageEl, 18, 18);\n       event.dataTransfer.setData('text/plain', JSON.stringify(dataTransfer));\n    }\n</script>\n\n<div on:dragstart={onDragStart}\n     role=\"banner\"\n     draggable=true\n     title=\"Drag to hot bar\">\n    <img bind:this={imageEl}\n         on:dragstart={onDragStart}\n         draggable=true\n         src=\"modules/autoanimations/assets/icons/aa-icon.webp\" alt=\"Macro\">\n    Automatic Recognition Menu Macro\n</div>\n\n<style>\n    div {\n        display: flex;\n        background: rgb(159, 160, 160);\n        border-top: 1px solid rgb(100, 100, 100);\n        height: 40px;\n        justify-content: center;\n        align-items: center;\n\n        transition: background .5s;\n        cursor: grab;\n        font-weight: bold;\n    }\n\n    div:hover {\n        text-shadow: 0 0 3px rgba(255, 0, 0, 0.4);\n        background: rgb(145, 145, 145);\n    }\n\n    img {\n        height: 36px;\n        width: 36px;\n        margin-right: 0.5em;\n        border-radius: 0.25em;\n    }\n</style>\n","<svelte:options accessors={true} />\n\n<script>\n    import { getContext }       from \"svelte\";\n\n    import { ApplicationShell } from \"#runtime/svelte/component/application\";\n    import { Timing }           from \"#runtime/util\";\n\n    import { TJSSettingsSwap }  from \"#standard/component/fvtt/settings\";\n\n    import CategorySelect       from \"./category/CategorySelect.svelte\";\n\n    import SettingsFooter       from \"./SettingsFooter.svelte\";\n\n    import { constants }        from \"#constants\";\n    import { gameSettings }     from \"#gameSettings\";\n    import { aaSessionStorage } from \"#sessionStorage\";\n\n    import { AutorecSanitizer } from \"../../../aa-classes/autorecSanityCheck.js\"\n\n    AutorecSanitizer.checkForDuplicates();\n\n    export let elementRoot;\n\n    const { application } = getContext(\"#external\");\n\n    // Get a store that is synchronized with session storage.\n    const stateStore = aaSessionStorage.getStore(`${constants.moduleId}-autorec-appstate`);\n\n    // Application position store reference. Stores need to be a top level variable to be accessible for reactivity.\n    const position = application.position;\n\n    // A debounced callback that serializes application state after 500-millisecond delay.\n    const storePosition = Timing.debounce(() => $stateStore = application.state.current(), 500);\n\n    // Reactive statement to invoke debounce callback on Position changes.\n    $: storePosition($position);\n</script>\n\n<ApplicationShell bind:elementRoot>\n    <TJSSettingsSwap settings={gameSettings} options={{ storage: aaSessionStorage }}>\n        <CategorySelect />\n        <SettingsFooter slot=settings-footer />\n    </TJSSettingsSwap>\n</ApplicationShell>\n","<script>\n    import { socketlibSocket } from \"../socketset.js\";\n    import { custom_error } from \"../constants/constants.js\";\n\n    const permissionLevels = game.modules.get(\"sequencer\")?.active ? [\n        game.i18n.localize(\"SEQUENCER.Permission.Player\"),\n        game.i18n.localize(\"SEQUENCER.Permission.Trusted\"),\n        game.i18n.localize(\"SEQUENCER.Permission.Assistant\"),\n        game.i18n.localize(\"SEQUENCER.Permission.GM\"),\n    ] : custom_error(\"Sequencer is not active!!!! You must enable Sequencer!!!!\");\n\n    let connectedClients = Array.from(game.users).filter(c => c.active).map(x => [x.id, x.name]);\n    let currentUserId = connectedClients[0][0];\n    $: currentUserId;\n    let midiActive = game.modules.get(\"midi-qol\")?.active;\n    let midiWorkflow = midiActive ? game.settings.get('midi-qol', 'EnableWorkflow') : false;\n\n    async function settingsGetter() {\n        let currentSetting = await socketlibSocket.executeAsUser(\"checkSettings\", currentUserId);\n        updateSettings(currentSetting)\n    }\n    settingsGetter()\n\n    function updateSettings(currentSetting) {\n        photoSensitive = currentSetting.coreSettings.photoSensitive;\n        sequencerPermissions = currentSetting.sequencerSettings.permission;\n        sequencerEffectsEnabled = currentSetting.sequencerSettings.effects;\n        sequencerSoundsEnabled = currentSetting.sequencerSettings.sounds;\n        aaEffectsEnabled = currentSetting.aaSettings.effects;\n        aaAutorecDisabled = currentSetting.aaSettings.autorec;\n    }\n\n    let photoSensitive;\n    let sequencerPermissions;\n    let sequencerEffectsEnabled;\n    let sequencerSoundsEnabled;\n    let aaEffectsEnabled;\n    let aaAutorecDisabled;\n\n    $: photoSensitive;\n    $: sequencerPermissions;\n    $: sequencerEffectsEnabled;\n    $: sequencerSoundsEnabled;\n    $: aaEffectsEnabled;\n    $: aaAutorecDisabled;\n\n    async function runDiagnostics() {\n        await settingsGetter()\n    }\n\n</script>\n\n<div style=\"font-size: 1.1em\">\n    <div style=\"text-align: center\">\n        <label for=\"\" style=\"font-weight:bold; font-size: 1.2em; text-decoration:underline\">This Diagnostics menu will check common settings that may cause Animations to stop working</label>\n    </div>\n    <div style=\"text-align: center; padding-top: 1.5em\">\n        <label for=\"\" style=\"font-weight:bold; font-size: 1.2em\">Showing settings for user: </label>\n    <select bind:value={currentUserId} on:change={() => runDiagnostics()} name=\"\" id=\"\">\n        {#each connectedClients as [key, name]}\n            <option value={key}>{name}</option>\n        {/each}\n    </select>\n    </div>\n    <div style=\"text-align: center\">\n        <label for=\"\" style=\"font-size: 0.9em; font-style: italic\">Only shows <strong>active</strong> users</label>\n    </div>\n    <table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n        <tr>\n            <th colspan=\"2\" class=\"AAheader\">Foundry Core Settings</th>\n        </tr>\n        <tr class={!photoSensitive ? \"isGood\" : \"isBad\"}>\n            {#if photoSensitive}\n                <td>\n                    <i class=\"fas fa-exclamation isRed\" />\n                </td>\n                <td> Photosensitive mode is enabled </td>\n            {:else}\n                <td>\n                    <i class=\"fas fa-check isGreen\" />\n                </td>\n                <td> Photosensitive mode is disabled </td>\n            {/if}\n        </tr>\n    </table>\n    <table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n        <tr>\n            <th colspan=\"2\" class=\"AAheader\">Sequencer Settings</th>\n        </tr>\n        <tr class={sequencerEffectsEnabled ? \"isGood\" : \"isBad\"}>\n            {#if !sequencerEffectsEnabled}\n                <td>\n                    <i class=\"fas fa-exclamation isRed\" />\n                </td>\n                <td> Effects are Disabled!! </td>\n            {:else}\n                <td>\n                    <i class=\"fas fa-check isGreen\" />\n                </td>\n                <td> Effects are Enabled </td>\n            {/if}\n        </tr>\n        <tr class={sequencerSoundsEnabled ? \"isGood\" : \"isBad\"}>\n            {#if !sequencerSoundsEnabled}\n                <td>\n                    <i class=\"fas fa-exclamation isRed\" />\n                </td>\n                <td> Sounds are Disabled!! </td>\n            {:else}\n                <td>\n                    <i class=\"fas fa-check isGreen\" />\n                </td>\n                <td> Sounds are Enabled </td>\n            {/if}\n        </tr>\n        <tr class=\"isOk\" >\n            <td>\n                <i class=\"fas fa-circle-info isBlue\" />\n            </td>\n            <td>\n                Sequencer Effects permissions are set to <strong\n                    >{permissionLevels[sequencerPermissions]}</strong\n                > (GM Only Setting)\n            </td>\n        </tr>\n    </table>\n    <table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n        <tr>\n            <th colspan=\"2\" class=\"AAheader\">Automated Animations Settings</th>\n        </tr>\n        <tr class={aaEffectsEnabled ? \"isGood\" : \"isBad\"}>\n            {#if !aaEffectsEnabled}\n                <td>\n                    <i class=\"fas fa-exclamation isRed\" />\n                </td>\n                <td> Effects are Disabled!! </td>\n            {:else}\n                <td>\n                    <i class=\"fas fa-check isGreen\" />\n                </td>\n                <td> Effects are Enabled </td>\n            {/if}\n        </tr>\n        <tr class={!aaAutorecDisabled ? \"isGood\" : \"isBad\"}>\n            {#if aaAutorecDisabled}\n                <td>\n                    <i class=\"fas fa-exclamation isRed\" />\n                </td>\n                <td> Global Automatic Recognition Menu is Disabled!! (GM Only Setting) </td>\n            {:else}\n                <td>\n                    <i class=\"fas fa-check isGreen\" />\n                </td>\n                <td> Global Automatic Recognition Menu is Enabled (GM Only Setting) </td>\n            {/if}\n        </tr>\n    </table>\n    {#if midiActive}\n    <table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n        <tr>\n            <th colspan=\"2\" class=\"AAheader\">Midi-QOL Settings</th>\n        </tr>\n        <tr class={midiWorkflow ? \"isGood\" : \"isBad\"}>\n            {#if !midiWorkflow}\n                <td>\n                    <i class=\"fas fa-exclamation isRed\" />\n                </td>\n                <td> Midi-QOL Roll Automation is disabled!! </td>\n            {:else}\n                <td>\n                    <i class=\"fas fa-check isGreen\" />\n                </td>\n                <td> Midi-QOL Roll Automation is Enabled </td>\n            {/if}\n        </tr>\n    </table>\n    {/if}\n    <table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n        <tr>\n            <th colspan=\"2\" class=\"AAheader02\" style=\"background-color: rgba(0, 0, 0, 0.2)\">Legend</th>\n        </tr>\n        <tr>\n            <td class=\"isBad\">\n                <i class=\"fas fa-exclamation isRed\" />\n            </td>\n            <td>\n                Will cause issues\n            </td>\n        </tr>\n        <tr>\n            <td class=\"isGood\">\n                <i class=\"fas fa-check isGreen\" />\n            </td>\n            <td>\n                No issues\n            </td>\n        </tr>\n        <tr>\n            <td class=\"isOk\">\n                <i class=\"fas fa-circle-info isBlue\" />\n            </td>\n            <td>\n                May cause issues depending on Player trusted level\n            </td>\n        </tr>\n    </table>\n</div>\n<div style=\"margin: 2em; font-size: 1.3em\">\n    <button on:click={() => runDiagnostics()}><strong>Re-Run Diagnostics</strong></button>\n</div>\n\n\n<div style=\"font-size: 1.1em; margin-top: 2em\">\n    <div style=\"text-align: center\">\n        <label for=\"\" style=\"font-weight:bold; font-size: 1.2em; text-decoration:underline\">Below you can find general troubleshooting tips</label>\n    </div>\n    <table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n        <tr>\n            <th colspan=\"2\" class=\"AAheader02\">\n                General Troubleshooting\n            </th>\n        </tr>\n        <tr>\n            <td>1</td>\n            <td>\n                Melee, Range, On Token, and some Preset animations REQUIRE use of the Foundry Targetting System\n            </td>\n        </tr>\n        <tr>\n            <td>2</td>\n            <td>\n                Enable Debugging inside the Automated Animations module settings. Then open the console (F12) and check for any error messages when you expect an animation\n            </td>\n        </tr>\n        <tr>\n            <td>3</td>\n            <td>\n                Check the menu where the animation is defined, and make sure everything is filled out correctly\n            </td>\n        </tr>\n        <tr>\n            <td>4</td>\n            <td>\n                Use the Find the Culprit module to test with ONLY Automated Animations, Sequencer Socketlib active\n            </td>\n        </tr>\n        <tr>\n            <td>5</td>\n            <td>Make sure your Game System is supported</td>\n        </tr>\n        <tr>\n            <td>6</td>\n            <td>\n                Still not working? File an Issue on the Automated Animations GitHub repository.\n            </td>\n        </tr>\n    </table>\n</div>\n\n\n<style lang=\"scss\">\n    .isGreen {\n        color: green;\n    }\n    .isGood {\n        background-color: rgba(0, 255, 0, 0.2);\n    }\n    .isRed {\n        color: red;\n    }\n    .isBad {\n        background-color: rgba(255, 0, 0, 0.2);\n    }\n    .isOk {\n        background-color: rgba(0, 210, 255, 0.2);\n    }\n    .isBlue {\n        color: rgb(65, 65, 242);\n    }\n    .AAheader {\n        font-size: 1.5em;\n        font-weight: bold;\n    }\n    .AAheader02 {\n        font-size: 1.2em;\n        font-weight: bold;\n    }\n    table {\n        td:first-child {\n            width: 2em;\n            text-align: center;\n        }\n        td:nth-child(2) {\n            padding-left: 10px;\n        }\n        font-size: 1em;\n    }\n</style>\n","\nimport { TJSDialog } from '#runtime/svelte/application';\n\nimport Diagnostics from \"./Diagnostics.svelte\";\n\nexport default class AADiagnostics extends TJSDialog {\n    constructor(data) {\n        super({\n            title: 'Automated Animations Diagnostics',\n            draggable: true,\n            resizable:true,\n            modal: false,\n            zIndex:null,\n            content: {\n                class: Diagnostics,\n            },\n        });\n    }\n\n    static get defaultOptions() {\n        return foundry.utils.mergeObject(super.defaultOptions, {\n            minimizable: true,\n            width: 600,\n            height: \"auto\",\n            closeOnSubmit: true,\n            id: `AutomatedAnimations-Diagnostics`,\n            themeName: 'light'\n        })\n    }\n\n}\n","import { SvelteApp }            from \"#runtime/svelte/application\";\n\nimport { AutorecAppShell }      from \"./components\";\nimport AADiagnostics            from \"../../troubleshooting/diagnosticsMenu.js\";\n\nimport { constants }            from \"#constants\";\nimport { gameSettings }         from \"#gameSettings\";\n\nexport default class AutorecMenuApp extends SvelteApp {\n    /** @inheritDoc */\n    constructor(options)\n    {\n        super(options);\n\n        try {\n            // Attempt to parse session storage item and set application state.\n            this.state.set(JSON.parse(sessionStorage.getItem(`${constants.moduleId}-autorec-appstate`)));\n        }\n        catch (err) { /**/ }\n    }\n\n    /**\n     *\n     */\n    static get defaultOptions() {\n        return foundry.utils.mergeObject(super.defaultOptions, {\n            title: `A-A Automatic Recognition Menu`,\n            id: `AA-autorec-settings`,\n            zIndex: 102,\n            resizable: true,\n            minimizable: true,\n            width: 600,\n            height: 750,\n            minWidth: 550,\n            themeName: 'light',\n\n            svelte: {\n                class: AutorecAppShell,\n                target: document.body\n            }\n        });\n    }\n\n    /**\n     * @inheritDoc\n     */\n    async close(options) {\n        Object.values(ui.windows).filter(app => app.id === \"Options-Information\" ||\n         app.id === \"AA-Video-Preview\" || app.id === \"Autorec-Menu-Manager\" || app.id === \"AutomatedAnimations-Diagnostics\").forEach(app => app.close());\n\n        return super.close(options);\n    }\n\n    /**\n     * Specify the set of config buttons which should appear in the Application header. Buttons should be returned as an\n     * Array of objects.\n     *\n     * Provides an explicit override of Application._getHeaderButtons to add\n     *\n     * @returns {ApplicationHeaderButton[]} The app header buttons.\n     * @override\n     */\n    _getHeaderButtons()\n    {\n        const buttons = super._getHeaderButtons();\n\n        const showSettings = gameSettings.uiControl.showSettings;\n\n        buttons.unshift({\n            class: \"settings\",\n            icon: showSettings ? \"fa-regular fa-square-list\" : \"fa-regular fa-gear\",\n            label: showSettings ? \"Main Menu\" : \"Settings\",\n\n            onPress: ({ button }) => {\n                const newShowSettings = gameSettings.uiControl.swapShowSettings();\n\n                button.icon = newShowSettings ? \"fa-regular fa-square-list\" : \"fa-regular fa-gear\";\n                button.label = newShowSettings ? \"Main Menu\" : \"Settings\";\n            }\n        },\n        {\n            icon: \"fas fa-stethoscope\",\n            label: \"Diagnostics\",\n\n            onPress: () => {\n                let diagnosticApp = new AADiagnostics();\n                diagnosticApp.render(true, { focus: true });\n            }\n        });\n\n        return buttons;\n    }\n}\n","import AutorecMenuApp from \"./AutorecMenuApp.js\";\n\nlet mainAutorecMenu;\n\nexport function showAutorecMenu()\n{\n   mainAutorecMenu = mainAutorecMenu ? mainAutorecMenu : new AutorecMenuApp();\n   mainAutorecMenu.render(true, { focus: true });\n\n   return mainAutorecMenu;\n}\n","import { showAutorecMenu } from './showUI.js'\n\nexport default class AutorecShim extends FormApplication\n{\n   /**\n    * Disable Foundry v13+ warnings for AppV1.\n    *\n    * @type {boolean}\n    * @internal\n    */\n   static _warnedAppV1 = true;\n\n   /**\n    * @inheritDoc\n    */\n   constructor(options = {})\n   {\n      super({}, options);\n\n      showAutorecMenu();\n   }\n\n   async _updateObject(event, formData) {}\n   render() { this.close(); }\n}\n","import { currentAutorecVersion }    from \"./autoRecMerge\";\n\nexport class aaAutorec {\n    static get defaultConfiguration() {\n        const defaultConfig = {\n            version: currentAutorecVersion(),\n        };\n        return defaultConfig;\n    }\n\n    constructor() {\n        this._enabled = false;\n    }\n}\n\nexport const dnd5eAutoRec = new aaAutorec();","import { writable } from 'svelte/store';\nimport { isMinimalWritableStore, subscribeIgnoreFirst } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { CrossWindow } from '@typhonjs-fvtt/runtime/util/browser';\nimport { isObject, isIterable } from '@typhonjs-fvtt/runtime/util/object';\n\nvar _a;\n/**\n * Registers game settings and creates a backing Svelte store for each setting. The Svelte store will update the\n * Foundry game settings and vice versa when changes occur to the Foundry game settings the updated data is set to the\n * store.\n *\n * Note: It is possible to add multiple `onChange` callbacks on registration.\n *\n * @typeParam `ExtraProps` - Defines additional properties for game setting options / data that child implementations\n * may define.\n *\n * @privateRemarks\n * TODO: A possible future extension is to offer type checking against the setting type by creating a customized\n * writable store that has an overloaded `set` method to provide type checking.\n */\nclass TJSGameSettings {\n    /**\n     */\n    #namespace;\n    /**\n     */\n    #settings = [];\n    /**\n     */\n    #stores = new Map();\n    /**\n     * Creates the TJSGameSettings instance.\n     *\n     * @param namespace - The namespace for all settings.\n     */\n    constructor(namespace) {\n        if (typeof namespace !== 'string') {\n            throw new TypeError(`'namespace' is not a string.`);\n        }\n        this.#namespace = namespace;\n    }\n    /**\n     * Creates a new writable for the given key.\n     *\n     * @param initialValue - An initial value to set to new stores.\n     *\n     * @returns The new writable.\n     */\n    static #createStore(initialValue) {\n        return writable(initialValue);\n    }\n    /**\n     * @returns Returns namespace set in constructor.\n     */\n    get namespace() {\n        return this.#namespace;\n    }\n    /**\n     * Gets a store from the `stores` Map or creates a new store for the key.\n     *\n     * @param key - Key to lookup in stores map.\n     *\n     * @param [initialValue] - An initial value to set to new stores.\n     *\n     * @returns The store for the given key.\n     */\n    #getStore(key, initialValue) {\n        let store = this.#stores.get(key);\n        if (store === void 0) {\n            store = _a.#createStore(initialValue);\n            this.#stores.set(key, store);\n        }\n        return store;\n    }\n    /**\n     * Returns a readable Game Settings store for the associated key.\n     *\n     * @param key - Game setting key.\n     *\n     * @returns The associated store for the given game setting key.\n     */\n    getReadableStore(key) {\n        if (!this.#stores.has(key)) {\n            console.warn(`TJSGameSettings - getReadableStore: '${key}' is not a registered setting.`);\n            return;\n        }\n        const store = this.#getStore(key);\n        return { subscribe: store.subscribe };\n    }\n    /**\n     * Returns a writable Game Settings store for the associated key.\n     *\n     * @param key - Game setting key.\n     *\n     * @returns The associated store for the given game setting key.\n     */\n    getStore(key) {\n        return this.getWritableStore(key);\n    }\n    /**\n     * Returns a writable Game Settings store for the associated key.\n     *\n     * @param key - Game setting key.\n     *\n     * @returns The associated store for the given game setting key.\n     */\n    getWritableStore(key) {\n        if (!this.#stores.has(key)) {\n            console.warn(`TJSGameSettings - getWritableStore: '${key}' is not a registered setting.`);\n            return;\n        }\n        return this.#getStore(key);\n    }\n    /**\n     * Registers a setting with TJSGameSettings and Foundry core.\n     *\n     * @param setting - A GameSetting instance to set to Foundry game settings.\n     *\n     * @param coreConfig - When false this overrides the `setting.options.config` parameter when registering the setting\n     *        with Foundry. This allows the settings to be displayed in the app itself, but removed from the standard\n     *        Foundry configuration location.\n     */\n    register(setting, coreConfig = true) {\n        if (!isObject(setting)) {\n            throw new TypeError(`TJSGameSettings - register: setting is not an object.`);\n        }\n        if (!isObject(setting.options)) {\n            throw new TypeError(`TJSGameSettings - register: 'setting.options' attribute is not an object.`);\n        }\n        if (typeof coreConfig !== 'boolean') {\n            throw new TypeError(`TJSGameSettings - register: 'coreConfig' is not an boolean.`);\n        }\n        if (setting.store !== void 0 && !isMinimalWritableStore(setting.store)) {\n            throw new TypeError(`TJSGameSettings - register: 'setting.store' attribute is not a minimal writable store.`);\n        }\n        const namespace = setting.namespace ?? this.#namespace;\n        const key = setting.key;\n        // The `config` parameter passed to Foundry core.\n        const foundryConfig = coreConfig ? setting.options.config ?? true : false;\n        if (typeof namespace !== 'string') {\n            throw new TypeError(`TJSGameSettings - register: 'namespace' attribute is not a string.`);\n        }\n        if (typeof key !== 'string') {\n            throw new TypeError(`TJSGameSettings - register: 'key' attribute is not a string.`);\n        }\n        const store = setting.store;\n        const options = setting.options;\n        const onchangeFunctions = [];\n        // When true prevents local store subscription from a loop when values are object data.\n        let gateSet = false;\n        // Provides an `onChange` callback to update the associated store.\n        onchangeFunctions.push((value) => {\n            const callbackStore = this.#getStore(key);\n            if (callbackStore && !gateSet) {\n                gateSet = true;\n                callbackStore.set(value);\n                gateSet = false;\n            }\n        });\n        // Handle loading any existing `onChange` callbacks.\n        if (isIterable(options?.onChange)) {\n            for (const entry of options.onChange) {\n                if (typeof entry === 'function') {\n                    onchangeFunctions.push(entry);\n                }\n            }\n        }\n        else if (typeof options.onChange === 'function') {\n            onchangeFunctions.push(options.onChange);\n        }\n        // Provides the final onChange callback that iterates over all the stored onChange callbacks.\n        const onChange = (value) => {\n            for (const entry of onchangeFunctions) {\n                entry(value);\n            }\n        };\n        // @ts-expect-error PF2E types do not have partial aspects for `name`.\n        globalThis.game.settings.register(namespace, key, { ...options, config: foundryConfig, onChange });\n        // Set new store value with existing setting or default value.\n        const targetStore = store ? store : this.#getStore(key, globalThis.game.settings.get(namespace, key));\n        // If a store instance is passed into register then initialize it with game settings data.\n        if (store) {\n            this.#stores.set(key, targetStore);\n            store.set(globalThis.game.settings.get(namespace, key));\n        }\n        const storeHandler = async (value) => {\n            if (!gateSet) {\n                gateSet = true;\n                await globalThis.game.settings.set(namespace, key, value);\n            }\n            gateSet = false;\n        };\n        // Subscribe to self to set associated game setting on updates after verifying that the new value does not match\n        // existing game setting.\n        subscribeIgnoreFirst(targetStore, storeHandler);\n        // Transfer setting options to data.\n        {\n            const { store, ...rest } = setting;\n            const gameSettingData = Object.assign({}, rest, { namespace, key, options });\n            Object.freeze(gameSettingData);\n            this.#settings.push(gameSettingData);\n        }\n    }\n    /**\n     * Registers multiple settings.\n     *\n     * @param settings - An iterable list of game setting configurations to register.\n     *\n     * @param coreConfig - When false this overrides the `setting.options.config` parameter when registering the setting\n     *        with Foundry. This allows the settings to be displayed in the app itself, but removed from the standard\n     *        Foundry configuration location.\n     *\n     * @returns An object containing all TJSGameSetting store subscriber handlers for each setting `key` added.\n     */\n    registerAll(settings, coreConfig) {\n        if (!isIterable(settings)) {\n            throw new TypeError(`TJSGameSettings - registerAll: settings is not iterable.`);\n        }\n        for (const entry of settings) {\n            if (!isObject(entry)) {\n                throw new TypeError(`TJSGameSettings - registerAll: entry in settings is not an object.`);\n            }\n            if (typeof entry.namespace !== 'string') {\n                throw new TypeError(`TJSGameSettings - registerAll: entry in settings missing 'namespace' attribute.`);\n            }\n            if (typeof entry.key !== 'string') {\n                throw new TypeError(`TJSGameSettings - registerAll: entry in settings missing 'key' attribute.`);\n            }\n            if (!isObject(entry.options)) {\n                throw new TypeError(`TJSGameSettings - registerAll: entry in settings missing 'options' attribute.`);\n            }\n            this.register(entry, coreConfig);\n        }\n    }\n    // Iterators ------------------------------------------------------------------------------------------------------\n    /**\n     * Returns an iterable for the game setting data; {@link TJSGameSettings.Data.GameSetting}.\n     *\n     * @param [regex] - Optional regular expression to filter by game setting keys.\n     *\n     * @returns Iterable iterator of `TJSGameSettings.Data.GameSetting`.\n     */\n    *data(regex = void 0) {\n        if (regex !== void 0 && !CrossWindow.isRegExp(regex)) {\n            throw new TypeError(`'regex' is not a RegExp`);\n        }\n        if (!this.#settings.length) {\n            return void 0;\n        }\n        if (regex) {\n            for (const setting of this.#settings) {\n                if (regex.test(setting.key)) {\n                    yield setting;\n                }\n            }\n        }\n        else {\n            for (const setting of this.#settings) {\n                yield setting;\n            }\n        }\n    }\n    /**\n     * Returns an iterable for the game setting keys and stores.\n     *\n     * @param [regex] - Optional regular expression to filter by game setting keys.\n     *\n     * @typeParam T - Store data type.\n     *\n     * @returns Iterable iterator of keys and stores.\n     */\n    *entries(regex = void 0) {\n        if (regex !== void 0 && !CrossWindow.isRegExp(regex)) {\n            throw new TypeError(`'regex' is not a RegExp`);\n        }\n        if (!this.#stores.size) {\n            return void 0;\n        }\n        if (regex) {\n            for (const key of this.#stores.keys()) {\n                if (regex.test(key)) {\n                    yield [key, this.getStore(key)];\n                }\n            }\n        }\n        else {\n            for (const key of this.#stores.keys()) {\n                yield [key, this.getStore(key)];\n            }\n        }\n    }\n    /**\n     * Returns an iterable for the game setting keys from existing stores.\n     *\n     * @param [regex] - Optional regular expression to filter by game setting keys.\n     *\n     * @returns Iterable iterator of game setting keys.\n     */\n    *keys(regex = void 0) {\n        if (regex !== void 0 && !CrossWindow.isRegExp(regex)) {\n            throw new TypeError(`'regex' is not a RegExp`);\n        }\n        if (!this.#stores.size) {\n            return void 0;\n        }\n        if (regex) {\n            for (const key of this.#stores.keys()) {\n                if (regex.test(key)) {\n                    yield key;\n                }\n            }\n        }\n        else {\n            for (const key of this.#stores.keys()) {\n                yield key;\n            }\n        }\n    }\n    /**\n     * Returns an iterable for the game setting stores.\n     *\n     * @param [regex] - Optional regular expression to filter by game setting keys.\n     *\n     * @returns Iterable iterator of stores.\n     */\n    *stores(regex = void 0) {\n        if (regex !== void 0 && !CrossWindow.isRegExp(regex)) {\n            throw new TypeError(`'regex' is not a RegExp`);\n        }\n        if (!this.#stores.size) {\n            return void 0;\n        }\n        if (regex) {\n            for (const key of this.#stores.keys()) {\n                if (regex.test(key)) {\n                    yield this.getStore(key);\n                }\n            }\n        }\n        else {\n            for (const key of this.#stores.keys()) {\n                yield this.getStore(key);\n            }\n        }\n    }\n}\n_a = TJSGameSettings;\n\n/**\n * Provides an accessible JS object that is updated reactively from all or subset of TJSGameSettings stores.\n * Accessors are provided to directly get / set current setting data. Using a setter will update the setting and backing\n * store.\n *\n * TJSLiveGameSettings is also a readable Svelte store essentially providing a customizable derived store of all\n * settings tracked.\n *\n * Note: You can create a JSDoc / `@typedef` to apply with `@type` and achieve typing support in IDEs for the\n * customizable live settings instance. Please see the example at the end of this source file on how to accomplish this\n * task.\n *\n * Note: Presently `TJSLiveGameSettings` is openly typed, but there will be a TypeScript friendly way to strongly type\n * additional instance properties.\n *\n * Note: When using from JS a second subscriber function argument is the key that was updated.\n * From Svelte: Use 'lastKey' accessor to retrieve the last updated key.\n *\n * Note: In the future this class will be reworked w/ Svelte 5 state handling.\n *\n * @example\n * ```js\n * // Example of creating a typedef to type your specific live game settings instance. Add all relevant `@property`\n * // entries.\n *\n * /**\n *  * @typedef {TJSLiveGameSettings} MyLiveGameSettings - Extend TJSLiveGameSettings and name this anything.\n *  *\n *  * @property {boolean} myBooleanSetting - Add property / type entries for setting keys associated w/ accessors.\n *  *\\/\n *\n * /** @type {MyLiveGameSettings} *\\/\n * const liveGameSettings = new TJSLiveGameSettings(gameSettings);\n * liveGameSettings.myBooleanSetting is now typed as a boolean.\n * ```\n */\nclass TJSLiveGameSettings {\n    /**\n     * Stores the current parsed game setting data.\n     */\n    #currentData = {};\n    /**\n     * Map of all game settings stores and unsubscribe functions currently subscribed.\n     */\n    #gameSettings = new Map();\n    /**\n     * Stores readable subscribers of this instance.\n     *\n     * Note: When using from JS a second argument is the key that was updated.\n     * From Svelte: Use 'lastKey' accessor to retrieve the last updated key.\n     */\n    #subscribers = [];\n    /**\n     * Stores the last updated key.\n     */\n    #lastKey = void 0;\n    /**\n     * Creates a live binding against the setting stores. All settings are configured by default, but can also be\n     * filtered by setting key with inclusive / exclusive Sets.\n     *\n     * @param gameSettings - A game settings instance to subscribe to...\n     *\n     * @param [options] - TJSLiveGameSettings options.\n     *\n     * @param [options.include] - A Set of setting keys to include from subscribing.\n     *\n     * @param [options.exclude] - A Set of setting keys to exclude from subscribing.\n     */\n    constructor(gameSettings, { include, exclude } = {}) {\n        if (!(gameSettings instanceof TJSGameSettings)) {\n            throw new TypeError(`'gameSettings' is not a TJSGameSettings instance.`);\n        }\n        if (include !== void 0 && !CrossWindow.isSet(include)) {\n            throw new TypeError(`'options.include' is not a Set.`);\n        }\n        if (exclude !== void 0 && !CrossWindow.isSet(exclude)) {\n            throw new TypeError(`'options.exclude' is not a Set.`);\n        }\n        for (const setting of gameSettings.data()) {\n            const key = setting.key;\n            // Skip any keys that are in the include set.\n            if (include !== void 0 && !include.has(key)) {\n                continue;\n            }\n            // Skip any keys that are in the exclude set.\n            if (exclude !== void 0 && exclude.has(key)) {\n                continue;\n            }\n            if (typeof this[key] === 'function' || key === 'lastKey') {\n                console.warn(`TJSLiveGameSettings warning: key (${key}) shadows a function. Skipping key.`);\n            }\n            const store = gameSettings.getStore(key);\n            if (!store) {\n                continue;\n            }\n            // Update this instance storing setting data by key.\n            this.#gameSettings.set(key, {\n                store,\n                unsubscribe: store.subscribe((data) => {\n                    if (this.#currentData !== void 0) {\n                        this.#currentData[key] = data;\n                    }\n                    this.#lastKey = key;\n                    // Notify any child instance that a particular key has updated.\n                    this._update(key);\n                    // Notify any readable store subscribers.\n                    this.#updateSubscribers(key);\n                })\n            });\n            // Define new accessors for setting key.\n            Object.defineProperty(this, key, {\n                get: () => {\n                    if (this.#currentData === void 0) {\n                        throw new Error(`This instance of TJSLiveGameSettings has been destroyed.`);\n                    }\n                    else {\n                        return this.#currentData[key];\n                    }\n                },\n                set: (data) => {\n                    if (this.#currentData === void 0) {\n                        throw new Error(`This instance of TJSLiveGameSettings has been destroyed.`);\n                    }\n                    else {\n                        this.#gameSettings.get(key)?.store.set(data);\n                    }\n                }\n            });\n        }\n        Object.seal(this);\n    }\n    /**\n     * @returns Last updated setting key.\n     */\n    get lastKey() {\n        return this.#lastKey;\n    }\n    // ----------------------------------------------------------------------------------------------------------------\n    /**\n     * Destroys this instance of TJSLiveGameSettings and unsubscribes from all game setting stores.\n     */\n    destroy() {\n        for (const data of this.#gameSettings.values()) {\n            if (typeof data.unsubscribe === 'function') {\n                data.unsubscribe();\n            }\n        }\n        this.#gameSettings.clear();\n        this.#currentData = {};\n    }\n    /**\n     * Returns an iterator / generator of all setting entries.\n     *\n     * @returns An iterator returning setting entries.\n     */\n    *entries() {\n        if (this.#currentData === void 0) {\n            throw new Error(`This instance of TJSLiveGameSettings has been destroyed.`);\n        }\n        for (const key in this.#currentData) {\n            yield [key, this.#currentData[key]];\n        }\n    }\n    /**\n     * Returns an iterator / generator of all setting keys.\n     *\n     * @returns An iterator returning setting keys.\n     */\n    *keys() {\n        if (this.#currentData === void 0) {\n            throw new Error(`This instance of TJSLiveGameSettings has been destroyed.`);\n        }\n        for (const key in this.#currentData) {\n            yield key;\n        }\n    }\n    /**\n     * Returns a string / JSON stringify of the current setting data.\n     *\n     * @returns Tracked setting data.\n     */\n    toString() {\n        if (this.#currentData === void 0) {\n            throw new Error(`This instance of TJSLiveGameSettings has been destroyed.`);\n        }\n        return JSON.stringify(this.#currentData);\n    }\n    /**\n     * Override to respond to setting update.\n     *\n     * @param key - The setting / local key that updated.\n     */\n    _update(key) { } // eslint-disable-line no-unused-vars\n    /**\n     * Returns an iterator / generator of all values.\n     *\n     * @returns An iterator returning setting values.\n     */\n    *values() {\n        if (this.#currentData === void 0) {\n            throw new Error(`This instance of TJSLiveGameSettings has been destroyed.`);\n        }\n        for (const key in this.#currentData) {\n            yield this.#currentData[key];\n        }\n    }\n    // Readable store implementation ----------------------------------------------------------------------------------\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        this.#subscribers.push(handler); // add handler to the array of subscribers\n        handler(this, void 0); // call handler with current value\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index >= 0) {\n                this.#subscribers.splice(index, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers.\n     *\n     * @param key - The key that was updated.\n     */\n    #updateSubscribers(key) {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this, key);\n        }\n    }\n}\n\nexport { TJSGameSettings, TJSLiveGameSettings };\n//# sourceMappingURL=index.js.map\n","import { TJSGameSettings } from '@typhonjs-fvtt/runtime/svelte/store/fvtt/settings';\nimport { writable } from 'svelte/store';\nimport { TJSDialog } from '@typhonjs-fvtt/runtime/svelte/application';\nimport { TJSSvelte } from '@typhonjs-fvtt/runtime/svelte/util';\nimport { localize } from '@typhonjs-fvtt/runtime/util/i18n';\nimport { isObject } from '@typhonjs-fvtt/runtime/util/object';\nimport { ripple, rippleFocus } from '@typhonjs-fvtt/standard/action/animate/composable';\n\n/**\n * Controls preparation and processing of registered game settings w/ TJSGameSettingsUI. Game settings are parsed\n * for UI display by TJSSettingsEdit. The store `showSettings` is utilized in TJSSettingsSwap component to provide\n * an easy way to flip between settings component or any main slotted component.\n */\nclass UIControlImpl {\n    /**\n     */\n    #sections = [];\n    /**\n     */\n    #settings;\n    /**\n     */\n    #showSettings = false;\n    /**\n     */\n    #showSettingsSet;\n    /**\n     */\n    #stores;\n    /**\n     * @param settings -\n     */\n    constructor(settings) {\n        this.#settings = settings;\n        const showSettings = writable(this.#showSettings);\n        this.#showSettingsSet = showSettings.set;\n        this.#stores = {\n            showSettings: { subscribe: showSettings.subscribe }\n        };\n        Object.freeze(this.#stores);\n    }\n    /**\n     * @returns Current `showSettings` state.\n     */\n    get showSettings() {\n        return this.#showSettings;\n    }\n    /**\n     * @returns Returns the managed stores.\n     */\n    get stores() {\n        return this.#stores;\n    }\n    /**\n     * Sets current `showSettings` state.\n     *\n     * @param showSettings - New `showSettings` state.\n     */\n    set showSettings(showSettings) {\n        if (typeof showSettings !== 'boolean') {\n            throw new TypeError('showSettings must be a boolean');\n        }\n        this.#showSettings = showSettings;\n        this.#showSettingsSet(this.#showSettings);\n    }\n    /**\n     * Adds a custom section / folder defined by the provided TJSSettingsCustomSection options object.\n     *\n     * @param options - The configuration object for the custom section.\n     */\n    addSection(options) {\n        if (!isObject(options)) {\n            throw new TypeError(`'options' is not an object.`);\n        }\n        if (!TJSSvelte.util.isComponent(options.class)) {\n            throw new TypeError(`'options.class' is not a Svelte component.`);\n        }\n        if (options.props !== void 0 && !isObject(options.props)) {\n            throw new TypeError(`'options.props' is not an object.`);\n        }\n        if (options.folder !== void 0) {\n            const folder = options.folder;\n            if (typeof folder !== 'string' && !isObject(folder)) {\n                throw new TypeError(`'options.folder' is not a string or object.`);\n            }\n            if (isObject(folder)) {\n                if (typeof folder.label !== 'string') {\n                    throw new TypeError(`'options.folder.label' is not a string.`);\n                }\n                // Validate custom component set as folder summary end.\n                if (folder.summaryEnd !== void 0) {\n                    if (!isObject(folder.summaryEnd)) {\n                        throw new TypeError(`'options.folder.summaryEnd' is not an object.`);\n                    }\n                    if (!TJSSvelte.util.isComponent(folder.summaryEnd.class)) {\n                        throw new TypeError(`'options.folder.summaryEnd.class' is not a Svelte component.`);\n                    }\n                    if (folder.summaryEnd.props !== void 0 && !isObject(folder.summaryEnd.props)) {\n                        throw new TypeError(`'options.folder.summaryEnd.props' is not an object.`);\n                    }\n                }\n                // Validate that folder inline styles is an object.\n                if (folder.styles !== void 0 && !isObject(folder.styles)) {\n                    throw new TypeError(`'options.folder.styles' is not an object.`);\n                }\n            }\n        }\n        // Validate that section inline styles is an object.\n        if (options.styles !== void 0 && !isObject(options.styles)) {\n            throw new TypeError(`'options.styles' is not an object.`);\n        }\n        this.#sections.push(options);\n    }\n    /**\n     * Creates the `TJSSettingsUI.Data` object by parsing stored settings in the associated {@link TJSGameSettings}\n     * instance.\n     *\n     * @param [options] - Create options\n     *\n     * @returns Parsed UI settings data.\n     */\n    create(options) {\n        const settings = this.#parseSettings(options);\n        const destroy = () => this.#destroy(settings);\n        return {\n            ...settings,\n            destroy\n        };\n    }\n    /**\n     * Destroy callback. Checks for any `requiresReload` parameter in each setting comparing against initial value\n     * when `settings` is created and current value. If there is a difference then show a modal dialog asking the user\n     * if they want to reload for those settings to take effect.\n     *\n     * @param settings - The UI data object initiated w/ `create`.\n     */\n    #destroy(settings) {\n        let requiresClientReload = false;\n        let requiresWorldReload = false;\n        if (Array.isArray(settings.topLevel)) {\n            for (const setting of settings.topLevel) {\n                const current = globalThis.game.settings.get(setting.namespace, setting.key);\n                if (current === setting.initialValue) {\n                    continue;\n                }\n                requiresClientReload ||= (setting.scope === 'client') && setting.requiresReload;\n                requiresWorldReload ||= (setting.scope === 'world') && setting.requiresReload;\n            }\n        }\n        if (Array.isArray(settings.folders)) {\n            for (const folder of settings.folders) {\n                if (Array.isArray(folder.settings)) {\n                    for (const setting of folder.settings) {\n                        const current = globalThis.game.settings.get(setting.namespace, setting.key);\n                        if (current === setting.initialValue) {\n                            continue;\n                        }\n                        requiresClientReload ||= (setting.scope === 'client') && setting.requiresReload;\n                        requiresWorldReload ||= (setting.scope === 'world') && setting.requiresReload;\n                    }\n                }\n            }\n        }\n        if (requiresClientReload || requiresWorldReload) {\n            this.#reloadConfirm({ world: requiresWorldReload });\n        }\n        this.#showSettings = false;\n        this.#showSettingsSet(this.#showSettings);\n    }\n    /**\n     * @param [options] - Optional parameters.\n     *\n     * @returns Parsed UI settings data.\n     */\n    #parseSettings({ efx = 'ripple', storage } = {}) {\n        const namespace = this.#settings.namespace;\n        if (storage && typeof namespace !== 'string') {\n            console.warn(`TJSGameSettings warning: 'options.storage' defined, but 'namespace' not defined in TJSGameSettings.`);\n        }\n        const hasStorage = storage !== void 0 && typeof namespace === 'string';\n        const uiSettings = [];\n        const canConfigure = globalThis.game.user.can('SETTINGS_MODIFY');\n        for (const setting of this.#settings.data()) {\n            if (!isObject(setting.options) || !setting.options.config ||\n                (!canConfigure && (setting.options.scope !== 'client'))) {\n                continue;\n            }\n            let options;\n            if (isObject(setting.options.choices)) {\n                options = Object.entries(setting.options.choices).map((entry) => ({ value: entry[0], label: localize(entry[1]) }));\n            }\n            let range;\n            if (isObject(setting.options.range)) {\n                // Verify range data.\n                if (typeof setting.options.range.min !== 'number') {\n                    throw new TypeError(`Setting 'options.range.min' is not a number.`);\n                }\n                if (typeof setting.options.range.max !== 'number') {\n                    throw new TypeError(`Setting 'options.range.max' is not a number.`);\n                }\n                if (setting.options.range.step !== void 0 && typeof setting.options.range.step !== 'number') {\n                    throw new TypeError(`Setting 'options.range.step' is not a number.`);\n                }\n                range = {\n                    min: setting.options.range.min,\n                    max: setting.options.range.max,\n                    step: setting.options.range.step ?? 1\n                };\n            }\n            // Default to `String` if no type is provided.\n            const type = setting.options.type instanceof Function ? setting.options.type.name : 'String';\n            // Only configure file picker if setting type is a string.\n            let filePicker;\n            if (type === 'String') {\n                switch (typeof setting.options.filePicker) {\n                    case 'boolean':\n                        filePicker = setting.options.filePicker ? 'any' : void 0;\n                        break;\n                    case 'string':\n                        filePicker = setting.options.filePicker;\n                        break;\n                }\n            }\n            let buttonData;\n            if (filePicker) {\n                buttonData = {\n                    icon: 'fas fa-file-import fa-fw',\n                    efx: efx === 'ripple' ? ripple() : void 0,\n                    tooltip: 'FILES.BrowseTooltip',\n                    styles: { 'margin-left': '0.25em' }\n                };\n            }\n            const store = this.#settings.getStore(setting.key);\n            let selectData;\n            let componentType = 'text';\n            if (setting.options.type === Boolean) {\n                componentType = 'checkbox';\n            }\n            else if (options !== void 0) {\n                componentType = 'select';\n                selectData = {\n                    store,\n                    efx: efx === 'ripple' ? rippleFocus() : void 0,\n                    type: componentType,\n                    options\n                };\n            }\n            else if (setting.options.type === Number) {\n                componentType = isObject(setting.options.range) ? 'range' : 'number';\n            }\n            let inputData;\n            if (componentType === 'text' || componentType === 'number') {\n                inputData = {\n                    store,\n                    efx: efx === 'ripple' ? rippleFocus() : void 0,\n                    type: componentType\n                };\n            }\n            uiSettings.push({\n                id: `${setting.namespace}.${setting.key}`,\n                namespace: setting.namespace,\n                folder: setting.folder,\n                key: setting.key,\n                name: localize(setting.options?.name ?? ''),\n                hint: localize(setting.options?.hint ?? ''),\n                type,\n                componentType,\n                filePicker,\n                range,\n                store,\n                initialValue: globalThis.game.settings.get(setting.namespace, setting.key),\n                scope: setting.options.scope,\n                requiresReload: typeof setting.options.requiresReload === 'boolean' ? setting.options.requiresReload :\n                    false,\n                buttonData,\n                inputData,\n                selectData\n            });\n        }\n        // If storage is available then create a key otherwise create a dummy store, so `applyScroll` works.\n        const storeScrollbar = hasStorage && storage ?\n            storage.getStore(`${namespace}-settings-scrollbar`) : writable(0);\n        const topLevel = [];\n        const folderData = {};\n        // Sort into folders\n        for (const setting of uiSettings) {\n            if (typeof setting.folder === 'string') {\n                const folderName = localize(setting.folder);\n                // Create folder array if one doesn't exist already.\n                if (!Array.isArray(folderData[folderName])) {\n                    folderData[folderName] = [];\n                }\n                folderData[folderName].push(setting);\n            }\n            else // Add to 'toplevel' settings\n             {\n                topLevel.push(setting);\n            }\n        }\n        // Convert folderData object to array.\n        const folders = Object.entries(folderData).map((entry) => {\n            return {\n                label: entry[0],\n                store: hasStorage && storage ? storage.getStore(`${namespace}-settings-folder-${entry[0]}`) : void 0,\n                settings: entry[1],\n            };\n        });\n        const sections = [];\n        // Parse custom component sections\n        for (const section of this.#sections) {\n            const parsedSection = {\n                class: section.class,\n                props: section.props,\n                styles: section.styles\n            };\n            if (typeof section.folder === 'string') {\n                const label = localize(section.folder);\n                parsedSection.folder = {\n                    label,\n                    store: hasStorage && storage ? storage.getStore(`${namespace}-settings-folder-${label}`) : void 0\n                };\n            }\n            else if (isObject(section.folder)) {\n                const label = localize(section.folder.label);\n                parsedSection.folder = {\n                    label,\n                    store: hasStorage && storage ? storage.getStore(`${namespace}-settings-folder-${label}`) : void 0,\n                    summaryEnd: section.folder.summaryEnd,\n                    styles: section.folder.styles\n                };\n            }\n            sections.push(parsedSection);\n        }\n        return {\n            storeScrollbar,\n            topLevel,\n            folders,\n            sections\n        };\n    }\n    async #reloadConfirm({ world = false } = {}) {\n        let title = localize('SETTINGS.ReloadPromptTitle');\n        let label = localize('SETTINGS.ReloadPromptBody');\n        // Foundry v9 doesn't have the reload lang keys, so substitute just for English translation.\n        // TODO: FOUNDRY_V9 - remove when support for v9 is dropped.\n        title = title !== 'SETTINGS.ReloadPromptTitle' ? title : 'Reload Application?';\n        label = label !== 'SETTINGS.ReloadPromptBody' ? label :\n            'Some of the changed settings require a reload of the application to take effect. Would you like to reload now?';\n        const reload = await TJSDialog.confirm({\n            modal: true,\n            draggable: false,\n            title,\n            content: `<p>${label}</p>`\n        });\n        if (!reload) {\n            return;\n        }\n        // Reload all connected clients. Note: Foundry v9 might not support this event.\n        if (world && globalThis.game.user.isGM) {\n            globalThis.game.socket.emit('reload');\n        }\n        // Reload locally.\n        window.location.reload();\n    }\n    /**\n     * Convenience method to swap `showSettings`.\n     *\n     * @returns {boolean} New `showSettings` state.\n     */\n    swapShowSettings() {\n        this.#showSettings = !this.#showSettings;\n        this.#showSettingsSet(this.#showSettings);\n        return this.#showSettings;\n    }\n}\n\n/**\n * Extends {@link TJSGameSettings} with UI control for working with\n * {@link #standard/component/fvtt/settings!TJSSettingsEdit} and\n * {@link #standard/component/fvtt/settings!TJSSettingsSwap}\n * components. Instead of extending `TJSGameSettings` simply extend `TJSGameSettingsWithUI` instead when creating\n * reactive game settings that utilize the above components.\n *\n * There are additional game settings options for separating settings into folders. Please see\n * {@link TJSGameSettingsWithUI.Options.ExtraProps}.\n */\nclass TJSGameSettingsWithUI extends TJSGameSettings {\n    /**\n     */\n    #uiControl;\n    /**\n     * Creates the TJSGameSettingsWithUI instance.\n     *\n     * @param namespace - The namespace for all settings.\n     */\n    constructor(namespace) {\n        super(namespace);\n        this.#uiControl = new UIControlImpl(this);\n    }\n    register(setting) {\n        if (setting?.folder !== void 0 && typeof setting.folder !== 'string') {\n            throw new TypeError(`TJSGameSettingsWithUI - register: 'folder' attribute is not a string.`);\n        }\n        super.register(setting);\n    }\n    /**\n     * @returns The associated UIControl.\n     */\n    get uiControl() {\n        return this.#uiControl;\n    }\n}\n\nexport { TJSGameSettingsWithUI };\n//# sourceMappingURL=index.js.map\n","import AutorecShim from \"./formApps/_AutorecMenu/appShim.js\";\nimport { aaAutorec } from \"./mergeScripts/autorec/aaAutoRecList.js\";\nimport { AnimationState } from \"./AnimationState.js\";\n\nimport { TJSGameSettingsWithUI } from '#standard/store/fvtt/settings';\n\nclass AAGameSettings extends TJSGameSettingsWithUI {\n   constructor() {\n      super('autoanimations');\n   }\n\n   initialize() {\n      const namespace = this.namespace;\n\n      /**\n       * Constants for setting scope type.\n       *\n       * @type {{world: string, client: string}}\n       */\n      const scope = {\n         client: 'client',\n         world: 'world'\n      };\n\n      const settings = [];\n\n      // Add a convenience hook to open Autorec settings from macro.\n      Hooks.on('AA.Open.AutorecSetting', () => {\n         if (game.user.isGM) { new AutorecShim(); }\n      });\n\n      game.settings.registerMenu(namespace, 'custom-autorec', {\n         name: \"autoanimations.settings.menuName\",\n         hint: \"autoanimations.settings.menuHint\",\n         label: 'autoanimations.settings.launchMenu',\n         icon: 'fas fa-dice-d20',\n         type: AutorecShim,\n         restricted: true,\n      });\n\n      game.settings.register(namespace, 'aaAutorec', {\n         name: 'Automatic Recognition',\n         hint: 'Configure Automatic Recognition',\n         scope: scope.world,\n         config: false,\n         default: aaAutorec.defaultConfiguration,\n         type: Object,\n      });\n\n      settings.push({\n         namespace,\n         key: 'killAllAnim',\n         options: {\n            name: 'autoanimations.settings.toggleAnimations',\n            hint: 'autoanimations.settings.toggleAnimations_hint',\n            scope: scope.client,\n            config: true,\n            type: String,\n            choices: {\n               on: 'autoanimations.settings.ON',\n               off: 'autoanimations.settings.OFF',\n            },\n            default: 'on',\n            onChange: value => {\n               if (value === 'off') {\n                  AnimationState.enabled = false;\n               }\n               if (value === 'on') {\n                  AnimationState.enabled = true;\n               }\n            }\n         }\n      });\n      /*\n      settings.push({\n         namespace,\n         key: 'aaAutorec-version',\n         options: {\n            type: Number,\n            default: 4,\n            config:false,\n         }\n      });\n      */\n      settings.push({\n         namespace,\n         key: 'disableAutoRec',\n         options: {\n            name: 'autoanimations.settings.settingDisableAutoRec',\n            hint: 'autoanimations.settings.settingDisableAutoRecHint',\n            scope: scope.world,\n            config: true,\n            type: Boolean,\n            default: false\n         }\n      });\n\n      settings.push({\n         namespace,\n         key: 'globaldelay',\n         options: {\n            name: 'autoanimations.settings.globaldelay_name',\n            hint: 'autoanimations.settings.globaldelay_hint',\n            scope: scope.world,\n            config: true,\n            default: 100,\n            type: Number\n         }\n      });\n\n      settings.push({\n         namespace,\n         key: 'jb2aLocation',\n         options: {\n            name: 'autoanimations.settings.s3Name',\n            hint: 'autoanimations.settings.s3Hint',\n            scope: scope.world,\n            config: true,\n            type: String,\n            default: '',\n            requiresReload: true\n         }\n      });\n\n      settings.push({\n         namespace,\n         key: 'hideFromPlayers',\n         options: {\n            name: 'autoanimations.settings.animtab_name',\n            hint: 'autoanimations.settings.animtab_hint',\n            scope: scope.world,\n            config: true,\n            type: Boolean,\n            default: false,\n         }\n      });\n      /*\n      settings.push({\n         namespace,\n         key: 'decoupleSound',\n         options: {\n            name: 'autoanimations.settings.decoupleSounds',\n            hint: 'autoanimations.settings.decoupleSounds_hint',\n            scope: scope.world,\n            config: true,\n            type: Boolean,\n            default: false,\n         }\n      });\n      */\n      settings.push({\n         namespace,\n         key: 'rangeSwitch',\n         options: {\n            name: 'autoanimations.settings.settingRangeSwitch',\n            hint: 'autoanimations.settings.settingRangeSwitchhint',\n            scope: scope.world,\n            config: true,\n            type: Boolean,\n            default: false,\n         }\n      });\n\n      settings.push({\n         namespace,\n         key: 'disableAEAnimations',\n         options: {\n            name: 'autoanimations.settings.disableAEAnimations',\n            hint: 'autoanimations.settings.disableAEAnimationsHint',\n            scope: scope.world,\n            type: Boolean,\n            default: false,\n            config: true,\n         }\n      });\n\n      settings.push({\n         namespace,\n         key: 'noTips',\n         options: {\n            name: 'autoanimations.settings.noTips',\n            hint: 'autoanimations.settings.noTipsHint',\n            scope: scope.world,\n            config: true,\n            type: Boolean,\n            default: false,\n         }\n      });\n\n      settings.push({\n         namespace,\n         key: \"hideTemplateGrid\",\n         options: {\n            name: 'autoanimations.settings.hideTemplate_name',\n            hint: 'autoanimations.settings.hideTemplate_hint',\n            scope: scope.client,\n            config: true,\n            type: String,\n            choices: {\n               off: 'autoanimations.settings.OFF',\n               templateLayer: 'autoanimations.settings.hoverInTemplateLayer',\n               full: 'autoanimations.settings.hoverInTemplate',\n            },\n            default: \"off\",\n            requiresReload: true\n         },\n      })\n\n      settings.push({\n         namespace,\n         key: 'uiAnimation',\n         options: {\n            name: 'autoanimations.settings.uiAnimation',\n            hint: 'autoanimations.settings.uiAnimationHint',\n            scope: scope.world,\n            config: true,\n            type: Boolean,\n            default: true\n         }\n      });\n\n      settings.push({\n         namespace,\n         key: 'debug',\n         options: {\n            name: 'autoanimations.settings.debugging',\n            scope: scope.world,\n            config: true,\n            default: false,\n            type: Boolean\n         }\n      });\n      switch (game.system.id) {\n         case \"cyphersystem\":\n            settings.push({\n               namespace,\n               key: 'EnableCritical',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.cypherCrit_name',\n                  hint: 'autoanimations.settings.cypherCrit_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'CriticalAnimation',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.cypherCritAnim_name',\n                  scope: scope.world,\n                  type: String,\n                  config: true,\n                  default: \"\",\n                  filePicker: \"imagevideo\"\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'EnableFumble',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.cypherFumble_name',\n                  hint: 'autoanimations.settings.cypherFumble_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'FumbleAnimation',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.cypherFumbleAnim_name',\n                  scope: scope.world,\n                  type: String,\n                  config: true,\n                  default: \"\",\n                  filePicker: \"imagevideo\"\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'EnableOnRecoveryRoll',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.recovery_name',\n                  hint: 'autoanimations.settings.recovery_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'RecoveryRollAnimation',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.recoveryAnim_name',\n                  scope: scope.world,\n                  type: String,\n                  config: true,\n                  default: \"\",\n                  filePicker: \"imagevideo\"\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'EnableOnMightRoll',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.mightroll_name',\n                  hint: 'autoanimations.settings.mightroll_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'MightRollAnimation',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.mightRollAnim_name',\n                  scope: scope.world,\n                  type: String,\n                  config: true,\n                  default: \"\",\n                  filePicker: \"imagevideo\"\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'EnableOnSpeedRoll',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.speedroll_name',\n                  hint: 'autoanimations.settings.speedroll_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'SpeedRollAnimation',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.speedRollAnim_name',\n                  scope: scope.world,\n                  type: String,\n                  config: true,\n                  default: \"\",\n                  filePicker: \"imagevideo\"\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'EnableOnIntellecRoll',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.intellectroll_name',\n                  hint: 'autoanimations.settings.intellectroll_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'IntellectRollAnimation',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.intellectRollAnim_name',\n                  scope: scope.world,\n                  type: String,\n                  config: true,\n                  default: \"\",\n                  filePicker: \"imagevideo\"\n               }\n            });\n            break;\n         case 'demonlord':\n            settings.push({\n               namespace,\n               key: 'playtrigger',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.demonlordtrigger_name',\n                  hint: 'autoanimations.settings.demonlordtrigger_hint',\n                  scope: scope.world,\n                  type: String,\n                  choices: {\n                     rollattack: 'autoanimations.settings.demonlordtrigger_rollattack',\n                     hits: 'autoanimations.settings.demonlordtrigger_hits',\n                     misses: 'autoanimations.settings.demonlordtrigger_misses',\n                     rolldamage: 'autoanimations.settings.demonlordtrigger_rolldamage',\n                     applydamage: 'autoanimations.settings.demonlordtrigger_applydamage',\n                  },\n                  default: 'rollattack',\n                  config: true\n               }\n            });\n            break\n\n         case 'sfrpg':\n            settings.push({\n               namespace,\n               key: 'playonDamage',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.midiondmg_name',\n                  hint: 'autoanimations.settings.midiondmg_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true\n               }\n            });\n            break;\n\n         case 'marvel-multiverse':\n            settings.push({\n               namespace,\n               key: 'playonAttackCore',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.coreonatk_name',\n                  hint: 'autoanimations.settings.coreonatk_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true\n               }\n            });\n            settings.push({\n               namespace,\n               key: 'playonDamageCore',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.coreondmg_name',\n                  hint: 'autoanimations.settings.coreondmg_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true\n               }\n            });\n            break;\n\n         case 'dnd5e':\n         \n            settings.push({\n               namespace,\n               key: 'playonDamageCore',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.coreondmg_name',\n                  hint: 'autoanimations.settings.coreondmg_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n            \n            settings.push({\n               namespace,\n               key: 'playonmiss',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.midionmiss_name',\n                  hint: 'autoanimations.settings.midionmiss_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n            settings.push({\n               namespace,\n               key: 'EnableCritical',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.crithit_name',\n                  hint: 'autoanimations.settings.crithit_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'CriticalAnimation',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.crithitAnim_name',\n                  //name: 'Choose A File',\n                  scope: scope.world,\n                  config: true,\n                  type: String,\n                  default: \"\",\n                  filePicker: 'imagevideo'\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'EnableCriticalMiss',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.critmiss_name',\n                  hint: 'autoanimations.settings.critmiss_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'CriticalMissAnimation',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.critmissAnim_name',\n                  scope: scope.world,\n                  config: true,\n                  type: String,\n                  default: \"\",\n                  filePicker: 'imagevideo'\n               }\n            });\n            \n            break;\n         case 'sw5e':\n            if (game.modules.get('midi-qol')?.active) {\n               settings.push({\n                  namespace,\n                  key: 'playonhit',\n                  folder: 'Midi-QOL',\n                  options: {\n                     name: 'autoanimations.settings.midionhit_name',\n                     hint: 'autoanimations.settings.midionhit_hint',\n                     scope: scope.world,\n                     type: Boolean,\n                     default: false,\n                     config: true,\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'playonmiss',\n                  folder: 'Midi-QOL',\n                  options: {\n                     name: 'autoanimations.settings.midionmiss_name',\n                     hint: 'autoanimations.settings.midionmiss_hint',\n                     scope: scope.world,\n                     type: Boolean,\n                     default: false,\n                     config: true,\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'playonDamage',\n                  folder: 'Midi-QOL',\n                  options: {\n                     name: 'autoanimations.settings.midiondmg_name',\n                     hint: 'autoanimations.settings.midiondmg_hint',\n                     scope: scope.world,\n                     type: Boolean,\n                     default: false,\n                     config: true\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'EnableCritical',\n                  folder: 'Midi-QOL',\n                  options: {\n                     name: 'autoanimations.settings.crithit_name',\n                     hint: 'autoanimations.settings.crithit_hint',\n                     scope: scope.world,\n                     type: Boolean,\n                     default: false,\n                     config: true\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'CriticalAnimation',\n                  folder: 'Midi-QOL',\n                  options: {\n                     name: 'autoanimations.settings.crithitAnim_name',\n                     //name: 'Choose A File',\n                     scope: scope.world,\n                     config: true,\n                     type: String,\n                     default: \"\",\n                     filePicker: 'imagevideo'\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'EnableCriticalMiss',\n                  folder: 'Midi-QOL',\n                  options: {\n                     name: 'autoanimations.settings.critmiss_name',\n                     hint: 'autoanimations.settings.critmiss_hint',\n                     scope: scope.world,\n                     type: Boolean,\n                     default: false,\n                     config: true\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'CriticalMissAnimation',\n                  folder: 'Midi-QOL',\n                  options: {\n                     name: 'autoanimations.settings.critmissAnim_name',\n                     scope: scope.world,\n                     config: true,\n                     type: String,\n                     default: \"\",\n                     filePicker: 'imagevideo'\n                  }\n               });\n            } else {\n               settings.push({\n                  namespace,\n                  key: 'playonDamageCore',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                     name: 'autoanimations.settings.coreondmg_name',\n                     hint: 'autoanimations.settings.coreondmg_hint',\n                     scope: scope.world,\n                     type: Boolean,\n                     default: false,\n                     config: true,\n                  }\n               });\n               settings.push({\n                  namespace,\n                  key: 'EnableCritical',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                     name: 'autoanimations.settings.crithit_name',\n                     hint: 'autoanimations.settings.crithit_hint',\n                     scope: scope.world,\n                     type: Boolean,\n                     default: false,\n                     config: true\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'CriticalAnimation',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                     name: 'autoanimations.settings.crithitAnim_name',\n                     //name: 'Choose A File',\n                     scope: scope.world,\n                     config: true,\n                     type: String,\n                     default: \"\",\n                     filePicker: 'imagevideo'\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'EnableCriticalMiss',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                     name: 'autoanimations.settings.critmiss_name',\n                     hint: 'autoanimations.settings.critmiss_hint',\n                     scope: scope.world,\n                     type: Boolean,\n                     default: false,\n                     config: true\n                  }\n               });\n\n               settings.push({\n                  namespace,\n                  key: 'CriticalMissAnimation',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                     name: 'autoanimations.settings.critmissAnim_name',\n                     scope: scope.world,\n                     config: true,\n                     type: String,\n                     default: \"\",\n                     filePicker: 'imagevideo'\n                  }\n               });\n            }\n            break;\n         case 'ars':\n      \t\tsettings.push({\n                  namespace,\n                  key: 'EnableCritical',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                    name: 'autoanimations.settings.crithit_name',\n                    hint: 'autoanimations.settings.crithit_hint',\n                    scope: scope.world,\n                    type: Boolean,\n                    default: false,\n                    config: true\n                  }\n                });\n                settings.push({\n                  namespace,\n                  key: 'CriticalAnimation',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                    name: 'autoanimations.settings.crithitAnim_name',\n                    //name: 'Choose A File',\n                    scope: scope.world,\n                    config: true,\n                    type: String,\n                    default: '',\n                    filePicker: 'imagevideo'\n                  }\n                });\n                settings.push({\n                  namespace,\n                  key: 'EnableCriticalMiss',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                    name: 'autoanimations.settings.critmiss_name',\n                    hint: 'autoanimations.settings.critmiss_hint',\n                    scope: scope.world,\n                    type: Boolean,\n                    default: false,\n                    config: true\n                  }\n                });\n                settings.push({\n                  namespace,\n                  key: 'CriticalMissAnimation',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                    name: 'autoanimations.settings.critmissAnim_name',\n                    scope: scope.world,\n                    config: true,\n                    type: String,\n                    default: '',\n                    filePicker: 'imagevideo'\n                  }\n                });\n\tbreak;\n         case 'pf2e':\n         case 'sf2e':\n            settings.push({\n               namespace,\n               key: 'playonDamageCore',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.coreondmg_name',\n                  hint: 'autoanimations.settings.coreondmg_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'playonmiss',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.midionmiss_name',\n                  hint: 'Requires Animations to be played on Attack rolls',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'disableNestedEffects',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.disableNested',\n                  hint: 'autoanimations.settings.disableNestedHint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n\n            settings.push({\n               namespace,\n               key: 'disableGrantedAuraEffects',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.disableGrantedAura',\n                  hint: 'autoanimations.settings.disableGrantedAuraHint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n            break;\n\n         case 'pf1':\n            settings.push({\n               namespace,\n               key: 'disableAEAnimations',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.disableAEAnimations',\n                  hint: 'autoanimations.settings.disableAEAnimationsHint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n            break;\n         case \"wfrp4e\":\n            settings.push({\n               namespace,\n               key: 'castOnlyOnSuccess',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.wfrp4eCastOnlyOnSuccess',\n                  hint: 'autoanimations.settings.wfrp4eCastOnlyOnSuccessHint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: false,\n                  config: true,\n               }\n            });\n            break;\n         case 'impmal':\n                settings.push({\n                  namespace,\n                  key: 'criticalAnimation',\n                  folder: game.system.title || game.system.name,\n                  options: {\n                    name: 'autoanimations.settings.criticalAnimation',\n                    //name: 'Choose A File',\n                    scope: scope.world,\n                    config: true,\n                    type: String,\n                    default: '',\n                    filePicker: 'imagevideo'\n                  }\n                });\n            break;\n         case \"cyberpunk-red-core\":\n            settings.push({\n               namespace,\n               key: 'autofire',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.cyberPunkAutoFire',\n                  hint: 'autoanimations.settings.cyberPunkAutoFire_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: true,\n                  config: true,\n               }\n            }, {\n               namespace,\n               key: 'canMissTarget',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.cyberPunkCanMiss',\n                  hint: 'autoanimations.settings.cyberPunkCanMiss_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: true,\n                  config: true,\n               }\n            },{\n                namespace,\n                key: 'useElevation',\n                folder: game.system.title || game.system.name,\n                options: {\n                   name: 'autoanimations.settings.cyberPunkElevation',\n                   hint: 'autoanimations.settings.cyberPunkElevation_hint',\n                   scope: scope.world,\n                   type: Boolean,\n                   default: true,\n                   config: true,\n                }\n             });\n            break;\n         case \"TheWitcherTRPG\":\n            settings.push({\n               namespace,\n               key: \"attackSkill\",\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.coreonatk_name',\n                  hint: 'autoanimations.settings.coreonatk_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: true,\n                  config: true,\n               }\n            });\n            settings.push({\n               namespace,\n               key: \"damage\",\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.coreondmg_name',\n                  hint: 'autoanimations.settings.coreondmg_hint',\n                  scope: scope.world,\n                  type: Boolean,\n                  default: true,\n                  config: true,\n               }\n            });\n            break;\n         case \"twodsix\":\n            settings.push({\n               namespace,\n               key: 'playtrigger',\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: 'autoanimations.settings.playAnimations',\n                  scope: scope.world,\n                  type: String,\n                  choices: {\n                     onAttack: 'autoanimations.settings.attack',\n                     onDamage: 'autoanimations.settings.damage',\n                  },\n                  default: 'onAttack',\n                  config: true\n               }\n            });\n            break;\n         case \"swade\":\n            settings.push({\n               namespace,\n               key: \"playtrigger\",\n               folder: game.system.title || game.system.name,\n               options: {\n                  name: \"autoanimations.settings.playAnimations\",\n                  scope: scope.world,\n                  type: String,\n                  choices: {\n                     onAttack: \"autoanimations.settings.swadeTraitRolls\",\n                     onDamage: \"autoanimations.settings.damage\"\n                  },\n                  default: \"onDamage\",\n                  config: true\n               }\n            });\n            break;\n         /* Considering options for changing 5e options on \"How To Play\" Animations\n      default:\n         settings.push({\n            namespace,\n            key: 'howToPlay',\n            folder: game.system.title || game.system.name,\n            options: {\n               name: 'When to play Animations',\n               hint: 'Tell Automated Animations when you would like animations to play',\n               scope: scope.world,\n               type: String,\n               choices: {\n                  onUse: 'On Item Use',\n                  attack: 'On Attacks',\n                  damage: 'On Damage, if Present',\n               },\n               default: 'onUse',\n               config: true\n            }\n         });\n         */\n      }\n\n\n      // Selectively register settings w/ core Foundry based on whether the user is GM.\n      this.registerAll(settings, !game.user.isGM);\n   }\n}\n\nexport const gameSettings = new AAGameSettings();\n","<script>\n    import { getContext }       from \"svelte\";\n\n    import { localize }         from \"#runtime/util/i18n\";\n\n    import { TJSIconButton }    from \"#standard/component/button\";\n    import { TJSSvgFolder }     from \"#standard/component/folder\";\n\n    import NumberInput          from \"../../Components/options/inputComponents/NumberInput.svelte\";\n    import Elevation            from \"../../Components/options/inputComponents/Elevation.svelte\";\n    import Opacity              from \"../../Components/options/inputComponents/Opacity.svelte\";\n    import OptionsDialog        from \"../../Components/options/optionsInfoDialog.js\";\n    import WaitDelay            from \"../../Components/options/inputComponents/WaitDelay.svelte\";\n\n    import { gameSettings }     from \"#gameSettings\";\n\n    //export let animation;\n    let { animation } = getContext('animation-data');\n\n    /**\n     * Game setting store to control folder animation.\n     */\n    const uiAnimation = gameSettings.getStore('uiAnimation');\n\n    const folder = {\n        styles: {\n            \"--tjs-summary-font-family\":\n                '\"Modesto Condensed\", \"Palatino Linotype\", serif',\n            \"--tjs-summary-font-size\": \"1.1em\",\n            \"--tjs-summary-chevron-size\": \"0.7em\",\n        },\n        label: game.i18n.localize(\"autoanimations.menus.options\"),\n    };\n\n    const optionsInfo = {\n       icon: \"fas fa-info-circle\",\n       title: \"autoanimations.menus.quickReference\",\n       styles: {\n          \"--tjs-icon-button-diameter\": \"1.em\",\n          position: \"relative\",\n          left: \"10px\",\n          bottom: \"-2px\",\n          color: \"rgba(50, 79, 245, 0.5)\"\n       }\n    };\n\n    $: filterEnabled = $animation.primary.options.enableFilter;\n</script>\n\n<div class=\"aa-options-border\">\n    <TJSSvgFolder {folder} animate={$uiAnimation}>\n        <div slot=\"summary-end\">\n            <TJSIconButton button={optionsInfo} on:click={() => OptionsDialog.show(\"aura\")}/>\n        </div>\n        <table class=\"d\">\n            <tr>\n                <td>\n                    <!--Set Elevation of Animation-->\n                    <Elevation section=\"primary\" />\n                </td>\n                <td>\n                    <!--Set Visibility Binding-->\n                    <div>\n                        <label for=\"Vis {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\") + \" \" + localize(\"autoanimations.menus.visibility\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Vis {animation._data.id}\"\n                            bind:checked={$animation.primary.options.unbindVisibility}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Alpha Binding-->\n                    <div>\n                        <label for=\"Alpha {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.bind\") + \" \" + localize(\"autoanimations.menus.alpha\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Alpha {animation._data.id}\"\n                            bind:checked={$animation.primary.options.unbindAlpha}\n                        />\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Animation Opacity-->\n                    <Opacity section=\"primary\" />\n                </td>\n                <td>\n                    <!--Set Z-Index-->\n                    <NumberInput\n                    label={localize(\"autoanimations.menus.z-index\")}\n                    section={\"primary\"}\n                    field={\"zIndex\"}\n                    step=\"1\"\n                />\n                </td>\n                <td>\n                    <div>\n                        <label for=\"\"><strong>{localize(\"autoanimations.menus.playOn\")}</strong></label>\n                    </div>\n                    <div>\n                        <label for=\"\">{localize(\"autoanimations.menus.source\")}</label>\n                    </div>\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Radius of Animation-->\n                    <NumberInput\n                    label={localize(\"autoanimations.menus.radius\")}\n                    section={\"primary\"}\n                    field={\"size\"}\n                    step=\"0.01\"\n                />\n                </td>\n                <td>\n                    <!--Add Token Width-->\n                    <div>\n                        <label for=\"Width {animation._data.id}\"\n                            >{localize(\"autoanimations.menus.add\")}\n                            {localize(\"autoanimations.menus.token\")}\n                            {localize(\"autoanimations.menus.width\")}\n                        </label>\n                        <input\n                            type=\"checkbox\"\n                            id=\"Width {animation._data.id}\"\n                            bind:checked={$animation.primary.options.addTokenWidth}\n                        />\n                    </div>\n                </td>\n                <td>\n                    <!--Set Fade In time-->\n                    <NumberInput\n                    label={localize(\"autoanimations.menus.fadeIn\")}\n                    section=\"primary\"\n                    field=\"fadeIn\"\n                    step=\"1\"\n                />\n                </td>\n            </tr>\n            <tr>\n                <td>\n                    <!--Set Fade Out time-->\n                    <NumberInput\n                    label={localize(\"autoanimations.menus.fadeOut\")}\n                    section=\"primary\"\n                    field=\"fadeOut\"\n                    step=\"1\"\n                />\n                </td>\n                <td>\n                    <WaitDelay section=\"primary\"/>\n                </td>\n                <td>\n                    <NumberInput\n                    label={localize(\"autoanimations.menus.playbackRate\")}\n                    section=\"primary\"\n                    field=\"playbackRate\"\n                    />\n                </td>\n            </tr>\n        </table>\n    </TJSSvgFolder>\n</div>\n","<script>\nimport VideoSelect from \"../Components/VideoSelect.svelte\";\nimport AuraOptions from \"./options/AuraOptions.svelte\";\nimport SoundSettings from \"../Components/SoundSettings.svelte\";\nimport ExtraSource from \"../Components/ExtraSource.svelte\";\nimport Secondary from \"../Components/Secondary.svelte\";\nimport AuraEffects from \"../../Menus/Components/options/AuraEffects.svelte\";\n//import { getContext }   from \"svelte\";\n\n//export let animation;\n//export let idx = 0;\n//export let category;\n//let { animation , category, idx} = getContext('animation-data');\n\nlet title = game.i18n.localize(\"autoanimations.menus.primary\") + \" \" + game.i18n.localize(\"autoanimations.menus.animation\")\n\n</script>\n\n    <ExtraSource />\n    <div class=\"aa-primary-border\">\n    <VideoSelect section=\"primary\" {title} />\n    <AuraOptions />\n    <AuraEffects />\n    <SoundSettings section=\"primary\"/>\n    </div>\n    <Secondary />\n\n<style lang='scss'>\n\n</style>\n","<script>\n   import { getContext }   from \"svelte\";\n\n   import BuildAEAura      from \"../../../Menus/ActiveEffects/BuildAEAura.svelte\";\n   import BuildAEOnToken   from \"../../../Menus/ActiveEffects/BuildAEOnToken.svelte\";\n   import SectionButtons   from \"../../../Menus/Components/SectionButtons02.svelte\";\n   import Macro            from \"../../../Menus/Components/Macro.svelte\";\n   import SoundOnly        from \"../../../Menus/Components/SoundOnly.svelte\";\n\n   //export let animation;\n   let { animation } = getContext('animation-data');\n\n   let newContentOptions = {\n      ontoken: {\n         component: BuildAEOnToken,\n      },\n      aura: {\n         component: BuildAEAura,\n      },\n   };\n\n   $: menuRoute = newContentOptions[$animation.activeEffectType].component;\n\n   $: isEnabled = $animation.isEnabled;\n   $: isCustomized = $animation.isCustomized;\n\n   $: soundOnly = $animation.soundOnly.sound.enable;\n   $: macroEnabled = $animation.macro.enable;\n\n</script>\n\n   <div class={`animation ${!isEnabled || !isCustomized ? \"aa-disableOpacity\" : \"\"}`}>\n      <div class=\"sectionBorder\">\n         <SectionButtons type=\"item\" />\n         <div hidden={!soundOnly}>\n            <SoundOnly />\n         </div>\n         <div hidden={!macroEnabled}>\n            <Macro />\n        </div>\n        <div hidden={soundOnly}>\n            <div hidden={$animation.macro.enable && $animation.macro.playWhen === \"2\"}>\n               <svelte:component this={menuRoute} />\n            </div>\n         </div>\n      </div>\n   </div>\n\n<style lang=\"scss\">\n   .sectionBorder {\n      background: rgb(186, 186, 186);\n      border: 2px solid rgba(0, 0, 0, 0.75);\n      border-radius: 0.75em;\n      height: fit-content;\n   }\n</style>\n","<script>\n    // based on suggestions from:\n    // Inclusive Components by Heydon Pickering https://inclusive-components.design/toggle-button/\n    // On Designing and Building Toggle Switches by Sara Soueidan https://www.sarasoueidan.com/blog/toggle-switch-design/\n    // and this example by Scott O'hara https://codepen.io/scottohara/pen/zLZwNv\n    import { getContext }   from \"svelte\";\n\n    export let label;\n    let { animation } = getContext('animation-data');\n    export let field;\n\n    const uniqueID = Math.floor(Math.random() * 100);\n\n    function clickThis() {\n        let isChecked = $animation[field];\n        $animation[field] = !isChecked;\n        \n    }\n    \n    $: isChecked = $animation[field];\n    \n    //<label for=\"\">{label}</label>\n\n</script>\n\n<div class=\"aa-SliderBox\" style=\"font-size:16px\">\n    <button\n        role=\"switch\"\n        aria-checked={isChecked}\n        aria-labelledby={`switch-${uniqueID}`}\n        on:click={() => clickThis()}\n        style=\"margin-right: .5em\"\n    />\n    <span id={`switch-${uniqueID}`}>{label}</span>\n</div>\n\n<style>\n    :root {\n        --accent-color: rgba(0, 188, 0, 0.5);\n        --gray: #ccc;\n    }\n\n    /* Slider Design Option */\n\n    .aa-SliderBox {\n        display: flex;\n        align-items: center;\n        font-weight: bold;\n    }\n\n    .aa-SliderBox button {\n        width: 44px;\n        height: 22px;\n        position: relative;\n        margin: 0 0 0 0.5em;\n        background-color: rgba(0, 0, 0, 0.2);\n        transition: background-color .3s;\n        border: none;\n        min-height: unset;\n    }\n\n    .aa-SliderBox button::after {\n        content: \"\";\n        position: absolute;\n        width: 20px;\n        height: 20px;\n        background: rgb(255, 255, 255);\n        top: 1px;\n        right: 23px;\n        transition: transform 0.3s;\n    }\n\n    .aa-SliderBox button[aria-checked=\"true\"] {\n        background-color: var(--accent-color);\n        transition: background-color .3s;\n    }\n\n    .aa-SliderBox button[aria-checked=\"true\"]::after {\n        transform: translateX(22px);\n        transition: transform 0.3s;\n    }\n\n    /* Slider Design Option */\n    .aa-SliderBox button {\n        border-radius: 21px;\n    }\n\n    .aa-SliderBox button::after {\n        border-radius: 100%;\n    }\n    .aa-SliderBox button[aria-checked=\"true\"]::before {\n    font-family: var(--font-awesome);\n    font-size: 16px;\n    content: \"\\f00c\";\n    position:relative;\n    right: 10px;\n    color: white;\n    font-weight: bold;\n  }\n  .aa-SliderBox button[aria-checked=\"false\"]::before {\n    font-family: var(--font-awesome);\n    font-size: 16px;\n    content: \"\\f00d\";\n    position:relative;\n    left: 10px;\n    color: rgba(0, 0, 0, 0.6);\n    font-weight: bold;\n  }\n\n</style>\n","<script>\n    import { getContext }        from \"svelte\";\n\n    import { AAAutorecFunctions } from \"../../../../aa-classes/aaAutorecFunctions.js\";\n    import { localize } from \"#runtime/util/i18n\";\n\n    export let animation;\n    export let item;\n\n    const { application } = getContext(\"#external\");\n\n    const currentLabel = item.name;\n    const menu = animation._data.menu;\n    const currentMenu = game.settings.get(\n        \"autoanimations\",\n        `aaAutorec-${menu}`\n    );\n\n    $: nameToAdd = currentLabel;\n    $: checkAutorec = AAAutorecFunctions.singleMenuStrictSearch(\n        currentMenu,\n        AAAutorecFunctions.rinseName(nameToAdd)\n    );\n\n    function submitNewEntry() {\n        animation.copyToAutorec(nameToAdd)\n        application.close()\n    }\n</script>\n\n<div class=\"aa-CopyToAutorec\">\n    <div style=\"font-size: 1.3em\">\n        <label for=\"\"\n            ><strong>Adding entry to Global Automatic Recognition</strong> <br />\n            <strong>{localize(`autoanimations.animTypes.${menu}`)} Menu</strong>\n        </label>\n    </div>\n    <div style=\"margin-top: 1em\">\n        <label for=\"\"\n            >Input Label for the new {localize(\n                `autoanimations.animTypes.${menu}`\n            )} Section</label\n        >\n    </div>\n    <div>\n        <input\n            type=\"text\"\n            style=\"width: 25em; margin:auto; border-radius: 1em\"\n            bind:value={nameToAdd}\n        />\n    </div>\n\n    {#if checkAutorec}\n        <div style=\"height: 2em; font-weight: bold; font-size: 1em; color: red\">\n            <label for=\"\" style=\"margin-top:1em\">\n                {nameToAdd} already exists in the Global {localize(\n                    `autoanimations.animTypes.${menu}`\n                )} Menu!!\n            </label>\n        </div>\n    {:else}\n    <div style=\"height: 2em;\">\n    </div>\n{/if}\n\n    <button\n        class={`aa-copySubmitButton ${checkAutorec ? \"aa-disableOpacity\" : \"\"}`}\n        on:click={() => submitNewEntry(nameToAdd)}\n    >Submit</button>\n</div>\n\n<style lang=\"scss\">\n    .aa-CopyToAutorec {\n        text-align:center;\n    }\n    .aa-copySubmitButton {\n        margin-top: 1em;\n        width: 15em;\n        border-radius: 1em;\n        border: 1px solid rgba(0, 0, 0, 0.4);\n        background-color: rgba(0, 0, 0, 0.2);\n    }\n</style>\n","import { TJSDialog } from \"#runtime/svelte/application\";\nimport CopyToAutorec from \"./CopyToAutorec.svelte\";\n\nexport default class ItemToAutorec extends TJSDialog {\n   constructor(data) {\n      super({\n         title: \"Item to Autorec\",\n         resizable: true,\n         modal: false,\n         draggable: true,\n         content: {\n            class: CopyToAutorec,\n            props: {\n               ...data,\n            },\n         },\n      });\n   }\n\n   static get defaultOptions() {\n      return foundry.utils.mergeObject(super.defaultOptions, {\n         width: \"auto\",\n         height: \"auto\",\n         closeOnSubmit: true,\n         id: `AA-Copy-Item-To-Global`,\n         themeName: 'light'\n      });\n   }\n}\n","import { TJSDialog } from \"#runtime/svelte/application\";\n\nimport ItemToAutorec from \"./itemToAutorec.js\";\n\nimport { AAAutorecFunctions } from \"../../../../aa-classes/aaAutorecFunctions.js\";\n\nimport { custom_notify } from \"../../../../constants/constants.js\";\n\n/**\n * Creates the items for the overflow menu.\n *\n * @param {AnimationStore} animation - Associated animation store.\n *\n * @param {CategoryStore} category - Associated category store.\n *\n * @returns {object[]} Overflow menu items.\n */\nexport function copyToFrom(animation, item, autorecSettings, isAE) {\n   //let menu = game.i18n.localize(`autoanimations.animTypes.${isInAutorec.menu}`)\n   let contents = [];\n\n   let copyFrom = {\n      label: \"Copy From Autorec\",\n      icon: \"far fa-clone\",\n      onPress: async () => {\n         if (!animation._data.isEnabled) {\n            return;\n         }\n\n         let name = item.name ?? item.label;\n\n         const isInAutorec = isAE\n            ? AAAutorecFunctions.singleMenuSearch(\n                 AAAutorecFunctions.sortAndFilterMenus(autorecSettings),\n                 AAAutorecFunctions.rinseName(name),\n                   name\n              )\n            : AAAutorecFunctions.allMenuSearch(\n                 AAAutorecFunctions.sortAndFilterMenus(autorecSettings),\n                 AAAutorecFunctions.rinseName(name),\n                     name\n              );\n         if (!isInAutorec) {\n            custom_notify(\"There is no matching Global entry to copy from\");\n            return;\n         }\n         let menu = game.i18n.localize(`autoanimations.animTypes.${isInAutorec.menu}`);\n         const label = isInAutorec.label;\n\n         const result = await TJSDialog.confirm({\n            title: \"Copy Item From Global Menu\",\n            content: `Are you sure you want copy <strong>${label}</strong> from the <strong>Global ${menu} Menu?</strong>`,\n            draggable: false,\n            modal: false,\n         }, { themeName: 'light' });\n\n         if (result) {\n            animation.copyFromAutorec(isInAutorec);\n         }\n      },\n   };\n\n   let copyTo = {\n      label: \"Copy To Autorec\", // TODO: localize,\n      icon: \"far fa-clone\",\n\n      onPress: async () => {\n         if (!animation._data.isEnabled) {\n            return;\n         }\n         if (!game.user.isGM) {\n            console.error(\n               \"Automated Animations | NON-GM users cannot copy items to the Global Automatic Recognition Menu\"\n            );\n            return;\n         }\n         if (!animation._data.isEnabled || !animation._data.isCustomized) {\n            ui.notifications.info(\n               \"Automated Animations | There is no data present on this item to copy to the Global Automatic Recognition Menu\"\n            );\n            return;\n         }\n         //const label = animation.label !== \"\" ? `'${animation._data.label}'` : \"'No Item Name'\";\n\n         new ItemToAutorec({ animation, item }).render(true);\n      },\n   };\n\n   if (game.user.isGM) {\n      contents.push(copyFrom);\n      contents.push(copyTo);\n   } else {\n      contents.push(copyFrom);\n   }\n\n   return contents;\n}\n","<script>\n    // import { localize } from \"#runtime/util/i18n\";\n\n    export let isEnabled;\n    export let isCustomized;\n    export let isInAutorec;\n\n    let autorecLabel = isInAutorec\n        ? game.i18n.localize(`autoanimations.animTypes.${isInAutorec.menu}`)\n        : \"\";\n</script>\n\n<div class=\"aa-Info\">\n    {#if isEnabled && !isCustomized && isInAutorec}\n        <ul>\n            <li>\n                <strong>Item Animation is enabled but not customized</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>Global Automatic Recogntion is matched</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>Menu: {autorecLabel} - Label: {isInAutorec.label}</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n    {:else if isEnabled && !isCustomized && !isInAutorec}\n        <ul>\n            <li>\n                <strong>Item Animation is enabled but not customized</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>No Global Automatic Recognition is matched</strong>  <i class=\"fas fa-xmark aa-red\"></i>\n            </li>\n        </ul>\n    {:else if isEnabled && isCustomized}\n        <ul>\n            <li>\n                <strong>Item Animation is enabled but not configured!!</strong>  <i class=\"fas fa-xmark aa-red\"></i>\n            </li>\n        </ul>\n        {#if isInAutorec}\n        <ul>\n            <li>\n                <strong>Global Automatic Recognition will be used</strong>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>Global Automatic Recogntion is matched</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>Menu: {autorecLabel} - Label: {isInAutorec.label}</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        {:else}\n        <ul>\n            <li>\n                <strong>No Global Automatic Recognition is matched</strong>  <i class=\"fas fa-xmark aa-red\"></i>\n            </li>\n        </ul>\n        {/if}\n    {:else}\n        <ul>\n            <li>\n                <strong>Animations are disabled for this item</strong>  <i class=\"fas fa-xmark aa-red\"></i>\n            </li>\n        </ul>\n\n    {/if}\n</div>\n\n<style lang=\"scss\">\n    .aa-Info {\n        font-size: 16px;\n    }\n</style>\n","<script>\n  import { getContext } from \"svelte\";\n  import { setContext } from \"svelte\";\n\n  import { localize }   from \"#runtime/util/i18n\";\n\n  import { ripple }     from \"#standard/action/animate/composable\";\n\n  import { TJSToggleIconButton } from \"#standard/component/button\";\n  import { TJSMenu } from \"#standard/component/menu\";\n\n  //import CategoryControl      from \"./CategoryControl.svelte\";\n\n  import CategoryList from \"./CategoryList.svelte\";\n  import Slider from \"../../../Menus/Components/options/inputComponents/Slider.svelte\";\n\n  import { AAAutorecFunctions } from \"../../../../aa-classes/aaAutorecFunctions\";\n  import { copyToFrom } from \"../../../Menus/Components/copyitem/copyToFrom\";\n\n  import NoneChosen from \"./menus/NoneChosen.svelte\";\n  import { aefx } from \"../../../_AutorecMenu/store/default-data/newSection/aefx.js\"\n\n  async function switchVideo() {\n    let newMenu = $animation.activeEffectType;\n    if (!newMenu) { return; }\n\n    let newData = aefx($animation, newMenu);\n    switch (newMenu) {\n      case \"ontoken\":\n        $animation.macro = newData.macro;\n        $animation.primary = newData.primary;\n        $animation.secondary = newData.secondary;\n        $animation.soundOnly = newData.soundOnly;\n        $animation.source = newData.source;\n        break;\n      default:\n        $animation.macro = newData.macro;\n        $animation.primary = newData.primary;\n        $animation.secondary = newData.secondary;\n        $animation.soundOnly = newData.soundOnly;\n        $animation.source = newData.source;\n        break;\n    }\n  }\n\n  /**\n   * @ItemStore\n   */\n  export let animation;\n  setContext('animation-data', {animation, category: animation, idx: 0})\n\n  export let item;\n\n  const { application } = getContext(\"#external\");\n\n  let aefxMenu = game.settings.get(\"autoanimations\", \"aaAutorec-aefx\");\n\n  // Applies flags on Item Update wihtout Closing APP\n  async function applyFlags() {\n    await item.update({ 'flags.-=autoanimations': null })\n    await item.update({ \"flags.autoanimations\": $animation });\n  }\n\n  // Applies flags on Item Update and Closes the APP\n  async function closeApp() {\n    await item.update({ 'flags.-=autoanimations': null })\n    await item.update({ \"flags.autoanimations\": $animation });\n    application.close();\n  }\n\n  //let itemName = item.label;\n  //Check the Autorec Menu for a matching Section\n  $: isInAutorec = AAAutorecFunctions.singleMenuSearch(aefxMenu, AAAutorecFunctions.rinseName($animation.label), $animation.label);\n\n  let menu = isInAutorec\n    ? game.i18n.localize(`autoanimations.animTypes.${isInAutorec.menu}`)\n    : \"\";\n\n  let newLabel = isInAutorec\n    ? `Menu: ${menu} - Label: ${isInAutorec.label}`\n    : `No Autorec match found`;\n\n  $: disabledLabel = $animation.isEnabled\n    ? game.i18n.localize(\"autoanimations.menus.animation\") +\n      \" \" +\n      game.i18n.localize(\"autoanimations.menus.enabled\")\n    : game.i18n.localize(\"autoanimations.menus.animation\") +\n      \" \" +\n      game.i18n.localize(\"autoanimations.menus.disabled\");\n\n  $: isEnabled = $animation.isEnabled;\n  $: isCustomized = $animation.isCustomized;\n  $: menuType = $animation.activeEffectType;\n\n  const buttonOverflow = {\n    icon: \"fas fa-ellipsis-v\",\n    efx: ripple(),\n    title: \"Copy To/From\",\n    styles: { \"margin-left\": \"0.5em\" },\n    clickPropagate: false, // Necessary to capture click for Firefox.\n  };\n\n  const objectAefxMenu = aefxMenu.reduce((obj, item) => {\n    obj[item.activeEffectType] ??= [];\n    obj[item.activeEffectType].push(item);\n    return obj;\n  }, {});\n\n  const subMenu = {\n    items: copyToFrom(animation, item, objectAefxMenu, true),\n  };\n\n</script>\n\n<header class=\"animation\">\n  <ul>\n    <div style=\"grid-row: 1/2; grid-column: 1/2\">\n      <Slider label={disabledLabel} field=\"isEnabled\" />\n    </div>\n    <div\n      style=\"grid-row: 2/3; grid-column: 1/2\"\n      class={!isEnabled ? \"aa-disableOpacity\" : \"\"}\n    >\n      <Slider\n        label={localize(\"autoanimations.menus.customize\") + \" \" + \"Item\"}\n        field=\"isCustomized\"\n      />\n    </div>\n    <div\n      style=\"grid-row: 1 / 2; grid-column: 2/3;\"\n      class=\"autorecLabel {isInAutorec ? 'aa-bgGreen' : 'aa-bgRed'} {!isEnabled\n        ? 'aa-disableOpacity'\n        : ''}\"\n    >\n      {#if isInAutorec}\n        <label for=\"\" style=\"font-size: 15px; font-weight:bold\">\n          {localize('autoanimations.menus.globalFound')} <br />\n        </label>\n      {:else}\n        <label for=\"\" style=\"font-size: 15px; font-weight:bold\">\n          {localize('autoanimations.menus.globalNotFound')}\n        </label>\n      {/if}\n    </div>\n    <div\n      style=\"grid-row: 1/2; grid-column: 3/4\"\n      class={!isEnabled ? \"aa-disableOpacity\" : \"\"}\n    >\n      <TJSToggleIconButton button={buttonOverflow} slot=\"summary-end\">\n        <TJSMenu menu={subMenu} />\n      </TJSToggleIconButton>\n    </div>\n    <div\n      style=\"grid-row: 2/3; grid-column: 2/4; padding-bottom: 10px;margin-left: 1.5em\"\n      class={!isEnabled || !isCustomized ? \"aa-disableOpacity\" : \"\"}\n    >\n      <label for=\"\" style=\"font-weight:bold;\"\n        >{localize(\"autoanimations.menus.animation\")}\n        {localize(\"autoanimations.menus.type\")}</label\n      >\n      <select bind:value={$animation.activeEffectType} on:change={async () => await switchVideo()}>\n        <option value=\"ontoken\"\n          >{localize(\"autoanimations.animTypes.ontoken\")}</option\n        >\n        <option value=\"aura\">{localize(\"autoanimations.animTypes.aura\")}</option\n        >\n      </select>\n    </div>\n  </ul>\n</header>\n\n<main>\n  {#if !menuType || !isEnabled || !isCustomized}\n    <div class=\"sectionBorder\">\n      <svelte:component this={NoneChosen} {isEnabled} {isCustomized} {isInAutorec} />\n    </div>\n  {:else}\n    <CategoryList/>\n  {/if}\n</main>\n\n<footer>\n  <ul>\n    <button\n      style=\"background-color: rgba(0, 0, 0, 0.2)\"\n      on:click|preventDefault={() => applyFlags()}>Submit</button\n    >\n    <button on:click|preventDefault={() => closeApp()}>Submit and Close</button>\n  </ul>\n</footer>\n\n<style lang=\"scss\">\n  header {\n    flex: none;\n    padding: 0em 0.5em 0em 0.5em;\n\n    background: rgb(204, 204, 204);\n    border-bottom: 1px solid rgb(100, 100, 100);\n\n    height: fit-content;\n    width: 100%;\n    //button {\n    //border-radius: 1em;\n    //background: rgba(0, 0, 0, 0.15);\n    //border: 1px solid rgba(73, 73, 73, 0.5);\n    //}\n    .autorecLabel {\n      border: 1px solid rgba(73, 73, 73, 0.5);\n      border-radius: 1em;\n      //height: 3em;\n      //margin-right: 0.2em;\n      //margin-left: 0.2em;\n      font-size: 0.95em;\n      text-align: center;\n    }\n    //@at-rootbutton:disabled {\n    //opacity: 0.4;\n    //}\n    ul {\n      display: grid;\n      grid-template-columns: 40% 50% 10%;\n      grid-auto-rows: 30px;\n      //grid-gap: 1%;\n      margin-bottom: 5px;\n      align-items: center;\n      align-items: center;\n\n      //flex-wrap: nowrap;\n      //justify-content: center;\n      //align-items: center;\n      //height: 100%;\n\n      list-style-type: none;\n      padding: 0;\n      margin: 0;\n    }\n  }\n  footer {\n    position: absolute;\n    bottom: 0;\n    flex: none;\n    padding: 0.5em 0.5em;\n\n    background: rgb(160, 159, 159);\n    border-top: 1px solid rgb(100, 100, 100);\n\n    height: fit-content;\n    width: 100%;\n\n    font-size: 1em;\n    font-weight: bold;\n    ul {\n      display: flex;\n      flex-wrap: nowrap;\n      justify-content: center;\n      align-items: center;\n      height: 100%;\n\n      padding: 0;\n      margin: 0;\n    }\n    button {\n      border-radius: 1em;\n      background: rgba(0, 0, 0, 0.35);\n      border: 1px solid rgba(73, 73, 73, 0.5);\n    }\n  }\n  main {\n    position: relative;\n    overflow-y: auto;\n    padding: 0 3%;\n    padding-bottom: 68px;\n    scrollbar-width: thin; // For Firefox\n  }\n  .sectionBorder {\n    background: rgb(186, 186, 186);\n    border: 2px solid rgba(0, 0, 0, 0.75);\n    border-radius: 0.75em;\n    height: fit-content;\n  }\n</style>\n","import { DynArrayReducer } from '@typhonjs-fvtt/runtime/svelte/store/reducer';\nimport { isMinimalWritableStore, subscribeIgnoreFirst } from '@typhonjs-fvtt/runtime/svelte/store/util';\nimport { Hashing, Timing } from '@typhonjs-fvtt/runtime/util';\nimport { isObject, hasGetter, klona } from '@typhonjs-fvtt/runtime/util/object';\n\n/**\n * Provides a base implementation for store entries in {@link ArrayObjectStore}.\n *\n * In particular providing the required getting / accessor for the 'id' property.\n */\nclass ObjectEntryStore {\n    /**\n     */\n    #data;\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     * Invoked by ArrayObjectStore to provide custom duplication. Override this static method in your entry store.\n     *\n     * @param data - A copy of local data w/ new ID already set.\n     *\n     * @param arrayStore - The source ArrayObjectStore instance.\n     */\n    static duplicate(data, arrayStore) { } // eslint-disable-line no-unused-vars\n    /**\n     * @param data -\n     */\n    constructor(data) {\n        if (!isObject(data)) {\n            throw new TypeError(`'data' is not an object.`);\n        }\n        this.#data = data;\n        // If `id` is missing then add it.\n        if (typeof this.#data.id !== 'string') {\n            this.#data.id = Hashing.uuidv4();\n        }\n        if (!Hashing.isUuidv4(this.#data.id)) {\n            throw new Error(`'data.id' (${this.#data.id}) is not a valid UUIDv4 string.`);\n        }\n    }\n    /**\n     * @returns The object data tracked by this store.\n     */\n    get _data() { return this.#data; }\n    /**\n     * @returns The ID attribute in object data tracked by this store.\n     */\n    get id() { return this.#data.id; }\n    /**\n     * @returns A JSON data object for the backing data. The default implementation directly returns the backing private\n     *          data object. You may override this method to clone the data via {@link ObjectEntryStore._data}.\n     */\n    toJSON() {\n        return this.#data;\n    }\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        this.#subscribers.push(handler); // add handler to the array of subscribers\n        handler(this.#data); // call handler with current value\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index >= 0) {\n                this.#subscribers.splice(index, 1);\n            }\n        };\n    }\n    /**\n     * Update subscribers of this store. Useful for child implementations.\n     */\n    _updateSubscribers() {\n        for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n            this.#subscribers[cntr](this.#data);\n        }\n    }\n}\n\n/**\n * @typeParam S - Store type.\n */\nclass ArrayObjectStore {\n    /**\n     */\n    #data = [];\n    /**\n     */\n    #dataMap = new Map();\n    /**\n     */\n    #dataReducer;\n    /**\n     */\n    #manualUpdate;\n    /**\n     */\n    #StoreClass;\n    /**\n     * Stores the subscribers.\n     */\n    #subscribers = [];\n    /**\n     */\n    #updateSubscribersBound;\n    /**\n     * @returns The default object entry store constructor that can facilitate the creation of the required\n     *          {@link ArrayObjectStore.Options.Config.StoreClass} and generic `T` type parameter.\n     */\n    static get EntryStore() { return ObjectEntryStore; }\n    /**\n     * @param options - ArrayObjectStore options.\n     */\n    constructor({ StoreClass, childDebounce = 250, dataReducer = false, manualUpdate = false }) {\n        if (!Number.isInteger(childDebounce) || childDebounce < 0 || childDebounce > 1000) {\n            throw new TypeError(`'childDebounce' must be an integer between and including 0 - 1000.`);\n        }\n        if (typeof manualUpdate !== 'boolean') {\n            throw new TypeError(`'manualUpdate' is not a boolean.`);\n        }\n        if (!isMinimalWritableStore(StoreClass.prototype)) {\n            throw new TypeError(`'StoreClass' is not a minimal writable store constructor.`);\n        }\n        if (!hasGetter(StoreClass.prototype, 'id')) {\n            throw new TypeError(`'StoreClass' does not have a getter accessor for 'id' property.`);\n        }\n        this.#manualUpdate = manualUpdate;\n        this.#StoreClass = StoreClass;\n        if (dataReducer) {\n            this.#dataReducer = new DynArrayReducer({ data: this.#data });\n        }\n        // Prepare a debounced callback that is used for all child store entry subscriptions.\n        this.#updateSubscribersBound = childDebounce === 0 ? this.updateSubscribers.bind(this) :\n            Timing.debounce((update) => this.updateSubscribers(update), childDebounce);\n    }\n    /**\n     * Provide an iterator for public access to entry stores.\n     *\n     * @returns iterator\n     */\n    *[Symbol.iterator]() {\n        if (this.#data.length === 0) {\n            return;\n        }\n        for (const entryStore of this.#data) {\n            yield entryStore;\n        }\n    }\n    /**\n     * @returns The internal data array tracked allowing child classes direct access.\n     */\n    get _data() { return this.#data; }\n    /**\n     * @returns The data reducer.\n     */\n    get dataReducer() {\n        if (!this.#dataReducer) {\n            throw new Error(`'dataReducer' is not initialized; did you forget to specify 'dataReducer' as true in constructor options?`);\n        }\n        return this.#dataReducer;\n    }\n    /**\n     * @returns The length of all data.\n     */\n    get length() { return this.#data.length; }\n    /**\n     * Removes all child store entries.\n     */\n    clearEntries() {\n        for (const storeEntryData of this.#dataMap.values()) {\n            storeEntryData.unsubscribe();\n        }\n        this.#dataMap.clear();\n        this.#data.length = 0;\n        this.updateSubscribers();\n    }\n    /**\n     * Creates a new store from given data.\n     *\n     * @param entryData - Entry data.\n     *\n     * @returns The store\n     */\n    createEntry(entryData) {\n        if (!isObject(entryData)) {\n            throw new TypeError(`'entryData' is not an object.`);\n        }\n        if (typeof entryData.id !== 'string') {\n            entryData.id = Hashing.uuidv4();\n        }\n        if (this.#data.findIndex((entry) => entry.id === entryData.id) >= 0) {\n            throw new Error(`'entryData.id' (${entryData.id}) already in this ArrayObjectStore instance.`);\n        }\n        // The required `id` is added to `entryData` if not defined.\n        const store = this.#createStore(entryData);\n        this.updateSubscribers();\n        return store;\n    }\n    /**\n     * Add a new store entry from the given data.\n     *\n     * @param entryData - Entry data.\n     *\n     * @returns New store entry instance.\n     */\n    #createStore(entryData) {\n        const store = new this.#StoreClass(entryData, this);\n        if (!Hashing.isUuidv4(store.id)) {\n            throw new Error(`'store.id' (${store.id}) is not a UUIDv4 compliant string.`);\n        }\n        const unsubscribe = subscribeIgnoreFirst(store, this.#updateSubscribersBound);\n        this.#data.push(store);\n        this.#dataMap.set(store.id, { store, unsubscribe });\n        return store;\n    }\n    /**\n     * Deletes a given entry store by ID from this world setting array store instance.\n     *\n     * @param id - ID of entry to delete.\n     *\n     * @returns Delete operation successful.\n     */\n    deleteEntry(id) {\n        const result = this.#deleteStore(id);\n        if (result) {\n            this.updateSubscribers();\n        }\n        return result;\n    }\n    #deleteStore(id) {\n        if (typeof id !== 'string') {\n            throw new TypeError(`'id' is not a string.`);\n        }\n        const storeEntryData = this.#dataMap.get(id);\n        if (storeEntryData) {\n            storeEntryData.unsubscribe();\n            this.#dataMap.delete(id);\n            const index = this.#data.findIndex((entry) => entry.id === id);\n            if (index >= 0) {\n                this.#data.splice(index, 1);\n            }\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Duplicates an entry store by the given ID.\n     *\n     * @param {string}   id - UUIDv4 string.\n     *\n     * @returns {*} Instance of StoreClass.\n     */\n    duplicateEntry(id) {\n        if (typeof id !== 'string') {\n            throw new TypeError(`'id' is not a string.`);\n        }\n        const storeEntryData = this.#dataMap.get(id);\n        if (storeEntryData) {\n            const data = klona(storeEntryData.store.toJSON());\n            data.id = Hashing.uuidv4();\n            // Allow StoreClass to statically perform any specialized duplication.\n            this.#StoreClass?.duplicate?.(data, this);\n            return this.createEntry(data);\n        }\n        return void 0;\n    }\n    /**\n     * Find an entry in the backing child store array.\n     *\n     * @param predicate - A predicate function.\n     *\n     * @returns Found entry in array or undefined.\n     */\n    findEntry(predicate) {\n        return this.#data.find(predicate);\n    }\n    /**\n     * Finds an entry store instance by 'id' / UUIDv4.\n     *\n     * @param id - A UUIDv4 string.\n     *\n     * @returns Entry store instance.\n     */\n    getEntry(id) {\n        const storeEntryData = this.#dataMap.get(id);\n        return storeEntryData ? storeEntryData.store : void 0;\n    }\n    /**\n     * Sets the children store data by 'id', adds new entry store instances, or removes entries that are no longer in the\n     * update list.\n     *\n     * @param updateList -\n     */\n    set(updateList) {\n        if (!Array.isArray(updateList)) {\n            console.warn(`ArrayObjectStore.set warning: aborting set operation as 'updateList' is not an array.`);\n            return;\n        }\n        // Create a set of all current entry IDs.\n        const removeIDSet = new Set(this.#dataMap.keys());\n        let rebuildIndex = false;\n        for (let updateIndex = 0; updateIndex < updateList.length; updateIndex++) {\n            const updateData = updateList[updateIndex];\n            const id = updateData.id;\n            if (typeof id !== 'string') {\n                throw new Error(`'updateData.id' is not a string.`);\n            }\n            const localIndex = this.#data.findIndex((entry) => entry.id === id);\n            if (localIndex >= 0) {\n                const localEntry = this.#data[localIndex];\n                // Update the entry data.\n                localEntry.set(updateData);\n                // Must move to correct position\n                if (localIndex !== updateIndex) {\n                    // Remove from current location.\n                    this.#data.splice(localIndex, 1);\n                    if (updateIndex < this.#data.length) {\n                        // Insert at new location.\n                        this.#data.splice(updateIndex, 0, localEntry);\n                    }\n                    else {\n                        // Local data length is less than update data index; rebuild index.\n                        rebuildIndex = true;\n                    }\n                }\n                // Delete from removeIDSet as entry is still in local data.\n                removeIDSet.delete(id);\n            }\n            else {\n                this.#createStore(updateData);\n            }\n        }\n        if (rebuildIndex) {\n            // Must invoke unsubscribe for all child stores.\n            for (const storeEntryData of this.#dataMap.values()) {\n                storeEntryData.unsubscribe();\n            }\n            this.#data.length = 0;\n            this.#dataMap.clear();\n            for (const updateData of updateList) {\n                this.#createStore(updateData);\n            }\n        }\n        else {\n            // Remove entries that are no longer in data.\n            for (const id of removeIDSet) {\n                this.#deleteStore(id);\n            }\n        }\n        this.updateSubscribers();\n    }\n    toJSON() {\n        return this.#data;\n    }\n    // -------------------------------------------------------------------------------------------------------------------\n    /**\n     * @param handler - Callback function that is invoked on update / changes.\n     *\n     * @returns Unsubscribe function.\n     */\n    subscribe(handler) {\n        this.#subscribers.push(handler); // add handler to the array of subscribers\n        handler(this.#data); // call handler with current value\n        // Return unsubscribe function.\n        return () => {\n            const index = this.#subscribers.findIndex((sub) => sub === handler);\n            if (index >= 0) {\n                this.#subscribers.splice(index, 1);\n            }\n        };\n    }\n    /**\n     * Updates subscribers.\n     *\n     * @param [update] -\n     */\n    updateSubscribers(update = void 0) {\n        const updateGate = typeof update === 'boolean' ? update : !this.#manualUpdate;\n        if (updateGate) {\n            for (let cntr = 0; cntr < this.#subscribers.length; cntr++) {\n                this.#subscribers[cntr](this.#data);\n            }\n        }\n        // This will update the filtered data and `dataReducer` store and forces an update to subscribers.\n        if (this.#dataReducer) {\n            this.#dataReducer.index.update(true);\n        }\n    }\n}\n\n/**\n * @typeParam S - Store type.\n */\nclass CrudArrayObjectStore extends ArrayObjectStore {\n    /**\n     */\n    #crudDispatch;\n    /**\n     */\n    #extraData;\n    /**\n     * @param options - CrudArrayObjectStore options.\n     */\n    constructor({ crudDispatch, extraData, ...rest }) {\n        // 'manualUpdate' is set to true if 'crudUpdate' is defined, but can be overridden by `...rest`.\n        super({\n            manualUpdate: typeof crudDispatch === 'function',\n            ...rest,\n        });\n        if (crudDispatch !== void 0 && typeof crudDispatch !== 'function') {\n            throw new TypeError(`'crudDispatch' is not a function.`);\n        }\n        if (extraData !== void 0 && !isObject(extraData)) {\n            throw new TypeError(`'extraData' is not an object.`);\n        }\n        this.#crudDispatch = crudDispatch;\n        this.#extraData = extraData ?? {};\n    }\n    /**\n     * Removes all child store entries.\n     */\n    clearEntries() {\n        super.clearEntries();\n        if (this.#crudDispatch) {\n            this.#crudDispatch({ action: 'clear', ...this.#extraData });\n        }\n    }\n    /**\n     * Creates a new store from given data.\n     *\n     * @param entryData -\n     *\n     * @returns Associated store with entry data.\n     */\n    createEntry(entryData) {\n        const store = super.createEntry(entryData);\n        if (store && this.#crudDispatch) {\n            this.#crudDispatch({\n                action: 'create',\n                ...this.#extraData,\n                id: store.id,\n                data: store.toJSON()\n            });\n        }\n        return store;\n    }\n    /**\n     * Deletes a given entry store by ID from this world setting array store instance.\n     *\n     * @param id - ID of entry to delete.\n     *\n     * @returns Delete operation successful.\n     */\n    deleteEntry(id) {\n        const result = super.deleteEntry(id);\n        if (result && this.#crudDispatch) {\n            this.#crudDispatch({ action: 'delete', ...this.#extraData, id });\n        }\n        return result;\n    }\n    /**\n     * Updates subscribers, but provides special handling when a `crudDispatch` function is attached. When `update` is\n     * an object with a valid UUIDv4 string as the id property the `crudDispatch` function is invoked along with the\n     * data payload.\n     *\n     * @param [update] - A boolean indicating that subscribers should be notified otherwise\n     */\n    updateSubscribers(update = void 0) {\n        if (this.#crudDispatch && isObject(update) && Hashing.isUuidv4(update.id)) {\n            const result = this.#crudDispatch({\n                action: 'update',\n                ...this.#extraData,\n                id: update.id,\n                data: update // TODO: Consider using klona to clone data.\n            });\n            // If the crudDispatch function returns a boolean then invoke 'ArrayObjectStore.updateSubscribers' with it.\n            super.updateSubscribers(typeof result === 'boolean' ? result : update);\n        }\n        else {\n            super.updateSubscribers(update);\n        }\n    }\n}\n\nexport { ArrayObjectStore, CrudArrayObjectStore, ObjectEntryStore };\n//# sourceMappingURL=index.js.map\n","import { writable }           from \"svelte/store\";\n\nimport { Hashing }            from \"#runtime/util\";\nimport { isObject }           from '#runtime/util/object';\n\nimport { ObjectEntryStore }   from \"#runtime/svelte/store/reducer/array-object\";\n\nimport { FVTTFilePickerControl } from \"#standard/application/control/filepicker\";\n\nimport { custom_warning }     from \"../../../constants/constants.js\";\n\nimport VideoPreview           from \"../../Menus/Components/videoPreview/videoPreview.js\";\n\n// import { CategoryStore } from \"../category/CategoryStore.js\";\n// import { aaSessionStorage } from \"#sessionStorage\";\n// import { constants } from \"#constants\";\n\nimport {\n   newTypeMenu,\n   newNameMenu,\n   newVariantMenu,\n   newColorMenu,\n   aaReturnWeapons\n} from \"../../../database/jb2a-menu-options.js\";\n\n\nexport class AnimationStore extends ObjectEntryStore {\n   /** @type {AnimationPropertyStores} */\n   #stores;\n\n\n   /**\n    * @param {object}   data -\n    */\n   constructor(data = {}) {\n      super(data);\n\n      this.#stores = {\n         videoIDX: writable(void 0),\n      };\n   }\n\n   /**\n    * @returns {AnimationPropertyStores}\n    */\n   get stores() { return this.#stores; }\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /**\n    * @param {object}   data -\n    */\n   set() {\n      this._updateSubscribers();\n   }\n\n   async selectCustom(section, section02 = \"video\") {\n      const current = this._data[section][section02].customPath;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"imagevideo\",\n         current\n      });\n\n      if (path) {\n         this._data[section][section02].customPath = path;\n         this._updateSubscribers();\n      }\n   }\n\n   loadPreviews() {\n      VideoPreview.show();\n   }\n\n   getMenuDB(section, idx, isOnToken) {\n      let menuDB = isOnToken ? \"static\" : this._data.menu === \"ontoken\" || this._data.menu === \"aura\" ? \"static\" : this._data.menu;\n      menuDB = section === 'secondary' ? \"static\" : menuDB;\n      return menuDB\n   }\n\n   menuTypeList(menuDB = \"static\") {\n      return newTypeMenu[menuDB] || [];\n   }\n   animationList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n\n      return newNameMenu[menuDB][menuType] || [];\n   }\n   variantList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n\n      return newVariantMenu[menuDB][menuType]?.[animation] || [];\n   }\n   colorList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n      let variant = this._data[section][section02].variant;\n\n      return newColorMenu[menuDB][menuType]?.[animation]?.[variant] || [];\n   }\n\n   async databaseToClipboard(section, idx, section02, dbSection) {\n      const dbPath = await this.getDBPath(section, idx, section02, dbSection);\n      const app = new CopyClipBoard({\n         target: document.getElementById(\"clipboard\"),\n         props: { dbPath },\n      });\n      app.$destroy();\n   };\n\n   async getDBPath(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n      let variant = this._data[section][section02].variant;\n      let color = this._data[section][section02].color;\n      return color === \"random\"\n         ? `autoanimations.${menuDB}.${menuType}.${animation}.${variant}`\n         : `autoanimations.${menuDB}.${menuType}.${animation}.${variant}.${color}`\n\n   }\n   menuTypeChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      this._data[section][section02].animation = newNameMenu[menuDB][menuType][0][0];\n\n      let animation = this._data[section][section02].animation;\n      this._data[section][section02].variant = newVariantMenu[menuDB][menuType][animation][0][0];\n\n      let variant = this._data[section][section02].variant;\n      this._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0]\n   }\n\n   animationChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n      this._data[section][section02].variant = newVariantMenu[menuDB][menuType][animation][0][0];\n\n      let variant = this._data[section][section02].variant;\n      this._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0];\n   }\n\n   variantChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n      let variant = this._data[section][section02].variant;\n      this._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0];\n   }\n\n   get typeMenu() { return newTypeMenu }\n   get animationMenu() { return newNameMenu }\n   get variantMenu() { return newVariantMenu }\n   get colorMenu() { return newColorMenu }\n   get returnWeapons() { return aaReturnWeapons }\n\n   async openMacro(data) {\n      if (!data) {\n         ui.notifications.info(`Automated Animations: Cannot locate Macro ${data}`);\n         return;\n      }\n      // Credit to Wasp, Zhell, Gazkhan and MrVauxs for the code in this section\n      if (data.startsWith(\"Compendium\")) {\n         let packArray = data.split(\".\");\n         let pack = game.packs.get(`${packArray[1]}.${packArray[2]}`);\n         if (!pack) {\n            ui.notifications.info(\n               `Autoanimations | Compendium ${packArray[1]}.${packArray[2]} was not found`\n            );\n            return;\n         }\n         let macroFilter = pack.index.filter((m) => m.name === packArray[3]);\n         if (!macroFilter.length) {\n            ui.notifications.info(\n               `Autoanimations | A macro named ${packArray[3]} was not found in Compendium ${packArray[1]}.${packArray[2]}`\n            );\n            return;\n         }\n         let macroDocument = await pack.getDocument(macroFilter[0]._id);\n         macroDocument.sheet.render(true);\n      } else {\n         if (!data) {\n            return;\n         }\n         let getTest = game.macros.getName(data);\n         if (!getTest) {\n            ui.notifications.info(\n               `Autoanimations | Could not find the macro named ${data}`\n            );\n            return;\n         }\n         game.macros.getName(data).sheet.render(true);\n      }\n   }\n\n   playSound(data) {\n      const currentSection = data || {};\n      const file = currentSection?.file;\n      const volume = currentSection?.volume ?? .75;\n      const startTime = currentSection?.startTime ?? 0;\n      new Sequence()\n         .sound()\n         .file(file)\n         .volume(volume)\n         .startTime(startTime)\n         .play();\n   }\n\n   async selectCustom(section, section02 = \"video\", idx) {\n      const current = this._data[section][section02].customPath;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"imagevideo\",\n         current\n      });\n\n      if (path) {\n         this._data[section][section02].customPath = path;\n         this._updateSubscribers();\n      }\n   }\n\n   async selectSound(section, idx) {\n      const current = this._data[section].sound.file;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"audio\",\n         current\n      });\n\n      if (path) {\n         this._data[section].sound.file = path;\n         this._updateSubscribers();\n      }\n   }\n\n   async selectSoundNested(section, section02, idx) {\n      const current = this._data[section][section02].sound.file;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"audio\",\n         current\n      });\n\n      if (path) {\n         this._data[section][section02].sound.file = path;\n         this._updateSubscribers();\n      }\n   }\n\n   openSequencerViewer() {\n      Sequencer.DatabaseViewer.show()\n   }\n\n   async copyFromAutorec(autorec) {\n      if (!autorec) {\n         ui.notifications.info(\"Automated Animations | There is no Global match found to copy!\")\n         return;\n      }\n      if (!isObject(autorec)) {\n         ui.notifications.info(\"Automated Animations | Global Autorec data is not valid\")\n      }\n      let data = foundry.utils.deepClone(autorec)\n      this._data.activeEffectType = data.activeEffectType;\n      this._data.macro = data.macro;\n      this._data.primary = data.primary;\n      this._data.secondary = data.secondary;\n      this._data.source = data.source;\n      this._data.soundOnly = data.soundOnly;\n\n      this._updateSubscribers()\n   }\n   async copyToAutorec(label) {\n      //ui.notifications.info(\"Work In Progress\")\n      let menu = this._data.activeEffectType;\n      if (menu === \"default\") {\n         custom_warning(\"You are attempting to copy an Item to the Global menu, but you haven't configured the item!\")\n      }\n      let data = foundry.utils.deepClone(this._data);\n      data.id = Hashing.uuidv4();\n      data.label = label;\n\n      delete data.isCustomized;\n      delete data.isEnabled;\n\n      let currentMenu = await game.settings.get('autoanimations', `aaAutorec-aefx`);\n      currentMenu.push(data);\n      await game.settings.set('autoanimations', `aaAutorec-aefx`, currentMenu);\n   }\n}\n\n/**\n * @typedef {object} AnimationPropertyStores\n *\n * @property {import('svelte/store').Writable<boolean>} folderOpen - Session storage folder open store.\n *\n * @property {import('svelte/store').Writable<string>} label - Animation label.\n */\n","<svelte:options accessors={true} />\n\n<script>\n    import * as newData from \"../../_AutorecMenu/store/default-data/newSection\"\n\n    import { getContext }        from \"svelte\";\n    import { ApplicationShell } from \"#runtime/svelte/component/application\";\n    import { TJSDocument } from \"#runtime/svelte/store/fvtt/document\";\n\n    import CategoryControl       from \"./category/CategoryControl.svelte\";\n\n    import { AnimationStore } from \"../store/AnimationStore.js\"\n\n    import { flagMigrations } from \"../../../mergeScripts/items/itemFlagMerge.js\"\n    // import { constants }         from \"#constants\";\n\n    export let elementRoot;\n    export let storageStore = void 0;\n\n    export let item;\n    export let itemFlags;\n\n    const doc = new TJSDocument(item);\n    $:\n    {\n    $doc;\n    $animation.label = $doc.label || $doc.name\n    }\n\n    let aaFlags = itemFlags.autoanimations || {};\n\n    const { application } = getContext(\"#external\");\n    let newFlagData = foundry.utils.deepClone(aaFlags);\n\n    if (!newFlagData.hasOwnProperty('activeEffectType')) {\n        newFlagData = newData.aefx(\"ontoken\")\n        newFlagData.activeEffectType = \"ontoken\";\n    }\n    if (!newFlagData.hasOwnProperty('isEnabled')) {\n        newFlagData.isEnabled = true;\n    }\n    if (!newFlagData.hasOwnProperty('isCustomized')) {\n        newFlagData.isCustomized = false;\n    }\n    //if (!newFlagData.hasOwnProperty('menu')) {\n        //newFlagData.menu = \"aefx\";\n    //}\n    if (!newFlagData.hasOwnProperty('version')) {\n        newFlagData.version = Object.keys(flagMigrations.migrations).map((n) => Number(n)).reverse()[0]\n    }\n    newFlagData.label = item.label;\n\n    let animation = new AnimationStore(newFlagData)\n\n    // Application position store reference. Stores need to be a top level variable to be accessible for reactivity.\n    const position = application.position;\n\n    // A debounced callback that serializes application state after 500-millisecond delay.\n    const storeAppState = foundry.utils.debounce(() => $storageStore = application.state.current(), 500);\n\n    // Reactive statement to invoke debounce callback on Position changes.\n    $: storeAppState($position);\n</script>\n\n<ApplicationShell bind:elementRoot stylesContent={{ color: \"black\" }}>\n    <CategoryControl {item} {animation} />\n</ApplicationShell>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n    export let currentSelected;\n</script>\n\n<div class=\"aa-options-info\">\n    {#if currentSelected === \"melee\"}\n        <table id=\"options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n            <tr>\n                <th colspan=\"2\"> Item Settings</th>\n            </tr>\n            <tr>\n                <td class=\"aa-table\">\n                    <strong\n                        >{localize(\"autoanimations.menus.animation\")}\n                        {localize(\"autoanimations.menus.enabled\")}</strong\n                    >\n                </td>\n                <td> Turn Animations for this item ON or OFF </td>\n            </tr>\n            <tr>\n                <td class=\"aa-table\">\n                    <strong\n                        >{localize(\"autoanimations.menus.customize\")}\n                        {localize(\"autoanimations.menus.item\")}</strong\n                    >\n                </td>\n                <td>\n                    Toggle custom Item Animation. If enabled the Autorec menu\n                    will be disabled for this Item.\n                </td>\n            </tr>\n        </table>\n    {/if}\n</div>\n\n<style lang=\"scss\">\n    .aa-options-info {\n        font-size: small;\n    }\n    #options-table th {\n        padding-top: 12px;\n        padding-bottom: 12px;\n        text-align: center;\n        background-color: #04aa6d;\n        color: white;\n    }\n    #options-table {\n        font-family: Arial, Helvetica, sans-serif;\n        border-collapse: collapse;\n        width: 100%;\n    }\n    #options-table td,\n    #options-table th {\n        border: 1px solid rgb(0, 0, 0);\n        padding: 8px;\n    }\n    #options-table tr:nth-child(even) {\n        background-color: rgb(240 238 227);\n    }\n    #options-table tr:nth-child(odd) {\n        background-color: rgb(203 201 190);\n    }\n    .aa-table {\n        text-align: center;\n    }\n</style>\n","<script>\n    // import { localize } from \"#runtime/util/i18n\";\n\n    import ItemInformation from \"./ItemInformation.svelte\";\n\n    let currentSelected = \"melee\";\n\n</script>\n\n<ItemInformation {currentSelected}/>\n\n<style lang=\"scss\">\n\n</style>\n","\nimport { TJSDialog } from '#runtime/svelte/application';\nimport ItemInfo from './itemInfo/ItemInfo.svelte';\n\nexport default class ItemInfoDialog extends TJSDialog {\n    constructor(data) {\n        super({\n            title: 'Options Info',\n            draggable: true,\n            resizable:true,\n            modal: false,\n            zIndex:null,\n            content: {\n                class: ItemInfo,\n                props: {\n                    ...data\n                }\n            },\n        });\n    }\n\n    static get defaultOptions() {\n        return foundry.utils.mergeObject(super.defaultOptions, {\n            minimizable: true,\n            width: 600,\n            height: \"auto\",\n            closeOnSubmit: true,\n            id: `Item-Information`,\n            themeName: 'light'\n        })\n    }\n\n}\n","import { SvelteApp } from \"#runtime/svelte/application\";\n\nimport { AEAppShell } from \"./components\";\nimport { showAutorecMenu } from \"../_AutorecMenu/showUI\";\n\nimport ItemInfoDialog from \"./components/animation/itemInfoDialog.js\";\n\nimport { sessionConstants } from \"#constants\";\nimport { aaSessionStorage } from \"#sessionStorage\";\n\nexport default class AEMenuApp extends SvelteApp {\n    /** @inheritDoc */\n    constructor(item)\n    {\n        super({\n            svelte: {\n                class: AEAppShell,\n                target: document.body,\n                props: {\n                    item,\n                    itemFlags: item.flags,\n                    storageStore: aaSessionStorage.getStore(sessionConstants.activeEffectAppState)\n                }\n            },\n        });\n\n        try\n        {\n            //Attempt to parse session storage item and set application state.\n            this.state.set(aaSessionStorage.getItem(sessionConstants.activeEffectAppState));\n        }\n        catch (err) { /**/ }\n    }\n\n    /**\n     *\n     */\n    static get defaultOptions() {\n        return foundry.utils.mergeObject(super.defaultOptions, {\n            title: `A-A Item Menu`,\n            id: `AA-ae-settings`,\n            zIndex: 102,\n\n            resizable: true,\n            minimizable: true,\n            width: 600,\n            height: 750,\n            minWidth: 550,\n\n            themeName: 'light'\n        });\n    }\n\n    _getHeaderButtons()\n    {\n        const buttons = super._getHeaderButtons();\n        buttons.unshift({\n            icon: 'fas fa-circle-info',\n            title: 'Item Information',\n            label: \"Info\",\n            styles: { color: 'lightblue', position: \"relative\", right: \"5px\" },\n\n            onPress: function()\n            {\n                if (\n                    Object.values(ui.windows).find(\n                       (w) => w.id === `Options-Information`\n                    )\n                 ) { return; }\n                 new ItemInfoDialog().render(true)\n            }\n         });\n\n        buttons.unshift({\n            class: 'autorec-shortcut',\n            icon: 'fas fa-globe',\n            title: 'Launch Autorec',\n            label: \"Global Automatic Recognition Menu\",\n            styles: { color: 'lightblue', position: \"relative\", right: \"30px\" },\n\n            onPress: function()\n            {\n                if (game.user.isGM) {\n                    new showAutorecMenu()\n                }\n            }\n         });\n\n\n         return buttons;\n       }\n    /**\n     * @inheritDoc\n     */\n    async close(options) {\n        Object.values(ui.windows).filter(app => app.id === \"Options-Information\" ||\n         app.id === \"Autorec-Video-Preview\" || app.id === \"Autorec-Menu-Manager\" ||\n         app.id === \"Item-Information\" || app.id === \"AA-Copy-Item-To-Global\").forEach(app => app.close());\n\n        return super.close(options);\n    }\n}\n","import { writable } from \"svelte/store\";\n\nimport { Hashing } from \"#runtime/util\";\nimport { isObject } from \"#runtime/util/object\";\n\nimport { ObjectEntryStore } from \"#runtime/svelte/store/reducer/array-object\";\n\nimport { FVTTFilePickerControl } from \"#standard/application/control/filepicker\";\n\nimport * as changeSection from \"../../_AutorecMenu/store/default-data/newSection\";\n\nimport { custom_warning } from \"../../../constants/constants.js\";\nimport VideoPreview from \"../../Menus/Components/videoPreview/videoPreview.js\";\n\n//import { CategoryStore } from \"../category/CategoryStore.js\";\n//import { aaSessionStorage } from \"#sessionStorage\";\n//import { constants } from \"#constants\";\n\nimport {\n   newTypeMenu,\n   newNameMenu,\n   newVariantMenu,\n   newColorMenu,\n   aaReturnWeapons,\n} from \"../../../database/jb2a-menu-options.js\";\n\nexport class AnimationStore extends ObjectEntryStore {\n   /** @type {AnimationPropertyStores} */\n   #stores;\n\n   /**\n    * @param {object}   data -\n    */\n   constructor(data = {}) {\n      super(data);\n\n      this.#stores = {\n         videoIDX: writable(void 0),\n      };\n   }\n\n   /**\n    * @returns {AnimationPropertyStores}\n    */\n   get stores() {\n      return this.#stores;\n   }\n\n   // ----------------------------------------------------------------------------------------------------------------\n\n   /**\n    * @param {object}   data -\n    */\n   set() {\n      this._updateSubscribers();\n   }\n\n   async selectCustom(section, section02 = \"video\") {\n      const current = this._data[section][section02].customPath;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"imagevideo\",\n         current,\n      });\n\n      if (path) {\n         this._data[section][section02].customPath = path;\n         this._updateSubscribers();\n      }\n   }\n\n   loadPreviews() {\n      VideoPreview.show();\n   }\n\n   getMenuDB(section, idx, isOnToken) {\n      let menuDB = isOnToken\n         ? \"static\"\n         : this._data.menu === \"ontoken\" || this._data.menu === \"aura\"\n         ? \"static\"\n         : this._data.menu;\n      menuDB = section === \"secondary\" ? \"static\" : menuDB;\n      return menuDB;\n   }\n\n   menuTypeList(menuDB = \"static\") {\n      return newTypeMenu[menuDB] || [];\n   }\n   animationList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n\n      return newNameMenu[menuDB][menuType] || [];\n   }\n   variantList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n\n      return newVariantMenu[menuDB][menuType]?.[animation] || [];\n   }\n   colorList(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n      let variant = this._data[section][section02].variant;\n\n      return newColorMenu[menuDB][menuType]?.[animation]?.[variant] || [];\n   }\n\n   async databaseToClipboard(section, idx, section02, dbSection) {\n      const dbPath = await this.getDBPath(section, idx, section02, dbSection);\n      const app = new CopyClipBoard({\n         target: document.getElementById(\"clipboard\"),\n         props: { dbPath },\n      });\n      app.$destroy();\n   }\n\n   async getDBPath(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n      let variant = this._data[section][section02].variant;\n      let color = this._data[section][section02].color;\n      return color === \"random\"\n         ? `autoanimations.${menuDB}.${menuType}.${animation}.${variant}`\n         : `autoanimations.${menuDB}.${menuType}.${animation}.${variant}.${color}`;\n   }\n   menuTypeChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      this._data[section][section02].animation = newNameMenu[menuDB][menuType][0][0];\n\n      let animation = this._data[section][section02].animation;\n      this._data[section][section02].variant = newVariantMenu[menuDB][menuType][animation][0][0];\n\n      let variant = this._data[section][section02].variant;\n      this._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0];\n   }\n\n   animationChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n      this._data[section][section02].variant = newVariantMenu[menuDB][menuType][animation][0][0];\n\n      let variant = this._data[section][section02].variant;\n      this._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0];\n   }\n\n   variantChange(section, idx, section02 = \"video\", menuDB = \"static\") {\n      let menuType = this._data[section][section02].menuType;\n      let animation = this._data[section][section02].animation;\n      let variant = this._data[section][section02].variant;\n      this._data[section][section02].color = newColorMenu[menuDB][menuType][animation][variant][0][0];\n   }\n\n   get typeMenu() {\n      return newTypeMenu;\n   }\n   get animationMenu() {\n      return newNameMenu;\n   }\n   get variantMenu() {\n      return newVariantMenu;\n   }\n   get colorMenu() {\n      return newColorMenu;\n   }\n   get returnWeapons() {\n      return aaReturnWeapons;\n   }\n\n   async openMacro(data) {\n      if (!data) {\n         ui.notifications.info(`Automated Animations: Cannot locate Macro ${data}`);\n         return;\n      }\n      // Credit to Wasp, Zhell, Gazkhan and MrVauxs for the code in this section\n      if (data.startsWith(\"Compendium\")) {\n         let packArray = data.split(\".\");\n         let pack = game.packs.get(`${packArray[1]}.${packArray[2]}`);\n         if (!pack) {\n            ui.notifications.info(`Autoanimations | Compendium ${packArray[1]}.${packArray[2]} was not found`);\n            return;\n         }\n         let macroFilter = pack.index.filter((m) => m.name === packArray[3]);\n         if (!macroFilter.length) {\n            ui.notifications.info(\n               `Autoanimations | A macro named ${packArray[3]} was not found in Compendium ${packArray[1]}.${packArray[2]}`\n            );\n            return;\n         }\n         let macroDocument = await pack.getDocument(macroFilter[0]._id);\n         macroDocument.sheet.render(true);\n      } else {\n         if (!data) {\n            return;\n         }\n         let getTest = game.macros.getName(data);\n         if (!getTest) {\n            ui.notifications.info(`Autoanimations | Could not find the macro named ${data}`);\n            return;\n         }\n         game.macros.getName(data).sheet.render(true);\n      }\n   }\n\n   playSound(data) {\n      const currentSection = data || {};\n      const file = currentSection?.file;\n      const volume = currentSection?.volume ?? 0.75;\n      const startTime = currentSection?.startTime ?? 0;\n      new Sequence().sound().file(file).volume(volume).startTime(startTime).play();\n   }\n\n   async selectCustom(section, section02 = \"video\", idx) {\n      const current = this._data[section][section02].customPath;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"imagevideo\",\n         current,\n      });\n\n      if (path) {\n         this._data[section][section02].customPath = path;\n         this._updateSubscribers();\n      }\n   }\n\n   async selectSound(section, idx) {\n      const current = this._data[section].sound.file;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"audio\",\n         current,\n      });\n\n      if (path) {\n         this._data[section].sound.file = path;\n         this._updateSubscribers();\n      }\n   }\n\n   async selectSoundNested(section, section02, idx) {\n      const current = this._data[section][section02].sound.file;\n\n      const path = await FVTTFilePickerControl.browse({\n         modal: false,\n         type: \"audio\",\n         current,\n      });\n\n      if (path) {\n         this._data[section][section02].sound.file = path;\n         this._updateSubscribers();\n      }\n   }\n\n   openSequencerViewer() {\n      Sequencer.DatabaseViewer.show();\n   }\n\n   async copyFromAutorec(autorec) {\n      if (!autorec) {\n         ui.notifications.info(\"Automated Animations | There is no Global match found to copy!\");\n         return;\n      }\n      if (!isObject(autorec)) {\n         ui.notifications.info(\"Automated Animations | Global Autorec data is not valid\");\n      }\n      let data = foundry.utils.deepClone(autorec);\n      let isCustomized = this._data.isCustomized;\n      let isEnabled = this._data.isEnabled;\n      let label = this._data.label;\n      let id = this._data.id;\n\n      let menu = data.menu;\n      switch (menu) {\n         case \"melee\":\n            this._data.menu = data.menu;\n            this._data.levels3d = data.levels3d;\n            this._data.macro = data.macro;\n            this._data.meleeSwitch = data.meleeSwitch;\n            this._data.primary = data.primary;\n            this._data.secondary = data.secondary;\n            this._data.source = data.source;\n            this._data.target = data.target;\n            this._data.soundOnly = data.soundOnly;\n            break;\n         case \"range\":\n         case \"ontoken\":\n         case \"templatefx\":\n         case \"aura\":\n            this._data.menu = data.menu;\n            this._data.levels3d = data.levels3d;\n            this._data.macro = data.macro;\n            this._data.primary = data.primary;\n            this._data.secondary = data.secondary;\n            this._data.source = data.source;\n            this._data.target = data.target;\n            this._data.soundOnly = data.soundOnly;\n            break;\n         case \"preset\":\n            this._data.menu = data.menu;\n            this._data.presetType = data.presetType;\n            this._data.primary = data.primary;\n            this._data.soundOnly = data.soundOnly;\n            this._data.macro = data.macro;\n            break;\n      }\n      this._updateSubscribers();\n   }\n   async copyToAutorec(label) {\n      //ui.notifications.info(\"Work In Progress\")\n      let menu = this._data.menu;\n      if (!this._data.isCustomized) {\n         custom_warning(\n            \"You are attempting to copy an Item to the Global menu, but you haven't configured the item!\",\n            true\n         );\n      }\n      let data = foundry.utils.deepClone(this._data);\n      data.id = Hashing.uuidv4();\n      data.label = label;\n      switch (menu) {\n         case \"melee\":\n            delete data.presetType;\n            break;\n         case \"range\":\n            delete data.presetType;\n            delete data.meleeSwitch;\n            break;\n         case \"ontoken\":\n            delete data.presetType;\n            delete data.meleeSwitch;\n            break;\n         case \"templatefx\":\n            delete data.presetType;\n            delete data.meleeSwitch;\n            delete data.levels3d;\n            break;\n         case \"aura\":\n            delete data.presetType;\n            delete data.meleeSwitch;\n            delete data.levels3d;\n            break;\n         case \"preset\":\n            delete data.meleeSwitch;\n            delete data.levels3d;\n            delete data.source;\n            break;\n      }\n      delete data.fromAmmo;\n      delete data.isCustomized;\n      delete data.isEnabled;\n\n      let currentMenu = await game.settings.get(\"autoanimations\", `aaAutorec-${menu}`);\n      currentMenu.push(data);\n      await game.settings.set(\"autoanimations\", `aaAutorec-${menu}`, currentMenu);\n   }\n\n   async switchVideo() {\n      let newMenu = this._data.menu;\n      if (!newMenu) {\n         return;\n      }\n\n      let newData = changeSection[newMenu](this._data);\n      if (!newMenu) {\n         delete this._data.data;\n         this._data.primary = {};\n         return;\n      }\n      switch (newMenu) {\n         case \"preset\":\n            this._data.macro = newData.macro;\n            this._data.soundOnly = newData.soundOnly;\n            this._data.presetType = newData.presetType;\n            this._data.secondary = newData.secondary;\n            this._data.target = newData.target;\n            this._data.data = newData.data;\n            break;\n         case \"melee\":\n            this._data.levels3d = newData.levels3d;\n            this._data.macro = newData.macro;\n            this._data.meleeSwitch = newData.meleeSwitch;\n            this._data.primary = newData.primary;\n            this._data.secondary = newData.secondary;\n            this._data.soundOnly = newData.soundOnly;\n            this._data.source = newData.source;\n            this._data.target = newData.target;\n            break;\n         case \"range\":\n         case \"ontoken\":\n            this._data.levels3d = newData.levels3d;\n            this._data.macro = newData.macro;\n            this._data.primary = newData.primary;\n            this._data.secondary = newData.secondary;\n            this._data.soundOnly = newData.soundOnly;\n            this._data.source = newData.source;\n            this._data.target = newData.target;\n            break;\n         default:\n            this._data.macro = newData.macro;\n            this._data.primary = newData.primary;\n            this._data.secondary = newData.secondary;\n            this._data.soundOnly = newData.soundOnly;\n            this._data.source = newData.source;\n            this._data.target = newData.target;\n            break;\n      }\n   }\n\n   deleteOld() {\n      let newMenu = this._data.menu;\n      if (!newMenu) {\n         return;\n      }\n\n      switch (newMenu) {\n         case \"preset\":\n            delete this._data.primary;\n            delete this._data.levels3d;\n            delete this._data.meleeSwitch;\n            delete this._data.primary;\n            delete this._data.source;\n            break;\n         case \"melee\":\n            delete this._data.presetType;\n            delete this._data.data;\n            break;\n         case \"range\":\n         case \"ontoken\":\n            delete this._data.meleeSwitch;\n            delete this._data.presetType;\n            delete this._data.data;\n            break;\n         default:\n            delete this._data.levels3d;\n            delete this._data.meleeSwitch;\n            delete this._data.presetType;\n            delete this._data.data;\n            break;\n      }\n   }\n}\n\n/**\n * @typedef {object} AnimationPropertyStores\n *\n * @property {import('svelte/store').Writable<boolean>} folderOpen - Session storage folder open store.\n *\n * @property {import('svelte/store').Writable<string>} label - Animation label.\n */\n","<script>\n   import { getContext }   from \"svelte\";\n\n   import BuildMelee       from \"../../../Menus/BuildMenu/BuildMelee.svelte\";\n   import BuildRange       from \"../../../Menus/BuildMenu/BuildRange.svelte\";\n   import BuildOnToken     from \"../../../Menus/BuildMenu/BuildOnToken.svelte\";\n   import BuildTemplateFx  from \"../../../Menus/BuildMenu/BuildTemplateFX.svelte\";\n   import BuildAura        from \"../../../Menus/BuildMenu/BuildAura.svelte\";\n   import BuildPreset      from \"../../../Menus/BuildMenu/BuildPreset.svelte\";\n   import BuildAeOnToken from \"../../../Menus/ActiveEffects/BuildAEOnToken.svelte\";\n\n   //export let animation;\n   let { animation } = getContext('animation-data');\n\n   export let chosenMenu;\n\n   let newContentOptions = {\n      melee: {\n         component: BuildMelee,\n      },\n      range: {\n         component: BuildRange,\n      },\n      ontoken: {\n         component: BuildOnToken,\n      },\n      templatefx: {\n         component: BuildTemplateFx,\n      },\n      aura: {\n         component: BuildAura,\n      },\n      preset: {\n         component: BuildPreset,\n      },\n   };\n\n   $: menuRoute = newContentOptions[chosenMenu].component;\n\n   $: isEnabled = $animation.isEnabled;\n   $: isCustomized = $animation.isCustomized;\n\n</script>\n\n   <div class={`animation ${!isEnabled || !isCustomized ? \"aa-disableOpacity\" : \"\"}`}>\n      <div class=\"sectionBorder\">\n         <svelte:component this={menuRoute} fromMenu=\"item\"/>\n      </div>\n   </div>\n\n<style lang=\"scss\">\n   .sectionBorder {\n      background: rgb(186, 186, 186);\n      border: 2px solid rgba(0, 0, 0, 0.75);\n      border-radius: 0.75em;\n      height: fit-content;\n   }\n</style>\n","<script>\n    export let isEnabled;\n    export let isCustomized;\n    export let isInAutorec;\n    export let isInAEAutorec;\n\n    $: autorecLabel = isInAutorec\n        ? game.i18n.localize(`autoanimations.animTypes.${isInAutorec.menu}`)\n        : \"\";\n    let aeLabel = game.i18n.localize(`autoanimations.animTypes.aefx`);\n</script>\n\n<div class=\"aa-Info\">\n    {#if isEnabled && !isCustomized && (isInAutorec || isInAEAutorec)}\n        <ul>\n            <li>\n                <strong>Item Animation is enabled but not customized</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>Global Automatic Recogntion is matched</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        <ul>\n            {#if isInAutorec}\n                <li>\n                    <strong>Menu: {autorecLabel} - Label: {isInAutorec.label}</strong>  <i class=\"fas fa-check aa-green\"></i>\n                </li>\n            {/if}\n            {#if isInAEAutorec}\n                <li>\n                    <strong>Menu: {aeLabel} - Label: {isInAEAutorec.label}</strong>  <i class=\"fas fa-check aa-green\"></i>\n                </li>\n            {/if}\n        </ul>\n    {:else if isEnabled && !isCustomized && !isInAutorec}\n        <ul>\n            <li>\n                <strong>Item Animation is enabled but not customized</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>No Global Automatic Recognition is matched</strong>  <i class=\"fas fa-xmark aa-red\"></i>\n            </li>\n        </ul>\n    {:else if isEnabled && isCustomized}\n        <ul>\n            <li>\n                <strong>Item Animation is enabled but not configured!!</strong>  <i class=\"fas fa-xmark aa-red\"></i>\n            </li>\n        </ul>\n        {#if isInAutorec}\n        <ul>\n            <li>\n                <strong>Global Automatic Recognition will be used</strong>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>Global Automatic Recogntion is matched</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        <ul>\n            <li>\n                <strong>Menu: {autorecLabel} - Label: {isInAutorec.label}</strong>  <i class=\"fas fa-check aa-green\"></i>\n            </li>\n        </ul>\n        {:else}\n        <ul>\n            <li>\n                <strong>No Global Automatic Recognition is matched</strong>  <i class=\"fas fa-xmark aa-red\"></i>\n            </li>\n        </ul>\n        {/if}\n    {:else}\n        <ul>\n            <li>\n                <strong>Animations are disabled for this item</strong>  <i class=\"fas fa-xmark aa-red\"></i>\n            </li>\n        </ul>\n        \n    {/if}\n</div>\n\n<style lang=\"scss\">\n    .aa-Info {\n        font-size: 16px;\n    }\n</style>\n","<script>\n  import {\n    getContext,\n    setContext }                  from \"svelte\";\n\n  import { localize }             from \"#runtime/util/i18n\";\n\n  import { ripple }               from \"#standard/action/animate/composable\";\n\n  import { TJSToggleIconButton }  from \"#standard/component/button\";\n\n  import { TJSMenu }              from \"#standard/component/menu\";\n\n  //import CategoryControl      from \"./CategoryControl.svelte\";\n\n  import CategoryList from \"./CategoryList.svelte\";\n  import Slider from \"../../../Menus/Components/options/inputComponents/Slider.svelte\";\n\n  import { AAAutorecFunctions } from \"../../../../aa-classes/aaAutorecFunctions\";\n  import { copyToFrom } from \"../../../Menus/Components/copyitem/copyToFrom\";\n\n  import NoneChosen from \"./menus/NoneChosen.svelte\";\n\n  /**\n   * @ItemStore\n   */\n  export let animation;\n\n  setContext('animation-data', {animation, category: animation, idx: 0})\n\n  export let item;\n  const documentLabel = item?.documentName === \"Activity\" ? \"Activity\" : \"Item\";\n\n  const is5e = game.system.id === \"dnd5e\";\n  const { application } = getContext(\"#external\");\n\n  let autorecSettings = {\n    melee: game.settings.get(\"autoanimations\", \"aaAutorec-melee\"),\n    range: game.settings.get(\"autoanimations\", \"aaAutorec-range\"),\n    ontoken: game.settings.get(\"autoanimations\", \"aaAutorec-ontoken\"),\n    templatefx: game.settings.get(\"autoanimations\", \"aaAutorec-templatefx\"),\n    aura: game.settings.get(\"autoanimations\", \"aaAutorec-aura\"),\n    preset: game.settings.get(\"autoanimations\", \"aaAutorec-preset\"),\n    aefx: game.settings.get(\"autoanimations\", \"aaAutorec-aefx\"),\n  };\n\n  // Applies flags on Item Update wihtout Closing APP\n  async function applyFlags() {\n    await item.update({ 'flags.-=autoanimations': null })\n    await item.update({ \"flags.autoanimations\": $animation });\n  }\n\n  // Applies flags on Item Update and Closes the APP\n  async function closeApp() {\n    await item.update({ 'flags.-=autoanimations': null })\n    await item.update({ \"flags.autoanimations\": $animation });\n    application.close();\n  }\n\n  //Check the Autorec Menu for a matching Section\n  let filteredSettings = AAAutorecFunctions.sortAndFilterMenus(autorecSettings)\n  $: isInAutorec = AAAutorecFunctions.allMenuSearch(filteredSettings, AAAutorecFunctions.rinseName($animation.label), $animation.label);\n  //let filteredSettings = AAAutorecFunctions.sortAndFilterAllMenus(autorecSettings)\n  $: isInAEAutorec =  AAAutorecFunctions.singleMenuSearch(autorecSettings.aefx, AAAutorecFunctions.rinseName($animation.label), $animation.label);\n\n  let menu = isInAutorec\n    ? game.i18n.localize(`autoanimations.animTypes.${isInAutorec.menu}`)\n    : \"\";\n\n  $: disabledLabel = $animation.isEnabled\n    ? game.i18n.localize(\"autoanimations.menus.animation\") +\n      \" \" +\n      game.i18n.localize(\"autoanimations.menus.enabled\")\n    : game.i18n.localize(\"autoanimations.menus.animation\") +\n      \" \" +\n      game.i18n.localize(\"autoanimations.menus.disabled\");\n\n  $: isEnabled = $animation.isEnabled;\n  $: isCustomized = $animation.isCustomized;\n  $: menuType = $animation.menu;\n\n  const buttonOverflow = {\n    icon: \"fas fa-ellipsis-v\",\n    efx: ripple(),\n    title: \"Copy To/From\",\n    styles: { \"margin-left\": \"0.5em\" },\n    clickPropagate: false, // Necessary to capture click for Firefox.\n  };\n\n  const subMenu = {\n    items: copyToFrom(animation, item, autorecSettings),\n  };\n\n  let chosenMenu = $animation.menu;\n  $: chosenMenu;\n</script>\n\n<header class=\"animation\">\n  <ul>\n    <div style=\"grid-row: 1/2; grid-column: 1/2\">\n      <Slider  label={disabledLabel} field=\"isEnabled\" />\n    </div>\n    <div\n      style=\"grid-row: 2/3; grid-column: 1/2\"\n      class={!isEnabled ? \"aa-disableOpacity\" : \"\"}\n    >\n      <Slider\n        label={localize(\"autoanimations.menus.customize\") + \" \" + documentLabel}\n        field=\"isCustomized\"\n      />\n    </div>\n    <div\n      style=\"grid-row: 1 / 2; grid-column: 2/3;\"\n      class=\"autorecLabel {isInAutorec || isInAEAutorec ? 'aa-bgGreen' : 'aa-bgRed'} {!isEnabled\n        ? 'aa-disableOpacity'\n        : ''}\"\n    >\n      {#if isInAutorec && isInAEAutorec}\n        <label for=\"\" style=\"font-size: 15px; font-weight:bold\">\n          {localize('autoanimations.menus.globalFound')} + {localize('autoanimations.menus.activeEffect')} <br />\n        </label>\n      {:else if isInAutorec}\n        <label for=\"\" style=\"font-size: 15px; font-weight:bold\">\n          {localize('autoanimations.menus.globalFound')} <br />\n        </label>\n      {:else if isInAEAutorec}\n        <label for=\"\" style=\"font-size: 15px; font-weight:bold\">\n          {localize('autoanimations.menus.activeEffect')} {localize('autoanimations.menus.matchFound')} <br />\n        </label>\n      {:else}\n        <label for=\"\" style=\"font-size: 15px; font-weight:bold\">\n          {localize('autoanimations.menus.globalNotFound')}\n        </label>\n      {/if}\n    </div>\n    <div\n      style=\"grid-row: 1/2; grid-column: 3/4\"\n      class={!isEnabled ? \"aa-disableOpacity\" : \"\"}\n    >\n    <TJSToggleIconButton button={buttonOverflow} slot=\"summary-end\">\n      <TJSMenu menu={subMenu} />\n    </TJSToggleIconButton>\n    </div>\n    <div\n      style=\"grid-row: 2/3; grid-column: 2/4; padding-bottom: 10px;margin-left: 1.5em\"\n      class={!isEnabled || !isCustomized ? \"aa-disableOpacity\" : \"\"}\n    >\n      <label for=\"\" style=\"font-weight:bold;\"\n        >{localize(\"autoanimations.menus.animation\")}\n        {localize(\"autoanimations.menus.type\")}</label\n      >\n      <select bind:value={$animation.menu} on:change={async () => {\n            await animation.switchVideo();\n            chosenMenu = $animation.menu;\n            animation.deleteOld();\n          }\n        }>\n        <option value=\"melee\"\n          >{localize(\"autoanimations.animTypes.melee\")}</option\n        >\n        <option value=\"range\"\n          >{localize(\"autoanimations.animTypes.range\")}</option\n        >\n        <option value=\"ontoken\"\n          >{localize(\"autoanimations.animTypes.ontoken\")}</option\n        >\n        <option value=\"templatefx\"\n          >{localize(\"autoanimations.animTypes.templatefx\")}</option\n        >\n        <option value=\"aura\">{localize(\"autoanimations.animTypes.aura\")}</option\n        >\n        <option value=\"preset\"\n          >{localize(\"autoanimations.animTypes.preset\")}</option\n        >\n      </select>\n    </div>\n  </ul>\n</header>\n\n<main>\n  {#if !menuType || !isEnabled || !isCustomized}\n    <div class=\"sectionBorder\">\n      <svelte:component this={NoneChosen} {isEnabled} {isCustomized} {isInAutorec} {isInAEAutorec}/>\n    </div>\n  {:else}\n    <CategoryList  {chosenMenu} />\n  {/if}\n</main>\n\n<footer>\n  <ul>\n    <button\n      style=\"background-color: rgba(0, 0, 0, 0.2)\"\n      on:click|preventDefault={() => applyFlags()}>Submit</button\n    >\n    <button on:click|preventDefault={() => closeApp()}>Submit and Close</button>\n  </ul>\n</footer>\n\n<style lang=\"scss\">\n  header {\n    flex: none;\n    padding: 0em 0.5em 0em 0.5em;\n\n    background: rgb(204, 204, 204);\n    border-bottom: 1px solid rgb(100, 100, 100);\n\n    height: fit-content;\n    width: 100%;\n    //button {\n    //border-radius: 1em;\n    //background: rgba(0, 0, 0, 0.15);\n    //border: 1px solid rgba(73, 73, 73, 0.5);\n    //}\n    .autorecLabel {\n      border: 1px solid rgba(73, 73, 73, 0.5);\n      border-radius: 1em;\n      //height: 3em;\n      //margin-right: 0.2em;\n      //margin-left: 0.2em;\n      font-size: 0.95em;\n      text-align: center;\n    }\n    //@at-rootbutton:disabled {\n    //opacity: 0.4;\n    //}\n    ul {\n      display: grid;\n      grid-template-columns: 40% 50% 10%;\n      grid-auto-rows: 30px;\n      //grid-gap: 1%;\n      margin-bottom: 5px;\n      align-items: center;\n      align-items: center;\n\n      //flex-wrap: nowrap;\n      //justify-content: center;\n      //align-items: center;\n      //height: 100%;\n\n      list-style-type: none;\n      padding: 0;\n      margin: 0;\n    }\n  }\n  footer {\n    position: absolute;\n    bottom: 0;\n    flex: none;\n    padding: 0.5em 0.5em;\n\n    background: rgb(160, 159, 159);\n    border-top: 1px solid rgb(100, 100, 100);\n\n    height: fit-content;\n    width: 100%;\n\n    font-size: 1em;\n    font-weight: bold;\n    ul {\n      display: flex;\n      flex-wrap: nowrap;\n      justify-content: center;\n      align-items: center;\n      height: 100%;\n\n      padding: 0;\n      margin: 0;\n    }\n    button {\n      border-radius: 1em;\n      background: rgba(0, 0, 0, 0.35);\n      border: 1px solid rgba(73, 73, 73, 0.5);\n    }\n  }\n  main {\n    position: relative;\n    overflow-y: auto;\n    padding: 0 3%;\n    padding-bottom: 68px;\n    scrollbar-width: thin; // For Firefox\n  }\n  .sectionBorder {\n    background: rgb(186, 186, 186);\n    border: 2px solid rgba(0, 0, 0, 0.75);\n    border-radius: 0.75em;\n    height: fit-content;\n  }\n</style>\n","<svelte:options accessors={true} />\n\n<script>\n    //import * as common from \"../../_AutorecMenu/store/default-data/common\"\n    import * as newData from \"../../_AutorecMenu/store/default-data/newSection\"\n\n    import { getContext}        from \"svelte\";\n    import { AnimationStore } from \"../store/AnimationStore.js\"\n    import { ApplicationShell } from \"#runtime/svelte/component/application\";\n    import CategoryControl       from \"./category/CategoryControl.svelte\";\n    import { TJSDocument } from \"#runtime/svelte/store/fvtt/document\";\n\n    import { flagMigrations } from \"../../../mergeScripts/items/itemFlagMerge.js\"\n    // import { constants }         from \"#constants\";\n\n    export let elementRoot;\n    export let storageStore = void 0;\n\n    export let item;\n    export let itemFlags;\n\n    const isValidDocument = item instanceof foundry.abstract.Document;\n    const doc = isValidDocument ? new TJSDocument(item) : null;\n\n    let aaFlags = itemFlags?.autoanimations || {};\n\n    const { application } = getContext(\"#external\");\n    let newFlagData = foundry.utils.deepClone(aaFlags);\n\n    if (!newFlagData.hasOwnProperty('menu')) {\n        newFlagData = newData.melee()\n        //newFlagData.activeEffectType = \"ontoken\";\n    }\n    if (!newFlagData.hasOwnProperty('isEnabled')) {\n        newFlagData.isEnabled = true;\n    }\n    if (!newFlagData.hasOwnProperty('isCustomized')) {\n        newFlagData.isCustomized = false;\n    }\n    if (!newFlagData.hasOwnProperty('fromAmmo')) {\n        newFlagData.fromAmmo = false;\n    }\n    if (!newFlagData.hasOwnProperty('version')) {\n        newFlagData.version = Object.keys(flagMigrations.migrations).map((n) => Number(n)).reverse()[0]\n    }\n    newFlagData.label = item.name ?? item.label ?? \"\";\n\n    let animation = new AnimationStore(newFlagData)\n\n    $:\n    {\n        if (doc) {\n            $doc;\n            $animation.label = $doc?.name ?? item?.name ?? item?.label ?? $animation.label;\n        } else if (item?.name || item?.label) {\n            $animation.label = item.name ?? item.label;\n        }\n    }\n\n    // Application position store reference. Stores need to be a top level variable to be accessible for reactivity.\n    const position = application.position;\n\n    // A debounced callback that serializes application state after 500-millisecond delay.\n    const storeAppState = foundry.utils.debounce(() => $storageStore = application.state.current(), 500);\n\n    // Reactive statement to invoke debounce callback on Position changes.\n    $: storeAppState($position);\n</script>\n\n<ApplicationShell bind:elementRoot stylesContent={{ color: \"black\" }}>\n    <CategoryControl {item} {animation} />\n</ApplicationShell>\n","<script>\n    import { localize } from \"#runtime/util/i18n\";\n\n    export let currentSelected;\n</script>\n\n<div class=\"aa-options-info\">\n    {#if currentSelected === \"melee\"}\n        <table id=\"options-table\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n            <tr>\n                <th colspan=\"2\"> Item Settings</th>\n            </tr>\n            <tr>\n                <td class=\"aa-table\">\n                    <strong\n                        >{localize(\"autoanimations.menus.animation\")}\n                        {localize(\"autoanimations.menus.enabled\")}</strong\n                    >\n                </td>\n                <td> Turn Animations for this item ON or OFF </td>\n            </tr>\n            <tr>\n                <td class=\"aa-table\">\n                    <strong\n                        >{localize(\"autoanimations.menus.customize\")}\n                        {localize(\"autoanimations.menus.item\")}</strong\n                    >\n                </td>\n                <td>\n                    Toggle custom Item Animation. If enabled the Autorec menu\n                    will be disabled for this Item.\n                </td>\n            </tr>\n        </table>\n    {/if}\n</div>\n\n<style lang=\"scss\">\n    .aa-options-info {\n        font-size: small;\n    }\n    #options-table th {\n        padding-top: 12px;\n        padding-bottom: 12px;\n        text-align: center;\n        background-color: #04aa6d;\n        color: white;\n    }\n    #options-table {\n        font-family: Arial, Helvetica, sans-serif;\n        border-collapse: collapse;\n        width: 100%;\n    }\n    #options-table td,\n    #options-table th {\n        border: 1px solid rgb(0, 0, 0);\n        padding: 8px;\n    }\n    #options-table tr:nth-child(even) {\n        background-color: rgb(240 238 227);\n    }\n    #options-table tr:nth-child(odd) {\n        background-color: rgb(203 201 190);\n    }\n    .aa-table {\n        text-align: center;\n    }\n</style>\n","<script>\n    // import { localize } from \"#runtime/util/i18n\";\n\n    import ItemInformation from \"./ItemInformation.svelte\";\n\n    let currentSelected = \"melee\";\n\n</script>\n\n<ItemInformation {currentSelected}/>\n\n<style lang=\"scss\">\n\n</style>\n","\nimport { TJSDialog } from '#runtime/svelte/application';\n\nimport ItemInfo from './itemInfo/ItemInfo.svelte';\n\nexport default class ItemInfoDialog extends TJSDialog {\n    constructor(data) {\n        super({\n            title: 'Menu Information',\n            draggable: true,\n            resizable:true,\n            modal: false,\n            zIndex:null,\n            content: {\n                class: ItemInfo,\n                props: {\n                    ...data\n                }\n            },\n        });\n    }\n\n    static get defaultOptions() {\n        return foundry.utils.mergeObject(super.defaultOptions, {\n            minimizable: true,\n            width: 600,\n            height: \"auto\",\n            closeOnSubmit: true,\n            id: `ItemInformation`,\n            themeName: 'light'\n        })\n    }\n\n}\n","import { SvelteApp } from \"#runtime/svelte/application\";\n\nimport { ItemAppShell } from \"./components\";\nimport { showAutorecMenu } from \"../_AutorecMenu/showUI\";\n\nimport ItemInfoDialog from \"./components/animation/itemInfoDialog.js\";\n\nimport { sessionConstants } from \"#constants\";\nimport { aaSessionStorage } from \"#sessionStorage\";\n\nexport default class ItemMenuApp extends SvelteApp {\n    /** @inheritDoc */\n    constructor(item)\n    {\n        super({\n            svelte: {\n                class: ItemAppShell,\n                target: document.body,\n                props: {\n                    item,\n                    itemFlags: item.flags,\n                    storageStore: aaSessionStorage.getStore(sessionConstants.itemAppState)\n                }\n            },\n        });\n\n        try\n        {\n            //Attempt to parse session storage item and set application state.\n            this.state.set(aaSessionStorage.getItem(sessionConstants.itemAppState));\n        }\n        catch (err) { /**/ }\n    }\n\n    /**\n     *\n     */\n    static get defaultOptions() {\n        return foundry.utils.mergeObject(super.defaultOptions, {\n            title: `A-A Item Menu`,\n            id: `AA-item-settings`,\n            zIndex: 102,\n\n            resizable: true,\n            minimizable: true,\n            width: 600,\n            height: 750,\n            minWidth: 550,\n\n            themeName: 'light'\n        });\n    }\n\n    _getHeaderButtons()\n    {\n        const buttons = super._getHeaderButtons();\n        buttons.unshift({\n            icon: 'fas fa-circle-info',\n            title: 'Item Information',\n            label: \"Info\",\n            styles: { color: 'lightblue', position: \"relative\", right: \"5px\" },\n\n            onPress: () => {\n                if (\n                    Object.values(ui.windows).find(\n                       (w) => w.id === `Options-Information`\n                    )\n                 ) { return; }\n                 new ItemInfoDialog().render(true);\n            }\n         });\n\n        buttons.unshift({\n            class: 'autorec-shortcut',\n            icon: 'fas fa-globe',\n            title: 'Launch Autorec',\n            label: \"Global Automatic Recognition Menu\",\n            styles: { color: 'lightblue', position: \"relative\", right: \"30px\" },\n\n            onPress: () =>\n            {\n                if (game.user.isGM) {\n                    new showAutorecMenu();\n                }\n            }\n         });\n\n\n         return buttons;\n       }\n    /**\n     * @inheritDoc\n     */\n    async close(options) {\n        Object.values(ui.windows).filter(app => app.id === \"Options-Information\" ||\n         app.id === \"Autorec-Video-Preview\" || app.id === \"Autorec-Menu-Manager\" ||\n         app.id === \"Item-Information\" || app.id === \"AA-Copy-Item-To-Global\").forEach(app => app.close());\n\n        return super.close(options);\n    }\n}\n","export const aaDeletedItems = new Map();","import { aaDeletedItems } from \"../deletedItems\";\n\nexport async function getRequiredData(data) {\n    //let {item, itemId, itemUuid, itemName, token, tokenId, tokenUuid, targets, targetIds, actorId, actor, templateId, ammoId} = data;\n\n    // set up token and item ... and try to set up token some more if it still doesn't work\n    if (!data.token) {\n        data.token = getToken(data);\n    }\n    if (!data.item) {\n        data.item = await getItem(data)\n    }\n    // Super hacky way of trying to get an AOE item cast by the Magic Items module\n    if (!data.item && data.itemUuid) {\n        if (game.modules.get(\"magicitems\")?.active) {\n            const splitUuid = data.itemUuid.split('.');\n            const id = splitUuid[splitUuid.length - 1];\n            data.item = game.packs.get(\"dnd5e.spells\")?.index?.get(id)\n        }\n    }\n    if (!data.token && data.item) {\n        // Last ditch effort to find a token\n        data.token = data.item.parent?.token ?? getTokenFromItemID(data.item.id) ?? _token\n    }\n    if (!data.token) {\n        data.token = _token;\n    }\n\n    // set up targets\n    if (!data.targets && data.targetIds?.length) {\n        data.targets = data.targetIds.map((id) => canvas.scene.tokens.get(id)?.object).filter(x => !!x);\n    }\n    if (!data.targets) {\n        data.targets = Array.from(game.user.targets)\n    }\n\n    // set up ammo\n    if (data.ammoId && !data.ammoItem && data.token) {\n        data.ammoItem = getItemFromToken(data.token, data.ammoId);\n    }\n\n    // set up template\n    if (!data.templateData && data.templateDataId) {\n        data.templateData = canvas.scene.templates.get(data.templateDataId);\n    }\n    if (data.templateData) {\n        data.isTemplate = true;\n    }\n\n    // set up empty name arrays so each system handler doesn't have to define them on their own\n    data.extraNames ||= [];\n    data.overrideNames ||= [];\n\n    Hooks.callAll(\"aa.getRequiredData\", data);\n\n    return { ...data }\n    //return {item: data.item, token: data.token, targets: data.targets}\n}\n\nasync function getItem(data) {\n    let {item, itemId, itemUuid, itemName, token, tokenId, tokenUuid, targets, actorId, actor} = data;\n    return itemUuid \n            ? await getItemFromUuid(itemUuid)\n            : token && itemId\n            ? getItemFromToken(token, itemId)\n            : tokenId && itemId\n            ? getItemFromTokenId(tokenId, itemId)\n            : tokenUuid && itemId\n            ? getItemFromTokenUuid(tokenUuid, itemId)\n            : token && itemName\n            ? getItemFromName(token, itemName)\n            : itemId && (actorId || actor)\n            ? await getItemFromCompiledUuid(itemId, actor, actorId)\n            : itemId\n            ? checkDeletedItems(itemId) || getItemFromIdBlind(itemId)\n            : null\n}\nasync function getItemFromUuid(uuid) {\n    return await fromUuid(uuid) || checkDeletedItems(uuid)\n}\nfunction checkDeletedItems(id) {\n    let idSplit = id.split('.');\n    return aaDeletedItems.get(idSplit[idSplit.length - 1]) || false;\n}\n// TO-DO: This can return null in some instances, follow up \nasync function getItemFromCompiledUuid(itemId, actor, actorId) {\n    const idActor = actor ? actor.id : actorId;\n    return await fromUuid(`Actor.${idActor}.Item.${itemId}`);\n}\nfunction getItemFromToken(token, itemId) {\n    return token.actor?.items?.get(itemId)\n}\nfunction getItemFromTokenId(tokenId, itemId) {\n    let token = getTokenFromScene(tokenId) || getTokenFromCompiledUuid(tokenId);\n    if (!token) { return; }\n    return getItemFromToken(token, itemId);\n}\nfunction getItemFromTokenUuid(tokenUuid, itemId) {\n    let token = getTokenFromUuid(tokenUuid);\n    if (!token) { return; }\n    return getItemFromToken(token, itemId);\n}\nfunction getItemFromName(token, name) {\n    let items = Array.from(token.actor.items);\n    return items.find(x => x.name === name)\n}\nfunction getItemFromIdBlind(id) {\n    for (let token of canvas.tokens.placeables) {\n        let items = Array.from(token.actor.items);\n        let foundItem = items.find(c => c.id === id);\n        if (foundItem) { return foundItem || false}\n    }\n}\n\n\nfunction getToken(data) {\n    let {item, itemId, itemUuid, itemName, token, tokenId, tokenUuid, targets, actorId, actor} = data;\n\n    return item\n            ? item.parent?.token ?? getTokenFromItemID(item.id) \n            : tokenUuid\n            ? getTokenFromUuid(tokenUuid)\n            : tokenId\n            ? getTokenFromScene(tokenId) || getTokenFromCompiledUuid(tokenId)\n            : itemId\n            ? getTokenFromItemID(itemId)\n            : actor || actorId\n            ? getTokenFromActor(actor, actorId)\n            : null\n}\nfunction getTokenFromItemID(id) {\n    let tokens = canvas.tokens.placeables.filter(token => token.actor?.items?.get(id));\n    let trueToken = tokens.length > 1 ? tokens.find(x => x.id === _token.id) || tokens[0] : tokens[0];\n    return trueToken;\n}\nfunction getTokenFromScene(id) {\n    return canvas.scene.tokens.get(id);\n}\nfunction getTokenFromUuid(uuid) {\n    return fromUuidSync(uuid)?.object;\n}\nfunction getTokenFromCompiledUuid(id) {\n    return fromUuidSync(`${canvas.scene.uuid}.Token.${id}`)?.object;\n}\nfunction getTokenFromActor(actor, actorId) {\n    let idActor = actor ? actor.id : actorId;\n    let foundActor = fromUuidSync(idActor);\n    if (!foundActor) { return null }\n    let token = foundActor.getActiveTokens();\n    return Array.isArray(token) ? token[0] : token;\n}\n","import { debug }            from \"../constants/constants.js\";\nimport { trafficCop }       from \"../router/traffic-cop.js\";\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nconst activityCache = {};\n\n// DnD5e System hooks provided to run animations\nexport function systemHooks() {\n    if(!foundry.utils.isNewerVersion(game.system.version, 3.9)) return ui.notifications.error(`Automated Animations: This version of Automated Animations requires DnD5e 4.3 or higher, please downgrade to Automated Animations 5.0.10 or update your game system.`, {permanent: true});\n    Hooks.on(\"dnd5e.rollAttackV2\", async (rolls, data) => {\n            const roll = rolls[0];\n            const hit = roll.total >= (roll.options.target ?? 0);\n            const activity = data.subject;\n            activity.actor.hits ??= {};\n            activity.actor.hits[activity.relativeID] = hit;\n            if(activity?.description?.chatFlavor?.includes(\"[noaa]\")) return;\n            const playOnDamage = game.settings.get('autoanimations', 'playonDamageCore');\n            if (Object.keys(CONFIG.DND5E.areaTargetTypes).includes(activity?.target?.template?.type) || (activity?.damage?.parts?.length && activity?.type != \"heal\" && playOnDamage)) { return; }\n            const item = activity?.item;\n            criticalCheck(roll, item);\n            const ammoItem = item?.parent?.items?.get(data?.ammoUpdate?.id) ?? null;\n            const overrideNames = activity?.name && ![\"heal\", \"summon\"].includes(activity?.name?.trim()) ? [activity.name] : [];\n            attackV2(await getRequiredData({item: item, actor: item.parent, activity, roll: item, rollAttackHook: {item, roll}, spellLevel: roll?.data?.item?.level ?? void 0, ammoItem, overrideNames, hit}));\n        });\n    Hooks.on(\"dnd5e.rollDamageV2\", async (rolls, data) => {\n            const roll = rolls[0];\n            const activity = data.subject;\n            const hit = !!(activity.actor.hits?.[activity.relativeID] ?? true);\n            if(activity.actor.hits) delete activity.actor.hits[activity.relativeID];\n            if(activity?.description?.chatFlavor?.includes(\"[noaa]\")) return;\n            const playOnDamage = game.settings.get('autoanimations', 'playonDamageCore');\n            if (Object.keys(CONFIG.DND5E.areaTargetTypes).includes(activity?.target?.template?.type) || (activity?.type == \"attack\" && !playOnDamage)) { return; }\n            const item = activity?.item;\n            criticalCheck(roll, item);\n            const overrideNames = activity?.name && ![\"heal\", \"summon\"].includes(activity?.name?.trim()) ? [activity.name] : [];\n            damageV2(await getRequiredData({hit: hit, item, actor: item.parent, activity, roll: item, rollDamageHook: {item, roll}, spellLevel: roll?.data?.item?.level ?? void 0, overrideNames, }));\n        });\n    Hooks.on('dnd5e.postUseActivity', async (activity, usageConfig, results) => {\n        if (activity?.description?.chatFlavor?.includes(\"[noaa]\")) return;\n            if (Object.keys(CONFIG.DND5E.areaTargetTypes).includes(activity?.target?.template?.type) || ((activity?.damage?.parts?.length || activity?.type == \"heal\"))) { return; }\n            const config = usageConfig;\n            const options = results;\n            const item = activity?.item;\n            const overrideNames = activity?.name && ![\"heal\", \"summon\"].includes(activity?.name?.trim()) ? [activity.name] : [];\n            useItem(await getRequiredData({item, actor: item.parent, activity, roll: item, useItemHook: {item, config, options}, spellLevel: options?.flags?.dnd5e?.use?.spellLevel || void 0, overrideNames}));\n        });\n        Hooks.on(\"dnd5e.preUseActivity\", (activity, config) => {\n        if (activity?.description?.chatFlavor?.includes(\"[noaa]\")) return;\n            if(activity.item?.system?.uses?.autoDestroy) activityCache[activity.uuid] = activity;\n            setTimeout(() => {\n                if (activityCache[activity.uuid]) delete activityCache[activity.uuid];\n            }, 60000);\n        });\n        Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n            if (userId !== game.user.id) { return };\n            const activity = fromUuidSync(template.flags?.dnd5e?.origin) ?? activityCache[template.flags?.dnd5e?.origin];\n            if (!activity) return;\n            if (activity?.description?.chatFlavor?.includes(\"[noaa]\")) return;\n            const item = activity?.item;\n            const overrideNames = activity?.name && ![\"heal\", \"summon\"].includes(activity?.name?.trim()) ? [activity.name] : [];\n            templateAnimation(await getRequiredData({item, activity, templateData: template, roll: template, isTemplate: true, overrideNames}));\n        });\n}\n\nasync function useItem(input) {\n    debug(\"Item used, checking for animations\")\n    const handler = await AAHandler.make(input)\n    if (!handler?.item || !handler?.sourceToken) { console.log(\"Automated Animations: No Item or Source Token\", handler); return;}\n    trafficCop(handler)\n}\n\nasync function attackV2(input) {\n    checkReach(input)\n    debug(\"Attack rolled, checking for animations\");\n    const handler = await AAHandler.make(input)\n    if (!handler?.item || !handler?.sourceToken) { console.log(\"Automated Animations: No Item or Source Token\", handler); return;}\n    trafficCop(handler)\n}\n\nasync function damageV2(input) {\n    checkReach(input)\n    debug(\"Damage rolled, checking for animations\")\n    const handler = await AAHandler.make(input)\n    if (!handler?.item || !handler?.sourceToken) { console.log(\"Automated Animations: No Item or Source Token\", handler); return;}\n    trafficCop(handler)\n}\n\nasync function templateAnimation(input) {\n    debug(\"Template placed, checking for animations\")\n    if (!input.item) {\n        debug(\"No Item could be found\")\n        return;\n    }\n    const handler = await AAHandler.make(input)\n    trafficCop(handler)\n}\n\nfunction checkReach(data) {\n    data.reach = data.item.system?.properties?.rch ? 1 : 0;\n}\n\nfunction criticalCheck(roll, item = {}) {\n    if (!roll.isCritical && !roll.isFumble) { return; }\n    debug(\"Checking for Crit or Fumble\")\n    const critical = roll.isCritical;\n    const fumble = roll.isFumble;\n    const token = canvas.tokens.get(roll.tokenId) || getTokenFromItem(item);\n\n    const critAnim = game.settings.get(\"autoanimations\", \"CriticalAnimation\");\n    const critMissAnim = game.settings.get(\"autoanimations\", \"CriticalMissAnimation\");\n\n    switch (true) {\n        case (game.settings.get(\"autoanimations\", \"EnableCritical\") && critical):\n            new Sequence({moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")})\n                .effect()\n                .file(critAnim)\n                .atLocation(token)\n                .play()\n            break;\n        case (game.settings.get(\"autoanimations\", \"EnableCriticalMiss\") && fumble):\n            new Sequence({moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")})\n                .effect()\n                .file(critMissAnim)\n                .atLocation(token)\n                .play()\n            break;\n    }\n\n    function getTokenFromItem(item) {\n        const token = item?.parent?.token;\n        if (token) return token;\n        const tokens = canvas.tokens.placeables.filter(token => token.actor?.items?.get(item.id));\n        const fallBack = tokens[0];\n        const mostLikely = tokens.find(x => x.id === _token.id);\n        return mostLikely ?? fallBack;\n    }\n\n}\n","import { debug }            from \"../constants/constants.js\";\nimport { trafficCop }       from \"../router/traffic-cop.js\";\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\n// SW5e System hooks provided to run animations\nexport function systemHooks() {\n    if (game.modules.get(\"midi-qol\")?.active) {\n        Hooks.on(\"midi-qol.AttackRollComplete\", (workflow) => {\n            let playOnDamage = game.settings.get('autoanimations', 'playonDamage');\n            if (workflow.item?.hasAreaTarget || (workflow.item?.hasDamage && playOnDamage)) { return };\n            attack(getWorkflowData(workflow)); criticalCheck(workflow)\n        });\n        Hooks.on(\"midi-qol.DamageRollComplete\", (workflow) => { \n            let playOnDamage = game.settings.get('autoanimations', 'playonDamage');\n            if (workflow.item?.hasAreaTarget || (!playOnDamage && workflow.item?.hasAttack)) { return };\n            damage(getWorkflowData(workflow)) \n        });\n        // Items with no Attack/Damage\n        Hooks.on(\"midi-qol.RollComplete\", (workflow) => {\n            if (workflow.item?.hasAreaTarget || workflow.item?.hasAttack || workflow.item?.hasDamage) { return };\n            useItem(getWorkflowData(workflow))\n        });\n    \n    } else {\n        Hooks.on(\"sw5e.rollAttack\", async (item, roll) => {\n            let playOnDamage = game.settings.get('autoanimations', 'playonDamageCore')\n            if (item.hasAreaTarget || (item.hasDamage && playOnDamage)) { return; }   \n            attack(await getRequiredData({item, actor: item.actor, workflow: item}))\n        })\n        Hooks.on(\"sw5e.rollDamage\", async (item, roll) => {\n            let playOnDamage = game.settings.get('autoanimations', 'playonDamageCore')\n            if (item.hasAreaTarget || (item.hasAttack && !playOnDamage)) { return; }\n            damage(await getRequiredData({item, actor: item.actor, workflow: item}))\n        })\n        Hooks.on('sw5e.useItem', async (item, config, options) => {\n            if (item?.hasAreaTarget || item.hasAttack || item.hasDamage) { return; }\n            useItem(await getRequiredData({item, actor: item.actor, workflow: item}))\n        })\n    }\n    Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n        if (userId !== game.user.id) { return };\n        templateAnimation(await getRequiredData({itemUuid: template.flags?.sw5e?.origin, templateData: template, workflow: template, isTemplate: true}))\n    })\n}\n\n/**\n * \n * @param {Boolean} hasAreaTarget // Checks to see if the item has an AOE template\n * @param {Boolean} hasAttack // Checks if the item has Attack\n * @param {Boolean} hasDamage // Checks if the item has Damage\n *  \n */\n\nasync function useItem(input) {\n    debug(\"Item used, checking for animations\")\n    const handler = await AAHandler.make(input)\n    if (!handler?.item || !handler?.sourceToken) { console.log(\"Automated Animations: No Item or Source Token\", handler); return;}\n    trafficCop(handler)\n}\n\nasync function attack(input) {\n    checkAmmo(input)\n    checkReach(input)\n    debug(\"Attack rolled, checking for animations\");\n    const handler = await AAHandler.make(input)\n    if (!handler?.item || !handler?.sourceToken) { console.log(\"Automated Animations: No Item or Source Token\", handler); return;}\n    trafficCop(handler)\n}\n\nasync function damage(input) {\n    checkAmmo(input)\n    checkReach(input)\n    debug(\"Damage rolled, checking for animations\")\n    const handler = await AAHandler.make(input)\n    if (!handler?.item || !handler?.sourceToken) { console.log(\"Automated Animations: No Item or Source Token\", handler); return;}\n    trafficCop(handler)\n}\n\nasync function templateAnimation(input) {\n    debug(\"Template placed, checking for animations\")\n    if (!input.item) { \n        debug(\"No Item could be found\")\n        return;\n    }\n    const handler = await AAHandler.make(input)\n    trafficCop(handler)\n}\n\nfunction checkAmmo(data) {\n    //const ammo = data.item?.flags?.autoanimations?.fromAmmo;\n    const ammoType = data.item?.system?.consume?.type;\n    data.ammoItem = ammoType === \"ammo\" ? data.token?.actor?.items?.get(data.item?.system?.consume?.target) : null;\n}\n\nfunction checkReach(data) {\n    let reach = 0;\n    if (data.item.system?.properties?.rch) {\n        reach += 1;\n    }\n    data.reach = reach;\n}\n\nfunction getWorkflowData(data) {\n    return {\n        item: data.item,\n        token: data.token,\n        targets: Array.from(data.targets),\n        hitTargets: Array.from(data.hitTargets),\n        workflow: data,\n    }\n}\n\nfunction criticalCheck(workflow) {\n    if (!workflow.isCritical && !workflow.isFumble) { return; }\n    debug(\"Checking for Crit or Fumble\")\n    let critical = workflow.isCritical;\n    let fumble = workflow.isFumble;\n    let token;\n\n    let critAnim = game.settings.get(\"autoanimations\", \"CriticalAnimation\");\n    let critMissAnim = game.settings.get(\"autoanimations\", \"CriticalMissAnimation\");\n\n    switch (true) {\n        case (game.settings.get(\"autoanimations\", \"EnableCritical\") && critical):\n            token = canvas.tokens.get(workflow.tokenId);\n            new Sequence({moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")})\n                .effect()\n                .file(critAnim)\n                .atLocation(token)\n                .play()\n            break;\n        case (game.settings.get(\"autoanimations\", \"EnableCriticalMiss\") && fumble):\n            token = canvas.tokens.get(workflow.tokenId);\n            new Sequence({moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")})\n                .effect()\n                .file(critMissAnim)\n                .atLocation(token)\n                .play()\n            break;\n    }\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"DL.Action\", async (data) => {\n        const eventType = data.type\n\n        let compiledData = await getRequiredData({\n            itemId: data.itemId,\n            token: data.sourceToken,\n            targets: Array.isArray(data.targets) ? data.targets : Array.from(data.targets),\n            hitTargets: data.hitTargets ? Array.isArray(data.hitTargets) ? data.hitTargets : Array.from(data.hitTargets) : data.targets ? Array.isArray(data.targets) ? data.targets : Array.from(data.targets) : [],\n            workflow: data\n        })\n        if (!compiledData.item) { return; }\n        if (game.settings.get(\"autoanimations\", \"playtrigger\") === \"hits\") {\n            targets = hitTargets;\n        }\n\n        const canRunAnimations = () => {\n            const commonEventTypes = [\"apply-healing\"]\n            if (!compiledData.item?.hasDamage() && !compiledData.item?.hasHealing()) {\n                return true\n            }\n            if (game.settings.get(\"autoanimations\", \"playtrigger\") === \"rolldamage\") {\n                return commonEventTypes.concat([\"roll-damage\"]).includes(eventType)\n            }\n            if (game.settings.get(\"autoanimations\", \"playtrigger\") === \"applydamage\") {\n                return commonEventTypes.concat([\"apply-damage\"]).includes(eventType)\n            }\n            if (game.settings.get(\"autoanimations\", \"playtrigger\") === \"rollattack\") {\n                return commonEventTypes.concat([\"roll-attack\", \"use-spell\", \"use-talent\"]).includes(eventType);\n            }\n            return commonEventTypes.concat([\"roll-attack\"]).includes(eventType)\n        }\n\n        if (eventType && !canRunAnimations()) {\n            return {};\n        }\n\n        runDemonlord(compiledData)\n    });\n}\n\nasync function runDemonlord(data) {\n    const handler = await AAHandler.make(data)\n    trafficCop(handler);\n}\n","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { debug }            from \"../constants/constants.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nconst PF2E_SIZE_TO_REACH = {\n    tiny: 0,\n    sm: 5,\n    med: 5,\n    lg: 5,\n    huge: 10,\n    grg: 15,\n};\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.author.id !== game.user.id) { return };\n        const playOnDmg = game.settings.get(\"autoanimations\", \"playonDamageCore\")\n        if (msg.flags.pf2e?.context?.type === \"damage-taken\") {\n            // This can be removed if later A-A can differentiate animations on the same item. I guess.\n            debug (\"Caught a damage-taken message thats not meant to be animated, exiting main workflow\")\n            return;\n        }\n        let compiledData = await getRequiredData({\n            item: msg.item,\n            itemId: msg.flags.pf2e?.origin?.uuid,\n            token: msg.token?.object,\n            tokenId: msg.speaker?.token,\n            actorId: msg.speaker?.actor,\n            workflow: msg,\n            playOnDamage: playOnDmg,\n            bypassTemplates: true,\n        })\n        if (compiledData.item?.type === \"effect\" || compiledData.item?.type === \"condition\") {\n            debug (\"This is a Condition or Effect, exiting main workflow\")\n            return;\n        }\n        if (!compiledData.item) {\n            debug(\"No Item Found, exiting main Workflow\")\n            return;\n        }\n        compiledData.hitTargets = checkOutcome(compiledData);\n        runPF2e(compiledData)\n    });\n    Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n        if (userId !== game.user.id) { return };\n        let compiledData = await getRequiredData({\n            itemUuid: template.flags?.pf2e?.origin?.uuid,\n            templateData: template,\n            workflow: template,\n            isTemplate: true\n        })\n        // pf2e v5 includes on item getter on templates which handles variants\n        if (template.item) compiledData.item = template.item\n\n        templateAnimation(compiledData)\n    })\n}\n\nasync function templateAnimation(input) {\n    debug(\"Template placed, checking for animations\")\n    if (!input.item) {\n        debug(\"No Item could be found\")\n        return;\n    }\n    if (foundry.utils.isNewerVersion(game.system.version, \"5\")) {\n        if (input.item.isVariant) {\n            input.isVariant = true\n            input.originalItem = input.item.original\n        }\n    }\n    else {\n        // Spell variants can be identified by the template name\n        const templateName = input.templateData.flags?.pf2e?.origin?.name\n        // If item and template name differ, the variant spell can be created by applying the variants overlay\n        if (templateName && input.item.name !== templateName) {\n            // Search for the variant overlay by name\n            const overlayId = input.item.overlays.find(o => o.name == templateName)?._id\n            if (overlayId) {\n                input.item = input.item.loadVariant({ overlayIds: [overlayId] })\n                input.isVariant = true;\n                input.originalItem = input.item?.original;\n            }\n        }\n    }\n\n    const handler = await AAHandler.make(input)\n    trafficCop(handler)\n}\n\nasync function runPF2e(data) {\n    const itemType = data.item.type;\n\n    switch (itemType) {\n        case \"effect\":\n        case \"condition\":\n            debug(\"This is an Effect or Condition, exiting main workflow in deference to Active Effects\")\n            break;\n        case \"spell\":\n            runPF2eSpells(data)\n            break;\n        case \"weapon\":\n            if (!data.workflow.isRoll) { return; }\n            runPF2eWeapons(data)\n            break;\n        case \"consumable\":\n            playPF2e(data)\n            break;\n        default:\n            // Workaround for Feats and Actions not posting the Item UUID to the Template flags.\n            // Recheck later if that data is added to the Template\n            if (data.item?.type === \"feat\" || data.item.type === \"action\") {\n                let hasAOE = await checkFeatForAOE(data);\n                if (hasAOE) {\n                    playPF2e(data)\n                    return;\n                }\n            }\n            let hasDamage = itemHasDamage(data.item)\n            //hasDamage && data.playOnDamage && data.workflow.isDamageRoll ? playPF2e(data) : !hasDamage && !data.workflow.isDamageRoll ? playPF2e(data) : playPF2e(data)\n            if (hasDamage && data.playOnDamage && data.workflow.isDamageRoll) {\n                playPF2e(data)\n            } else if (!hasDamage && !data.workflow.isDamageRoll) {\n                playPF2e(data)\n            } else if (hasDamage && !data.playOnDamage && !data.workflow.isDamageRoll) {\n                playPF2e(data)\n            }\n    }\n}\n\nasync function checkFeatForAOE(data) {\n    return data.item?.system?.description?.value?.includes(\"@Template\")\n}\n\nfunction runPF2eWeapons (data) {\n    const playOnDamage = data.playOnDamage;\n    const msg = data.workflow;\n    const isAttackRoll = msg.flags.pf2e?.context?.type?.includes(\"attack\");\n\n    data.extraNames = [];\n    if (data.item.type === \"weapon\") {\n        const baseType = game.i18n.localize(CONFIG.PF2E.baseWeaponTypes[data.item.baseType]);\n        const group = game.i18n.localize(CONFIG.PF2E.weaponGroups[data.item.group]);\n        data.extraNames.push(baseType, group);\n    }\n\n    //debugger\n    if (playOnDamage && msg.isDamageRoll) {\n        playPF2e(data);\n    } else if (!playOnDamage && isAttackRoll) {\n        playPF2e(data);\n    }\n}\n\nasync function runPF2eSpells(data) {\n    const msg = data.workflow;\n    const item = data.item;\n    const playOnDamage = data.playOnDamage;\n    let spellType = getSpellType(item);\n\n    if (item.isVariant) {\n        data.isVariant = true\n        data.originalItem = item.original;\n    }\n\n    if (foundry.utils.isNewerVersion(game.system.version, \"5.8.3\")) {\n        // pf2e 5.9 removes spellType\n        if (item.system.traits.value.includes(\"healing\"))\n            spellType = \"heal\"\n        else if (item.system.traits.value.includes(\"attack\"))\n            spellType = \"attack\"\n        else\n            spellType = \"save\"\n    }\n\n    switch (spellType) {\n        case \"utility\":\n        case \"save\":\n            if (spellHasAOE(item)) { return; }\n            if (itemHasDamage(item) && msg.isDamageRoll) {\n                playPF2e(data)\n            } else if (!itemHasDamage(item)) {\n                playPF2e(data)\n            }\n            break;\n        case \"attack\":\n            if (!msg.isRoll) { return; }\n            if (playOnDamage && msg.isDamageRoll) {\n                playPF2e(data);\n            } else if (!playOnDamage && !msg.isDamageRoll) {\n                playPF2e(data);\n            } else if (!itemHasDamage(item) && !msg.isDamageRoll) {\n                playPF2e(data);\n            }\n            break;\n        case \"heal\":\n            if (msg.isDamageRoll) {\n                playPF2e(data);\n            }\n            break;\n    }\n}\nasync function playPF2e(input) {\n    if (!input.item) {\n        debug(\"No Item could be found\")\n        return;\n    }\n\n    if (input.item.traits) {\n        const reachTrait = input.item.traits.find((t) => /^reach-\\d+$/.test(t));\n        let reachValue = reachTrait ? Number(reachTrait.replace(\"reach-\", \"\")) : PF2E_SIZE_TO_REACH[input.item.actor?.size ?? \"med\"];\n        if (!reachTrait && input.item.traits.has(\"reach\")) {\n            reachValue += 5;\n        }\n\n        input.reach = Math.round(reachValue / 5) - 1;\n    }\n\n    const handler = await AAHandler.make(input)\n    trafficCop(handler);\n}\n/**\n *\n * @param {Object} item\n * @returns {String} spell || focus || ritual\n */\n function getSpellCategory(item) {\n    return item.system.category.value;\n}\n/**\n *\n * @param {Object} item\n * @returns {String} utility || save || heal || attack\n */\nfunction getSpellType(item) {\n    return item.system.spellType?.value;\n}\nfunction spellHasAttack(item) {\n    return getSpellType(item) === \"attack\"\n}\nfunction spellHasAOE(item) {\n    return item.system.area?.value && item.system.area?.type;\n}\n\nfunction findAttackOnItem(item) {\n    const type = item.type;\n    switch(type) {\n        case \"weapon\":\n            return true;\n        case \"spell\":\n        case \"focus\":\n        case \"ritual\":\n            return spellHasAttack(item)\n\n\n    }\n}\n\nfunction findDamageOnItem(item) {\n    const type = item.type;\n    switch (type) {\n        case \"weapon\":\n            return item.dealsDamage\n    }\n}\n\nfunction itemHasDamage(item) {\n    let damage =\n        item.system?.damage?.value // before pf2e 5.9 spell damage\n        || item.system?.damage // 5.9 spell damage\n        || item.system?.damageRolls // strike damage\n        || {};\n    return Object.keys(damage).length\n}\n\n/**\n *\n * @param {Object} item\n * @returns {String} Weapon's base type\n */\nfunction getWeaponBaseType(item) {\n    return item.baseType;\n}\n\nfunction checkOutcome(input) {\n    let outcome = input.workflow.flags?.pf2e?.context?.outcome;\n    outcome = outcome ? outcome.toLowerCase() : \"\";\n    let hitTargets;\n    if (input.targets.length < 2 && !game.settings.get('autoanimations', 'playonDamageCore') && outcome) {\n        if (outcome === 'success' || outcome === 'criticalsuccess') {\n            hitTargets = input.targets;\n        } else {\n            hitTargets = [];\n        }\n    } else {\n        hitTargets = input.targets;\n    }\n    return hitTargets;\n}\n","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { debug }            from \"../constants/constants.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nconst SF2E_SIZE_TO_REACH = {\n    tiny: 0,\n    sm: 5,\n    med: 5,\n    lg: 5,\n    huge: 10,\n    grg: 15,\n};\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.author.id !== game.user.id) { return };\n        const playOnDmg = game.settings.get(\"autoanimations\", \"playonDamageCore\")\n        if (msg.flags.sf2e?.context?.type === \"damage-taken\") {\n            // This can be removed if later A-A can differentiate animations on the same item. I guess.\n            debug (\"Caught a damage-taken message thats not meant to be animated, exiting main workflow\")\n            return;\n        }\n        let compiledData = await getRequiredData({\n            item: msg.item,\n            itemId: msg.flags.sf2e?.origin?.uuid,\n            token: msg.token?.object,\n            tokenId: msg.speaker?.token,\n            actorId: msg.speaker?.actor,\n            workflow: msg,\n            playOnDamage: playOnDmg,\n            bypassTemplates: true,\n        })\n        if (compiledData.item?.type === \"effect\" || compiledData.item?.type === \"condition\") {\n            debug (\"This is a Condition or Effect, exiting main workflow\")\n            return;\n        }\n        if (!compiledData.item) {\n            debug(\"No Item Found, exiting main Workflow\")\n            return;\n        }\n        compiledData.hitTargets = checkOutcome(compiledData);\n        runSF2e(compiledData)\n    });\n    Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n        if (userId !== game.user.id) { return };\n        let compiledData = await getRequiredData({\n            itemUuid: template.flags?.sf2e?.origin?.uuid,\n            templateData: template,\n            workflow: template,\n            isTemplate: true\n        })\n        // pf2e v5 includes on item getter on templates which handles variants\n        if (template.item) compiledData.item = template.item\n\n        templateAnimation(compiledData)\n    })\n}\n\nasync function templateAnimation(input) {\n    debug(\"Template placed, checking for animations\")\n    if (!input.item) {\n        debug(\"No Item could be found\")\n        return;\n    }\n    if (foundry.utils.isNewerVersion(game.system.version, \"5\")) {\n        if (input.item.isVariant) {\n            input.isVariant = true\n            input.originalItem = input.item.original\n        }\n    }\n    else {\n        // Spell variants can be identified by the template name\n        const templateName = input.templateData.flags?.sf2e?.origin?.name\n        // If item and template name differ, the variant spell can be created by applying the variants overlay\n        if (templateName && input.item.name !== templateName) {\n            // Search for the variant overlay by name\n            const overlayId = input.item.overlays.find(o => o.name == templateName)?._id\n            if (overlayId) {\n                input.item = input.item.loadVariant({ overlayIds: [overlayId] })\n                input.isVariant = true;\n                input.originalItem = input.item?.original;\n            }\n        }\n    }\n\n    if (input.item.type === \"weapon\") {\n        const baseType = game.i18n.localize(CONFIG.PF2E.baseWeaponTypes[input.item.system?.baseType]);\n        const group = game.i18n.localize(CONFIG.PF2E.weaponGroups[input.item.system?.group]);\n        input.extraNames.push(baseType, group);\n    }\n    const handler = await AAHandler.make(input)\n    trafficCop(handler)\n}\n\nasync function runSF2e(data) {\n    const itemType = data.item.type;\n\n    switch (itemType) {\n        case \"effect\":\n        case \"condition\":\n            debug(\"This is an Effect or Condition, exiting main workflow in deference to Active Effects\")\n            break;\n        case \"spell\":\n            runSF2eSpells(data)\n            break;\n        case \"weapon\":\n            if (!data.workflow.isRoll) { return; }\n            runSF2eWeapons(data)\n            break;\n        case \"consumable\":\n            playSF2e(data)\n            break;\n        default:\n            // Workaround for Feats and Actions not posting the Item UUID to the Template flags.\n            // Recheck later if that data is added to the Template\n            if (data.item?.type === \"feat\" || data.item.type === \"action\") {\n                let hasAOE = await checkFeatForAOE(data);\n                if (hasAOE) {\n                    playSF2e(data)\n                    return;\n                }\n            }\n            let hasDamage = itemHasDamage(data.item)\n            //hasDamage && data.playOnDamage && data.workflow.isDamageRoll ? playPF2e(data) : !hasDamage && !data.workflow.isDamageRoll ? playPF2e(data) : playPF2e(data)\n            if (hasDamage && data.playOnDamage && data.workflow.isDamageRoll) {\n                playSF2e(data)\n            } else if (!hasDamage && !data.workflow.isDamageRoll) {\n                playSF2e(data)\n            } else if (hasDamage && !data.playOnDamage && !data.workflow.isDamageRoll) {\n                playSF2e(data)\n            }\n    }\n}\n\nasync function checkFeatForAOE(data) {\n    return data.item?.system?.description?.value?.includes(\"@Template\")\n}\n\nfunction runSF2eWeapons (data) {\n    const playOnDamage = data.playOnDamage;\n    const msg = data.workflow;\n    const isAttackRoll = msg.flags.sf2e?.context?.type?.includes(\"attack\");\n\n    data.extraNames = [];\n    if (data.item.type === \"weapon\") {\n        const baseType = game.i18n.localize(CONFIG.PF2E.baseWeaponTypes[data.item.baseType]);\n        const group = game.i18n.localize(CONFIG.PF2E.weaponGroups[data.item.group]);\n        data.extraNames.push(baseType, group);\n    }\n\n    //debugger\n    if (playOnDamage && msg.isDamageRoll) {\n        playSF2e(data);\n    } else if (!playOnDamage && isAttackRoll) {\n        playSF2e(data);\n    }\n}\n\nasync function runSF2eSpells(data) {\n    const msg = data.workflow;\n    const item = data.item;\n    const playOnDamage = data.playOnDamage;\n    let spellType = getSpellType(item);\n\n    if (item.isVariant) {\n        data.isVariant = true\n        data.originalItem = item.original;\n    }\n\n    if (item.system.traits.value.includes(\"healing\"))\n        spellType = \"heal\"\n    else if (item.system.traits.value.includes(\"attack\"))\n        spellType = \"attack\"\n    else\n        spellType = \"save\"\n\n    switch (spellType) {\n        case \"utility\":\n        case \"save\":\n            if (spellHasAOE(item)) { return; }\n            if (itemHasDamage(item) && msg.isDamageRoll) {\n                playSF2e(data)\n            } else if (!itemHasDamage(item)) {\n                playSF2e(data)\n            }\n            break;\n        case \"attack\":\n            if (!msg.isRoll) { return; }\n            if (playOnDamage && msg.isDamageRoll) {\n                playSF2e(data);\n            } else if (!playOnDamage && !msg.isDamageRoll) {\n                playSF2e(data);\n            } else if (!itemHasDamage(item) && !msg.isDamageRoll) {\n                playSF2e(data);\n            }\n            break;\n        case \"heal\":\n            if (msg.isDamageRoll) {\n                playSF2e(data);\n            }\n            break;\n    }\n}\nasync function playSF2e(input) {\n    if (!input.item) {\n        debug(\"No Item could be found\")\n        return;\n    }\n\n    if (input.item.traits) {\n        const reachTrait = input.item.traits.find((t) => /^reach-\\d+$/.test(t));\n        let reachValue = reachTrait ? Number(reachTrait.replace(\"reach-\", \"\")) : SF2E_SIZE_TO_REACH[input.item.actor?.size ?? \"med\"];\n        if (!reachTrait && input.item.traits.has(\"reach\")) {\n            reachValue += 5;\n        }\n\n        input.reach = Math.round(reachValue / 5) - 1;\n    }\n\n    const handler = await AAHandler.make(input)\n    trafficCop(handler);\n}\n/**\n *\n * @param {Object} item\n * @returns {String} spell || focus || ritual\n */\n function getSpellCategory(item) {\n    return item.system.category.value;\n}\n/**\n *\n * @param {Object} item\n * @returns {String} utility || save || heal || attack\n */\nfunction getSpellType(item) {\n    return item.system.spellType?.value;\n}\nfunction spellHasAttack(item) {\n    return getSpellType(item) === \"attack\"\n}\nfunction spellHasAOE(item) {\n    return item.system.area?.value && item.system.area?.type;\n}\n\nfunction findAttackOnItem(item) {\n    const type = item.type;\n    switch(type) {\n        case \"weapon\":\n            return true;\n        case \"spell\":\n        case \"focus\":\n        case \"ritual\":\n            return spellHasAttack(item)\n\n\n    }\n}\n\nfunction findDamageOnItem(item) {\n    const type = item.type;\n    switch (type) {\n        case \"weapon\":\n            return item.dealsDamage\n    }\n}\n\nfunction itemHasDamage(item) {\n    let damage =\n        item.system?.damage?.value // before pf2e 5.9 spell damage\n        || item.system?.damage // 5.9 spell damage\n        || item.system?.damageRolls // strike damage\n        || {};\n    return Object.keys(damage).length\n}\n\n/**\n *\n * @param {Object} item\n * @returns {String} Weapon's base type\n */\nfunction getWeaponBaseType(item) {\n    return item.baseType;\n}\n\nfunction checkOutcome(input) {\n    let outcome = input.workflow.flags?.sf2e?.context?.outcome;\n    outcome = outcome ? outcome.toLowerCase() : \"\";\n    let hitTargets;\n    if (input.targets.length < 2 && !game.settings.get('autoanimations', 'playonDamageCore') && outcome) {\n        if (outcome === 'success' || outcome === 'criticalsuccess') {\n            hitTargets = input.targets;\n        } else {\n            hitTargets = [];\n        }\n    } else {\n        hitTargets = input.targets;\n    }\n    return hitTargets;\n}\n","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    // TO-DO: Create chat message parsing function. SFRPG errors out on trying to post an item to chat\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        function extractItemId(content) {\n            try {\n                return $(content).attr(\"data-item-id\");\n            } catch (exception) {\n                console.log(\"COULD NOT GET ITEM ID\")\n                return null;\n            }\n        }\n        const itemId = extractItemId(msg.content);\n        if (!itemId) { return; }\n        const tokenId = msg.speaker.token;\n        const sourceToken = canvas.tokens.get(tokenId) || canvas.tokens.placeables.find(token => token.actor?.items?.get(itemId));\n\n        if (!sourceToken) { return; }\n\n        const item = sourceToken.actor?.items?.get(itemId)\n        if (item.type === 'feat') { return; }\n\n        if (!item.hasAttack && !item.hasDamage) {\n            let findData = funkyTest(msg);\n            let compiledData = await getRequiredData({itemId: findData.itemId, tokenId: findData.tokenId, actorId: findData.actorId, workflow: msg})\n            runStarfinder(compiledData)\n        }\n    });\n    Hooks.on(\"damageRolled\", async (data) => {\n        if (!game.settings.get(\"autoanimations\", \"playonDamage\") && data.item?.hasAttack) { return; }\n        Hooks.once(\"createChatMessage\", async (msg) => {\n            if (msg.user.id !== game.user.id) { return };\n            let compiledData = await getRequiredData({item: data.item, tokenId: msg.speaker.token, actorId: msg.speaker.actor, workflow: data})\n            runStarfinder(compiledData)\n        });\n    });\n    Hooks.on(\"attackRolled\", async (data) => {\n        if (game.settings.get(\"autoanimations\", \"playonDamage\") && data.item?.hasDamage) { return; }\n        Hooks.once(\"createChatMessage\", async (msg) => {\n            if (msg.user.id !== game.user.id) { return };\n            let compiledData = await getRequiredData({item: data.item, tokenId: msg.speaker.token, actorId: msg.speaker.actor, workflow: data})\n            runStarfinder(compiledData)\n        });\n    })\n}\n\nasync function runStarfinder(data) {\n    if (!data.item) { return; }\n    const handler = await AAHandler.make(data)\n    trafficCop(handler);\n}\n\nfunction funkyTest(msg) {\n    //let findItemId = $(msg.content).find(`[data-item-id]`);\n    let filterItemId = $(msg.content).filter(`[data-item-id]`);\n    let itemId = filterItemId?.[0]?.attributes?.['data-item-id']?.value || filterItemId?.prevObject?.[0]?.attributes?.['data-item-id']?.value;\n    if (!itemId) {\n        const systemId = game.system.id;\n        let flags = msg.flags;\n        itemId = flags.itemId ??\n                flags.ItemId ??\n                flags[systemId]?.itemId ??\n                flags[systemId]?.ItemId ??\n                msg.rolls?.[0]?.options?.itemId\n    }\n\n    let filterTokenId = $(msg.content).filter(`[data-token-id]`);\n    let tokenId = filterTokenId?.[0]?.attributes?.['data-token-id']?.value || filterTokenId?.prevObject?.[0]?.attributes?.['data-token-id']?.value;\n    let splitTokenId = tokenId?.split(\".\");\n    if (splitTokenId?.length > 1) {\n        tokenId = splitTokenId[splitTokenId.length - 1]\n    }\n\n    let filterActorId = $(msg.content).filter(`[data-actor-id]`);\n    let actorId = filterActorId?.[0]?.attributes?.['data-actor-id']?.value || filterActorId?.prevObject?.[0]?.attributes?.['data-actor-id']?.value;\n\n    return {itemId, tokenId, actorId}\n}\n","import { debug } from \"../constants/constants.js\";\nimport { trafficCop } from \"../router/traffic-cop.js\";\nimport AAHandler from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData } from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    /**\n     * Default system hooks\n     */\n    Hooks.on(\"swadeAction\", async (SwadeTokenOrActor, SwadeItem, SwadeAction, SwadeRoll, userId) => {\n        if (!SwadeRoll) { return; }\n        const playtrigger = game.settings.get(\"autoanimations\", \"playtrigger\");\n        if (!SwadeItem.system.damage || //If the item doesn't have damage, we run anims on trait rolls regardless of the playtrigger setting\n            (SwadeAction === \"damage\" && playtrigger === \"onDamage\") || //This is a damage roll and we want to run on damage rolls\n            (SwadeAction === \"formula\" && playtrigger === \"onAttack\")) { //This is a trait roll and we want to run on trait rolls\n            const controlledTokens = canvas.tokens.controlled;\n            let token;\n            if (controlledTokens.length > 0) {\n                token = controlledTokens.find(token => token.document.actorId === SwadeTokenOrActor.id);\n            }\n            if (token) { SwadeTokenOrActor = token; }\n            runSwade(SwadeTokenOrActor, SwadeTokenOrActor, SwadeItem);\n        }\n    });\n\n    Hooks.on(\"swadeConsumeItem\", async (SwadeItem, charges, usage) => {\n        const controlledTokens = canvas.tokens.controlled;\n        let token;\n        let SwadeTokenOrActor = SwadeItem.parent\n        if (controlledTokens.length > 0) {\n            token = controlledTokens.find(token => token.document.actorId === SwadeTokenOrActor.id);\n        }\n        if (token) {\n            SwadeTokenOrActor = token;\n        }\n        runSwade(SwadeTokenOrActor, SwadeTokenOrActor, SwadeItem);\n    });\n\n    Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n        if (userId !== game.user.id || !template.flags?.swade?.origin) return;\n        templateAnimation(await getRequiredData({ itemUuid: template.flags?.swade?.origin, templateData: template, workflow: template, isTemplate: true }))\n    });\n\n    /**\n     * Better Rolls hooks\n     */\n    function getBRSWData(data) {\n        return { token: data.token, actor: data.actor, item: data.item }\n    }\n\n    Hooks.on(\"BRSW-RollItem\", async (data, html) => {\n        const playtrigger = game.settings.get(\"autoanimations\", \"playtrigger\");\n        if (data.damage && playtrigger != \"onAttack\") { return; } //This is a damage roll and we're set to run anims on damage rolls\n\n        const { token, actor, item } = getBRSWData(data);\n        if (item.flags?.autoanimations?.menu === \"templatefx\" || (item.flags?.autoanimations?.menu === \"preset\" && item.flags?.autoanimations?.presetType === \"proToTemp\")) {\n            return //Return to prevent duplicate effects on placing a template.\n        } else { runSwade(token, actor, item) }\n    });\n\n    Hooks.on(\"BRSW-RollDamage\", async (data, html) => {\n        const playtrigger = game.settings.get(\"autoanimations\", \"playtrigger\");\n        if (!data.damage || playtrigger != \"onDamage\") { return; } //This is not a damage roll or we are not set to run on damage rolls\n\n        const { token, actor, item } = getBRSWData(data);\n        if (item.flags?.autoanimations?.menu === \"templatefx\" || (item.flags?.autoanimations?.menu === \"preset\" && item.flags?.autoanimations?.presetType === \"proToTemp\")) {\n            return //Return to prevent duplicate effects on placing a template.\n        } else { runSwade(token, actor, item) }\n    });\n\n    Hooks.on(\"BRSW-CreateItemCardNoRoll\", async (data) => {\n        const { token, actor, item } = getBRSWData(data);\n        if (item.flags?.autoanimations?.menu === \"templatefx\" || (item.flags?.autoanimations?.menu === \"preset\" && item.flags?.autoanimations?.presetType === \"proToTemp\")) {\n            return //Return to prevent duplicate effects on placing a template.\n        } else { runSwade(token, actor, item) }\n    });\n}\n\nasync function templateAnimation(input) {\n    debug(\"Template placed, checking for animations\")\n    if (!input.item) {\n        debug(\"No Item could be found\")\n        return;\n    }\n    const handler = await AAHandler.make(input);\n    trafficCop(handler);\n}\n// TO-DO, CHECK SWADE\nasync function runSwade(token, actor, item) {\n    let data = await getRequiredData({ token, actor, item });\n    if (!data.item) { return; }\n    const handler = await AAHandler.make(data);\n    trafficCop(handler);\n}","\nimport ItemMenuApp          from \"../formApps/_ItemMenu/ItemMenuApp.js\";\nimport { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { debug }            from \"../constants/constants.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n\n    BaseWFRP4eItemSheet.DEFAULT_OPTIONS.window.controls.push({\n        class: \"aaItemSettings\",\n        icon: \"fas fa-biohazard\",\n        action: \"aaItemSettings\",\n        label: \"A-A\"\n    });\n\n    BaseWFRP4eItemSheet.DEFAULT_OPTIONS.actions.aaItemSettings = function () {\n        new ItemMenuApp(this.item, {}).render(true, { focus: true });\n    };\n    \n    Hooks.on(\"wfrp4e:rollWeaponTest\", async (data, info) => {\n        if (game.user.id !== info.user) { return }\n        let compiledData = await getRequiredData({\n            item: data.weapon,\n            targets: compileTargets(data.context?.targets),\n            tokenId: info.speaker?.token,\n            actorId: info.speaker?.actor,\n            workflow: data\n        })\n        compiledData.targets = data.context?.targets ? Array.from(data.context?.targets).map(token => canvas.tokens.get(token.token)) : [];\n        runWarhammer(compiledData)\n    });\n    Hooks.on(\"wfrp4e:rollPrayerTest\", async (data, info) => {\n        if (data.result.outcome != \"success\" && game.settings.get('autoanimations', 'castOnlyOnSuccess')) { return }\n        let compiledData = await getRequiredData({\n            item: data.prayer,\n            targets: compileTargets(data.context?.targets),\n            tokenId: info.speaker?.token,\n            actorId: info.speaker?.actor,\n            workflow: data\n        })\n        runWarhammer(compiledData)\n    });\n    Hooks.on(\"wfrp4e:rollCastTest\", async (data, info) => {\n        if (game.user.id !== info.user) { return }\n        if (data.result.castOutcome != \"success\" && game.settings.get('autoanimations', 'castOnlyOnSuccess')) { return }\n        let compiledData = await getRequiredData({\n            item: data.spell,\n            targets: compileTargets(data.context?.targets),\n            tokenId: info.speaker?.token,\n            actorId: info.speaker?.actor,\n            workflow: data\n        })\n        runWarhammer(compiledData)\n    });\n\n    Hooks.on(\"wfrp4e:applyDamage\", async (scriptArgs) => {\n        if (!game.user.isGM) { return }\n        if (scriptArgs.opposedTest.attackerTest.result.castOutcome != \"success\" || !scriptArgs.opposedTest.attackerTest.spell?.system?.magicMissile?.value) { return }\n        let compiledData = await getRequiredData({\n            item: scriptArgs.opposedTest.attackerTest.spell,\n            targets: game.canvas.tokens.getDocuments().filter(x=>x.actorId == scriptArgs.opposedTest.defenderTest.data.context.speaker.actor),\n            tokenId: game.canvas.tokens.getDocuments().find(x=>x.actorId == scriptArgs.opposedTest.attackerTest.data.context.speaker.actor).id,\n            actorId: scriptArgs.attacker.id,\n            workflow: scriptArgs.opposedTest.attackerTest\n        })\n        runWarhammer(compiledData)\n    });\n\n    Hooks.on(\"wfrp4e:rollTraitTest\", async (data, info) => {\n        if (game.user.id !== info.user) { return }\n        let compiledData = await getRequiredData({\n            item: data.trait,\n            targets: compileTargets(data.context?.targets),\n            tokenId: info.speaker?.token,\n            actorId: info.speaker?.actor,\n            workflow: data\n        })\n        runWarhammer(compiledData)\n    });\n    Hooks.on(\"wfrp4e:rollTest\", async (data, info) => {\n        if (game.user.id !== info.user) { return }\n        if (data.result.outcome != \"success\" && game.settings.get('autoanimations', 'castOnlyOnSuccess')) { return }\n        if (!data.skill) { return }\n        let compiledData = await getRequiredData({\n            item: data.skill,\n            targets: compileTargets(data.context?.targets),\n            tokenId: info.speaker?.token,\n            actorId: info.speaker?.actor,\n            workflow: data\n        })\n        runWarhammer(compiledData)\n    });\n    \n    Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n        if (userId !== game.user.id) { return };\n        if (template.flags?.wfrp4e?.itemuuid) {\n            const uuid = template.flags.wfrp4e.itemuuid;\n            const input = await getRequiredData({itemUuid: uuid, templateData: template, workflow: template, isTemplate: true});\n            if (!input.item) {\n                return;\n            }\n            const handler = await AAHandler.make(input)\n            await trafficCop(handler);\n        } else if (template.flags?.wfrp4e?.effectData) {\n            const item = await fromUuid(template.flags.wfrp4e.effectData.system.sourceData.item)\n            const effect = item.effects.get(template.flags.wfrp4e.effectData._id);\n            const input = await getRequiredData({itemUuid: effect.parent.uuid, templateData: template, workflow: template, isTemplate: true});\n            if (!input.item) {\n                return;\n            }\n            const handler = await AAHandler.make(input)\n            if (handler.templateData?.flags?.wfrp4e?.effectData && handler.animationData?.primary?.options) {\n                handler.templateData.hidden = true;\n            }\n            await trafficCop(handler);\n            const templateObj = game.scenes.current.templates.get(template.id);\n            await templateObj.update({hidden: true});\n        } else if (template.flags?.wfrp4e?.auraToken) {\n            const effectUuid = template.flags.wfrp4e.effectUuid;\n            const effect = await fromUuid(effectUuid)\n            const input = await getRequiredData({itemUuid: effect.parent.uuid, templateData: template, workflow: template, isTemplate: true});\n            if (!input.item) {\n                return;\n            }\n            const handler = await AAHandler.make(input)\n            await trafficCop(handler);\n        }\n    });\n\n    Hooks.on(\"AutomatedAnimations-WorkflowStart\", onWorkflowStart);\n}\n\nfunction onWorkflowStart(clonedData, animationData) {\n    if (clonedData.activeEffect?.constructor.name == \"Boolean\" && clonedData.activeEffect && animationData) { // item is ActiveEffect\n        let effect = clonedData.item;\n        if (effect.system.transferData.type == \"aura\" && effect.flags.autoanimations?.activeEffectType == \"aura\") {\n            let radius = clonedData.system.transferData.area.radius\n            animationData.primary.options.size = radius;\n        }\n        else if (effect.system.transferData.type == \"document\" && effect.system.transferData.area.aura.transferred && effect.flags.autoanimations?.activeEffectType == \"aura\") {\n            clonedData.stopWorkflow = true;\n        }\n    }\n    else if (clonedData.activeEffect?.constructor.name == \"EffectWfrp4e\" && clonedData.activeEffect?.system.transferData.type == \"aura\" && animationData) { // item is item. \n        if (clonedData.activeEffect.flags?.autoanimations.activeEffectType == \"aura\") {\n            animationData.primary.options.size = clonedData.activeEffect.system.transferData.area.radius;\n        }\n    }\n}\n\nasync function runWarhammer(data) {\n    if (!data.item) { return; }\n    const handler = await AAHandler.make(data)\n    await trafficCop(handler);\n}\n\nfunction compileTargets(targets) {\n    if (!targets) { return []; }\n    return Array.from(targets).map(token => canvas.tokens.get(token.token));\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n   Hooks.on(\"createChatMessage\", async (msg) => {\n    if (msg.author.id !== game.user.id) {\n      return;\n    }\n    const itemId = msg.system?.weaponId || msg.system?.spellId || msg.system?.skillId || msg.flags?.dcc?.ItemId;\n    let compiledData = await getRequiredData({\n      itemId,\n      actorId: msg.speaker?.actor,\n      tokenId: msg.speaker?.token,\n      workflow: msg\n    });\n    runDcc(compiledData);\n  });\n}\n\nasync function runDcc(input) {\n  const handler = await AAHandler.make(input)\n  trafficCop(handler);\n}\n","import { trafficCop } from \"../router/traffic-cop.js\"\nimport AAHandler from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData } from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) {\n            return\n        };\n\n        // is this good or necessary?\n        if (msg.speaker?.scene !== game.scenes.current?.id) {\n            return;\n        }\n\n        const data = {\n            actor: msg.itemSource?.actor,\n            actorId: msg.speaker?.actor,\n            ammoId: msg.flags.pf1?.metadata?.rolls?.attacks?.map((attack) => attack.ammo?.id)[0],\n            itemId: msg.flags.pf1?.metadata?.item,\n            item: msg.itemSource,\n            targets: (msg.flags.pf1?.metadata?.targets?.map(uuid => fromUuidSync(uuid)) ?? []).map(x => x.object),\n            templateDataId: msg.flags.pf1?.metadata?.template,\n            tokenId: msg.speaker?.token,\n            workflow: msg,\n        };\n        let compiledData = await getRequiredData(data);\n\n        // todo add ammo - looks like it might need to parsed out of the html content\n        const item = compiledData.item;\n        if (!item) {\n            return;\n        }\n\n        // set up override for \"action name\"\n        //  This is for cases like \"Staff of Fire\" that can cast \"Fireball\", \"Burning Hands\", \"Wall of Fire\"\n        //  We want to use those specific action names because we don't want to cast \"Fireball\" but see a \"Staff\" thwack everyone \n        //     ...as funny as that would be 😛\n        const actionId = msg.flags.pf1?.metadata?.action;\n        if (item && actionId) {\n            const actionName = item.actions?.get(actionId)?.name ?? '';\n            if (actionName) {\n                compiledData.overrideNames.push(actionName);\n            }\n        }\n\n        if (item instanceof pf1.documents.item.ItemWeaponPF || item instanceof pf1.documents.item.ItemAttackPF) {\n            // add weapon base types (i.e. if item \"Fancy Magic Stick\" is a base type \"Quarterstaff\" then we can fall back to quarterstaff)\n            compiledData.extraNames.push(...(item.system.baseTypes || []));\n\n            // fall back to weapon groups after base weapon name \n            const groupsOnItem = [\n                ...(item.system.weaponGroups?.value || []).map((key) => pf1.config.weaponGroups[key]),\n                ...(item.system.weaponGroups?.custom || []),\n            ].filter((x) => !!x);\n            compiledData.extraNames.push(...groupsOnItem);\n        }\n\n        runPF1(compiledData);\n    });\n}\n\nasync function runPF1(requiredData) {\n    const handler = await AAHandler.make(requiredData)\n    trafficCop(handler);\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n  // Create queue to handle interaction between template and item.\n  const queue = [];\n\n  Hooks.on(\"createChatMessage\", async (msg) => {\n    if (msg.user.id !== game.user.id) { return };\n\n    const item = await fromUuid(msg.flags?.a5e?.itemId);\n\n    // Get from queue\n    let templateData = [];\n    while (queue.length && queue[0][0] === item.uuid) templateData.push(queue.shift()[1]);\n\n    if (templateData.length) {\n      templateData.forEach((data) => runA5e(data));\n      return;\n    }\n\n    const compiledData = await getRequiredData({\n      item: item,  \n      itemUuid: msg.flags?.a5e?.itemId,\n      actorId: msg.speaker?.actorId,\n      tokenId: msg.speaker?.token,\n      workflow: msg,\n    });\n\n    runA5e(compiledData);\n  });\n\n  Hooks.on('a5e.measuredTemplatePlaced', async (item, templateData, userId) => {\n    if (userId !== game.user.id) return;\n    if (templateData.length) templateData = templateData[0];\n    else return;\n\n    const compiledData = await getRequiredData({\n      item,\n      templateData: templateData,\n      workflow: templateData,\n      isTemplate: true,\n    });\n\n    // Add to queue\n    queue.push([item.uuid, compiledData]);\n  });\n}\n\nasync function runA5e(input) {\n  const handler = await AAHandler.make(input);\n  if (!handler?.item || !handler?.sourceToken) return;\n  trafficCop(handler);\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n\n        let compiledData = await getRequiredData({\n            itemId: msg.rolls[0].options?.itemId,\n            actorId: msg.speaker?.actor,\n            tokenId: msg.speaker?.token,\n            workflow: msg,\n        })\n        if (!compiledData.item) { return; }\n        runA5e(compiledData)\n    });\n}\n\nasync function runA5e(input) {\n    const handler = await AAHandler.make(input)\n    trafficCop(handler);\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"ffgDiceMessage\", async (roll) => {\n\n        let compiledData = await getRequiredData({\n            item: roll.data,\n            workflow: roll,\n        })\n        if (!compiledData.item) { return; }\n        runStarwarsffg(compiledData)\n    });\n}\n\nasync function runStarwarsffg(input) {\n    const handler = await AAHandler.make(input)\n    trafficCop(handler);\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n\n        let compiledData = await getRequiredData({\n            itemId: msg.flags?.ose?.itemId,\n            actorId: msg.speaker?.actor,\n            tokenId: msg.speaker?.token,\n            workflow: msg,\n        })\n        runOse(compiledData)\n    });\n}\n\nasync function runOse(input) {\n    const handler = await AAHandler.make(input);\n    if (!handler?.item) { return; }\n    trafficCop(handler);\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n// WILL NEED REWORK AFTER THE V10 VERSION IS RELEASED\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n\n        function extractItemId(content) {\n            try {\n                return $(content).attr(\"data-item-id\");\n            } catch (exception) {\n                console.log(\"COULD NOT GET ITEM ID\")\n                return null;\n            }\n        }\n\n        let compiledData = await getRequiredData({\n            itemId: extractItemId(msg.content),\n            actorId: msg.speaker?.actor,\n            tokenId: msg.speaker?.token,\n            workflow: msg,\n        })\n        if (!compiledData.item) { return; }\n        runD35E(compiledData)\n    });\n}\n\nasync function runD35E(input) {\n    const handler = await AAHandler.make(input)\n    trafficCop(handler);\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n\n        let compiledData = await getRequiredData({\n            itemId: msg.flags?.itemID,\n            actorId: msg.speaker?.actor,\n            tokenId: msg.speaker?.token,\n            workflow: msg,\n        })\n        runCypherSystem(compiledData)\n    });\n}\n\nasync function runCypherSystem(input) {\n    if (input.itemId == \"recovery-roll\")\n    {\n        if ( game.settings.get(\"autoanimations\", \"EnableOnRecoveryRoll\"))\n        {\n            new Sequence()\n                .effect()\n                .file(game.settings.get(\"autoanimations\", \"RecoveryRollAnimation\"))\n                .atLocation(input.token)\n                .play();\n        }\n    }\n    else\n    {\n        // others, things here can fire a Crit or Fumble\n        // First crits etc\n        \n        const flagdata = input.workflow?.flags?.data;\n        const diceRoll = flagdata?.roll?.total;\n        \n        if (diceRoll) {\n            if (game.settings.get(\"autoanimations\", \"EnableCritical\") && diceRoll >= 19)\n            {\n                new Sequence()\n                    .effect()\n                    .file(game.settings.get(\"autoanimations\", \"CriticalAnimation\"))\n                    .atLocation(input.token)\n                    .play()\n            }\n            else if (game.settings.get(\"autoanimations\", \"EnableFumble\") && diceRoll <= flagdata.gmiRange)\n            {\n                new Sequence()\n                    .effect()\n                    .file(game.settings.get(\"autoanimations\", \"FumbleAnimation\"))\n                    .atLocation(input.token)\n                    .play()\n            }\n            else if (flagdata.pool == \"Might\" && game.settings.get(\"autoanimations\", \"EnableOnMightRoll\"))\n            {\n                new Sequence()\n                    .effect()\n                    .file(game.settings.get(\"autoanimations\", \"MightRollAnimation\"))\n                    .atLocation(input.token)\n                    .play()\n            }\n            else if (flagdata.pool == \"Speed\" && game.settings.get(\"autoanimations\", \"EnableOnSpeedRoll\"))\n            {\n                new Sequence()\n                    .effect()\n                    .file(game.settings.get(\"autoanimations\", \"SpeedRollAnimation\"))\n                    .atLocation(input.token)\n                    .play()\n            }\n            else if (flagdata.pool == \"Intellect\" && game.settings.get(\"autoanimations\", \"EnableOnIntellecRoll\"))\n            {\n                new Sequence()\n                    .effect()\n                    .file(game.settings.get(\"autoanimations\", \"IntellectRollAnimation\"))\n                    .atLocation(input.token)\n                    .play()\n            }\n        }\n\n        // Always check for an Item animation, as well as the pool/critical/GMI animation\n        if (input.item)\n        {\n            trafficCop(await AAHandler.make(input));\n        }\n    }\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n// WILL NEED REWORK AFTER THE V10 VERSION IS RELEASED\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n\n        function extractItemId(content) {\n            try {\n                return $(content).attr(\"data-item-id\");\n            } catch (exception) {\n                console.log(\"COULD NOT GET ITEM ID\")\n                return null;\n            }\n        }\n\n        let compiledData = await getRequiredData({\n            itemId: extractItemId(msg.content),\n            actorId: msg.speaker?.actor,\n            tokenId: msg.speaker?.token,\n            workflow: msg,\n        })\n        if (!compiledData.item) { return; }\n        runAlienRPG(compiledData)\n    });\n}\n\nasync function runAlienRPG(input) {\n    const handler = await AAHandler.make(input)\n    trafficCop(handler);\n}","import { debug } from \"../constants/constants.js\";\nimport { trafficCop } from \"../router/traffic-cop.js\";\nimport AAHandler from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData } from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        checkChatMessage(msg);\n    });\n}\n\nasync function checkChatMessage(msg) {\n    if (msg.user.id !== game.user.id) {\n        return;\n    }\n\n    let findData = extactData(msg);\n\n    if (!findData.itemId) {\n        debug(\"Could not extract Item ID from Chat Message HTML\");\n        return;\n    }\n\n    let compiledData = await getRequiredData({\n        itemId: findData.itemId,\n        actorId: msg.speaker?.actor || findData.actorId,\n        tokenId: msg.speaker?.token || findData.tokenId,\n        workflow: msg,\n    });\n    compiledData.attackRoll = findData.attackRoll;\n\n    await setFireModeOptions(compiledData);\n\n    let isAmmo = checkAmmo(compiledData);\n    if (isAmmo) {\n        compiledData.ammoItem = isAmmo;\n    }\n    const handler = await AAHandler.make(compiledData);\n    if (!handler?.item || !handler?.sourceToken) {\n        debug(\"No Item or Source Token\", handler);\n        return;\n    }\n    trafficCop(handler);\n}\n\nfunction getFireMode(data) {\n    let item = data.item || {};\n    let id = item.id;\n    let parent = item.parent;\n\n    /**\n     * Fire Mode types\n     * aimed\n     * autofire\n     * suppressive\n     */\n\n    let fireMode =\n        parent?.flags?.[\"cyberpunk-red-core\"]?.[`firetype-${id}`] ?? \"single\";\n    data.fireMode = fireMode;\n\n    return fireMode;\n}\n\nasync function setFireModeOptions(data) {\n    const fireMode = getFireMode(data);\n\n    let canMissTarget = game.settings.get(\"autoanimations\", \"canMissTarget\");\n    let isSuppressive = fireMode === \"suppressive\";\n    if (!isSuppressive && canMissTarget && data?.targets?.length) {\n        data.forceMiss = !(await isHit(data));\n    }\n\n    let autofireEnabled = game.settings.get(\"autoanimations\", \"autofire\");\n    if (autofireEnabled && [\"suppressive\", \"autofire\"].includes(fireMode)) {\n        if (isSuppressive) data.forceMiss = true;\n        data.overrideRepeat = 10;\n    }\n}\n\nfunction checkAmmo(data) {\n    const weapon = data?.item ?? {};\n    const token  = data?.token;\n    const actor  = token?.actor ?? weapon?.actor ?? null;\n    if (!actor || !weapon?.system) return null;\n\n    // Preferred path in v12: weapon.system.installedItems.list\n    const installedIds = weapon.system?.installedItems?.list ?? [];\n    const varieties = weapon.system?.ammoVariety ?? []; // e.g. [\"rifle\"]\n\n  // Find the first installed ammo item that matches variety and has >0 rounds if present\n  let ammoItem = null;\n    for (const id of installedIds) {\n        const it = actor.items?.get(id);\n        if (it?.type === \"ammo\") {\n            const matchesVariety = !varieties?.length || varieties.includes(it.system?.variety);\n            const hasAmmo = (typeof it.system?.amount !== \"number\") ? true : it.system.amount > 0;\n            if (matchesVariety && hasAmmo) { ammoItem = it; break; }\n        }\n    }\n\n  // --- Backward compatibility fallbacks (pre-v12) ---\n    if (!ammoItem) {\n        // Older fields sometimes carried a UUID like \"Actor.X.Item.Y\"\n        const ammoIdRaw = weapon.system?.magazine?.ammoId || weapon.system?.magazine?.ammoData?.uuid;\n        if (typeof ammoIdRaw === \"string\" && ammoIdRaw.length) {\n            const parts = ammoIdRaw.split(\".\");\n            const last = parts[parts.length - 1];\n            const legacy = actor.items?.get(last);\n            if (legacy?.type === \"ammo\") ammoItem = legacy;\n        }\n    }\n\n    // As a last resort, try to infer by name/variety from actor inventory (avoid duplicates!)\n    if (!ammoItem && varieties?.length) {\n        ammoItem = actor.items.find(i => i.type === \"ammo\" && varieties.includes(i.system?.variety));\n    }\n\n    return ammoItem ?? null;\n}\n\nfunction extactData(msg) {\n    let findItemId = $(msg.content).find(`[data-item-id]`);\n    let itemId = findItemId?.[0]?.attributes?.[\"data-item-id\"]?.value;\n\n    let findTokenId = $(msg.content).find(`[data-token-id]`);\n    let tokenId = findTokenId?.[0]?.attributes?.[\"data-token-id\"]?.value;\n\n    let findActorId = $(msg.content).find(`[data-actor-id]`);\n    let actorId = findActorId?.[0]?.attributes?.[\"data-actor-id\"]?.value;\n\n    let findAttackRoll = $(msg.content).find(\n        `span.clickable[data-action='toggleVisibility']`\n    );\n    let attackRoll = parseInt(findAttackRoll?.[0]?.innerHTML ?? 999);\n\n    return { itemId, tokenId, actorId, attackRoll };\n}\n\nfunction getDistance(token, target) {\n    if (token.document) token = token.document;\n    const a = canvas.grid.measureDistance(token, target, {\n        gridSpaces: true,\n    });\n\n    if (!game.settings.get(\"autoanimations\", \"useElevation\")) return a;\n    const b = token.elevation - target.document.elevation;\n    return Math.round(Math.sqrt(a * a + b * b));\n}\n\nasync function getDV(dvTable, dist) {\n    // try to use imported table first\n    let table = await game.tables.getName(dvTable);\n    if (!table) {\n        const compendium = game.settings.get(\n            game.system.id,\n            \"dvRollTableCompendium\"\n        );\n        const pack =\n            game.packs.get(compendium) || // what is configured in the system\n            game.packs.get(\"cyberpunk-red-core.internal_dv-tables\") || // 0.88.X and up\n            game.packs.get(\"cyberpunk-red-core.dv-tables\") || // 0.87.X\n            game.packs.get(\"cyberpunk-red-core.dvTables\"); // 0.86.X and below\n\n        const tableId = pack.index.getName(dvTable)?._id;\n        if (!tableId) {\n            debug(`Could not get table with name \"${dvTable}\" from compendium`);\n            return -100;\n        }\n        table = await pack.getDocument(tableId);\n    }\n    if (!table) {\n        debug(\n            `Could not get table with id \"${tableId}\" and name \"${dvTable}\" from compendium`\n        );\n        return -100;\n    }\n\n    const draw = await table.getResultsForRoll(dist);\n    if (!draw || draw.length === 0) {\n        debug(`Could not roll DV from table \"${dvTable}\"`);\n        return -100;\n    }\n\n    return parseInt(draw[0].text);\n}\n\nasync function isHit(data) {\n    let distance = getDistance(data.token, data.targets[0]);\n    let dvTable = data.item?.system?.dvTable ?? \"\";\n    let dv;\n    if (data.fireMode === \"autofire\") {\n        dv = await getDV(dvTable + \" (Autofire)\", distance);\n        if (!dv || dv < 0) {\n            // fallback to none autofire DV table in case it does not exist\n            // e.g. useful for pistols with auto fire\n            dv = await getDV(dvTable, distance);\n        }\n    } else {\n        dv = await getDV(dvTable, distance);\n    }\n    if (!dv || dv < 0) return true;\n    debug(`Was this roll a hit: ${data.attackRoll > dv}`);\n    return data.attackRoll > dv;\n}\n","import { trafficCop } from \"../router/traffic-cop.js\"\nimport AAHandler from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData } from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => { checkMessage(msg) });\n}\n\nasync function checkMessage(msg) {\n    if (msg.user.id !== game.user.id) { \n        return \n    };\n\n    let data = msg.system ?? msg.flags?.TheWitcherTRPG\n    console.log(data)\n    let compiledData = await getRequiredData({\n        itemUuid: data?.attack?.itemUuid,\n        attackSkill: data?.attack?.attackSkill ?? data?.attack?.skill,\n        damage: data?.damage,\n        actorId: msg.speaker?.actor,\n        tokenId: msg.speaker?.token,\n        sceneId: msg.speaker?.scene,\n        alias: msg.speaker?.alias,\n        extraNames: [],\n        workflow: msg,\n    })\n\n    let attackSkillEnabled = game.settings.get('autoanimations', 'attackSkill');\n    let damageEnabled = game.settings.get('autoanimations', 'damage');\n\n    if (!attackSkillEnabled && !damageEnabled) {\n        return null;\n    }\n\n    if (compiledData.attackSkill && attackSkillEnabled) {\n        compiledData.extraNames.push(compiledData.attackSkill);\n    }  else if (damageEnabled) {\n        compiledData.item = { name: compiledData.damage ? \"damage\" : \"no-damage\" };\n        compiledData.extraNames.push(compiledData.damage ? \"damage\" : \"no-damage\");\n    } else {\n        return null;\n    }\n\n    const handler = await AAHandler.make(compiledData)\n    trafficCop(handler);\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n        const flags = msg.flags?.twodsix ?? {};\n        const itemUuid = flags.itemUUID;\n        const tokenUuid = flags.tokenUUID;\n        const actorUuid = flags.actorUUID;\n        const rollClass = flags.rollClass;\n        routeMessage({itemUuid, tokenUuid, actorUuid, workflow: msg, rollClass})\n    });\n}\n\nasync function routeMessage(input) {\n    const requiredData = await getRequiredData(input);\n    if (!requiredData.item) { return; }\n    const hasDamage = requiredData.item.system?.damage ? true : false;\n    const playtrigger = game.settings.get(\"autoanimations\", \"playtrigger\")\n\n    if (!hasDamage || (playtrigger === \"onAttack\" && input.rollClass !== \"Damage\")) {\n        runTwoDSix(requiredData)\n        return;\n    }\n\n    if (hasDamage && input.rollClass === \"Damage\" && playtrigger === \"onDamage\") {\n        runTwoDSix(requiredData)\n        return;\n    }\n}\n\nasync function runTwoDSix(data) {\n    const handler = await AAHandler.make(data)\n    trafficCop(handler);\n\n}","/**\n * Support added by Madseumas\n */\n\nimport { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { AnimationState }   from \"../AnimationState.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id || !AnimationState.enabled) { return }\n        if (msg.getFlag('od6s', 'type') === 'damage') { return }\n        if (msg.getFlag('od6s', 'isExplosive')) {\n            if(!msg.getFlag('od6s','triggered')) { return }\n        }\n\n        // Was this from an actor-controlled vehicle?\n        let tokenId = '';\n        let actorId = '';\n        if(msg.getFlag('od6s', 'vehicle') && msg.getFlag('od6s', 'vehicle') !== '') {\n            const document = await fromUuid(msg.getFlag('od6s', 'vehicle'));\n            if (document.documentName === 'Token') {\n                tokenId = document.id;\n                const actor = game.scenes.viewed.tokens.filter(t => t.id === document.id)[0].actor;\n                actorId = actor.id;\n            } else {\n                /* Clean up later when both token and actor are embedded in the message flags */\n                tokenId = msg.speaker?.token;\n                actorId = msg.speaker?.actor;\n            }\n        } else {\n            tokenId = msg.speaker?.token === null ? \"\" : msg.speaker?.token;\n            actorId = msg.speaker?.actor;\n        }\n\n        let compiledData = await getRequiredData({\n            itemId: msg.flags?.od6s?.itemId,\n            actorId: actorId,\n            tokenId: tokenId,\n            workflow: msg,\n        })\n        runOd6s(compiledData)\n    });\n}\n\nasync function runOd6s(input) {\n    const handler = await AAHandler.make(input)\n    if (!handler) { return; }\n    trafficCop(handler);\n}\n","import { debug }            from \"../constants/constants.js\";\nimport { trafficCop }       from \"../router/traffic-cop.js\";\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {checkChatMessage(msg) });\n}\n\nasync function checkChatMessage(msg) {\n    if (msg.author !== game.user) { return };\n\n    let findData = funkyTest(msg);\n    if (!findData.itemId) { \n        debug(\"Unable to locate Item ID from Chat Message HTML\")\n        return;\n    }\n    let item = findData.item ?? msg.item ?? msg.itemSource;\n    let compiledData = await getRequiredData({\n        itemId: findData.itemId,\n        item: item,\n        actorId: msg.speaker?.actor || findData.actorId,\n        tokenId: msg.speaker?.token || findData.tokenId,\n        workflow: msg,\n    })\n    const handler = await AAHandler.make(compiledData)\n    if (!handler?.item || !handler?.sourceToken) { debug(\"No Item or Source Token\", handler); return;}\n    trafficCop(handler);\n}\n\nfunction funkyTest(msg) {\n\n    const element = document.createElement('div');\n    element.innerHTML = msg.content;\n\n    const elItemUUID = element.querySelector(\"[data-item-uuid]\")?.getAttribute(\"data-item-uuid\");\n    const elActorID = element.querySelector(\"[data-actor-id]\")?.getAttribute(\"data-actor-id\");\n    const elTokenUUID = element.querySelector(\"[data-token-uuid]\")?.getAttribute(\"data-token-uuid\");\n    const elItemID = element.querySelector(\"[data-item-id]\")?.getAttribute(\"data-item-id\");\n\n    const systemFlags = msg.flags[game.system.id] || {};\n    const flagItemID = systemFlags.itemId;\n    const flagActorID = systemFlags.actorId;\n    const flagTokenUUID = systemFlags.tokenUuid;\n    const flagItemUUID = systemFlags.itemUuid;\n\n\n    const token = fromUuidSync(flagTokenUUID || elTokenUUID) || canvas.tokens.get(msg.speaker?.token);\n    let item = fromUuidSync(flagItemUUID || elItemUUID) || msg.item || msg.itemSource\n    const actor = item?.actor || token?.actor || game.actors.get(flagActorID || elActorID);\n\n    if(!item) item = actor?.items.get(flagItemID || elItemID || msg.rolls?.[0]?.options?.itemId);\n\n    return {token, item, actor , itemId: item?.id, actorId: actor?.id, tokenId: token?.id};\n}","// Support submitted by FilippoPolo on GitHub\n\nimport { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n        const flags = msg.flags?.[\"dark-heresy\"] ?? {};\n        if(!flags.rollData) return;\n        const itemId = flags.rollData.itemId;\n        const tokenId = flags.rollData.tokenId;\n        const actorId = flags.rollData.ownerId;\n        const rollClass = flags.rollData.rollObject.class;\n\n        if(flags.rollData.flags.isAttack){\n            routeMessage({itemId, tokenId, actorId, workflow: msg, rollClass})\n        }\n        \n        checkCrit(flags.rollData)\n    });\n    Hooks.on(\"AutomatedAnimations-WorkflowStart\", onWorkflowStart);\n    Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n        if (userId !== game.user.id) { return };\n        templateAnimation(await getRequiredData({itemUuid: template.flags?.[\"dark-heresy\"]?.origin, templateData: template, workflow: template, isTemplate: true}))\n    })\n}\n\nasync function routeMessage(input) {\n    const requiredData = await getRequiredData(input);\n    if (!requiredData.item) { return; }\n    runDarkHeresy(requiredData);\n}\n\nasync function checkCrit(rollData) {\n    if(!rollData.flags.isDamageRoll) return;\n\n    let critAnim = game.settings.get(\"autoanimations\", \"criticalAnimation\");\n    if(!critAnim) return;\n\n    let delay = 100;\n    rollData.damages.forEach(damage => {\n        if(damage.righteousFury) {\n            new Sequence({moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")})\n                .effect()\n                .file(critAnim)\n                .atLocation(rollData.tokenId)\n                .missed()\n                .delay(delay)\n                .play()\n\n           delay += 200;\n        }\n    })\n}\n\nasync function runDarkHeresy(data) {\n    const handler = await AAHandler.make(data)\n    trafficCop(handler);\n}\n\nfunction onWorkflowStart(clonedData, animationData) {\n    // Repeat the animation in case of burst attacks.\n    if (animationData.primary != null && clonedData.workflow.flags[\"dark-heresy\"].rollData.attackType?.maxHits > 1) {\n        animationData.primary.options.repeat = clonedData.workflow.flags[\"dark-heresy\"].rollData.attackType.maxHits;\n        animationData.primary.options.repeatDelay = 500 / clonedData.workflow.flags[\"dark-heresy\"].rollData.attackType.maxHits\n    }\n}\n\nasync function templateAnimation(input) {\n    if (!input.item) { \n        return;\n    }\n    const handler = await AAHandler.make(input)\n    trafficCop(handler)\n}","import { AnimationState }   from \"../AnimationState.js\";\nimport { debug }            from \"../constants/constants.js\";\nimport { trafficCop }       from \"../router/traffic-cop.js\";\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {checkChatMessage(msg) });\n}\n\nconst TEST = {\n    Melee: 'MeleeAttackTest',\n    Thrown: 'ThrownAttackTest',\n    Range: 'RangedAttackTest',\n    Defense: 'PhysicalDefenseTest',\n    Spell: 'SpellCastingTest',\n    Drain: 'DrainTest',\n    Skill: 'SkillTest',\n}\n\n/* \n    This method handles ShadowRun 5e system specific behavior.\n    - For weapons, as the system has hundreds of weapon items with different names,\n        a second lookup if performed with the skill name to allow a quick setup while still offering the main base behavior.\n    - For spells, we use the same trick with the magic school as a fallback\n */\nasync function checkChatMessage(msg) {\n    if (msg.user.id !== game.user.id || !AnimationState.enabled) {\n        return;\n    }\n\n    const test = await game.shadowrun5e?.test?.fromMessage(msg.id);\n    if (!test) {\n        return;\n    }\n\n    // #1 Let's create the compiledData based on the test type\n    const compiledData = await computeCompiledData(msg, test);\n    if (!compiledData) {\n        return;\n    }\n\n    // #2 Evaluate if the item is a match in the AA configuration\n    if (await tryAnnimationWith(compiledData)) {\n        return;\n    }\n\n    // #3 If not, let's find a match using TEST-specific means as item name\n    switch (test.type) {\n        case TEST.Spell:\n            // For spells, the category (health / combat / illusion /...) is a good fallback\n            const category = compiledData.item?.system?.category;\n            if (category && await tryAnnimationWith(compiledData, category)) {\n                return;\n            }\n            break;\n    }\n\n    // #4 Last, we can try the skill. Use example:\n    //  - when doing perception tests\n    //  - when going sneaking tests\n    //  - ...\n    const skill = test.data?.action?.skill; // reverting to the skill\n    if (skill && await tryAnnimationWith(compiledData, skill)) {\n        return;\n    }\n}\n\nasync function computeCompiledData(msg, test)\n{\n    let item;\n    switch (test.type) {\n        case TEST.Skill:\n            item =  {\n                name: test.data?.action?.skill\n            };\n            break;\n\n        // In case of drain test, the item is the same as the Spell casting test, it's wrong\n        case TEST.Drain:\n            item = {\n                name: 'drain',\n            }\n            break;\n\n        // In case of defense test, the item is the attacker's one. Not good.\n        case TEST.Defense:\n            return;\n\n        default:\n            const itemUuid = test.data.sourceItemUuid;\n            item = await fromUuid(itemUuid);\n            if (!item) {\n                return;\n            }\n    }\n\n    const compiledData = await getRequiredData({\n        item: item,\n        actorId: msg.speaker?.actor,\n        tokenId: msg.speaker?.token,\n        workflow: msg,\n    });\n\n    if (!compiledData) {\n        return;\n    }\n    \n    if (test.type == TEST.Range) {\n        // In case of range, depending on the firing mode, multiple bullets might be fired.\n        // Let's override the repeat with that information.\n\n        // TODO: use test data once SR5 System has fixed the missing information\n        // let bulletCount = test.data.fireMode.value;\n        const message = game.messages.get(msg.id);\n        const bulletCount = message.flags?.shadowrun5e?.TestData?.data?.fireMode?.value;\n        if (bulletCount && bulletCount > 1)\n        {\n            compiledData.overrideRepeat = bulletCount;\n        }\n    }\n\n    return compiledData;\n}\n\nasync function tryAnnimationWith(compiledData, itemNameOverride) {\n    if (itemNameOverride) {\n        compiledData.item = {\n            name: itemNameOverride\n        }\n    }\n\n    const handler = await AAHandler.make(compiledData)\n    if (handler?.item && handler.sourceToken) { \n        trafficCop(handler);\n        return true;\n    }\n\n    return;\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"ds4.rollItem\", async (data) => {\n        let compiledData = await getRequiredData({\n           itemId: data.id,\n           actorId: data.actor,\n           workflow: data,\n       })\n       runDs4(compiledData)\n    });\n}\n\nasync function runDs4(input) {\n    const handler = await AAHandler.make(input);\n    if (!handler) { return; }\n    trafficCop(handler);\n}","import { debug } from \"../constants/constants.js\";\nimport { trafficCop } from \"../router/traffic-cop.js\";\nimport AAHandler from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData } from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n  Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n    if (userId !== game.user.id) {\n      return;\n    }\n\n    const item = template.flags?.dnd4e?.item;\n    /**\n     * We know it has an area target because we're placing a template for it, and the actual Item4e class doesn't\n     * transfer over with its getter.\n     */\n    item.hasAreaTarget = true;\n    const shouldPlay = shouldPlayAnimation(item, \"template\");\n\n    if (!shouldPlay) {\n      return;\n    }\n\n    const reqData = await getRequiredData({\n      item,\n      templateData: template,\n      workflow: template,\n      isTemplate: true,\n    });\n\n    templateAnimation(reqData);\n  });\n\n  Hooks.on(\"dnd4e.rollAttack\", async (item, targetData, speakerData) => {\n    const shouldPlay = shouldPlayAnimation(item, \"attack\");\n\n    if (!shouldPlay) {\n      return;\n    }\n\n    handleAnimation(\n      item,\n      speakerData,\n      targetData.targets,\n      targetData.targetHit\n    );\n  });\n\n  Hooks.on(\"dnd4e.rollDamage\", async (item, speakerData) => {\n    const shouldPlay = shouldPlayAnimation(item, \"damage\");\n\n    if (!shouldPlay) {\n      return;\n    }\n\n    const targets = Array.from(game.user.targets);\n\n    handleAnimation(item, speakerData, targets);\n  });\n\n  Hooks.on(\"dnd4e.rollHealing\", async (item, speakerData) => {\n    const shouldPlay = shouldPlayAnimation(item, \"healing\");\n\n    if (!shouldPlay) {\n      return;\n    }\n\n    const targets = Array.from(game.user.targets);\n\n    handleAnimation(item, speakerData, targets);\n  });\n\n  Hooks.on(\"dnd4e.usePower\", async (item, speakerData) => {\n    const shouldPlay = shouldPlayAnimation(item, \"usePower\");\n\n    if (!shouldPlay) {\n      return;\n    }\n\n    const targets = Array.from(game.user.targets);\n\n    handleAnimation(item, speakerData, targets);\n  });\n}\n\nfunction shouldPlayAnimation(item, hookName) {\n  const itemData = item.system ? item.system : item;\n  const aaHookToUse = itemData.macro?.autoanimationHook\n    ? itemData.macro.autoanimationHook\n    : false;\n\n  console.log(`should play animation for hook ${hookName}?`);\n\n  if (!aaHookToUse) {\n    const defaultHook = getItemDefault(itemData);\n    console.log(`using default hook: ${defaultHook}`);\n    return defaultHook === hookName;\n  } else {\n    console.log(\"has aa hook explicitly set\");\n    return aaHookToUse === hookName;\n  }\n}\n\nfunction hasAreaTarget(itemData) {\n  return [\n    \"closeBurst\",\n    \"closeBlast\",\n    \"rangeBurst\",\n    \"rangeBlast\",\n    \"wall\",\n  ].includes(itemData.rangeType);\n}\n\nfunction getItemDefault(itemData) {\n  if (hasAreaTarget(itemData)) {\n    return \"template\";\n  } else if (itemData.attack?.isAttack) {\n    return \"attack\";\n  } else if (itemData.hit?.isDamage) {\n    return \"damage\";\n  } else if (itemData.hit?.isHealing) {\n    return \"healing\";\n  } else {\n    return \"usePower\";\n  }\n}\n\nasync function handleAnimation(item, speakerData, targets, hitTargets = []) {\n  const token = game.scenes\n    .get(speakerData.scene)\n    .tokens.get(speakerData.token);\n\n  const workflowData = {\n    item,\n    token,\n    actor: null,\n    targets,\n    workflow: item,\n  };\n\n  if (hitTargets.length) {\n    workflowData.hitTargets = hitTargets;\n  }\n\n  const handler = await AAHandler.make(workflowData);\n  if (!handler?.item || !handler?.sourceToken) {\n    debug(\"Automated Animations: No Item or Source Token\", handler);\n    return;\n  }\n  trafficCop(handler);\n}\n\nasync function templateAnimation(input) {\n  debug(\"Template placed, checking for animations\");\n  if (!input.item) {\n    debug(\"No Item could be found\");\n    return;\n  }\n  const handler = await AAHandler.make(input);\n  trafficCop(handler);\n}\n","import { debug }            from \"../constants/constants.js\";\nimport { trafficCop }       from \"../router/traffic-cop.js\";\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\n// ARS System hooks provided to run animations\nexport function systemHooks() {\n\tHooks.on(\"createChatMessage\", async (msg) => {\n\t\t// Get context from the new flags structure\n\t\tconst context = msg.flags?.world?.context;\n\t\tif (!context) return;\n\n\t\t// Handle critical hits\n\t\tif (context.criticaled) {\n\t\t\tlet critAnim = game.settings.get(\"autoanimations\", \"CriticalAnimation\");\n\t\t\tlet targetToken = null;\n\t\t\t\n\t\t\t// Try to get target token from context\n\t\t\tif (context.targetTokenUuid) {\n\t\t\t\tconst targetDoc = await fromUuid(context.targetTokenUuid);\n\t\t\t\ttargetToken = targetDoc?.object || canvas.tokens.get(targetDoc?.id);\n\t\t\t}\n\t\t\t\n\t\t\t// Fallback to first target if available\n\t\t\tif (!targetToken && game.user.targets.size > 0) {\n\t\t\t\ttargetToken = Array.from(game.user.targets)[0];\n\t\t\t}\n\t\t\t\n\t\t\tif (targetToken) {\n\t\t\t\tnew Sequence({moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")})\n\t\t\t\t\t.effect()\n\t\t\t\t\t.file(critAnim)\n\t\t\t\t\t.atLocation(targetToken)\n\t\t\t\t\t.scaleToObject(2)\n\t\t\t\t\t.play();\n\t\t\t}\n\t\t}\n\n\t\t// Handle fumbles\n\t\tif (context.fumbled) {\n\t\t\tlet critMissAnim = game.settings.get(\"autoanimations\", \"CriticalMissAnimation\");\n\t\t\tlet sourceToken = null;\n\t\t\t\n\t\t\t// Get source token from actor UUID\n\t\t\tif (context.actorUuid) {\n\t\t\t\tconst actor = await fromUuid(context.actorUuid);\n\t\t\t\tif (actor) {\n\t\t\t\t\tconst tokens = actor.getActiveTokens();\n\t\t\t\t\tsourceToken = Array.isArray(tokens) ? tokens[0]?.object : tokens?.object;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Fallback to speaker token\n\t\t\tif (!sourceToken && msg.speaker?.token) {\n\t\t\t\tsourceToken = canvas.tokens.get(msg.speaker.token);\n\t\t\t}\n\t\t\t\n\t\t\tif (sourceToken) {\n\t\t\t\tnew Sequence({ moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\") })\n\t\t\t\t\t.effect()\n\t\t\t\t\t.file(critMissAnim)\n\t\t\t\t\t.atLocation(sourceToken)\n\t\t\t\t\t.scaleToObject(2)\n\t\t\t\t\t.play();\n\t\t\t}\n\t\t}\n\t   \n\t\t// Handle item usage (weapon attacks, spells, etc.)\n\t\tif (context.itemUuid) {\n\t\t\tconst item = await fromUuid(context.itemUuid);\n\t\t\tconst actor = context.actorUuid ? await fromUuid(context.actorUuid) : null;\n\t\t\t\n\t\t\tif (item) {\n\t\t\t\t// Get target token UUID if available\n\t\t\t\tlet targetTokenUuid = context.targetTokenUuid;\n\t\t\t\tlet targetIds = null;\n\t\t\t\tif (targetTokenUuid) {\n\t\t\t\t\tconst targetDoc = await fromUuid(targetTokenUuid);\n\t\t\t\t\tif (targetDoc?.id) {\n\t\t\t\t\t\ttargetIds = [targetDoc.id];\n\t\t\t\t\t}\n\t\t\t\t}\n\t   \n\t\t\t\t// Check if this is an attack roll (has criticaled or fumbled flag, or has targetTokenUuid)\n\t\t\t\tif (context.criticaled !== undefined || context.fumbled !== undefined || context.targetTokenUuid) {\n\t\t\t\t\t// This is an attack roll\n\t\t\t\t\tattack(await getRequiredData({\n\t\t\t\t\t\titem: item,\n\t\t\t\t\t\titemUuid: context.itemUuid,\n\t\t\t\t\t\tactor: actor,\n\t\t\t\t\t\ttargetIds: targetIds,\n\t\t\t\t\t\tworkflow: msg\n\t\t\t\t\t}));\n\t\t\t\t} else {\n\t\t\t\t\t// This is item usage (spell cast, item use, etc.)\n\t\t\t\t\tuseItem(await getRequiredData({\n\t\t\t\t\t\titem: item,\n\t\t\t\t\t\titemUuid: context.itemUuid,\n\t\t\t\t\t\tactor: actor,\n\t\t\t\t\t\tworkflow: msg\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Handle action usage (actions from action groups)\n\t\telse if (context.action) {\n\t\t\t// Actions are serialized, so we need to deserialize them\n\t\t\tconst action = context.action;\n\t\t\tconst actor = context.actorUuid ? await fromUuid(context.actorUuid) : null;\n\t\t\t\n\t\t\t// Try to get the item that contains this action\n\t\t\tlet item = null;\n\t\t\tif (context.itemUuid) {\n\t\t\t\titem = await fromUuid(context.itemUuid);\n\t\t\t} else if (action.parentuuid) {\n\t\t\t\titem = await fromUuid(action.parentuuid);\n\t\t\t}\n\t\t\t\n\t\t\tif (actor || item) {\n\t\t\t\tuseItem(await getRequiredData({\n\t\t\t\t\titem: item,\n\t\t\t\t\tactor: actor,\n\t\t\t\t\tworkflow: msg\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t});\n}\n\nasync function useItem(input) {\n\tdebug(\"Item used, checking for animations\")\n\tconst handler = await AAHandler.make(input)\n\tif (!handler?.item || !handler?.sourceToken) { console.log(\"Automated Animations: No Item or Source Token\", handler); return;}\n\ttrafficCop(handler)\n}\n\nasync function attack(input) {\n\tcheckAmmo(input)\n\tdebug(\"Attack rolled, checking for animations\");\n\tconst handler = await AAHandler.make(input)\n\tif (!handler?.item || !handler?.sourceToken) { console.log(\"Automated Animations: No Item or Source Token\", handler); return;}\n\ttrafficCop(handler)\n}\n\nfunction checkAmmo(data) {\n\t//const ammo = data.item?.flags?.autoanimations?.fromAmmo;\n\tconst ammoType = data.item?.system?.consume?.type;\n\tdata.ammoItem = ammoType === \"ammo\" ? data.token?.actor?.items?.get(data.item?.system?.consume?.target) : null;\n}\n\nfunction getWorkflowData(data) {\n    return {\n        item: data.item,\n        token: data.token,\n        targets: Array.from(data.targets),\n        hitTargets: Array.from(data.hitTargets),\n        spellLevel: data.castData?.castLevel ?? void 0,\n        workflow: data,\n    }\n}\n\n// Helper function to get token from item\nfunction getTokenFromItem(item) {\n    let token = item?.parent?.token;\n    if (token) { return token }\n    let tokens = canvas.tokens.placeables.filter(token => token.actor?.items?.get(item.id));\n    let trueToken = tokens.length > 1 ? tokens.find(x => x.id === _token.id) || tokens[0] : tokens[0];\n    return trueToken;\n}\n","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"chatOutput\", async (data) => {\n        let compiledData = await getRequiredData({\n           itemId: itemId,\n           actorId: actorId,\n           workflow: data,\n       })\n       runEd4(compiledData)\n    });\n}\n\nasync function runEd4(input) {\n    const handler = await AAHandler.make(input);\n    if (!handler) { return; }\n    trafficCop(handler);\n}\n","import { trafficCop }       from \"../router/traffic-cop\";\nimport AAHandler        from \"../system-handlers/workflow-data.js\";\nimport { debug }            from \"../constants/constants.js\";\nimport {getRequiredData }   from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n        const playOnDmg = game.settings.get(\"autoanimations\", \"playonDamageCore\")\n        let compiledData = await getRequiredData({\n            item: await fromUuid(msg.flags.ptu?.origin?.uuid),\n            itemId: msg.flags.ptu?.origin?.uuid,\n            token: msg.token?.object,\n            tokenId: msg.speaker?.token,\n            actorId: msg.speaker?.actor,\n            workflow: msg,\n            playOnDamage: playOnDmg,\n            bypassTemplates: true,\n        });\n        if (!compiledData.item) {\n            debug(\"PTU | No Item Found, exiting main Workflow\")\n            return;\n        }\n        compiledData.hitTargets = checkOutcome(compiledData);\n        runPtu(compiledData)\n    });\n    Hooks.on(\"createMeasuredTemplate\", async (template, data, userId) => {\n        if (userId !== game.user.id) { return };\n        let compiledData = await getRequiredData({\n            itemUuid: template.flags?.ptu?.origin?.uuid,\n            templateData: template,\n            workflow: template,\n            isTemplate: true\n        })\n        if (template.item) compiledData.item = template.item\n\n        templateAnimation(compiledData)\n    })\n}\n\nasync function templateAnimation(input) {\n    debug(\"Template placed, checking for animations\")\n    if (!input.item) {\n        debug(\"PTU | No Item could be found\")\n        return;\n    }\n    if (foundry.utils.isNewerVersion(game.system.version, \"5\")) {\n        if (input.item.isVariant) {\n            input.isVariant = true\n            input.originalItem = input.item.original\n        }\n    }\n    else {\n        // Spell variants can be identified by the template name\n        const templateName = input.templateData.flags?.ptu?.origin?.name\n        // If item and template name differ, the variant spell can be created by applying the variants overlay\n        if (templateName && input.item.name !== templateName) {\n            // Search for the variant overlay by name\n            const overlayId = input.item.overlays.find(o => o.name == templateName)?._id\n            if (overlayId) {\n                input.item = input.item.loadVariant({ overlayIds: [overlayId] })\n                input.isVariant = true;\n                input.originalItem = input.item?.original;\n            }\n        }\n    }\n\n    const handler = await AAHandler.make(input)\n    trafficCop(handler)\n}\n\nasync function runPtu(data) {\n    const msg = data.workflow;\n    const item = data.item;\n    const playOnDamage = data.playOnDamage;\n    const isDamageRoll = msg.isDamageRoll;\n\n    if(item.type === \"effect\" || item.type === \"condition\") {\n        debug (\"PTU | This is a Condition or Effect, exiting main workflow\")\n        return;\n    }\n\n    if (!msg.isRoll) { return; }\n    if (moveHasAOE(item)) { return; }\n    if ((playOnDamage && isDamageRoll) || (!playOnDamage && !isDamageRoll)) {\n        playPtu(data);\n    }\n}\n\nasync function playPtu(input) {\n    if (!input.item) {\n        debug(\"No Item could be found\")\n        return;\n    }\n\n    const handler = await AAHandler.make(input)\n    trafficCop(handler);\n}\n\nfunction moveHasAOE(item) {\n    return item.system.area?.value && item.system.area?.type;\n}\n\nfunction checkOutcome(input) {\n    let outcome = input.workflow.flags?.ptu?.context?.outcome;\n    outcome = outcome ? outcome.toLowerCase() : \"\";\n    let hitTargets;\n    if (input.targets.length < 2\n        && !game.settings.get('autoanimations', 'playonDamageCore')\n        && outcome)\n        {\n            if (outcome === 'success' || outcome === 'criticalsuccess') {\n                hitTargets = input.targets;\n            } else {\n                hitTargets = false\n            }\n    } else {\n        hitTargets = input.targets;\n    }\n    return hitTargets;\n}\n","// Support added by Wibble199\n// With thanks to @dodgepong (Lancer Weapon FX) for help\n\nimport AAHandler from \"../system-handlers/workflow-data\";\nimport { getRequiredData } from \"./getRequiredData\";\nimport { trafficCop } from \"../router/traffic-cop\";\n\nexport function systemHooks() {\n\t// The Lancer system does not expose any hooks for rolling items, so have to rely on reading the chat messages.\n\tHooks.on(\"createChatMessage\", async (msg) => {\n\t\tif (msg.user.id !== game.user.id) return;\n\n\t\tconst itemData = getHandlerInputData(msg);\n\t\tif (!itemData) {\n\t\t\treturn;\n\t\t}\n\n\t\t// getRequiredData attempts to resolve the token. It does so by first looking to see if an item has been passed\n\t\t// in the parameter object. If there is an item or item ID, it tries to get the owner of that item. This works\n\t\t// fine for weapons. However, in cases where the Lancer system does not provide an item/I'm using a fake item\n\t\t// (e.g. stabilize), then because getRequiredData can't access the item's owner, it defaults to using null as\n\t\t// the source token, even if I've provided a tokenId. So, if the itemData I've got from the chat message does\n\t\t// not contain either an itemId or an item object with an ID, then resolve the token here, and pass that in to\n\t\t// get around this issue.\n\t\tif (!itemData.itemId && !itemData.item?.id) {\n\t\t\titemData.token = game.canvas.tokens.get(msg.speaker?.token);\n\t\t}\n\n\t\tconst compiledData = await getRequiredData({\n\t\t\t...itemData,\n\t\t\tactorId: msg.speaker?.actor,\n\t\t\ttokenId: msg.speaker?.token,\n\t\t\tworkflow: msg\n\t\t});\n\n\t\tconst handler = await AAHandler.make(compiledData);\n\t\tif (!handler?.item || !handler?.sourceToken) return;\n\t\t\n\t\ttrafficCop(handler);\n\t});\n}\n\nfunction getHandlerInputData(msg) {\n\tconst parser = new DOMParser();\n\tconst messageDocument = parser.parseFromString(msg.content, \"text/html\");\n\n\t// As far as I can tell AA only seems to use the item.name property, so in some cases here I just pass a fake object\n\t// if there is no actual item (such as for core systems, or things such as \"Overheat\"). It's hacky but seems to work\n\n\n\t// Try to grab the data from the roll data that is encoded in the template.\n\t// Massive shout out to @dodgepong for this!\n\tconst encodedRollData = messageDocument.querySelector(\"[data-macro]\")?.dataset[\"macro\"];\n\tif (encodedRollData) {\n\t\tconst rollData = JSON.parse(decodeURIComponent(atob(encodedRollData)));\n\n\t\tswitch (rollData.fn) {\n\t\t\tcase \"prepareEncodedAttackMacro\":\n\t\t\tcase \"prepareActivationMacro\":\n\t\t\t\t// args[1] is the ID of the item that triggered the macro\n\t\t\t\t// If the user clicked the generic \"Melee/Ranged\" button, args[1] will be null. In this case we'll not\n\t\t\t\t// do any animation.\n\t\t\t\tconst itemId = rollData.args[1];\n\t\t\t\tif (!!itemId) return { itemId };\n\t\t\t\tbreak;\n\n\t\t\tcase \"prepareTechMacro\":\n\t\t\t\t// args[1] is the ID of the item that triggered the macro\n\t\t\t\t// If the user clicked the generic \"Tech\" button, args[1] will be null. In this case, return a fake obj\n\t\t\t\t// with the name \"Tech Attack\".\n\t\t\t\tconst techId = rollData.args[1];\n\t\t\t\tif (!!techId) return { itemId: techId };\n\t\t\t\treturn { item: { name: \"Tech Attack\" } };\n\t\t\t\n\t\t\tcase \"prepareOverheatMacro\":\n\t\t\t\treturn { item: { name: \"Overheat\" } };\n\n\t\t\tcase \"prepareStructureMacro\":\n\t\t\t\treturn { item: { name: \"Structure Damage\" } };\n\t\t}\n\t}\n\n\t// Item IDs not provided in message data, so try and pull from the HTML\n\t// For items, there is a `data-id` attribute in the root HTML content for the chat message\n\tconst itemId = messageDocument.body.children[0]?.dataset[\"id\"];\n\tif (!!itemId) {\n\t\treturn { itemId };\n\t}\n\n\t// Some other systems (such as cores or NPC features), do not have an item ID or roll data, so see if we can grab\n\t// the name from the chat card header and sent that as a fake item.\n\tconst headerText = messageDocument.querySelector('.lancer-header')?.textContent;\n\tif (typeof headerText === 'string' && !!headerText.length) {\n\t\tconst headerTextRinised = rinseHeader(headerText);\n\t\t// Used to check here whether this was the core system, but there are other items too that don't have an ID nor\n\t\t// roll data. There's probably too many places to check, so going to make the assumption that if the chat card\n\t\t// has a header, that header text can be used as the item name.\n\n\t\t// Stabilize headers are \"// <MECH NAME> HAS STABILIZED//\", so special case for that.\n\t\tif (headerTextRinised.toLowerCase().endsWith(\"has stabilized\")) {\n\t\t\treturn { item: { name: \"Stabilize\" } };\n\t\t}\n\n\t\treturn { item: { name: headerTextRinised } };\n\t}\n\n\t// Overcharging does not use the header like many other features, have to check a different element instead.\n\tconst statHeaderText = messageDocument.querySelector(\".lancer-stat-header\")?.textContent;\n\tif (typeof statHeaderText === 'string' && !!statHeaderText.length) {\n\t\tconst statHeaderTextRinsed = rinseHeader(statHeaderText);\n\n\t\t// Overcharging is in the form \"// <MECH NAME> is OVERCHARGING //\"\n\t\tif (statHeaderTextRinsed.toLowerCase().endsWith(\"is overcharging\")) {\n\t\t\treturn { item: { name: \"Overcharge\" } };\n\t\t}\n\t}\n\n\t// Otherwise, it's probably just a normal chat message or something, so ignore\n\treturn false;\n}\n\n/** @param {string} headerText */\nfunction rinseHeader(headerText) {\n\tif (headerText.startsWith(\"// \"))\n\t\theaderText = headerText.slice(3);\n\tif (headerText.endsWith(\" //\"))\n\t\theaderText = headerText.slice(0, headerText.length - 3);\n\treturn headerText;\n}\n","import { AnimationState }   from \"../AnimationState.js\";\nimport { debug }            from \"../constants/constants.js\";\nimport { trafficCop }       from \"../router/traffic-cop.js\";\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"renderChatMessage\", async (msg) => {\n        let rawDataMsg = msg.getFlag('anarchy','message-data');\n        if (!rawDataMsg){\n            return;\n        }\n        const anarchyData = JSON.parse(msg.getFlag('anarchy','message-data'));\n        checkChatMessageAnarchy(msg, anarchyData);\n    });\n}\n\nasync function checkChatMessageAnarchy(msg, anarchyData) {\n    if (msg.user.id !== game.user.id || !AnimationState.enabled) { \n        return;\n    }\n\n    const compiledData = await computeCompiledDataAnarchy(msg, anarchyData);\n    if (!compiledData) { \n        return;\n    }\n\n    if (await tryAnnimationWith(compiledData)) {\n        return;\n    }\n\n    // Depending on the type of the attack (e.g., ranged, melee), you can add more cases\n    switch (anarchyData.attackRoll.mode) {\n        case \"weapon\":\n            const weaponName = anarchyData.attackRoll.weapon.id; // Assuming the weapon id is a good fallback\n            if (weaponName && await tryAnnimationWith(compiledData, weaponName)) {\n                return;\n            }\n            break;\n        // Add cases for other modes if needed\n    }\n\n    // If no specific mode matches, try using the skill name for animation\n    const skill = anarchyData.attackRoll.skill.id;\n    if (skill && await tryAnnimationWith(compiledData, skill)) {\n        return;\n    }\n}\n\nasync function computeCompiledDataAnarchy(msg, anarchyData) {\n    let actor = game.actors.get(anarchyData?.attackRoll?.actor?.id);\n    debug('Anarchy actor', actor);\n    let weaponId = anarchyData?.attackRoll?.weapon.id;\n    let item = {\n        id: weaponId,\n        name: actor?.items?.get(weaponId)?.name,\n    };\n    \n    debug('Anarchy content to  getRequiredData:', {\n        item: item,\n        actorId: actor,\n    });\n    const compiledData = await getRequiredData({\n        item: item,\n        actorId: msg.speaker?.actor,\n        workflow: msg,\n    });\n\n    return compiledData;\n}\n\nasync function tryAnnimationWith(compiledData, itemNameOverride) {\n    if (itemNameOverride) {\n        compiledData.item = {\n            name: itemNameOverride\n        }\n    }\n\n    const handler = await AAHandler.make(compiledData);\n    if (handler?.item && handler.sourceToken) { \n        trafficCop(handler);\n        return true;\n    }\n\n    return false;\n}\n","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.user.id !== game.user.id) { return };\n        \n        let success = msg.system.result.isSuccess;\n        if (success == true && msg.system.result.damage.ed.value !== 0) { return };\n\n        let compiledData = await getRequiredData({\n            actorId: msg.speaker.actor ?? msg.system.context.speaker.actor,\n            targets: compileTargets(msg.system.context.targets),\n            itemUuid: msg.system.context.itemId,\n            workflow: msg,\n        })\n        if (!compiledData.item) { return; }\n        runWrathandGlory(compiledData)\n    });\n}\n\nfunction compileTargets(targets) {\n  if (!targets) { return []; }\n  return Array.from(targets).map(token => canvas.tokens.get(token.token));\n}\n\nasync function runWrathandGlory(input) {\n    console.log(input);\n    const handler = await AAHandler.make(input);\n    trafficCop(handler);\n}\n","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nconst idLocations = [\n    ['.magic-roll', 'data-spell-id'],\n    ['.weapon-roll', 'data-weapon-id'],\n    ['.skill-roll', 'data-skill-id'],\n    ['.ability-use', 'data-ability-id'],\n];\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.author.id !== game.user.id) { return };\n\n        // Extract the item id from the Roll Damage button.\n        // The item id is only available on successful spells casts, weapon attacks, and ability uses.\n        function extractItemId(content) {\n            const wrappedContent = \"<div>\" + content + \"</div>\"\n            try {\n                return idLocations.reduce(\n                    (id, location) => id || $(wrappedContent).find(location[0]).attr(location[1]),\n                    null\n                );\n            } catch (exception) {\n                console.log(\"COULD NOT GET ITEM ID\")\n                return null;\n            }\n        }\n\n        let compiledData = await getRequiredData({\n            itemId: extractItemId(msg.content),\n            actorId: msg.speaker?.actor,\n            tokenId: msg.speaker?.token,\n            workflow: msg,\n        })\n        if (!compiledData.item) { return; }\n        runDragonbane(compiledData);\n    });\n}\n\nasync function runDragonbane(input) {\n    const handler = await AAHandler.make(input);\n    trafficCop(handler);\n}\n","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n \t\tif (msg.author.id !== game.user.id) { return };\n        const systemName = 'impmal';\n\n        if (msg.system.class ==\"WeaponTest\") {\n            let compiledData = await getRequiredData({\n                actorId: msg.speaker.actor ?? msg.system.context.speaker.actor,\n                targets: compileTargets(msg.system.context.targetSpeakers),\n                itemId: msg.system.context.weaponId,\n                workflow: msg,\n            })\t\n            if (msg.system.data.burst == true) compiledData.overrideRepeat=3\n            if (msg.system.data.rapidFire == true) compiledData.overrideRepeat=6\n        \n            if (!compiledData.item) { return; }\n            runImpMal(compiledData)\n            checkCrit(msg)\n\n        } else {\n            let itemUuid = msg.system.context?.itemUsedUuid\n            let itemId = msg.system.context?.powerId ?? msg.system.context?.itemId ?? msg.system.context?.weaponId ?? msg.system.context?.skillItemId\n            \n            let compiledData = await getRequiredData({\n                actorId: msg.speaker.actor ?? msg.system.context?.speaker.actor,\n                targets: compileTargets(msg.system.context?.targetSpeakers),\n                itemUuid: itemUuid,\n                itemId: itemId,\n                item: itemId || itemUuid ? null: {name: msg.system.context?.skill},\n                workflow: msg,\n            })\n            if (!compiledData.item) { return; }\n            runImpMal(compiledData)\t\n        }\n\t});\n}\t\n\nfunction compileTargets(targets) {\n  if (!targets) { return []; }\n   return Array.from(targets).map(target => {\n      let token = game.scenes.get(target.scene)?.tokens.get(target.token)\n      return token?.constructor.name === \"TokenDocument\" ? token?.object : token;\n   });\n}\n\nasync function runImpMal(input) {\n    const handler = await AAHandler.make(input);\n    trafficCop(handler);\n}\n\nasync function checkCrit(msg) {\n    if(!msg.system.result.critical) return;\n    \n    let critAnim = game.settings.get(\"autoanimations\", \"criticalAnimation\");\n    if(!critAnim) return;\n\n    let critSequence = new Sequence({moduleName: \"Automated Animations\", softFail: !game.settings.get(\"autoanimations\", \"debug\")});\n\n    for(let target of compileTargets(msg.system.context?.targetSpeakers)){\n        critSequence\n        .effect()\n        .file(critAnim)\n        .atLocation(target)\n        .missed()\n        .delay(100)\n    }\n\n    critSequence.play();\n}\n","import { trafficCop } from \"../router/traffic-cop.js\"\nimport AAHandler from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData } from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => { checkMessage(msg) });\n}\n\nasync function checkMessage(msg) {\n    if (msg.user.id !== game.user.id) { \n        return \n    };\n\n    let flags = msg.flags?.SalvageUnion\n    let compiledData = await getRequiredData({\n        item: flags?.item,\n        actorId: msg.speaker?.actor,\n        tokenId: msg.speaker?.token,\n        sceneId: msg.speaker?.scene,\n        alias: msg.speaker?.alias,\n        extraNames: [],\n        workflow: msg,\n    })\n\n    const handler = await AAHandler.make(compiledData)\n    trafficCop(handler);\n}","import { trafficCop }       from \"../router/traffic-cop.js\"\nimport AAHandler            from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n    Hooks.on(\"chatOutput\", async (data) => {\n        let compiledData = await getRequiredData({\n           itemId: itemId,\n           actorId: actorId,\n           workflow: data,\n       })\n       runDeathInSpace(compiledData)\n    });\n}\n\nasync function runDeathInSpace(input) {\n    const handler = await AAHandler.make(input);\n    if (!handler) { return; }\n    trafficCop(handler);\n}\n","/**\n * @file aa-daggerheart.js\n * @version 1.0.1\n *\n * Compatibility: Designed and tested for Daggerheart system version 1.3.2.\n *\n * @Note\n * I implemented this code, overwriting the previous one.\n * If you have any questions about how it works, you can send a message to my Discord: `joaquinp98` or mail to: `joaquinperyera98@gmail.com`\n * But feel free to overwrite this code at any time if you wish.\n */\n\nimport { trafficCop } from \"../router/traffic-cop.js\";\nimport { getRequiredData }  from \"./getRequiredData.js\";\nimport AAHandler from \"../system-handlers/workflow-data.js\";\n\n/**\n * CONSTANTS\n */\nconst VALID_MESSAGE_TYPES = [\"adversaryRoll\", \"dualityRoll\"];\n\n/**\n * Registers system hooks.\n */\nexport function systemHooks() {\n   Hooks.on(\"createChatMessage\", handleChatMessageCreation);\n}\n\n/**\n * Hook callback that fires after conclusion of a creation workflow of a ChatMessage.\n * @param {foundry.documents.ChatMessage} msg - The new ChatMessage instance.\n * @param {Partial<foundry.abstract.types.DatabaseCreateOperation>} _options - Additional options which modified the creation request\n * @param {String} userId - The ID of the User who triggered the creation workflow\n * @returns {Promise<void>}\n */\nasync function handleChatMessageCreation(msg, _options, _userId) {\n   if (!msg.isAuthor || !VALID_MESSAGE_TYPES.includes(msg.type)) return;\n\n   const workflowData = msg.system ?? msg.flags?.daggerheart;\n\n   if (!workflowData?.source?.item) return;\n\n   const { item: itemId, actor: actorUuid } = workflowData.source;\n\n   const actor = await fromUuid(actorUuid);\n   const item = actor?.items.get(itemId);\n   if (!actor || !item)\n      return console.warn(\n         `Daggerheart Workflow: Could not find Item (${itemId}) or Actor (${actorUuid}) for ChatMessage.`,\n         {\n            msg,\n            actor,\n            item,\n         }\n      );\n\n   const compiledData = await getRequiredData({\n      item,\n      actor,\n      targets: Array.from(game.user.targets),\n   });\n   \n   const handler = await AAHandler.make(compiledData);\n\n   trafficCop(handler);\n}\n","import { trafficCop } from \"../router/traffic-cop.js\"\nimport AAHandler from \"../system-handlers/workflow-data.js\";\nimport { getRequiredData } from \"./getRequiredData.js\";\n\nexport function systemHooks() {\n   Hooks.on(\"fadeAttackRoll\", async (data) => {\n      const targetTokens = await Promise.all(data.targets.map(uuid => fromUuid(uuid)));\n      data.targets = targetTokens.map(token=>token.object);\n      const requiredData = await getRequiredData(data);\n      runFade(requiredData)\n   });\n\n   //Hooks.on(\"fadeDamageRoll\", async (data) => {\n      //const requiredData = await getRequiredData(data);\n      //runFade(requiredData)\n   //});\n\n   Hooks.on(\"fadeCastSpell\", async (data) => {\n      const targetTokens = await Promise.all(data.targets.map(uuid => fromUuid(uuid)));\n      data.targets = targetTokens.map(token=>token.object);\n      const requiredData = await getRequiredData(data);\n      runFade(requiredData)\n   });\n}\n\nasync function runFade(data) {\n   const handler = await AAHandler.make(data)\n   trafficCop(handler);\n}\n","import { trafficCop } from \"../router/traffic-cop.js\";\nimport AAHandler from \"../system-handlers/workflow-data.js\";\n\nconst SHAPE_MAP = {\n    'circle': 'circle',\n    'vines': 'circle',\n    'cone': 'cone',\n    'square': 'rect',\n    'rect': 'rect',\n    'ray': 'ray',\n    'line': 'ray'\n};\n\nlet pendingGurpsInput = null;\n\n/**\n * Cleans and converts GURPS Reach string to a numeric value.\n * @param {string} reachString \n * @returns {number} Numeric reach value (minimum 1)\n*/\nfunction getGurpsReach(reachString) {\n    if (!reachString) return 1;\n    const clean = reachString.toString().toUpperCase().replace(/[^0-9C,-]/g, \"\");\n    const parts = clean.split(/[,-]/);\n    let maxReach = 0;\n\n    for (let part of parts) {\n        if (part === \"C\") continue; // C (Close combat) = 0, effectively 1 for visuals\n        const num = parseInt(part);\n        if (!isNaN(num) && num > maxReach) maxReach = num;\n    }\n    return maxReach === 0 ? 1 : maxReach;\n}\n\nexport function systemHooks() {\n    Hooks.on(\"createChatMessage\", async (msg) => {\n        if (msg.author.id !== game.user.id) return;\n        if (game.system.id !== \"gurps\") return;\n\n        const parsedData = parseGurpsMessage(msg);\n\n        if (!parsedData) return;\n\n        await gurpsWorkflow(parsedData);\n    });\n\n    Hooks.on(\"createMeasuredTemplate\", async (templateDocument, context, userId) => {\n        if (userId !== game.user.id) return;\n\n        if (pendingGurpsInput) {\n            const pending = pendingGurpsInput;\n\n            if (pending.expectedShape && templateDocument.t !== pending.expectedShape) return;\n\n            setTimeout(async () => {\n                const input = pending.input;\n                input.templateData = templateDocument;\n\n                const newHandler = await AAHandler.make(input);\n                if (pending.forcedReachCheck !== undefined) {\n                    newHandler.reachCheck = pending.forcedReachCheck;\n                }\n\n                trafficCop(newHandler);\n                pendingGurpsInput = null;\n            }, 100);\n        }\n    });\n\n    Hooks.on(\"renderSceneControls\", (controls) => {\n        if (pendingGurpsInput) {\n            if (Date.now() - pendingGurpsInput.timestamp < 1000) return;\n            if (ui.controls.control.name !== \"measure\") {\n                pendingGurpsInput = null;\n            }\n        }\n    });\n}\n\n/**\n * Main Workflow\n*/\nasync function gurpsWorkflow(data) {\n    // --- Reach Calculation Logic ---\n    // rawReach: The explicit value from the item (e.g. 1, 2, 3...)\n    // In GURPS, this value implies Yards or Meters directly.\n    const rawReach = (data.reach !== undefined) ? data.reach : 1;\n    const units = (canvas.scene.grid.units || \"\").toLowerCase().trim();\n    const gridDist = canvas.scene.grid.distance;\n    let finalReachDistance;\n\n    // Rule 1: Feet (D&D style maps)\n    // 1 GURPS Reach (Yard) = 3 Feet.\n    if (units === \"ft\" || units === \"feet\") {\n        finalReachDistance = (rawReach * 3) / gridDist;\n    }\n    // Rule 2: Meters or Yards (Standard GURPS)\n    // Reach 1 = 1 Meter/Yard.\n    else if ([\"m\", \"mt\", \"mts\", \"meter\", \"meters\", \"yd\", \"yard\", \"yards\"].includes(units)) {\n        finalReachDistance = rawReach / gridDist;\n    }\n    // Rule 3: Fallback / Unknown Units / Grid Units\n    // If we don't know the unit, assume Reach 1 = 1 Grid Cell.\n    else {\n        finalReachDistance = rawReach;\n    }\n\n    // PADDING: Add epsilon for float errors (1.0 vs 1.000001)\n    const finalReachCheck = finalReachDistance + 0.01;\n\n    const input = {\n        item: data.item,\n        token: data.token,\n        actor: data.actor,\n        targets: data.targets,\n        hitTargets: data.hitTargets,\n        overrideNames: [data.attackName]\n    };\n\n    const probeHandler = await AAHandler.make(input);\n    if (!probeHandler?.item) return;\n\n    // Apply the corrected distance limit\n    probeHandler.reachCheck = finalReachCheck;\n\n    if (pendingGurpsInput) {\n        pendingGurpsInput = null;\n    }\n\n    const animMenu = probeHandler.animationData?.menu;\n    const isTemplateFx = animMenu === \"templatefx\";\n    const isPresetTemplate = animMenu === \"preset\" &&\n        [\"thunderwave\", \"proToTemp\"].includes(probeHandler.animationData.presetType);\n    const isTeleportPreset = animMenu === \"preset\" &&\n        [\"teleportation\"].includes(probeHandler.animationData.presetType);\n\n    if (isTemplateFx || isPresetTemplate) {\n        let expectedFoundryShape = undefined;\n        if (isTemplateFx) {\n            const aaShape = probeHandler.animationData?.primary?.video?.menuType || 'circle';\n            expectedFoundryShape = SHAPE_MAP[aaShape] || 'circle';\n        }\n\n        const lastTemplate = canvas.templates.placeables[canvas.templates.placeables.length - 1];\n        const isValidTemplate = lastTemplate &&\n            lastTemplate.document.author.id === game.user.id &&\n            (!expectedFoundryShape || lastTemplate.document.t === expectedFoundryShape);\n\n        if (isValidTemplate) {\n            input.templateData = lastTemplate.document;\n            const finalHandler = await AAHandler.make(input);\n            finalHandler.reachCheck = finalReachCheck;\n            trafficCop(finalHandler);\n            return;\n        }\n\n        const shapeName = expectedFoundryShape ? expectedFoundryShape.toLowerCase() : \"any\";\n        ui.notifications.info(`\"${data.attackName}\": Add ${shapeName} template...`);\n\n        pendingGurpsInput = {\n            input: input,\n            expectedShape: expectedFoundryShape,\n            timestamp: Date.now(),\n            forcedReachCheck: finalReachCheck\n        };\n\n        if (canvas.templates.activate) canvas.templates.activate();\n        const toolToSelect = expectedFoundryShape || \"circle\";\n        if (ui.controls) {\n            ui.controls.render(true, { control: \"measure\", tool: toolToSelect }); \n        }\n\n        const myTimestamp = pendingGurpsInput.timestamp;\n        setTimeout(() => {\n            if (pendingGurpsInput && pendingGurpsInput.timestamp === myTimestamp) {\n                pendingGurpsInput = null;\n            }\n        }, 60000);\n\n        return;\n    } else if (isTeleportPreset) {\n        ui.notifications.info(`\"${data.attackName}\": Click on a destination...`);\n    }\n\n    trafficCop(probeHandler);\n}\n\n/**\n * Helper: Parse GURPS Chat Message\n*/\nfunction parseGurpsMessage(msg) {\n    const content = document.createElement(\"div\");\n    content.innerHTML = msg.content;\n\n    if (content.classList.contains(\"damage-chat-message\") ||\n        content.querySelector(\".damage-chat-message\") ||\n        !content.querySelector(\".success\")) {\n        return null;\n    }\n\n    const links = content.querySelectorAll(\".gurpslink\");\n    let foundData = null;\n    \n    for (const link of links) {\n        const otf = link.getAttribute(\"data-otf\");\n        if (!otf) continue;\n\n        const colonIndex = otf.indexOf(\":\");\n\n        if (colonIndex > -1) {\n            const prefix = otf.substring(0, colonIndex);\n            const rawName = otf.substring(colonIndex + 1);\n            \n            foundData = { \n                prefix: prefix, \n                fullName: rawName.replace(/^\"+|\"+$/g, \"\").trim() \n            };\n            break;\n        } else {\n            foundData = { \n                prefix: \"\", \n                fullName: otf.replace(/^\"+|\"+$/g, \"\").trim() \n            };\n            break;\n        }\n    }\n\n    if (!foundData) return null;\n\n    let token = canvas.tokens.get(msg.speaker.token);\n    let actor = token?.actor;\n\n    if (!actor) {\n        actor = game.actors.get(msg.speaker.actor);\n        if (actor) {\n            token = actor.getActiveTokens()[0];\n        }\n    }\n\n    if (!token || !actor) return null;\n\n    const prefix = foundData.prefix.toLowerCase();\n    \n    let realItem = null;\n    let entryReachString = null;\n    let searchList = [];\n\n    if (['m', 'p', 'b'].includes(prefix)) {\n        searchList = Object.values(actor.system.melee || {});\n    } else if (prefix === 'r') {\n        searchList = Object.values(actor.system.ranged || {});\n    } else if (prefix === 'sp') {\n        searchList = Object.values(actor.system.spells || {});\n    } else if (prefix === 'sk') {\n        searchList = Object.values(actor.system.skills || {});\n    }\n\n    const entry = searchList.find(e => {\n        let constructedName = e.name;\n        if (e.mode && e.mode.trim() !== \"\") {\n            constructedName += ` (${e.mode})`;\n        }\n        return constructedName === foundData.fullName;\n    });\n\n    if (entry) {\n        if (entry.fromItem) {\n            realItem = actor.items.get(entry.fromItem);\n        }\n        if (['m', 'p', 'b'].includes(prefix) && entry.reach) {\n            entryReachString = entry.reach;\n        }\n    }\n\n    if (!realItem) {\n        const cleanNameSimple = foundData.fullName.split(\"(\")[0].trim();\n        const typeMap = {\n            'm': ['equipment', 'trait', 'feature'],\n            'r': ['equipment', 'trait', 'feature'],\n            'p': ['equipment', 'trait', 'feature'],\n            'b': ['equipment', 'trait', 'feature'],\n            'sp': ['spell'],\n            'sk': ['skill']\n        };\n        const allowedTypes = typeMap[prefix] || ['weapon', 'equipment', 'trait', 'feature'];\n\n        const candidates = actor.items.filter(i => {\n            const nameMatch = (i.name === cleanNameSimple || i.name === foundData.fullName);\n            const typeMatch = allowedTypes.includes(i.type);\n            return nameMatch && typeMatch;\n        });\n\n        if (candidates.length > 0) {\n            candidates.sort((a, b) => {\n                if (a.type === 'equipment' && b.type !== 'equipment') return -1;\n                if (b.type === 'equipment' && a.type !== 'equipment') return 1;\n                return 0;\n            });\n            realItem = candidates[0];\n        }\n    }\n\n    let finalDisplayName = foundData.fullName;\n    if (prefix === 'p') finalDisplayName = `Parry: ${foundData.fullName}`;\n    if (prefix === 'b') finalDisplayName = `Block: ${foundData.fullName}`;\n\n    const calculatedReach = getGurpsReach(entryReachString);\n\n    let finalItem;\n    if (realItem) {\n        finalItem = realItem.toObject();\n        delete finalItem._id;\n        delete finalItem.id;\n        finalItem.name = finalDisplayName;\n        finalItem.flags ??= {};\n        finalItem.flags.autoanimations ??= {};\n        finalItem.parent = actor;\n    } else {\n        let fallbackImg = \"icons/svg/item-bag.svg\";\n        let fallbackType = \"weapon\";\n\n        switch (prefix) {\n            case 'm': fallbackImg = \"icons/svg/sword.svg\"; fallbackType = \"equipment\"; break;\n            case 'p': fallbackImg = \"icons/svg/sword.svg\"; fallbackType = \"equipment\"; break;\n            case 'b': fallbackImg = \"icons/svg/shield.svg\"; fallbackType = \"equipment\"; break;\n            case 'r': fallbackImg = \"icons/svg/target.svg\"; fallbackType = \"equipment\"; break;\n            case 'sp': fallbackImg = \"icons/svg/daze.svg\"; fallbackType = \"spell\"; break;\n            case 'sk': fallbackImg = \"icons/svg/dice-target.svg\"; fallbackType = \"skill\"; break;\n        }\n\n        finalItem = {\n            name: finalDisplayName,\n            img: fallbackImg,\n            type: fallbackType,\n            flags: { autoanimations: {} },\n            system: {},\n            parent: actor\n        };\n    }\n\n    finalItem.getFlag = function (scope, key) { return this.flags?.[scope]?.[key]; };\n    finalItem.update = async function (updates) { foundry.utils.mergeObject(this, updates); return this; };\n    finalItem.prepareData = function () { return; };\n\n    return {\n        item: finalItem,\n        token: token,\n        actor: actor,\n        targets: Array.from(game.user.targets),\n        hitTargets: Array.from(game.user.targets),\n        attackName: finalDisplayName,\n        reach: calculatedReach\n    };\n}\n","// Initilize the A-A Database\nimport { initializeAADB }                 from \"./database/databaseSort.js\";\n\n// Accessible to users\nimport { AutoAnimations}                from \"./system-support/external.js\"\nimport { AAAutorecManager }             from \"./formApps/_AutorecMenu/components/category/menuManager/AAAutorecManager.js\";\nimport { playAnimation }                from \"./system-support/external.js\";\n\n// Register all active effect Hooks\nimport { registerActiveEffectHooks }    from \"./active-effects/handleActiveEffectHooks\";\n\n// Animation Menus for Items and Active Effects\nimport AEMenuApp                        from \"./formApps/_ActiveEffects/AEMenuApp.js\";\nimport ItemMenuApp                      from \"./formApps/_ItemMenu/ItemMenuApp.js\";\n// Show Autorec menu via macro with Hooks.call('AutomaticAnimations.Open.Menu.New')\nimport { showAutorecMenu }              from \"./formApps/_AutorecMenu/showUI.js\";\n\n// Register Socketlib settings for creating and removing Tiles as GM\nimport { setupSocket }                  from \"./socketset.js\";\n\n// Migration scripts for Item/Active Effect and Autorec\nimport { flagMigrations }               from \"./mergeScripts/items/itemFlagMerge.js\";\nimport { autoRecMigration }             from \"./mergeScripts/autorec/autoRecMerge.js\";\n\n// Animation State setting for if Animations are disabled from within A-A\nimport { AnimationState }               from \"./AnimationState.js\";\n\n// Initialize all game settings\nimport { gameSettings }                 from \"./gameSettings.js\";\n\n// Initializes Autorec stores\nimport { autoRecStores }                from \"./formApps/_AutorecMenu/store/AutoRecStores.js\";\n\n// Routing for registering Hooks to run animations\nimport * as systemSupport               from \"./system-support/index.js\"\n\nimport \"../styles/newMenuCss.scss\";\n\n// MAP for caching Deleted items. Specifically for items that delete themselves on final usage so Animations can still play\nimport { aaDeletedItems }               from \"./deletedItems.js\";\n\nHooks.once('socketlib.ready', function () {\n    setupSocket();\n});\n\nwindow.MIN_WINDOW_HEIGHT = 50;\nwindow.MIN_WINDOW_WIDTH = 200;\n\nexport let aaDatabase;\n// Hook for macro to open Autorec Menu\nHooks.on('AutomaticAnimations.Open.Menu.New',() => showAutorecMenu());\n\n// Resets all Autorec menus\nHooks.on('AutomaticAnimations.Clear.Data', async () => {\n    AAAutorecManager.restoreDefault()\n});\n\nfunction registerAAItemHooks() {\n    // Using Item Sheet header buttons Hook to inject A-A button\n    Hooks.on('getItemSheetHeaderButtons', async (itemSheet, buttons) => {\n        if (!game.user.isGM && game.settings.get(\"autoanimations\", \"hideFromPlayers\")) {\n            return;\n        }\n        let buttonOptions = {\n            class: \"aaItemSettings\",\n            icon: \"fas fa-biohazard\",\n            label: \"A-A\",\n            onclick: async () => {\n                await flagMigrations.handle(itemSheet.item);\n                const pf2eRuleTypes = ['condition', 'effect'];\n                // if this is a PF1 \"Buff\" effect or PF2e Ruleset Item (Active Effects) launch the Active Effect menu. Otherwise continue as normal\n                if ((game.system.id === 'pf1' && itemSheet.item?.type === 'buff') || ((game.system.id === 'pf2e' || game.system.id === 'sf2e') && pf2eRuleTypes.includes(itemSheet.item?.type))) {\n                    new AEMenuApp(itemSheet.item, {}).render(true, { focus: true });\n                } else {\n                    new ItemMenuApp(itemSheet.item, {}).render(true, { focus: true });\n                }\n            }\n        }\n        buttons.splice(0, 0, buttonOptions)\n    })\n\n        Hooks.on('getHeaderControlsApplicationV2', (sheet, buttons) => {\n        if(![\"Item\", \"ActiveEffect\", \"Activity\"].includes(sheet.document?.documentName)) return;\n        if (!game.user.isGM && game.settings.get(\"autoanimations\", \"hideFromPlayers\")) {\n            return;\n        }\n        const document = sheet.document;\n        let buttonOptions = {\n            class: \"aaItemSettings\",\n            icon: \"fas fa-biohazard\",\n            label: \"Automated Animations\",\n            onClick: async () => {\n                await flagMigrations.handle(document);\n                const pf2eRuleTypes = ['condition', 'effect'];\n                // if this is a PF1 \"Buff\" effect or PF2e Ruleset Item (Active Effects) launch the Active Effect menu. Otherwise continue as normal\n                if ((game.system.id === 'pf1' && document?.type === 'buff') || ((game.system.id === 'pf2e' || game.system.id === 'sf2e') && pf2eRuleTypes.includes(document?.type))) {\n                    new AEMenuApp(document, {}).render(true, { focus: true });\n                } else {\n                    if(document.documentName === \"Item\" || document.documentName === \"Activity\") {\n                    new ItemMenuApp(document, {}).render(true, { focus: true });\n                    }else if(document.documentName === \"ActiveEffect\") {\n                        new AEMenuApp(document, {}).render(true, { focus: true });\n                    }\n                }\n            }\n        }\n        buttons.push(buttonOptions)\n    })\n\n    // Tidy 5e Sheet App V2 compatibility\n    Hooks.once(\"tidy5e-sheet.ready\", api => {\n        api.registerItemHeaderControls?.({\n            controls: [\n                {\n                    icon: \"fas fa-biohazard\",\n                    label: \"A-A\",\n                    async onClickAction() {\n                        const item = this.document;\n                        await flagMigrations.handle(item);\n                        const pf2eRuleTypes = ['condition', 'effect'];\n                        // if this is a PF1 \"Buff\" effect or PF2e Ruleset Item (Active Effects) launch the Active Effect menu. Otherwise continue as normal\n                        if ((game.system.id === 'pf1' && itemSheet.item?.type === 'buff') || ((game.system.id === 'pf2e' || game.system.id === 'sf2e') && pf2eRuleTypes.includes(itemSheet.item?.type))) {\n                            new AEMenuApp(item, {}).render(true, { focus: true });\n                        } else {\n                            new ItemMenuApp(item, {}).render(true, { focus: true });\n                        }\n                    }\n                }\n            ]\n        });\n    });\n}\n\n/**\n * WORK IN PROGRESS - NOT READY FOR WIDE USE\n * Required\n * @param {Object} token // The token using the Item\n * @param {Object} item // The Item being used\n * \n * Optional\n * @param {Object} options // Options to pass thru to Automated Animations include:\n * Options List\n * @param {Array/Set} targets // Array or Set of user Targets. Otherwise this will default to game.user.targets\n * @param {Array/Set} hitTargets // Array or Set of user Targets. Otherise this defaults to game.user.targets\n * @param {Boolean} playOnMiss // If True, targets not in the \"Hit Targets\" list will have the animation \"miss\" the token\n * @param {Objects} templateData // If the item includes a template placed on the canvas, pass that object thru options\n *  \n */\nHooks.on(\"aa.workflow\", async (token, item, options) => {\n    playAnimation(token, item, options)\n})\n\nHooks.on('aa.initialize', async () => {\n    //const patreonPath = \"modules/jb2a_patreon\";\n    //const freePath = \"modules/JB2A_DnD5e\";\n\n    const s3Location = game.settings.get('autoanimations', 'jb2aLocation');\n    const jb2aPatreonFound = game.modules.get(\"jb2a_patreon\");\n    const jb2aFreeFound = game.modules.get(\"JB2A_DnD5e\");\n\n    if (game.user.isGM && (!jb2aFreeFound && !jb2aPatreonFound)) {\n        if (s3Location && (s3Location.includes('jb2a_patreon') || s3Location.includes('JB2A_DnD5e'))) { } else {\n            ui.notifications.error(game.i18n.format(\"autoanimations.settings.error\"));\n        }\n    }\n    initializeAADB()\n\n    if (game.settings.get(\"autoanimations\", \"killAllAnim\") === \"off\") {\n        AnimationState.enabled = false;\n    }\n})\n\nHooks.once('ready', async function () {\n    registerAAItemHooks();\n    gameSettings.initialize();\n\n    // Initializes all AutoRecStores backed by individual game settings.\n    autoRecStores.initialize();\n\n    // Check if the Autorec menu requires merge scripts to run\n    handleAutorec();\n\n    // Cache deleted items\n    Hooks.on(\"deleteItem\", async (item) => {storeDeletedItems(item)})\n\n    /**\n     * Officially Supported Systems:\n     * DnD 5e\n     * Pathfinder 2e\n     * Pathfinder 1\n     * Advanced 5e\n     * Alien RPG\n     * CypherSystem\n     * DnD 3.5\n     * Dungeon Crawl Clasics\n     * Shadow of the Demonlord\n     * Forbidden Lands\n     * Starfinder RPG\n     * Starfinder 2e\n     * Star Wars FFG\n     * Star Wars 5e\n     * SWADE\n     * Warhammer Fantasy RPG\n     * Old School Essentials\n     * Cyberpunk Red (Only for Attacks)\n     * The Witcher RPG\n     * TwoDSix\n     * Dark Heresy 2e\n     * Fantastic Depths\n     * GURPS\n    */\n\n    // Register Hooks by system\n    const systemIdClean = game.system.id.replace(/\\-/g, '');\n    systemSupport[systemIdClean] ? systemSupport[systemIdClean].systemHooks() : systemSupport.standard.systemHooks();\n\n    registerActiveEffectHooks();\n    \n    handleTemplates();\n\n    Hooks.callAll(\"aa.initialize\")\n});\n\nfunction storeDeletedItems(item) {\n    aaDeletedItems.set(item.id, item)\n}\n\nfunction handleAutorec() {\n    let versionCheck = game.settings.get('autoanimations', 'aaAutorec').version;\n    let currentVersion = Object.keys(autoRecMigration.migrations).map((n) => Number(n)).reverse()[0];\n\n    // Version 5 and up uses a different game setting per menu\n    if (versionCheck < 5) {\n        let oldData = game.settings.get('autoanimations', 'aaAutorec');\n        autoRecMigration.handle(oldData, {shouldSubmit: true, submitAll: true});\n    } else if (versionCheck < currentVersion) {\n        console.warn(\"Automated Animations | Updating Global Automatic Recognition Menu\");\n        autoRecMigration.handle(null, {shouldSubmit: true, submitAll: true, newSchema: true});\n    }\n}\n\nwindow.AutoAnimations = AutoAnimations;\nwindow.AutomatedAnimations = {\n    AutorecManager: AAAutorecManager,\n    playAnimation: (sourceToken, item, options = {}) => playAnimation(sourceToken, item, options),\n}\n\n\nfunction handleTemplates() {\n\n    let templatesGridHidden = game.settings.get('autoanimations', 'hideTemplateGrid');\n    // Settings for showing the Template Grid Highlight whilst hovering in the Template Layer\n    if (templatesGridHidden === \"templateLayer\") {\n        if (game.modules.get('tokenmagic')?.active && game.settings.get(\"tokenmagic\", \"defaultTemplateOnHover\")) { } else {\n            removeGridHighlightsOnLoad();\n            Hooks.on(\"canvasReady\", async () => {\n                removeGridHighlightsOnLoad()\n            });\n            Hooks.on(\"createMeasuredTemplate\", (template) => {\n                canvas.grid.getHighlightLayer(`MeasuredTemplate.${template.id}`).visible = false;\n            });\n            Hooks.on('hoverMeasuredTemplate', (template, isHovered) => {\n                canvas.grid.getHighlightLayer(`MeasuredTemplate.${template.id}`).visible = isHovered;\n            })\n        }\n    }\n    // Settings for showing the Template Grid Highlight whilst hovrering anywhere in the Template area\n    if (templatesGridHidden === \"full\") {\n        if (game.modules.get('tokenmagic')?.active && game.settings.get(\"tokenmagic\", \"defaultTemplateOnHover\")) { } else {\n            removeGridHighlightsOnLoad();\n            canvasMouseEvent()\n            Hooks.on(\"createMeasuredTemplate\", (template) => {\n                canvas.grid.getHighlightLayer(`MeasuredTemplate.${template.id}`) ? canvas.grid.getHighlightLayer(`MeasuredTemplate.${template.id}`).visible = false : \"\";\n            });\n            Hooks.on(\"canvasReady\", async () => {\n                removeGridHighlightsOnLoad()\n                canvasMouseEvent()\n            });\n        }\n    }\n\n    // Removes the template Grid Highlighting on Canvas Load\n    function removeGridHighlightsOnLoad() {\n        if(!canvas.grid) return;\n        let highlights = Object.keys(canvas.grid.highlightLayers);\n        if (highlights.length) {\n            highlights.forEach((e) => {\n                if (e.startsWith(\"MeasuredTemplate\")) {\n                    canvas.grid.getHighlightLayer(e).visible = false\n                }\n            })\n        }\n    }\n\n    // Code Adapted from Token Magic FX by Secretfire with permission, under GPL V3 (https://github.com/Feu-Secret/Tokenmagic/blob/master/LICENSE) to only show Template Grid Highlighting whilst hovering in the template area\n    function canvasMouseEvent() {\n        canvas.stage.on(\"mousemove\", event => {\n            const { x: templateX, y: templateY } = event.data.getLocalPosition(canvas.templates);\n            for (let template of canvas.templates.placeables) {\n                const highlight = canvas.grid.getHighlightLayer(`MeasuredTemplate.${template.id}`) ?? {};\n                const { x: centerX, y: centerY } = template.center;\n                const mouseInTemplate = template?.shape?.contains(templateX - centerX, templateY - centerY);\n                highlight.visible = mouseInTemplate;\n            }\n        });\n    }\n}\n\nfunction moduleIncludes(test) {\n    return !!game.modules.get(test);\n}\n//window.AAAutoRec = AAAutorecMenu;\n"],"names":["db047","patreon.db047","aaDatabase","db048","patreon.db048","db049","patreon.db049","db050","patreon.db050","db051","patreon.db051","db052","patreon.db052","db053","patreon.db053","db054","patreon.db054","debug","custom_error","section","freeOptions","data","templateAnimation","options","fire","generic","ice","liquid","fireball","flags","levels3d","macro","meleeSwitch","video","item","itemMerge.version01","itemMerge.version02","itemMerge.version03","itemMerge.version04","itemMerge.version05","obj","now","target","element","text","hash","targets","wait","detach","linear","tick","init","create_each_block","insert","update","instance","create_fragment","sortedMenus","secondary","x1","y1","distance","primary","sound","source","targetEffect","proToTemp","teleportation","thunderwave","a","b","melee","range","ontoken","bottomEffect","newTargetArray","templatefx","templateType","aura","effectAfterImage","pos","template","angle","sourceToken","trafficCop","animate.particleEffects","autorecMerge.mergeVersion01","autorecMerge.mergeVersion02","autorecMerge.mergeVersion03","autorecMerge.mergeVersion04","autorecMerge.mergeVersion05","createVideo","createSound","aefx","common.main","common.source","common.macro","common.secondary","common.primary","common.target","common.meleeSwitch","preset","common.sound","itemId","userId","set","subscribe","run","get","writable","r","v","document","_a","result","active","enabled","duration","ease","defaultData","FVTTConfigure","attr","ctx","create_if_block_1","create_if_block_2","create_if_block_3","create_if_block","draggable","booleanStore","dragDefault","storeResizing","main","autoClose","title","promise","animate","common.levels3d","options.melee","options.range","options.ontoken","options.templatefx","options.aura","options.aefx","filters","dispatch","create_if_block_4","create_if_block_8","current_component","handleAnimation","noop","create_if_block_6","event","#managedPromise","create_if_block_5","createOverflowItems","newSection","i","type","settings.SoundOnly","settings.Macro","settings.Source","settings.Video","options.Melee","options.EffectColor","settings.Sound","settings.MeleeSwitch","settings.Secondary","settings.Target","settings.Canvas3D","settings.SectionButtons01","options.Range","options.OnToken","settings.SectionButtons02","options.TemplateFX","options.Aura","options.AuraEffects","BuildAeOnToken","BuildAeAura","BuildTemplateFx","MenuManagerContent","ObjectEntryStore","gameSettings","isObject","FullVideoPreview","VideoPreview","CopyClipBoard","AnimationStore","store","isChecked","NoneChosen","newData.aefx","currentSelected","ItemInfoDialog","ItemInfo","newData.melee","actorId","systemHooks","criticalCheck","useItem","checkReach","token","attack","checkAmmo","checkOutcome","checkFeatForAOE","itemHasDamage","getSpellType","spellHasAOE","damage","hitTargets","funkyTest","compileTargets","onWorkflowStart","runA5e","checkChatMessage","tableId","checkMessage","routeMessage","checkCrit","tryAnnimationWith","prefix","itemSheet","systemSupport.standard.systemHooks"],"mappings":"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","x_google_ignoreList":[13,20,21,22,23,24,25,26,27,28,29,30,31,32,62,63,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,146,147,148,149,150,151,152,153,154,155,156,160,161,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,195,249,266,267,278]}