"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var tags_exports = {};
__export(tags_exports, {
  Tags: () => Tags
});
module.exports = __toCommonJS(tags_exports);
const Tags = {
  // Categories
  // ----------
  physical: {
    name: "Physical",
    desc: "Move deals damage with the Attack and Defense stats.",
    moveFilter: (move) => move.category === "Physical"
  },
  special: {
    name: "Special",
    desc: "Move deals damage with the Special Attack and Special Defense stats.",
    moveFilter: (move) => move.category === "Special"
  },
  status: {
    name: "Status",
    desc: "Move does not deal damage.",
    moveFilter: (move) => move.category === "Status"
  },
  // Pokemon tags
  // ------------
  mega: {
    name: "Mega",
    speciesFilter: (species) => !!species.isMega
  },
  mythical: {
    name: "Mythical",
    speciesFilter: (species) => species.tags.includes("Mythical")
  },
  sublegendary: {
    name: "Sub-Legendary",
    speciesFilter: (species) => species.tags.includes("Sub-Legendary")
  },
  restrictedlegendary: {
    name: "Restricted Legendary",
    speciesFilter: (species) => species.tags.includes("Restricted Legendary")
  },
  paradox: {
    name: "Paradox",
    speciesFilter: (species) => species.tags.includes("Paradox")
  },
  // Move tags
  // ---------
  zmove: {
    name: "Z-Move",
    moveFilter: (move) => !!move.isZ
  },
  maxmove: {
    name: "Max Move",
    moveFilter: (move) => !!move.isMax
  },
  contact: {
    name: "Contact",
    desc: "Affected by a variety of moves, abilities, and items. Moves affected by contact moves include: Spiky Shield, King's Shield. Abilities affected by contact moves include: Iron Barbs, Rough Skin, Gooey, Flame Body, Static, Tough Claws. Items affected by contact moves include: Rocky Helmet, Sticky Barb.",
    moveFilter: (move) => "contact" in move.flags
  },
  sound: {
    name: "Sound",
    desc: "Doesn't affect Soundproof Pok\xE9mon. (All sound moves also bypass Substitute.)",
    moveFilter: (move) => "sound" in move.flags
  },
  powder: {
    name: "Powder",
    desc: "Doesn't affect Grass-type Pok\xE9mon, Overcoat Pok\xE9mon, or Safety Goggles holders.",
    moveFilter: (move) => "powder" in move.flags
  },
  fist: {
    name: "Fist",
    desc: "Boosted 1.2x by Iron Fist.",
    moveFilter: (move) => "punch" in move.flags
  },
  pulse: {
    name: "Pulse",
    desc: "Boosted 1.5x by Mega Launcher.",
    moveFilter: (move) => "pulse" in move.flags
  },
  bite: {
    name: "Bite",
    desc: "Boosted 1.5x by Strong Jaw.",
    moveFilter: (move) => "bite" in move.flags
  },
  ballistic: {
    name: "Ballistic",
    desc: "Doesn't affect Bulletproof Pok\xE9mon.",
    moveFilter: (move) => "bullet" in move.flags
  },
  bypassprotect: {
    name: "Bypass Protect",
    desc: "Bypasses Protect, Detect, King's Shield, and Spiky Shield.",
    moveFilter: (move) => move.target !== "self" && !("protect" in move.flags)
  },
  nonreflectable: {
    name: "Nonreflectable",
    desc: "Can't be bounced by Magic Coat or Magic Bounce.",
    moveFilter: (move) => move.target !== "self" && move.category === "Status" && !("reflectable" in move.flags)
  },
  nonmirror: {
    name: "Nonmirror",
    desc: "Can't be copied by Mirror Move.",
    moveFilter: (move) => move.target !== "self" && !("mirror" in move.flags)
  },
  nonsnatchable: {
    name: "Nonsnatchable",
    desc: "Can't be copied by Snatch.",
    moveFilter: (move) => ["allyTeam", "self", "adjacentAllyOrSelf"].includes(move.target) && !("snatch" in move.flags)
  },
  bypasssubstitute: {
    name: "Bypass Substitute",
    desc: "Bypasses but does not break a Substitute.",
    moveFilter: (move) => "bypasssub" in move.flags
  },
  gmaxmove: {
    name: "G-Max Move",
    moveFilter: (move) => typeof move.isMax === "string"
  },
  // Tiers
  // -----
  uber: {
    name: "Uber",
    speciesFilter: (species) => species.tier === "Uber" || species.tier === "(Uber)" || species.tier === "AG"
  },
  ou: {
    name: "OU",
    speciesFilter: (species) => species.tier === "OU" || species.tier === "(OU)"
  },
  uubl: {
    name: "UUBL",
    speciesFilter: (species) => species.tier === "UUBL"
  },
  uu: {
    name: "UU",
    speciesFilter: (species) => species.tier === "UU"
  },
  rubl: {
    name: "RUBL",
    speciesFilter: (species) => species.tier === "RUBL"
  },
  ru: {
    name: "RU",
    speciesFilter: (species) => species.tier === "RU"
  },
  nubl: {
    name: "NUBL",
    speciesFilter: (species) => species.tier === "NUBL"
  },
  nu: {
    name: "NU",
    speciesFilter: (species) => species.tier === "NU"
  },
  publ: {
    name: "PUBL",
    speciesFilter: (species) => species.tier === "PUBL"
  },
  pu: {
    name: "PU",
    speciesFilter: (species) => species.tier === "PU" || species.tier === "(NU)"
  },
  zu: {
    name: "ZU",
    speciesFilter: (species) => species.tier === "(PU)"
  },
  nfe: {
    name: "NFE",
    speciesFilter: (species) => species.tier === "NFE"
  },
  lc: {
    name: "LC",
    speciesFilter: (species) => species.doublesTier === "LC"
  },
  captier: {
    name: "CAP Tier",
    speciesFilter: (species) => species.isNonstandard === "CAP"
  },
  caplc: {
    name: "CAP LC",
    speciesFilter: (species) => species.tier === "CAP LC"
  },
  capnfe: {
    name: "CAP NFE",
    speciesFilter: (species) => species.tier === "CAP NFE"
  },
  ag: {
    name: "AG",
    speciesFilter: (species) => species.tier === "AG"
  },
  // Doubles tiers
  // -------------
  duber: {
    name: "DUber",
    speciesFilter: (species) => species.doublesTier === "DUber" || species.doublesTier === "(DUber)"
  },
  dou: {
    name: "DOU",
    speciesFilter: (species) => species.doublesTier === "DOU" || species.doublesTier === "(DOU)"
  },
  dbl: {
    name: "DBL",
    speciesFilter: (species) => species.doublesTier === "DBL"
  },
  duu: {
    name: "DUU",
    speciesFilter: (species) => species.doublesTier === "DUU"
  },
  dnu: {
    name: "DNU",
    speciesFilter: (species) => species.doublesTier === "(DUU)"
  },
  // Nat Dex tiers
  // -------------
  ndag: {
    name: "ND AG",
    speciesFilter: (species) => species.natDexTier === "AG"
  },
  nduber: {
    name: "ND Uber",
    speciesFilter: (species) => species.natDexTier === "Uber" || species.natDexTier === "(Uber)"
  },
  ndou: {
    name: "ND OU",
    speciesFilter: (species) => species.natDexTier === "OU" || species.natDexTier === "(OU)"
  },
  nduubl: {
    name: "ND UUBL",
    speciesFilter: (species) => species.natDexTier === "UUBL"
  },
  nduu: {
    name: "ND UU",
    speciesFilter: (species) => species.natDexTier === "UU"
  },
  ndrubl: {
    name: "ND RUBL",
    speciesFilter: (species) => species.natDexTier === "RUBL"
  },
  ndru: {
    name: "ND RU",
    speciesFilter: (species) => species.natDexTier === "RU"
  },
  // Legality tags
  past: {
    name: "Past",
    genericFilter: (thing) => thing.isNonstandard === "Past"
  },
  future: {
    name: "Future",
    genericFilter: (thing) => thing.isNonstandard === "Future"
  },
  lgpe: {
    name: "LGPE",
    genericFilter: (thing) => thing.isNonstandard === "LGPE"
  },
  unobtainable: {
    name: "Unobtainable",
    genericFilter: (thing) => thing.isNonstandard === "Unobtainable"
  },
  cap: {
    name: "CAP",
    speciesFilter: (thing) => thing.isNonstandard === "CAP"
  },
  custom: {
    name: "Custom",
    genericFilter: (thing) => thing.isNonstandard === "Custom"
  },
  nonexistent: {
    name: "Nonexistent",
    genericFilter: (thing) => !!thing.isNonstandard && thing.isNonstandard !== "Unobtainable"
  },
  // filter columns
  // --------------
  introducedgen: {
    name: "Introduced Gen",
    genericNumCol: (thing) => thing.gen
  },
  height: {
    name: "Height",
    speciesNumCol: (species) => species.heightm
  },
  weight: {
    name: "Weight",
    speciesNumCol: (species) => species.weightkg
  },
  hp: {
    name: "HP",
    desc: "Hit Points",
    speciesNumCol: (species) => species.baseStats.hp
  },
  atk: {
    name: "Atk",
    desc: "Attack",
    speciesNumCol: (species) => species.baseStats.atk
  },
  def: {
    name: "Def",
    desc: "Defense",
    speciesNumCol: (species) => species.baseStats.def
  },
  spa: {
    name: "SpA",
    desc: "Special Attack",
    speciesNumCol: (species) => species.baseStats.spa
  },
  spd: {
    name: "SpD",
    desc: "Special Defense",
    speciesNumCol: (species) => species.baseStats.spd
  },
  spe: {
    name: "Spe",
    desc: "Speed",
    speciesNumCol: (species) => species.baseStats.spe
  },
  bst: {
    name: "BST",
    desc: "Base Stat Total",
    speciesNumCol: (species) => species.bst
  },
  basepower: {
    name: "Base Power",
    moveNumCol: (move) => move.basePower
  },
  priority: {
    name: "Priority",
    moveNumCol: (move) => move.priority
  },
  accuracy: {
    name: "Accuracy",
    moveNumCol: (move) => move.accuracy === true ? 101 : move.accuracy
  },
  maxpp: {
    name: "Max PP",
    moveNumCol: (move) => move.pp
  }
};
//# sourceMappingURL=tags.js.map
