diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.less b/client/homebrew/editor/metadataEditor/metadataEditor.less index df915a546..83c0212ca 100644 --- a/client/homebrew/editor/metadataEditor/metadataEditor.less +++ b/client/homebrew/editor/metadataEditor/metadataEditor.less @@ -117,7 +117,7 @@ &.tags .tagInput-dropdown { z-index : 201; - max-width : 150px; + max-width : 200px; } } diff --git a/client/homebrew/editor/tagInput/curatedTagSuggestionList.js b/client/homebrew/editor/tagInput/curatedTagSuggestionList.js new file mode 100644 index 000000000..5df33db00 --- /dev/null +++ b/client/homebrew/editor/tagInput/curatedTagSuggestionList.js @@ -0,0 +1,341 @@ +export default [ + // ############################## Systems + // D&D + "system:D&D Original", + "system:D&D Basic", + "system:AD&D 1e", + "system:AD&D 2e", + "system:D&D 3e", + "system:D&D 3.5e", + "system:D&D 4e", + "system:D&D 5e", + "system:D&D 5e 2024", + "system:BD&D (B/X)", + "system:D&D Essentials", + + // Other Famous RPGs + "system:Pathfinder 1e", + "system:Pathfinder 2e", + "system:Vampire: The Masquerade", + "system:Werewolf: The Apocalypse", + "system:Mage: The Ascension", + "system:Call of Cthulhu", + "system:Shadowrun", + "system:Star Wars RPG (D6/D20/Edge of the Empire)", + "system:Warhammer Fantasy Roleplay", + "system:Cyberpunk 2020", + "system:Blades in the Dark", + "system:Daggerheart", + "system:Draw Steel", + "system:Mutants and Masterminds", + + // ###################################### RPG Keywords + + // Meta + "meta:Template", + "meta:Theme", + "meta:free", + "meta:Character Sheet", + "meta:Documentation", + "meta:NPC", + "meta:Guide", + "Resource", + "notes", + "syntax", + "example", + "stat block", + "Character Sheet", + + // Classes / Subclasses / Archetypes + "Class", + "Subclass", + "Archetype", + "Martial", + "Half-Caster", + "Full Caster", + "Artificer", + "Barbarian", + "Bard", + "Cleric", + "Druid", + "Fighter", + "Monk", + "Paladin", + "Rogue", + "Sorcerer", + "Warlock", + "Wizard", + + // Races / Species / Lineages + "Race", + "Ancestry", + "Lineage", + "Aasimar", + "Beastfolk", + "Dragonborn", + "Dwarf", + "Elf", + "Goblin", + "Half-Elf", + "Half-Orc", + "Human", + "Kobold", + "Lizardfolk", + "Lycan", + "Orc", + "Tiefling", + "Vampire", + "Yuan-Ti", + + // Magic / Spells / Items + "Magic", + "Magic Item", + "Magic Items", + "Wondrous Item", + "Magic Weapon", + "Artifact", + "Spell", + "Spells", + "cantrip", + "cantrips", + "Eldritch", + "Eldritch Invocation", + "invocation", + "Invocations", + "pact boon", + "Pact Boon", + "Spellcaster", + "spellcaster", + "Spellblade", + "Magical Tattoos", + "Enchantment", + "Enchanted", + "Attunement", + "Requires Attunement", + "Rune", + "Runes", + "Wand", + "Rod", + "Scroll", + "Potion", + "Potions", + "Item", + "Items", + "Bag of Holding", + + // Book type + "type:Campaign", + "type:Campaign Setting", + "type:Adventure", + "type:One-Shot", + "type:Setting", + "type:World", + "type:Lore", + "type:History", + "type:Dungeon Master", + "type:Encounter Pack", + "type:Encounter", + "type:Session Notes", + "type:reference", + "type:Handbook", + "type:Manual", + "type:Manuals", + "type:Compendium", + "type:Bestiary", + + // Monsters / Creatures / Enemies + "Monster", + "Creatures", + "Creature", + "Beast", + "Beasts", + "Humanoid", + "Undead", + "Fiend", + "Aberration", + "Ooze", + "Giant", + "Dragon", + "Monstrosity", + "Demon", + "Devil", + "Elemental", + "Construct", + "Constructs", + "Boss", + "BBEG", + + // ############################# Document meta tags + + "meta:v3", + "meta:Legacy", +]; + +const ReadList = [ + // Systems / Editions + "5e", + "5th Edition", + "5.5e", + "5e'24", + "5.24", + "5e 2024", + "D&D 5e", + "DnD 5e", + "DnD5e", + "D&D 5e24", + "DnD5e24", + "D&D 2024", + "system:pf2e", + "system:dnd5.5", + "system:dnd5e", + "system:dnd", + "system:5e", + "system:d&d5e", + "system:D&D 5e24", + "system:book clone", + "system:curse of strahd", + "system:descent into avernus", + "system:GM Binder", + "system:Ord", + "system:sf2e", + "system:Mutants and Masterminds", + "system:2e", + "system:class", + "PF2e", + "pf2e", + "3.5e", + "3.5", + "system:pf2e", + "DnD", + "DND", + "dnd", + "dnd-2014", + "dnd-2024", + "dnd5e", + "DnD 5e", + "DnD5e24", + "DnDBeyond", + "DnDBehindTheScreen", + "Dd5", + "DD5", + "dd5", + "dd5e", + "system:D&D", + "system:D&D 5e24", + "system:d&d5e", + "system:5e", + "system:daggerheart", + "system:dnd5e", + "system:dnd5.5", + "system:dnd", + "system:GM Binder", + "system:Ord", + "system:sf2e", + "system:curse of strahd", + "system:descent into avernus", + "system:class", + "system:Mutants and Masterminds", + "system:2e", + + // Media / Pop Culture + "One Piece", + "One Piece DND", + "Luffy", + "Dragon Ball", + "Dragon Ball Z", + "Dragon Ball Z TTRPG", + "Dragon Ball Z RPG", + "Dragon Ball Z DND", + "Dragon Ball Z 5e", + "Naruto", + "Naruto 5e", + "Jujutsu Kaisen", + "Fairy Tail", + "Final Fantasy", + "Final Fantasy XIV", + "Final Fantasy 7 Remake", + "FF7", + "FFXI", + "Kingdom Hearts", + "Elder Scrolls", + "Elder Scrolls Offline", + "Skyrim", + "WoW", + "World of Warcraft", + "Marvel Comics", + "DC Comics", + "Pokémon", + "Pokemon", + "League of Legends", + "Runeterra", + "Yu-Gi-Oh", + "Minecraft", + "Minecraft Mods", + "Don't Starve", + "Witcher", + "Witcher 3", + "Cyberpunk", + "Cyberpunk 2077", + "Fallout", + "Divinity Original Sin 2", + "Fullmetal Alchemist", + "Fullmetal Alchemist Brotherhood", + "Lobotomy Corporation", + "Bloodborne", + "Dragonlance", + "Shackled City Adventure Path", + "Baldurs Gate 3", + "Library of Ruina", + "Radiant Citadel", + "Ravenloft", + "Forgotten Realms", + "Exandria", + "Critical Role", + "Star Wars", + "SW5e", + "SW5E", + "Star Wars 5e", + + // Tools / Resources / Templates / Notes + "Template", + "Templates", + "Style Template", + "meta:Template", + "meta:Theme", + "meta:5e24 Style", + "meta:khaoz age", + "meta:gratis", + "meta:free", + "meta:Sheet", + "meta:documentation", + "meta:npc", + "meta:User Guide", + "fa-solid fa-sheet-plastic:Ficha", + "tag:Class", + "tag:Rules", + "tag:Spells", + "tag:Adventure", + "tag:Spell List", + "tag:TAoF&F", + "tag:Berean", + "resource", + "Resources", + "support", + "user help", + "notes", + "note", + "quick ref", + "reminder cards", + "syntax", + "css", + "custom css", + "example", + "examples", + "snippet", + "snippets", + "tables", + "chart", + "stat block", + "stat blocks", + "statblock", +]; diff --git a/client/homebrew/editor/tagInput/tagInput.jsx b/client/homebrew/editor/tagInput/tagInput.jsx index eb5912f23..3a57d620d 100644 --- a/client/homebrew/editor/tagInput/tagInput.jsx +++ b/client/homebrew/editor/tagInput/tagInput.jsx @@ -2,7 +2,7 @@ import "./tagInput.less"; import React, { useState, useEffect, useMemo } from "react"; import Combobox from "../../../components/combobox.jsx"; -import tagSuggestionList from "./tagSuggestionList.js"; +import tagSuggestionList from "./curatedTagSuggestionList.js"; const TagInput = ({ label, unique = true, values = [], placeholder = "", onChange }) => { const [tagList, setTagList] = useState( @@ -81,16 +81,44 @@ const TagInput = ({ label, unique = true, values = [], placeholder = "", onChang setTagList((prev) => prev.map((t, i) => ({ ...t, editing: i === index }))); }; - const suggestionOptions = tagSuggestionList.map((tag) => ( -
- {tag} -
- )); + 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 ( +
+ {tag} +
+ ); + }); return (
diff --git a/client/homebrew/editor/tagInput/tagInput.less b/client/homebrew/editor/tagInput/tagInput.less index e69de29bb..392bd3edd 100644 --- a/client/homebrew/editor/tagInput/tagInput.less +++ b/client/homebrew/editor/tagInput/tagInput.less @@ -0,0 +1,18 @@ +.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 index df2dfb7dc..6b8e4060e 100644 --- a/client/homebrew/editor/tagInput/tagSuggestionList.js +++ b/client/homebrew/editor/tagInput/tagSuggestionList.js @@ -750,27 +750,6 @@ export default [ "Arvore I", "Fim da Jornada", "greek god", - "-1 OR 5*5=25 --", - "-1 OR 5*5=26 --", - "-1 OR 5*5=25", - "-1 OR 5*5=26", - "-1' OR 5*5=25 --", - "-1' OR 5*5=26 --", - "-1\" OR 5*5=25 --", - "-1\" OR 5*5=26 --", - "1*if(now()=sysdate(),sleep(15),0)", - "10'XOR(1*if(now()=sysdate(),sleep(15),0))XOR'Z", - "10\"XOR(1*if(now()=sysdate(),sleep(15),0))XOR\"Z", - "(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'\"+(select(0)from(select(sleep(15)))v)+\"*/", - "1-1; waitfor delay '0:0:15' --", - "1-1); waitfor delay '0:0:15' --", - "1-1 waitfor delay '0:0:15' --", - "1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)", - "1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'", - "'\"", - "����%2527%2522\\'\\\"", - "(select 198766*667891)", - "(select 198766*667891 from DUAL)", "dwarf", "Firearms", "3.5e", @@ -1347,7 +1326,6 @@ export default [ "system:sf2e", "drakkenheim", "downtime", - "v1.1", "amulet", "Feiticeiros e Maldicoes", "Tecnica amaldicoada",