diff --git a/client/components/combobox.jsx b/client/components/combobox.jsx index 651a31516..16122eafd 100644 --- a/client/components/combobox.jsx +++ b/client/components/combobox.jsx @@ -16,6 +16,7 @@ const Combobox = createReactClass({ suggestMethod : 'includes', filterOn : [] // should allow as array to filter on multiple attributes, or even custom filter }, + valuePatterns: /.+/ }; }, getInitialState : function() { @@ -74,6 +75,7 @@ const Combobox = createReactClass({ type='text' onChange={(e)=>this.handleInput(e)} value={this.state.value || ''} + pattern={this.props.valuePatterns} placeholder={this.props.placeholder} onBlur={(e)=>{ if(!e.target.checkValidity()){ @@ -82,6 +84,12 @@ const Combobox = createReactClass({ }); } }} + onKeyDown={(e)=>{ + if (e.key === "Enter") { + e.preventDefault(); + this.props.onEntry(e); + } + }} /> diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less index bb4fe69c5..5769a13df 100644 --- a/client/homebrew/brewRenderer/brewRenderer.less +++ b/client/homebrew/brewRenderer/brewRenderer.less @@ -59,6 +59,12 @@ } &-corner { visibility : hidden; } } + + @supports (break-after:always) { + .columnSplit { + margin-bottom: 100vh; + } + } } .pane { position : relative; } @@ -81,4 +87,5 @@ } } .headerNav { visibility : hidden; } -} \ No newline at end of file + +} diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.jsx b/client/homebrew/editor/metadataEditor/metadataEditor.jsx index 0b538f2b5..721340079 100644 --- a/client/homebrew/editor/metadataEditor/metadataEditor.jsx +++ b/client/homebrew/editor/metadataEditor/metadataEditor.jsx @@ -10,8 +10,6 @@ import TagInput from '../tagInput/tagInput.jsx'; import Themes from 'themes/themes.json'; import validations from './validations.js'; -const SYSTEMS = ['5e', '4e', '3.5e', 'Pathfinder']; - import homebreweryThumbnail from '../../thumbnail.png'; const callIfExists = (val, fn, ...args)=>{ @@ -33,7 +31,6 @@ const MetadataEditor = createReactClass({ tags : [], published : false, authors : [], - systems : [], renderer : 'legacy', theme : '5ePHB', lang : 'en' @@ -91,15 +88,6 @@ const MetadataEditor = createReactClass({ } }, - handleSystem : function(system, e){ - if(e.target.checked){ - this.props.metadata.systems.push(system); - } else { - this.props.metadata.systems = _.without(this.props.metadata.systems, system); - } - this.props.onChange(this.props.metadata); - }, - handleRenderer : function(renderer, e){ if(e.target.checked){ this.props.metadata.renderer = renderer; @@ -155,18 +143,6 @@ const MetadataEditor = createReactClass({ }); }, - renderSystems : function(){ - return _.map(SYSTEMS, (val)=>{ - return ; - }); - }, - renderPublish : function(){ if(this.props.metadata.published){ return - - ); + const stopEditing = (index)=>{ + setTagList((prev)=>prev.map((t, i)=>(i === index ? { ...t, editing: false, draft: '' } : t))); }; - const renderWriteTag = (context, index)=>{ + const suggestionOptions = tagSuggestionList.map((tag)=>{ + const tagType = tag.split(':'); + + let classes = 'item'; + switch (tagType[0]) { + case 'type': + classes = 'item type'; + break; + case 'group': + classes = 'item group'; + break; + case 'meta': + classes = 'item meta'; + break; + case 'system': + classes = 'item system'; + break; + default: + classes = 'item'; + break; + } + return ( - handleInputKeyDown({ evt, value: context.value, index: index })} - autoFocus - /> +
+ {tag} +
); - }; + }); return ( -
- +
+ {label && } +
    - {tagList.map((context, index)=>{ return context.editing ? renderWriteTag(context, index) : renderReadTag(context, index); })} + {tagList.map((t, i)=>t.editing ? ( + setTagList((prev)=>prev.map((tag, idx)=>(idx === i ? { ...tag, draft: e.target.value } : tag)), + ) + } + onKeyDown={(e)=>{ + if(e.key === 'Enter') { + e.preventDefault(); + submitTag(t.draft, i); // submit draft + setTagList((prev)=>prev.map((tag, idx)=>(idx === i ? { ...tag, draft: '' } : tag)), + ); + } + if(e.key === 'Escape') { + stopEditing(i); + e.target.blur(); + } + }} + autoFocus + /> + ) : ( +
  • editTag(i)}> + {t.value} + +
  • + ), + )}
- setTempInputText(e.target.value)} - onKeyDown={(evt)=>handleInputKeyDown({ evt, value: null, options: { clear: true } })} + submitTag(value)} + onEntry={(e)=>{ + if(e.key === 'Enter') { + console.log('submit'); + e.preventDefault(); + submitTag(e.target.value); + } + }} /> + {smallText.length !== 0 && {smallText}}
); diff --git a/client/homebrew/editor/tagInput/tagInput.less b/client/homebrew/editor/tagInput/tagInput.less index e69de29bb..3165b3935 100644 --- a/client/homebrew/editor/tagInput/tagInput.less +++ b/client/homebrew/editor/tagInput/tagInput.less @@ -0,0 +1,22 @@ +.list input { + border-radius: 5px; +} + +.tagInput-dropdown { + .dropdown-options { + .item { + &.type { + background-color: #00800035; + } + &.group { + background-color: #50505035; + } + &.meta { + background-color: #00008035; + } + &.system { + background-color: #80000035; + } + } + } +} diff --git a/client/homebrew/editor/tagInput/tagSuggestionList.js b/client/homebrew/editor/tagInput/tagSuggestionList.js new file mode 100644 index 000000000..6b8e4060e --- /dev/null +++ b/client/homebrew/editor/tagInput/tagSuggestionList.js @@ -0,0 +1,1980 @@ +export default [ + "meta:Theme", + "5e", + "Subclass", + "meta:theme", + "subclass", + "Class", + "Homebrew", + "Race", + "Dungeons and Dragons", + "theme", + "Daggerheart", + "2024", + "One Piece", + "One Piece DND", + "Luffy", + "Dungeons and Devil Fruits", + "Strawhats", + "Template", + "Campaign Frame", + "class", + "Players Handbook", + "dnd", + "osr", + "Dungeon Masters Guide", + "shadowdark", + "dragonbane", + "PHB", + "example", + "Devil Fruits", + "system:pf2e", + "DnD", + "DMG", + "system:dnd5.5", + "Monster", + "homebrew", + "race", + "template", + "Warlock", + "monster", + "Fighter", + "warlock", + "druid", + "sorcerer", + "D&D", + "Magic Item", + "Barbarian", + "Artificer", + "2014", + "system:descent into avernus", + "Sorcerer", + "Adventure", + "Paladin", + "Ranger", + "user help", + "fighter", + "5th Edition", + "Spells", + "Monk", + "Spell", + "NPC", + "Cleric", + "spell", + "Rogue", + "css", + "Item", + "artificer", + "magic item", + "Rules", + "barbarian", + "wizard", + "russian", + "DnD5e", + "Wizard", + "paladin", + "bastionland", + "spells", + "Devil Fruit", + "Bard", + "5.5e", + "rogue", + "Tabletop System", + "Haki", + "Druid", + "mystic bastionland", + "item", + "Lore", + "bard", + "monk", + "system:dnd5e", + "world", + "ranger", + "WIP", + "cleric", + "Dragon", + "Naruto", + "Creature", + "snippet", + "npc", + "DeS", + "Magic", + "guide", + "v3", + "Beast", + "Classe", + "onering", + "Monsters", + "Races", + "Weapon", + "adventure", + "Subclasses", + "stat block", + "weapon", + "Species", + "DONE", + "archetype", + "RPG", + "Hollow Knight", + "5e'24", + "Martial", + "DND", + "Classe Nova", + "Curse of Strahd", + "Boss", + "Hollowed Kingdoms", + "baldurs mouth", + "5.24", + "Homewbrew", + "Encyclopedia", + "Revised", + "OneWorldHD", + "knight", + "DPS", + "srd", + "Undead", + "items", + "DnD 5e", + "Guide", + "Compendium", + "Feat", + "newspaper", + "magic", + "TTRPG", + "descent into avernus", + "reference", + "system:D&D 5e24", + "feat", + "Magic Items", + "Campaign", + "resource", + "Feats", + "Anime", + "dd5", + "races", + "Monstrosity", + "DM Screen", + "2024 Rules", + "Rework", + "Character Build", + "Done", + "5e 2024", + "Construct", + "myth", + "magic items", + "creature", + "Legendary", + "Strahd", + "background", + "Player", + "style", + "Legacy", + "Player Handbook", + "martial", + "Character", + "Dungeons & Dragons", + "Table", + "reddit", + "monsters", + "OneDND", + "dragon", + "Suporte", + "Soulbound", + "Expanded Handbook", + "bestiary", + "Humanoid", + "system:dnd", + "Oredell", + "system:class", + "V3", + "system:5e", + "5e'14", + "Age of Sigmar", + "Items", + "Eberron", + "horror", + "dnd5e", + "star wars", + "Background", + "compendium", + "revision", + "Elemental", + "character", + "Marcial", + "SW5e", + "notes", + "DM", + "Fey", + "one-shot", + "resources", + "NEW", + "campaign", + "wondrous item", + "Setting", + "Archive", + "NIMRE", + "Tanque", + "Jogavel", + "Dnd 5e", + "LotM", + "setting", + "revised", + "Warhammer", + "rework", + "Conjurador", + "GMBinder", + "ItemSet", + "NPCs", + "classes", + "CR 2", + "AetherSail", + "undead", + "Artifact", + "cards", + "Example", + "Guides", + "Theme", + "Swamp", + "CR 1", + "patron", + "Extra", + "concept", + "final fantasy", + "Aberration", + "Elder Scrolls", + "rules", + "meta:gratis", + "Dice Pool", + "Cue", + "dark", + "type:Style", + "rpg", + "meta:free", + "summoner", + "OC", + "rare", + "Fleshing Out", + "francais", + "Dnd", + "Creatures", + "Sims 4", + "sous-classe", + "ffxiv", + "Underdark", + "add-on", + "weapons", + "Subrace", + "dungeons and dragons", + "Naruto 5e", + "Lafari", + "Very Rare", + "d6", + "red", + "Equipment", + "CR 3", + "Patron", + "5E", + "objet magique", + "spellcaster", + "feats", + "5.24e", + "system:d&d5e", + "Rare", + "Thudnfer", + "daggerheart", + "CR 1/2", + "Archetype", + "dnd 5e", + "Pathfinder", + "lineage", + "Celestial", + "Support", + "species", + "ARCHIVED", + "Horror", + "humanoid", + "Subclase", + "book:PHB E&E", + "final fantasy xiv", + "Jungle", + "Feywild", + "Fiend", + "subclasses", + "HB", + "Legacy Challenge", + "Project Horizon", + "vampire", + "WoW", + "DND 5e", + "Weapons", + "system:book clone", + "CoS", + "N5e", + "Summon", + "Spellcaster", + "Koretra", + "Voidborn", + "one shot", + "Templates", + "tables", + "Iphexar", + "Shattered Obelisk", + "Sword Coast", + "elemental", + "lore", + "character sheet", + "discord", + "BetterMonsters", + "players", + "group:simple skans", + "Coastal", + "Forest", + "Unearthed Arcana", + "Old", + "Collection", + "Ancestry", + "Caevash", + "Strixhaven", + "Limbus Company", + "Daydreams & Deviants", + "Statblocks", + "Urban", + "Classes", + "familiar", + "Blood", + "oneshot", + "n5e", + "wip", + "masks", + "Planeshifted", + "Carrioss", + "avernus", + "object", + "1", + "Ruins", + "Anime Character", + "wild shape", + "mask", + "dj9 game", + "Handbook", + "Curse", + "oath", + "Midralis", + "Appendix", + "5.5", + "tales of the valiant", + "player classes", + "Caster", + "Large", + "Fateforge", + "Cursed", + "beast", + "Pathfinder 2e", + "Design", + "Uncommon", + "Endeur", + "Elemental Water", + "SCC", + "sci-fi", + "Dragons", + "human", + "Gods", + "Medium", + "System", + "Help", + "Handout", + "Skyrim", + "BnB", + "draft", + "PC", + "Variant", + "syntax", + "OneShot", + "Clase", + "UESTRPG", + "Savannah", + "Reef", + "CR 5", + "Forgotten Realms", + "collection", + "Combat", + "Historia", + "artifact", + "Expansion", + "Attunement", + "Variant Rules", + "d&d", + "Party Build", + "Evocation", + "homerule", + "Forbidden West", + "how-to", + "tov", + "Mystical Item", + "CR 4", + "Necromancer", + "General Rules", + "Needs Update", + "stat blocks", + "DC Comics", + "Sword", + "Armor", + "blood hunter", + "Blood Hunter", + "Meio Conjurador", + "Mydia", + "3rd Party", + "N5E", + "Delvebound", + "Ocean", + "Subterranean", + "half-caster", + "Demon", + "Fire", + "meta:Template", + "Character Sheet", + "PF2e", + "png", + "fantasy", + "Setting Guide", + "Style", + "Cor", + "legacy", + "Minion", + "meta:khaoz age", + "Book", + "magical item", + "immersion", + "reminder cards", + "Regras", + "Durnovar", + "2025", + "Camp1", + "Abyss", + "armor", + "construct", + "firearms", + "Backgrounds", + "Companion", + "Melee", + "fey", + "Incomplete", + "Vampire", + "Bestiary", + "Worldbuilding", + "History", + "Conjuration", + "necromancy", + "dragons", + "ancestry", + "Mech", + "PbtA", + "COS", + "One Shot", + "Factions", + "Transmutation", + "Spellcasting", + "card", + "Ardh", + "redveil", + "conditions", + "elturel", + "rhye", + "group:James Haeck", + "CaelYuu", + "system:5.24e", + "system:GM Binder", + "Grassland", + "melee", + "Potions", + "anime", + "D&D 5e", + "Healer", + "Gambling", + "Lightning", + "fighting style", + "support", + "Style Template", + "mtg", + "NSFW", + "aventura", + "Manuals", + "plant", + "Incarnate", + "Crafting", + "DnDBeyond", + "Monster Girl", + "Monster Girl Encyclopedia", + "pet", + "npcs", + "Stat Block", + "Styleguide", + "mitologia", + "Objeto maravilloso", + "vaesen rpg", + "dnd-2024", + "Class Handbook", + "Space", + "Taiga", + "CR 6", + "Pact Boon", + "race/ancestry", + "Necromancy", + "cantrip", + "LoL", + "Raza", + "handout", + "Mechanic", + "Conversion", + "Wondrous Item", + "Familiar", + "necromancer", + "uncommon", + "curse", + "Campaign Setting", + "Tetra", + "1e", + "module", + "Evolving", + "boiling sea", + "deck", + "OSR", + "RU", + "VL", + "Underdeep", + "Deep Ocean", + "Giant", + "statblock", + "combat", + "Time", + "5E24", + "session zero", + "elf", + "tank", + "sorcerous origin", + "Drakkenheim", + "Tavern", + "Domain", + "healer", + "Valenor", + "blood", + "Oath", + "spooky", + "fire", + "meta:5e24 Style", + "Notes", + "City", + "Conjurador Completo", + "prop", + "Dotherys", + "Rietuma 3.0", + "5e24", + "Library of Ruina", + "español", + "Project Echo", + "battle of Japan", + "Plant", + "Badlands", + "Neverwinter", + "Fantasy", + "Beastfolk", + "Unarmed", + "Cold", + "Damage", + "attunement", + "Hurthud", + "3rd Level", + "spelljammer", + "mostro", + "Custom", + "PT-BR", + "Alternative Realms", + "The Foot", + "boss", + "demo", + "Supplement", + "FitD", + "classe", + "5.14", + "Copy", + "DnD5e24", + "X-Men", + "TNA", + "CR 8", + "Desert", + "CR 7", + "arme", + "random", + "spellcasting", + "Deprecated", + "Cards", + "finished", + "Ben 10", + "equipment", + "Geography", + "Games", + "For Players", + "Faerun", + "scroll", + "Faction", + "Alchemist", + "drow", + "Lineage", + "mix-blend-mode", + "columns", + "User Help", + "Reami Dimenticati", + "Класс", + "D100", + "nsfw", + "hucaen", + "v1.0", + "Cortex", + "Fallout", + "ww5e", + "MAGIC", + "DnD2024", + "ToV", + "D&D2024", + "The Backrooms", + "Freshwater", + "D20", + "Dragonborn", + "custom", + "sword", + "Dungeons and Dragons 5e", + "Water", + "legendary", + "Dungeon", + "Ravenloft", + "aberration", + "Longsword", + "transmutation", + "Fairy Tail", + "Character background", + "Exandria", + "Updated", + "pitch", + "Half-Caster", + "Complete", + "Money", + "player", + "forgotten-realms", + "Festival", + "Casino", + "SCAG", + "Currency", + "North", + "Toril", + "Scourged Land of Valenor", + "Oota", + "parchment", + "Literature", + "Serrith", + "PNJ", + "Divinity Original Sin 2", + "Wild", + "videogame", + "magic the gathering", + "sweetblossom", + "GMscreen", + "MandM", + "D&D 5.24", + "Camp2", + "Remaster", + "riassunti", + "type:Resource", + "system:D&D", + "tag:Class", + "Excelsior", + "Stat Blocks", + "Sci-Fi", + "Ooze", + "CR 1/8", + "sublclass", + "chart", + "Mountains", + "guns", + "Nature", + "Orc", + "Poison", + "Devil", + "fiend", + "DC", + "pt-br", + "ABnB", + "One-Shot", + "strahd", + "Ring", + "Theme song", + "orc", + "summon", + "Psion", + "Psionics", + "Dungeon Master", + "vehicle", + "DM only", + "Demigod", + "Antica Energia", + "Pirates", + "Sourcebook", + "devil", + "Cantrip", + "mystery", + "MtG", + "conversion", + "Festivals", + "Casinos", + "Taverns", + "Betting", + "Drinking", + "phandelver", + "Warhammer 40k", + "mutant", + "styling", + "FATE", + "Lone Wolf", + "icon", + "New Dawn", + "Magic Set", + "Paladin Subclass", + "Alter Class", + "difficulty classses", + "combat tables", + "phb", + "Project Moon", + "Undertomes", + "EGO", + "Campagne 1", + "Constelação", + "Arvore I", + "Fim da Jornada", + "greek god", + "dwarf", + "Firearms", + "3.5e", + "generator", + "Elf", + "meta: Scenario", + "enchantment", + "buff", + "ITW", + "Tank", + "Archived", + "Martial Archetype", + "caster", + "BR", + "Knight", + "Utility", + "SWADE", + "Star Wars", + "pc", + "Mystic", + "Useful", + "Netherdeep", + "crafting", + "Sapient Undead", + "Maverick", + "Revision", + "Resource", + "Humblewood", + "one piece", + "Bag of Holding", + "medium", + "lightning", + "backgrounds", + "4th Level", + "path", + "BREAK-RPG", + "dark fantasy", + "Players", + "poison", + "psionic", + "gazook89", + "homebrew subclass", + "wild-wasteland", + "CWD", + "Paid", + "Tales of the Valiant", + "Dreadhold", + "arma", + "system:Mutants and Masterminds", + "#Tiefschlaf", + "Brew", + "Myra", + "Swashbuckler", + "dead by daylight", + "Exceptional", + "COD Zombies", + "Hills", + "Tundra", + "type:Campaign", + "wild magic", + "Food", + "Death", + "homebrew rules", + "Remake", + "Witcher", + "water", + "Pet", + "book", + "AAH", + "pact", + "Ice", + "Character Creation", + "animal", + "Pokemon", + "clase", + "5e14", + "DBZ", + "CLONE", + "Evil", + "Tarsere", + "Mythology", + "pf2e", + "Magical", + "type:race", + "Sorcerous Origin", + "Information", + "styles", + "Module", + "gish", + "frames", + "DeltaGreen", + "Magic item", + "food", + "chef", + "basics", + "giant", + "Brew Creation", + "One-shot", + "ttrpg", + "Path", + "Don't Starve", + "MGE", + "firearm", + "DnDBehindTheScreen", + "store", + "The Artisan", + "timeline", + "college", + "dev", + "dungeon of the dead three", + "Cradle", + "Dnd5e", + "dungeon", + "Amaranthine", + "Regno di Oltremare", + "bestia", + "rewrite", + "WiP", + "Subclasse", + "mutants and masterminds", + "The Embrace", + "meta:documentation", + "Mutants And Masterminds", + "khedoria", + "Encounter Pack", + "giorni", + "Statblock", + "Enemies", + "Goblinoids", + "Heavens", + "system:2e", + "Vaalbara", + "Dwarf", + "airos", + "table", + "Artificer Specialization", + "Buff", + "Book 1", + "Ranged", + "cypher", + "utilities", + "40k", + "Psychic", + "Fear", + "steampunk", + "shadow", + "subclase", + "Barbarian Subclass", + "Elements", + "pact boon", + "Clan", + "Fly", + "solo", + "sourcebook", + "Marvel Comics", + "compilation", + "Firearm", + "sidekick", + "infusions", + "Mechanics", + "Summoner", + "Aasimar", + "Human", + "Vehicle", + "Shadow", + "Clone", + "custom css", + "ocean", + "sotdl", + "bandit", + "Wind", + "Printer Friendly", + "Obsolete", + "mechanics", + "illusion", + "5th edition", + "League of Legends", + "Vestige", + "dungeons", + "Dungeons", + "and", + "Elden Ring", + "L5R", + "d20", + "Poisons", + "d15", + "Dungeons And Dragons", + "MTG", + "divine", + "characters", + "witch", + "Anime Homebrew", + "Zombie", + "thunder", + "Jujutsu Kaisen", + "campagne", + "Deadlands", + "spell list", + "1 Person", + "Ritual", + "screen", + "nature", + "Divination", + "Compattare", + "dtrpg", + "quick ref", + "Mago", + "Illivia", + "Shonen", + "Core Deities", + "green ronin", + "Bless", + "D&D5e", + "version:0.1.0", + "curato", + "system:Ord", + "Images", + "Sealed Artifact", + "Giants", + "CR 9", + "CR 11", + "CR 0", + "CR 14", + "Shadowfell", + "Tier 1", + "d100", + "Elemental Air", + "artificiel", + "Cultist", + "Cyberpunk", + "Huge", + "Warrior", + "Gun", + "quest", + "LYRA", + "Music", + "Tiefling", + "Master", + "Witch", + "Linnorm", + "1st-level", + "Mount", + "Animal", + "Comics", + "Superhero", + "creatures", + "Hunter", + "Control", + "Dragon Ball", + "Dragon Ball Z", + "Dagger", + "questingforamonster", + "ICRPG", + "Booklet", + "f and t", + "common", + "Chaos", + "spellblade", + "Constitution", + "artisan", + "arcane", + "Released", + "ring", + "runes", + "gun", + "Supportive Material", + "The Witcher", + "Desarmado", + "Monster Monday", + "Bleach", + "Demon Slayer", + "mice", + "worldbuilding", + "Necrotic", + "ability score", + "demon", + "Armybook Shivatiano", + "warrior", + "Fighter Subclass", + "system", + "whisperveil", + "psychic", + "warhammer", + "Aventura", + "Culture", + "Material", + "meta:npc", + "shops", + "magic weapon", + "nhera", + "Dark Fantasy", + "Regles", + "Wonderous Item", + "Features", + "pokemon", + "Ghosts of Saltmarsh", + "monstrosity", + "DL TWW", + "companion", + "alternate layout", + "Tutorials", + "Kitsune", + "don", + "heroique", + "mini campaign", + "drago", + "Aquatic", + "tool", + "handmade", + "released", + "Spellblade", + "pregen", + "level 2", + "Baldurs gate 3", + "My Hero", + "Technically a subclass", + "5.24e Remastered Subclasses", + "dinosaurs", + "5E.2024", + "Razas", + "Horizon", + "Clothing", + "+2", + "castellano", + "pentacle prophecy", + "tag:Spells", + "gruppo A", + "Rpg", + "razze", + "type:Adventure", + "unfinished", + "3.5", + "gunslinger", + "BBEG", + "Arcane", + "component", + "Bow", + "backstory", + "phandalin", + "Skills", + "Pact", + "Elemental Earth", + "Joke", + "invocation", + "martial class", + "Super Villain", + "Eldritch", + "Elemental Fire", + "Homebrew Class", + "eldritch", + "cyberpunk", + "Player Race", + "Class Mod", + "Heatcoast", + "meta:Guide", + "Yemao", + "evil", + "Named NPC", + "CLASS", + "Angel", + "vecna", + "PT", + "PTBR", + "Ancient", + "Small", + "WotC Style", + "5e Homebrew", + "1st Level", + "dagger", + "Brancalonia", + "encounter", + "cat", + "primal path", + "Ambientazione", + "Magie", + "candlekeep", + "Ongoing", + "Oneshot", + "Wondrous", + "Janbrewery", + "Tattoos", + "5e (2014)", + "concentration", + "very rare", + "Set", + "Kobold", + "martial archetype", + "God", + "blog", + "New Gate", + "Healing", + "OneDnD", + "Incantesimi", + "Player Options", + "contest", + "pirate", + "Manuel", + "Alchimie", + "Herboristerie", + "Ingredients", + "starlost", + "Campaign 1", + "Abandoned", + "Previous Editions", + "Enchantment", + "Tools", + "Oblivion", + "domain", + "5th Level", + "DnD Beyond", + "Reference", + "Sorcerer Subclass", + "Dragon Magazine", + "feature", + "german", + "conjuration", + "strixhaven", + "Sentient", + "JJK", + "10 Generations", + "character creation", + "LevelUp", + "pallid grove", + "primer", + "Requires Attunement", + "College", + "Aesthetic", + "critter", + "home game", + "spanish", + "stats", + "Lairon", + "Hunters Guild", + "original setting", + "Bosses", + "Radiant Citadel", + "actions", + "Reworked", + "Elystera", + "Wyvern", + "vikings", + "thief", + "enemies", + "Obsession", + "Yi Sang", + "aberrazione", + "Limbus", + "animals", + "minecraft", + "mice of legend", + "osric", + "20 Minutes Till Dawn", + "campaign frame", + "latigo", + "DH", + "Eldritch Invocation", + "system:daggerheart", + "100ni", + "meta:Sheet", + "fa-solid fa-sheet-plastic:Ficha", + "tag:Berean", + "AD&D", + "B/X", + "The Codex Of Anomalous Entities", + "monster manual", + "Polar Waters", + "CR 12", + "CR 10", + "blood magic", + "Gunslinger", + "grimoire", + "Drakes", + "Japanese", + "subrace", + "ooze", + "Stats", + "Half Caster", + "Sea", + "time", + "Brawler", + "Session 0", + "Halloween", + "Runeterra", + "Divine", + "Random", + "Lifestar", + "arcane trickster", + "Paddy4530", + "evocation", + "light", + "Steampunk", + "shaman", + "Primal Path", + "monk subclass", + "Full Caster", + "World", + "Planning", + "spirit", + "Nova Era", + "abjuration", + "Christmas", + "Critical Role", + "Gish", + "Bandit", + "Monster Manual", + "party member", + "mgazt", + "Playable Race", + "Donjon.bin.sh", + "Final Fantasy", + "Roleplay", + "monstre", + "fairy", + "frame", + "Minecraft", + "Stealth", + "Manual", + "half caster", + "Storm", + "Sorcery", + "format work", + "Kingdom Hearts", + "hexblade", + "block", + "page layouts", + "Monk Subclass", + "FinyaFluKaiKolja", + "Radiant", + "group:playtest", + "Korrahir", + "noble", + "exorcist", + "xapien", + "Raven Queen", + "markdown", + "damage", + "Alchemy", + "morrigan", + "genasi", + "ZNH", + "folklore", + "Fate", + "hechicero", + "Air", + "Magic Weapon", + "Anime DND 5e", + "Dragon Ball Z TTRPG", + "Dragon Ball Z RPG", + "Dragon Ball Z DND", + "Dragon Ball Z 5e", + "samurai", + "Goblin", + "Base Sheet", + "Shackled City Adventure Path", + "Natureza", + "control", + "Normarch", + "Reddit", + "Genshin Impact", + "Abjuration", + "Myr", + "Flight", + "Vampyre", + "nightmare", + "Lycan", + "Occult", + "circle", + "Christmas Special", + "DoDD", + "Character Options", + "traduction", + "Characters", + "Gear", + "system:sf2e", + "drakkenheim", + "downtime", + "amulet", + "Feiticeiros e Maldicoes", + "Tecnica amaldicoada", + "prorpg", + "enemy", + "No Mercy", + "rain world", + "slugcat", + "fly", + "meta:User Guide", + "Fallout TTRPG", + "regles", + "Ill Tides", + "Light-hearted", + "Vastria", + "school", + "Fillible Online", + "Mezgarr", + "Berserk", + "invocations", + "Classe Refeita", + "Auroboros", + "bosses", + "fabula ultima", + "Shagya", + "wild", + "DnD 2024", + "KaiburrKathHound", + "Barbarian Path", + "fauna", + "5E.2014", + "system:curse of strahd", + "Unofficial", + "how to", + "Glaive", + "A5E", + "pt", + "Consumible", + "Realmers'", + "Versatile Lineage", + "Shichibukai", + "2024e", + "Rencontre", + "tag:Spell List", + "elementalist", + "noncaster", + "blasphemous", + "Mordhiem", + "Wildfrost", + "#Regelwerk", + "Rewrite", + "Maldición de Strahd", + "Scion", + "Entities", + "Hoarwyrm", + "Player utility", + "CR 1/4", + "Temperate Forest", + "Demons", + "Drow", + "type:rules", + "fay", + "2e", + "familier", + "supplement", + "Amberwar", + "slime", + "Lycanthropy", + "meta: Terres de Leyt", + "Strong", + "AAH Vol. 1", + "Force", + "Jump", + "Aboleths", + "lol", + "location", + "small", + "customizable", + "Modern", + "Sky", + "portugues", + "Hero", + "Villain", + "element", + "Tyranny of Dragons", + "Adventure Guide", + "New Class", + "Witchlight", + "Shardblade", + "Plateaux", + "WOTC", + "Snippet", + "Terra", + "Otherworldly Patron", + "ritual", + "hag", + "Cyberpunk 2077", + "tavern", + "Artificer Specialist", + "Werewolf", + "Boesia", + "vampiric", + "monastic tradition", + "Gothic", + "celestial", + "Unfinished", + "Core", + "Arcane Tradition", + "Troll", + "Origin", + "Draconic", + "dj9 member", + "test", + "Hag", + "gem", + "Invocations", + "Dark Sun", + "aarkhen", + "How to", + "ravenloft", + "faerie", + "Playtest", + "Shaman", + "dead", + "Tomba Aniquilacio", + "Pacto", + "fullcaster", + "Electric", + "Ability Score", + "4D", + "pathfinder", + "insect", + "hook", + "page layout", + "healing", + "Lineages", + "Flying", + "Martial Arts", + "journal", + "Aide de jeu", + "hunter", + "headers", + "Dark Souls", + "courtyard", + "crossroads", + "Quest", + "CotF", + "defense", + "Semryss", + "invoked class", + "Session Notes", + "goblin", + "infernal", + "fate", + "oni", + "spellbook", + "Summoning", + "slut", + "whore", + "Greyhawk", + "Mobility", + "Reddit Remake", + "Guild", + "Cosmic Mart", + "7th Level", + "dragonborn", + "curse of strahd", + "Ranger Subclass", + "dossier", + "dossie", + "de", + "pnpde", + "Plane Shift", + "halloween", + "group:aventura", + "9th Level", + "tome", + "cold", + "acid", + "deprecated", + "mind flayer", + "MECHA", + "EssentialsKit", + "2d6", + "ToD", + "Work In Progress", + "Bond", + "Versatile", + "Dead", + "SYWTBAGM", + "summoning", + "english", + "Eilistraee", + "Draft", + "DoD", + "map", + "Frightened", + "Psychic Damage", + "eberron", + "recompensa", + "wizard subclass", + "teiran", + "Saltmarsh", + "jp setting", + "Illithid", + "Longbow", + "hell", + "Monarch", + "type:feat", + "reglas", + "cooking", + "Abenteuer", + "reloaded", + "incompleto", + "mecanica", + "Location", + "Grimlores Grimoire", + "2024 Subclass", + "Chiesa di Toleno", + "finalfantasy", + "The Undertomes", + "Lobotomy Corporation", + "SDHTA", + "D&D 2024", + "other", + "ally", + "images", + "Player's Guide", + "Avalon Sword", + "Cael'Yuu", + "dnd-2014", + "Regelwerk", + "Español", + "br", + "dnd 5.0", + "monstro", + "grand cemetery", + "Phoenix", + "dnd 2024", + "Bloodhunter", + "Sintonizacion", + "dungeons & dragons", + "Fix", + "Rulebook", + "Shadowdark", + "heroic", + "HFW", + "Earthdawn", + "24e", + "cormyr", + "suzail", + "dc20", + "tag:Rules", + "The Griffon's Saddlebag", + "LOTM", + "tag:Adventure", + "drunken master", + "eldritch invocation", + "Персонаж", + "Orcs", + "Lizardfolk", + "Frostfell", + "CR 17", + "Shapechanger", + "Farmland", + "Mages", + "Any", + "CR 13", + "Earth", + "Mountain", + "Drake", + "transformation", + "GM", + "Lich", + "lovecraft", + "unique", + "Optional Rules", + "int", + "creator", + "Primal", + "simple", + "golem", + "Void", + "Armour", + "spellsword", + "General", + "Asian", + "Bringers of chaos", + "Optional Feature", + "subraces", + "Galanoth", + "barbarian subclass", + "felhearth", + "modular", + "Vampires", + "wysteria", + "adaptation", + "beasts", + "naruto", + "ninja", + "Psionic", + "Guns", + "Crystal", + "Guardian", + "NonProfit", + "Mimic", + "languages", + "Epic Boons", + "Primer", + "Icewind Dale", + "joke", + "lycan", + "CR3", + "Armors", + "ff7", + "materia", + "final fantasy 7 remake", + "esper", + "ff7 remake", + "gargantuan", + "Frog", + "CR5", + "blank", + "monster hunter", + "league of legends", + "french", + "Pokémon", + "kobold", + "soul", + "ffxi", + "d10", + "Roman", + "Cute", + "DD5", + "variant", + "tree", + "fr", + "Scenario", + "lycanthrope", + "druide", + "staff", + "eios", + "arkheneios", + "Runic", + "Work", + "Ukrainian", + "cover-page", + "mage", + "deities", + "gods", + "Boss Fight", + "Lair", + "WBTW", + "roguish archetype", + "Character Option", + "Shortsword", + "Illrigger", + "Bloodborne", + "cr6", + "Priest", + "Hamon", + "Toonkind", + "rol", + "Strength", + "forgotten realms", + "Spanish", + "Conclave", + "Electro", + "Magical Tattoos", + "Matt Mercer", + "Wildemount", + "Mighty Nien", + "Campaign 2", + "Resistances", + "Bug", + "impression", + "PF", + "Magnus Archives", + "ice", + "speed", + "Generic NPC", + "Titanic", + "Ink Friendly", + "bleed", + "elder scrolls", + "Immortal", + "LMOP", + "Travel", + "Olphus", + "3d6", + "heist", + "World History", + "ghost", + "genie", + "kids on bikes", + "Russia", + "conclave", + "overhaul", + "manual", + "Adventures In Eden", + "Downtime", + "hamon", + "cloak", + "shadowfell", + "Hellfire", + "Paladin Oath", + "Genshin", + "Nation", + "air", + "Magical Item", + "War", + "Original", + "Monstrous Compendium", + "Calamity", + "Warden", + "Apocalypse", + "shield", + "AC", + "expansion", + "Concentration", + "charm", + "Weave", + "lycanthropy", + "raza", + "far realm", + "fighter subclass", + "ita", + "Pirate", + "Laranja", + "Grapple", + "EastByForce", + "hobgoblin", + "oneshot-notes", + "Holy", + "optional", + "type:cenario", + "group:core", + "The Brewery", + "Alcance", + "Morrowind", + "Indigo", + "Divino", + "2nd Level", + "Sub-Class", + "cantrips", + "Cloak", + "battle master", + "Dark", + "Puzzle", + "Lucky", + "consumable", + "rebalance", + "Shove", + "Area Control", + "Vanguard", + "funny", + "e5", + "Dragonlance", + "psion", + "initiative", + "Tactician", + "Inspiration", + "artificier", + "way", + "inspired", + "historia", + "Medusa", + "2 part", + "holy", + "gift", + "Nimble", + "mostri", + "phoenix", + "travel", + "Class Template", + "Intimidation", + "constructs", + "P666", + "Formatting", + "Divinity", + "Rod", + "Language", + "yokai", + "rune", + "western", + "vampires", + "flying", + "cute", + "Enemy", + "boon", + "Tables", + "ShadowFight", + "meta: Theme", + "SCS", + "vanthampur villa", + "CoA", + "shop", + "destiny", + "magical weapon", + "Arcane Arcade", + "XP to Level 3", + "Dice Average RPG", + "Pip-Boy", + "Dragon Heist", + "session notes", + "tattoo", + "flick", + "P6:66", + "Comic Character", + "experiment", + "Minerva", + "type:Spellbook", + "Realmfall", + "Wand", + "halfling", + "sw5e", + "implementar AP", + "Mask", + "Gazook89", + "Weltenrauch-Chroniken", + "MiA", + "Made in Abyss", + "français", + "fae", + "Lemuria", + "Mork Borg", + "guerrier", + "prunus", + "condition", + "pf2", + "tr", + "costrutto", + "German", + "project moon", + "5r", + "galles", + "Project moon", + "Yisang", + "Spicebush", + "player-accessible", + "Especie", + "Westmarch", + "a", + "Cart", + "Magus", + "group:Mchael Galvis", + "tip", + "werewolf", + "mundane", + "garrett", + "unarmed", + "Arcane Odyssey", + "Tomb of Divinity", + "pets", + "Video Game", + "4 part", + "pbta", + "Druids", + "multiclass", + "manuale", + "mimic", + "plane shift", + "Dotes", + "Hechizos", + "Infernal", + "Enhanced", + "done", + "Mission report", + "Blanks", + "Masks", + "Ultimate Ability", + "shadow-slave", + "Advertising", + "transform", + "Fullmetal Alchemist", + "Fullmetal Alchemist Brotherhood", + "tag:TAoF&F", + "Dwarves", + "Humans", + "Nine Hells", + "Devils", + "Archons", + "CR 15", + "Troglodytes", + "Goliath", + "retired", + "boots", + "ranged", + "shields", + "Zhentarim", + "World of Warcraft", + "Frontline", + "Guildmaster's Guide to Ravnica", + "Dungeons & Dragons 5e", + "beholder", + "NEEDS FIXING", + "mechanic", + "Loot", + "champion", + "Runes", + "Shield", + "Punch", + "Sniper", + "Magical Girl", + "NotDND", + "story", + "Sleep", + "Bard College", + "Illusion", + "Thunder", + "Defender", + "Genasi", + "troll", + "Gehenna", + "Yugoloth", + "social", + "Player Class", + "homebrew class", + "CR 16", + "Ghost", + "Kobolds", + "Trolls", + "Yuan-Ti", + "Elder Scrolls Offline", + "armure", + "Mage", + "CR 18", + "Technology", + "Mystery", + "darkness", + "Airship", + "New Campaign", + "Warframe", + "Wizard Subclass", + "Gold", + "Candor", + "Overhaul", + "Dragon Knight", + "Enoreth", + "Artifacts", + "New", + "AMMO", + "Campagne", + "Valbise", + "Subclasseptember", + "Mecha", + "Yu-Gi-Oh", + "Goblinoid", + "underwater", + "SW5E", + "bardo" +] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f8ea5df7c..db6143f52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,13 +10,13 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-transform-runtime": "^7.28.3", - "@babel/preset-env": "^7.28.3", + "@babel/core": "^7.29.0", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.0", "@babel/preset-react": "^7.28.5", "@babel/runtime": "^7.28.4", "@dmsnell/diff-match-patch": "^1.1.0", - "@googleapis/drive": "^19.2.0", + "@googleapis/drive": "^20.1.0", "@sanity/diff-match-patch": "^3.2.0", "body-parser": "^2.2.0", "classnames": "^2.5.1", @@ -31,7 +31,7 @@ "express-async-handler": "^1.2.0", "express-static-gzip": "3.0.0", "fflate": "^0.8.2", - "fs-extra": "11.3.2", + "fs-extra": "^11.3.3", "hash-wasm": "^4.12.0", "idb-keyval": "^6.2.2", "js-yaml": "^4.1.1", @@ -47,10 +47,10 @@ "marked-nonbreaking-spaces": "^1.0.1", "marked-smartypants-lite": "^1.0.3", "marked-subsuper-text": "^1.0.4", - "marked-variables": "^1.0.4", + "marked-variables": "^1.0.5", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.30.1", - "mongoose": "^8.20.0", + "mongoose": "^9.2.1", "nanoid": "5.1.6", "nconf": "^0.13.0", "react": "^18.3.1", @@ -73,7 +73,7 @@ "globals": "^16.4.0", "jest": "^30.2.0", "jest-expect-message": "^1.1.3", - "jsdom": "^27.4.0", + "jsdom": "^28.0.0", "jsdom-global": "^3.0.2", "postcss-less": "^6.0.0", "stylelint": "^16.25.0", @@ -94,23 +94,120 @@ "license": "MIT" }, "node_modules/@asamuzakjp/css-color": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.1.tgz", - "integrity": "sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.2.tgz", + "integrity": "sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==", "dev": true, "license": "MIT", "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "lru-cache": "^11.2.4" + "@csstools/css-calc": "^3.0.0", + "@csstools/css-color-parser": "^4.0.1", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0", + "lru-cache": "^11.2.5" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/@csstools/css-calc": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz", + "integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/@csstools/css-color-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.1.tgz", + "integrity": "sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.0.1", + "@csstools/css-calc": "^3.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" } }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -118,9 +215,9 @@ } }, "node_modules/@asamuzakjp/dom-selector": { - "version": "6.7.6", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.6.tgz", - "integrity": "sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -128,13 +225,13 @@ "bidi-js": "^1.0.3", "css-tree": "^3.1.0", "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.4" + "lru-cache": "^11.2.6" } }, "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -149,9 +246,9 @@ "license": "MIT" }, "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", @@ -163,30 +260,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", - "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -203,13 +300,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -475,12 +572,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.6" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -864,14 +961,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz", - "integrity": "sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1043,9 +1140,9 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz", - "integrity": "sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", @@ -1245,15 +1342,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", - "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1279,13 +1376,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1534,9 +1631,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz", - "integrity": "sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" @@ -1580,13 +1677,13 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", - "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -1739,12 +1836,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.6.tgz", - "integrity": "sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", @@ -1758,7 +1855,7 @@ "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.6", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", @@ -1769,7 +1866,7 @@ "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", @@ -1782,9 +1879,9 @@ "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", - "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", @@ -1796,7 +1893,7 @@ "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.6", + "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1809,10 +1906,10 @@ "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1822,6 +1919,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1881,17 +1991,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1899,9 +2009,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -1918,6 +2028,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, "node_modules/@cacheable/memory": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.7.tgz", @@ -1960,14 +2083,14 @@ } }, "node_modules/@cacheable/utils": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.3.tgz", - "integrity": "sha512-JsXDL70gQ+1Vc2W/KUFfkAJzgb4puKwwKehNLuB+HrNKWf91O736kGfxn4KujXCCSuh6mRRL4XEB0PkAFjWS0A==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.4.tgz", + "integrity": "sha512-knwKUJEYgIfwShABS1BX6JyJJTglAFcEU7EXqzTdiGCXur4voqkiJkdgZIQtWNFhynzDWERcTYv/sETMu3uJWA==", "dev": true, "license": "MIT", "dependencies": { "hashery": "^1.3.0", - "keyv": "^5.5.5" + "keyv": "^5.6.0" } }, "node_modules/@cacheable/utils/node_modules/keyv": { @@ -1981,9 +2104,9 @@ } }, "node_modules/@csstools/color-helpers": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", - "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.1.tgz", + "integrity": "sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==", "dev": true, "funding": [ { @@ -1997,59 +2120,7 @@ ], "license": "MIT-0", "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", - "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" + "node": ">=20.19.0" } }, "node_modules/@csstools/css-parser-algorithms": { @@ -2077,9 +2148,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.25.tgz", - "integrity": "sha512-g0Kw9W3vjx5BEBAF8c5Fm2NcB/Fs8jJXh85aXqwEXiL+tqtOut07TWgyaGzAAfTM+gKckrrncyeGEZPcaRgm2Q==", + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.27.tgz", + "integrity": "sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==", "dev": true, "funding": [ { @@ -2091,10 +2162,7 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } + "license": "MIT-0" }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", @@ -2373,9 +2441,9 @@ } }, "node_modules/@exodus/bytes": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.9.0.tgz", - "integrity": "sha512-lagqsvnk09NKogQaN/XrtlWeUF8SRhT12odMvbTIIaVObqzwAogL6jhR4DAp0gPuKoM1AOVrKUshJpRdpMFrww==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.14.1.tgz", + "integrity": "sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==", "dev": true, "license": "MIT", "engines": { @@ -2391,9 +2459,9 @@ } }, "node_modules/@googleapis/drive": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/@googleapis/drive/-/drive-19.2.1.tgz", - "integrity": "sha512-BM2r8B9dTo1zdi+fEPa62GgVjwP2EfaYoD1rTLYlA0SoWhNsaX/PKLBLEjEwkxZuIIQ12y57HZQjti6Jgudwtg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@googleapis/drive/-/drive-20.1.0.tgz", + "integrity": "sha512-8/gapeLuZ3igooEGLE1AL3Zp5fjqigZQNmyjehb4QF7JVJh6FXF+72AcQGGsFypwJb2S68HIuQFomHBw4RJSOg==", "license": "Apache-2.0", "dependencies": { "googleapis-common": "^8.0.0" @@ -2917,9 +2985,9 @@ "license": "MIT" }, "node_modules/@mongodb-js/saslprep": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.5.tgz", - "integrity": "sha512-k64Lbyb7ycCSXHSLzxVdb2xsKGPMvYZfCICXvDsI8Z65CeWQzTEKS4YmGbnqw+U9RBvLPTsB6UCmwkgsDTGWIw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz", + "integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==", "license": "MIT", "dependencies": { "sparse-bitfield": "^3.0.3" @@ -3177,9 +3245,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz", - "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==", + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3200,9 +3268,9 @@ "license": "MIT" }, "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==", "license": "MIT", "dependencies": { "@types/webidl-conversions": "*" @@ -3226,14 +3294,14 @@ "license": "MIT" }, "node_modules/@typescript-eslint/project-service": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", - "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", + "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.53.1", - "@typescript-eslint/types": "^8.53.1", + "@typescript-eslint/tsconfig-utils": "^8.56.0", + "@typescript-eslint/types": "^8.56.0", "debug": "^4.4.3" }, "engines": { @@ -3248,14 +3316,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", - "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", + "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1" + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3266,9 +3334,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", - "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", + "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", "dev": true, "license": "MIT", "engines": { @@ -3283,9 +3351,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", - "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", + "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", "dev": true, "license": "MIT", "engines": { @@ -3297,16 +3365,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", - "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", + "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.53.1", - "@typescript-eslint/tsconfig-utils": "8.53.1", - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1", + "@typescript-eslint/project-service": "8.56.0", + "@typescript-eslint/tsconfig-utils": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", @@ -3351,9 +3419,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3364,16 +3432,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", - "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", + "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.53.1", - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/typescript-estree": "8.53.1" + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3383,19 +3451,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", - "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", + "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.53.1", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3405,6 +3473,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -4366,9 +4447,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz", - "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==", + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -4655,7 +4736,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -4733,12 +4814,12 @@ } }, "node_modules/bson": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", - "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-7.2.0.tgz", + "integrity": "sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==", "license": "Apache-2.0", "engines": { - "node": ">=16.20.1" + "node": ">=20.19.0" } }, "node_modules/buffer": { @@ -4902,9 +4983,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001766", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", - "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", "funding": [ { "type": "opencollective", @@ -4985,9 +5066,9 @@ } }, "node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -5132,9 +5213,9 @@ } }, "node_modules/codemirror": { - "version": "5.65.20", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.20.tgz", - "integrity": "sha512-i5dLDDxwkFCbhjvL2pNjShsojoL3XHyDwsGv1jqETUoW+lzpBKKqNTUWgQwVAOa0tUm4BwekT455ujafi8payA==", + "version": "5.65.21", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.21.tgz", + "integrity": "sha512-6teYk0bA0nR3QP0ihGMoxuKzpl5W80FpnHpBJpgy66NK3cZv5b/d/HY8PnRvfSsCG1MTfr92u2WUl+wT0E40mQ==", "license": "MIT" }, "node_modules/collect-v8-coverage": { @@ -5513,13 +5594,13 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", - "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz", + "integrity": "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==", "dev": true, "license": "MIT", "engines": { - "node": ">=12 || >=16" + "node": ">=12" } }, "node_modules/css-tree": { @@ -5550,25 +5631,25 @@ } }, "node_modules/cssstyle": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.7.tgz", - "integrity": "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.0.1.tgz", + "integrity": "sha512-IoJs7La+oFp/AB033wBStxNOJt4+9hHMxsXUPANcoXL2b3W4DZKghlJ2cI/eyeRZIQ9ysvYEorVhjrcYctWbog==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^4.1.1", - "@csstools/css-syntax-patches-for-csstree": "^1.0.21", + "@asamuzakjp/css-color": "^4.1.2", + "@csstools/css-syntax-patches-for-csstree": "^1.0.26", "css-tree": "^3.1.0", - "lru-cache": "^11.2.4" + "lru-cache": "^11.2.5" }, "engines": { "node": ">=20" } }, "node_modules/cssstyle/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -5591,27 +5672,17 @@ } }, "node_modules/data-urls": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.1.tgz", - "integrity": "sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", "dev": true, "license": "MIT", "dependencies": { "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^15.1.0" + "whatwg-url": "^16.0.0" }, "engines": { - "node": ">=20" - } - }, - "node_modules/data-urls/node_modules/whatwg-mimetype": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", - "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/data-view-buffer": { @@ -5715,13 +5786,6 @@ } } }, - "node_modules/dedent-tabs": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/dedent-tabs/-/dedent-tabs-0.10.3.tgz", - "integrity": "sha512-RYq1ewj+FDOEKxjhU9a2xwSJX+ODruTeIcMwt3KVAuUpOGFLDzmQWU3ByXRLVFHYAg584gcYSv1k+KheoLExsw==", - "deprecated": "The dedent package is maintained again, so this one isn't necessary anymore. Please use dedent again. All features from this package should now be included.", - "license": "MIT" - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -5982,9 +6046,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.278", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz", - "integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "license": "ISC" }, "node_modules/elliptic": { @@ -6345,9 +6409,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "29.12.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.12.1.tgz", - "integrity": "sha512-Rxo7r4jSANMBkXLICJKS0gjacgyopfNAsoS0e3R9AHnjoKuQOaaPfmsDJPi8UWwygI099OV/K/JhpYRVkxD4AA==", + "version": "29.15.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.15.0.tgz", + "integrity": "sha512-ZCGr7vTH2WSo2hrK5oM2RULFmMruQ7W3cX7YfwoTiPfzTGTFBMmrVIz45jZHd++cGKj/kWf02li/RhTGcANJSA==", "dev": true, "license": "MIT", "dependencies": { @@ -6358,8 +6422,9 @@ }, "peerDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "jest": "*" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "jest": "*", + "typescript": ">=4.8.4 <6.0.0" }, "peerDependenciesMeta": { "@typescript-eslint/eslint-plugin": { @@ -6367,6 +6432,9 @@ }, "jest": { "optional": true + }, + "typescript": { + "optional": true } } }, @@ -6404,19 +6472,25 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7192,9 +7266,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -7425,6 +7499,7 @@ "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -7874,9 +7949,9 @@ } }, "node_modules/hookified": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.0.tgz", - "integrity": "sha512-51w+ZZGt7Zw5q7rM3nC4t3aLn/xvKDETsXqMczndvwyVQhAHfUmUuFBRFcos8Iyebtk7OAE9dL26wFNzZVVOkw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", "dev": true, "license": "MIT" }, @@ -8619,7 +8694,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8788,9 +8863,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -9364,9 +9439,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -9510,18 +9585,19 @@ } }, "node_modules/jsdom": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.4.0.tgz", - "integrity": "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@acemir/cssom": "^0.9.28", - "@asamuzakjp/dom-selector": "^6.7.6", - "@exodus/bytes": "^1.6.0", - "cssstyle": "^5.3.4", - "data-urls": "^6.0.0", + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^6.0.1", + "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "http-proxy-agent": "^7.0.2", @@ -9531,11 +9607,11 @@ "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.0", + "undici": "^7.21.0", "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^8.0.0", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^15.1.0", - "ws": "^8.18.3", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", "xml-name-validator": "^5.0.0" }, "engines": { @@ -9723,12 +9799,12 @@ } }, "node_modules/kareem": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", - "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-3.2.0.tgz", + "integrity": "sha512-VS8MWZz/cT+SqBCpVfNN4zoVz5VskR3N4+sTmUXme55e9avQHntpwpNq0yjnosISXqwJ3AQVjlbI4Dyzv//JtA==", "license": "Apache-2.0", "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, "node_modules/keyv": { @@ -9877,27 +9953,6 @@ "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", "license": "MIT" }, - "node_modules/livereload/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -9981,9 +10036,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -10113,19 +10168,17 @@ } }, "node_modules/marked-variables": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/marked-variables/-/marked-variables-1.0.4.tgz", - "integrity": "sha512-AJg3vw5fYQ4V1qrfC5QHCL5Ou/lfBIbeZb/EfR/k7uOtBnKNjiIRaN7XVN8m5HBawxMzwMHZVpmQx0oIEBkHyQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/marked-variables/-/marked-variables-1.0.5.tgz", + "integrity": "sha512-iDsQoXA4lD1ZdPk0Rh6lHRZ2pPNRpd+dfojKvqlbgHw8VhlJfd9YBMK4Zf3McNpkF33VllJ2WbhRCfWw56gOfw==", "license": "MIT", "dependencies": { - "dedent": "^1.6.0", - "dedent-tabs": "^0.10.3", "expr-eval": "^2.0.2", "romans": "^3.1.0", "written-number": "^0.11.1" }, "peerDependencies": { - "marked": ">=3 <17" + "marked": ">=3 <18" } }, "node_modules/markedLegacy": { @@ -10460,13 +10513,16 @@ } }, "node_modules/mongodb-connection-string-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", - "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.1.tgz", + "integrity": "sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==", "license": "Apache-2.0", "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^14.1.0 || ^13.0.0" + "@types/whatwg-url": "^13.0.0", + "whatwg-url": "^14.1.0" + }, + "engines": { + "node": ">=20.19.0" } }, "node_modules/mongodb-connection-string-url/node_modules/tr46": { @@ -10504,106 +10560,63 @@ } }, "node_modules/mongoose": { - "version": "8.21.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.21.1.tgz", - "integrity": "sha512-1LhrVeHwiyAGxwSaYSq2uf32izQD+qoM2c8wq63W8MIsJBxKQDBnMkhJct55m0qqCsm2Maq8aPpIIfOHSYAqxg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.2.1.tgz", + "integrity": "sha512-fmNLwgct5km7iL1MqvTMncarR1E1TIw2lmc9A4UoDVdS7AQe95K+DnRK0qATkSUdwUC9V/5wlDcqnkQQjbSRkA==", "license": "MIT", "dependencies": { - "bson": "^6.10.4", - "kareem": "2.6.3", - "mongodb": "~6.20.0", + "kareem": "3.2.0", + "mongodb": "~7.0", "mpath": "0.9.0", - "mquery": "5.0.0", + "mquery": "6.0.0", "ms": "2.1.3", "sift": "17.1.3" }, "engines": { - "node": ">=16.20.1" + "node": ">=20.19.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mongoose" } }, - "node_modules/mongoose/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mongoose/node_modules/gaxios": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", - "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/mongoose/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.1.tgz", + "integrity": "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==", "license": "Apache-2.0", "optional": true, "peer": true, "dependencies": { - "gaxios": "^5.0.0", + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/mongoose/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/mongoose/node_modules/mongodb": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.20.0.tgz", - "integrity": "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.0.0.tgz", + "integrity": "sha512-vG/A5cQrvGGvZm2mTnCSz1LUcbOPl83hfB6bxULKQ8oFZauyox/2xbZOoGNl+64m8VBrETkdGCDBdOsCr3F3jg==", "license": "Apache-2.0", "dependencies": { "@mongodb-js/saslprep": "^1.3.0", - "bson": "^6.10.4", - "mongodb-connection-string-url": "^3.0.2" + "bson": "^7.0.0", + "mongodb-connection-string-url": "^7.0.0" }, "engines": { - "node": ">=16.20.1" + "node": ">=20.19.0" }, "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", + "@aws-sdk/credential-providers": "^3.806.0", + "@mongodb-js/zstd": "^7.0.0", + "gcp-metadata": "^7.0.1", + "kerberos": "^7.0.0", + "mongodb-client-encryption": ">=7.0.0 <7.1.0", "snappy": "^7.3.2", - "socks": "^2.7.1" + "socks": "^2.8.6" }, "peerDependenciesMeta": { "@aws-sdk/credential-providers": { @@ -10629,52 +10642,6 @@ } } }, - "node_modules/mongoose/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "optional": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/mongoose/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT", - "optional": true - }, - "node_modules/mongoose/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause", - "optional": true - }, - "node_modules/mongoose/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/mpath": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", @@ -10685,15 +10652,12 @@ } }, "node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-6.0.0.tgz", + "integrity": "sha512-b2KQNsmgtkscfeDgkYMcWGn9vZI9YoXh802VDEwE6qc50zxBFQ0Oo8ROkawbPAsXCY1/Z1yp0MagqsZStPWJjw==", "license": "MIT", - "dependencies": { - "debug": "4.x" - }, "engines": { - "node": ">=14.0.0" + "node": ">=20.19.0" } }, "node_modules/ms": { @@ -10703,9 +10667,9 @@ "license": "MIT" }, "node_modules/nan": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.24.0.tgz", - "integrity": "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", + "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==", "license": "MIT", "optional": true }, @@ -10982,6 +10946,25 @@ "node": ">=10.5.0" } }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", @@ -11973,9 +11956,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -13730,9 +13713,9 @@ } }, "node_modules/stylelint-config-recess-order": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recess-order/-/stylelint-config-recess-order-7.6.0.tgz", - "integrity": "sha512-c3LXX4a8UEtrMD/KigK4I7LFexbM2p/eSTqnix5dmmvydEqX3dzrRt981h8giSEhA51vxdCEefQc3umH60i2bA==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recess-order/-/stylelint-config-recess-order-7.6.1.tgz", + "integrity": "sha512-ac0H/Iy2chh1YBADrua87G+nJCmG/SdG7gjnoLvtfpN0D+RuNfuADawfbCKvm0LMp5hvuRFNkJsu6xNoLM5ToA==", "dev": true, "license": "ISC", "peerDependencies": { @@ -14029,9 +14012,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { @@ -14116,7 +14099,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -14211,22 +14194,22 @@ } }, "node_modules/tldts": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", - "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.23.tgz", + "integrity": "sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.19" + "tldts-core": "^7.0.23" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", - "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz", + "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==", "dev": true, "license": "MIT" }, @@ -14642,6 +14625,16 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "license": "MIT" }, + "node_modules/undici": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz", + "integrity": "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -15357,27 +15350,28 @@ } }, "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/whatwg-url": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz", - "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.0.tgz", + "integrity": "sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==", "dev": true, "license": "MIT", "dependencies": { + "@exodus/bytes": "^1.11.0", "tr46": "^6.0.0", - "webidl-conversions": "^8.0.0" + "webidl-conversions": "^8.0.1" }, "engines": { - "node": ">=20" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/which": { @@ -15608,17 +15602,16 @@ "license": "MIT" }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", - "dev": true, + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=8.3.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { "bufferutil": { diff --git a/package.json b/package.json index b56adc0a7..7004ec51d 100644 --- a/package.json +++ b/package.json @@ -61,10 +61,11 @@ "server" ], "transformIgnorePatterns": [ - "node_modules/(?!(nanoid|@exodus/bytes|parse5)/)" + "node_modules/(?!(nanoid|@exodus/bytes|parse5|@asamuzakjp|@csstools)/)" ], "transform": { - "^.+\\.js$": "babel-jest" + "^.+\\.[jt]s$": "babel-jest", + "^.+\\.mjs$": "babel-jest" }, "coveragePathIgnorePatterns": [ "build/*" @@ -88,13 +89,13 @@ ] }, "dependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-transform-runtime": "^7.28.3", - "@babel/preset-env": "^7.28.3", + "@babel/core": "^7.29.0", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.0", "@babel/preset-react": "^7.28.5", "@babel/runtime": "^7.28.4", "@dmsnell/diff-match-patch": "^1.1.0", - "@googleapis/drive": "^19.2.0", + "@googleapis/drive": "^20.1.0", "@sanity/diff-match-patch": "^3.2.0", "body-parser": "^2.2.0", "classnames": "^2.5.1", @@ -109,7 +110,7 @@ "express-async-handler": "^1.2.0", "express-static-gzip": "3.0.0", "fflate": "^0.8.2", - "fs-extra": "11.3.2", + "fs-extra": "^11.3.3", "hash-wasm": "^4.12.0", "idb-keyval": "^6.2.2", "js-yaml": "^4.1.1", @@ -125,10 +126,10 @@ "marked-nonbreaking-spaces": "^1.0.1", "marked-smartypants-lite": "^1.0.3", "marked-subsuper-text": "^1.0.4", - "marked-variables": "^1.0.4", + "marked-variables": "^1.0.5", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.30.1", - "mongoose": "^8.20.0", + "mongoose": "^9.2.1", "nanoid": "5.1.6", "nconf": "^0.13.0", "react": "^18.3.1", @@ -151,7 +152,7 @@ "globals": "^16.4.0", "jest": "^30.2.0", "jest-expect-message": "^1.1.3", - "jsdom": "^27.4.0", + "jsdom": "^28.1.0", "jsdom-global": "^3.0.2", "postcss-less": "^6.0.0", "stylelint": "^16.25.0", diff --git a/server/admin.api.spec.js b/server/admin.api.spec.js index e156c6c8f..cb25dd67d 100644 --- a/server/admin.api.spec.js +++ b/server/admin.api.spec.js @@ -1,4 +1,5 @@ /*eslint max-lines: ["warn", {"max": 1000, "skipBlankLines": true, "skipComments": true}]*/ +import mongoose from 'mongoose'; import supertest from 'supertest'; import HBApp from './app.js'; import { model as NotificationModel } from './notifications.model.js'; @@ -8,8 +9,19 @@ import { model as HomebrewModel } from './homebrew.model.js'; // Mimic https responses to avoid being redirected all the time const app = supertest.agent(HBApp).set('X-Forwarded-Proto', 'https'); +let dbState; + describe('Tests for admin api', ()=>{ + beforeEach(()=>{ + // Mock DB ready (for dbCheck middleware) + dbState = mongoose.connection.readyState; + mongoose.connection.readyState = 1; + }); + afterEach(()=>{ + // Restore DB ready state + mongoose.connection.readyState = dbState; + jest.resetAllMocks(); }); diff --git a/themes/V3/Blank/snippets.js b/themes/V3/Blank/snippets.js index 2f061730e..0b61c0fd6 100644 --- a/themes/V3/Blank/snippets.js +++ b/themes/V3/Blank/snippets.js @@ -588,6 +588,21 @@ export default [ }, + { + name : 'True 20', + subsnippets : [ + { + name : 'OGL 1.0 Section 15', + gen : LicenseGen.grTrue20Sec15, + }, + { + name : 'True20 Logo', + gen : LicenseGen.grTrue20CompatLogo, + } + + ] + }, + { name : 'Wizards of the Coast', icon : 'fab fa-wizards-of-the-coast', diff --git a/themes/V3/Blank/snippets/license.gen.js b/themes/V3/Blank/snippets/license.gen.js index 4cddb8b72..a37cb9a47 100644 --- a/themes/V3/Blank/snippets/license.gen.js +++ b/themes/V3/Blank/snippets/license.gen.js @@ -58,5 +58,7 @@ export default { iconsCompatibility : 'Compatibility with Icons requires Icons Superpowered Roleplaying from Ad Infinitum Adventures. Ad Infinitum Adventures does not guarantee compatibility, and does not endorse this product.', iconsTrademark : 'Icons Superpowered Roleplaying is a trademark of Steve Kenson, published exclusively by Ad Infinitum Adventures. The Icons Superpowered Roleplaying Compatibility Logo is a trademark of Ad Infinitum Adventures and is used under the Icons Superpowered Roleplaying Compatibility License.', icondsSection15 : 'Open Game License v 1.0, Copyright 2000, Wizards of the Coast, Inc.\n::\nFudge System Reference Document, Copyright 2005, Grey Ghost Press, Inc.; Authors Steffan O\’Sullivan and Ann Dupuis, with additional material by Peter Bonney, Deird’Re Brooks, Reimer Behrends, Shawn Garbett, Steven Hammond, Ed Heil, Bernard Hsiung, Sedge Lewis, Gordon McCormick, Kent Matthewson, Peter Mikelsons, Anthony Roberson, Andy Skinner, Stephan Szabo, John Ughrin, Dmitri Zagidulin\n::\nFATE (Fantastic Adventures in Tabletop Entertainment), Copyright 2003 by Evil Hat Productions LLC; Authors Robert Donoghue and Fred Hicks\n::\nSpirit of the Century, Copyright 2006, Evil Hat Productions LLC. Authors Robert Donoghue, Fred Hicks, and Leonard Balsera.\n::\nIcons, Copyright 2010, Ad Infinitum Adventures; Author Steve Kenson.\n', - iconsCompatibilityLogo : '![Icons Compatibility Logo](https://homebrewery.naturalcrit.com/assets/license_logos/Ad-Infinitum-Adventures_Icons-Compatibility-License_Logo.png){width:200px}' + iconsCompatibilityLogo : '![Icons Compatibility Logo](/assets/license_logos/Ad-Infinitum-Adventures_Icons-Compatibility-License_Logo.png){width:200px}', + grTrue20Sec15 : 'True20 Adventure Roleplaying, Revised Edition OGL Section 15.\n\n15. COPYRIGHT NOTICE\nOpen Game License v 1.0 Copyright 2000, Wizards of the Coast, Inc.\n\nSystem Reference Document, Copyright 2000, Wizards of the Coast, Inc., Authors Jonathan Tweet, Monte Cook, Skip Williams, based on original material by E. Gary Gygax and Dave Arneson.\n\nModern System Reference Document Copyright 2002-2004, Wizards of the Coast, Inc.; Authors Bill Slavicsek, Jeff Grubb, Rich Redman, Charles Ryan, Eric Cagle, David Noonan, Stan!, Christopher Perkins, Rodney Thompson, and JD Wiker, based on material by Jonathan Tweet, Monte Cook, Skip Williams, Richard Baker, Peter Adkison, Bruce R. Cordell, John Tynes, Andy Collins, and JD Wiker.\n\nAdvanced Player’s Manual, Copyright 2005, Green Ronin Publishing: Author Skip Williams.\n\nAdvanced Player’s Guide, Copyright 2004, White Wolf Publishing, Inc.\n\nAlgernon Files, Copyright 2004, Blackwyrm Games; Authors Aaron Sullivan and Dave Mattingly.\n\nArmies of the Abyss, Copyright 2002, Green Ronin Publishing; Authors Erik Mona and Chris Pramas.\n\nThe Avatar’s Handbook, Copyright 2003, Green Ronin Publishing; Authors Jesse Decker and Chris Tomasson.\n\nBastards & Bloodlines, Copyright 2003, Green Ronin Publishing, Author Owen K.C. Stephens\n\nBlue Rose, Copyright 2005, Green Ronin Publishing; Authors Jeremy Crawford, Dawn Elliot, Steve Kenson, and John Snead.\n\nBlue Rose Companion, Copyright 2005, Green Ronin Publishing; Editor Jeremy Crawford.\n\nThe Book of Fiends, Copyright 2003, Green Ronin Publishing; Authors Aaron Loeb, Erik Mona, Chris Pramas, and Robert J. Schwalb.\n\nBook of the Righteous, Copyright 2002, Aaron Loeb.\n\nChallenging Challenge Ratings: Immortal’s Handbook, Copyright 2003, Craig Cochrane.\n\nConan The Roleplaying Game, Copyright 2003 Conan Properties International LCC; Authorized Publisher Mongoose Publishing Ltd; Author Ian Sturrock.\n\nCORE Explanatory Notice, Copyright 2003, Benjamin R. Durbin\n\nCreatures of Freeport, Copyright 2004, Green Ronin Publishing, LLC; Authors Graeme Davis and Keith Baker.\n\nCrime and Punishment, Copyright 2003, Author Keith Baker\n\nCrooks!, Copyright 2003, Green Ronin Publishing; Authors Sean Glenn, Kyle Hunter, and Erik Mona.\n\nCry Havoc, Copyright 2003, Skip Williams. All rights reserved.\n\nChallenging Challenge Ratings: Immortal’s Handbook, Copyright 2003, Craig Cochrane.\n\nDarwin’s World 2nd Edition, Copyright 2003, RPG Objects; Authors Dominic Covey and Chris Davis.\n\nDesign Parameters: Immortal’s Handbook, Copyright 2003, Craig Cochrane.\n\nFading Suns d20, Copyright 2001, Holistic Design, Inc.\n\nGalactic Races, Copyright 2001, Fantasy Flight Games.\n\nGimmick’s Guide to Gadgets, Copyright 2005, Green Ronin Publishing; Author Mike Mearls.\n\nGrim Tales, Copyright 2004, Benjamin R. Durbin, published by Bad Axe Games, LCC.\n\nGrim Tales, Cyberware game mechanics; Copyright 2003, Benjamin R. Durbin, published by Bad Axe Games, LCC.\n\nGrim Tales, Firearms game mechanics; Copyright 2003, Benjamin R. Durbin, published by Bad Axe Games, LCC.\n\nGrim Tales, Horror game mechanics; Copyright 2003, Benjamin R. Durbin, published by Bad Axe Games, LCC.\n\nGrim Tales, Spellcasting game mechanics; Copyright 2003, Benjamin R. Durbin, published by Bad Axe Games, LCC.\n\nGrim Tales, Vehicle game mechanics; Copyright 2003, Benjamin R. Durbin, published by Bad Axe Games, LCC.\n\nHot Pursuit, Copyright 2005, Corey Reid, published by Adamant Entertainment, Inc.\n\nImmortals Handbook, Copyright 2003, Craig Cochrane.\n\nLegions of Hell, Copyright 2001, Green Ronin Publishing; Author Chris Pramas.\n\nA Magical Medieval Society: Western Europe, Copyright 2003, Expeditious Retreat Press; Authors Suzi Yee and Joseph Browning.\n\nThe Mastermind’s Manual, Copyright 2006, Green Ronin Publishing; Author Steve Kenson.\n\nModern Player’s Companion, Copyright 2003, The Game Mechanics, Inc; Author: Stan!\n\nMonster’s Handbook, Copyright 2002, Fantasy Flight Publishing, Inc.\n\nMonte Cook Presents: Iron Heroes, Copyright 2005, Monte J. Cook. All rights reserved.\n\nMonte Cook’s: Arcana Unearthed, Copyright 2003, Monte J. Cook. All rights reserved.\n\nMutants & Masterminds, Copyright 2002, Green Ronin Publishing; Author Steve Kenson.\n\nMutants & Masterminds, Second Edition, Copyright 2005, Green Ronin Publishing; Author Steve Kenson.\n\nMutants & Masterminds Annual #1, Copyright 2004, Green Ronin Publishing, LLC; Editor Erik Mona.\n\nMythic Heroes, Copyright 2005, Benjamin R. Durbin, published by Bad Axe Games, LLC.\n\nOGL Horror, Copyright 2003, Mongoose Publishing Limited.\n\nPossessors: Children of the Outer Gods, Copyright 2003, Philip Reed and Christopher Shy, www.philipjreed.com and www.studioronin.com.\n\nThe Psychic’s Handbook, Copyright 2004, Green Ronin Publishing; Author Steve Kenson.\n\nThe Quintessential Fighter, Copyright 2001 Mongoose Publishing\n\nRelics and Rituals: Excalibur,Copyright 2004, White Wolf Publishing, Inc.\n\nRokugan, Copyright 2001 AEG\n\nThe Seven Saxons, by Benjamin R. Durbin and Ryan Smalley, Copyright 2005, Bad Axe Games, LLC.\n\nSilver Age Sentinels d20, Copyright 2002, Guardians of Order, Inc.; Authors Stephen Kenson, Mark C. Mackinnon, Jeff Mackintosh, Jesse Scoble.\n\nSkull & Bones, Copyright 2003, Green Ronin, Green Ronin Publisihing, Authors Ian Sturrock, T.S. Luikart, and Gareth-Michael Skarka.\n\nSpycraft Copyright 2002, Alderac Entertainment Group.\n\nSpycraft Espionage Handbook, Copyright 2002, Alderac Entertainment Group, Inc.; Authors Patrick Kapera and Kevin Wilson.\n\nSpycraft Faceman/Snoop Class Guide, Copyright 2003, Alderac Entertainment Group, Inc.; Authors Alexander Flagg, Clayton A. Oliver.\n\nSpycraft Fixer/Pointman Class Guide, Copyright 2003, Alderac Entertainment Group, Inc.; Authors Scott Gearin.\n\nSpycraft Mastermind Guide, Copyright 2004, Alderac Entertainment Group, Inc.; Steve Crow, Alexander Flagg, B. D. Flory, Clayton A. Oliver.\n\nSpycraft Modern Arms Guide, Copyright 2002, Alderac Entertainment Group, Inc.; Authors Chad Brunner, Tim D’Allard, Rob Drake, Michael Fish, Scott Gearin, Owen Hershey, Patrick Kapera, Michael Petrovich, Jim Wardrip, Stephen Wilcoxon.\n\nSpycraft Soldier/Wheelman Class Guide, Copyright 2003, Alderac Entertainment Group, Inc.; Authors Chad Brunner, Shawn Carman, B. D. Flory, Scott Gearin, Patrick Kapera.\n\nSpycraft U.S. Militaries Guide, Copyright 2004, Alderac Entertainment Group, Inc.; Authors Dave McAlister, Clayton A. Oliver, Patrick Kapera.\n\nSpycraft, Copyright 2005, Alderac Entertainment Group.\n\nSwords of Our Fathers, Copyright 2003, The Game Mechanics\n\nTales of the Caliphate Nights, Copyright 2006, Paradigm Concepts, Inc., Author Aaron Infante-Levy\n\nTome of Horrors, Copyright 2002, Necromancer Games., Inc.; Author Scott Greene, based on original material by Gary Gygax.\n\nTrue20 Adventure Roleplaying, Copyright 2005, Green Ronin Publishing; Author Steve Kenson.\n\nTrue20 Bestiary, Copyright 2006, Green Ronin Publishing; Author Matthew E. Kaiser.\n\nTrue20 Companion, Copyright 2007, Green Ronin Publishing; Authors Erica Balsley, David Jarvis, Matthew E. Kaiser, Steve Kenson, and Sean Preston.\n\nThe Unholy Warrior’s Handbook, Copyright 2003, Green Ronin Publishing; Author Robert J. Schwalb.\n\nUltramodern Firearms, Copyright 2002, Green Ronin Publishing; Author Charles McManus Ryan.\n\nUnearthed Arcana, Copyright 2004, Wizards of the Coast, Inc.; Andy Collins, Jesse Decker, David Noonan, Rich Redman.\n\nWrath & Rage, Copyright 2002, Green Ronin Publishing, Author Jim Bishop\n\nTrue20 Adventure Roleplaying, Revised Edition, Copyright 2008, Green Ronin Publishing; Author Steve Kenson.', + grTrue20CompatLogo : `![True20 Compatibility Logo](/assets/license_logos/true_20.jpg){width:1.5in}` }; \ No newline at end of file