From c98df55b62661822ecc2fe937264d69156a9e6a8 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Tue, 2 Mar 2021 13:30:27 +0100 Subject: [PATCH] refactor: apply eslint airbnb linting --- .eslintrc.js | 7 +- .yarnrc_patch.yml | 3 + packages/components/.eslintrc.js | 33 + .../components/src/components/BoxPlot.tsx | 17 +- .../src/components/BoxPlotArray.tsx | 7 +- .../src/components/CategoricalColor.tsx | 2 +- .../components/src/components/DateLabel.tsx | 2 +- .../components/src/components/FilterRange.tsx | 32 +- .../components/src/components/HeatMap1D.tsx | 3 +- .../components/src/components/Histogram.tsx | 43 +- .../components/src/components/NumberBar.tsx | 2 +- .../components/src/components/NumberColor.tsx | 3 +- .../src/components/NumberStatsWrapper.tsx | 16 +- .../src/components/NumberSymbol.tsx | 4 +- .../components/src/components/StackedBar.tsx | 4 +- .../components/src/components/TextLabel.tsx | 2 +- .../components/src/components/TextSummary.tsx | 25 +- .../components/src/components/UpSetDot.tsx | 4 +- .../components/src/components/UpSetLine.tsx | 14 +- packages/components/src/components/utils.ts | 14 +- .../src/math/categoricalStatsGenerator.ts | 19 +- packages/components/src/math/common.ts | 2 +- .../components/src/math/dateStatsGenerator.ts | 21 +- packages/components/src/math/defaults.ts | 8 +- .../src/math/numberStatsGenerator.ts | 13 +- .../components/src/math/textStatsGenerator.ts | 17 +- .../src/components/CodeSandboxExample.tsx | 2 +- packages/docs/src/data/pokemon/index.ts | 253 - packages/docs/src/data/pokemon/pokemon.ts | 24995 ---------------- packages/docs/src/data/random/genData.ts | 119 - packages/docs/src/data/random/index.ts | 103 - packages/docs/src/pages/index.tsx | 21 +- packages/docs/src/theme/Root.tsx | 6 +- packages/hooks/.eslintrc.js | 33 + packages/hooks/src/builder.ts | 24 +- packages/hooks/src/derive.ts | 34 +- .../hooks/src/filters/categoricalFilter.ts | 5 +- .../hooks/src/filters/categoricalSetFilter.ts | 5 +- packages/hooks/src/filters/rangeFilter.ts | 7 +- .../grouping/{internal.ts => baseGroupBy.ts} | 11 +- .../hooks/src/grouping/categoricalGroupBy.ts | 11 +- .../src/grouping/categoricalSetGroupBy.ts | 10 +- .../src/grouping/columnSpecificGroupByFn.ts | 8 +- packages/hooks/src/grouping/dateGroupBy.ts | 3 +- packages/hooks/src/grouping/histGroupBy.ts | 8 +- packages/hooks/src/grouping/index.ts | 12 +- packages/hooks/src/grouping/numberGroupBy.ts | 3 +- packages/hooks/src/grouping/textGroupBy.ts | 5 +- .../hooks/src/hooks/IndeterminateCheckbox.tsx | 12 +- packages/hooks/src/hooks/index.ts | 2 +- .../hooks/src/hooks/useRowExpandColumn.tsx | 18 +- packages/hooks/src/hooks/useRowRankColumn.tsx | 20 +- .../hooks/src/hooks/useRowSelectColumn.tsx | 16 +- packages/hooks/src/hooks/useStats.ts | 39 +- packages/hooks/src/interfaces.ts | 7 +- packages/hooks/src/renderers/BarRenderer.tsx | 7 +- .../src/renderers/BoxPlotArrayRenderer.tsx | 17 +- .../hooks/src/renderers/BoxPlotRenderer.tsx | 4 +- .../CategoricalHistogramRenderer.tsx | 4 +- .../src/renderers/CategoricalRenderer.tsx | 7 +- .../CategoricalSetHistogramRenderer.tsx | 2 +- .../src/renderers/CategoricalSetRenderer.tsx | 9 +- .../hooks/src/renderers/ColorRenderer.tsx | 9 +- .../src/renderers/DateHistogramRenderer.tsx | 4 +- packages/hooks/src/renderers/DateRenderer.tsx | 10 +- .../src/renderers/GroupValueRenderer.tsx | 9 +- .../hooks/src/renderers/HeatMap1DRenderer.tsx | 7 +- .../src/renderers/NumberHistogramRenderer.tsx | 4 +- .../renderers/ProportionalSymbolRenderer.tsx | 11 +- .../src/renderers/StackedBarRenderer.tsx | 13 +- packages/hooks/src/renderers/TextRenderer.tsx | 5 +- .../src/renderers/TextSummaryRenderer.tsx | 4 +- .../{barStats.ts => deriveNumberOptions.ts} | 13 +- packages/hooks/src/renderers/index.ts | 2 +- packages/hooks/src/renderers/utils.ts | 73 +- packages/hooks/src/setupTests.ts | 1 + packages/hooks/src/sort/categoricalSetSort.ts | 9 +- packages/hooks/src/sort/categoricalSort.ts | 5 +- .../sort/{dateSort.ts => dateGroupCompare.ts} | 3 +- packages/hooks/src/sort/index.ts | 8 +- packages/hooks/src/sort/interfaces.ts | 3 +- packages/hooks/src/sort/internal.ts | 4 +- packages/hooks/src/sort/numberSort.ts | 5 +- packages/hooks/src/sort/sortCompare.ts | 3 +- packages/hooks/src/sort/sortSplitter.ts | 10 +- .../sort/{textSort.ts => textGroupCompare.ts} | 3 +- packages/hooks/src/stats/categoricalStats.ts | 4 +- packages/hooks/src/stats/dateStats.ts | 2 + packages/hooks/src/stats/numberStats.ts | 15 +- packages/hooks/src/stats/textStats.ts | 2 + packages/table/.eslintrc.js | 33 + packages/table/src/components/LineUpLite.tsx | 6 +- .../src/components/LineUpLitePaginated.tsx | 14 +- .../src/components/LineUpLitePagination.tsx | 20 +- .../table/src/components/LineUpLiteTD.tsx | 10 +- .../table/src/components/LineUpLiteTH.tsx | 8 +- .../table/src/components/LineUpLiteTHead.tsx | 13 +- .../table/src/components/LineUpLiteTR.tsx | 9 +- .../src/components/LineUpLiteTVirtualBody.tsx | 11 +- .../src/components/LineUpLiteVirtual.tsx | 17 +- packages/table/src/components/contexts.tsx | 40 +- packages/table/src/components/index.ts | 1 + packages/table/src/components/interfaces.ts | 11 +- .../panel/LineUpLiteDataSummary.tsx | 22 +- .../src/components/panel/LineUpLitePanel.tsx | 18 +- .../components/panel/LineUpLiteTHSummary.tsx | 21 +- .../panel/LineUpLiteTableSummary.tsx | 21 +- .../table/src/components/panel/contexts.tsx | 9 +- .../table/src/components/panel/interfaces.ts | 4 +- .../toolbar/LineUpLiteFilterAction.tsx | 13 +- .../toolbar/LineUpLiteGroupByAction.tsx | 15 +- .../toolbar/LineUpLiteHideAction.tsx | 13 +- .../toolbar/LineUpLiteSortByAction.tsx | 15 +- .../components/toolbar/LineUpLiteToolbar.tsx | 24 +- .../table/src/components/toolbar/index.tsx | 2 +- .../table/src/components/useLineUpLite.ts | 26 +- packages/table/src/icons/text.tsx | 22 +- packages/table/src/index.ts | 2 +- tsconfig.eslint.json | 4 + yarn.lock | 2 +- 120 files changed, 844 insertions(+), 25982 deletions(-) create mode 100644 packages/components/.eslintrc.js delete mode 100644 packages/docs/src/data/pokemon/index.ts delete mode 100644 packages/docs/src/data/pokemon/pokemon.ts delete mode 100644 packages/docs/src/data/random/genData.ts delete mode 100644 packages/docs/src/data/random/index.ts create mode 100644 packages/hooks/.eslintrc.js rename packages/hooks/src/grouping/{internal.ts => baseGroupBy.ts} (72%) rename packages/hooks/src/renderers/{barStats.ts => deriveNumberOptions.ts} (76%) rename packages/hooks/src/sort/{dateSort.ts => dateGroupCompare.ts} (74%) rename packages/hooks/src/sort/{textSort.ts => textGroupCompare.ts} (75%) create mode 100644 packages/table/.eslintrc.js create mode 100644 tsconfig.eslint.json diff --git a/.eslintrc.js b/.eslintrc.js index 185387d..54b3df5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -13,7 +13,7 @@ module.exports = { 'prettier', ], parserOptions: { - project: './tsconfig.eslint.json', + project: './tsconfig.json', }, settings: { react: { @@ -21,6 +21,11 @@ module.exports = { }, }, rules: { + 'no-continue': 'off', + 'react/require-default-props': 'off', // don't use in TypeScript + 'react/jsx-props-no-spreading': 'off', // shorthand passing of props + 'react/destructuring-assignment': 'off', // don't force destructuring + 'no-nested-ternary': 'off', // '@typescript-eslint/explicit-module-boundary-types': 'off', // '@typescript-eslint/no-explicit-any': 'off', // '@typescript-eslint/no-non-null-assertion': 'off', diff --git a/.yarnrc_patch.yml b/.yarnrc_patch.yml index d041d91..e5e5869 100644 --- a/.yarnrc_patch.yml +++ b/.yarnrc_patch.yml @@ -18,3 +18,6 @@ packageExtensions: '@lineup-lite/table@*': peerDependencies: 'react-refresh': '*' + 'eslint-module-utils@*': + dependencies: + eslint-import-resolver-node: '*' diff --git a/packages/components/.eslintrc.js b/packages/components/.eslintrc.js new file mode 100644 index 0000000..40a8a88 --- /dev/null +++ b/packages/components/.eslintrc.js @@ -0,0 +1,33 @@ +/* eslint-env node */ + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const pkg = require('./package.json'); + +module.exports = { + plugins: ['@typescript-eslint', 'prettier'], + extends: [ + 'airbnb-typescript', + 'react-app', + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + 'prettier', + ], + parserOptions: { + project: './tsconfig.eslint.json', + }, + settings: { + react: { + version: pkg.devDependencies.react ? 'detect' : '99.99.99', + }, + }, + rules: { + 'no-continue': 'off', + 'react/require-default-props': 'off', // don't use in TypeScript + 'react/jsx-props-no-spreading': 'off', // shorthand passing of props + 'react/destructuring-assignment': 'off', // don't force destructuring + 'no-nested-ternary': 'off', + // '@typescript-eslint/explicit-module-boundary-types': 'off', + // '@typescript-eslint/no-explicit-any': 'off', + // '@typescript-eslint/no-non-null-assertion': 'off', + }, +}; diff --git a/packages/components/src/components/BoxPlot.tsx b/packages/components/src/components/BoxPlot.tsx index 453e95c..8f23ea0 100644 --- a/packages/components/src/components/BoxPlot.tsx +++ b/packages/components/src/components/BoxPlot.tsx @@ -12,6 +12,8 @@ import { FilterRangeWrapper, FilterRangeSliderProps } from './FilterRange'; import type { CommonProps } from './common'; import { clsx, useI18N } from './utils'; +export type { IBoxPlot } from '@sgratzl/boxplots'; + export const BOXPLOT_I18N_EN = { boxplotMinimum: 'Minimum: {0}', boxplot25Quantile: '25% Quantile: {0}', @@ -69,7 +71,7 @@ function generatePath( function generateTitle( s: BoxPlotScaled, pre: Omit | undefined, - i18n: Record string> + i18n: Record string> ) { const p = (v: number) => `/${s.format(v)}`; return `${i18n.boxplotMinimum(`${s.format(s.min)}${pre ? p(pre.min) : ''}`)} @@ -84,9 +86,8 @@ ${i18n.boxplotNrItems(`${s.count.toLocaleString()}${pre ? `/${pre.count.toLocale /** * renders a boxplot as a SVG chart */ -export function BoxPlotChart(props: BoxPlotChartProps) { - const s = props.s; - const pre = props.preFilter; +export function BoxPlotChart(props: BoxPlotChartProps): JSX.Element { + const { s, preFilter: pre } = props; const i18n = useI18N(BOXPLOT_I18N_EN, props.i18n); const boxPadding = 2; const scale = useCallback((v: number) => Math.round(s.scale(v) * 1000) / 10, [s]); @@ -154,8 +155,8 @@ export function BoxPlotChart(props: BoxPlotChartProps) { /** * renders a boxplot as a SVG chart */ -export function BoxPlotChartVertical(props: BoxPlotChartProps) { - const s = props.s; +export function BoxPlotChartVertical(props: BoxPlotChartProps): JSX.Element { + const { s } = props; const pre = props.preFilter; const i18n = useI18N(BOXPLOT_I18N_EN, props.i18n); const boxPadding = 2; @@ -242,7 +243,7 @@ export interface BoxPlotProps extends CommonProps { /** * renders a boxplot */ -export function BoxPlot(props: BoxPlotProps) { +export function BoxPlot(props: BoxPlotProps): JSX.Element { return ( diff --git a/packages/components/src/components/BoxPlotArray.tsx b/packages/components/src/components/BoxPlotArray.tsx index cc05dae..1eafd9c 100644 --- a/packages/components/src/components/BoxPlotArray.tsx +++ b/packages/components/src/components/BoxPlotArray.tsx @@ -33,7 +33,7 @@ export interface BoxPlotArrayProps extends CommonProps { i18n?: BoxPlotProps['i18n']; } -export function BoxPlotArray(props: BoxPlotArrayProps) { +export function BoxPlotArray(props: BoxPlotArrayProps): JSX.Element { const f = props.format; const c = props.color; const scale = props.scale ?? defaultScale; @@ -46,10 +46,11 @@ export function BoxPlotArray(props: BoxPlotArrayProps) { {(props.value ?? []).map((v, i) => { const s: BoxPlotScaled = { ...v, - format: typeof f !== 'function' ? toLocaleString : (v) => f(v, i), - color: typeof c === 'function' ? (v) => c(v, i) : defaultColorScale, + format: typeof f !== 'function' ? toLocaleString : (d: number) => f(d, i), + color: typeof c === 'function' ? (d: number) => c(d, i) : defaultColorScale, scale, }; + // eslint-disable-next-line react/no-array-index-key return ; })} diff --git a/packages/components/src/components/CategoricalColor.tsx b/packages/components/src/components/CategoricalColor.tsx index a42a244..2ffada0 100644 --- a/packages/components/src/components/CategoricalColor.tsx +++ b/packages/components/src/components/CategoricalColor.tsx @@ -24,7 +24,7 @@ export interface CategoricalColorProps extends CommonProps { format?: string | ((v: string) => string); } -export function CategoricalColor(props: CategoricalColorProps) { +export function CategoricalColor(props: CategoricalColorProps): JSX.Element { const title = format(props.value, props.format); return (
diff --git a/packages/components/src/components/FilterRange.tsx b/packages/components/src/components/FilterRange.tsx index de61e0f..1222dc5 100644 --- a/packages/components/src/components/FilterRange.tsx +++ b/packages/components/src/components/FilterRange.tsx @@ -49,7 +49,7 @@ interface FilterRefData { function FilterRangeSlider(props: FilterRangeSliderProps & { refData: MutableRefObject }) { const { setFilter } = props; const { invert, scale } = props.s; - const filterValue = props.filterValue; + const { filterValue } = props; const [localFilter, setLocalFilter] = useState(filterValue ?? [null as T | null, null as T | null]); const filterRef = useRef(localFilter); filterRef.current = localFilter; @@ -76,16 +76,21 @@ function FilterRangeSlider(props: FilterRangeSliderProps & { refData: Muta setFilter(v[0] == null && v[1] == null ? undefined : v); }; const onMinMouseUp = () => { - ueber!.removeEventListener('mousemove', onMinMouseMove); - ueber!.removeEventListener('mouseleave', onMinMouseUp); - ueber!.removeEventListener('mouseup', onMinMouseUp); + if (!ueber) { + return; + } + ueber.removeEventListener('mousemove', onMinMouseMove); + ueber.removeEventListener('mouseleave', onMinMouseUp); + ueber.removeEventListener('mouseup', onMinMouseUp); ueber = null; }; return (evt: RMouseEvent) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const bb = evt.currentTarget.parentElement!.parentElement!.getBoundingClientRect(); base = bb.x; width = bb.width; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ueber = evt.currentTarget.closest('body')!; ueber.addEventListener('mousemove', onMinMouseMove); ueber.addEventListener('mouseleave', onMinMouseUp); @@ -105,16 +110,21 @@ function FilterRangeSlider(props: FilterRangeSliderProps & { refData: Muta setFilter(v[0] == null && v[1] == null ? undefined : v); }; const onMinMouseUp = () => { - ueber!.removeEventListener('mousemove', onMinMouseMove); - ueber!.removeEventListener('mouseleave', onMinMouseUp); - ueber!.removeEventListener('mouseup', onMinMouseUp); + if (!ueber) { + return; + } + ueber.removeEventListener('mousemove', onMinMouseMove); + ueber.removeEventListener('mouseleave', onMinMouseUp); + ueber.removeEventListener('mouseup', onMinMouseUp); ueber = null; }; return (evt: RMouseEvent) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const bb = evt.currentTarget.parentElement!.parentElement!.getBoundingClientRect(); base = bb.x; width = bb.width; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ueber = evt.currentTarget.closest('body')!; ueber.addEventListener('mousemove', onMinMouseMove); ueber.addEventListener('mouseleave', onMinMouseUp); @@ -151,6 +161,7 @@ function FilterRangeSlider(props: FilterRangeSliderProps & { refData: Muta }, [setFilter, setLocalFilter, filterRef, invert, scale] ); + // eslint-disable-next-line no-param-reassign props.refData.current = { clearFilter, setShortCutFilter, @@ -162,14 +173,14 @@ function FilterRangeSlider(props: FilterRangeSliderProps & { refData: Muta title={localFilter[0] == null ? undefined : i18n.filterRangeMinFilter(props.s.format(localFilter[0]))} style={{ width: toPercent(localFilter[0] == null ? 0 : Math.max(0, props.s.scale(localFilter[0]))) }} > -
+
-
+
); @@ -183,7 +194,7 @@ export function FilterRangeWrapper( } & FilterRangeSliderProps & CommonProps > -) { +): JSX.Element { const refData = useRef({ clearFilter() {}, setShortCutFilter() {} } as FilterRefData); const clearFilter = useCallback(() => refData.current.clearFilter(), [refData]); const setShortCutFilter = useCallback((evt: RMouseEvent) => refData.current.setShortCutFilter(evt), [ @@ -197,6 +208,7 @@ export function FilterRangeWrapper( data-max={props.s.max != null && props.summary ? props.s.format(props.s.max) : null} onDoubleClick={clearFilter} onClick={setShortCutFilter} + role="presentation" style={props.style} > {props.children} diff --git a/packages/components/src/components/HeatMap1D.tsx b/packages/components/src/components/HeatMap1D.tsx index bca6dc5..2c5cd5b 100644 --- a/packages/components/src/components/HeatMap1D.tsx +++ b/packages/components/src/components/HeatMap1D.tsx @@ -32,7 +32,7 @@ export interface HeatMap1DProps extends CommonProps { /** * renders a numeric 1d heatmap */ -export function HeatMap1D(props: HeatMap1DProps) { +export function HeatMap1D(props: HeatMap1DProps): JSX.Element { return (
{label}
diff --git a/packages/components/src/components/Histogram.tsx b/packages/components/src/components/Histogram.tsx index f426d06..d1d308b 100644 --- a/packages/components/src/components/Histogram.tsx +++ b/packages/components/src/components/Histogram.tsx @@ -7,7 +7,7 @@ import React, { useCallback, useMemo, MouseEvent, CSSProperties } from 'react'; import type { IHistStats, IBin } from '../math/common'; -import { toPercent, clsx, i18n, EMPTY_ARR } from './utils'; +import { toPercent, clsx, i18n as i18nF, EMPTY_ARR } from './utils'; import { FilterRangeSliderProps, FilterRangeWrapper } from './FilterRange'; import { NumberStatsWrapper } from './NumberStatsWrapper'; import type { CommonProps } from './common'; @@ -41,7 +41,7 @@ function generateBinTitle(h: IBin, raw?: IBin, title?: string) { const rawT = raw ? `/${raw.count.toLocaleString()}` : ''; const base = `${h.label}: ${h.count.toLocaleString()}${rawT}`; if (title) { - return i18n(title, base); + return i18nF(title, base); } return base; } @@ -80,7 +80,7 @@ function computeBinGradient( /** * renders a number or date histogram */ -export function Histogram(props: HistogramProps) { +export function Histogram(props: HistogramProps): JSX.Element { return ( (props: HistogramProps) { summary={props.summary} > {props.s.hist.map((h, i) => ( - + ))} ); @@ -97,7 +97,7 @@ export function Histogram(props: HistogramProps) { function Bin({ h, - props, + parentProps, i, onClick, title, @@ -105,13 +105,13 @@ function Bin({ h: IBin; i: number; onClick?: (evt: MouseEvent) => void; - props: HistogramProps; + parentProps: HistogramProps; title?: string; }) { - const preFilter = props.preFilter; - const maxBin = props.maxBin ?? preFilter?.maxBin.count ?? props.s.maxBin.count; - const lastBin = props.s.hist.length - 1; - const dense = props.s.hist.length > DENSE || i === lastBin; + const { preFilter } = parentProps; + const maxBin = parentProps.maxBin ?? preFilter?.maxBin.count ?? parentProps.s.maxBin.count; + const lastBin = parentProps.s.hist.length - 1; + const dense = parentProps.s.hist.length > DENSE || i === lastBin; const style = computeBinGradient(h, maxBin, preFilter, i); return (
({ style={style} data-i={i} onClick={onClick} - data-label={props.label ? h.label : null} + data-label={parentProps.label ? h.label : null} title={generateBinTitle(h, preFilter?.hist[i], title)} + role="presentation" /> ); } @@ -143,9 +144,9 @@ export interface FilterBinHistogramProps extends HistogramProps { i18n?: Partial; } -export function FilterBinHistogram(props: FilterBinHistogramProps) { +export function FilterBinHistogram(props: FilterBinHistogramProps): JSX.Element { const { setFilter, filterValue = EMPTY_ARR } = props; - const hist = props.s.hist; + const { hist } = props.s; const i18n = useMemo( () => ({ @@ -158,7 +159,7 @@ export function FilterBinHistogram(props: FilterBinHistogramProps) { const onClick = useCallback( (evt: MouseEvent) => { const current: T[] = filterValue ?? EMPTY_ARR; - const bin = hist[Number.parseInt(evt.currentTarget.dataset.i!, 10)]; + const bin = hist[Number.parseInt(evt.currentTarget.dataset.i ?? '0', 10)]; const value = bin.x0; const next = current.includes(value) ? current.filter((d) => d !== value) : current.concat([value]); setFilter(next.length === 0 ? undefined : next); @@ -171,7 +172,7 @@ export function FilterBinHistogram(props: FilterBinHistogramProps) { = HistogramProps & FilterRangeSlider /** * renders a histogram along with a range filter */ -export function FilterRangeHistogram(props: FilterRangeHistogramProps) { +export function FilterRangeHistogram(props: FilterRangeHistogramProps): JSX.Element { return ( {props.s.hist.map((h, i) => ( - + ))} ); @@ -220,9 +221,9 @@ export interface FilterSetHistogramProps extends HistogramProps { i18n?: Partial; } -export function FilterSetHistogram(props: FilterSetHistogramProps) { +export function FilterSetHistogram(props: FilterSetHistogramProps): JSX.Element { const { setFilter, filterValue = EMPTY_ARR } = props; - const hist = props.s.hist; + const { hist } = props.s; const i18n = useMemo( () => ({ @@ -235,7 +236,7 @@ export function FilterSetHistogram(props: FilterSetHistogramProps) { const onClick = useCallback( (evt: MouseEvent) => { const current: FilterSetValue[] = filterValue ?? EMPTY_ARR; - const bin = hist[Number.parseInt(evt.currentTarget.dataset.i!, 10)]; + const bin = hist[Number.parseInt(evt.currentTarget.dataset.i ?? '0', 10)]; const value = bin.x0; const index = current.findIndex((d) => d.set === value); if (index < 0) { @@ -259,7 +260,7 @@ export function FilterSetHistogram(props: FilterSetHistogramProps) { string)): CSSPr /** * renders a numeric value along with a bar */ -export function NumberBar(props: NumberBarProps) { +export function NumberBar(props: NumberBarProps): JSX.Element { const label = format(props.value, props.format ?? toLocaleString); return (
( - props: PropsWithChildren<{ - s: { readonly min?: T; readonly max?: T; format: (v: T) => string }; - summary?: boolean; - className?: string; - style?: CSSProperties; - }> -) { +export type NumberStatsWrapperProps = PropsWithChildren<{ + s: { readonly min?: T; readonly max?: T; format: (v: T) => string }; + summary?: boolean; + className?: string; + style?: CSSProperties; +}>; + +export function NumberStatsWrapper(props: NumberStatsWrapperProps): JSX.Element { return (
/** * renders a numeric value along with a circle whose area is proportional to the value */ -export function NumberSymbol(props: NumberBarProps) { +export function NumberSymbol(props: NumberBarProps): JSX.Element { const label = format(props.value, props.format ?? toLocaleString); return (
{ - acc.push(acc[acc.length - 1]! + v.ratio); + acc.push(acc[acc.length - 1] + v.ratio); return acc; }, [0] @@ -185,7 +185,7 @@ function stackedBarProps(value: number, stack: StackedValue): CSSProperties | nu /** * renders a numeric value along with a bar */ -export function StackedBar(props: StackedBarProps) { +export function StackedBar(props: StackedBarProps): JSX.Element { const label = format(+props.value, props.format ?? toLocaleString); const scale = props.scale ?? defaultScale; return ( diff --git a/packages/components/src/components/TextLabel.tsx b/packages/components/src/components/TextLabel.tsx index 1d34e00..b7d4c32 100644 --- a/packages/components/src/components/TextLabel.tsx +++ b/packages/components/src/components/TextLabel.tsx @@ -23,7 +23,7 @@ export interface TextLabelProps extends CommonProps { /** * renders a date */ -export function TextLabel(props: TextLabelProps) { +export function TextLabel(props: TextLabelProps): JSX.Element { const label = format(props.value, props.format); return (
diff --git a/packages/components/src/components/TextSummary.tsx b/packages/components/src/components/TextSummary.tsx index 7eabe8c..71817fd 100644 --- a/packages/components/src/components/TextSummary.tsx +++ b/packages/components/src/components/TextSummary.tsx @@ -34,8 +34,8 @@ export interface TextSummaryProps extends CommonProps { i18n?: Partial; } -export function TextSummary(props: TextSummaryProps) { - const s = props.s; +export function TextSummary(props: TextSummaryProps): JSX.Element { + const { s } = props; const i18n = useI18N(TEXT_SUMMARY_I18N_EN, props.i18n); return (
@@ -61,7 +61,7 @@ export interface FilterTextSummaryProps extends TextSummaryProps { filterValue?: string; } -export function FilterTextSummary(props: FilterTextSummaryProps) { +export function FilterTextSummary(props: FilterTextSummaryProps): JSX.Element { const { setFilter, filterValue, s, preFilter } = props; const unique = `${s.count.toLocaleString()}${preFilter ? `/${preFilter.count.toLocaleString()}` : ''} items`; @@ -84,16 +84,15 @@ export function FilterTextSummary(props: FilterTextSummaryProps) { size={3} className="lt-text-summary-input" /> - { - - } +
); } diff --git a/packages/components/src/components/UpSetDot.tsx b/packages/components/src/components/UpSetDot.tsx index 407c584..1b3c416 100644 --- a/packages/components/src/components/UpSetDot.tsx +++ b/packages/components/src/components/UpSetDot.tsx @@ -9,13 +9,13 @@ import React from 'react'; import type { CommonProps } from './common'; import { clsx } from './utils'; -interface UpSetDotProps extends CommonProps { +export interface UpSetDotProps extends CommonProps { mode: boolean | null; title: string; color?: string; } -export function UpSetDot(props: UpSetDotProps) { +export function UpSetDot(props: UpSetDotProps): JSX.Element { const style = props.color ? { fill: props.color } : undefined; return ( diff --git a/packages/components/src/components/UpSetLine.tsx b/packages/components/src/components/UpSetLine.tsx index 2b51fe3..e8c0bca 100644 --- a/packages/components/src/components/UpSetLine.tsx +++ b/packages/components/src/components/UpSetLine.tsx @@ -71,11 +71,11 @@ function UpSetLineLine({ last, sets, color, -}: Pick & { first: number; last: number }) { +}: Pick & { first: number; last: number }): JSX.Element { if (first >= last) { - return null; + return <>; } - let stroke: string | undefined = undefined; + let stroke: string | undefined; let g: ReactNode = null; if (typeof color === 'string') { stroke = color; @@ -83,6 +83,7 @@ function UpSetLineLine({ const colors = sets.slice(first, last + 1).map((d) => color(d)); if (colors.every((d) => d === colors[0])) { // single color + // eslint-disable-next-line prefer-destructuring stroke = colors[0]; } else { const r = generateGradient(colors); @@ -103,9 +104,9 @@ function UpSetLineLine({ ); } -export function UpSetLine(props: UpSetLineProps) { +export function UpSetLine(props: UpSetLineProps): JSX.Element { const has = props.value instanceof Set ? props.value : new Set(props.value); - const sets = props.sets; + const { sets } = props; const first = sets.findIndex((d) => has.has(d)); let last = first; if (has.size > 1 && first < sets.length - 1) { @@ -127,6 +128,7 @@ export function UpSetLine(props: UpSetLineProps) { key={s} mode={has.has(s)} title={(has.has(s) ? i18n.upsetHas : i18n.upsetHasNot)(format(s, props.format))} + // eslint-disable-next-line no-nested-ternary color={typeof props.color === 'string' ? props.color : props.color ? props.color(s) : undefined} /> ))} @@ -156,7 +158,7 @@ export interface UpSetPartialLineProps extends CommonProps { i18n?: Partial; } -export function UpSetPartialLine(props: UpSetPartialLineProps) { +export function UpSetPartialLine(props: UpSetPartialLineProps): JSX.Element { const i18n = useI18N(UPSET_LINE_I18N_EN, props.i18n); return (
diff --git a/packages/components/src/components/utils.ts b/packages/components/src/components/utils.ts index ca2de4a..58f86d8 100644 --- a/packages/components/src/components/utils.ts +++ b/packages/components/src/components/utils.ts @@ -10,11 +10,11 @@ import { CSSProperties, useMemo } from 'react'; export const EMPTY_OBJ = {}; // static object to avoid updates export const EMPTY_ARR = []; -export function toPercent(v: number) { +export function toPercent(v: number): string { return `${Math.round(v * 1000) / 10}%`; } -export function clsx(...args: (boolean | string | undefined | null)[]) { +export function clsx(...args: (boolean | string | undefined | null)[]): string { return args.filter(Boolean).join(' '); } @@ -30,23 +30,23 @@ export function format(value: T, formatter?: string | ((v: T) => string)): st return typeof formatter === 'string' ? formatter : typeof formatter === 'function' ? formatter(value) : String(value); } -export function i18n(pattern: string, ...args: string[]) { +export function i18n(pattern: string, ...args: unknown[]): string { if (args.length === 0) { return pattern; } - return pattern.replace(/\{(\d+)\}/g, (_, v) => args[Number.parseInt(v, 10)] ?? '?'); + return pattern.replace(/\{(\d+)\}/g, (_, v) => String(args[Number.parseInt(v, 10)] ?? '?')); } -export function toLocaleString(v?: number | Date | null) { +export function toLocaleString(v?: number | Date | null): string { return v == null ? '' : v.toLocaleString(); } export function useI18N>( original: T, overrides?: Partial -): Record string> { +): Record string> { return useMemo(() => { - const r: Record string> = {} as any; + const r = {} as Record string>; for (const key of Object.keys(original) as (keyof T)[]) { const v = (overrides && overrides[key] != null ? overrides[key] : original[key]) as string; r[key] = i18n.bind(null, v); diff --git a/packages/components/src/math/categoricalStatsGenerator.ts b/packages/components/src/math/categoricalStatsGenerator.ts index 93133d4..cfeb214 100644 --- a/packages/components/src/math/categoricalStatsGenerator.ts +++ b/packages/components/src/math/categoricalStatsGenerator.ts @@ -15,7 +15,7 @@ export interface ICategoricalStats extends IHistStats { categories: readonly string[]; } -export function isCategoricalStats(obj: any): obj is ICategoricalStats { +export function isCategoricalStats(obj: unknown): obj is ICategoricalStats { return ( obj != null && Array.isArray((obj as ICategoricalStats).categories) && @@ -27,7 +27,7 @@ export function isCategoricalStats(obj: any): obj is ICategoricalStats { * helper function to create a formatter between a category value and a category label * @param categoryLabel tuple list of [category, label] to map */ -export function formatCategories(...categoryLabel: [string, string][]) { +export function formatCategories(...categoryLabel: [string, string][]): (v: string) => string { const map = new Map(categoryLabel); return (v: string) => map.get(v) ?? v; } @@ -88,19 +88,19 @@ export function categoricalStatsGenerator( }; for (const v of arr) { if (v == null) { - missing++; - flatMissing++; + missing += 1; + flatMissing += 1; continue; } if (typeof v === 'string' || (!Array.isArray(v) && !(v instanceof Set))) { - const vs = v + ''; + const vs = `${v}`; items.push(vs); pushValue(vs); continue; } if (v instanceof Set) { items.push(v); - v.forEach((vi) => pushValue(vi + '')); + v.forEach((vi) => pushValue(`${vi}`)); continue; } if (!Array.isArray(v)) { @@ -109,9 +109,9 @@ export function categoricalStatsGenerator( const vClean: string[] = []; for (const vi of v) { if (vi == null) { - flatMissing++; + flatMissing += 1; } else { - const vs = vi + ''; + const vs = `${vi}`; pushValue(vs); vClean.push(vs); } @@ -125,7 +125,7 @@ export function categoricalStatsGenerator( // if categories are given, keep the order const entries = options.categories - ? options.categories.map((c) => [c, map.get(c)!] as [string, number]) + ? options.categories.map((c) => [c, map.get(c) ?? 0] as [string, number]) : Array.from(map.entries()).sort((a, b) => a[0].localeCompare(b[0])); const hist = entries.map(([value, count]) => ({ @@ -141,6 +141,7 @@ export function categoricalStatsGenerator( categories: options.categories ?? hist.map((d) => d.x0), hist, items, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion maxBin: maxHistBin(hist)!, color, format, diff --git a/packages/components/src/math/common.ts b/packages/components/src/math/common.ts index 79efe97..0a7f2e0 100644 --- a/packages/components/src/math/common.ts +++ b/packages/components/src/math/common.ts @@ -128,7 +128,7 @@ export interface INumericStats extends IHistStats { invert: (v: number) => T; } -export function maxHistBin(hist: readonly Readonly>[]) { +export function maxHistBin(hist: readonly Readonly>[]): Readonly> | null { if (hist.length === 0) { return null; } diff --git a/packages/components/src/math/dateStatsGenerator.ts b/packages/components/src/math/dateStatsGenerator.ts index 68e6350..2466fd0 100644 --- a/packages/components/src/math/dateStatsGenerator.ts +++ b/packages/components/src/math/dateStatsGenerator.ts @@ -20,8 +20,10 @@ export interface IDateStats extends INumericStats { readonly histGranularity: DateHistGranularity; } -export function isDateStats(obj: any): obj is IDateStats { - return obj != null && typeof (obj as IDateStats).histGranularity === 'string' && Array.isArray(obj.hist); +export function isDateStats(obj: unknown): obj is IDateStats { + return ( + obj != null && typeof (obj as IDateStats).histGranularity === 'string' && Array.isArray((obj as IDateStats).hist) + ); } function toDateString(this: IDateStats) { @@ -77,7 +79,7 @@ function computeGranularity( const formatter = yearFormatter(format); const minYear = min.getFullYear(); const maxYear = max.getFullYear(); - for (let i = minYear; i <= maxYear; ++i) { + for (let i = minYear; i <= maxYear; i += 1) { const x0 = new Date(i, 0, 1); hist.push({ x0, @@ -130,20 +132,23 @@ function computeGranularity( return { hist, histGranularity: 'month' }; } -function pushDateHist(hist: IBin[], v: Date, count: number = 1) { +function pushDateHist(hist: IBin[], v: Date, count = 1) { const values = (Array(count) as Date[]).fill(v); if (v < hist[0].x1) { + // eslint-disable-next-line no-param-reassign hist[0].count += count; (hist[0].items as Date[]).push(...values); return; } const l = hist.length - 1; if (v > hist[l].x0) { + // eslint-disable-next-line no-param-reassign hist[l].count += count; (hist[l].items as Date[]).push(...values); return; } if (l === 2) { + // eslint-disable-next-line no-param-reassign hist[1].count += count; (hist[1].items as Date[]).push(...values); return; @@ -160,6 +165,7 @@ function pushDateHist(hist: IBin[], v: Date, count: number = 1) { low = center + 1; } } + // eslint-disable-next-line no-param-reassign hist[low].count += count; (hist[low].items as Date[]).push(...values); } @@ -263,8 +269,8 @@ function createFlat(arr: readonly DateLike[]) { for (const v of arr) { if (v == null) { - missing++; - flatMissing++; + missing += 1; + flatMissing += 1; continue; } if (v instanceof Date) { @@ -283,7 +289,7 @@ function createFlat(arr: readonly DateLike[]) { const vClean: Date[] = []; for (const vi of v) { if (vi == null || !(vi instanceof Date)) { - flatMissing++; + flatMissing += 1; } else { push(vi); vClean.push(vi); @@ -346,6 +352,7 @@ export function dateStatsGenerator(options: DateStatsOptions = {}): (arr: readon hist, histGranularity, median: computeMedian(flatItems), + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion maxBin: maxHistBin(hist)!, ...normalizeDate(minD, maxD), ...base, diff --git a/packages/components/src/math/defaults.ts b/packages/components/src/math/defaults.ts index 20ca3da..569ca8a 100644 --- a/packages/components/src/math/defaults.ts +++ b/packages/components/src/math/defaults.ts @@ -53,10 +53,12 @@ export function autoAssignColors(colors: readonly string[], start = 0): (v: stri let i = start; const map = new Map(); return (c: string) => { - if (map.has(c)) { - return map.get(c)!; + const elem = map.get(c); + if (elem) { + return elem; } - const color = colors[i++ % colors.length]; + const color = colors[i % colors.length]; + i += 1; map.set(c, color); return color; }; diff --git a/packages/components/src/math/numberStatsGenerator.ts b/packages/components/src/math/numberStatsGenerator.ts index e88c877..71777b9 100644 --- a/packages/components/src/math/numberStatsGenerator.ts +++ b/packages/components/src/math/numberStatsGenerator.ts @@ -27,7 +27,7 @@ export function getNumberOfBins(length: number): number { */ export interface INumberStats extends Omit, INumericStats {} -export function isNumberStats(obj: any): obj is INumberStats { +export function isNumberStats(obj: unknown): obj is INumberStats { return obj != null && typeof (obj as INumberStats).min === 'number' && typeof (obj as INumberStats).max === 'number'; } @@ -119,10 +119,10 @@ function createHist( hist[hist.length - 1].x1 = max; // sorted - for (let i = 0; i < b.items.length; i++) { + for (let i = 0; i < b.items.length; i += 1) { const v = +b.items[i]; const bin = hist.find((d) => v < d.x1) || hist[hist.length - 1]; - bin.count++; + bin.count += 1; (bin.items as number[]).push(v); } return hist; @@ -145,8 +145,8 @@ function createFlat(arr: readonly NumberLike[] | Float32Array | Float64Array) { for (const v of arr) { if (v == null) { - missing++; - flatMissing++; + missing += 1; + flatMissing += 1; continue; } if (typeof v === 'number' || (!Array.isArray(v) && !(v instanceof Set))) { @@ -165,7 +165,7 @@ function createFlat(arr: readonly NumberLike[] | Float32Array | Float64Array) { const vClean: number[] = []; for (const vi of v) { if (vi == null) { - flatMissing++; + flatMissing += 1; } else { flatItems.push(+vi); vClean.push(+vi); @@ -206,6 +206,7 @@ export function numberStatsGenerator( flatMissing, flatItems, flatCount: flatMissing + flatItems.length, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion maxBin: maxHistBin(hist)!, scale: normalize(min, max), invert: deNormalize(min, max), diff --git a/packages/components/src/math/textStatsGenerator.ts b/packages/components/src/math/textStatsGenerator.ts index bb553e4..477318b 100644 --- a/packages/components/src/math/textStatsGenerator.ts +++ b/packages/components/src/math/textStatsGenerator.ts @@ -25,7 +25,7 @@ export interface ITextStats extends ICommonStats { format: (v: string) => string; } -export function isTextStats(obj: any): obj is ITextStats { +export function isTextStats(obj: unknown): obj is ITextStats { return ( obj != null && typeof (obj as ITextStats).unique === 'number' && Array.isArray((obj as ITextStats).mostFrequent) ); @@ -75,13 +75,16 @@ export function textStatsGenerator(options: TextStatsOptions = {}): (arr: readon const items: string[] = []; arr.forEach((v) => { if (!v) { - missing++; - } else if (counter.has(v)) { - counter.get(v)!.count++; - items.push(v); + missing += 1; } else { - counter.set(v, { value: v, count: 1 }); - items.push(v); + const c = counter.get(v); + if (c) { + c.count += 1; + items.push(v); + } else { + counter.set(v, { value: v, count: 1 }); + items.push(v); + } } }); const r: ITextStats = { diff --git a/packages/docs/src/components/CodeSandboxExample.tsx b/packages/docs/src/components/CodeSandboxExample.tsx index 48c0f9a..142799d 100644 --- a/packages/docs/src/components/CodeSandboxExample.tsx +++ b/packages/docs/src/components/CodeSandboxExample.tsx @@ -9,7 +9,7 @@ import React from 'react'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import useThemeContext from '@theme/hooks/useThemeContext'; -export default function CodeSandboxExample({ name }: { name: string }) { +export default function CodeSandboxExample({ name }: { name: string }): JSX.Element { const { siteConfig } = useDocusaurusContext(); const { isDarkTheme } = useThemeContext(); diff --git a/packages/docs/src/data/pokemon/index.ts b/packages/docs/src/data/pokemon/index.ts deleted file mode 100644 index 6e4f3fb..0000000 --- a/packages/docs/src/data/pokemon/index.ts +++ /dev/null @@ -1,253 +0,0 @@ -/** - * @lineup-lite/docs - * https://github.com/sgratzl/lineup-lite - * - * Copyright (c) 2021 Samuel Gratzl - */ - -import { asCategoricalColumn, asNumberColumn, asTextColumn, LineUpLiteColumn } from '@lineup-lite/hooks'; -import { autoAssignColors } from '@lineup-lite/components'; -import { - interpolateBlues, - interpolateGreens, - interpolateReds, - interpolatePurples, - interpolateBuPu, - interpolateOrRd, - schemeSet1, - schemeSet3, -} from 'd3-scale-chromatic'; - -export interface IPokemonRow { - name: string; - type1: string; - type2: string; - color: string; - ability1: string; - ability2: string; - 'ability hidden': string; - generation: string; - legendary: boolean; - mega_evolution: boolean; - weight: number; - height: number; - - hp: number; - atk: number; - def: number; - sp_atk: number; - sp_def: number; - spd: number; - total: number; -} - -function invertScale(s: (v: number) => string) { - return (v: number) => s(1 - v); -} - -const defaultColumn: Partial> = { - minWidth: 30, - width: 150, - maxWidth: 400, - // canHide: false, -}; - -// NUMBER -// ・Each Pokemon has a number of Pokedex. It's listed in this column. -// ・Some Pokemon has multiple appearances, status, evolution or generation. In these cases, listed same numbers. -// CODE -// ・Some Pokemon has multiple appearances, status, evolution or generation. -// ・If the Pokemon has multiple appearances, status or other, to distinguish between each Pokemon. -// SERIAL -// ・The number to distinguish between each Pokemon, appearance, status or other factor. -// ・The number is 'NUMBER' times 10 plus 'CODE'. -// NAME -// ・Name for each Pokemon. -// TYPE1 -// ・Each Pokemon has a type. The type is listed in this column. -// TYPE2 -// ・Some Pokemon has two types(dual type). If the Pokemon is dual type, the second type is listed in this column. -// COLOR -// ・Each Pokemmon has a color. It's listed in this column. -// ABILITY1 -// ・Each Pokemon has a ability. The ability is listed in this column. -// ABILITY2 -// ・Some Pokemon has alternative ability. If the Pokemon has alternative ability, it is listed in this column. -// HIDDEN ABILITY -// ・Some Pokemon has special ability. it is listed in this column. -// GENERATION -// ・The number of generation each Pokemon. -// ・Mega evolved Pokemon's generation number is equivalent to origin(before evolution) Pokemon. -// LEGENDARY -// ・The Pokemon that A group of incredibly rare and often has very powerful status, called legendary Pokemon. -// ・If the Pokemon is legendary Pokemon(Include mythical Pokemon), then filled 1, else filled 0. -// MEGA_EVOLUTION -// ・Some Pokemon can Mega Evolve. -// ・If the Pokemon is Mega Evolved Pokemon, then filled 1, else filled 0. -// HEIGHT -// ・Height for each Pokemon. -// WEIGHT -// ・Weight for each Pokemon. -// HP (Hit Point) -// ・One of Pokemon's base stats. It determines how much damage a Pokemon can receive before fainting. -// ATK (Physical Attack) -// ・One of Pokemon's base stats. It determines how much damage the Pokemon deals when using a Physical Move. -// DEF (Physical Defense) -// ・One of Pokemon's base stats. It determines how much damage the Pokemon receives when it's hit with a Physical Move. -// SP_ATK (Special Attack) -// ・One of Pokemon's base stats. It determines how much damage the Pokemon deals when using a Special Move. -// SP_DEF (Special Defense) -// ・One of Pokemon's base stats. It determines how much damage the Pokemon receives when it's hit with a Special Move. -// SPD (Speed) -// ・One of Pokemon's base stats. It determines the order of Pokemon that can act in battle. -// TOTAL -// ・Summed up each base stats. - -// https://gist.github.com/simsketch/1a029a8d7fca1e4c142cbfd043a68f19 - -export default function create(darkTheme: boolean) { - return import('./pokemon').then((parsed) => { - const types = new Set(); - const rows = parsed.default.map((row: any) => { - row.id = row.serial.toString(); - row.generation = String(row.generation); - row.legendary = row.legendary === 1; - row.mega_evolution = row.mega_evolution === 1; - types.add(row.type1); - types.add(row.type2); - return row as IPokemonRow; - }); - const typeCat = Array.from(types).sort().filter(Boolean); - const colors = autoAssignColors([schemeSet3, schemeSet1].flat()); - const columns: LineUpLiteColumn[] = [ - asTextColumn({ - Header: 'Name', - tooltip: 'Name for each Pokemon', - accessor: 'name', - minWidth: 100, - }), - asCategoricalColumn( - { - Header: 'Type1', - tooltip: 'Each Pokemon has a type. The type is listed in this column', - accessor: 'type1', - minWidth: 100, - }, - { - categories: typeCat, - color: colors, - } - ), - asCategoricalColumn( - { - Header: 'Type2', - tooltip: - 'Some Pokemon has two types(dual type). If the Pokemon is dual type, the second type is listed in this column', - accessor: 'type2', - minWidth: 100, - }, - { - categories: typeCat, - color: colors, - } - ), - asCategoricalColumn({ - Header: 'Generation', - accessor: 'generation', - minWidth: 80, - }), - asNumberColumn( - { - Header: 'Hit Point', - tooltip: "One of Pokemon's base stats. It determines how much damage a Pokemon can receive before fainting", - accessor: 'hp', - minWidth: 50, - }, - { - min: 0, - max: 200, - color: darkTheme ? interpolateBlues : invertScale(interpolateBlues), - } - ), - asNumberColumn( - { - Header: 'Physical Attack', - tooltip: - "One of Pokemon's base stats. It determines how much damage the Pokemon deals when using a Physical Move", - accessor: 'atk', - minWidth: 50, - }, - { - min: 0, - max: 200, - color: darkTheme ? interpolatePurples : invertScale(interpolatePurples), - } - ), - asNumberColumn( - { - Header: 'Physical Defense', - tooltip: - "One of Pokemon's base stats. It determines how much damage the Pokemon deals when using a Physical Move", - accessor: 'def', - minWidth: 50, - }, - { - min: 0, - max: 200, - color: darkTheme ? interpolateReds : invertScale(interpolateReds), - } - ), - asNumberColumn( - { - Header: 'Special Attack', - tooltip: - "One of Pokemon's base stats. It determines how much damage the Pokemon deals when using a Special Move", - accessor: 'sp_atk', - minWidth: 50, - }, - { - min: 0, - max: 200, - color: darkTheme ? interpolateBuPu : invertScale(interpolateBuPu), - } - ), - asNumberColumn( - { - Header: 'Special Defense', - tooltip: - "One of Pokemon's base stats. It determines how much damage the Pokemon receives when it's hit with a Special Move", - accessor: 'sp_def', - minWidth: 50, - }, - { - min: 0, - max: 200, - color: darkTheme ? interpolateOrRd : invertScale(interpolateOrRd), - } - ), - asNumberColumn( - { - Header: 'Speed', - tooltip: "One of Pokemon's base stats. It determines the order of Pokemon that can act in battle", - accessor: 'spd', - minWidth: 50, - }, - { - min: 0, - max: 200, - color: darkTheme ? interpolateGreens : invertScale(interpolateGreens), - } - ), - ]; - - return { - author: 'Takamasa Kato', - description: - 'Pokemon Gen 8 updated 2020 generated dataset, based on Kaggle: https://www.kaggle.com/takamasakato/ pokemon-all-status-data', - - rows, - defaultColumn, - columns: columns, - }; - }); -} diff --git a/packages/docs/src/data/pokemon/pokemon.ts b/packages/docs/src/data/pokemon/pokemon.ts deleted file mode 100644 index f1ff3bf..0000000 --- a/packages/docs/src/data/pokemon/pokemon.ts +++ /dev/null @@ -1,24995 +0,0 @@ -/** - * @lineup-lite/docs - * https://github.com/sgratzl/lineup-lite - * - * Copyright (c) 2021 Samuel Gratzl - */ - -const data = [ - { - number: 1, - code: 1, - serial: 11, - name: 'Bulbasaur', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Chrolophyll', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 6.9, - hp: 45, - atk: 49, - def: 49, - sp_atk: 65, - sp_def: 65, - spd: 45, - total: 318, - }, - { - number: 2, - code: 1, - serial: 21, - name: 'Ivysaur', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Chrolophyll', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 13, - hp: 60, - atk: 62, - def: 63, - sp_atk: 80, - sp_def: 80, - spd: 60, - total: 405, - }, - { - number: 3, - code: 1, - serial: 31, - name: 'Venusaur', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Chrolophyll', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 100, - hp: 80, - atk: 82, - def: 83, - sp_atk: 100, - sp_def: 100, - spd: 80, - total: 525, - }, - { - number: 3, - code: 2, - serial: 32, - name: 'Mega Venusaur', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Thick Fat', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 2.4, - weight: 155.5, - hp: 80, - atk: 100, - def: 123, - sp_atk: 122, - sp_def: 120, - spd: 80, - total: 625, - }, - { - number: 4, - code: 1, - serial: 41, - name: 'Charmander', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Solar Power', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8.5, - hp: 39, - atk: 52, - def: 43, - sp_atk: 60, - sp_def: 50, - spd: 65, - total: 309, - }, - { - number: 5, - code: 1, - serial: 51, - name: 'Charmeleon', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Solar Power', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 19, - hp: 58, - atk: 64, - def: 58, - sp_atk: 80, - sp_def: 65, - spd: 80, - total: 405, - }, - { - number: 6, - code: 1, - serial: 61, - name: 'Charizard', - type1: 'Fire', - type2: 'Flying', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Solar Power', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 90.5, - hp: 78, - atk: 84, - def: 78, - sp_atk: 109, - sp_def: 85, - spd: 100, - total: 534, - }, - { - number: 6, - code: 2, - serial: 62, - name: 'Mega Charizard X', - type1: 'Fire', - type2: 'Dragon', - color: 'Black', - ability1: 'Tough Claws', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 1.7, - weight: 110.5, - hp: 78, - atk: 130, - def: 111, - sp_atk: 130, - sp_def: 85, - spd: 100, - total: 634, - }, - { - number: 6, - code: 3, - serial: 63, - name: 'Mega Charizard Y', - type1: 'Fire', - type2: 'Flying', - color: 'Red', - ability1: 'Drought', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 1.7, - weight: 90.5, - hp: 78, - atk: 104, - def: 78, - sp_atk: 159, - sp_def: 115, - spd: 100, - total: 634, - }, - { - number: 7, - code: 1, - serial: 71, - name: 'Squirtle', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Rain Dish', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9, - hp: 44, - atk: 48, - def: 65, - sp_atk: 50, - sp_def: 64, - spd: 43, - total: 314, - }, - { - number: 8, - code: 1, - serial: 81, - name: 'Wartortle', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Rain Dish', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 22.5, - hp: 59, - atk: 63, - def: 80, - sp_atk: 65, - sp_def: 80, - spd: 58, - total: 405, - }, - { - number: 9, - code: 1, - serial: 91, - name: 'Blastoise', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Rain Dish', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 85.5, - hp: 79, - atk: 83, - def: 100, - sp_atk: 85, - sp_def: 105, - spd: 78, - total: 530, - }, - { - number: 9, - code: 2, - serial: 92, - name: 'Mega Blastoise', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Mega Launcher', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 1.6, - weight: 101.1, - hp: 79, - atk: 103, - def: 120, - sp_atk: 135, - sp_def: 115, - spd: 78, - total: 630, - }, - { - number: 10, - code: 1, - serial: 101, - name: 'Caterpie', - type1: 'Bug', - type2: '', - color: 'Green', - ability1: 'Shield Dust', - ability2: '', - 'ability hidden': 'Run Away', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2.9, - hp: 45, - atk: 30, - def: 35, - sp_atk: 20, - sp_def: 20, - spd: 45, - total: 195, - }, - { - number: 11, - code: 1, - serial: 111, - name: 'Metapod', - type1: 'Bug', - type2: '', - color: 'Green', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 9.9, - hp: 50, - atk: 20, - def: 55, - sp_atk: 25, - sp_def: 25, - spd: 30, - total: 205, - }, - { - number: 12, - code: 1, - serial: 121, - name: 'Butterfree', - type1: 'Bug', - type2: 'Flying', - color: 'White', - ability1: 'Compound Eyes', - ability2: '', - 'ability hidden': 'Tinted Lens', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 32, - hp: 60, - atk: 45, - def: 50, - sp_atk: 90, - sp_def: 80, - spd: 70, - total: 395, - }, - { - number: 13, - code: 1, - serial: 131, - name: 'Weedle', - type1: 'Bug', - type2: 'Poison', - color: 'Brown', - ability1: 'Shield Dust', - ability2: '', - 'ability hidden': 'Run Away', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.2, - hp: 40, - atk: 35, - def: 30, - sp_atk: 20, - sp_def: 20, - spd: 50, - total: 195, - }, - { - number: 14, - code: 1, - serial: 141, - name: 'Kakuna', - type1: 'Bug', - type2: 'Poison', - color: 'Yellow', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 10, - hp: 45, - atk: 25, - def: 50, - sp_atk: 25, - sp_def: 25, - spd: 35, - total: 205, - }, - { - number: 15, - code: 1, - serial: 151, - name: 'Beedrill', - type1: 'Bug', - type2: 'Poison', - color: 'Yellow', - ability1: 'Swarm', - ability2: '', - 'ability hidden': 'Sniper', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 29.5, - hp: 65, - atk: 90, - def: 40, - sp_atk: 45, - sp_def: 80, - spd: 75, - total: 395, - }, - { - number: 15, - code: 2, - serial: 152, - name: 'Mega Beedrill', - type1: 'Bug', - type2: 'Poison', - color: 'Yellow', - ability1: 'Adaptability', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 1.4, - weight: 40.5, - hp: 65, - atk: 150, - def: 40, - sp_atk: 15, - sp_def: 80, - spd: 145, - total: 495, - }, - { - number: 16, - code: 1, - serial: 161, - name: 'Pidgey', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Keen Eye', - ability2: 'Tangled Feet', - 'ability hidden': 'Big Pecks', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1.8, - hp: 40, - atk: 45, - def: 40, - sp_atk: 35, - sp_def: 35, - spd: 56, - total: 251, - }, - { - number: 17, - code: 1, - serial: 171, - name: 'Pidgeotto', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Keen Eye', - ability2: 'Tangled Feet', - 'ability hidden': 'Big Pecks', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 30, - hp: 63, - atk: 60, - def: 55, - sp_atk: 50, - sp_def: 50, - spd: 71, - total: 349, - }, - { - number: 18, - code: 1, - serial: 181, - name: 'Pidgeot', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Keen Eye', - ability2: 'Tangled Feet', - 'ability hidden': 'Big Pecks', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 39.5, - hp: 83, - atk: 80, - def: 75, - sp_atk: 70, - sp_def: 70, - spd: 101, - total: 479, - }, - { - number: 18, - code: 2, - serial: 182, - name: 'Mega Pidgeot', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'No Guard', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 2.2, - weight: 50.5, - hp: 83, - atk: 80, - def: 80, - sp_atk: 135, - sp_def: 80, - spd: 121, - total: 579, - }, - { - number: 19, - code: 1, - serial: 191, - name: 'Rattata', - type1: 'Normal', - type2: '', - color: 'Purple', - ability1: 'Run Away', - ability2: 'Guts', - 'ability hidden': 'Hustle', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.5, - hp: 30, - atk: 56, - def: 35, - sp_atk: 25, - sp_def: 35, - spd: 72, - total: 253, - }, - { - number: 19, - code: 2, - serial: 192, - name: 'Rattata', - type1: 'Dark', - type2: 'Normal', - color: 'Black', - ability1: 'Gluttony', - ability2: 'Hustle', - 'ability hidden': 'Thick Fat', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.8, - hp: 30, - atk: 56, - def: 35, - sp_atk: 25, - sp_def: 35, - spd: 72, - total: 253, - }, - { - number: 20, - code: 1, - serial: 201, - name: 'Raticate', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Guts', - 'ability hidden': 'Hustle', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 18.5, - hp: 55, - atk: 81, - def: 60, - sp_atk: 50, - sp_def: 70, - spd: 97, - total: 413, - }, - { - number: 20, - code: 2, - serial: 202, - name: 'Raticate', - type1: 'Dark', - type2: 'Normal', - color: 'Black', - ability1: 'Gluttony', - ability2: 'Hustle', - 'ability hidden': 'Thick Fat', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 25.5, - hp: 75, - atk: 71, - def: 70, - sp_atk: 40, - sp_def: 80, - spd: 77, - total: 413, - }, - { - number: 21, - code: 1, - serial: 211, - name: 'Spearow', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Keen Eye', - ability2: '', - 'ability hidden': 'Sniper', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2, - hp: 40, - atk: 60, - def: 30, - sp_atk: 31, - sp_def: 31, - spd: 70, - total: 262, - }, - { - number: 22, - code: 1, - serial: 221, - name: 'Fearow', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Keen Eye', - ability2: '', - 'ability hidden': 'Sniper', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 38, - hp: 65, - atk: 90, - def: 65, - sp_atk: 61, - sp_def: 61, - spd: 100, - total: 442, - }, - { - number: 23, - code: 1, - serial: 231, - name: 'Ekans', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Intimidate', - ability2: 'Shed Skin', - 'ability hidden': 'Unnerve', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 6.9, - hp: 35, - atk: 60, - def: 44, - sp_atk: 40, - sp_def: 54, - spd: 55, - total: 288, - }, - { - number: 24, - code: 1, - serial: 241, - name: 'Arbok', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Intimidate', - ability2: 'Shed Skin', - 'ability hidden': 'Unnerve', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 3.5, - weight: 65, - hp: 60, - atk: 95, - def: 69, - sp_atk: 65, - sp_def: 79, - spd: 80, - total: 448, - }, - { - number: 25, - code: 1, - serial: 251, - name: 'Pikachu', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Lightning Rod', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 6, - hp: 35, - atk: 55, - def: 40, - sp_atk: 50, - sp_def: 50, - spd: 90, - total: 320, - }, - { - number: 26, - code: 1, - serial: 261, - name: 'Raichu', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Lightning Rod', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 30, - hp: 60, - atk: 90, - def: 55, - sp_atk: 90, - sp_def: 80, - spd: 110, - total: 485, - }, - { - number: 26, - code: 2, - serial: 262, - name: 'Raichu', - type1: 'Electric', - type2: 'Psychic', - color: 'Brown', - ability1: 'Surge Surfer', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 21, - hp: 60, - atk: 85, - def: 50, - sp_atk: 95, - sp_def: 85, - spd: 110, - total: 485, - }, - { - number: 27, - code: 1, - serial: 271, - name: 'Sandshrew', - type1: 'Ground', - type2: '', - color: 'Yellow', - ability1: 'Sand Veil', - ability2: '', - 'ability hidden': 'Sand Rush', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 12, - hp: 50, - atk: 75, - def: 85, - sp_atk: 20, - sp_def: 30, - spd: 40, - total: 300, - }, - { - number: 27, - code: 2, - serial: 272, - name: 'Sandshrew', - type1: 'Ice', - type2: 'Steel', - color: 'White', - ability1: 'Snow Cloak', - ability2: '', - 'ability hidden': 'Slush Rush', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 40, - hp: 50, - atk: 75, - def: 90, - sp_atk: 10, - sp_def: 35, - spd: 40, - total: 300, - }, - { - number: 28, - code: 1, - serial: 281, - name: 'Sandslash', - type1: 'Ground', - type2: '', - color: 'Yellow', - ability1: 'Sand Veil', - ability2: '', - 'ability hidden': 'Sand Rush', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 29.5, - hp: 75, - atk: 100, - def: 110, - sp_atk: 45, - sp_def: 55, - spd: 65, - total: 450, - }, - { - number: 28, - code: 2, - serial: 282, - name: 'Sandslash', - type1: 'Ice', - type2: 'Steel', - color: 'Blue', - ability1: 'Snow Cloak', - ability2: '', - 'ability hidden': 'Slush Rush', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 55, - hp: 75, - atk: 100, - def: 120, - sp_atk: 25, - sp_def: 65, - spd: 65, - total: 450, - }, - { - number: 29, - code: 1, - serial: 291, - name: 'Nidoran F', - type1: 'Poison', - type2: '', - color: 'Blue', - ability1: 'Poison Point', - ability2: 'Rivalry', - 'ability hidden': 'Hustle', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 7, - hp: 55, - atk: 47, - def: 52, - sp_atk: 40, - sp_def: 40, - spd: 41, - total: 275, - }, - { - number: 30, - code: 1, - serial: 301, - name: 'Nidorina', - type1: 'Poison', - type2: '', - color: 'Blue', - ability1: 'Poison Point', - ability2: 'Rivalry', - 'ability hidden': 'Hustle', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 20, - hp: 70, - atk: 62, - def: 67, - sp_atk: 55, - sp_def: 55, - spd: 56, - total: 365, - }, - { - number: 31, - code: 1, - serial: 311, - name: 'Nidoqueen', - type1: 'Poison', - type2: 'Ground', - color: 'Blue', - ability1: 'Poison Point', - ability2: 'Rivalry', - 'ability hidden': 'Sheer Force', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 60, - hp: 90, - atk: 92, - def: 87, - sp_atk: 75, - sp_def: 85, - spd: 76, - total: 505, - }, - { - number: 32, - code: 1, - serial: 321, - name: 'Nidoran M', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Poison Point', - ability2: 'Rivalry', - 'ability hidden': 'Hustle', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9, - hp: 46, - atk: 57, - def: 40, - sp_atk: 40, - sp_def: 40, - spd: 50, - total: 273, - }, - { - number: 33, - code: 1, - serial: 331, - name: 'Nidorino', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Poison Point', - ability2: 'Rivalry', - 'ability hidden': 'Hustle', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 19.5, - hp: 61, - atk: 72, - def: 57, - sp_atk: 55, - sp_def: 55, - spd: 65, - total: 365, - }, - { - number: 34, - code: 1, - serial: 341, - name: 'Nidoking', - type1: 'Poison', - type2: 'Ground', - color: 'Purple', - ability1: 'Poison Point', - ability2: 'Rivalry', - 'ability hidden': 'Sheer Force', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 62, - hp: 81, - atk: 102, - def: 77, - sp_atk: 85, - sp_def: 75, - spd: 85, - total: 505, - }, - { - number: 35, - code: 1, - serial: 351, - name: 'Clefairy', - type1: 'Fairy', - type2: '', - color: 'Pink', - ability1: 'Cute Charm', - ability2: 'Magic Guard', - 'ability hidden': 'Friend Guard', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 7.5, - hp: 70, - atk: 45, - def: 48, - sp_atk: 60, - sp_def: 65, - spd: 35, - total: 323, - }, - { - number: 36, - code: 1, - serial: 361, - name: 'Clefable', - type1: 'Fairy', - type2: '', - color: 'Pink', - ability1: 'Cute Charm', - ability2: 'Magic Guard', - 'ability hidden': 'Friend Guard', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 40, - hp: 95, - atk: 70, - def: 73, - sp_atk: 95, - sp_def: 90, - spd: 60, - total: 483, - }, - { - number: 37, - code: 1, - serial: 371, - name: 'Vulpix', - type1: 'Fire', - type2: '', - color: 'Brown', - ability1: 'Flash Fire', - ability2: '', - 'ability hidden': 'Drought', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 9.9, - hp: 38, - atk: 41, - def: 40, - sp_atk: 50, - sp_def: 65, - spd: 65, - total: 299, - }, - { - number: 37, - code: 2, - serial: 372, - name: 'Vulpix', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Snow Cloak', - ability2: '', - 'ability hidden': 'Snow Warning', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 9.9, - hp: 38, - atk: 41, - def: 40, - sp_atk: 50, - sp_def: 65, - spd: 65, - total: 299, - }, - { - number: 38, - code: 1, - serial: 381, - name: 'Ninetales', - type1: 'Fire', - type2: '', - color: 'Yellow', - ability1: 'Flash Fire', - ability2: '', - 'ability hidden': 'Drought', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 19.9, - hp: 73, - atk: 76, - def: 75, - sp_atk: 81, - sp_def: 100, - spd: 100, - total: 505, - }, - { - number: 38, - code: 2, - serial: 382, - name: 'Ninetales', - type1: 'Ice', - type2: 'Fairy', - color: 'Blue', - ability1: 'Snow Cloak', - ability2: '', - 'ability hidden': 'Snow Warning', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 19.9, - hp: 73, - atk: 67, - def: 75, - sp_atk: 81, - sp_def: 100, - spd: 109, - total: 505, - }, - { - number: 39, - code: 1, - serial: 391, - name: 'Jigglypuff', - type1: 'Normal', - type2: 'Fairy', - color: 'Pink', - ability1: 'Cute Charm', - ability2: 'Competitive', - 'ability hidden': 'Friend Guard', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 5.5, - hp: 115, - atk: 45, - def: 20, - sp_atk: 45, - sp_def: 25, - spd: 20, - total: 270, - }, - { - number: 40, - code: 1, - serial: 401, - name: 'Wigglytuff', - type1: 'Normal', - type2: 'Fairy', - color: 'Pink', - ability1: 'Cute Charm', - ability2: 'Competitive', - 'ability hidden': 'Friend Guard', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 12, - hp: 140, - atk: 70, - def: 45, - sp_atk: 85, - sp_def: 50, - spd: 45, - total: 435, - }, - { - number: 41, - code: 1, - serial: 411, - name: 'Zubat', - type1: 'Poison', - type2: 'Flying', - color: 'Purple', - ability1: 'Inner Focus', - ability2: '', - 'ability hidden': 'Infiltrator', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 7.5, - hp: 40, - atk: 45, - def: 35, - sp_atk: 30, - sp_def: 40, - spd: 55, - total: 245, - }, - { - number: 42, - code: 1, - serial: 421, - name: 'Golbat', - type1: 'Poison', - type2: 'Flying', - color: 'Purple', - ability1: 'Inner Focus', - ability2: '', - 'ability hidden': 'Infiltrator', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 55, - hp: 75, - atk: 80, - def: 70, - sp_atk: 65, - sp_def: 75, - spd: 90, - total: 455, - }, - { - number: 43, - code: 1, - serial: 431, - name: 'Oddish', - type1: 'Grass', - type2: 'Poison', - color: 'Blue', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Run Away', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 5.4, - hp: 45, - atk: 50, - def: 55, - sp_atk: 75, - sp_def: 65, - spd: 30, - total: 320, - }, - { - number: 44, - code: 1, - serial: 441, - name: 'Gloom', - type1: 'Grass', - type2: 'Poison', - color: 'Blue', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Stench', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 8.6, - hp: 60, - atk: 65, - def: 70, - sp_atk: 85, - sp_def: 75, - spd: 40, - total: 395, - }, - { - number: 45, - code: 1, - serial: 451, - name: 'Vileplume', - type1: 'Grass', - type2: 'Poison', - color: 'Red', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Effect Spore', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 18.6, - hp: 75, - atk: 80, - def: 85, - sp_atk: 110, - sp_def: 90, - spd: 50, - total: 490, - }, - { - number: 46, - code: 1, - serial: 461, - name: 'Paras', - type1: 'Bug', - type2: 'Grass', - color: 'Red', - ability1: 'Effect Spore', - ability2: 'Dry Skin', - 'ability hidden': 'Damp', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 5.4, - hp: 35, - atk: 70, - def: 55, - sp_atk: 45, - sp_def: 55, - spd: 25, - total: 285, - }, - { - number: 47, - code: 1, - serial: 471, - name: 'Parasect', - type1: 'Bug', - type2: 'Grass', - color: 'Red', - ability1: 'Effect Spore', - ability2: 'Dry Skin', - 'ability hidden': 'Damp', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 29.5, - hp: 60, - atk: 95, - def: 80, - sp_atk: 60, - sp_def: 80, - spd: 30, - total: 405, - }, - { - number: 48, - code: 1, - serial: 481, - name: 'Venonat', - type1: 'Bug', - type2: 'Poison', - color: 'Purple', - ability1: 'Compound Eyes', - ability2: 'Tinted Lens', - 'ability hidden': 'Run Away', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 30, - hp: 60, - atk: 55, - def: 50, - sp_atk: 40, - sp_def: 55, - spd: 45, - total: 305, - }, - { - number: 49, - code: 1, - serial: 491, - name: 'Venomoth', - type1: 'Bug', - type2: 'Poison', - color: 'Purple', - ability1: 'Shield Dust', - ability2: 'Tinted Lens', - 'ability hidden': 'Wonder Skin', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 12.5, - hp: 70, - atk: 65, - def: 60, - sp_atk: 90, - sp_def: 75, - spd: 90, - total: 450, - }, - { - number: 50, - code: 1, - serial: 501, - name: 'Diglett', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Sand Veil', - ability2: 'Arena Trap', - 'ability hidden': 'Sand Force', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.8, - hp: 10, - atk: 55, - def: 25, - sp_atk: 35, - sp_def: 45, - spd: 95, - total: 265, - }, - { - number: 50, - code: 2, - serial: 502, - name: 'Diglett', - type1: 'Ground', - type2: 'Steel', - color: 'Brown', - ability1: 'Sand Veil', - ability2: 'Tangling Hair', - 'ability hidden': 'Sand Force', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 1, - hp: 10, - atk: 55, - def: 30, - sp_atk: 35, - sp_def: 45, - spd: 90, - total: 265, - }, - { - number: 51, - code: 1, - serial: 511, - name: 'Dugtrio', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Sand Veil', - ability2: 'Arena Trap', - 'ability hidden': 'Sand Force', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 33.3, - hp: 35, - atk: 100, - def: 50, - sp_atk: 50, - sp_def: 70, - spd: 120, - total: 425, - }, - { - number: 51, - code: 2, - serial: 512, - name: 'Dugtrio', - type1: 'Ground', - type2: 'Steel', - color: 'Brown', - ability1: 'Sand Veil', - ability2: 'Tangling Hair', - 'ability hidden': 'Sand Force', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 66.6, - hp: 35, - atk: 100, - def: 60, - sp_atk: 50, - sp_def: 70, - spd: 110, - total: 425, - }, - { - number: 52, - code: 1, - serial: 521, - name: 'Meowth', - type1: 'Normal', - type2: '', - color: 'Yellow', - ability1: 'Pickup', - ability2: 'Technician', - 'ability hidden': 'Unnerve', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 4.2, - hp: 40, - atk: 45, - def: 35, - sp_atk: 40, - sp_def: 40, - spd: 90, - total: 290, - }, - { - number: 52, - code: 2, - serial: 522, - name: 'Meowth', - type1: 'Dark', - type2: '', - color: 'Blue', - ability1: 'Pickup', - ability2: 'Technician', - 'ability hidden': 'Rattled', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 4.2, - hp: 40, - atk: 35, - def: 35, - sp_atk: 50, - sp_def: 40, - spd: 90, - total: 290, - }, - { - number: 52, - code: 3, - serial: 523, - name: 'Meowth', - type1: 'Steel', - type2: '', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Tough Claws', - 'ability hidden': 'Unnerve', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 7.5, - hp: 50, - atk: 65, - def: 55, - sp_atk: 40, - sp_def: 40, - spd: 40, - total: 290, - }, - { - number: 53, - code: 1, - serial: 531, - name: 'Persian', - type1: 'Normal', - type2: '', - color: 'Yellow', - ability1: 'Limber', - ability2: 'Technician', - 'ability hidden': 'Unnerve', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 32, - hp: 65, - atk: 70, - def: 60, - sp_atk: 65, - sp_def: 65, - spd: 115, - total: 440, - }, - { - number: 53, - code: 2, - serial: 532, - name: 'Persian', - type1: 'Dark', - type2: '', - color: 'Blue', - ability1: 'Fur Coat', - ability2: 'Technician', - 'ability hidden': 'Rattled', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 33, - hp: 65, - atk: 60, - def: 60, - sp_atk: 75, - sp_def: 65, - spd: 115, - total: 440, - }, - { - number: 54, - code: 1, - serial: 541, - name: 'Psyduck', - type1: 'Water', - type2: '', - color: 'Yellow', - ability1: 'Damp', - ability2: 'Cloud Nine', - 'ability hidden': 'Swift Swim', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 19.6, - hp: 50, - atk: 52, - def: 48, - sp_atk: 65, - sp_def: 50, - spd: 55, - total: 320, - }, - { - number: 55, - code: 1, - serial: 551, - name: 'Golduck', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Damp', - ability2: 'Cloud Nine', - 'ability hidden': 'Swift Swim', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 76.6, - hp: 80, - atk: 82, - def: 78, - sp_atk: 95, - sp_def: 80, - spd: 85, - total: 500, - }, - { - number: 56, - code: 1, - serial: 561, - name: 'Mankey', - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Vital Spilit', - ability2: 'Anger Point', - 'ability hidden': 'Defiant', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 28, - hp: 40, - atk: 80, - def: 35, - sp_atk: 35, - sp_def: 45, - spd: 70, - total: 305, - }, - { - number: 57, - code: 1, - serial: 571, - name: 'Primeape', - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Vital Spilit', - ability2: 'Anger Point', - 'ability hidden': 'Defiant', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 32, - hp: 65, - atk: 105, - def: 60, - sp_atk: 60, - sp_def: 70, - spd: 95, - total: 455, - }, - { - number: 58, - code: 1, - serial: 581, - name: 'Growlithe', - type1: 'Fire', - type2: '', - color: 'Brown', - ability1: 'Intimidate', - ability2: 'Flash Fire', - 'ability hidden': 'Justified', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 19, - hp: 55, - atk: 70, - def: 45, - sp_atk: 70, - sp_def: 50, - spd: 60, - total: 350, - }, - { - number: 59, - code: 1, - serial: 591, - name: 'Arcanine', - type1: 'Fire', - type2: '', - color: 'Brown', - ability1: 'Intimidate', - ability2: 'Flash Fire', - 'ability hidden': 'Justified', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 155, - hp: 90, - atk: 110, - def: 80, - sp_atk: 100, - sp_def: 80, - spd: 95, - total: 555, - }, - { - number: 60, - code: 1, - serial: 601, - name: 'Poliwag', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Water Absorb', - ability2: 'Damp', - 'ability hidden': 'Swift Swim', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 12.4, - hp: 40, - atk: 50, - def: 40, - sp_atk: 40, - sp_def: 40, - spd: 90, - total: 300, - }, - { - number: 61, - code: 1, - serial: 611, - name: 'Poliwhirl', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Water Absorb', - ability2: 'Damp', - 'ability hidden': 'Swift Swim', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 20, - hp: 65, - atk: 65, - def: 65, - sp_atk: 50, - sp_def: 50, - spd: 90, - total: 385, - }, - { - number: 62, - code: 1, - serial: 621, - name: 'Poliwrath', - type1: 'Water', - type2: 'Fighting', - color: 'Blue', - ability1: 'Water Absorb', - ability2: 'Damp', - 'ability hidden': 'Swift Swim', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 54, - hp: 90, - atk: 95, - def: 95, - sp_atk: 70, - sp_def: 90, - spd: 70, - total: 510, - }, - { - number: 63, - code: 1, - serial: 631, - name: 'Abra', - type1: 'Psychic', - type2: '', - color: 'Brown', - ability1: 'Synchronize', - ability2: 'Inner Focus', - 'ability hidden': 'Magic guard', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 19.5, - hp: 25, - atk: 20, - def: 15, - sp_atk: 105, - sp_def: 55, - spd: 90, - total: 310, - }, - { - number: 64, - code: 1, - serial: 641, - name: 'Kadabra', - type1: 'Psychic', - type2: '', - color: 'Brown', - ability1: 'Synchronize', - ability2: 'Inner Focus', - 'ability hidden': 'Magic guard', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 56.5, - hp: 40, - atk: 35, - def: 30, - sp_atk: 120, - sp_def: 70, - spd: 105, - total: 400, - }, - { - number: 65, - code: 1, - serial: 651, - name: 'Alakazam', - type1: 'Psychic', - type2: '', - color: 'Brown', - ability1: 'Synchronize', - ability2: 'Inner Focus', - 'ability hidden': 'Magic guard', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 48, - hp: 55, - atk: 50, - def: 45, - sp_atk: 135, - sp_def: 95, - spd: 120, - total: 500, - }, - { - number: 65, - code: 2, - serial: 652, - name: 'Mega Alakazam', - type1: 'Psychic', - type2: '', - color: 'Brown', - ability1: 'Trace', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 1.2, - weight: 48, - hp: 55, - atk: 50, - def: 65, - sp_atk: 175, - sp_def: 95, - spd: 150, - total: 590, - }, - { - number: 66, - code: 1, - serial: 661, - name: 'Machop', - type1: 'Fighting', - type2: '', - color: 'Grey', - ability1: 'Guts', - ability2: 'No Guard', - 'ability hidden': 'Steadfast', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 19.5, - hp: 70, - atk: 80, - def: 50, - sp_atk: 35, - sp_def: 35, - spd: 35, - total: 305, - }, - { - number: 67, - code: 1, - serial: 671, - name: 'Machoke', - type1: 'Fighting', - type2: '', - color: 'Grey', - ability1: 'Guts', - ability2: 'No Guard', - 'ability hidden': 'Steadfast', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 70.5, - hp: 80, - atk: 100, - def: 70, - sp_atk: 50, - sp_def: 60, - spd: 45, - total: 405, - }, - { - number: 68, - code: 1, - serial: 681, - name: 'Machamp', - type1: 'Fighting', - type2: '', - color: 'Grey', - ability1: 'Guts', - ability2: 'No Guard', - 'ability hidden': 'Steadfast', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 130, - hp: 90, - atk: 130, - def: 80, - sp_atk: 65, - sp_def: 85, - spd: 55, - total: 505, - }, - { - number: 69, - code: 1, - serial: 691, - name: 'Bellsprout', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Gluttony', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 4, - hp: 50, - atk: 75, - def: 35, - sp_atk: 70, - sp_def: 30, - spd: 40, - total: 300, - }, - { - number: 70, - code: 1, - serial: 701, - name: 'Weepinbell', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Gluttony', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 6.4, - hp: 65, - atk: 90, - def: 50, - sp_atk: 85, - sp_def: 45, - spd: 55, - total: 390, - }, - { - number: 71, - code: 1, - serial: 711, - name: 'Victreebel', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Gluttony', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 15.5, - hp: 80, - atk: 105, - def: 65, - sp_atk: 100, - sp_def: 70, - spd: 70, - total: 490, - }, - { - number: 72, - code: 1, - serial: 721, - name: 'Tentacool', - type1: 'Water', - type2: 'Poison', - color: 'Blue', - ability1: 'Clear Body', - ability2: 'Liquid Ooze', - 'ability hidden': 'Rain dish', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 45.5, - hp: 40, - atk: 40, - def: 35, - sp_atk: 50, - sp_def: 100, - spd: 70, - total: 335, - }, - { - number: 73, - code: 1, - serial: 731, - name: 'Tentacruel', - type1: 'Water', - type2: 'Poison', - color: 'Blue', - ability1: 'Clear Body', - ability2: 'Liquid Ooze', - 'ability hidden': 'Rain dish', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 55, - hp: 80, - atk: 70, - def: 65, - sp_atk: 80, - sp_def: 120, - spd: 100, - total: 515, - }, - { - number: 74, - code: 1, - serial: 741, - name: 'Geodude', - type1: 'Rock', - type2: 'Ground', - color: 'Brown', - ability1: 'Rock Head', - ability2: 'Sturdy', - 'ability hidden': 'Sand Veil', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 20, - hp: 40, - atk: 80, - def: 100, - sp_atk: 30, - sp_def: 30, - spd: 20, - total: 300, - }, - { - number: 74, - code: 2, - serial: 742, - name: 'Geodude', - type1: 'Rock', - type2: 'Electric', - color: 'Grey', - ability1: 'Magnet Pull', - ability2: 'Sturdy', - 'ability hidden': 'Galvanize', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 20.3, - hp: 40, - atk: 80, - def: 100, - sp_atk: 30, - sp_def: 30, - spd: 20, - total: 300, - }, - { - number: 75, - code: 1, - serial: 751, - name: 'Graveler', - type1: 'Rock', - type2: 'Ground', - color: 'Brown', - ability1: 'Rock Head', - ability2: 'Sturdy', - 'ability hidden': 'Sand Veil', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 105, - hp: 55, - atk: 95, - def: 115, - sp_atk: 45, - sp_def: 45, - spd: 35, - total: 390, - }, - { - number: 75, - code: 2, - serial: 752, - name: 'Graveler', - type1: 'Rock', - type2: 'Electric', - color: 'Grey', - ability1: 'Magnet Pull', - ability2: 'Sturdy', - 'ability hidden': 'Galvanize', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 110, - hp: 55, - atk: 95, - def: 115, - sp_atk: 45, - sp_def: 45, - spd: 35, - total: 390, - }, - { - number: 76, - code: 1, - serial: 761, - name: 'Golem', - type1: 'Rock', - type2: 'Ground', - color: 'Brown', - ability1: 'Rock Head', - ability2: 'Sturdy', - 'ability hidden': 'Sand Veil', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 300, - hp: 80, - atk: 120, - def: 130, - sp_atk: 55, - sp_def: 65, - spd: 45, - total: 495, - }, - { - number: 76, - code: 2, - serial: 762, - name: 'Golem', - type1: 'Rock', - type2: 'Electric', - color: 'Grey', - ability1: 'Magnet Pull', - ability2: 'Sturdy', - 'ability hidden': 'Galvanize', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 316, - hp: 80, - atk: 120, - def: 130, - sp_atk: 55, - sp_def: 65, - spd: 45, - total: 495, - }, - { - number: 77, - code: 1, - serial: 771, - name: 'Ponyta', - type1: 'Fire', - type2: '', - color: 'Yellow', - ability1: 'Run Away', - ability2: 'Flash Fire', - 'ability hidden': 'Flame Body', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 30, - hp: 50, - atk: 85, - def: 55, - sp_atk: 65, - sp_def: 65, - spd: 90, - total: 410, - }, - { - number: 77, - code: 2, - serial: 772, - name: 'Ponyta', - type1: 'Psychic', - type2: '', - color: 'White', - ability1: 'Run Away', - ability2: 'Pastel Veil', - 'ability hidden': 'Anticipation', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 24, - hp: 50, - atk: 85, - def: 55, - sp_atk: 65, - sp_def: 65, - spd: 90, - total: 410, - }, - { - number: 78, - code: 1, - serial: 781, - name: 'Rapidash', - type1: 'Fire', - type2: '', - color: 'Yellow', - ability1: 'Run Away', - ability2: 'Flash Fire', - 'ability hidden': 'Flame Body', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 95, - hp: 65, - atk: 100, - def: 70, - sp_atk: 80, - sp_def: 80, - spd: 105, - total: 500, - }, - { - number: 78, - code: 2, - serial: 782, - name: 'Rapidash', - type1: 'Psychic', - type2: 'Fairy', - color: 'White', - ability1: 'Run Away', - ability2: 'Pastel Veil', - 'ability hidden': 'Anticipation', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 80, - hp: 65, - atk: 100, - def: 70, - sp_atk: 80, - sp_def: 80, - spd: 105, - total: 500, - }, - { - number: 79, - code: 1, - serial: 791, - name: 'Slowpoke', - type1: 'Water', - type2: 'Psychic', - color: 'Pink', - ability1: 'Oblivious', - ability2: 'Own Tempo', - 'ability hidden': 'Regenerator', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 36, - hp: 90, - atk: 65, - def: 65, - sp_atk: 40, - sp_def: 40, - spd: 15, - total: 315, - }, - { - number: 79, - code: 2, - serial: 792, - name: 'Slowpoke', - type1: 'Psychic', - type2: '', - color: 'Pink', - ability1: 'Gluttony', - ability2: 'Own Tempo', - 'ability hidden': 'Regenerator', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 36, - hp: 90, - atk: 65, - def: 65, - sp_atk: 40, - sp_def: 40, - spd: 15, - total: 315, - }, - { - number: 80, - code: 1, - serial: 801, - name: 'Slowbro', - type1: 'Water', - type2: 'Psychic', - color: 'Pink', - ability1: 'Oblivious', - ability2: 'Own Tempo', - 'ability hidden': 'Regenerator', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 78.5, - hp: 95, - atk: 75, - def: 110, - sp_atk: 100, - sp_def: 80, - spd: 30, - total: 490, - }, - { - number: 80, - code: 2, - serial: 802, - name: 'Slowbro', - type1: 'Poison', - type2: 'Psychic', - color: 'Pink', - ability1: 'Quick Draw', - ability2: 'Own Tempo', - 'ability hidden': 'Regenerator', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 70.5, - hp: 95, - atk: 100, - def: 95, - sp_atk: 100, - sp_def: 70, - spd: 30, - total: 490, - }, - { - number: 80, - code: 3, - serial: 803, - name: 'Mega Slowbro', - type1: 'Water', - type2: 'Psychic', - color: 'Pink', - ability1: 'Shell Armor', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 2, - weight: 120, - hp: 95, - atk: 75, - def: 180, - sp_atk: 130, - sp_def: 80, - spd: 30, - total: 590, - }, - { - number: 81, - code: 1, - serial: 811, - name: 'Magnemite', - type1: 'Electric', - type2: 'Steel', - color: 'Grey', - ability1: 'Magnet Pull', - ability2: 'Sturdy', - 'ability hidden': 'Analytic', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 6, - hp: 25, - atk: 35, - def: 70, - sp_atk: 95, - sp_def: 55, - spd: 45, - total: 325, - }, - { - number: 82, - code: 1, - serial: 821, - name: 'Magneton', - type1: 'Electric', - type2: 'Steel', - color: 'Grey', - ability1: 'Magnet Pull', - ability2: 'Sturdy', - 'ability hidden': 'Analytic', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 60, - hp: 50, - atk: 60, - def: 95, - sp_atk: 120, - sp_def: 70, - spd: 70, - total: 465, - }, - { - number: 83, - code: 1, - serial: 831, - name: "Farfetch'd", - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Keen Eye', - ability2: 'Inner Focus', - 'ability hidden': 'Defiant', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 15, - hp: 52, - atk: 90, - def: 55, - sp_atk: 58, - sp_def: 62, - spd: 60, - total: 377, - }, - { - number: 83, - code: 2, - serial: 832, - name: "Farfetch'd", - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Steadfast', - ability2: '', - 'ability hidden': 'Scrappy', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 42, - hp: 52, - atk: 95, - def: 55, - sp_atk: 58, - sp_def: 62, - spd: 55, - total: 377, - }, - { - number: 84, - code: 1, - serial: 841, - name: 'Doduo', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Early Bird', - 'ability hidden': 'Tangled Feet', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 39.2, - hp: 35, - atk: 85, - def: 45, - sp_atk: 35, - sp_def: 35, - spd: 75, - total: 310, - }, - { - number: 85, - code: 1, - serial: 851, - name: 'Dodrio', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Early Bird', - 'ability hidden': 'Tangled Feet', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 85.2, - hp: 60, - atk: 110, - def: 70, - sp_atk: 60, - sp_def: 60, - spd: 110, - total: 470, - }, - { - number: 86, - code: 1, - serial: 861, - name: 'Seel', - type1: 'Water', - type2: '', - color: 'White', - ability1: 'Thick Fat', - ability2: 'Hydration', - 'ability hidden': 'Ice Body', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 90, - hp: 65, - atk: 45, - def: 55, - sp_atk: 45, - sp_def: 70, - spd: 45, - total: 325, - }, - { - number: 87, - code: 1, - serial: 871, - name: 'Dewgong', - type1: 'Water', - type2: 'Ice', - color: 'White', - ability1: 'Thick Fat', - ability2: 'Hydration', - 'ability hidden': 'Ice Body', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 120, - hp: 90, - atk: 70, - def: 80, - sp_atk: 70, - sp_def: 95, - spd: 70, - total: 475, - }, - { - number: 88, - code: 1, - serial: 881, - name: 'Grimer', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Stench', - ability2: 'Sticky Hold', - 'ability hidden': 'Poison Touch', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 30, - hp: 80, - atk: 80, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 25, - total: 325, - }, - { - number: 88, - code: 2, - serial: 882, - name: 'Grimer', - type1: 'Poison', - type2: 'Dark', - color: 'Green', - ability1: 'Poison Touch', - ability2: 'Gluttony', - 'ability hidden': 'Power of Alchemy', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 42, - hp: 80, - atk: 80, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 25, - total: 325, - }, - { - number: 89, - code: 1, - serial: 891, - name: 'Muk', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Stench', - ability2: 'Sticky Hold', - 'ability hidden': 'Poison Touch', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 30, - hp: 105, - atk: 105, - def: 75, - sp_atk: 65, - sp_def: 100, - spd: 50, - total: 500, - }, - { - number: 89, - code: 2, - serial: 892, - name: 'Muk', - type1: 'Poison', - type2: 'Dark', - color: 'Green', - ability1: 'Poison Touch', - ability2: 'Gluttony', - 'ability hidden': 'Power of Alchemy', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 52, - hp: 105, - atk: 105, - def: 75, - sp_atk: 65, - sp_def: 100, - spd: 50, - total: 500, - }, - { - number: 90, - code: 1, - serial: 901, - name: 'Shellder', - type1: 'Water', - type2: '', - color: 'Purple', - ability1: 'Shell Armor', - ability2: 'Skill Link', - 'ability hidden': 'Overcoat', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 4, - hp: 30, - atk: 65, - def: 100, - sp_atk: 45, - sp_def: 25, - spd: 40, - total: 305, - }, - { - number: 91, - code: 1, - serial: 911, - name: 'Cloyster', - type1: 'Water', - type2: 'Ice', - color: 'Purple', - ability1: 'Shell Armor', - ability2: 'Skill Link', - 'ability hidden': 'Overcoat', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 132.5, - hp: 50, - atk: 95, - def: 180, - sp_atk: 85, - sp_def: 45, - spd: 70, - total: 525, - }, - { - number: 92, - code: 1, - serial: 921, - name: 'Gastly', - type1: 'Ghost', - type2: 'Poison', - color: 'Purple', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 0.1, - hp: 30, - atk: 35, - def: 30, - sp_atk: 100, - sp_def: 35, - spd: 80, - total: 310, - }, - { - number: 93, - code: 1, - serial: 931, - name: 'Haunter', - type1: 'Ghost', - type2: 'Poison', - color: 'Purple', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 0.1, - hp: 45, - atk: 50, - def: 45, - sp_atk: 115, - sp_def: 55, - spd: 95, - total: 405, - }, - { - number: 94, - code: 1, - serial: 941, - name: 'Gengar', - type1: 'Ghost', - type2: 'Poison', - color: 'Purple', - ability1: 'Cursed Body', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 40.5, - hp: 60, - atk: 65, - def: 60, - sp_atk: 130, - sp_def: 75, - spd: 110, - total: 500, - }, - { - number: 94, - code: 2, - serial: 942, - name: 'Mega Gengar', - type1: 'Ghost', - type2: 'Poison', - color: 'Purple', - ability1: 'Shadow Tag', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 1.4, - weight: 40.5, - hp: 60, - atk: 65, - def: 80, - sp_atk: 170, - sp_def: 95, - spd: 130, - total: 600, - }, - { - number: 95, - code: 1, - serial: 951, - name: 'Onix', - type1: 'Rock', - type2: 'Ground', - color: 'Grey', - ability1: 'Rock Head', - ability2: 'Sturdy', - 'ability hidden': 'Weak Armor', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 8.8, - weight: 210, - hp: 35, - atk: 45, - def: 160, - sp_atk: 30, - sp_def: 45, - spd: 70, - total: 385, - }, - { - number: 96, - code: 1, - serial: 961, - name: 'Drowzee', - type1: 'Psychic', - type2: '', - color: 'Yellow', - ability1: 'Insomnia', - ability2: 'Forewarn', - 'ability hidden': 'Inner Focus', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 32.4, - hp: 60, - atk: 48, - def: 45, - sp_atk: 43, - sp_def: 90, - spd: 42, - total: 328, - }, - { - number: 97, - code: 1, - serial: 971, - name: 'Hypno', - type1: 'Psychic', - type2: '', - color: 'Yellow', - ability1: 'Insomnia', - ability2: 'Forewarn', - 'ability hidden': 'Inner Focus', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 75.6, - hp: 85, - atk: 73, - def: 70, - sp_atk: 73, - sp_def: 115, - spd: 67, - total: 483, - }, - { - number: 98, - code: 1, - serial: 981, - name: 'Krabby', - type1: 'Water', - type2: '', - color: 'Red', - ability1: 'Hyper Cutter', - ability2: 'Shell Armor', - 'ability hidden': 'Sheer Force', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 6.5, - hp: 30, - atk: 105, - def: 90, - sp_atk: 25, - sp_def: 25, - spd: 50, - total: 325, - }, - { - number: 99, - code: 1, - serial: 991, - name: 'Kingler', - type1: 'Water', - type2: '', - color: 'Red', - ability1: 'Hyper Cutter', - ability2: 'Shell Armor', - 'ability hidden': 'Sheer Force', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 60, - hp: 55, - atk: 130, - def: 115, - sp_atk: 50, - sp_def: 50, - spd: 75, - total: 475, - }, - { - number: 100, - code: 1, - serial: 1001, - name: 'Voltorb', - type1: 'Electric', - type2: '', - color: 'Red', - ability1: 'Soundproof', - ability2: 'Static', - 'ability hidden': 'Aftermath', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 10.4, - hp: 40, - atk: 30, - def: 50, - sp_atk: 55, - sp_def: 55, - spd: 100, - total: 330, - }, - { - number: 101, - code: 1, - serial: 1011, - name: 'Electrode', - type1: 'Electric', - type2: '', - color: 'Red', - ability1: 'Soundproof', - ability2: 'Static', - 'ability hidden': 'Aftermath', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 66.6, - hp: 60, - atk: 50, - def: 70, - sp_atk: 80, - sp_def: 80, - spd: 150, - total: 490, - }, - { - number: 102, - code: 1, - serial: 1021, - name: 'Exeggcute', - type1: 'Grass', - type2: 'Psychic', - color: 'Pink', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Harvest', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 2.5, - hp: 60, - atk: 40, - def: 80, - sp_atk: 60, - sp_def: 45, - spd: 40, - total: 325, - }, - { - number: 103, - code: 1, - serial: 1031, - name: 'Exeggutor', - type1: 'Grass', - type2: 'Psychic', - color: 'Yellow', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Harvest', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 120, - hp: 95, - atk: 95, - def: 85, - sp_atk: 125, - sp_def: 75, - spd: 55, - total: 530, - }, - { - number: 103, - code: 2, - serial: 1032, - name: 'Exeggutor', - type1: 'Grass', - type2: 'Dragon', - color: 'Yellow', - ability1: 'Frisk', - ability2: '', - 'ability hidden': 'Harvest', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 10.9, - weight: 415.6, - hp: 95, - atk: 105, - def: 85, - sp_atk: 125, - sp_def: 75, - spd: 45, - total: 530, - }, - { - number: 104, - code: 1, - serial: 1041, - name: 'Cubone', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Rock Head', - ability2: 'Lightning Rod', - 'ability hidden': 'Battle Armor', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 6.5, - hp: 50, - atk: 50, - def: 95, - sp_atk: 40, - sp_def: 50, - spd: 35, - total: 320, - }, - { - number: 105, - code: 1, - serial: 1051, - name: 'Marowak', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Rock Head', - ability2: 'Lightning Rod', - 'ability hidden': 'Battle Armor', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 45, - hp: 60, - atk: 80, - def: 110, - sp_atk: 50, - sp_def: 80, - spd: 45, - total: 425, - }, - { - number: 105, - code: 2, - serial: 1052, - name: 'Marowak', - type1: 'Fire', - type2: 'Ghost', - color: 'Purple', - ability1: 'Cursed Body', - ability2: 'Lightning Rod', - 'ability hidden': 'Rock Head', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 34, - hp: 60, - atk: 80, - def: 110, - sp_atk: 50, - sp_def: 80, - spd: 45, - total: 425, - }, - { - number: 106, - code: 1, - serial: 1061, - name: 'Hitmonlee', - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Limber', - ability2: 'Reckless', - 'ability hidden': 'Unburden', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 49.8, - hp: 50, - atk: 120, - def: 53, - sp_atk: 35, - sp_def: 110, - spd: 87, - total: 455, - }, - { - number: 107, - code: 1, - serial: 1071, - name: 'Hitmonchan', - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Keen Eye', - ability2: 'Iron Fist', - 'ability hidden': 'Inner Focus', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 50.2, - hp: 50, - atk: 105, - def: 79, - sp_atk: 35, - sp_def: 110, - spd: 76, - total: 455, - }, - { - number: 108, - code: 1, - serial: 1081, - name: 'Lickitung', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Own Tempo', - ability2: 'Oblivious', - 'ability hidden': 'Cloud Nine', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 65.5, - hp: 90, - atk: 55, - def: 75, - sp_atk: 60, - sp_def: 75, - spd: 30, - total: 385, - }, - { - number: 109, - code: 1, - serial: 1091, - name: 'Koffing', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Levitate', - ability2: 'Neutralizing Gas', - 'ability hidden': 'Stench', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 1, - hp: 40, - atk: 65, - def: 95, - sp_atk: 60, - sp_def: 45, - spd: 35, - total: 340, - }, - { - number: 110, - code: 1, - serial: 1101, - name: 'Weezing', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Levitate', - ability2: 'Neutralizing Gas', - 'ability hidden': 'Stench', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 9.5, - hp: 65, - atk: 90, - def: 120, - sp_atk: 85, - sp_def: 70, - spd: 60, - total: 490, - }, - { - number: 110, - code: 2, - serial: 1102, - name: 'Weezing', - type1: 'Poison', - type2: 'Fairy', - color: 'Grey', - ability1: 'Levitate', - ability2: 'Neutralizing Gas', - 'ability hidden': 'Misty Surge', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 3, - weight: 16, - hp: 65, - atk: 90, - def: 120, - sp_atk: 85, - sp_def: 70, - spd: 60, - total: 490, - }, - { - number: 111, - code: 1, - serial: 1111, - name: 'Rhyhorn', - type1: 'Ground', - type2: 'Rock', - color: 'Grey', - ability1: 'Lightning Rod', - ability2: 'Rock Head', - 'ability hidden': 'Reckless', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 115, - hp: 80, - atk: 85, - def: 95, - sp_atk: 30, - sp_def: 30, - spd: 25, - total: 345, - }, - { - number: 112, - code: 1, - serial: 1121, - name: 'Rhydon', - type1: 'Ground', - type2: 'Rock', - color: 'Grey', - ability1: 'Lightning Rod', - ability2: 'Rock Head', - 'ability hidden': 'Reckless', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 120, - hp: 105, - atk: 130, - def: 120, - sp_atk: 45, - sp_def: 45, - spd: 40, - total: 485, - }, - { - number: 113, - code: 1, - serial: 1131, - name: 'Chansey', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Natural Cure', - ability2: 'Serene Grace', - 'ability hidden': 'Healer', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 34.6, - hp: 250, - atk: 5, - def: 5, - sp_atk: 35, - sp_def: 105, - spd: 50, - total: 450, - }, - { - number: 114, - code: 1, - serial: 1141, - name: 'Tangela', - type1: 'Grass', - type2: '', - color: 'Blue', - ability1: 'Chlorophyll', - ability2: 'Leaf Guard', - 'ability hidden': 'Regenerator', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 35, - hp: 65, - atk: 55, - def: 115, - sp_atk: 100, - sp_def: 40, - spd: 60, - total: 435, - }, - { - number: 115, - code: 1, - serial: 1151, - name: 'Kangaskhan', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Early Bird', - ability2: 'Scrappy', - 'ability hidden': 'Inner Focus', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 2.2, - weight: 80, - hp: 105, - atk: 95, - def: 80, - sp_atk: 40, - sp_def: 80, - spd: 90, - total: 490, - }, - { - number: 115, - code: 2, - serial: 1152, - name: 'Mega Kangaskhan', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Parental Bond', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 2.2, - weight: 100, - hp: 105, - atk: 125, - def: 100, - sp_atk: 60, - sp_def: 100, - spd: 100, - total: 590, - }, - { - number: 116, - code: 1, - serial: 1161, - name: 'Horsea', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Sniper', - 'ability hidden': 'Damp', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 8, - hp: 30, - atk: 40, - def: 70, - sp_atk: 70, - sp_def: 25, - spd: 60, - total: 295, - }, - { - number: 117, - code: 1, - serial: 1171, - name: 'Seadra', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Poison Point', - ability2: 'Sniper', - 'ability hidden': 'Damp', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 25, - hp: 55, - atk: 65, - def: 95, - sp_atk: 95, - sp_def: 45, - spd: 85, - total: 440, - }, - { - number: 118, - code: 1, - serial: 1181, - name: 'Goldeen', - type1: 'Water', - type2: '', - color: 'Red', - ability1: 'Swift Swim', - ability2: 'Water Veil', - 'ability hidden': 'Lightning Rod', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 15, - hp: 45, - atk: 67, - def: 60, - sp_atk: 35, - sp_def: 50, - spd: 63, - total: 320, - }, - { - number: 119, - code: 1, - serial: 1191, - name: 'Seaking', - type1: 'Water', - type2: '', - color: 'Red', - ability1: 'Swift Swim', - ability2: 'Water Veil', - 'ability hidden': 'Lightning Rod', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 39, - hp: 80, - atk: 92, - def: 65, - sp_atk: 65, - sp_def: 80, - spd: 68, - total: 450, - }, - { - number: 120, - code: 1, - serial: 1201, - name: 'Staryu', - type1: 'Water', - type2: '', - color: 'Brown', - ability1: 'Illuminate', - ability2: 'Natural Cure', - 'ability hidden': 'Analytic', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 34.5, - hp: 30, - atk: 45, - def: 55, - sp_atk: 70, - sp_def: 55, - spd: 85, - total: 340, - }, - { - number: 121, - code: 1, - serial: 1211, - name: 'Starmie', - type1: 'Water', - type2: 'Psychic', - color: 'Purple', - ability1: 'Illuminate', - ability2: 'Natural Cure', - 'ability hidden': 'Analytic', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 80, - hp: 60, - atk: 75, - def: 85, - sp_atk: 100, - sp_def: 85, - spd: 115, - total: 520, - }, - { - number: 122, - code: 1, - serial: 1221, - name: 'Mr. Mime', - type1: 'Psychic', - type2: 'Fairy', - color: 'Pink', - ability1: 'Soundproof', - ability2: 'Filter', - 'ability hidden': 'Technician', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 54.5, - hp: 40, - atk: 45, - def: 65, - sp_atk: 100, - sp_def: 120, - spd: 90, - total: 460, - }, - { - number: 122, - code: 2, - serial: 1222, - name: 'Mr. Mime', - type1: 'Psychic', - type2: 'Ice', - color: 'White', - ability1: 'Vital Spilit', - ability2: 'Screen Cleaner', - 'ability hidden': 'Ice Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 56.8, - hp: 50, - atk: 65, - def: 65, - sp_atk: 90, - sp_def: 90, - spd: 100, - total: 460, - }, - { - number: 123, - code: 1, - serial: 1231, - name: 'Scyther', - type1: 'Bug', - type2: 'Flying', - color: 'Green', - ability1: 'Swarm', - ability2: 'Technician', - 'ability hidden': 'Steadfast', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 56, - hp: 70, - atk: 110, - def: 80, - sp_atk: 55, - sp_def: 80, - spd: 105, - total: 500, - }, - { - number: 124, - code: 1, - serial: 1241, - name: 'Jynx', - type1: 'Ice', - type2: 'Psychic', - color: 'Red', - ability1: 'Oblivious', - ability2: 'Forewarn', - 'ability hidden': 'Dry Skin', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 40.6, - hp: 65, - atk: 50, - def: 35, - sp_atk: 115, - sp_def: 95, - spd: 95, - total: 455, - }, - { - number: 125, - code: 1, - serial: 1251, - name: 'Electabuzz', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Vital Spilit', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 30, - hp: 65, - atk: 83, - def: 57, - sp_atk: 95, - sp_def: 85, - spd: 105, - total: 490, - }, - { - number: 126, - code: 1, - serial: 1261, - name: 'Magmar', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Flame Body', - ability2: '', - 'ability hidden': 'Vital Spilit', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 44.5, - hp: 65, - atk: 95, - def: 57, - sp_atk: 100, - sp_def: 85, - spd: 93, - total: 495, - }, - { - number: 127, - code: 1, - serial: 1271, - name: 'Pinsir', - type1: 'Bug', - type2: '', - color: 'Brown', - ability1: 'Hyper Cutter', - ability2: 'Mold Breaker', - 'ability hidden': 'Moxie', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 55, - hp: 65, - atk: 125, - def: 100, - sp_atk: 55, - sp_def: 70, - spd: 85, - total: 500, - }, - { - number: 127, - code: 2, - serial: 1272, - name: 'Mega Pinsir', - type1: 'Bug', - type2: 'Flying', - color: 'Brown', - ability1: 'Aerilate', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 1.7, - weight: 59, - hp: 65, - atk: 155, - def: 120, - sp_atk: 65, - sp_def: 90, - spd: 105, - total: 600, - }, - { - number: 128, - code: 1, - serial: 1281, - name: 'Tauros', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Intimidate', - ability2: 'Anger Point', - 'ability hidden': 'Sheer Force', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 88.4, - hp: 75, - atk: 100, - def: 95, - sp_atk: 40, - sp_def: 70, - spd: 110, - total: 490, - }, - { - number: 129, - code: 1, - serial: 1291, - name: 'Magikarp', - type1: 'Water', - type2: '', - color: 'Red', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Rattled', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 10, - hp: 20, - atk: 10, - def: 55, - sp_atk: 15, - sp_def: 20, - spd: 80, - total: 200, - }, - { - number: 130, - code: 1, - serial: 1301, - name: 'Gyarados', - type1: 'Water', - type2: 'Flying', - color: 'Blue', - ability1: 'Intimidate', - ability2: '', - 'ability hidden': 'Moxie', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 6.5, - weight: 235, - hp: 95, - atk: 125, - def: 79, - sp_atk: 60, - sp_def: 100, - spd: 81, - total: 540, - }, - { - number: 130, - code: 2, - serial: 1302, - name: 'Mega Gyarados', - type1: 'Water', - type2: 'Dark', - color: 'Blue', - ability1: 'Mold Breaker', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 6.5, - weight: 305, - hp: 95, - atk: 155, - def: 109, - sp_atk: 70, - sp_def: 130, - spd: 81, - total: 640, - }, - { - number: 131, - code: 1, - serial: 1311, - name: 'Lapras', - type1: 'Water', - type2: 'Ice', - color: 'Blue', - ability1: 'Water Absorb', - ability2: 'Shell Armor', - 'ability hidden': 'Hydration', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 2.5, - weight: 220, - hp: 130, - atk: 85, - def: 80, - sp_atk: 85, - sp_def: 95, - spd: 60, - total: 535, - }, - { - number: 132, - code: 1, - serial: 1321, - name: 'Ditto', - type1: 'Normal', - type2: '', - color: 'Purple', - ability1: 'Limber', - ability2: '', - 'ability hidden': 'Imposter', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 4, - hp: 48, - atk: 48, - def: 48, - sp_atk: 48, - sp_def: 48, - spd: 48, - total: 288, - }, - { - number: 133, - code: 1, - serial: 1331, - name: 'Eevee', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Adaptability', - 'ability hidden': 'Anticipation', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 6.5, - hp: 55, - atk: 55, - def: 50, - sp_atk: 45, - sp_def: 65, - spd: 55, - total: 325, - }, - { - number: 134, - code: 1, - serial: 1341, - name: 'Vaporeon', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Water Absorb', - ability2: '', - 'ability hidden': 'Hydration', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 29, - hp: 130, - atk: 65, - def: 60, - sp_atk: 110, - sp_def: 95, - spd: 65, - total: 525, - }, - { - number: 135, - code: 1, - serial: 1351, - name: 'Jolteon', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Volt Absorb', - ability2: '', - 'ability hidden': 'Quick Feet', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 24.5, - hp: 65, - atk: 65, - def: 60, - sp_atk: 110, - sp_def: 95, - spd: 130, - total: 525, - }, - { - number: 136, - code: 1, - serial: 1361, - name: 'Flareon', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Flash Fire', - ability2: '', - 'ability hidden': 'Guts', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 25, - hp: 65, - atk: 130, - def: 60, - sp_atk: 95, - sp_def: 110, - spd: 65, - total: 525, - }, - { - number: 137, - code: 1, - serial: 1371, - name: 'Porygon', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Trace', - ability2: 'Download', - 'ability hidden': 'Analytic', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 36.5, - hp: 65, - atk: 60, - def: 70, - sp_atk: 85, - sp_def: 75, - spd: 40, - total: 395, - }, - { - number: 138, - code: 1, - serial: 1381, - name: 'Omanyte', - type1: 'Rock', - type2: 'Water', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Shell Armor', - 'ability hidden': 'Weak Armor', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 7.5, - hp: 35, - atk: 40, - def: 100, - sp_atk: 90, - sp_def: 55, - spd: 35, - total: 355, - }, - { - number: 139, - code: 1, - serial: 1391, - name: 'Omastar', - type1: 'Rock', - type2: 'Water', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Shell Armor', - 'ability hidden': 'Weak Armor', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 35, - hp: 70, - atk: 60, - def: 125, - sp_atk: 115, - sp_def: 70, - spd: 55, - total: 495, - }, - { - number: 140, - code: 1, - serial: 1401, - name: 'Kabuto', - type1: 'Rock', - type2: 'Water', - color: 'Brown', - ability1: 'Swift Swim', - ability2: 'Battle Armor', - 'ability hidden': 'Weak Armor', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 11.5, - hp: 30, - atk: 80, - def: 90, - sp_atk: 55, - sp_def: 45, - spd: 55, - total: 355, - }, - { - number: 141, - code: 1, - serial: 1411, - name: 'Kabutops', - type1: 'Rock', - type2: 'Water', - color: 'Brown', - ability1: 'Swift Swim', - ability2: 'Battle Armor', - 'ability hidden': 'Weak Armor', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 40.5, - hp: 60, - atk: 115, - def: 105, - sp_atk: 65, - sp_def: 70, - spd: 80, - total: 495, - }, - { - number: 142, - code: 1, - serial: 1421, - name: 'Aerodactyl', - type1: 'Rock', - type2: 'Flying', - color: 'Purple', - ability1: 'Rock Head', - ability2: 'Pressure', - 'ability hidden': 'Unnerve', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 59, - hp: 80, - atk: 105, - def: 65, - sp_atk: 60, - sp_def: 75, - spd: 130, - total: 515, - }, - { - number: 142, - code: 2, - serial: 1422, - name: 'Mega Aerodactyl', - type1: 'Rock', - type2: 'Flying', - color: 'Purple', - ability1: 'Tough Claws', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 0, - mega_evolution: 1, - height: 2.1, - weight: 79, - hp: 80, - atk: 135, - def: 85, - sp_atk: 70, - sp_def: 95, - spd: 150, - total: 615, - }, - { - number: 143, - code: 1, - serial: 1431, - name: 'Snorlax', - type1: 'Normal', - type2: '', - color: 'Black', - ability1: 'Immunity', - ability2: 'Thick Fat', - 'ability hidden': 'Gluttony', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 2.1, - weight: 460, - hp: 160, - atk: 110, - def: 65, - sp_atk: 65, - sp_def: 110, - spd: 30, - total: 540, - }, - { - number: 144, - code: 1, - serial: 1441, - name: 'Articuno', - type1: 'Ice', - type2: 'Flying', - color: 'Blue', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Snow Cloak', - generation: 1, - legendary: 1, - mega_evolution: 0, - height: 1.7, - weight: 55.4, - hp: 90, - atk: 85, - def: 100, - sp_atk: 95, - sp_def: 125, - spd: 85, - total: 580, - }, - { - number: 145, - code: 1, - serial: 1451, - name: 'Zapdos', - type1: 'Electric', - type2: 'Flying', - color: 'Yellow', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Static', - generation: 1, - legendary: 1, - mega_evolution: 0, - height: 1.6, - weight: 52.6, - hp: 90, - atk: 90, - def: 85, - sp_atk: 125, - sp_def: 90, - spd: 100, - total: 580, - }, - { - number: 146, - code: 1, - serial: 1461, - name: 'Moltres', - type1: 'Fire', - type2: 'Flying', - color: 'Yellow', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Flame Body', - generation: 1, - legendary: 1, - mega_evolution: 0, - height: 2, - weight: 60, - hp: 90, - atk: 100, - def: 90, - sp_atk: 125, - sp_def: 85, - spd: 90, - total: 580, - }, - { - number: 147, - code: 1, - serial: 1471, - name: 'Dratini', - type1: 'Dragon', - type2: '', - color: 'Blue', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': 'Marvel Scale', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 3.3, - hp: 41, - atk: 64, - def: 45, - sp_atk: 50, - sp_def: 50, - spd: 50, - total: 300, - }, - { - number: 148, - code: 1, - serial: 1481, - name: 'Dragonair', - type1: 'Dragon', - type2: '', - color: 'Blue', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': 'Marvel Scale', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 4, - weight: 16.5, - hp: 61, - atk: 84, - def: 65, - sp_atk: 70, - sp_def: 70, - spd: 70, - total: 420, - }, - { - number: 149, - code: 1, - serial: 1491, - name: 'Dragonite', - type1: 'Dragon', - type2: 'Flying', - color: 'Brown', - ability1: 'Inner Focus', - ability2: '', - 'ability hidden': 'Multiscale', - generation: 1, - legendary: 0, - mega_evolution: 0, - height: 2.2, - weight: 210, - hp: 91, - atk: 134, - def: 95, - sp_atk: 100, - sp_def: 100, - spd: 80, - total: 600, - }, - { - number: 150, - code: 1, - serial: 1501, - name: 'Mewtwo', - type1: 'Psychic', - type2: '', - color: 'Purple', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Unnerve', - generation: 1, - legendary: 1, - mega_evolution: 0, - height: 2, - weight: 122, - hp: 106, - atk: 110, - def: 90, - sp_atk: 154, - sp_def: 90, - spd: 130, - total: 680, - }, - { - number: 150, - code: 2, - serial: 1502, - name: 'Mega Mewtwo X', - type1: 'Psychic', - type2: 'Fighting', - color: 'Purple', - ability1: 'Steadfast', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 1, - mega_evolution: 1, - height: 2.3, - weight: 127, - hp: 106, - atk: 190, - def: 100, - sp_atk: 154, - sp_def: 100, - spd: 130, - total: 780, - }, - { - number: 150, - code: 3, - serial: 1503, - name: 'Mega Mewtwo Y', - type1: 'Psychic', - type2: '', - color: 'Purple', - ability1: 'Insomnia', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 1, - mega_evolution: 1, - height: 1.5, - weight: 33, - hp: 106, - atk: 150, - def: 70, - sp_atk: 194, - sp_def: 120, - spd: 140, - total: 780, - }, - { - number: 151, - code: 1, - serial: 1511, - name: 'Mew', - type1: 'Psychic', - type2: '', - color: 'Pink', - ability1: 'Synchronize', - ability2: '', - 'ability hidden': '', - generation: 1, - legendary: 1, - mega_evolution: 0, - height: 0.4, - weight: 4, - hp: 100, - atk: 100, - def: 100, - sp_atk: 100, - sp_def: 100, - spd: 100, - total: 600, - }, - { - number: 152, - code: 1, - serial: 1521, - name: 'Chikorita', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Leaf guard', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 6.4, - hp: 45, - atk: 49, - def: 65, - sp_atk: 49, - sp_def: 65, - spd: 45, - total: 318, - }, - { - number: 153, - code: 1, - serial: 1531, - name: 'Bayleef', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Leaf guard', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 15.8, - hp: 60, - atk: 62, - def: 80, - sp_atk: 63, - sp_def: 80, - spd: 60, - total: 405, - }, - { - number: 154, - code: 1, - serial: 1541, - name: 'Meganium', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Leaf guard', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 100.5, - hp: 80, - atk: 82, - def: 100, - sp_atk: 83, - sp_def: 100, - spd: 80, - total: 525, - }, - { - number: 155, - code: 1, - serial: 1551, - name: 'Cyndaquil', - type1: 'Fire', - type2: '', - color: 'Yellow', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Flash Fire', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 7.9, - hp: 39, - atk: 52, - def: 43, - sp_atk: 60, - sp_def: 50, - spd: 65, - total: 309, - }, - { - number: 156, - code: 1, - serial: 1561, - name: 'Quilava', - type1: 'Fire', - type2: '', - color: 'Yellow', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Flash Fire', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 19, - hp: 58, - atk: 64, - def: 58, - sp_atk: 80, - sp_def: 65, - spd: 80, - total: 405, - }, - { - number: 157, - code: 1, - serial: 1571, - name: 'Typhlosion', - type1: 'Fire', - type2: '', - color: 'Yellow', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Flash Fire', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 79.5, - hp: 78, - atk: 84, - def: 78, - sp_atk: 109, - sp_def: 85, - spd: 100, - total: 534, - }, - { - number: 158, - code: 1, - serial: 1581, - name: 'Totodile', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Sheer Force', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 9.5, - hp: 50, - atk: 65, - def: 64, - sp_atk: 44, - sp_def: 48, - spd: 43, - total: 314, - }, - { - number: 159, - code: 1, - serial: 1591, - name: 'Croconaw', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Sheer Force', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 25, - hp: 65, - atk: 80, - def: 80, - sp_atk: 59, - sp_def: 63, - spd: 58, - total: 405, - }, - { - number: 160, - code: 1, - serial: 1601, - name: 'Feraligatr', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Sheer Force', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 2.3, - weight: 88.8, - hp: 85, - atk: 105, - def: 100, - sp_atk: 79, - sp_def: 83, - spd: 78, - total: 530, - }, - { - number: 161, - code: 1, - serial: 1611, - name: 'Sentret', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Keen Eye', - 'ability hidden': 'Frisk', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 6, - hp: 35, - atk: 46, - def: 34, - sp_atk: 35, - sp_def: 45, - spd: 20, - total: 215, - }, - { - number: 162, - code: 1, - serial: 1621, - name: 'Furret', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Keen Eye', - 'ability hidden': 'Frisk', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 32.5, - hp: 85, - atk: 76, - def: 64, - sp_atk: 45, - sp_def: 55, - spd: 90, - total: 415, - }, - { - number: 163, - code: 1, - serial: 1631, - name: 'Hoothoot', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Insomnia', - ability2: 'Keen Eye', - 'ability hidden': 'Tinted Lens', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 21.2, - hp: 60, - atk: 30, - def: 30, - sp_atk: 36, - sp_def: 56, - spd: 50, - total: 262, - }, - { - number: 164, - code: 1, - serial: 1641, - name: 'Noctowl', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Insomnia', - ability2: 'Keen Eye', - 'ability hidden': 'Tinted Lens', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 40.8, - hp: 100, - atk: 50, - def: 50, - sp_atk: 86, - sp_def: 96, - spd: 70, - total: 452, - }, - { - number: 165, - code: 1, - serial: 1651, - name: 'Ledyba', - type1: 'Bug', - type2: 'Flying', - color: 'Red', - ability1: 'Swarm', - ability2: 'Early Bird', - 'ability hidden': 'Rattled', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 10.8, - hp: 40, - atk: 20, - def: 30, - sp_atk: 40, - sp_def: 80, - spd: 55, - total: 265, - }, - { - number: 166, - code: 1, - serial: 1661, - name: 'Ledian', - type1: 'Bug', - type2: 'Flying', - color: 'Red', - ability1: 'Swarm', - ability2: 'Early Bird', - 'ability hidden': 'Iron Fist', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 35.6, - hp: 55, - atk: 35, - def: 50, - sp_atk: 55, - sp_def: 110, - spd: 85, - total: 390, - }, - { - number: 167, - code: 1, - serial: 1671, - name: 'Spinarak', - type1: 'Bug', - type2: 'Poison', - color: 'Green', - ability1: 'Swarm', - ability2: 'Insomnia', - 'ability hidden': 'Sniper', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 8.5, - hp: 40, - atk: 60, - def: 40, - sp_atk: 40, - sp_def: 40, - spd: 30, - total: 250, - }, - { - number: 168, - code: 1, - serial: 1681, - name: 'Ariados', - type1: 'Bug', - type2: 'Poison', - color: 'Red', - ability1: 'Swarm', - ability2: 'Insomnia', - 'ability hidden': 'Sniper', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 33.5, - hp: 70, - atk: 90, - def: 70, - sp_atk: 60, - sp_def: 70, - spd: 40, - total: 400, - }, - { - number: 169, - code: 1, - serial: 1691, - name: 'Crobat', - type1: 'Poison', - type2: 'Flying', - color: 'Purple', - ability1: 'Inner Focus', - ability2: '', - 'ability hidden': 'Infiltrator', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 75, - hp: 85, - atk: 90, - def: 80, - sp_atk: 70, - sp_def: 80, - spd: 130, - total: 535, - }, - { - number: 170, - code: 1, - serial: 1701, - name: 'Chinchou', - type1: 'Water', - type2: 'Electric', - color: 'Blue', - ability1: 'Volt Absorb', - ability2: 'Illuminate', - 'ability hidden': 'Water Absorb', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 12, - hp: 75, - atk: 38, - def: 38, - sp_atk: 56, - sp_def: 56, - spd: 67, - total: 330, - }, - { - number: 171, - code: 1, - serial: 1711, - name: 'Lanturn', - type1: 'Water', - type2: 'Electric', - color: 'Blue', - ability1: 'Volt Absorb', - ability2: 'Illuminate', - 'ability hidden': 'Water Absorb', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 22.5, - hp: 125, - atk: 58, - def: 58, - sp_atk: 76, - sp_def: 76, - spd: 67, - total: 460, - }, - { - number: 172, - code: 1, - serial: 1721, - name: 'Pichu', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Lightning Rod', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2, - hp: 20, - atk: 40, - def: 15, - sp_atk: 35, - sp_def: 35, - spd: 60, - total: 205, - }, - { - number: 173, - code: 1, - serial: 1731, - name: 'Cleffa', - type1: 'Fairy', - type2: '', - color: 'Pink', - ability1: 'Cute Charm', - ability2: 'Magic Guard', - 'ability hidden': 'Friend Guard', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3, - hp: 50, - atk: 25, - def: 28, - sp_atk: 45, - sp_def: 55, - spd: 15, - total: 218, - }, - { - number: 174, - code: 1, - serial: 1741, - name: 'Igglybuff', - type1: 'Normal', - type2: 'Fairy', - color: 'Pink', - ability1: 'Cute Charm', - ability2: 'Competitive', - 'ability hidden': 'Friend Guard', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1, - hp: 90, - atk: 30, - def: 15, - sp_atk: 40, - sp_def: 20, - spd: 15, - total: 210, - }, - { - number: 175, - code: 1, - serial: 1751, - name: 'Togepi', - type1: 'Fairy', - type2: '', - color: 'White', - ability1: 'Hustle', - ability2: 'Serene Grace', - 'ability hidden': 'Super Luck', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1.5, - hp: 35, - atk: 20, - def: 65, - sp_atk: 40, - sp_def: 65, - spd: 20, - total: 245, - }, - { - number: 176, - code: 1, - serial: 1761, - name: 'Togetic', - type1: 'Fairy', - type2: 'Flying', - color: 'White', - ability1: 'Hustle', - ability2: 'Serene Grace', - 'ability hidden': 'Super Luck', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 3.2, - hp: 55, - atk: 40, - def: 85, - sp_atk: 80, - sp_def: 105, - spd: 40, - total: 405, - }, - { - number: 177, - code: 1, - serial: 1771, - name: 'Natu', - type1: 'Psychic', - type2: 'Flying', - color: 'Green', - ability1: 'Synchronize', - ability2: 'Early Bird', - 'ability hidden': 'Magic Bounce', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 2, - hp: 40, - atk: 50, - def: 45, - sp_atk: 70, - sp_def: 45, - spd: 70, - total: 320, - }, - { - number: 178, - code: 1, - serial: 1781, - name: 'Xatu', - type1: 'Psychic', - type2: 'Flying', - color: 'Green', - ability1: 'Synchronize', - ability2: 'Early Bird', - 'ability hidden': 'Magic Bounce', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 15, - hp: 65, - atk: 75, - def: 70, - sp_atk: 95, - sp_def: 70, - spd: 95, - total: 470, - }, - { - number: 179, - code: 1, - serial: 1791, - name: 'Mareep', - type1: 'Electric', - type2: '', - color: 'White', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Plus', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 7.8, - hp: 55, - atk: 40, - def: 40, - sp_atk: 65, - sp_def: 45, - spd: 35, - total: 280, - }, - { - number: 180, - code: 1, - serial: 1801, - name: 'Flaaffy', - type1: 'Electric', - type2: '', - color: 'Pink', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Plus', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 13.3, - hp: 70, - atk: 55, - def: 55, - sp_atk: 80, - sp_def: 60, - spd: 45, - total: 365, - }, - { - number: 181, - code: 1, - serial: 1811, - name: 'Ampharos', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Plus', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 61.5, - hp: 90, - atk: 75, - def: 85, - sp_atk: 115, - sp_def: 90, - spd: 55, - total: 510, - }, - { - number: 181, - code: 2, - serial: 1812, - name: 'Mega Ampharos', - type1: 'Electric', - type2: 'Dragon', - color: 'Yellow', - ability1: 'Mold Breaker', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 1, - height: 1.4, - weight: 61.5, - hp: 90, - atk: 95, - def: 105, - sp_atk: 165, - sp_def: 110, - spd: 45, - total: 610, - }, - { - number: 182, - code: 1, - serial: 1821, - name: 'Bellossom', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': 'Healer', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5.8, - hp: 75, - atk: 80, - def: 95, - sp_atk: 90, - sp_def: 100, - spd: 50, - total: 490, - }, - { - number: 183, - code: 1, - serial: 1831, - name: 'Marill', - type1: 'Water', - type2: 'Fairy', - color: 'Blue', - ability1: 'Thick Fat', - ability2: 'Huge Power', - 'ability hidden': 'Sap Sipper', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 8.5, - hp: 70, - atk: 20, - def: 50, - sp_atk: 20, - sp_def: 50, - spd: 40, - total: 250, - }, - { - number: 184, - code: 1, - serial: 1841, - name: 'Azumarill', - type1: 'Water', - type2: 'Fairy', - color: 'Blue', - ability1: 'Thick Fat', - ability2: 'Huge Power', - 'ability hidden': 'Sap Sipper', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 28.5, - hp: 100, - atk: 50, - def: 80, - sp_atk: 60, - sp_def: 80, - spd: 50, - total: 420, - }, - { - number: 185, - code: 1, - serial: 1851, - name: 'Sudowoodo', - type1: 'Rock', - type2: '', - color: 'Brown', - ability1: 'Sturdy', - ability2: 'Rock Head', - 'ability hidden': 'Rattled', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 38, - hp: 70, - atk: 100, - def: 115, - sp_atk: 30, - sp_def: 65, - spd: 30, - total: 410, - }, - { - number: 186, - code: 1, - serial: 1861, - name: 'Politoed', - type1: 'Water', - type2: '', - color: 'Green', - ability1: 'Water Absorb', - ability2: 'Damp', - 'ability hidden': 'Drizzle', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 33.9, - hp: 90, - atk: 75, - def: 75, - sp_atk: 90, - sp_def: 100, - spd: 70, - total: 500, - }, - { - number: 187, - code: 1, - serial: 1871, - name: 'Hoppip', - type1: 'Grass', - type2: 'Flying', - color: 'Pink', - ability1: 'Chlorophyll', - ability2: 'Leaf Guard', - 'ability hidden': 'Infiltrator', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 0.5, - hp: 35, - atk: 35, - def: 40, - sp_atk: 35, - sp_def: 55, - spd: 50, - total: 250, - }, - { - number: 188, - code: 1, - serial: 1881, - name: 'Skiploom', - type1: 'Grass', - type2: 'Flying', - color: 'Green', - ability1: 'Chlorophyll', - ability2: 'Leaf Guard', - 'ability hidden': 'Infiltrator', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 1, - hp: 55, - atk: 45, - def: 50, - sp_atk: 45, - sp_def: 65, - spd: 80, - total: 340, - }, - { - number: 189, - code: 1, - serial: 1891, - name: 'Jumpluff', - type1: 'Grass', - type2: 'Flying', - color: 'Blue', - ability1: 'Chlorophyll', - ability2: 'Leaf Guard', - 'ability hidden': 'Infiltrator', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 3, - hp: 75, - atk: 55, - def: 70, - sp_atk: 55, - sp_def: 95, - spd: 110, - total: 460, - }, - { - number: 190, - code: 1, - serial: 1901, - name: 'Aipom', - type1: 'Normal', - type2: '', - color: 'Purple', - ability1: 'Run Away', - ability2: 'Pickup', - 'ability hidden': 'Skill Link', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 11.5, - hp: 55, - atk: 70, - def: 55, - sp_atk: 40, - sp_def: 55, - spd: 85, - total: 360, - }, - { - number: 191, - code: 1, - serial: 1911, - name: 'Sunkern', - type1: 'Grass', - type2: '', - color: 'Yellow', - ability1: 'Chlorophyll', - ability2: 'Solar Power', - 'ability hidden': 'Early Bird', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1.8, - hp: 30, - atk: 30, - def: 30, - sp_atk: 30, - sp_def: 30, - spd: 30, - total: 180, - }, - { - number: 192, - code: 1, - serial: 1921, - name: 'Sunflora', - type1: 'Grass', - type2: '', - color: 'Yellow', - ability1: 'Chlorophyll', - ability2: 'Solar Power', - 'ability hidden': 'Early Bird', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 8.5, - hp: 75, - atk: 75, - def: 55, - sp_atk: 105, - sp_def: 85, - spd: 30, - total: 425, - }, - { - number: 193, - code: 1, - serial: 1931, - name: 'Yanma', - type1: 'Bug', - type2: 'Flying', - color: 'Red', - ability1: 'Speed Boost', - ability2: 'Compound Eyes', - 'ability hidden': 'Frisk', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 38, - hp: 65, - atk: 65, - def: 45, - sp_atk: 75, - sp_def: 45, - spd: 95, - total: 390, - }, - { - number: 194, - code: 1, - serial: 1941, - name: 'Wooper', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Damp', - ability2: 'Water Absorb', - 'ability hidden': 'Unaware', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 8.5, - hp: 55, - atk: 45, - def: 45, - sp_atk: 25, - sp_def: 25, - spd: 15, - total: 210, - }, - { - number: 195, - code: 1, - serial: 1951, - name: 'Quagsire', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Damp', - ability2: 'Water Absorb', - 'ability hidden': 'Unaware', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 75, - hp: 95, - atk: 85, - def: 85, - sp_atk: 65, - sp_def: 65, - spd: 35, - total: 430, - }, - { - number: 196, - code: 1, - serial: 1961, - name: 'Espeon', - type1: 'Psychic', - type2: '', - color: 'Purple', - ability1: 'Synchronize', - ability2: '', - 'ability hidden': 'Magic Bounce', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 26.5, - hp: 65, - atk: 65, - def: 60, - sp_atk: 130, - sp_def: 95, - spd: 110, - total: 525, - }, - { - number: 197, - code: 1, - serial: 1971, - name: 'Umbreon', - type1: 'Dark', - type2: '', - color: 'Black', - ability1: 'Synchronize', - ability2: '', - 'ability hidden': 'Inner Focus', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 27, - hp: 95, - atk: 65, - def: 110, - sp_atk: 60, - sp_def: 130, - spd: 65, - total: 525, - }, - { - number: 198, - code: 1, - serial: 1981, - name: 'Murkrow', - type1: 'Dark', - type2: 'Flying', - color: 'Black', - ability1: 'Insomnia', - ability2: 'Super Luck', - 'ability hidden': 'Prankster', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 2.1, - hp: 60, - atk: 85, - def: 42, - sp_atk: 85, - sp_def: 42, - spd: 91, - total: 405, - }, - { - number: 199, - code: 1, - serial: 1991, - name: 'Slowking', - type1: 'Water', - type2: 'Psychic', - color: 'Pink', - ability1: 'Oblivious', - ability2: 'Super Luck', - 'ability hidden': 'Regenerator', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 79.5, - hp: 95, - atk: 75, - def: 80, - sp_atk: 100, - sp_def: 110, - spd: 30, - total: 490, - }, - { - number: 200, - code: 1, - serial: 2001, - name: 'Misdreavus', - type1: 'Ghost', - type2: '', - color: 'Grey', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 1, - hp: 60, - atk: 60, - def: 60, - sp_atk: 85, - sp_def: 85, - spd: 85, - total: 435, - }, - { - number: 201, - code: 1, - serial: 2011, - name: 'Unown', - type1: 'Psychic', - type2: '', - color: 'Black', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 5, - hp: 48, - atk: 72, - def: 48, - sp_atk: 72, - sp_def: 48, - spd: 48, - total: 336, - }, - { - number: 202, - code: 1, - serial: 2021, - name: 'Wobbuffet', - type1: 'Psychic', - type2: '', - color: 'Blue', - ability1: 'Shadow Tag', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 28.5, - hp: 190, - atk: 33, - def: 58, - sp_atk: 33, - sp_def: 58, - spd: 33, - total: 405, - }, - { - number: 203, - code: 1, - serial: 2031, - name: 'Girafarig', - type1: 'Normal', - type2: 'Psychic', - color: 'Yellow', - ability1: 'Inner Focus', - ability2: 'Early Bird', - 'ability hidden': 'Sap Sipper', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 41.5, - hp: 70, - atk: 80, - def: 65, - sp_atk: 90, - sp_def: 65, - spd: 85, - total: 455, - }, - { - number: 204, - code: 1, - serial: 2041, - name: 'Pineco', - type1: 'Bug', - type2: '', - color: 'Grey', - ability1: 'Sturdy', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 7.2, - hp: 50, - atk: 65, - def: 90, - sp_atk: 35, - sp_def: 35, - spd: 15, - total: 290, - }, - { - number: 205, - code: 1, - serial: 2051, - name: 'Forretress', - type1: 'Bug', - type2: 'Steel', - color: 'Purple', - ability1: 'Sturdy', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 125.8, - hp: 75, - atk: 90, - def: 140, - sp_atk: 60, - sp_def: 60, - spd: 40, - total: 465, - }, - { - number: 206, - code: 1, - serial: 2061, - name: 'Dunsparce', - type1: 'Normal', - type2: '', - color: 'Yellow', - ability1: 'Serene Grace', - ability2: 'Run Away', - 'ability hidden': 'Rattled', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 14, - hp: 100, - atk: 70, - def: 70, - sp_atk: 65, - sp_def: 65, - spd: 45, - total: 415, - }, - { - number: 207, - code: 1, - serial: 2071, - name: 'Gligar', - type1: 'Ground', - type2: 'Flying', - color: 'Purple', - ability1: 'Hyper Cutter', - ability2: 'Sand Veil', - 'ability hidden': 'Immunity', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 64.8, - hp: 65, - atk: 75, - def: 105, - sp_atk: 35, - sp_def: 65, - spd: 85, - total: 430, - }, - { - number: 208, - code: 1, - serial: 2081, - name: 'Steelix', - type1: 'Steel', - type2: 'Ground', - color: 'Grey', - ability1: 'Rock Head', - ability2: 'Sturdy', - 'ability hidden': 'Sheer Force', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 9.2, - weight: 400, - hp: 75, - atk: 85, - def: 200, - sp_atk: 55, - sp_def: 65, - spd: 30, - total: 510, - }, - { - number: 208, - code: 2, - serial: 2082, - name: 'Mega Steelix', - type1: 'Steel', - type2: 'Ground', - color: 'Grey', - ability1: 'Sand Force', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 1, - height: 10.5, - weight: 740, - hp: 75, - atk: 125, - def: 230, - sp_atk: 55, - sp_def: 95, - spd: 30, - total: 610, - }, - { - number: 209, - code: 1, - serial: 2091, - name: 'Snubbull', - type1: 'Fairy', - type2: '', - color: 'Pink', - ability1: 'Intimidate', - ability2: 'Run Away', - 'ability hidden': 'Rattled', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 7.8, - hp: 60, - atk: 80, - def: 50, - sp_atk: 40, - sp_def: 40, - spd: 30, - total: 300, - }, - { - number: 210, - code: 1, - serial: 2101, - name: 'Granbull', - type1: 'Fairy', - type2: '', - color: 'Purple', - ability1: 'Intimidate', - ability2: 'Quick Feet', - 'ability hidden': 'Rattled', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 48.7, - hp: 90, - atk: 120, - def: 75, - sp_atk: 60, - sp_def: 60, - spd: 45, - total: 450, - }, - { - number: 211, - code: 1, - serial: 2111, - name: 'Qwilfish', - type1: 'Water', - type2: 'Poison', - color: 'Grey', - ability1: 'Poison Point', - ability2: 'Swift Swim', - 'ability hidden': 'Intimidate', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 3.9, - hp: 65, - atk: 95, - def: 85, - sp_atk: 55, - sp_def: 55, - spd: 85, - total: 440, - }, - { - number: 212, - code: 1, - serial: 2121, - name: 'Scizor', - type1: 'Bug', - type2: 'Steel', - color: 'Red', - ability1: 'Swarm', - ability2: 'Technician', - 'ability hidden': 'Light Metal', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 118, - hp: 70, - atk: 130, - def: 100, - sp_atk: 55, - sp_def: 80, - spd: 65, - total: 500, - }, - { - number: 212, - code: 2, - serial: 2122, - name: 'Mega Scizor', - type1: 'Bug', - type2: 'Steel', - color: 'Red', - ability1: 'Technician', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 1, - height: 2, - weight: 125, - hp: 70, - atk: 150, - def: 140, - sp_atk: 65, - sp_def: 100, - spd: 75, - total: 600, - }, - { - number: 213, - code: 1, - serial: 2131, - name: 'Shuckle', - type1: 'Bug', - type2: 'Rock', - color: 'Yellow', - ability1: 'Sturdy', - ability2: 'Gluttony', - 'ability hidden': 'Contrary', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 20.5, - hp: 20, - atk: 10, - def: 230, - sp_atk: 10, - sp_def: 230, - spd: 5, - total: 505, - }, - { - number: 214, - code: 1, - serial: 2141, - name: 'Heracross', - type1: 'Bug', - type2: 'Fighting', - color: 'Blue', - ability1: 'Swarm', - ability2: 'Guts', - 'ability hidden': 'Moxie', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 54, - hp: 80, - atk: 125, - def: 75, - sp_atk: 40, - sp_def: 95, - spd: 85, - total: 500, - }, - { - number: 214, - code: 2, - serial: 2142, - name: 'Mega Heracross', - type1: 'Bug', - type2: 'Fighting', - color: 'Blue', - ability1: 'Skill Link', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 1, - height: 1.7, - weight: 62.5, - hp: 80, - atk: 185, - def: 115, - sp_atk: 40, - sp_def: 105, - spd: 75, - total: 600, - }, - { - number: 215, - code: 1, - serial: 2151, - name: 'Sneasel', - type1: 'Dark', - type2: 'Ice', - color: 'Black', - ability1: 'Inner Focus', - ability2: 'Keen Eye', - 'ability hidden': 'Pickpocket', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 28, - hp: 55, - atk: 95, - def: 55, - sp_atk: 35, - sp_def: 75, - spd: 115, - total: 430, - }, - { - number: 216, - code: 1, - serial: 2161, - name: 'Teddiursa', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Quick Feet', - 'ability hidden': 'Honey Gather', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8.8, - hp: 60, - atk: 80, - def: 50, - sp_atk: 50, - sp_def: 50, - spd: 40, - total: 330, - }, - { - number: 217, - code: 1, - serial: 2171, - name: 'Ursaring', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Guts', - ability2: 'Quick Feet', - 'ability hidden': 'Unnerve', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 125.8, - hp: 90, - atk: 130, - def: 75, - sp_atk: 75, - sp_def: 75, - spd: 55, - total: 500, - }, - { - number: 218, - code: 1, - serial: 2181, - name: 'Slugma', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Magma Armor', - ability2: 'Flame Body', - 'ability hidden': 'Weak Armor', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 35, - hp: 40, - atk: 40, - def: 40, - sp_atk: 70, - sp_def: 40, - spd: 20, - total: 250, - }, - { - number: 219, - code: 1, - serial: 2191, - name: 'Magcargo', - type1: 'Fire', - type2: 'Rock', - color: 'Red', - ability1: 'Magma Armor', - ability2: 'Flame Body', - 'ability hidden': 'Weak Armor', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 55, - hp: 60, - atk: 50, - def: 120, - sp_atk: 90, - sp_def: 80, - spd: 30, - total: 430, - }, - { - number: 220, - code: 1, - serial: 2201, - name: 'Swinub', - type1: 'Ice', - type2: 'Ground', - color: 'Brown', - ability1: 'Oblivious', - ability2: 'Snow Cloak', - 'ability hidden': 'Thick Fat', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 6.5, - hp: 50, - atk: 50, - def: 40, - sp_atk: 30, - sp_def: 30, - spd: 50, - total: 250, - }, - { - number: 221, - code: 1, - serial: 2211, - name: 'Piloswine', - type1: 'Ice', - type2: 'Ground', - color: 'Brown', - ability1: 'Oblivious', - ability2: 'Snow Cloak', - 'ability hidden': 'Thick Fat', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 55.8, - hp: 100, - atk: 100, - def: 80, - sp_atk: 60, - sp_def: 60, - spd: 50, - total: 450, - }, - { - number: 222, - code: 1, - serial: 2221, - name: 'Corsola', - type1: 'Water', - type2: 'Rock', - color: 'Pink', - ability1: 'Hustle', - ability2: 'Natural Cure', - 'ability hidden': 'Regenerator', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 5, - hp: 65, - atk: 55, - def: 95, - sp_atk: 65, - sp_def: 95, - spd: 35, - total: 410, - }, - { - number: 222, - code: 2, - serial: 2222, - name: 'Corsola', - type1: 'Ghost', - type2: '', - color: 'White', - ability1: 'Weak Armor', - ability2: '', - 'ability hidden': 'Cursed Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 0.5, - hp: 65, - atk: 55, - def: 100, - sp_atk: 65, - sp_def: 100, - spd: 30, - total: 415, - }, - { - number: 223, - code: 1, - serial: 2231, - name: 'Remoraid', - type1: 'Water', - type2: '', - color: 'Grey', - ability1: 'Hustle', - ability2: 'Sniper', - 'ability hidden': 'Moody', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 12, - hp: 35, - atk: 65, - def: 35, - sp_atk: 65, - sp_def: 35, - spd: 65, - total: 300, - }, - { - number: 224, - code: 1, - serial: 2241, - name: 'Octillery', - type1: 'Water', - type2: '', - color: 'Red', - ability1: 'Suction Cups', - ability2: 'Sniper', - 'ability hidden': 'Moody', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 28.5, - hp: 75, - atk: 105, - def: 75, - sp_atk: 105, - sp_def: 75, - spd: 45, - total: 480, - }, - { - number: 225, - code: 1, - serial: 2251, - name: 'Delibird', - type1: 'Ice', - type2: 'Flying', - color: 'Red', - ability1: 'Vital Spilit', - ability2: 'Hustle', - 'ability hidden': 'Insomnia', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 16, - hp: 45, - atk: 55, - def: 45, - sp_atk: 65, - sp_def: 45, - spd: 75, - total: 330, - }, - { - number: 226, - code: 1, - serial: 2261, - name: 'Mantine', - type1: 'Water', - type2: 'Flying', - color: 'Purple', - ability1: 'Swift Swim', - ability2: 'Water Absorb', - 'ability hidden': 'Water Veil', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 2.1, - weight: 220, - hp: 85, - atk: 40, - def: 70, - sp_atk: 80, - sp_def: 140, - spd: 70, - total: 485, - }, - { - number: 227, - code: 1, - serial: 2271, - name: 'Skarmory', - type1: 'Steel', - type2: 'Flying', - color: 'Grey', - ability1: 'Keen Eye', - ability2: 'Sturdy', - 'ability hidden': 'Weak Armor', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 50.5, - hp: 65, - atk: 80, - def: 140, - sp_atk: 40, - sp_def: 70, - spd: 70, - total: 465, - }, - { - number: 228, - code: 1, - serial: 2281, - name: 'Houndour', - type1: 'Dark', - type2: 'Fire', - color: 'Black', - ability1: 'Early Bird', - ability2: 'Flash Fire', - 'ability hidden': 'Unnerve', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 10.8, - hp: 45, - atk: 60, - def: 30, - sp_atk: 80, - sp_def: 50, - spd: 65, - total: 330, - }, - { - number: 229, - code: 1, - serial: 2291, - name: 'Houndoom', - type1: 'Dark', - type2: 'Fire', - color: 'Black', - ability1: 'Early Bird', - ability2: 'Flash Fire', - 'ability hidden': 'Unnerve', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 35, - hp: 75, - atk: 90, - def: 50, - sp_atk: 110, - sp_def: 80, - spd: 95, - total: 500, - }, - { - number: 229, - code: 2, - serial: 2292, - name: 'Mega Houndoom', - type1: 'Dark', - type2: 'Fire', - color: 'Black', - ability1: 'Solar Power', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 1, - height: 1.9, - weight: 49.5, - hp: 75, - atk: 90, - def: 90, - sp_atk: 140, - sp_def: 90, - spd: 115, - total: 600, - }, - { - number: 230, - code: 1, - serial: 2301, - name: 'Kingdra', - type1: 'Water', - type2: 'Dragon', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Sniper', - 'ability hidden': 'Damp', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 152, - hp: 75, - atk: 95, - def: 95, - sp_atk: 95, - sp_def: 95, - spd: 85, - total: 540, - }, - { - number: 231, - code: 1, - serial: 2311, - name: 'Phanpy', - type1: 'Ground', - type2: '', - color: 'Blue', - ability1: 'Pickup', - ability2: '', - 'ability hidden': 'Sand Veil', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 33.5, - hp: 90, - atk: 60, - def: 60, - sp_atk: 40, - sp_def: 40, - spd: 40, - total: 330, - }, - { - number: 232, - code: 1, - serial: 2321, - name: 'Donphan', - type1: 'Ground', - type2: '', - color: 'Grey', - ability1: 'Sturdy', - ability2: '', - 'ability hidden': 'Sand Veil', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 120, - hp: 90, - atk: 120, - def: 120, - sp_atk: 60, - sp_def: 60, - spd: 50, - total: 500, - }, - { - number: 233, - code: 1, - serial: 2331, - name: 'Porygon2', - type1: 'Normal', - type2: '', - color: 'Red', - ability1: 'Trace', - ability2: 'Download', - 'ability hidden': 'Analytic', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 32.5, - hp: 85, - atk: 80, - def: 90, - sp_atk: 105, - sp_def: 95, - spd: 60, - total: 515, - }, - { - number: 234, - code: 1, - serial: 2341, - name: 'Stantler', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Intimidate', - ability2: 'Frisk', - 'ability hidden': 'Sap Sipper', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 71.2, - hp: 73, - atk: 95, - def: 62, - sp_atk: 85, - sp_def: 65, - spd: 85, - total: 465, - }, - { - number: 235, - code: 1, - serial: 2351, - name: 'Smeargle', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Own Tempo', - ability2: 'Technician', - 'ability hidden': 'Moody', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 58, - hp: 55, - atk: 20, - def: 35, - sp_atk: 20, - sp_def: 45, - spd: 75, - total: 250, - }, - { - number: 236, - code: 1, - serial: 2361, - name: 'Tyrogue', - type1: 'Fighting', - type2: '', - color: 'Purple', - ability1: 'Guts', - ability2: 'Steadfast', - 'ability hidden': 'Vital Spilit', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 21, - hp: 35, - atk: 35, - def: 35, - sp_atk: 35, - sp_def: 35, - spd: 35, - total: 210, - }, - { - number: 237, - code: 1, - serial: 2371, - name: 'Hitmontop', - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Intimidate', - ability2: 'Technician', - 'ability hidden': 'Steadfast', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 48, - hp: 50, - atk: 95, - def: 95, - sp_atk: 35, - sp_def: 110, - spd: 70, - total: 455, - }, - { - number: 238, - code: 1, - serial: 2381, - name: 'Smoochum', - type1: 'Ice', - type2: 'Psychic', - color: 'Pink', - ability1: 'Oblivious', - ability2: 'Forewarn', - 'ability hidden': 'Hydration', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 6, - hp: 45, - atk: 30, - def: 15, - sp_atk: 85, - sp_def: 65, - spd: 65, - total: 305, - }, - { - number: 239, - code: 1, - serial: 2391, - name: 'Elekid', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Vital Spilit', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 23.5, - hp: 45, - atk: 63, - def: 37, - sp_atk: 65, - sp_def: 55, - spd: 95, - total: 360, - }, - { - number: 240, - code: 1, - serial: 2401, - name: 'Magby', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Flame Body', - ability2: '', - 'ability hidden': 'Vital Spilit', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 21.4, - hp: 45, - atk: 75, - def: 37, - sp_atk: 70, - sp_def: 55, - spd: 83, - total: 365, - }, - { - number: 241, - code: 1, - serial: 2411, - name: 'Miltank', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Thick Fat', - ability2: 'Scrappy', - 'ability hidden': 'Sap Sipper', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 75.5, - hp: 95, - atk: 80, - def: 105, - sp_atk: 40, - sp_def: 70, - spd: 100, - total: 490, - }, - { - number: 242, - code: 1, - serial: 2421, - name: 'Blissey', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Natural Cure', - ability2: 'Serene Grace', - 'ability hidden': 'Healer', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 46.8, - hp: 255, - atk: 10, - def: 10, - sp_atk: 75, - sp_def: 135, - spd: 55, - total: 540, - }, - { - number: 243, - code: 1, - serial: 2431, - name: 'Raikou', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Inner Focus', - generation: 2, - legendary: 1, - mega_evolution: 0, - height: 1.9, - weight: 178, - hp: 90, - atk: 85, - def: 75, - sp_atk: 115, - sp_def: 100, - spd: 115, - total: 580, - }, - { - number: 244, - code: 1, - serial: 2441, - name: 'Entei', - type1: 'Fire', - type2: '', - color: 'Brown', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Inner Focus', - generation: 2, - legendary: 1, - mega_evolution: 0, - height: 2.1, - weight: 198, - hp: 115, - atk: 115, - def: 85, - sp_atk: 90, - sp_def: 75, - spd: 100, - total: 580, - }, - { - number: 245, - code: 1, - serial: 2451, - name: 'Suicune', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Inner Focus', - generation: 2, - legendary: 1, - mega_evolution: 0, - height: 2, - weight: 187, - hp: 100, - atk: 75, - def: 115, - sp_atk: 90, - sp_def: 115, - spd: 85, - total: 580, - }, - { - number: 246, - code: 1, - serial: 2461, - name: 'Larvitar', - type1: 'Rock', - type2: 'Ground', - color: 'Green', - ability1: 'Guts', - ability2: '', - 'ability hidden': 'Sand Veil', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 72, - hp: 50, - atk: 64, - def: 50, - sp_atk: 45, - sp_def: 50, - spd: 41, - total: 300, - }, - { - number: 247, - code: 1, - serial: 2471, - name: 'Pupitar', - type1: 'Rock', - type2: 'Ground', - color: 'Grey', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 152, - hp: 70, - atk: 84, - def: 70, - sp_atk: 65, - sp_def: 70, - spd: 51, - total: 410, - }, - { - number: 248, - code: 1, - serial: 2481, - name: 'Tyranitar', - type1: 'Rock', - type2: 'Dark', - color: 'Green', - ability1: 'Sand Stream', - ability2: '', - 'ability hidden': 'Unnerve', - generation: 2, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 202, - hp: 100, - atk: 134, - def: 110, - sp_atk: 95, - sp_def: 100, - spd: 61, - total: 600, - }, - { - number: 248, - code: 2, - serial: 2482, - name: 'Mega Tyranitar', - type1: 'Rock', - type2: 'Dark', - color: 'Green', - ability1: 'Sand Stream', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 0, - mega_evolution: 1, - height: 2, - weight: 255, - hp: 100, - atk: 164, - def: 150, - sp_atk: 95, - sp_def: 120, - spd: 71, - total: 700, - }, - { - number: 249, - code: 1, - serial: 2491, - name: 'Lugia', - type1: 'Psychic', - type2: 'Flying', - color: 'White', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Multiscale', - generation: 2, - legendary: 1, - mega_evolution: 0, - height: 5.2, - weight: 216, - hp: 106, - atk: 90, - def: 130, - sp_atk: 90, - sp_def: 154, - spd: 110, - total: 680, - }, - { - number: 250, - code: 1, - serial: 2501, - name: 'Ho-Oh', - type1: 'Fire', - type2: 'Flying', - color: 'Red', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Regenerator', - generation: 2, - legendary: 1, - mega_evolution: 0, - height: 3.8, - weight: 199, - hp: 106, - atk: 130, - def: 90, - sp_atk: 110, - sp_def: 154, - spd: 90, - total: 680, - }, - { - number: 251, - code: 1, - serial: 2511, - name: 'Celebi', - type1: 'Psychic', - type2: 'Grass', - color: 'Green', - ability1: 'Natural Cure', - ability2: '', - 'ability hidden': '', - generation: 2, - legendary: 1, - mega_evolution: 0, - height: 0.6, - weight: 5, - hp: 100, - atk: 100, - def: 100, - sp_atk: 100, - sp_def: 100, - spd: 100, - total: 600, - }, - { - number: 252, - code: 1, - serial: 2521, - name: 'Treecko', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Unburden', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 5, - hp: 40, - atk: 45, - def: 35, - sp_atk: 65, - sp_def: 55, - spd: 70, - total: 310, - }, - { - number: 253, - code: 1, - serial: 2531, - name: 'Grovyle', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Unburden', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 21.6, - hp: 50, - atk: 65, - def: 45, - sp_atk: 85, - sp_def: 65, - spd: 95, - total: 405, - }, - { - number: 254, - code: 1, - serial: 2541, - name: 'Sceptile', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Unburden', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 52.2, - hp: 70, - atk: 85, - def: 65, - sp_atk: 105, - sp_def: 85, - spd: 120, - total: 530, - }, - { - number: 254, - code: 2, - serial: 2542, - name: 'Mega Sceptile', - type1: 'Grass', - type2: 'Dragon', - color: 'Green', - ability1: 'Lightning Rod', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.9, - weight: 55.2, - hp: 70, - atk: 110, - def: 75, - sp_atk: 145, - sp_def: 85, - spd: 145, - total: 630, - }, - { - number: 255, - code: 1, - serial: 2551, - name: 'Torchic', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Speed Boost', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 2.5, - hp: 45, - atk: 60, - def: 40, - sp_atk: 70, - sp_def: 50, - spd: 45, - total: 310, - }, - { - number: 256, - code: 1, - serial: 2561, - name: 'Combusken', - type1: 'Fire', - type2: 'Fighting', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Speed Boost', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 19.5, - hp: 60, - atk: 85, - def: 60, - sp_atk: 85, - sp_def: 60, - spd: 55, - total: 405, - }, - { - number: 257, - code: 1, - serial: 2571, - name: 'Blaziken', - type1: 'Fire', - type2: 'Fighting', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Speed Boost', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 52, - hp: 80, - atk: 120, - def: 70, - sp_atk: 110, - sp_def: 70, - spd: 80, - total: 530, - }, - { - number: 257, - code: 2, - serial: 2572, - name: 'Mega Blaziken', - type1: 'Fire', - type2: 'Fighting', - color: 'Red', - ability1: 'Speed Boost', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.9, - weight: 52, - hp: 80, - atk: 160, - def: 80, - sp_atk: 130, - sp_def: 80, - spd: 100, - total: 630, - }, - { - number: 258, - code: 1, - serial: 2581, - name: 'Mudkip', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Damp', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 7.6, - hp: 50, - atk: 70, - def: 50, - sp_atk: 50, - sp_def: 50, - spd: 40, - total: 310, - }, - { - number: 259, - code: 1, - serial: 2591, - name: 'Marshtomp', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Damp', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 28, - hp: 70, - atk: 85, - def: 70, - sp_atk: 60, - sp_def: 70, - spd: 50, - total: 405, - }, - { - number: 260, - code: 1, - serial: 2601, - name: 'Swampert', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Damp', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 81.9, - hp: 100, - atk: 110, - def: 90, - sp_atk: 85, - sp_def: 90, - spd: 60, - total: 535, - }, - { - number: 260, - code: 2, - serial: 2602, - name: 'Mega Swampert', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.9, - weight: 102, - hp: 100, - atk: 150, - def: 110, - sp_atk: 95, - sp_def: 110, - spd: 70, - total: 635, - }, - { - number: 261, - code: 1, - serial: 2611, - name: 'Poochyena', - type1: 'Dark', - type2: '', - color: 'Grey', - ability1: 'Run Away', - ability2: 'Quick Feet', - 'ability hidden': 'Rattled', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 13.6, - hp: 35, - atk: 55, - def: 35, - sp_atk: 30, - sp_def: 30, - spd: 35, - total: 220, - }, - { - number: 262, - code: 1, - serial: 2621, - name: 'Mightyena', - type1: 'Dark', - type2: '', - color: 'Grey', - ability1: 'Intimidate', - ability2: 'Quick Feet', - 'ability hidden': 'Moxie', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 37, - hp: 70, - atk: 90, - def: 70, - sp_atk: 60, - sp_def: 60, - spd: 70, - total: 420, - }, - { - number: 263, - code: 1, - serial: 2631, - name: 'Zigzagoon', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Gluttony', - 'ability hidden': 'Quick Feet', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 17.5, - hp: 38, - atk: 30, - def: 41, - sp_atk: 30, - sp_def: 41, - spd: 60, - total: 240, - }, - { - number: 263, - code: 2, - serial: 2632, - name: 'Zigzagoon', - type1: 'Dark', - type2: 'Normal', - color: 'White', - ability1: 'Pickup', - ability2: 'Gluttony', - 'ability hidden': 'Quick Feet', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 17.5, - hp: 38, - atk: 30, - def: 41, - sp_atk: 30, - sp_def: 41, - spd: 60, - total: 240, - }, - { - number: 264, - code: 1, - serial: 2641, - name: 'Linoone', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Pickup', - ability2: 'Gluttony', - 'ability hidden': 'Quick Feet', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 32.5, - hp: 78, - atk: 70, - def: 61, - sp_atk: 50, - sp_def: 61, - spd: 100, - total: 420, - }, - { - number: 264, - code: 2, - serial: 2642, - name: 'Linoone', - type1: 'Dark', - type2: 'Normal', - color: 'White', - ability1: 'Pickup', - ability2: 'Gluttony', - 'ability hidden': 'Quick Feet', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 32.5, - hp: 78, - atk: 70, - def: 61, - sp_atk: 50, - sp_def: 61, - spd: 100, - total: 420, - }, - { - number: 265, - code: 1, - serial: 2651, - name: 'Wurmple', - type1: 'Bug', - type2: '', - color: 'Red', - ability1: 'Shield Dust', - ability2: '', - 'ability hidden': 'Run Away', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.6, - hp: 45, - atk: 45, - def: 35, - sp_atk: 20, - sp_def: 30, - spd: 20, - total: 195, - }, - { - number: 266, - code: 1, - serial: 2661, - name: 'Silcoon', - type1: 'Bug', - type2: '', - color: 'White', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 10, - hp: 50, - atk: 35, - def: 55, - sp_atk: 25, - sp_def: 25, - spd: 15, - total: 205, - }, - { - number: 267, - code: 1, - serial: 2671, - name: 'Beautifly', - type1: 'Bug', - type2: 'Flying', - color: 'Yellow', - ability1: 'Swarm', - ability2: '', - 'ability hidden': 'Rivalry', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 28.4, - hp: 60, - atk: 70, - def: 50, - sp_atk: 100, - sp_def: 50, - spd: 65, - total: 395, - }, - { - number: 268, - code: 1, - serial: 2681, - name: 'Cascoon', - type1: 'Bug', - type2: '', - color: 'Purple', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 11.5, - hp: 50, - atk: 35, - def: 55, - sp_atk: 25, - sp_def: 25, - spd: 15, - total: 205, - }, - { - number: 269, - code: 1, - serial: 2691, - name: 'Dustox', - type1: 'Bug', - type2: 'Poison', - color: 'Green', - ability1: 'Shield Dust', - ability2: '', - 'ability hidden': 'Compound Eyes', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 31.6, - hp: 60, - atk: 50, - def: 70, - sp_atk: 50, - sp_def: 90, - spd: 65, - total: 385, - }, - { - number: 270, - code: 1, - serial: 2701, - name: 'Lotad', - type1: 'Water', - type2: 'Grass', - color: 'Green', - ability1: 'Swift Swim', - ability2: 'Rain Dish', - 'ability hidden': 'Own Tempo', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 2.6, - hp: 40, - atk: 30, - def: 30, - sp_atk: 40, - sp_def: 50, - spd: 30, - total: 220, - }, - { - number: 271, - code: 1, - serial: 2711, - name: 'Lombre', - type1: 'Water', - type2: 'Grass', - color: 'Green', - ability1: 'Swift Swim', - ability2: 'Rain Dish', - 'ability hidden': 'Own Tempo', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 32.5, - hp: 60, - atk: 50, - def: 50, - sp_atk: 60, - sp_def: 70, - spd: 50, - total: 340, - }, - { - number: 272, - code: 1, - serial: 2721, - name: 'Ludicolo', - type1: 'Water', - type2: 'Grass', - color: 'Green', - ability1: 'Swift Swim', - ability2: 'Rain Dish', - 'ability hidden': 'Own Tempo', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 55, - hp: 80, - atk: 70, - def: 70, - sp_atk: 90, - sp_def: 100, - spd: 70, - total: 480, - }, - { - number: 273, - code: 1, - serial: 2731, - name: 'Seedot', - type1: 'Grass', - type2: '', - color: 'Brown', - ability1: 'Chlorophyll', - ability2: 'Early Bird', - 'ability hidden': 'Pickpocket', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 4, - hp: 40, - atk: 40, - def: 50, - sp_atk: 30, - sp_def: 30, - spd: 30, - total: 220, - }, - { - number: 274, - code: 1, - serial: 2741, - name: 'Nuzleaf', - type1: 'Grass', - type2: 'Dark', - color: 'Brown', - ability1: 'Chlorophyll', - ability2: 'Early Bird', - 'ability hidden': 'Pickpocket', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 28, - hp: 70, - atk: 70, - def: 40, - sp_atk: 60, - sp_def: 40, - spd: 60, - total: 340, - }, - { - number: 275, - code: 1, - serial: 2751, - name: 'Shiftry', - type1: 'Grass', - type2: 'Dark', - color: 'Brown', - ability1: 'Chlorophyll', - ability2: 'Early Bird', - 'ability hidden': 'Pickpocket', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 59.6, - hp: 90, - atk: 100, - def: 60, - sp_atk: 90, - sp_def: 60, - spd: 80, - total: 480, - }, - { - number: 276, - code: 1, - serial: 2761, - name: 'Taillow', - type1: 'Normal', - type2: 'Flying', - color: 'Blue', - ability1: 'Guts', - ability2: '', - 'ability hidden': 'Scrappy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2.3, - hp: 40, - atk: 55, - def: 30, - sp_atk: 30, - sp_def: 30, - spd: 85, - total: 270, - }, - { - number: 277, - code: 1, - serial: 2771, - name: 'Swellow', - type1: 'Normal', - type2: 'Flying', - color: 'Blue', - ability1: 'Guts', - ability2: '', - 'ability hidden': 'Scrappy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 19.8, - hp: 60, - atk: 85, - def: 60, - sp_atk: 75, - sp_def: 50, - spd: 125, - total: 455, - }, - { - number: 278, - code: 1, - serial: 2781, - name: 'Wingull', - type1: 'Water', - type2: 'Flying', - color: 'White', - ability1: 'Keen Eye', - ability2: 'Hydration', - 'ability hidden': 'Rain Dish', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 9.5, - hp: 40, - atk: 30, - def: 30, - sp_atk: 55, - sp_def: 30, - spd: 85, - total: 270, - }, - { - number: 279, - code: 1, - serial: 2791, - name: 'Pelipper', - type1: 'Water', - type2: 'Flying', - color: 'Yellow', - ability1: 'Keen Eye', - ability2: 'Drizzle', - 'ability hidden': 'Rain Dish', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 28, - hp: 60, - atk: 50, - def: 100, - sp_atk: 95, - sp_def: 70, - spd: 65, - total: 440, - }, - { - number: 280, - code: 1, - serial: 2801, - name: 'Ralts', - type1: 'Psychic', - type2: 'Fairy', - color: 'White', - ability1: 'Synchronize', - ability2: 'Trace', - 'ability hidden': 'Telepathy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 6.6, - hp: 28, - atk: 25, - def: 25, - sp_atk: 45, - sp_def: 35, - spd: 40, - total: 198, - }, - { - number: 281, - code: 1, - serial: 2811, - name: 'Kirlia', - type1: 'Psychic', - type2: 'Fairy', - color: 'White', - ability1: 'Synchronize', - ability2: 'Trace', - 'ability hidden': 'Telepathy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 20.2, - hp: 38, - atk: 35, - def: 35, - sp_atk: 65, - sp_def: 55, - spd: 50, - total: 278, - }, - { - number: 282, - code: 1, - serial: 2821, - name: 'Gardevoir', - type1: 'Psychic', - type2: 'Fairy', - color: 'White', - ability1: 'Synchronize', - ability2: 'Trace', - 'ability hidden': 'Telepathy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 48.4, - hp: 68, - atk: 65, - def: 65, - sp_atk: 125, - sp_def: 115, - spd: 80, - total: 518, - }, - { - number: 282, - code: 2, - serial: 2822, - name: 'Mega Gardevoir', - type1: 'Psychic', - type2: 'Fairy', - color: 'White', - ability1: 'Pixilate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.6, - weight: 48.4, - hp: 68, - atk: 85, - def: 65, - sp_atk: 165, - sp_def: 135, - spd: 100, - total: 618, - }, - { - number: 283, - code: 1, - serial: 2831, - name: 'Surskit', - type1: 'Bug', - type2: 'Water', - color: 'Blue', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Rain Dish', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 1.7, - hp: 40, - atk: 30, - def: 32, - sp_atk: 50, - sp_def: 52, - spd: 65, - total: 269, - }, - { - number: 284, - code: 1, - serial: 2841, - name: 'Masquerain', - type1: 'Bug', - type2: 'Flying', - color: 'Blue', - ability1: 'Intimidate', - ability2: '', - 'ability hidden': 'Unnerve', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 3.6, - hp: 70, - atk: 60, - def: 62, - sp_atk: 100, - sp_def: 82, - spd: 80, - total: 454, - }, - { - number: 285, - code: 1, - serial: 2851, - name: 'Shroomish', - type1: 'Grass', - type2: '', - color: 'Brown', - ability1: 'Effect Spore', - ability2: 'Poison Heal', - 'ability hidden': 'Quick Feet', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 4.5, - hp: 60, - atk: 40, - def: 60, - sp_atk: 40, - sp_def: 60, - spd: 35, - total: 295, - }, - { - number: 286, - code: 1, - serial: 2861, - name: 'Breloom', - type1: 'Grass', - type2: 'Fighting', - color: 'Green', - ability1: 'Effect Spore', - ability2: 'Poison Heal', - 'ability hidden': 'Technician', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 39.2, - hp: 60, - atk: 130, - def: 80, - sp_atk: 60, - sp_def: 60, - spd: 70, - total: 460, - }, - { - number: 287, - code: 1, - serial: 2871, - name: 'Slakoth', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Truant', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 24, - hp: 60, - atk: 60, - def: 60, - sp_atk: 35, - sp_def: 35, - spd: 30, - total: 280, - }, - { - number: 288, - code: 1, - serial: 2881, - name: 'Vigoroth', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Vital Spilit', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 46.5, - hp: 80, - atk: 80, - def: 80, - sp_atk: 55, - sp_def: 55, - spd: 90, - total: 440, - }, - { - number: 289, - code: 1, - serial: 2891, - name: 'Slaking', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Truant', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 130.5, - hp: 150, - atk: 160, - def: 100, - sp_atk: 95, - sp_def: 65, - spd: 100, - total: 670, - }, - { - number: 290, - code: 1, - serial: 2901, - name: 'Nincada', - type1: 'Bug', - type2: 'Ground', - color: 'Grey', - ability1: 'Compound Eyes', - ability2: '', - 'ability hidden': 'Run Away', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 5.5, - hp: 31, - atk: 45, - def: 90, - sp_atk: 30, - sp_def: 30, - spd: 40, - total: 266, - }, - { - number: 291, - code: 1, - serial: 2911, - name: 'Ninjask', - type1: 'Bug', - type2: 'Flying', - color: 'Yellow', - ability1: 'Speed Boost', - ability2: '', - 'ability hidden': 'Infiltrator', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 12, - hp: 61, - atk: 90, - def: 45, - sp_atk: 50, - sp_def: 50, - spd: 160, - total: 456, - }, - { - number: 292, - code: 1, - serial: 2921, - name: 'Shedinja', - type1: 'Bug', - type2: 'Ghost', - color: 'Brown', - ability1: 'Wonder Guard', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 1.2, - hp: 1, - atk: 90, - def: 45, - sp_atk: 30, - sp_def: 30, - spd: 40, - total: 236, - }, - { - number: 293, - code: 1, - serial: 2931, - name: 'Whismur', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Soundproof', - ability2: '', - 'ability hidden': 'Rattled', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 16.3, - hp: 64, - atk: 51, - def: 23, - sp_atk: 51, - sp_def: 23, - spd: 28, - total: 240, - }, - { - number: 294, - code: 1, - serial: 2941, - name: 'Loudred', - type1: 'Normal', - type2: '', - color: 'Blue', - ability1: 'Soundproof', - ability2: '', - 'ability hidden': 'Scrappy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 40.5, - hp: 84, - atk: 71, - def: 43, - sp_atk: 71, - sp_def: 43, - spd: 48, - total: 360, - }, - { - number: 295, - code: 1, - serial: 2951, - name: 'Exploud', - type1: 'Normal', - type2: '', - color: 'Blue', - ability1: 'Soundproof', - ability2: '', - 'ability hidden': 'Scrappy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 84, - hp: 104, - atk: 91, - def: 63, - sp_atk: 91, - sp_def: 73, - spd: 68, - total: 490, - }, - { - number: 296, - code: 1, - serial: 2961, - name: 'Makuhita', - type1: 'Fighting', - type2: '', - color: 'Yellow', - ability1: 'Thick Fat', - ability2: 'Guts', - 'ability hidden': 'Sheer Force', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 86.4, - hp: 72, - atk: 60, - def: 30, - sp_atk: 20, - sp_def: 30, - spd: 25, - total: 237, - }, - { - number: 297, - code: 1, - serial: 2971, - name: 'Hariyama', - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Thick Fat', - ability2: 'Guts', - 'ability hidden': 'Sheer Force', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 2.3, - weight: 253.8, - hp: 144, - atk: 120, - def: 60, - sp_atk: 40, - sp_def: 60, - spd: 50, - total: 474, - }, - { - number: 298, - code: 1, - serial: 2981, - name: 'Azurill', - type1: 'Normal', - type2: 'Fairy', - color: 'Blue', - ability1: 'Thick Fat', - ability2: 'Huge Power', - 'ability hidden': 'Sap Sipper', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 2, - hp: 50, - atk: 20, - def: 40, - sp_atk: 20, - sp_def: 40, - spd: 20, - total: 190, - }, - { - number: 299, - code: 1, - serial: 2991, - name: 'Nosepass', - type1: 'Rock', - type2: '', - color: 'Grey', - ability1: 'Sturdy', - ability2: 'Magnet Pull', - 'ability hidden': 'Sand Force', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 97, - hp: 30, - atk: 45, - def: 135, - sp_atk: 45, - sp_def: 90, - spd: 30, - total: 375, - }, - { - number: 300, - code: 1, - serial: 3001, - name: 'Skitty', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Cute Charm', - ability2: 'Normalize', - 'ability hidden': 'Wonder Skin', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 11, - hp: 50, - atk: 45, - def: 45, - sp_atk: 35, - sp_def: 35, - spd: 50, - total: 260, - }, - { - number: 301, - code: 1, - serial: 3011, - name: 'Delcatty', - type1: 'Normal', - type2: '', - color: 'Purple', - ability1: 'Cute Charm', - ability2: 'Normalize', - 'ability hidden': 'Wonder Skin', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 32.6, - hp: 70, - atk: 65, - def: 65, - sp_atk: 55, - sp_def: 55, - spd: 90, - total: 400, - }, - { - number: 302, - code: 1, - serial: 3021, - name: 'Sableye', - type1: 'Dark', - type2: 'Ghost', - color: 'Purple', - ability1: 'Keen Eye', - ability2: 'Stall', - 'ability hidden': 'Prankster', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 11, - hp: 50, - atk: 75, - def: 75, - sp_atk: 65, - sp_def: 65, - spd: 50, - total: 380, - }, - { - number: 302, - code: 2, - serial: 3022, - name: 'Mega Sableye', - type1: 'Dark', - type2: 'Ghost', - color: 'Purple', - ability1: 'Magic Bounce', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 0.5, - weight: 161, - hp: 50, - atk: 85, - def: 125, - sp_atk: 85, - sp_def: 115, - spd: 20, - total: 480, - }, - { - number: 303, - code: 1, - serial: 3031, - name: 'Mawile', - type1: 'Steel', - type2: 'Fairy', - color: 'Black', - ability1: 'Hyper Cutter', - ability2: 'Intimidate', - 'ability hidden': 'Sheer Force', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 11.5, - hp: 50, - atk: 85, - def: 85, - sp_atk: 55, - sp_def: 55, - spd: 50, - total: 380, - }, - { - number: 303, - code: 2, - serial: 3032, - name: 'Mega Mawile', - type1: 'Steel', - type2: 'Fairy', - color: 'Black', - ability1: 'Huge Power', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1, - weight: 23.5, - hp: 50, - atk: 105, - def: 125, - sp_atk: 55, - sp_def: 95, - spd: 50, - total: 480, - }, - { - number: 304, - code: 1, - serial: 3041, - name: 'Aron', - type1: 'Steel', - type2: 'Rock', - color: 'Grey', - ability1: 'Sturdy', - ability2: 'Rock Head', - 'ability hidden': 'Heavy Metal', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 60, - hp: 50, - atk: 70, - def: 100, - sp_atk: 40, - sp_def: 40, - spd: 30, - total: 330, - }, - { - number: 305, - code: 1, - serial: 3051, - name: 'Lairon', - type1: 'Steel', - type2: 'Rock', - color: 'Grey', - ability1: 'Sturdy', - ability2: 'Rock Head', - 'ability hidden': 'Heavy Metal', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 120, - hp: 60, - atk: 90, - def: 140, - sp_atk: 50, - sp_def: 50, - spd: 40, - total: 430, - }, - { - number: 306, - code: 1, - serial: 3061, - name: 'Aggron', - type1: 'Steel', - type2: 'Rock', - color: 'Grey', - ability1: 'Sturdy', - ability2: 'Rock Head', - 'ability hidden': 'Heavy Metal', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 2.1, - weight: 360, - hp: 70, - atk: 110, - def: 180, - sp_atk: 60, - sp_def: 60, - spd: 50, - total: 530, - }, - { - number: 306, - code: 2, - serial: 3062, - name: 'Mega Aggron', - type1: 'Steel', - type2: '', - color: 'Grey', - ability1: 'Filter', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 2.2, - weight: 395, - hp: 70, - atk: 140, - def: 230, - sp_atk: 60, - sp_def: 80, - spd: 50, - total: 630, - }, - { - number: 307, - code: 1, - serial: 3071, - name: 'Meditite', - type1: 'Fighting', - type2: 'Psychic', - color: 'Blue', - ability1: 'Pure Power', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 11.2, - hp: 30, - atk: 40, - def: 55, - sp_atk: 40, - sp_def: 55, - spd: 60, - total: 280, - }, - { - number: 308, - code: 1, - serial: 3081, - name: 'Medicham', - type1: 'Fighting', - type2: 'Psychic', - color: 'Red', - ability1: 'Pure Power', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 31.5, - hp: 60, - atk: 60, - def: 75, - sp_atk: 60, - sp_def: 75, - spd: 80, - total: 410, - }, - { - number: 308, - code: 2, - serial: 3082, - name: 'Mega Medicham', - type1: 'Fighting', - type2: 'Psychic', - color: 'Red', - ability1: 'Pure Power', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.3, - weight: 31.5, - hp: 60, - atk: 100, - def: 85, - sp_atk: 80, - sp_def: 85, - spd: 100, - total: 510, - }, - { - number: 309, - code: 1, - serial: 3091, - name: 'Electrike', - type1: 'Electric', - type2: '', - color: 'Green', - ability1: 'Static', - ability2: 'Lightning Rod', - 'ability hidden': 'Minus', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 15.2, - hp: 40, - atk: 45, - def: 40, - sp_atk: 65, - sp_def: 40, - spd: 65, - total: 295, - }, - { - number: 310, - code: 1, - serial: 3101, - name: 'Manectric', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Static', - ability2: 'Lightning Rod', - 'ability hidden': 'Minus', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 40.2, - hp: 70, - atk: 75, - def: 60, - sp_atk: 105, - sp_def: 60, - spd: 105, - total: 475, - }, - { - number: 310, - code: 2, - serial: 3102, - name: 'Mega Manectric', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Intimidate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.8, - weight: 44, - hp: 70, - atk: 75, - def: 80, - sp_atk: 135, - sp_def: 80, - spd: 135, - total: 575, - }, - { - number: 311, - code: 1, - serial: 3111, - name: 'Plusle', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Plus', - ability2: '', - 'ability hidden': 'Lightning Rod', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 4.2, - hp: 60, - atk: 50, - def: 40, - sp_atk: 85, - sp_def: 75, - spd: 95, - total: 405, - }, - { - number: 312, - code: 1, - serial: 3121, - name: 'Minun', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Minus', - ability2: '', - 'ability hidden': 'Lightning Rod', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 4.2, - hp: 60, - atk: 40, - def: 50, - sp_atk: 75, - sp_def: 85, - spd: 95, - total: 405, - }, - { - number: 313, - code: 1, - serial: 3131, - name: 'Volbeat', - type1: 'Bug', - type2: '', - color: 'Grey', - ability1: 'Illuminate', - ability2: 'Swarm', - 'ability hidden': 'Prankster', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 17.7, - hp: 65, - atk: 73, - def: 75, - sp_atk: 47, - sp_def: 85, - spd: 85, - total: 430, - }, - { - number: 314, - code: 1, - serial: 3141, - name: 'Illumise', - type1: 'Bug', - type2: '', - color: 'Purple', - ability1: 'Oblivious', - ability2: 'Tinted Lens', - 'ability hidden': 'Prankster', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 17.7, - hp: 65, - atk: 47, - def: 75, - sp_atk: 73, - sp_def: 85, - spd: 85, - total: 430, - }, - { - number: 315, - code: 1, - serial: 3151, - name: 'Roselia', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Natural Cure', - ability2: 'Poison Point', - 'ability hidden': 'Leaf Guard', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2, - hp: 50, - atk: 60, - def: 45, - sp_atk: 100, - sp_def: 80, - spd: 65, - total: 400, - }, - { - number: 316, - code: 1, - serial: 3161, - name: 'Gulpin', - type1: 'Poison', - type2: '', - color: 'Green', - ability1: 'Liquid Ooze', - ability2: 'Sticky Hold', - 'ability hidden': 'Gluttony', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 10.3, - hp: 70, - atk: 43, - def: 53, - sp_atk: 43, - sp_def: 53, - spd: 40, - total: 302, - }, - { - number: 317, - code: 1, - serial: 3171, - name: 'Swalot', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Liquid Ooze', - ability2: 'Sticky Hold', - 'ability hidden': 'Gluttony', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 80, - hp: 100, - atk: 73, - def: 83, - sp_atk: 73, - sp_def: 83, - spd: 55, - total: 467, - }, - { - number: 318, - code: 1, - serial: 3181, - name: 'Carvanha', - type1: 'Water', - type2: 'Dark', - color: 'Red', - ability1: 'Rough Skin', - ability2: '', - 'ability hidden': 'Speed Boost', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 20.8, - hp: 45, - atk: 90, - def: 20, - sp_atk: 65, - sp_def: 20, - spd: 65, - total: 305, - }, - { - number: 319, - code: 1, - serial: 3191, - name: 'Sharpedo', - type1: 'Water', - type2: 'Dark', - color: 'Blue', - ability1: 'Rough Skin', - ability2: '', - 'ability hidden': 'Speed Boost', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 88.8, - hp: 70, - atk: 120, - def: 40, - sp_atk: 95, - sp_def: 40, - spd: 95, - total: 460, - }, - { - number: 319, - code: 2, - serial: 3192, - name: 'Mega Sharpedo', - type1: 'Water', - type2: 'Dark', - color: 'Blue', - ability1: 'Strong Jaw', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 2.5, - weight: 130.3, - hp: 70, - atk: 140, - def: 70, - sp_atk: 110, - sp_def: 65, - spd: 105, - total: 560, - }, - { - number: 320, - code: 1, - serial: 3201, - name: 'Wailmer', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Water Veil', - ability2: 'Oblivious', - 'ability hidden': 'Pressure', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 130, - hp: 130, - atk: 70, - def: 35, - sp_atk: 70, - sp_def: 35, - spd: 60, - total: 400, - }, - { - number: 321, - code: 1, - serial: 3211, - name: 'Wailord', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Water Veil', - ability2: 'Oblivious', - 'ability hidden': 'Pressure', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 14.5, - weight: 398, - hp: 170, - atk: 90, - def: 45, - sp_atk: 90, - sp_def: 45, - spd: 60, - total: 500, - }, - { - number: 322, - code: 1, - serial: 3221, - name: 'Numel', - type1: 'Fire', - type2: 'Ground', - color: 'Yellow', - ability1: 'Oblivious', - ability2: 'Simple', - 'ability hidden': 'Own Tempo', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 24, - hp: 60, - atk: 60, - def: 40, - sp_atk: 65, - sp_def: 45, - spd: 35, - total: 305, - }, - { - number: 323, - code: 1, - serial: 3231, - name: 'Camerupt', - type1: 'Fire', - type2: 'Ground', - color: 'Red', - ability1: 'Magma Armor', - ability2: 'Solid Rock', - 'ability hidden': 'Anger Point', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 220, - hp: 70, - atk: 100, - def: 70, - sp_atk: 105, - sp_def: 75, - spd: 40, - total: 460, - }, - { - number: 323, - code: 2, - serial: 3232, - name: 'Mega Camerupt', - type1: 'Fire', - type2: 'Ground', - color: 'Red', - ability1: 'Sheer Force', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 2.5, - weight: 320.5, - hp: 70, - atk: 120, - def: 100, - sp_atk: 145, - sp_def: 105, - spd: 20, - total: 560, - }, - { - number: 324, - code: 1, - serial: 3241, - name: 'Torkoal', - type1: 'Fire', - type2: '', - color: 'Brown', - ability1: 'White Smoke', - ability2: 'Drought', - 'ability hidden': 'Shell Armor', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 80.4, - hp: 70, - atk: 85, - def: 140, - sp_atk: 85, - sp_def: 70, - spd: 20, - total: 470, - }, - { - number: 325, - code: 1, - serial: 3251, - name: 'Spoink', - type1: 'Psychic', - type2: '', - color: 'Black', - ability1: 'Thick Fat', - ability2: 'Own Tempo', - 'ability hidden': 'Gluttony', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 30.6, - hp: 60, - atk: 25, - def: 35, - sp_atk: 70, - sp_def: 80, - spd: 60, - total: 330, - }, - { - number: 326, - code: 1, - serial: 3261, - name: 'Grumpig', - type1: 'Psychic', - type2: '', - color: 'Purple', - ability1: 'Thick Fat', - ability2: 'Own Tempo', - 'ability hidden': 'Gluttony', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 71.5, - hp: 80, - atk: 45, - def: 65, - sp_atk: 90, - sp_def: 110, - spd: 80, - total: 470, - }, - { - number: 327, - code: 1, - serial: 3271, - name: 'Spinda', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Own Tempo', - ability2: 'Tangled Feet', - 'ability hidden': 'Contrary', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 5, - hp: 60, - atk: 60, - def: 60, - sp_atk: 60, - sp_def: 60, - spd: 60, - total: 360, - }, - { - number: 328, - code: 1, - serial: 3281, - name: 'Trapinch', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Hyper Cutter', - ability2: 'Arena Trap', - 'ability hidden': 'Sheer Force', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 15, - hp: 45, - atk: 100, - def: 45, - sp_atk: 45, - sp_def: 45, - spd: 10, - total: 290, - }, - { - number: 329, - code: 1, - serial: 3291, - name: 'Vibrava', - type1: 'Ground', - type2: 'Dragon', - color: 'Green', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 15.3, - hp: 50, - atk: 70, - def: 50, - sp_atk: 50, - sp_def: 50, - spd: 70, - total: 340, - }, - { - number: 330, - code: 1, - serial: 3301, - name: 'Flygon', - type1: 'Ground', - type2: 'Dragon', - color: 'Green', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 82, - hp: 80, - atk: 100, - def: 80, - sp_atk: 80, - sp_def: 80, - spd: 100, - total: 520, - }, - { - number: 331, - code: 1, - serial: 3311, - name: 'Cacnea', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Sand Veil', - ability2: '', - 'ability hidden': 'Water Absorb', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 51.3, - hp: 50, - atk: 85, - def: 40, - sp_atk: 85, - sp_def: 40, - spd: 35, - total: 335, - }, - { - number: 332, - code: 1, - serial: 3321, - name: 'Cacturne', - type1: 'Grass', - type2: 'Dark', - color: 'Green', - ability1: 'Sand Veil', - ability2: '', - 'ability hidden': 'Water Absorb', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 77.4, - hp: 70, - atk: 115, - def: 60, - sp_atk: 115, - sp_def: 60, - spd: 55, - total: 475, - }, - { - number: 333, - code: 1, - serial: 3331, - name: 'Swablu', - type1: 'Normal', - type2: 'Flying', - color: 'Blue', - ability1: 'Natural Cure', - ability2: '', - 'ability hidden': 'Cloud Nine', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 1.2, - hp: 45, - atk: 40, - def: 60, - sp_atk: 40, - sp_def: 75, - spd: 50, - total: 310, - }, - { - number: 334, - code: 1, - serial: 3341, - name: 'Altaria', - type1: 'Dragon', - type2: 'Flying', - color: 'Blue', - ability1: 'Natural Cure', - ability2: '', - 'ability hidden': 'Cloud Nine', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 20.6, - hp: 75, - atk: 70, - def: 90, - sp_atk: 70, - sp_def: 105, - spd: 80, - total: 490, - }, - { - number: 334, - code: 2, - serial: 3342, - name: 'Mega Altaria', - type1: 'Dragon', - type2: 'Fairy', - color: 'Blue', - ability1: 'Pixilate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.5, - weight: 20.6, - hp: 75, - atk: 110, - def: 110, - sp_atk: 110, - sp_def: 105, - spd: 80, - total: 590, - }, - { - number: 335, - code: 1, - serial: 3351, - name: 'Zangoose', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Immunity', - ability2: '', - 'ability hidden': 'Toxic Boost', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 40.3, - hp: 73, - atk: 115, - def: 60, - sp_atk: 60, - sp_def: 60, - spd: 90, - total: 458, - }, - { - number: 336, - code: 1, - serial: 3361, - name: 'Seviper', - type1: 'Poison', - type2: '', - color: 'Black', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': 'Infiltrator', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 2.7, - weight: 52.5, - hp: 73, - atk: 100, - def: 60, - sp_atk: 100, - sp_def: 60, - spd: 65, - total: 458, - }, - { - number: 337, - code: 1, - serial: 3371, - name: 'Lunatone', - type1: 'Rock', - type2: 'Psychic', - color: 'Yellow', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 168, - hp: 90, - atk: 55, - def: 65, - sp_atk: 95, - sp_def: 85, - spd: 70, - total: 460, - }, - { - number: 338, - code: 1, - serial: 3381, - name: 'Solrock', - type1: 'Rock', - type2: 'Psychic', - color: 'Red', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 154, - hp: 90, - atk: 95, - def: 85, - sp_atk: 55, - sp_def: 65, - spd: 70, - total: 460, - }, - { - number: 339, - code: 1, - serial: 3391, - name: 'Barboach', - type1: 'Water', - type2: 'Ground', - color: 'Grey', - ability1: 'Oblivious', - ability2: 'Anticipation', - 'ability hidden': 'Hydration', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 1.9, - hp: 50, - atk: 48, - def: 43, - sp_atk: 46, - sp_def: 41, - spd: 60, - total: 288, - }, - { - number: 340, - code: 1, - serial: 3401, - name: 'Whiscash', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Oblivious', - ability2: 'Anticipation', - 'ability hidden': 'Hydration', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 23.6, - hp: 110, - atk: 78, - def: 73, - sp_atk: 76, - sp_def: 71, - spd: 60, - total: 468, - }, - { - number: 341, - code: 1, - serial: 3411, - name: 'Corphish', - type1: 'Water', - type2: '', - color: 'Red', - ability1: 'Hyper Cutter', - ability2: 'Shell Armor', - 'ability hidden': 'Adaptability', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 11.5, - hp: 43, - atk: 80, - def: 65, - sp_atk: 50, - sp_def: 35, - spd: 35, - total: 308, - }, - { - number: 342, - code: 1, - serial: 3421, - name: 'Crawdaunt', - type1: 'Water', - type2: 'Dark', - color: 'Red', - ability1: 'Hyper Cutter', - ability2: 'Shell Armor', - 'ability hidden': 'Adaptability', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 32.8, - hp: 63, - atk: 120, - def: 85, - sp_atk: 90, - sp_def: 55, - spd: 55, - total: 468, - }, - { - number: 343, - code: 1, - serial: 3431, - name: 'Baltoy', - type1: 'Ground', - type2: 'Psychic', - color: 'Brown', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 21.5, - hp: 40, - atk: 40, - def: 55, - sp_atk: 40, - sp_def: 70, - spd: 55, - total: 300, - }, - { - number: 344, - code: 1, - serial: 3441, - name: 'Claydol', - type1: 'Ground', - type2: 'Psychic', - color: 'Black', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 108, - hp: 60, - atk: 70, - def: 105, - sp_atk: 70, - sp_def: 120, - spd: 75, - total: 500, - }, - { - number: 345, - code: 1, - serial: 3451, - name: 'Lileep', - type1: 'Rock', - type2: 'Grass', - color: 'Purple', - ability1: 'Suction Cups', - ability2: '', - 'ability hidden': 'Storm Drain', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 23.8, - hp: 66, - atk: 41, - def: 77, - sp_atk: 61, - sp_def: 87, - spd: 23, - total: 355, - }, - { - number: 346, - code: 1, - serial: 3461, - name: 'Cradily', - type1: 'Rock', - type2: 'Grass', - color: 'Green', - ability1: 'Suction Cups', - ability2: '', - 'ability hidden': 'Storm Drain', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 60.4, - hp: 86, - atk: 81, - def: 97, - sp_atk: 81, - sp_def: 107, - spd: 43, - total: 495, - }, - { - number: 347, - code: 1, - serial: 3471, - name: 'Anorith', - type1: 'Rock', - type2: 'Bug', - color: 'Grey', - ability1: 'Battle Armor', - ability2: '', - 'ability hidden': 'Swift Swim', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 12.5, - hp: 45, - atk: 95, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 75, - total: 355, - }, - { - number: 348, - code: 1, - serial: 3481, - name: 'Armaldo', - type1: 'Rock', - type2: 'Bug', - color: 'Grey', - ability1: 'Battle Armor', - ability2: '', - 'ability hidden': 'Swift Swim', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 68.2, - hp: 75, - atk: 125, - def: 100, - sp_atk: 70, - sp_def: 80, - spd: 45, - total: 495, - }, - { - number: 349, - code: 1, - serial: 3491, - name: 'Feebas', - type1: 'Water', - type2: '', - color: 'Brown', - ability1: 'Swift Swim', - ability2: 'Oblivious', - 'ability hidden': 'Adaptability', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 7.4, - hp: 20, - atk: 15, - def: 20, - sp_atk: 10, - sp_def: 55, - spd: 80, - total: 200, - }, - { - number: 350, - code: 1, - serial: 3501, - name: 'Milotic', - type1: 'Water', - type2: '', - color: 'Pink', - ability1: 'Marvel Scale', - ability2: 'Competitive', - 'ability hidden': 'Cute Charm', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 6.2, - weight: 162, - hp: 95, - atk: 60, - def: 79, - sp_atk: 100, - sp_def: 125, - spd: 81, - total: 540, - }, - { - number: 351, - code: 1, - serial: 3511, - name: 'Castform', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'Forecast', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.8, - hp: 70, - atk: 70, - def: 70, - sp_atk: 70, - sp_def: 70, - spd: 70, - total: 420, - }, - { - number: 351, - code: 2, - serial: 3512, - name: 'Castform', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Forecast', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.8, - hp: 70, - atk: 70, - def: 70, - sp_atk: 70, - sp_def: 70, - spd: 70, - total: 420, - }, - { - number: 351, - code: 3, - serial: 3513, - name: 'Castform', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Forecast', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.8, - hp: 70, - atk: 70, - def: 70, - sp_atk: 70, - sp_def: 70, - spd: 70, - total: 420, - }, - { - number: 351, - code: 4, - serial: 3514, - name: 'Castform', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Forecast', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.8, - hp: 70, - atk: 70, - def: 70, - sp_atk: 70, - sp_def: 70, - spd: 70, - total: 420, - }, - { - number: 352, - code: 1, - serial: 3521, - name: 'Kecleon', - type1: 'Normal', - type2: '', - color: 'Green', - ability1: 'Color Change', - ability2: '', - 'ability hidden': 'Protean', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 22, - hp: 60, - atk: 90, - def: 70, - sp_atk: 60, - sp_def: 120, - spd: 40, - total: 440, - }, - { - number: 353, - code: 1, - serial: 3531, - name: 'Shuppet', - type1: 'Ghost', - type2: '', - color: 'Black', - ability1: 'Insomnia', - ability2: 'Frisk', - 'ability hidden': 'Cursed Body', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 2.3, - hp: 44, - atk: 75, - def: 35, - sp_atk: 63, - sp_def: 33, - spd: 45, - total: 295, - }, - { - number: 354, - code: 1, - serial: 3541, - name: 'Banette', - type1: 'Ghost', - type2: '', - color: 'Black', - ability1: 'Insomnia', - ability2: 'Frisk', - 'ability hidden': 'Cursed Body', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 12.5, - hp: 64, - atk: 115, - def: 65, - sp_atk: 83, - sp_def: 63, - spd: 65, - total: 455, - }, - { - number: 354, - code: 2, - serial: 3542, - name: 'Mega Banette', - type1: 'Ghost', - type2: '', - color: 'Black', - ability1: 'Prankster', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.2, - weight: 13, - hp: 64, - atk: 165, - def: 75, - sp_atk: 93, - sp_def: 83, - spd: 75, - total: 555, - }, - { - number: 355, - code: 1, - serial: 3551, - name: 'Duskull', - type1: 'Ghost', - type2: '', - color: 'Black', - ability1: 'Levitate', - ability2: '', - 'ability hidden': 'Frisk', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 15, - hp: 20, - atk: 40, - def: 90, - sp_atk: 30, - sp_def: 90, - spd: 25, - total: 295, - }, - { - number: 356, - code: 1, - serial: 3561, - name: 'Dusclops', - type1: 'Ghost', - type2: '', - color: 'Black', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Frisk', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 30.6, - hp: 40, - atk: 70, - def: 130, - sp_atk: 60, - sp_def: 130, - spd: 25, - total: 455, - }, - { - number: 357, - code: 1, - serial: 3571, - name: 'Tropius', - type1: 'Grass', - type2: 'Flying', - color: 'Green', - ability1: 'Chlorophyll', - ability2: 'Solar Power', - 'ability hidden': 'Harvest', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 100, - hp: 99, - atk: 68, - def: 83, - sp_atk: 72, - sp_def: 87, - spd: 51, - total: 460, - }, - { - number: 358, - code: 1, - serial: 3581, - name: 'Chimecho', - type1: 'Psychic', - type2: '', - color: 'Blue', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 1, - hp: 75, - atk: 50, - def: 80, - sp_atk: 95, - sp_def: 90, - spd: 65, - total: 455, - }, - { - number: 359, - code: 1, - serial: 3591, - name: 'Absol', - type1: 'Dark', - type2: '', - color: 'White', - ability1: 'Pressure', - ability2: 'Super Luck', - 'ability hidden': 'Justified', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 47, - hp: 65, - atk: 130, - def: 60, - sp_atk: 75, - sp_def: 60, - spd: 75, - total: 465, - }, - { - number: 359, - code: 2, - serial: 3592, - name: 'Mega Absol', - type1: 'Dark', - type2: '', - color: 'White', - ability1: 'Magic Bounce', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.2, - weight: 49, - hp: 65, - atk: 150, - def: 60, - sp_atk: 115, - sp_def: 60, - spd: 115, - total: 565, - }, - { - number: 360, - code: 1, - serial: 3601, - name: 'Wynaut', - type1: 'Psychic', - type2: '', - color: 'Blue', - ability1: 'Shadow Tag', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 14, - hp: 95, - atk: 23, - def: 48, - sp_atk: 23, - sp_def: 48, - spd: 23, - total: 260, - }, - { - number: 361, - code: 1, - serial: 3611, - name: 'Snorunt', - type1: 'Ice', - type2: '', - color: 'Grey', - ability1: 'Inner Focus', - ability2: 'Ice Body', - 'ability hidden': 'Moody', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 16.8, - hp: 50, - atk: 50, - def: 50, - sp_atk: 50, - sp_def: 50, - spd: 50, - total: 300, - }, - { - number: 362, - code: 1, - serial: 3621, - name: 'Glalie', - type1: 'Ice', - type2: '', - color: 'Grey', - ability1: 'Inner Focus', - ability2: 'Ice Body', - 'ability hidden': 'Moody', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 256.5, - hp: 80, - atk: 80, - def: 80, - sp_atk: 80, - sp_def: 80, - spd: 80, - total: 480, - }, - { - number: 362, - code: 2, - serial: 3622, - name: 'Mega Glalie', - type1: 'Ice', - type2: '', - color: 'Grey', - ability1: 'Refrigerate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 2.1, - weight: 350.2, - hp: 80, - atk: 120, - def: 80, - sp_atk: 120, - sp_def: 80, - spd: 100, - total: 580, - }, - { - number: 363, - code: 1, - serial: 3631, - name: 'Spheal', - type1: 'Ice', - type2: 'Water', - color: 'Blue', - ability1: 'Thick Fat', - ability2: 'Ice Body', - 'ability hidden': 'Oblivious', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 39.5, - hp: 70, - atk: 40, - def: 50, - sp_atk: 55, - sp_def: 50, - spd: 25, - total: 290, - }, - { - number: 364, - code: 1, - serial: 3641, - name: 'Sealeo', - type1: 'Ice', - type2: 'Water', - color: 'Blue', - ability1: 'Thick Fat', - ability2: 'Ice Body', - 'ability hidden': 'Oblivious', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 87.6, - hp: 90, - atk: 60, - def: 70, - sp_atk: 75, - sp_def: 70, - spd: 45, - total: 410, - }, - { - number: 365, - code: 1, - serial: 3651, - name: 'Walrein', - type1: 'Ice', - type2: 'Water', - color: 'Blue', - ability1: 'Thick Fat', - ability2: 'Ice Body', - 'ability hidden': 'Oblivious', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 150.6, - hp: 110, - atk: 80, - def: 90, - sp_atk: 95, - sp_def: 90, - spd: 65, - total: 530, - }, - { - number: 366, - code: 1, - serial: 3661, - name: 'Clamperl', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Shell Armor', - ability2: '', - 'ability hidden': 'Rattled', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 52.5, - hp: 35, - atk: 64, - def: 85, - sp_atk: 74, - sp_def: 55, - spd: 32, - total: 345, - }, - { - number: 367, - code: 1, - serial: 3671, - name: 'Huntail', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Water Veil', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 27, - hp: 55, - atk: 104, - def: 105, - sp_atk: 94, - sp_def: 75, - spd: 52, - total: 485, - }, - { - number: 368, - code: 1, - serial: 3681, - name: 'Gorebyss', - type1: 'Water', - type2: '', - color: 'Pink', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Hydration', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 22.6, - hp: 55, - atk: 84, - def: 105, - sp_atk: 114, - sp_def: 75, - spd: 52, - total: 485, - }, - { - number: 369, - code: 1, - serial: 3691, - name: 'Relicanth', - type1: 'Water', - type2: 'Rock', - color: 'Grey', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Sturdy', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 23.4, - hp: 100, - atk: 90, - def: 130, - sp_atk: 45, - sp_def: 65, - spd: 55, - total: 485, - }, - { - number: 370, - code: 1, - serial: 3701, - name: 'Luvdisc', - type1: 'Water', - type2: '', - color: 'Pink', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Hydration', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8.7, - hp: 43, - atk: 30, - def: 55, - sp_atk: 40, - sp_def: 65, - spd: 97, - total: 330, - }, - { - number: 371, - code: 1, - serial: 3711, - name: 'Bagon', - type1: 'Dragon', - type2: '', - color: 'Blue', - ability1: 'Rock Head', - ability2: '', - 'ability hidden': 'Sheer Force', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 42.1, - hp: 45, - atk: 75, - def: 60, - sp_atk: 40, - sp_def: 30, - spd: 50, - total: 300, - }, - { - number: 372, - code: 1, - serial: 3721, - name: 'Shelgon', - type1: 'Dragon', - type2: '', - color: 'White', - ability1: 'Rock Head', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 110.5, - hp: 65, - atk: 95, - def: 100, - sp_atk: 60, - sp_def: 50, - spd: 50, - total: 420, - }, - { - number: 373, - code: 1, - serial: 3731, - name: 'Salamence', - type1: 'Dragon', - type2: 'Flying', - color: 'Blue', - ability1: 'Intimidate', - ability2: '', - 'ability hidden': 'Moxie', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 102.6, - hp: 95, - atk: 135, - def: 80, - sp_atk: 110, - sp_def: 80, - spd: 100, - total: 600, - }, - { - number: 373, - code: 2, - serial: 3732, - name: 'Mega Salamence', - type1: 'Dragon', - type2: 'Flying', - color: 'Blue', - ability1: 'Aerilate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 1.8, - weight: 112.6, - hp: 95, - atk: 145, - def: 130, - sp_atk: 120, - sp_def: 90, - spd: 120, - total: 700, - }, - { - number: 374, - code: 1, - serial: 3741, - name: 'Beldum', - type1: 'Steel', - type2: 'Psychic', - color: 'Blue', - ability1: 'Clear Body', - ability2: '', - 'ability hidden': 'Light Metal', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 95.2, - hp: 40, - atk: 55, - def: 80, - sp_atk: 35, - sp_def: 60, - spd: 30, - total: 300, - }, - { - number: 375, - code: 1, - serial: 3751, - name: 'Metang', - type1: 'Steel', - type2: 'Psychic', - color: 'Blue', - ability1: 'Clear Body', - ability2: '', - 'ability hidden': 'Light Metal', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 202.5, - hp: 60, - atk: 75, - def: 100, - sp_atk: 55, - sp_def: 80, - spd: 50, - total: 420, - }, - { - number: 376, - code: 1, - serial: 3761, - name: 'Metagross', - type1: 'Steel', - type2: 'Psychic', - color: 'Blue', - ability1: 'Clear Body', - ability2: '', - 'ability hidden': 'Light Metal', - generation: 3, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 550, - hp: 80, - atk: 135, - def: 130, - sp_atk: 95, - sp_def: 90, - spd: 70, - total: 600, - }, - { - number: 376, - code: 2, - serial: 3762, - name: 'Mega Metagross', - type1: 'Steel', - type2: 'Psychic', - color: 'Blue', - ability1: 'Tough Claws', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 0, - mega_evolution: 1, - height: 2.5, - weight: 942.9, - hp: 80, - atk: 145, - def: 150, - sp_atk: 105, - sp_def: 110, - spd: 110, - total: 700, - }, - { - number: 377, - code: 1, - serial: 3771, - name: 'Regirock', - type1: 'Rock', - type2: '', - color: 'Brown', - ability1: 'Clear Body', - ability2: '', - 'ability hidden': 'Sturdy', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 1.7, - weight: 230, - hp: 80, - atk: 100, - def: 200, - sp_atk: 50, - sp_def: 100, - spd: 50, - total: 580, - }, - { - number: 378, - code: 1, - serial: 3781, - name: 'Regice', - type1: 'Ice', - type2: '', - color: 'Blue', - ability1: 'Clear Body', - ability2: '', - 'ability hidden': 'Ice Body', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 1.8, - weight: 175, - hp: 80, - atk: 50, - def: 100, - sp_atk: 100, - sp_def: 200, - spd: 50, - total: 580, - }, - { - number: 379, - code: 1, - serial: 3791, - name: 'Registeel', - type1: 'Steel', - type2: '', - color: 'Grey', - ability1: 'Clear Body', - ability2: '', - 'ability hidden': 'Light Metal', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 1.9, - weight: 205, - hp: 80, - atk: 75, - def: 150, - sp_atk: 75, - sp_def: 150, - spd: 50, - total: 580, - }, - { - number: 380, - code: 1, - serial: 3801, - name: 'Latias', - type1: 'Dragon', - type2: 'Psychic', - color: 'Red', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 1.4, - weight: 40, - hp: 80, - atk: 80, - def: 90, - sp_atk: 110, - sp_def: 130, - spd: 110, - total: 600, - }, - { - number: 380, - code: 2, - serial: 3802, - name: 'Mega Latias', - type1: 'Dragon', - type2: 'Psychic', - color: 'Purple', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 1, - height: 1.8, - weight: 52, - hp: 80, - atk: 100, - def: 120, - sp_atk: 140, - sp_def: 150, - spd: 110, - total: 700, - }, - { - number: 381, - code: 1, - serial: 3811, - name: 'Latios', - type1: 'Dragon', - type2: 'Psychic', - color: 'Blue', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 2, - weight: 60, - hp: 80, - atk: 90, - def: 80, - sp_atk: 130, - sp_def: 110, - spd: 110, - total: 600, - }, - { - number: 381, - code: 2, - serial: 3812, - name: 'Mega Latios', - type1: 'Dragon', - type2: 'Psychic', - color: 'Purple', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 1, - height: 2.3, - weight: 70, - hp: 80, - atk: 130, - def: 100, - sp_atk: 160, - sp_def: 120, - spd: 110, - total: 700, - }, - { - number: 382, - code: 1, - serial: 3821, - name: 'Kyogre', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Drizzle', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 4.5, - weight: 352, - hp: 100, - atk: 100, - def: 90, - sp_atk: 150, - sp_def: 140, - spd: 90, - total: 670, - }, - { - number: 382, - code: 2, - serial: 3822, - name: 'Primal Kyogre', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Primordial Sea', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 1, - height: 9.8, - weight: 430, - hp: 100, - atk: 150, - def: 90, - sp_atk: 180, - sp_def: 160, - spd: 90, - total: 770, - }, - { - number: 383, - code: 1, - serial: 3831, - name: 'Groudon', - type1: 'Ground', - type2: '', - color: 'Red', - ability1: 'Drought', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 3.5, - weight: 950, - hp: 100, - atk: 150, - def: 140, - sp_atk: 100, - sp_def: 90, - spd: 90, - total: 670, - }, - { - number: 383, - code: 2, - serial: 3832, - name: 'Primal Groudon', - type1: 'Ground', - type2: 'Fire', - color: 'Red', - ability1: 'Desolate Land', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 1, - height: 5, - weight: 999.7, - hp: 100, - atk: 180, - def: 160, - sp_atk: 150, - sp_def: 90, - spd: 90, - total: 770, - }, - { - number: 384, - code: 1, - serial: 3841, - name: 'Rayquaza', - type1: 'Dragon', - type2: 'Flying', - color: 'Green', - ability1: 'Air Lock', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 7, - weight: 206.5, - hp: 105, - atk: 150, - def: 90, - sp_atk: 150, - sp_def: 90, - spd: 95, - total: 680, - }, - { - number: 384, - code: 2, - serial: 3842, - name: 'Mega Rayquaza', - type1: 'Dragon', - type2: 'Flying', - color: 'Green', - ability1: 'Delta Stream', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 1, - height: 10.8, - weight: 392, - hp: 105, - atk: 180, - def: 100, - sp_atk: 180, - sp_def: 100, - spd: 115, - total: 780, - }, - { - number: 385, - code: 1, - serial: 3851, - name: 'Jirachi', - type1: 'Steel', - type2: 'Psychic', - color: 'Yellow', - ability1: 'Serene Grace', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 0.3, - weight: 1.1, - hp: 100, - atk: 100, - def: 100, - sp_atk: 100, - sp_def: 100, - spd: 100, - total: 600, - }, - { - number: 386, - code: 1, - serial: 3861, - name: 'Deoxys', - type1: 'Psychic', - type2: '', - color: 'Red', - ability1: 'Pressure', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 1.7, - weight: 60.8, - hp: 50, - atk: 150, - def: 50, - sp_atk: 150, - sp_def: 50, - spd: 150, - total: 600, - }, - { - number: 386, - code: 2, - serial: 3862, - name: 'Deoxys', - type1: 'Psychic', - type2: '', - color: 'Red', - ability1: 'Pressure', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 1.7, - weight: 60.8, - hp: 50, - atk: 180, - def: 20, - sp_atk: 180, - sp_def: 20, - spd: 150, - total: 600, - }, - { - number: 386, - code: 3, - serial: 3863, - name: 'Deoxys', - type1: 'Psychic', - type2: '', - color: 'Red', - ability1: 'Pressure', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 1.7, - weight: 60.8, - hp: 50, - atk: 70, - def: 160, - sp_atk: 70, - sp_def: 160, - spd: 90, - total: 600, - }, - { - number: 386, - code: 4, - serial: 3864, - name: 'Deoxys', - type1: 'Psychic', - type2: '', - color: 'Red', - ability1: 'Pressure', - ability2: '', - 'ability hidden': '', - generation: 3, - legendary: 1, - mega_evolution: 0, - height: 1.7, - weight: 60.8, - hp: 50, - atk: 95, - def: 90, - sp_atk: 95, - sp_def: 90, - spd: 180, - total: 600, - }, - { - number: 387, - code: 1, - serial: 3871, - name: 'Turtwig', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Shell Armor', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 10.2, - hp: 55, - atk: 68, - def: 64, - sp_atk: 45, - sp_def: 55, - spd: 31, - total: 318, - }, - { - number: 388, - code: 1, - serial: 3881, - name: 'Grotle', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Shell Armor', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 97, - hp: 75, - atk: 89, - def: 85, - sp_atk: 55, - sp_def: 65, - spd: 36, - total: 405, - }, - { - number: 389, - code: 1, - serial: 3891, - name: 'Torterra', - type1: 'Grass', - type2: 'Ground', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Shell Armor', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 2.2, - weight: 310, - hp: 95, - atk: 109, - def: 105, - sp_atk: 75, - sp_def: 85, - spd: 56, - total: 525, - }, - { - number: 390, - code: 1, - serial: 3901, - name: 'Chimchar', - type1: 'Fire', - type2: '', - color: 'Brown', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Iron Fist', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 6.2, - hp: 44, - atk: 58, - def: 44, - sp_atk: 58, - sp_def: 44, - spd: 61, - total: 309, - }, - { - number: 391, - code: 1, - serial: 3911, - name: 'Monferno', - type1: 'Fire', - type2: 'Fighting', - color: 'Brown', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Iron Fist', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 22, - hp: 64, - atk: 78, - def: 52, - sp_atk: 78, - sp_def: 52, - spd: 81, - total: 405, - }, - { - number: 392, - code: 1, - serial: 3921, - name: 'Infernape', - type1: 'Fire', - type2: 'Fighting', - color: 'Brown', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Iron Fist', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 55, - hp: 76, - atk: 104, - def: 71, - sp_atk: 104, - sp_def: 71, - spd: 108, - total: 534, - }, - { - number: 393, - code: 1, - serial: 3931, - name: 'Piplup', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Defiant', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5.2, - hp: 53, - atk: 51, - def: 53, - sp_atk: 61, - sp_def: 56, - spd: 40, - total: 314, - }, - { - number: 394, - code: 1, - serial: 3941, - name: 'Prinplup', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Defiant', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 23, - hp: 64, - atk: 66, - def: 68, - sp_atk: 81, - sp_def: 76, - spd: 50, - total: 405, - }, - { - number: 395, - code: 1, - serial: 3951, - name: 'Empoleon', - type1: 'Water', - type2: 'Steel', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Defiant', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 84.5, - hp: 84, - atk: 86, - def: 88, - sp_atk: 111, - sp_def: 101, - spd: 60, - total: 530, - }, - { - number: 396, - code: 1, - serial: 3961, - name: 'Starly', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Keen Eye', - ability2: '', - 'ability hidden': 'Reckless', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2, - hp: 40, - atk: 55, - def: 30, - sp_atk: 30, - sp_def: 30, - spd: 60, - total: 245, - }, - { - number: 397, - code: 1, - serial: 3971, - name: 'Staravia', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Intimidate', - ability2: '', - 'ability hidden': 'Reckless', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 15.5, - hp: 55, - atk: 75, - def: 50, - sp_atk: 40, - sp_def: 40, - spd: 80, - total: 340, - }, - { - number: 398, - code: 1, - serial: 3981, - name: 'Staraptor', - type1: 'Normal', - type2: 'Flying', - color: 'Brown', - ability1: 'Intimidate', - ability2: '', - 'ability hidden': 'Reckless', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 24.9, - hp: 85, - atk: 120, - def: 70, - sp_atk: 50, - sp_def: 60, - spd: 100, - total: 485, - }, - { - number: 399, - code: 1, - serial: 3991, - name: 'Bidoof', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Simple', - ability2: 'Unaware', - 'ability hidden': 'Moody', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 20, - hp: 59, - atk: 45, - def: 40, - sp_atk: 35, - sp_def: 40, - spd: 31, - total: 250, - }, - { - number: 400, - code: 1, - serial: 4001, - name: 'Bibarel', - type1: 'Normal', - type2: 'Water', - color: 'Brown', - ability1: 'Simple', - ability2: 'Unaware', - 'ability hidden': 'Moody', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 31.5, - hp: 79, - atk: 85, - def: 60, - sp_atk: 55, - sp_def: 60, - spd: 71, - total: 410, - }, - { - number: 401, - code: 1, - serial: 4011, - name: 'Kricketot', - type1: 'Bug', - type2: '', - color: 'Red', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': 'Run Away', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2.2, - hp: 37, - atk: 25, - def: 41, - sp_atk: 25, - sp_def: 41, - spd: 25, - total: 194, - }, - { - number: 402, - code: 1, - serial: 4021, - name: 'Kricketune', - type1: 'Bug', - type2: '', - color: 'Red', - ability1: 'Swarm', - ability2: '', - 'ability hidden': 'Technician', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 25.5, - hp: 77, - atk: 85, - def: 51, - sp_atk: 55, - sp_def: 51, - spd: 65, - total: 384, - }, - { - number: 403, - code: 1, - serial: 4031, - name: 'Shinx', - type1: 'Electric', - type2: '', - color: 'Blue', - ability1: 'Rivalry', - ability2: 'Intimidate', - 'ability hidden': 'Guts', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9.5, - hp: 45, - atk: 65, - def: 34, - sp_atk: 40, - sp_def: 34, - spd: 45, - total: 263, - }, - { - number: 404, - code: 1, - serial: 4041, - name: 'Luxio', - type1: 'Electric', - type2: '', - color: 'Blue', - ability1: 'Rivalry', - ability2: 'Intimidate', - 'ability hidden': 'Guts', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 30.5, - hp: 60, - atk: 85, - def: 49, - sp_atk: 60, - sp_def: 49, - spd: 60, - total: 363, - }, - { - number: 405, - code: 1, - serial: 4051, - name: 'Luxray', - type1: 'Electric', - type2: '', - color: 'Blue', - ability1: 'Rivalry', - ability2: 'Intimidate', - 'ability hidden': 'Guts', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 42, - hp: 80, - atk: 120, - def: 79, - sp_atk: 95, - sp_def: 79, - spd: 70, - total: 523, - }, - { - number: 406, - code: 1, - serial: 4061, - name: 'Budew', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Natural Cure', - ability2: 'Poison Point', - 'ability hidden': 'Leaf Guard', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 1.2, - hp: 40, - atk: 30, - def: 35, - sp_atk: 50, - sp_def: 70, - spd: 55, - total: 280, - }, - { - number: 407, - code: 1, - serial: 4071, - name: 'Roserade', - type1: 'Grass', - type2: 'Poison', - color: 'Green', - ability1: 'Natural Cure', - ability2: 'Poison Point', - 'ability hidden': 'Technician', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 14.5, - hp: 60, - atk: 70, - def: 65, - sp_atk: 125, - sp_def: 105, - spd: 90, - total: 515, - }, - { - number: 408, - code: 1, - serial: 4081, - name: 'Cranidos', - type1: 'Rock', - type2: '', - color: 'Blue', - ability1: 'Mold Breaker', - ability2: '', - 'ability hidden': 'Sheer Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 31.5, - hp: 67, - atk: 125, - def: 40, - sp_atk: 30, - sp_def: 30, - spd: 58, - total: 350, - }, - { - number: 409, - code: 1, - serial: 4091, - name: 'Rampardos', - type1: 'Rock', - type2: '', - color: 'Blue', - ability1: 'Mold Breaker', - ability2: '', - 'ability hidden': 'Sheer Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 102.5, - hp: 97, - atk: 165, - def: 60, - sp_atk: 65, - sp_def: 50, - spd: 58, - total: 495, - }, - { - number: 410, - code: 1, - serial: 4101, - name: 'Shieldon', - type1: 'Rock', - type2: 'Steel', - color: 'Grey', - ability1: 'Sturdy', - ability2: '', - 'ability hidden': 'Soundproof', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 57, - hp: 30, - atk: 42, - def: 118, - sp_atk: 42, - sp_def: 88, - spd: 30, - total: 350, - }, - { - number: 411, - code: 1, - serial: 4111, - name: 'Bastiodon', - type1: 'Rock', - type2: 'Steel', - color: 'Grey', - ability1: 'Sturdy', - ability2: '', - 'ability hidden': 'Soundproof', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 149.5, - hp: 60, - atk: 52, - def: 168, - sp_atk: 47, - sp_def: 138, - spd: 30, - total: 495, - }, - { - number: 412, - code: 1, - serial: 4121, - name: 'Burmy', - type1: 'Bug', - type2: '', - color: 'Green', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 3.4, - hp: 40, - atk: 29, - def: 45, - sp_atk: 29, - sp_def: 45, - spd: 36, - total: 224, - }, - { - number: 412, - code: 2, - serial: 4122, - name: 'Burmy', - type1: 'Bug', - type2: '', - color: 'Brown', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 3.4, - hp: 40, - atk: 29, - def: 45, - sp_atk: 29, - sp_def: 45, - spd: 36, - total: 224, - }, - { - number: 412, - code: 3, - serial: 4123, - name: 'Burmy', - type1: 'Bug', - type2: '', - color: 'Red', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 3.4, - hp: 40, - atk: 29, - def: 45, - sp_atk: 29, - sp_def: 45, - spd: 36, - total: 224, - }, - { - number: 413, - code: 1, - serial: 4131, - name: 'Wormadam', - type1: 'Bug', - type2: 'Grass', - color: 'Green', - ability1: 'Anticipation', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 6.5, - hp: 60, - atk: 59, - def: 85, - sp_atk: 79, - sp_def: 105, - spd: 36, - total: 424, - }, - { - number: 413, - code: 2, - serial: 4132, - name: 'Wormadam', - type1: 'Bug', - type2: 'Ground', - color: 'Brown', - ability1: 'Anticipation', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 6.5, - hp: 60, - atk: 79, - def: 105, - sp_atk: 59, - sp_def: 85, - spd: 36, - total: 424, - }, - { - number: 413, - code: 3, - serial: 4133, - name: 'Wormadam', - type1: 'Bug', - type2: 'Steel', - color: 'Red', - ability1: 'Anticipation', - ability2: '', - 'ability hidden': 'Overcoat', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 6.5, - hp: 60, - atk: 69, - def: 95, - sp_atk: 69, - sp_def: 95, - spd: 36, - total: 424, - }, - { - number: 414, - code: 1, - serial: 4141, - name: 'Mothim', - type1: 'Bug', - type2: 'Flying', - color: 'Yellow', - ability1: 'Swarm', - ability2: '', - 'ability hidden': 'Tinted Lens', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 23.3, - hp: 70, - atk: 94, - def: 50, - sp_atk: 94, - sp_def: 50, - spd: 66, - total: 424, - }, - { - number: 415, - code: 1, - serial: 4151, - name: 'Combee', - type1: 'Bug', - type2: 'Flying', - color: 'Yellow', - ability1: 'Honey Gather', - ability2: '', - 'ability hidden': 'Hustle', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 5.5, - hp: 30, - atk: 30, - def: 42, - sp_atk: 30, - sp_def: 42, - spd: 70, - total: 244, - }, - { - number: 416, - code: 1, - serial: 4161, - name: 'Vespiquen', - type1: 'Bug', - type2: 'Flying', - color: 'Yellow', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Unnerve', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 38.5, - hp: 70, - atk: 80, - def: 102, - sp_atk: 80, - sp_def: 102, - spd: 40, - total: 474, - }, - { - number: 417, - code: 1, - serial: 4171, - name: 'Pachirisu', - type1: 'Electric', - type2: '', - color: 'White', - ability1: 'Run Away', - ability2: 'Pickup', - 'ability hidden': 'Volt Absorb', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 3.9, - hp: 60, - atk: 45, - def: 70, - sp_atk: 45, - sp_def: 90, - spd: 95, - total: 405, - }, - { - number: 418, - code: 1, - serial: 4181, - name: 'Buizel', - type1: 'Water', - type2: '', - color: 'Brown', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Water Veil', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 29.5, - hp: 55, - atk: 65, - def: 35, - sp_atk: 60, - sp_def: 30, - spd: 85, - total: 330, - }, - { - number: 419, - code: 1, - serial: 4191, - name: 'Floatzel', - type1: 'Water', - type2: '', - color: 'Brown', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Water Veil', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 33.5, - hp: 85, - atk: 105, - def: 55, - sp_atk: 85, - sp_def: 50, - spd: 115, - total: 495, - }, - { - number: 420, - code: 1, - serial: 4201, - name: 'Cherubi', - type1: 'Grass', - type2: '', - color: 'Pink', - ability1: 'Chlorophyll', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 3.3, - hp: 45, - atk: 35, - def: 45, - sp_atk: 62, - sp_def: 53, - spd: 35, - total: 275, - }, - { - number: 421, - code: 1, - serial: 4211, - name: 'Cherrim', - type1: 'Grass', - type2: '', - color: 'Pink', - ability1: 'Flower Gift', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9.3, - hp: 70, - atk: 60, - def: 70, - sp_atk: 87, - sp_def: 78, - spd: 85, - total: 450, - }, - { - number: 421, - code: 2, - serial: 4212, - name: 'Cherrim', - type1: 'Grass', - type2: '', - color: 'Purple', - ability1: 'Flower Gift', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9.3, - hp: 70, - atk: 60, - def: 70, - sp_atk: 87, - sp_def: 78, - spd: 85, - total: 450, - }, - { - number: 422, - code: 1, - serial: 4221, - name: 'Shellos', - type1: 'Water', - type2: '', - color: 'Purple', - ability1: 'Sticky Hold', - ability2: 'Storm Drain', - 'ability hidden': 'Sand Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 6.3, - hp: 76, - atk: 48, - def: 48, - sp_atk: 57, - sp_def: 62, - spd: 34, - total: 325, - }, - { - number: 422, - code: 2, - serial: 4222, - name: 'Shellos', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Sticky Hold', - ability2: 'Storm Drain', - 'ability hidden': 'Sand Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 6.3, - hp: 76, - atk: 48, - def: 48, - sp_atk: 57, - sp_def: 62, - spd: 34, - total: 325, - }, - { - number: 423, - code: 1, - serial: 4231, - name: 'Gastrodon', - type1: 'Water', - type2: 'Ground', - color: 'Purple', - ability1: 'Sticky Hold', - ability2: 'Storm Drain', - 'ability hidden': 'Sand Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 29.9, - hp: 111, - atk: 83, - def: 68, - sp_atk: 92, - sp_def: 82, - spd: 39, - total: 475, - }, - { - number: 423, - code: 2, - serial: 4232, - name: 'Gastrodon', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Sticky Hold', - ability2: 'Storm Drain', - 'ability hidden': 'Sand Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 29.9, - hp: 111, - atk: 83, - def: 68, - sp_atk: 92, - sp_def: 82, - spd: 39, - total: 475, - }, - { - number: 424, - code: 1, - serial: 4241, - name: 'Ambipom', - type1: 'Normal', - type2: '', - color: 'Purple', - ability1: 'Technician', - ability2: 'Pickup', - 'ability hidden': 'Skill Link', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 20.3, - hp: 75, - atk: 100, - def: 66, - sp_atk: 60, - sp_def: 66, - spd: 115, - total: 482, - }, - { - number: 425, - code: 1, - serial: 4251, - name: 'Drifloon', - type1: 'Ghost', - type2: 'Flying', - color: 'Purple', - ability1: 'Aftermath', - ability2: 'Unburden', - 'ability hidden': 'Flare Boost', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 1.2, - hp: 90, - atk: 50, - def: 34, - sp_atk: 60, - sp_def: 44, - spd: 70, - total: 348, - }, - { - number: 426, - code: 1, - serial: 4261, - name: 'Drifblim', - type1: 'Ghost', - type2: 'Flying', - color: 'Purple', - ability1: 'Aftermath', - ability2: 'Unburden', - 'ability hidden': 'Flare Boost', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 15, - hp: 150, - atk: 80, - def: 44, - sp_atk: 90, - sp_def: 54, - spd: 80, - total: 498, - }, - { - number: 427, - code: 1, - serial: 4271, - name: 'Buneary', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Klutz', - 'ability hidden': 'Limber', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5.5, - hp: 55, - atk: 66, - def: 44, - sp_atk: 44, - sp_def: 56, - spd: 85, - total: 350, - }, - { - number: 428, - code: 1, - serial: 4281, - name: 'Lopunny', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Cute Charm', - ability2: 'Klutz', - 'ability hidden': 'Limber', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 33.3, - hp: 65, - atk: 76, - def: 84, - sp_atk: 54, - sp_def: 96, - spd: 105, - total: 480, - }, - { - number: 428, - code: 2, - serial: 4282, - name: 'Mega Lopunny', - type1: 'Normal', - type2: 'Fighting', - color: 'Brown', - ability1: 'Scrappy', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 1, - height: 1.3, - weight: 28.3, - hp: 65, - atk: 136, - def: 94, - sp_atk: 54, - sp_def: 96, - spd: 135, - total: 580, - }, - { - number: 429, - code: 1, - serial: 4291, - name: 'Mismagius', - type1: 'Ghost', - type2: '', - color: 'Purple', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 4.4, - hp: 60, - atk: 60, - def: 60, - sp_atk: 105, - sp_def: 105, - spd: 105, - total: 495, - }, - { - number: 430, - code: 1, - serial: 4301, - name: 'Honchkrow', - type1: 'Dark', - type2: 'Flying', - color: 'Black', - ability1: 'Insomnia', - ability2: 'Super Luck', - 'ability hidden': 'Moxie', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 27.3, - hp: 100, - atk: 125, - def: 52, - sp_atk: 105, - sp_def: 52, - spd: 71, - total: 505, - }, - { - number: 431, - code: 1, - serial: 4311, - name: 'Glameow', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'Limber', - ability2: 'Own Tempo', - 'ability hidden': 'Keen Eye', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 3.9, - hp: 49, - atk: 55, - def: 42, - sp_atk: 42, - sp_def: 37, - spd: 85, - total: 310, - }, - { - number: 432, - code: 1, - serial: 4321, - name: 'Purugly', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'Thick Fat', - ability2: 'Own Tempo', - 'ability hidden': 'Defiant', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 43.8, - hp: 71, - atk: 82, - def: 64, - sp_atk: 64, - sp_def: 59, - spd: 112, - total: 452, - }, - { - number: 433, - code: 1, - serial: 4331, - name: 'Chingling', - type1: 'Psychic', - type2: '', - color: 'Yellow', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.6, - hp: 45, - atk: 30, - def: 50, - sp_atk: 65, - sp_def: 50, - spd: 45, - total: 285, - }, - { - number: 434, - code: 1, - serial: 4341, - name: 'Stunky', - type1: 'Poison', - type2: 'Dark', - color: 'Purple', - ability1: 'Stench', - ability2: 'Aftermath', - 'ability hidden': 'Keen Eye', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 19.2, - hp: 63, - atk: 63, - def: 47, - sp_atk: 41, - sp_def: 41, - spd: 74, - total: 329, - }, - { - number: 435, - code: 1, - serial: 4351, - name: 'Skuntank', - type1: 'Poison', - type2: 'Dark', - color: 'Purple', - ability1: 'Stench', - ability2: 'Aftermath', - 'ability hidden': 'Keen Eye', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 38, - hp: 103, - atk: 93, - def: 67, - sp_atk: 71, - sp_def: 61, - spd: 84, - total: 479, - }, - { - number: 436, - code: 1, - serial: 4361, - name: 'Bronzor', - type1: 'Steel', - type2: 'Psychic', - color: 'Green', - ability1: 'Levitate', - ability2: 'Heatproof', - 'ability hidden': 'Heavy Metal', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 60.5, - hp: 57, - atk: 24, - def: 86, - sp_atk: 24, - sp_def: 86, - spd: 23, - total: 300, - }, - { - number: 437, - code: 1, - serial: 4371, - name: 'Bronzong', - type1: 'Steel', - type2: 'Psychic', - color: 'Green', - ability1: 'Levitate', - ability2: 'Heatproof', - 'ability hidden': 'Heavy Metal', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 187, - hp: 67, - atk: 89, - def: 116, - sp_atk: 79, - sp_def: 116, - spd: 33, - total: 500, - }, - { - number: 438, - code: 1, - serial: 4381, - name: 'Bonsly', - type1: 'Rock', - type2: '', - color: 'Brown', - ability1: 'Sturdy', - ability2: 'Rock Head', - 'ability hidden': 'Rattled', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 15, - hp: 50, - atk: 80, - def: 95, - sp_atk: 10, - sp_def: 45, - spd: 10, - total: 290, - }, - { - number: 439, - code: 1, - serial: 4391, - name: 'Mime Jr.', - type1: 'Psychic', - type2: 'Fairy', - color: 'Pink', - ability1: 'Soundproof', - ability2: 'Filter', - 'ability hidden': 'Technician', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 13, - hp: 20, - atk: 25, - def: 45, - sp_atk: 70, - sp_def: 90, - spd: 60, - total: 310, - }, - { - number: 440, - code: 1, - serial: 4401, - name: 'Happiny', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Natural cure', - ability2: 'Serene Grace', - 'ability hidden': 'Friend Guard', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 24.4, - hp: 100, - atk: 5, - def: 5, - sp_atk: 15, - sp_def: 65, - spd: 30, - total: 220, - }, - { - number: 441, - code: 1, - serial: 4411, - name: 'Chatot', - type1: 'Normal', - type2: 'Flying', - color: 'Black', - ability1: 'Keen Eye', - ability2: 'Tangled Feet', - 'ability hidden': 'Big Pecks', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 1.9, - hp: 76, - atk: 65, - def: 45, - sp_atk: 92, - sp_def: 42, - spd: 91, - total: 411, - }, - { - number: 442, - code: 1, - serial: 4421, - name: 'Spiritomb', - type1: 'Ghost', - type2: 'Dark', - color: 'Purple', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Infiltrator', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 108, - hp: 50, - atk: 92, - def: 108, - sp_atk: 92, - sp_def: 108, - spd: 35, - total: 485, - }, - { - number: 443, - code: 1, - serial: 4431, - name: 'Gible', - type1: 'Dragon', - type2: 'Ground', - color: 'Blue', - ability1: 'Sand Veil', - ability2: '', - 'ability hidden': 'Rough Skin', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 20.5, - hp: 58, - atk: 70, - def: 45, - sp_atk: 40, - sp_def: 45, - spd: 42, - total: 300, - }, - { - number: 444, - code: 1, - serial: 4441, - name: 'Gabite', - type1: 'Dragon', - type2: 'Ground', - color: 'Blue', - ability1: 'Sand Veil', - ability2: '', - 'ability hidden': 'Rough Skin', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 56, - hp: 68, - atk: 90, - def: 65, - sp_atk: 50, - sp_def: 55, - spd: 82, - total: 410, - }, - { - number: 445, - code: 1, - serial: 4451, - name: 'Garchomp', - type1: 'Dragon', - type2: 'Ground', - color: 'Blue', - ability1: 'Sand Veil', - ability2: '', - 'ability hidden': 'Rough Skin', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 95, - hp: 108, - atk: 130, - def: 95, - sp_atk: 80, - sp_def: 85, - spd: 102, - total: 600, - }, - { - number: 445, - code: 2, - serial: 4452, - name: 'Mega Garchomp', - type1: 'Dragon', - type2: 'Ground', - color: 'Blue', - ability1: 'Sand Force', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 1, - height: 1.9, - weight: 95, - hp: 108, - atk: 170, - def: 115, - sp_atk: 120, - sp_def: 95, - spd: 92, - total: 700, - }, - { - number: 446, - code: 1, - serial: 4461, - name: 'Munchlax', - type1: 'Normal', - type2: '', - color: 'Black', - ability1: 'Pickup', - ability2: 'Thick Fat', - 'ability hidden': 'Gluttony', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 105, - hp: 135, - atk: 85, - def: 40, - sp_atk: 40, - sp_def: 85, - spd: 5, - total: 390, - }, - { - number: 447, - code: 1, - serial: 4471, - name: 'Riolu', - type1: 'Fighting', - type2: '', - color: 'Blue', - ability1: 'Steadfast', - ability2: 'Inner Focus', - 'ability hidden': 'Prankster', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 20.2, - hp: 40, - atk: 70, - def: 40, - sp_atk: 35, - sp_def: 40, - spd: 60, - total: 285, - }, - { - number: 448, - code: 1, - serial: 4481, - name: 'Lucario', - type1: 'Fighting', - type2: 'Steel', - color: 'Blue', - ability1: 'Steadfast', - ability2: 'Inner Focus', - 'ability hidden': 'Justified', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 54, - hp: 70, - atk: 110, - def: 70, - sp_atk: 115, - sp_def: 70, - spd: 90, - total: 525, - }, - { - number: 448, - code: 2, - serial: 4482, - name: 'Mega Lucario', - type1: 'Fighting', - type2: 'Steel', - color: 'Blue', - ability1: 'Adaptability', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 1, - height: 1.3, - weight: 57.5, - hp: 70, - atk: 145, - def: 88, - sp_atk: 140, - sp_def: 70, - spd: 112, - total: 625, - }, - { - number: 449, - code: 1, - serial: 4491, - name: 'Hippopotas', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Sand Stream', - ability2: '', - 'ability hidden': 'Sand Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 49.5, - hp: 68, - atk: 72, - def: 78, - sp_atk: 38, - sp_def: 42, - spd: 32, - total: 330, - }, - { - number: 450, - code: 1, - serial: 4501, - name: 'Hippowdon', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Sand Stream', - ability2: '', - 'ability hidden': 'Sand Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 300, - hp: 108, - atk: 112, - def: 118, - sp_atk: 68, - sp_def: 72, - spd: 47, - total: 525, - }, - { - number: 451, - code: 1, - serial: 4511, - name: 'Skorupi', - type1: 'Poison', - type2: 'Bug', - color: 'Purple', - ability1: 'Battle Armor', - ability2: 'Sniper', - 'ability hidden': 'Keen Eye', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 12, - hp: 40, - atk: 50, - def: 90, - sp_atk: 30, - sp_def: 55, - spd: 65, - total: 330, - }, - { - number: 452, - code: 1, - serial: 4521, - name: 'Drapion', - type1: 'Poison', - type2: 'Dark', - color: 'Purple', - ability1: 'Battle Armor', - ability2: 'Sniper', - 'ability hidden': 'Keen Eye', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 61.5, - hp: 70, - atk: 90, - def: 110, - sp_atk: 60, - sp_def: 75, - spd: 95, - total: 500, - }, - { - number: 453, - code: 1, - serial: 4531, - name: 'Croagunk', - type1: 'Poison', - type2: 'Fighting', - color: 'Blue', - ability1: 'Anticipation', - ability2: 'Dry Skin', - 'ability hidden': 'Poison Touch', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 23, - hp: 48, - atk: 61, - def: 40, - sp_atk: 61, - sp_def: 40, - spd: 50, - total: 300, - }, - { - number: 454, - code: 1, - serial: 4541, - name: 'Toxicroak', - type1: 'Poison', - type2: 'Fighting', - color: 'Blue', - ability1: 'Anticipation', - ability2: 'Dry Skin', - 'ability hidden': 'Poison Touch', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 44.4, - hp: 83, - atk: 106, - def: 65, - sp_atk: 86, - sp_def: 65, - spd: 85, - total: 490, - }, - { - number: 455, - code: 1, - serial: 4551, - name: 'Carnivine', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 27, - hp: 74, - atk: 100, - def: 72, - sp_atk: 90, - sp_def: 72, - spd: 46, - total: 454, - }, - { - number: 456, - code: 1, - serial: 4561, - name: 'Finneon', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Storm Drain', - 'ability hidden': 'Water Veil', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 7, - hp: 49, - atk: 49, - def: 56, - sp_atk: 49, - sp_def: 61, - spd: 66, - total: 330, - }, - { - number: 457, - code: 1, - serial: 4571, - name: 'Lumineon', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Storm Drain', - 'ability hidden': 'Water Veil', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 24, - hp: 69, - atk: 69, - def: 76, - sp_atk: 69, - sp_def: 86, - spd: 91, - total: 460, - }, - { - number: 458, - code: 1, - serial: 4581, - name: 'Mantyke', - type1: 'Water', - type2: 'Flying', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Water Absorb', - 'ability hidden': 'Water Veil', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 65, - hp: 45, - atk: 20, - def: 50, - sp_atk: 60, - sp_def: 120, - spd: 50, - total: 345, - }, - { - number: 459, - code: 1, - serial: 4591, - name: 'Snover', - type1: 'Grass', - type2: 'Ice', - color: 'White', - ability1: 'Snow Warning', - ability2: '', - 'ability hidden': 'Soundproof', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 50.5, - hp: 60, - atk: 62, - def: 50, - sp_atk: 62, - sp_def: 60, - spd: 40, - total: 334, - }, - { - number: 460, - code: 1, - serial: 4601, - name: 'Abomasnow', - type1: 'Grass', - type2: 'Ice', - color: 'White', - ability1: 'Snow Warning', - ability2: '', - 'ability hidden': 'Soundproof', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 2.2, - weight: 135.5, - hp: 90, - atk: 92, - def: 75, - sp_atk: 92, - sp_def: 85, - spd: 60, - total: 494, - }, - { - number: 460, - code: 2, - serial: 4602, - name: 'Mega Abomasnow', - type1: 'Grass', - type2: 'Ice', - color: 'White', - ability1: 'Snow Warning', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 1, - height: 2.7, - weight: 185, - hp: 90, - atk: 132, - def: 105, - sp_atk: 132, - sp_def: 105, - spd: 30, - total: 594, - }, - { - number: 461, - code: 1, - serial: 4611, - name: 'Weavile', - type1: 'Dark', - type2: 'Ice', - color: 'Black', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Pickpocket', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 34, - hp: 70, - atk: 120, - def: 65, - sp_atk: 45, - sp_def: 85, - spd: 125, - total: 510, - }, - { - number: 462, - code: 1, - serial: 4621, - name: 'Magnezone', - type1: 'Electric', - type2: 'Steel', - color: 'Grey', - ability1: 'Magnet Pull', - ability2: 'Sturdy', - 'ability hidden': 'Analytic', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 180, - hp: 70, - atk: 70, - def: 115, - sp_atk: 130, - sp_def: 90, - spd: 60, - total: 535, - }, - { - number: 463, - code: 1, - serial: 4631, - name: 'Lickilicky', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Own Tempo', - ability2: 'Oblivious', - 'ability hidden': 'Cloud Nine', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 140, - hp: 110, - atk: 85, - def: 95, - sp_atk: 80, - sp_def: 95, - spd: 50, - total: 515, - }, - { - number: 464, - code: 1, - serial: 4641, - name: 'Rhyperior', - type1: 'Ground', - type2: 'Rock', - color: 'Grey', - ability1: 'Lightning Rod', - ability2: 'Solid Rock', - 'ability hidden': 'Reckless', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 2.4, - weight: 282.8, - hp: 115, - atk: 140, - def: 130, - sp_atk: 55, - sp_def: 55, - spd: 40, - total: 535, - }, - { - number: 465, - code: 1, - serial: 4651, - name: 'Tangrowth', - type1: 'Grass', - type2: '', - color: 'Blue', - ability1: 'Chlorophyll', - ability2: 'Leaf Guard', - 'ability hidden': 'Regenerator', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 128.6, - hp: 100, - atk: 100, - def: 125, - sp_atk: 110, - sp_def: 50, - spd: 50, - total: 535, - }, - { - number: 466, - code: 1, - serial: 4661, - name: 'Electivire', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Motor Drive', - ability2: '', - 'ability hidden': 'Vital Spilit', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 138.6, - hp: 75, - atk: 123, - def: 67, - sp_atk: 95, - sp_def: 85, - spd: 95, - total: 540, - }, - { - number: 467, - code: 1, - serial: 4671, - name: 'Magmortar', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Flame Body', - ability2: '', - 'ability hidden': 'Vital Spilit', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 68, - hp: 75, - atk: 95, - def: 67, - sp_atk: 125, - sp_def: 95, - spd: 83, - total: 540, - }, - { - number: 468, - code: 1, - serial: 4681, - name: 'Togekiss', - type1: 'Fairy', - type2: 'Flying', - color: 'White', - ability1: 'Hustle', - ability2: 'Serene Grace', - 'ability hidden': 'Super Luck', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 38, - hp: 85, - atk: 50, - def: 95, - sp_atk: 120, - sp_def: 115, - spd: 80, - total: 545, - }, - { - number: 469, - code: 1, - serial: 4691, - name: 'Yanmega', - type1: 'Bug', - type2: 'Flying', - color: 'Green', - ability1: 'Speed Boost', - ability2: 'Tinted Lens', - 'ability hidden': 'Frisk', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 51.5, - hp: 86, - atk: 76, - def: 86, - sp_atk: 116, - sp_def: 56, - spd: 95, - total: 515, - }, - { - number: 470, - code: 1, - serial: 4701, - name: 'Leafeon', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Leaf Guard', - ability2: '', - 'ability hidden': 'Chlorophyll', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 25.5, - hp: 65, - atk: 110, - def: 130, - sp_atk: 60, - sp_def: 65, - spd: 95, - total: 525, - }, - { - number: 471, - code: 1, - serial: 4711, - name: 'Glaceon', - type1: 'Ice', - type2: '', - color: 'Blue', - ability1: 'Snow Cloak', - ability2: '', - 'ability hidden': 'Ice Body', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 25.9, - hp: 65, - atk: 60, - def: 110, - sp_atk: 130, - sp_def: 95, - spd: 65, - total: 525, - }, - { - number: 472, - code: 1, - serial: 4721, - name: 'Gliscor', - type1: 'Ground', - type2: 'Flying', - color: 'Purple', - ability1: 'Hyper Cutter', - ability2: 'Sand Veil', - 'ability hidden': 'Poison Heal', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 42.5, - hp: 75, - atk: 95, - def: 125, - sp_atk: 45, - sp_def: 75, - spd: 95, - total: 510, - }, - { - number: 473, - code: 1, - serial: 4731, - name: 'Mamoswine', - type1: 'Ice', - type2: 'Ground', - color: 'Brown', - ability1: 'Oblivious', - ability2: 'Snow Cloak', - 'ability hidden': 'Thick Fat', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 2.5, - weight: 291, - hp: 110, - atk: 130, - def: 80, - sp_atk: 70, - sp_def: 60, - spd: 80, - total: 530, - }, - { - number: 474, - code: 1, - serial: 4741, - name: 'Porygon-Z', - type1: 'Normal', - type2: '', - color: 'Red', - ability1: 'Adaptability', - ability2: 'Download', - 'ability hidden': 'Analytic', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 34, - hp: 85, - atk: 80, - def: 70, - sp_atk: 135, - sp_def: 75, - spd: 90, - total: 535, - }, - { - number: 475, - code: 1, - serial: 4751, - name: 'Gallade', - type1: 'Psychic', - type2: 'Fighting', - color: 'White', - ability1: 'Steadfast', - ability2: '', - 'ability hidden': 'Justified', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 52, - hp: 68, - atk: 125, - def: 65, - sp_atk: 65, - sp_def: 115, - spd: 80, - total: 518, - }, - { - number: 475, - code: 2, - serial: 4752, - name: 'Mega Gallade', - type1: 'Psychic', - type2: 'Fighting', - color: 'White', - ability1: 'Inner Focus', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 1, - height: 1.6, - weight: 56.4, - hp: 68, - atk: 165, - def: 95, - sp_atk: 65, - sp_def: 115, - spd: 110, - total: 618, - }, - { - number: 476, - code: 1, - serial: 4761, - name: 'Probopass', - type1: 'Rock', - type2: 'Steel', - color: 'Grey', - ability1: 'Sturdy', - ability2: 'Magnet Pull', - 'ability hidden': 'Sand Force', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 340, - hp: 60, - atk: 55, - def: 145, - sp_atk: 75, - sp_def: 150, - spd: 40, - total: 525, - }, - { - number: 477, - code: 1, - serial: 4771, - name: 'Dusknoir', - type1: 'Ghost', - type2: '', - color: 'Black', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Frisk', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 2.2, - weight: 106.6, - hp: 45, - atk: 100, - def: 135, - sp_atk: 65, - sp_def: 135, - spd: 45, - total: 525, - }, - { - number: 478, - code: 1, - serial: 4781, - name: 'Froslass', - type1: 'Ice', - type2: 'Ghost', - color: 'White', - ability1: 'Snow Cloak', - ability2: '', - 'ability hidden': 'Cursed Body', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 26.6, - hp: 70, - atk: 80, - def: 70, - sp_atk: 80, - sp_def: 70, - spd: 110, - total: 480, - }, - { - number: 479, - code: 1, - serial: 4791, - name: 'Rotom', - type1: 'Electric', - type2: 'Ghost', - color: 'Red', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 50, - atk: 50, - def: 77, - sp_atk: 95, - sp_def: 77, - spd: 91, - total: 440, - }, - { - number: 479, - code: 2, - serial: 4792, - name: 'Rotom', - type1: 'Electric', - type2: 'Fire', - color: 'Red', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 50, - atk: 65, - def: 107, - sp_atk: 105, - sp_def: 107, - spd: 86, - total: 520, - }, - { - number: 479, - code: 3, - serial: 4793, - name: 'Rotom', - type1: 'Electric', - type2: 'Water', - color: 'Red', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 50, - atk: 65, - def: 107, - sp_atk: 105, - sp_def: 107, - spd: 86, - total: 520, - }, - { - number: 479, - code: 4, - serial: 4794, - name: 'Rotom', - type1: 'Electric', - type2: 'Ice', - color: 'Red', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 50, - atk: 65, - def: 107, - sp_atk: 105, - sp_def: 107, - spd: 86, - total: 520, - }, - { - number: 479, - code: 5, - serial: 4795, - name: 'Rotom', - type1: 'Electric', - type2: 'Flying', - color: 'Red', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 50, - atk: 65, - def: 107, - sp_atk: 105, - sp_def: 107, - spd: 86, - total: 520, - }, - { - number: 479, - code: 6, - serial: 4796, - name: 'Rotom', - type1: 'Electric', - type2: 'Grass', - color: 'Red', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 50, - atk: 65, - def: 107, - sp_atk: 105, - sp_def: 107, - spd: 86, - total: 520, - }, - { - number: 480, - code: 1, - serial: 4801, - name: 'Uxie', - type1: 'Psychic', - type2: '', - color: 'Yellow', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 75, - atk: 75, - def: 130, - sp_atk: 75, - sp_def: 130, - spd: 95, - total: 580, - }, - { - number: 481, - code: 1, - serial: 4811, - name: 'Mesprit', - type1: 'Psychic', - type2: '', - color: 'Pink', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 80, - atk: 105, - def: 105, - sp_atk: 105, - sp_def: 105, - spd: 80, - total: 580, - }, - { - number: 482, - code: 1, - serial: 4821, - name: 'Azelf', - type1: 'Psychic', - type2: '', - color: 'Blue', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 75, - atk: 125, - def: 70, - sp_atk: 125, - sp_def: 70, - spd: 115, - total: 580, - }, - { - number: 483, - code: 1, - serial: 4831, - name: 'Dialga', - type1: 'Steel', - type2: 'Dragon', - color: 'White', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 5.4, - weight: 683, - hp: 100, - atk: 120, - def: 120, - sp_atk: 150, - sp_def: 100, - spd: 90, - total: 680, - }, - { - number: 484, - code: 1, - serial: 4841, - name: 'Palkia', - type1: 'Water', - type2: 'Dragon', - color: 'Purple', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 4.2, - weight: 336, - hp: 90, - atk: 120, - def: 100, - sp_atk: 150, - sp_def: 120, - spd: 100, - total: 680, - }, - { - number: 485, - code: 1, - serial: 4851, - name: 'Heatran', - type1: 'Fire', - type2: 'Steel', - color: 'Brown', - ability1: 'Flash Fire', - ability2: '', - 'ability hidden': 'Flame Body', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 1.7, - weight: 430, - hp: 91, - atk: 90, - def: 106, - sp_atk: 130, - sp_def: 106, - spd: 77, - total: 600, - }, - { - number: 486, - code: 1, - serial: 4861, - name: 'Regigigas', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Slow Start', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 3.7, - weight: 420, - hp: 110, - atk: 160, - def: 110, - sp_atk: 80, - sp_def: 110, - spd: 100, - total: 670, - }, - { - number: 487, - code: 1, - serial: 4871, - name: 'Giratina', - type1: 'Ghost', - type2: 'Dragon', - color: 'Black', - ability1: 'Pressure', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 4.5, - weight: 750, - hp: 150, - atk: 100, - def: 120, - sp_atk: 100, - sp_def: 120, - spd: 90, - total: 680, - }, - { - number: 487, - code: 2, - serial: 4872, - name: 'Giratina', - type1: 'Ghost', - type2: 'Dragon', - color: 'Black', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 6.9, - weight: 650, - hp: 150, - atk: 120, - def: 100, - sp_atk: 120, - sp_def: 100, - spd: 90, - total: 680, - }, - { - number: 488, - code: 1, - serial: 4881, - name: 'Cresselia', - type1: 'Psychic', - type2: '', - color: 'Yellow', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 1.5, - weight: 85.6, - hp: 120, - atk: 70, - def: 120, - sp_atk: 75, - sp_def: 130, - spd: 85, - total: 600, - }, - { - number: 489, - code: 1, - serial: 4891, - name: 'Phione', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Hydration', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 0.4, - weight: 3.1, - hp: 80, - atk: 80, - def: 80, - sp_atk: 80, - sp_def: 80, - spd: 80, - total: 480, - }, - { - number: 490, - code: 1, - serial: 4901, - name: 'Manaphy', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Hydration', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 0.3, - weight: 1.4, - hp: 100, - atk: 100, - def: 100, - sp_atk: 100, - sp_def: 100, - spd: 100, - total: 600, - }, - { - number: 491, - code: 1, - serial: 4911, - name: 'Darkrai', - type1: 'Dark', - type2: '', - color: 'Black', - ability1: 'Bad Dreams', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 1.5, - weight: 50.5, - hp: 70, - atk: 90, - def: 90, - sp_atk: 135, - sp_def: 90, - spd: 125, - total: 600, - }, - { - number: 492, - code: 1, - serial: 4921, - name: 'Shaymin', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Natural cure', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 0.2, - weight: 2.1, - hp: 100, - atk: 100, - def: 100, - sp_atk: 100, - sp_def: 100, - spd: 100, - total: 600, - }, - { - number: 492, - code: 2, - serial: 4922, - name: 'Shaymin', - type1: 'Grass', - type2: 'Flying', - color: 'Green', - ability1: 'Serene Grace', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 0.4, - weight: 5.2, - hp: 100, - atk: 103, - def: 75, - sp_atk: 120, - sp_def: 75, - spd: 127, - total: 600, - }, - { - number: 493, - code: 1, - serial: 4931, - name: 'Arceus', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Multitype', - ability2: '', - 'ability hidden': '', - generation: 4, - legendary: 1, - mega_evolution: 0, - height: 3.2, - weight: 320, - hp: 120, - atk: 120, - def: 120, - sp_atk: 120, - sp_def: 120, - spd: 120, - total: 720, - }, - { - number: 494, - code: 1, - serial: 4941, - name: 'Victini', - type1: 'Psychic', - type2: 'Fire', - color: 'Yellow', - ability1: 'Victory Star', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 0.4, - weight: 4, - hp: 100, - atk: 100, - def: 100, - sp_atk: 100, - sp_def: 100, - spd: 100, - total: 600, - }, - { - number: 495, - code: 1, - serial: 4951, - name: 'Snivy', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Contrary', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8.1, - hp: 45, - atk: 45, - def: 55, - sp_atk: 45, - sp_def: 55, - spd: 63, - total: 308, - }, - { - number: 496, - code: 1, - serial: 4961, - name: 'Servine', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Contrary', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 16, - hp: 60, - atk: 60, - def: 75, - sp_atk: 60, - sp_def: 75, - spd: 83, - total: 413, - }, - { - number: 497, - code: 1, - serial: 4971, - name: 'Serperior', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Contrary', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 3.3, - weight: 63, - hp: 75, - atk: 75, - def: 95, - sp_atk: 75, - sp_def: 95, - spd: 113, - total: 528, - }, - { - number: 498, - code: 1, - serial: 4981, - name: 'Tepig', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Thick Fat', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9.9, - hp: 65, - atk: 63, - def: 45, - sp_atk: 45, - sp_def: 45, - spd: 45, - total: 308, - }, - { - number: 499, - code: 1, - serial: 4991, - name: 'Pignite', - type1: 'Fire', - type2: 'Fighting', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Thick Fat', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 55.5, - hp: 90, - atk: 93, - def: 55, - sp_atk: 70, - sp_def: 55, - spd: 55, - total: 418, - }, - { - number: 500, - code: 1, - serial: 5001, - name: 'Emboar', - type1: 'Fire', - type2: 'Fighting', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Reckless', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 150, - hp: 110, - atk: 123, - def: 65, - sp_atk: 100, - sp_def: 65, - spd: 65, - total: 528, - }, - { - number: 501, - code: 1, - serial: 5011, - name: 'Oshawott', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Shell Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 5.9, - hp: 55, - atk: 55, - def: 45, - sp_atk: 63, - sp_def: 45, - spd: 45, - total: 308, - }, - { - number: 502, - code: 1, - serial: 5021, - name: 'Dewott', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Shell Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 24.5, - hp: 75, - atk: 75, - def: 60, - sp_atk: 83, - sp_def: 60, - spd: 60, - total: 413, - }, - { - number: 503, - code: 1, - serial: 5031, - name: 'Samurott', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Shell Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 94.6, - hp: 95, - atk: 100, - def: 85, - sp_atk: 108, - sp_def: 70, - spd: 70, - total: 528, - }, - { - number: 504, - code: 1, - serial: 5041, - name: 'Patrat', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Keen Eye', - 'ability hidden': 'Analytic', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 11.6, - hp: 45, - atk: 55, - def: 39, - sp_atk: 35, - sp_def: 39, - spd: 42, - total: 255, - }, - { - number: 505, - code: 1, - serial: 5051, - name: 'Watchog', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Illuminate', - ability2: 'Keen Eye', - 'ability hidden': 'Analytic', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 27, - hp: 60, - atk: 85, - def: 69, - sp_atk: 60, - sp_def: 69, - spd: 77, - total: 420, - }, - { - number: 506, - code: 1, - serial: 5061, - name: 'Lillipup', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Vital Spilit', - ability2: 'Pickup', - 'ability hidden': 'Run Away', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 4.1, - hp: 45, - atk: 60, - def: 45, - sp_atk: 25, - sp_def: 45, - spd: 55, - total: 275, - }, - { - number: 507, - code: 1, - serial: 5071, - name: 'Herdier', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'Intimidate', - ability2: 'Sand Rush', - 'ability hidden': 'Scrappy', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 14.7, - hp: 65, - atk: 80, - def: 65, - sp_atk: 35, - sp_def: 65, - spd: 60, - total: 370, - }, - { - number: 508, - code: 1, - serial: 5081, - name: 'Stoutland', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'Intimidate', - ability2: 'Sand Rush', - 'ability hidden': 'Scrappy', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 61, - hp: 85, - atk: 110, - def: 90, - sp_atk: 45, - sp_def: 90, - spd: 80, - total: 500, - }, - { - number: 509, - code: 1, - serial: 5091, - name: 'Purrloin', - type1: 'Dark', - type2: '', - color: 'Purple', - ability1: 'Limber', - ability2: 'Unburden', - 'ability hidden': 'Prankster', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 10.1, - hp: 41, - atk: 50, - def: 37, - sp_atk: 50, - sp_def: 37, - spd: 66, - total: 281, - }, - { - number: 510, - code: 1, - serial: 5101, - name: 'Liepard', - type1: 'Dark', - type2: '', - color: 'Purple', - ability1: 'Limber', - ability2: 'Unburden', - 'ability hidden': 'Prankster', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 37.5, - hp: 64, - atk: 88, - def: 50, - sp_atk: 88, - sp_def: 50, - spd: 106, - total: 446, - }, - { - number: 511, - code: 1, - serial: 5111, - name: 'Pansage', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Gluttony', - ability2: '', - 'ability hidden': 'Overgrow', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 10.5, - hp: 50, - atk: 53, - def: 48, - sp_atk: 53, - sp_def: 48, - spd: 64, - total: 316, - }, - { - number: 512, - code: 1, - serial: 5121, - name: 'Simisage', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Gluttony', - ability2: '', - 'ability hidden': 'Overgrow', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 30.5, - hp: 75, - atk: 98, - def: 63, - sp_atk: 98, - sp_def: 63, - spd: 101, - total: 498, - }, - { - number: 513, - code: 1, - serial: 5131, - name: 'Pansear', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Gluttony', - ability2: '', - 'ability hidden': 'Blaze', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 11, - hp: 50, - atk: 53, - def: 48, - sp_atk: 53, - sp_def: 48, - spd: 64, - total: 316, - }, - { - number: 514, - code: 1, - serial: 5141, - name: 'Simisear', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Gluttony', - ability2: '', - 'ability hidden': 'Blaze', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 28, - hp: 75, - atk: 98, - def: 63, - sp_atk: 98, - sp_def: 63, - spd: 101, - total: 498, - }, - { - number: 515, - code: 1, - serial: 5151, - name: 'Panpour', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Gluttony', - ability2: '', - 'ability hidden': 'Torrent', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 13.5, - hp: 50, - atk: 53, - def: 48, - sp_atk: 53, - sp_def: 48, - spd: 64, - total: 316, - }, - { - number: 516, - code: 1, - serial: 5161, - name: 'Simipour', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Gluttony', - ability2: '', - 'ability hidden': 'Torrent', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 29, - hp: 75, - atk: 98, - def: 63, - sp_atk: 98, - sp_def: 63, - spd: 101, - total: 498, - }, - { - number: 517, - code: 1, - serial: 5171, - name: 'Munna', - type1: 'Psychic', - type2: '', - color: 'Pink', - ability1: 'Forewarn', - ability2: 'Synchronize', - 'ability hidden': 'Telepathy', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 23.3, - hp: 76, - atk: 25, - def: 45, - sp_atk: 67, - sp_def: 55, - spd: 24, - total: 292, - }, - { - number: 518, - code: 1, - serial: 5181, - name: 'Musharna', - type1: 'Psychic', - type2: '', - color: 'Pink', - ability1: 'Forewarn', - ability2: 'Synchronize', - 'ability hidden': 'Telepathy', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 60.5, - hp: 116, - atk: 55, - def: 85, - sp_atk: 107, - sp_def: 95, - spd: 29, - total: 487, - }, - { - number: 519, - code: 1, - serial: 5191, - name: 'Pidove', - type1: 'Normal', - type2: 'Flying', - color: 'Grey', - ability1: 'Big Pecks', - ability2: 'Super Luck', - 'ability hidden': 'Rivalry', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2.1, - hp: 50, - atk: 55, - def: 50, - sp_atk: 36, - sp_def: 30, - spd: 43, - total: 264, - }, - { - number: 520, - code: 1, - serial: 5201, - name: 'Tranquill', - type1: 'Normal', - type2: 'Flying', - color: 'Grey', - ability1: 'Big Pecks', - ability2: 'Super Luck', - 'ability hidden': 'Rivalry', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 15, - hp: 62, - atk: 77, - def: 62, - sp_atk: 50, - sp_def: 42, - spd: 65, - total: 358, - }, - { - number: 521, - code: 1, - serial: 5211, - name: 'Unfezant', - type1: 'Normal', - type2: 'Flying', - color: 'Grey', - ability1: 'Big Pecks', - ability2: 'Super Luck', - 'ability hidden': 'Rivalry', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 29, - hp: 80, - atk: 115, - def: 80, - sp_atk: 65, - sp_def: 55, - spd: 93, - total: 488, - }, - { - number: 522, - code: 1, - serial: 5221, - name: 'Blitzle', - type1: 'Electric', - type2: '', - color: 'Black', - ability1: 'Lightning Rod', - ability2: 'Motor Drive', - 'ability hidden': 'Sap Sipper', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 29.8, - hp: 45, - atk: 60, - def: 32, - sp_atk: 50, - sp_def: 32, - spd: 76, - total: 295, - }, - { - number: 523, - code: 1, - serial: 5231, - name: 'Zebstrika', - type1: 'Electric', - type2: '', - color: 'Black', - ability1: 'Lightning Rod', - ability2: 'Motor Drive', - 'ability hidden': 'Sap Sipper', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 79.5, - hp: 75, - atk: 100, - def: 63, - sp_atk: 80, - sp_def: 63, - spd: 116, - total: 497, - }, - { - number: 524, - code: 1, - serial: 5241, - name: 'Roggenrola', - type1: 'Rock', - type2: '', - color: 'Blue', - ability1: 'Sturdy', - ability2: 'Weak Armor', - 'ability hidden': 'Sand Force', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 18, - hp: 55, - atk: 75, - def: 85, - sp_atk: 25, - sp_def: 25, - spd: 15, - total: 280, - }, - { - number: 525, - code: 1, - serial: 5251, - name: 'Boldore', - type1: 'Rock', - type2: '', - color: 'Blue', - ability1: 'Sturdy', - ability2: 'Weak Armor', - 'ability hidden': 'Sand Force', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 102, - hp: 70, - atk: 105, - def: 105, - sp_atk: 50, - sp_def: 40, - spd: 20, - total: 390, - }, - { - number: 526, - code: 1, - serial: 5261, - name: 'Gigalith', - type1: 'Rock', - type2: '', - color: 'Blue', - ability1: 'Sturdy', - ability2: 'Sand Stream', - 'ability hidden': 'Sand Force', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 260, - hp: 85, - atk: 135, - def: 130, - sp_atk: 60, - sp_def: 80, - spd: 25, - total: 515, - }, - { - number: 527, - code: 1, - serial: 5271, - name: 'Woobat', - type1: 'Psychic', - type2: 'Flying', - color: 'Blue', - ability1: 'Unaware', - ability2: 'Klutz', - 'ability hidden': 'Simple', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 2.1, - hp: 65, - atk: 45, - def: 43, - sp_atk: 55, - sp_def: 43, - spd: 72, - total: 323, - }, - { - number: 528, - code: 1, - serial: 5281, - name: 'Swoobat', - type1: 'Psychic', - type2: 'Flying', - color: 'Blue', - ability1: 'Unaware', - ability2: 'Klutz', - 'ability hidden': 'Simple', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 10.5, - hp: 67, - atk: 57, - def: 55, - sp_atk: 77, - sp_def: 55, - spd: 114, - total: 425, - }, - { - number: 529, - code: 1, - serial: 5291, - name: 'Drilbur', - type1: 'Ground', - type2: '', - color: 'Grey', - ability1: 'Sand Rush', - ability2: 'Sand Force', - 'ability hidden': 'Mold Breaker', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 8.5, - hp: 60, - atk: 85, - def: 40, - sp_atk: 30, - sp_def: 45, - spd: 68, - total: 328, - }, - { - number: 530, - code: 1, - serial: 5301, - name: 'Excadrill', - type1: 'Ground', - type2: 'Steel', - color: 'Grey', - ability1: 'Sand Rush', - ability2: 'Sand Force', - 'ability hidden': 'Mold Breaker', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 40.4, - hp: 110, - atk: 135, - def: 60, - sp_atk: 50, - sp_def: 65, - spd: 88, - total: 508, - }, - { - number: 531, - code: 1, - serial: 5311, - name: 'Audino', - type1: 'Normal', - type2: '', - color: 'Pink', - ability1: 'Healer', - ability2: 'Regenerator', - 'ability hidden': 'Klutz', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 31, - hp: 103, - atk: 60, - def: 86, - sp_atk: 60, - sp_def: 86, - spd: 50, - total: 445, - }, - { - number: 531, - code: 2, - serial: 5312, - name: 'Mega Audino', - type1: 'Normal', - type2: 'Fairy', - color: 'White', - ability1: 'Healer', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 1, - height: 1.5, - weight: 32, - hp: 103, - atk: 60, - def: 126, - sp_atk: 80, - sp_def: 126, - spd: 50, - total: 545, - }, - { - number: 532, - code: 1, - serial: 5321, - name: 'Timburr', - type1: 'Fighting', - type2: '', - color: 'Grey', - ability1: 'Guts', - ability2: 'Sheer Force', - 'ability hidden': 'Iron Fist', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 12.5, - hp: 75, - atk: 80, - def: 55, - sp_atk: 25, - sp_def: 35, - spd: 35, - total: 305, - }, - { - number: 533, - code: 1, - serial: 5331, - name: 'Gurdurr', - type1: 'Fighting', - type2: '', - color: 'Grey', - ability1: 'Guts', - ability2: 'Sheer Force', - 'ability hidden': 'Iron Fist', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 40, - hp: 85, - atk: 105, - def: 85, - sp_atk: 40, - sp_def: 50, - spd: 40, - total: 405, - }, - { - number: 534, - code: 1, - serial: 5341, - name: 'Conkeldurr', - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Guts', - ability2: 'Sheer Force', - 'ability hidden': 'Iron Fist', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 87, - hp: 105, - atk: 140, - def: 95, - sp_atk: 55, - sp_def: 65, - spd: 45, - total: 505, - }, - { - number: 535, - code: 1, - serial: 5351, - name: 'Tympole', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Hydration', - 'ability hidden': 'Water Absorb', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 4.5, - hp: 50, - atk: 50, - def: 40, - sp_atk: 50, - sp_def: 40, - spd: 64, - total: 294, - }, - { - number: 536, - code: 1, - serial: 5361, - name: 'Palpitoad', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Hydration', - 'ability hidden': 'Water Absorb', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 17, - hp: 75, - atk: 65, - def: 55, - sp_atk: 65, - sp_def: 55, - spd: 69, - total: 384, - }, - { - number: 537, - code: 1, - serial: 5371, - name: 'Seismitoad', - type1: 'Water', - type2: 'Ground', - color: 'Blue', - ability1: 'Swift Swim', - ability2: 'Poison Touch', - 'ability hidden': 'Water Absorb', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 62, - hp: 105, - atk: 95, - def: 75, - sp_atk: 85, - sp_def: 75, - spd: 74, - total: 509, - }, - { - number: 538, - code: 1, - serial: 5381, - name: 'Throh', - type1: 'Fighting', - type2: '', - color: 'Red', - ability1: 'Guts', - ability2: 'Inner Focus', - 'ability hidden': 'Mold Breaker', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 55.5, - hp: 120, - atk: 100, - def: 85, - sp_atk: 30, - sp_def: 85, - spd: 45, - total: 465, - }, - { - number: 539, - code: 1, - serial: 5391, - name: 'Sawk', - type1: 'Fighting', - type2: '', - color: 'Blue', - ability1: 'Sturdy', - ability2: 'Inner Focus', - 'ability hidden': 'Mold Breaker', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 51, - hp: 75, - atk: 125, - def: 75, - sp_atk: 30, - sp_def: 75, - spd: 85, - total: 465, - }, - { - number: 540, - code: 1, - serial: 5401, - name: 'Sewaddle', - type1: 'Bug', - type2: 'Grass', - color: 'Yellow', - ability1: 'Swarm', - ability2: 'Chlorophyll', - 'ability hidden': 'Overcoat', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2.5, - hp: 45, - atk: 53, - def: 70, - sp_atk: 40, - sp_def: 60, - spd: 42, - total: 310, - }, - { - number: 541, - code: 1, - serial: 5411, - name: 'Swadloon', - type1: 'Bug', - type2: 'Grass', - color: 'Green', - ability1: 'Leaf guard', - ability2: 'Chlorophyll', - 'ability hidden': 'Overcoat', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 7.3, - hp: 55, - atk: 63, - def: 90, - sp_atk: 50, - sp_def: 80, - spd: 42, - total: 380, - }, - { - number: 542, - code: 1, - serial: 5421, - name: 'Leavanny', - type1: 'Bug', - type2: 'Grass', - color: 'Yellow', - ability1: 'Swarm', - ability2: 'Chlorophyll', - 'ability hidden': 'Overcoat', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 20.5, - hp: 75, - atk: 103, - def: 80, - sp_atk: 70, - sp_def: 80, - spd: 92, - total: 500, - }, - { - number: 543, - code: 1, - serial: 5431, - name: 'Venipede', - type1: 'Bug', - type2: 'Poison', - color: 'Red', - ability1: 'Poison Point', - ability2: 'Swarm', - 'ability hidden': 'Speed Boost', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5.3, - hp: 30, - atk: 45, - def: 59, - sp_atk: 30, - sp_def: 39, - spd: 57, - total: 260, - }, - { - number: 544, - code: 1, - serial: 5441, - name: 'Whirlipede', - type1: 'Bug', - type2: 'Poison', - color: 'Grey', - ability1: 'Poison Point', - ability2: 'Swarm', - 'ability hidden': 'Speed Boost', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 58.5, - hp: 40, - atk: 55, - def: 99, - sp_atk: 40, - sp_def: 79, - spd: 47, - total: 360, - }, - { - number: 545, - code: 1, - serial: 5451, - name: 'Scolipede', - type1: 'Bug', - type2: 'Poison', - color: 'Red', - ability1: 'Poison Point', - ability2: 'Swarm', - 'ability hidden': 'Speed Boost', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 200.5, - hp: 60, - atk: 100, - def: 89, - sp_atk: 55, - sp_def: 69, - spd: 112, - total: 485, - }, - { - number: 546, - code: 1, - serial: 5461, - name: 'Cottonee', - type1: 'Grass', - type2: 'Fairy', - color: 'Green', - ability1: 'Prankster', - ability2: 'Infiltrator', - 'ability hidden': 'Chlorophyll', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.6, - hp: 40, - atk: 27, - def: 60, - sp_atk: 37, - sp_def: 50, - spd: 66, - total: 280, - }, - { - number: 547, - code: 1, - serial: 5471, - name: 'Whimsicott', - type1: 'Grass', - type2: 'Fairy', - color: 'Green', - ability1: 'Prankster', - ability2: 'Infiltrator', - 'ability hidden': 'Chlorophyll', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 6.6, - hp: 60, - atk: 67, - def: 85, - sp_atk: 77, - sp_def: 75, - spd: 116, - total: 480, - }, - { - number: 548, - code: 1, - serial: 5481, - name: 'Petilil', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Chlorophyll', - ability2: 'Own Tempo', - 'ability hidden': 'Leaf Guard', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 6.6, - hp: 45, - atk: 35, - def: 50, - sp_atk: 70, - sp_def: 50, - spd: 30, - total: 280, - }, - { - number: 549, - code: 1, - serial: 5491, - name: 'Lilligant', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Chlorophyll', - ability2: 'Own Tempo', - 'ability hidden': 'Leaf Guard', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 16.3, - hp: 70, - atk: 60, - def: 75, - sp_atk: 110, - sp_def: 75, - spd: 90, - total: 480, - }, - { - number: 550, - code: 1, - serial: 5501, - name: 'Basculin', - type1: 'Water', - type2: '', - color: 'Green', - ability1: 'Reckless', - ability2: 'Adaptability', - 'ability hidden': 'Mold Breaker', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 18, - hp: 70, - atk: 92, - def: 65, - sp_atk: 80, - sp_def: 55, - spd: 98, - total: 460, - }, - { - number: 550, - code: 2, - serial: 5502, - name: 'Basculin', - type1: 'Water', - type2: '', - color: 'Green', - ability1: 'Rock Head', - ability2: 'Adaptability', - 'ability hidden': 'Mold Breaker', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 18, - hp: 70, - atk: 92, - def: 65, - sp_atk: 80, - sp_def: 55, - spd: 98, - total: 460, - }, - { - number: 551, - code: 1, - serial: 5511, - name: 'Sandile', - type1: 'Ground', - type2: 'Dark', - color: 'Brown', - ability1: 'Intimidate', - ability2: 'Moxie', - 'ability hidden': 'Anger Point', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 15.2, - hp: 50, - atk: 72, - def: 35, - sp_atk: 35, - sp_def: 35, - spd: 65, - total: 292, - }, - { - number: 552, - code: 1, - serial: 5521, - name: 'Krokorok', - type1: 'Ground', - type2: 'Dark', - color: 'Brown', - ability1: 'Intimidate', - ability2: 'Moxie', - 'ability hidden': 'Anger Point', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 33.4, - hp: 60, - atk: 82, - def: 45, - sp_atk: 45, - sp_def: 45, - spd: 74, - total: 351, - }, - { - number: 553, - code: 1, - serial: 5531, - name: 'Krookodile', - type1: 'Ground', - type2: 'Dark', - color: 'Red', - ability1: 'Intimidate', - ability2: 'Moxie', - 'ability hidden': 'Anger Point', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 96.3, - hp: 95, - atk: 117, - def: 80, - sp_atk: 65, - sp_def: 70, - spd: 92, - total: 519, - }, - { - number: 554, - code: 1, - serial: 5541, - name: 'Darumaka', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Hustle', - ability2: '', - 'ability hidden': 'Inner Focus', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 37.5, - hp: 70, - atk: 90, - def: 45, - sp_atk: 15, - sp_def: 45, - spd: 50, - total: 315, - }, - { - number: 554, - code: 2, - serial: 5542, - name: 'Darumaka', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Hustle', - ability2: '', - 'ability hidden': 'Inner Focus', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 40, - hp: 70, - atk: 90, - def: 45, - sp_atk: 15, - sp_def: 45, - spd: 50, - total: 315, - }, - { - number: 555, - code: 1, - serial: 5551, - name: 'Darmanitan', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Sheer Force', - ability2: '', - 'ability hidden': 'Zen Mode', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 92.9, - hp: 105, - atk: 140, - def: 55, - sp_atk: 30, - sp_def: 55, - spd: 95, - total: 480, - }, - { - number: 555, - code: 2, - serial: 5552, - name: 'Darmanitan', - type1: 'Fire', - type2: 'Psychic', - color: 'White', - ability1: 'Zen Mode', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 92.9, - hp: 105, - atk: 30, - def: 105, - sp_atk: 140, - sp_def: 105, - spd: 55, - total: 540, - }, - { - number: 555, - code: 3, - serial: 5553, - name: 'Darmanitan', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Gorilla Tactics', - ability2: '', - 'ability hidden': 'Zen Mode', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 120, - hp: 105, - atk: 140, - def: 55, - sp_atk: 30, - sp_def: 55, - spd: 95, - total: 480, - }, - { - number: 555, - code: 4, - serial: 5554, - name: 'Darmanitan', - type1: 'Ice', - type2: 'Fire', - color: 'White', - ability1: 'Gorilla Tactics', - ability2: '', - 'ability hidden': 'Zen Mode', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 120, - hp: 105, - atk: 160, - def: 55, - sp_atk: 30, - sp_def: 55, - spd: 135, - total: 540, - }, - { - number: 556, - code: 1, - serial: 5561, - name: 'Maractus', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Water Absorb', - ability2: 'Chlorophyll', - 'ability hidden': 'Storm Drain', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 28, - hp: 75, - atk: 86, - def: 67, - sp_atk: 106, - sp_def: 67, - spd: 60, - total: 461, - }, - { - number: 557, - code: 1, - serial: 5571, - name: 'Dwebble', - type1: 'Bug', - type2: 'Rock', - color: 'Red', - ability1: 'Sturdy', - ability2: 'Shell Armor', - 'ability hidden': 'Weak Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 14.5, - hp: 50, - atk: 65, - def: 85, - sp_atk: 35, - sp_def: 35, - spd: 55, - total: 325, - }, - { - number: 558, - code: 1, - serial: 5581, - name: 'Crustle', - type1: 'Bug', - type2: 'Rock', - color: 'Red', - ability1: 'Sturdy', - ability2: 'Shell Armor', - 'ability hidden': 'Weak Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 200, - hp: 70, - atk: 105, - def: 125, - sp_atk: 65, - sp_def: 75, - spd: 45, - total: 485, - }, - { - number: 559, - code: 1, - serial: 5591, - name: 'Scraggy', - type1: 'Dark', - type2: 'Fighting', - color: 'Yellow', - ability1: 'Shed Skin', - ability2: 'Moxie', - 'ability hidden': 'Intimidate', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 11.8, - hp: 50, - atk: 75, - def: 70, - sp_atk: 35, - sp_def: 70, - spd: 48, - total: 348, - }, - { - number: 560, - code: 1, - serial: 5601, - name: 'Scrafty', - type1: 'Dark', - type2: 'Fighting', - color: 'Red', - ability1: 'Shed Skin', - ability2: 'Moxie', - 'ability hidden': 'Intimidate', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 30, - hp: 65, - atk: 90, - def: 115, - sp_atk: 45, - sp_def: 115, - spd: 58, - total: 488, - }, - { - number: 561, - code: 1, - serial: 5611, - name: 'Sigilyph', - type1: 'Psychic', - type2: 'Flying', - color: 'Black', - ability1: 'Wonder Skin', - ability2: 'Magic Guard', - 'ability hidden': 'Tinted Lens', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 14, - hp: 72, - atk: 58, - def: 80, - sp_atk: 103, - sp_def: 80, - spd: 97, - total: 490, - }, - { - number: 562, - code: 1, - serial: 5621, - name: 'Yamask', - type1: 'Ghost', - type2: '', - color: 'Black', - ability1: 'Mummy', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 1.5, - hp: 38, - atk: 30, - def: 85, - sp_atk: 55, - sp_def: 65, - spd: 30, - total: 303, - }, - { - number: 562, - code: 2, - serial: 5622, - name: 'Yamask', - type1: 'Ghost', - type2: 'Ground', - color: 'Black', - ability1: 'Wandering Spilit', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 1.5, - hp: 38, - atk: 55, - def: 85, - sp_atk: 30, - sp_def: 65, - spd: 30, - total: 303, - }, - { - number: 563, - code: 1, - serial: 5631, - name: 'Cofagrigus', - type1: 'Ghost', - type2: '', - color: 'Yellow', - ability1: 'Mummy', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 76.5, - hp: 58, - atk: 50, - def: 145, - sp_atk: 95, - sp_def: 105, - spd: 30, - total: 483, - }, - { - number: 564, - code: 1, - serial: 5641, - name: 'Tirtouga', - type1: 'Water', - type2: 'Rock', - color: 'Blue', - ability1: 'Solid Rock', - ability2: 'Sturdy', - 'ability hidden': 'Swift Swim', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 16.5, - hp: 54, - atk: 78, - def: 103, - sp_atk: 53, - sp_def: 45, - spd: 22, - total: 355, - }, - { - number: 565, - code: 1, - serial: 5651, - name: 'Carracosta', - type1: 'Water', - type2: 'Rock', - color: 'Blue', - ability1: 'Solid Rock', - ability2: 'Sturdy', - 'ability hidden': 'Swift Swim', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 81, - hp: 74, - atk: 108, - def: 133, - sp_atk: 83, - sp_def: 65, - spd: 32, - total: 495, - }, - { - number: 566, - code: 1, - serial: 5661, - name: 'Archen', - type1: 'Rock', - type2: 'Flying', - color: 'Yellow', - ability1: 'Defeatist', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9.5, - hp: 55, - atk: 112, - def: 45, - sp_atk: 74, - sp_def: 45, - spd: 70, - total: 401, - }, - { - number: 567, - code: 1, - serial: 5671, - name: 'Archeops', - type1: 'Rock', - type2: 'Flying', - color: 'Yellow', - ability1: 'Defeatist', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 32, - hp: 75, - atk: 140, - def: 65, - sp_atk: 112, - sp_def: 65, - spd: 110, - total: 567, - }, - { - number: 568, - code: 1, - serial: 5681, - name: 'Trubbish', - type1: 'Poison', - type2: '', - color: 'Green', - ability1: 'Stench', - ability2: 'Sticky Hold', - 'ability hidden': 'Aftermath', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 31, - hp: 50, - atk: 50, - def: 62, - sp_atk: 40, - sp_def: 62, - spd: 65, - total: 329, - }, - { - number: 569, - code: 1, - serial: 5691, - name: 'Garbodor', - type1: 'Poison', - type2: '', - color: 'Green', - ability1: 'Stench', - ability2: 'Weak Armor', - 'ability hidden': 'Aftermath', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 107.3, - hp: 80, - atk: 95, - def: 82, - sp_atk: 60, - sp_def: 82, - spd: 75, - total: 474, - }, - { - number: 570, - code: 1, - serial: 5701, - name: 'Zorua', - type1: 'Dark', - type2: '', - color: 'Grey', - ability1: 'Illusion', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 12.5, - hp: 40, - atk: 65, - def: 40, - sp_atk: 80, - sp_def: 40, - spd: 65, - total: 330, - }, - { - number: 571, - code: 1, - serial: 5711, - name: 'Zoroark', - type1: 'Dark', - type2: '', - color: 'Grey', - ability1: 'Illusion', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 81.1, - hp: 60, - atk: 105, - def: 60, - sp_atk: 120, - sp_def: 60, - spd: 105, - total: 510, - }, - { - number: 572, - code: 1, - serial: 5721, - name: 'Minccino', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'Cute Charm', - ability2: 'Technician', - 'ability hidden': 'Skill Link', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5.8, - hp: 55, - atk: 50, - def: 40, - sp_atk: 40, - sp_def: 40, - spd: 75, - total: 300, - }, - { - number: 573, - code: 1, - serial: 5731, - name: 'Cinccino', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'Cute Charm', - ability2: 'Technician', - 'ability hidden': 'Skill Link', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 7.5, - hp: 75, - atk: 95, - def: 60, - sp_atk: 65, - sp_def: 60, - spd: 115, - total: 470, - }, - { - number: 574, - code: 1, - serial: 5741, - name: 'Gothita', - type1: 'Psychic', - type2: '', - color: 'Purple', - ability1: 'Frisk', - ability2: 'Competitive', - 'ability hidden': 'Shadow Tag', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5.8, - hp: 45, - atk: 30, - def: 50, - sp_atk: 55, - sp_def: 65, - spd: 45, - total: 290, - }, - { - number: 575, - code: 1, - serial: 5751, - name: 'Gothorita', - type1: 'Psychic', - type2: '', - color: 'Purple', - ability1: 'Frisk', - ability2: 'Competitive', - 'ability hidden': 'Shadow Tag', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 18, - hp: 60, - atk: 45, - def: 70, - sp_atk: 75, - sp_def: 85, - spd: 55, - total: 390, - }, - { - number: 576, - code: 1, - serial: 5761, - name: 'Gothitelle', - type1: 'Psychic', - type2: '', - color: 'Purple', - ability1: 'Frisk', - ability2: 'Competitive', - 'ability hidden': 'Shadow Tag', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 44, - hp: 70, - atk: 55, - def: 95, - sp_atk: 95, - sp_def: 110, - spd: 65, - total: 490, - }, - { - number: 577, - code: 1, - serial: 5771, - name: 'Solosis', - type1: 'Psychic', - type2: '', - color: 'Green', - ability1: 'Overcoat', - ability2: 'Magic Guard', - 'ability hidden': 'Regenerator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1, - hp: 45, - atk: 30, - def: 40, - sp_atk: 105, - sp_def: 50, - spd: 20, - total: 290, - }, - { - number: 578, - code: 1, - serial: 5781, - name: 'Duosion', - type1: 'Psychic', - type2: '', - color: 'Green', - ability1: 'Overcoat', - ability2: 'Magic Guard', - 'ability hidden': 'Regenerator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8, - hp: 65, - atk: 40, - def: 50, - sp_atk: 125, - sp_def: 60, - spd: 30, - total: 370, - }, - { - number: 579, - code: 1, - serial: 5791, - name: 'Reuniclus', - type1: 'Psychic', - type2: '', - color: 'Green', - ability1: 'Overcoat', - ability2: 'Magic Guard', - 'ability hidden': 'Regenerator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 20.1, - hp: 110, - atk: 65, - def: 75, - sp_atk: 125, - sp_def: 85, - spd: 30, - total: 490, - }, - { - number: 580, - code: 1, - serial: 5801, - name: 'Ducklett', - type1: 'Water', - type2: 'Flying', - color: 'Blue', - ability1: 'Keen Eye', - ability2: 'Big Pecks', - 'ability hidden': 'Hydration', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 5.5, - hp: 62, - atk: 44, - def: 50, - sp_atk: 44, - sp_def: 50, - spd: 55, - total: 305, - }, - { - number: 581, - code: 1, - serial: 5811, - name: 'Swanna', - type1: 'Water', - type2: 'Flying', - color: 'White', - ability1: 'Keen Eye', - ability2: 'Big Pecks', - 'ability hidden': 'Hydration', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 24.2, - hp: 75, - atk: 87, - def: 63, - sp_atk: 87, - sp_def: 63, - spd: 98, - total: 473, - }, - { - number: 582, - code: 1, - serial: 5821, - name: 'Vanillite', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Ice Body', - ability2: 'Snow Cloak', - 'ability hidden': 'Weak Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5.7, - hp: 36, - atk: 50, - def: 50, - sp_atk: 65, - sp_def: 60, - spd: 44, - total: 305, - }, - { - number: 583, - code: 1, - serial: 5831, - name: 'Vanillish', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Ice Body', - ability2: 'Snow Cloak', - 'ability hidden': 'Weak Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 41, - hp: 51, - atk: 65, - def: 65, - sp_atk: 80, - sp_def: 75, - spd: 59, - total: 395, - }, - { - number: 584, - code: 1, - serial: 5841, - name: 'Vanilluxe', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Ice Body', - ability2: 'Snow Warning', - 'ability hidden': 'Weak Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 57.5, - hp: 71, - atk: 95, - def: 85, - sp_atk: 110, - sp_def: 95, - spd: 79, - total: 535, - }, - { - number: 585, - code: 1, - serial: 5851, - name: 'Deerling', - type1: 'Normal', - type2: 'Grass', - color: 'Pink', - ability1: 'Chlorophyll', - ability2: 'Sap Sipper', - 'ability hidden': 'Serene Grace', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 19.5, - hp: 60, - atk: 60, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 75, - total: 335, - }, - { - number: 585, - code: 2, - serial: 5852, - name: 'Deerling', - type1: 'Normal', - type2: 'Grass', - color: 'Green', - ability1: 'Chlorophyll', - ability2: 'Sap Sipper', - 'ability hidden': 'Serene Grace', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 19.5, - hp: 60, - atk: 60, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 75, - total: 335, - }, - { - number: 585, - code: 3, - serial: 5853, - name: 'Deerling', - type1: 'Normal', - type2: 'Grass', - color: 'Red', - ability1: 'Chlorophyll', - ability2: 'Sap Sipper', - 'ability hidden': 'Serene Grace', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 19.5, - hp: 60, - atk: 60, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 75, - total: 335, - }, - { - number: 585, - code: 4, - serial: 5854, - name: 'Deerling', - type1: 'Normal', - type2: 'Grass', - color: 'Brown', - ability1: 'Chlorophyll', - ability2: 'Sap Sipper', - 'ability hidden': 'Serene Grace', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 19.5, - hp: 60, - atk: 60, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 75, - total: 335, - }, - { - number: 586, - code: 1, - serial: 5861, - name: 'Sawsbuck', - type1: 'Normal', - type2: 'Grass', - color: 'Brown', - ability1: 'Chlorophyll', - ability2: 'Sap Sipper', - 'ability hidden': 'Serene Grace', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 92.5, - hp: 80, - atk: 100, - def: 70, - sp_atk: 60, - sp_def: 70, - spd: 95, - total: 475, - }, - { - number: 586, - code: 2, - serial: 5862, - name: 'Sawsbuck', - type1: 'Normal', - type2: 'Grass', - color: 'Brown', - ability1: 'Chlorophyll', - ability2: 'Sap Sipper', - 'ability hidden': 'Serene Grace', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 92.5, - hp: 80, - atk: 100, - def: 70, - sp_atk: 60, - sp_def: 70, - spd: 95, - total: 475, - }, - { - number: 586, - code: 3, - serial: 5863, - name: 'Sawsbuck', - type1: 'Normal', - type2: 'Grass', - color: 'Brown', - ability1: 'Chlorophyll', - ability2: 'Sap Sipper', - 'ability hidden': 'Serene Grace', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 92.5, - hp: 80, - atk: 100, - def: 70, - sp_atk: 60, - sp_def: 70, - spd: 95, - total: 475, - }, - { - number: 586, - code: 4, - serial: 5864, - name: 'Sawsbuck', - type1: 'Normal', - type2: 'Grass', - color: 'Brown', - ability1: 'Chlorophyll', - ability2: 'Sap Sipper', - 'ability hidden': 'Serene Grace', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 92.5, - hp: 80, - atk: 100, - def: 70, - sp_atk: 60, - sp_def: 70, - spd: 95, - total: 475, - }, - { - number: 587, - code: 1, - serial: 5871, - name: 'Emolga', - type1: 'Electric', - type2: 'Flying', - color: 'White', - ability1: 'Static', - ability2: '', - 'ability hidden': 'Motor drive', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5, - hp: 55, - atk: 75, - def: 60, - sp_atk: 75, - sp_def: 60, - spd: 103, - total: 428, - }, - { - number: 588, - code: 1, - serial: 5881, - name: 'Karrablast', - type1: 'Bug', - type2: '', - color: 'Blue', - ability1: 'Swarm', - ability2: 'Shed Skin', - 'ability hidden': 'No Guard', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 5.9, - hp: 50, - atk: 75, - def: 45, - sp_atk: 40, - sp_def: 45, - spd: 60, - total: 315, - }, - { - number: 589, - code: 1, - serial: 5891, - name: 'Escavalier', - type1: 'Bug', - type2: 'Steel', - color: 'Grey', - ability1: 'Swarm', - ability2: 'Shell Armor', - 'ability hidden': 'Overcoat', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 33, - hp: 70, - atk: 135, - def: 105, - sp_atk: 60, - sp_def: 105, - spd: 20, - total: 495, - }, - { - number: 590, - code: 1, - serial: 5901, - name: 'Foongus', - type1: 'Grass', - type2: 'Poison', - color: 'White', - ability1: 'Effect Spore', - ability2: '', - 'ability hidden': 'Regenerator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 1, - hp: 69, - atk: 55, - def: 45, - sp_atk: 55, - sp_def: 55, - spd: 15, - total: 294, - }, - { - number: 591, - code: 1, - serial: 5911, - name: 'Amoonguss', - type1: 'Grass', - type2: 'Poison', - color: 'White', - ability1: 'Effect Spore', - ability2: '', - 'ability hidden': 'Regenerator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 10.5, - hp: 114, - atk: 85, - def: 70, - sp_atk: 85, - sp_def: 80, - spd: 30, - total: 464, - }, - { - number: 592, - code: 1, - serial: 5921, - name: 'Frillish', - type1: 'Water', - type2: 'Ghost', - color: 'White', - ability1: 'Water Absorb', - ability2: 'Cursed Body', - 'ability hidden': 'Damp', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 33, - hp: 55, - atk: 40, - def: 50, - sp_atk: 65, - sp_def: 85, - spd: 40, - total: 335, - }, - { - number: 593, - code: 1, - serial: 5931, - name: 'Jellicent', - type1: 'Water', - type2: 'Ghost', - color: 'White', - ability1: 'Water Absorb', - ability2: 'Cursed Body', - 'ability hidden': 'Damp', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 2.2, - weight: 135, - hp: 100, - atk: 60, - def: 70, - sp_atk: 85, - sp_def: 105, - spd: 60, - total: 480, - }, - { - number: 594, - code: 1, - serial: 5941, - name: 'Alomomola', - type1: 'Water', - type2: '', - color: 'Pink', - ability1: 'Healer', - ability2: 'Hydration', - 'ability hidden': 'Regenerator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 31.6, - hp: 165, - atk: 75, - def: 80, - sp_atk: 40, - sp_def: 45, - spd: 65, - total: 470, - }, - { - number: 595, - code: 1, - serial: 5951, - name: 'Joltik', - type1: 'Bug', - type2: 'Electric', - color: 'Yellow', - ability1: 'Compound Eyes', - ability2: 'Unnerve', - 'ability hidden': 'Swarm', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.1, - weight: 0.6, - hp: 50, - atk: 47, - def: 50, - sp_atk: 57, - sp_def: 50, - spd: 65, - total: 319, - }, - { - number: 596, - code: 1, - serial: 5961, - name: 'Galvantula', - type1: 'Bug', - type2: 'Electric', - color: 'Yellow', - ability1: 'Compound Eyes', - ability2: 'Unnerve', - 'ability hidden': 'Swarm', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 14.3, - hp: 70, - atk: 77, - def: 60, - sp_atk: 97, - sp_def: 60, - spd: 108, - total: 472, - }, - { - number: 597, - code: 1, - serial: 5971, - name: 'Ferroseed', - type1: 'Grass', - type2: 'Steel', - color: 'Grey', - ability1: 'Iron Barbs', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 18.8, - hp: 44, - atk: 50, - def: 91, - sp_atk: 24, - sp_def: 86, - spd: 10, - total: 305, - }, - { - number: 598, - code: 1, - serial: 5981, - name: 'Ferrothorn', - type1: 'Grass', - type2: 'Steel', - color: 'Grey', - ability1: 'Iron Barbs', - ability2: '', - 'ability hidden': 'Anticipation', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 110, - hp: 74, - atk: 94, - def: 131, - sp_atk: 54, - sp_def: 116, - spd: 20, - total: 489, - }, - { - number: 599, - code: 1, - serial: 5991, - name: 'Klink', - type1: 'Steel', - type2: '', - color: 'Grey', - ability1: 'Plus', - ability2: 'Minus', - 'ability hidden': 'Clear Body', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 21, - hp: 40, - atk: 55, - def: 70, - sp_atk: 45, - sp_def: 60, - spd: 30, - total: 300, - }, - { - number: 600, - code: 1, - serial: 6001, - name: 'Klang', - type1: 'Steel', - type2: '', - color: 'Grey', - ability1: 'Plus', - ability2: 'Minus', - 'ability hidden': 'Clear Body', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 51, - hp: 60, - atk: 80, - def: 95, - sp_atk: 70, - sp_def: 85, - spd: 50, - total: 440, - }, - { - number: 601, - code: 1, - serial: 6011, - name: 'Klinklang', - type1: 'Steel', - type2: '', - color: 'Grey', - ability1: 'Plus', - ability2: 'Minus', - 'ability hidden': 'Clear Body', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 81, - hp: 60, - atk: 100, - def: 115, - sp_atk: 70, - sp_def: 85, - spd: 90, - total: 520, - }, - { - number: 602, - code: 1, - serial: 6021, - name: 'Tynamo', - type1: 'Electric', - type2: '', - color: 'White', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.3, - hp: 35, - atk: 55, - def: 40, - sp_atk: 45, - sp_def: 40, - spd: 60, - total: 275, - }, - { - number: 603, - code: 1, - serial: 6031, - name: 'Eelektrik', - type1: 'Electric', - type2: '', - color: 'Blue', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 22, - hp: 65, - atk: 85, - def: 70, - sp_atk: 75, - sp_def: 70, - spd: 40, - total: 405, - }, - { - number: 604, - code: 1, - serial: 6041, - name: 'Eelektross', - type1: 'Electric', - type2: '', - color: 'Blue', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 2.1, - weight: 80.5, - hp: 85, - atk: 115, - def: 80, - sp_atk: 105, - sp_def: 80, - spd: 50, - total: 515, - }, - { - number: 605, - code: 1, - serial: 6051, - name: 'Elgyem', - type1: 'Psychic', - type2: '', - color: 'Blue', - ability1: 'Telepathy', - ability2: 'Synchronize', - 'ability hidden': 'Analytic', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9, - hp: 55, - atk: 55, - def: 55, - sp_atk: 85, - sp_def: 55, - spd: 30, - total: 335, - }, - { - number: 606, - code: 1, - serial: 6061, - name: 'Beheeyem', - type1: 'Psychic', - type2: '', - color: 'Brown', - ability1: 'Telepathy', - ability2: 'Synchronize', - 'ability hidden': 'Analytic', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 34.5, - hp: 75, - atk: 75, - def: 75, - sp_atk: 125, - sp_def: 95, - spd: 40, - total: 485, - }, - { - number: 607, - code: 1, - serial: 6071, - name: 'Litwick', - type1: 'Ghost', - type2: 'Fire', - color: 'White', - ability1: 'Flash Fire', - ability2: 'Flame Body', - 'ability hidden': 'Infiltrator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.1, - hp: 50, - atk: 30, - def: 55, - sp_atk: 65, - sp_def: 55, - spd: 20, - total: 275, - }, - { - number: 608, - code: 1, - serial: 6081, - name: 'Lampent', - type1: 'Ghost', - type2: 'Fire', - color: 'Black', - ability1: 'Flash Fire', - ability2: 'Flame Body', - 'ability hidden': 'Infiltrator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 13, - hp: 60, - atk: 40, - def: 60, - sp_atk: 95, - sp_def: 60, - spd: 55, - total: 370, - }, - { - number: 609, - code: 1, - serial: 6091, - name: 'Chandelure', - type1: 'Ghost', - type2: 'Fire', - color: 'Black', - ability1: 'Flash Fire', - ability2: 'Flame Body', - 'ability hidden': 'Infiltrator', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 34.3, - hp: 60, - atk: 55, - def: 90, - sp_atk: 145, - sp_def: 90, - spd: 80, - total: 520, - }, - { - number: 610, - code: 1, - serial: 6101, - name: 'Axew', - type1: 'Dragon', - type2: '', - color: 'Green', - ability1: 'Rivalry', - ability2: 'Mold Breaker', - 'ability hidden': 'Unnerve', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 18, - hp: 46, - atk: 87, - def: 60, - sp_atk: 30, - sp_def: 40, - spd: 57, - total: 320, - }, - { - number: 611, - code: 1, - serial: 6111, - name: 'Fraxure', - type1: 'Dragon', - type2: '', - color: 'Green', - ability1: 'Rivalry', - ability2: 'Mold Breaker', - 'ability hidden': 'Unnerve', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 36, - hp: 66, - atk: 117, - def: 70, - sp_atk: 40, - sp_def: 50, - spd: 67, - total: 410, - }, - { - number: 612, - code: 1, - serial: 6121, - name: 'Haxorus', - type1: 'Dragon', - type2: '', - color: 'Yellow', - ability1: 'Rivalry', - ability2: 'Mold Breaker', - 'ability hidden': 'Unnerve', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 105.5, - hp: 76, - atk: 147, - def: 90, - sp_atk: 60, - sp_def: 70, - spd: 97, - total: 540, - }, - { - number: 613, - code: 1, - serial: 6131, - name: 'Cubchoo', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Snow Cloak', - ability2: 'Slush Rush', - 'ability hidden': 'Rattled', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 8.5, - hp: 55, - atk: 70, - def: 40, - sp_atk: 60, - sp_def: 40, - spd: 40, - total: 305, - }, - { - number: 614, - code: 1, - serial: 6141, - name: 'Beartic', - type1: 'Ice', - type2: '', - color: 'White', - ability1: 'Snow Cloak', - ability2: 'Slush Rush', - 'ability hidden': 'Swift Swim', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 2.6, - weight: 260, - hp: 95, - atk: 130, - def: 80, - sp_atk: 70, - sp_def: 80, - spd: 50, - total: 505, - }, - { - number: 615, - code: 1, - serial: 6151, - name: 'Cryogonal', - type1: 'Ice', - type2: '', - color: 'Blue', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 148, - hp: 80, - atk: 50, - def: 50, - sp_atk: 95, - sp_def: 135, - spd: 105, - total: 515, - }, - { - number: 616, - code: 1, - serial: 6161, - name: 'Shelmet', - type1: 'Bug', - type2: '', - color: 'Red', - ability1: 'Hydration', - ability2: 'Shell Armor', - 'ability hidden': 'Overcoat', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 7.7, - hp: 50, - atk: 40, - def: 85, - sp_atk: 40, - sp_def: 65, - spd: 25, - total: 305, - }, - { - number: 617, - code: 1, - serial: 6171, - name: 'Accelgor', - type1: 'Bug', - type2: '', - color: 'Red', - ability1: 'Hydration', - ability2: 'Sticky Hold', - 'ability hidden': 'Unburden', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 25.3, - hp: 80, - atk: 70, - def: 40, - sp_atk: 100, - sp_def: 60, - spd: 145, - total: 495, - }, - { - number: 618, - code: 1, - serial: 6181, - name: 'Stunfisk', - type1: 'Electric', - type2: 'Ground', - color: 'Brown', - ability1: 'Stanfisk', - ability2: 'Limber', - 'ability hidden': 'Sand Veil', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 11, - hp: 109, - atk: 66, - def: 84, - sp_atk: 81, - sp_def: 99, - spd: 32, - total: 471, - }, - { - number: 618, - code: 2, - serial: 6182, - name: 'Stunfisk', - type1: 'Ground', - type2: 'Steel', - color: 'Green', - ability1: 'Mimicry', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 20.5, - hp: 109, - atk: 81, - def: 99, - sp_atk: 66, - sp_def: 84, - spd: 32, - total: 471, - }, - { - number: 619, - code: 1, - serial: 6191, - name: 'Mienfoo', - type1: 'Fighting', - type2: '', - color: 'Yellow', - ability1: 'Inner Focus', - ability2: 'Regenerator', - 'ability hidden': 'Reckless', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 20, - hp: 45, - atk: 85, - def: 50, - sp_atk: 55, - sp_def: 50, - spd: 65, - total: 350, - }, - { - number: 620, - code: 1, - serial: 6201, - name: 'Mienshao', - type1: 'Fighting', - type2: '', - color: 'Purple', - ability1: 'Inner Focus', - ability2: 'Regenerator', - 'ability hidden': 'Reckless', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 35.5, - hp: 65, - atk: 125, - def: 60, - sp_atk: 95, - sp_def: 60, - spd: 105, - total: 510, - }, - { - number: 621, - code: 1, - serial: 6211, - name: 'Druddigon', - type1: 'Dragon', - type2: '', - color: 'Red', - ability1: 'Rough Skin', - ability2: 'Sheer Force', - 'ability hidden': 'Mold Breaker', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 139, - hp: 77, - atk: 120, - def: 90, - sp_atk: 60, - sp_def: 90, - spd: 48, - total: 485, - }, - { - number: 622, - code: 1, - serial: 6221, - name: 'Golett', - type1: 'Ground', - type2: 'Ghost', - color: 'Green', - ability1: 'Iron Fist', - ability2: 'Klutz', - 'ability hidden': 'No Guard', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 92, - hp: 59, - atk: 74, - def: 50, - sp_atk: 35, - sp_def: 50, - spd: 35, - total: 303, - }, - { - number: 623, - code: 1, - serial: 6231, - name: 'Golurk', - type1: 'Ground', - type2: 'Ghost', - color: 'Green', - ability1: 'Iron Fist', - ability2: 'Klutz', - 'ability hidden': 'No Guard', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 2.8, - weight: 330, - hp: 89, - atk: 124, - def: 80, - sp_atk: 55, - sp_def: 80, - spd: 55, - total: 483, - }, - { - number: 624, - code: 1, - serial: 6241, - name: 'Pawniard', - type1: 'Dark', - type2: 'Steel', - color: 'Red', - ability1: 'Defiant', - ability2: 'Inner Focus', - 'ability hidden': 'Pressure', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 10.2, - hp: 45, - atk: 85, - def: 70, - sp_atk: 40, - sp_def: 40, - spd: 60, - total: 340, - }, - { - number: 625, - code: 1, - serial: 6251, - name: 'Bisharp', - type1: 'Dark', - type2: 'Steel', - color: 'Red', - ability1: 'Defiant', - ability2: 'Inner Focus', - 'ability hidden': 'Pressure', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 70, - hp: 65, - atk: 125, - def: 100, - sp_atk: 60, - sp_def: 70, - spd: 70, - total: 490, - }, - { - number: 626, - code: 1, - serial: 6261, - name: 'Bouffalant', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Reckless', - ability2: 'Sap Sipper', - 'ability hidden': 'Soundproof', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 94.6, - hp: 95, - atk: 110, - def: 95, - sp_atk: 40, - sp_def: 95, - spd: 55, - total: 490, - }, - { - number: 627, - code: 1, - serial: 6271, - name: 'Rufflet', - type1: 'Normal', - type2: 'Flying', - color: 'White', - ability1: 'Keen Eye', - ability2: 'Sheer Force', - 'ability hidden': 'Hustle', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 10.5, - hp: 70, - atk: 83, - def: 50, - sp_atk: 37, - sp_def: 50, - spd: 60, - total: 350, - }, - { - number: 628, - code: 1, - serial: 6281, - name: 'Braviary', - type1: 'Normal', - type2: 'Flying', - color: 'Red', - ability1: 'Keen Eye', - ability2: 'Sheer Force', - 'ability hidden': 'Defiant', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 41, - hp: 100, - atk: 123, - def: 75, - sp_atk: 57, - sp_def: 75, - spd: 80, - total: 510, - }, - { - number: 629, - code: 1, - serial: 6291, - name: 'Vullaby', - type1: 'Dark', - type2: 'Flying', - color: 'Brown', - ability1: 'Big Pecks', - ability2: 'Overcoat', - 'ability hidden': 'Weak Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9, - hp: 70, - atk: 55, - def: 75, - sp_atk: 45, - sp_def: 65, - spd: 60, - total: 370, - }, - { - number: 630, - code: 1, - serial: 6301, - name: 'Mandibuzz', - type1: 'Dark', - type2: 'Flying', - color: 'Brown', - ability1: 'Big Pecks', - ability2: 'Overcoat', - 'ability hidden': 'Weak Armor', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 39.5, - hp: 110, - atk: 65, - def: 105, - sp_atk: 55, - sp_def: 95, - spd: 80, - total: 510, - }, - { - number: 631, - code: 1, - serial: 6311, - name: 'Heatmor', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Gluttony', - ability2: 'Flaash Fire', - 'ability hidden': 'White Smoke', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 58, - hp: 85, - atk: 97, - def: 66, - sp_atk: 105, - sp_def: 66, - spd: 65, - total: 484, - }, - { - number: 632, - code: 1, - serial: 6321, - name: 'Durant', - type1: 'Bug', - type2: 'Steel', - color: 'Grey', - ability1: 'Swarm', - ability2: 'Hustle', - 'ability hidden': 'Truant', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 33, - hp: 58, - atk: 109, - def: 112, - sp_atk: 48, - sp_def: 48, - spd: 109, - total: 484, - }, - { - number: 633, - code: 1, - serial: 6331, - name: 'Deino', - type1: 'Dark', - type2: 'Dragon', - color: 'Blue', - ability1: 'Hustle', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 17.3, - hp: 52, - atk: 65, - def: 50, - sp_atk: 45, - sp_def: 50, - spd: 38, - total: 300, - }, - { - number: 634, - code: 1, - serial: 6341, - name: 'Zweilous', - type1: 'Dark', - type2: 'Dragon', - color: 'Blue', - ability1: 'Hustle', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 50, - hp: 72, - atk: 85, - def: 70, - sp_atk: 65, - sp_def: 70, - spd: 58, - total: 420, - }, - { - number: 635, - code: 1, - serial: 6351, - name: 'Hydreigon', - type1: 'Dark', - type2: 'Dragon', - color: 'Blue', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 160, - hp: 92, - atk: 105, - def: 90, - sp_atk: 125, - sp_def: 90, - spd: 98, - total: 600, - }, - { - number: 636, - code: 1, - serial: 6361, - name: 'Larvesta', - type1: 'Bug', - type2: 'Fire', - color: 'White', - ability1: 'Flame Body', - ability2: '', - 'ability hidden': 'Swarm', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 28.8, - hp: 55, - atk: 85, - def: 55, - sp_atk: 50, - sp_def: 55, - spd: 60, - total: 360, - }, - { - number: 637, - code: 1, - serial: 6371, - name: 'Volcarona', - type1: 'Bug', - type2: 'Fire', - color: 'White', - ability1: 'Flame Body', - ability2: '', - 'ability hidden': 'Swarm', - generation: 5, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 46, - hp: 85, - atk: 60, - def: 65, - sp_atk: 135, - sp_def: 105, - spd: 100, - total: 550, - }, - { - number: 638, - code: 1, - serial: 6381, - name: 'Cobalion', - type1: 'Steel', - type2: 'Fighting', - color: 'Blue', - ability1: 'Justified', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 2.1, - weight: 250, - hp: 91, - atk: 90, - def: 129, - sp_atk: 90, - sp_def: 72, - spd: 108, - total: 580, - }, - { - number: 639, - code: 1, - serial: 6391, - name: 'Terrakion', - type1: 'Rock', - type2: 'Fighting', - color: 'Grey', - ability1: 'Justified', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.9, - weight: 260, - hp: 91, - atk: 129, - def: 90, - sp_atk: 72, - sp_def: 90, - spd: 108, - total: 580, - }, - { - number: 640, - code: 1, - serial: 6401, - name: 'Virizion', - type1: 'Grass', - type2: 'Fighting', - color: 'Green', - ability1: 'Justified', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 2, - weight: 200, - hp: 91, - atk: 90, - def: 72, - sp_atk: 90, - sp_def: 129, - spd: 108, - total: 580, - }, - { - number: 641, - code: 1, - serial: 6411, - name: 'Tornadus', - type1: 'Flying', - type2: '', - color: 'Green', - ability1: 'Prankster', - ability2: '', - 'ability hidden': 'Defiant', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.5, - weight: 63, - hp: 79, - atk: 115, - def: 70, - sp_atk: 125, - sp_def: 80, - spd: 111, - total: 580, - }, - { - number: 641, - code: 2, - serial: 6412, - name: 'Tornadus', - type1: 'Flying', - type2: '', - color: 'Green', - ability1: 'Regenerator', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.4, - weight: 63, - hp: 79, - atk: 100, - def: 80, - sp_atk: 110, - sp_def: 90, - spd: 121, - total: 580, - }, - { - number: 642, - code: 1, - serial: 6421, - name: 'Thundurus', - type1: 'Electric', - type2: 'Flying', - color: 'Blue', - ability1: 'Prankster', - ability2: '', - 'ability hidden': 'Defiant', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.5, - weight: 61, - hp: 79, - atk: 115, - def: 70, - sp_atk: 125, - sp_def: 80, - spd: 111, - total: 580, - }, - { - number: 642, - code: 2, - serial: 6422, - name: 'Thundurus', - type1: 'Electric', - type2: 'Flying', - color: 'Blue', - ability1: 'Volt Absorb', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 3, - weight: 61, - hp: 79, - atk: 105, - def: 70, - sp_atk: 145, - sp_def: 80, - spd: 101, - total: 580, - }, - { - number: 643, - code: 1, - serial: 6431, - name: 'Reshiram', - type1: 'Dragon', - type2: 'Fire', - color: 'White', - ability1: 'Turboblaze', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 3.2, - weight: 330, - hp: 100, - atk: 120, - def: 100, - sp_atk: 150, - sp_def: 120, - spd: 90, - total: 680, - }, - { - number: 644, - code: 1, - serial: 6441, - name: 'Zekrom', - type1: 'Dragon', - type2: 'Electric', - color: 'Black', - ability1: 'Terabolt', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 2.9, - weight: 345, - hp: 100, - atk: 150, - def: 120, - sp_atk: 120, - sp_def: 100, - spd: 90, - total: 680, - }, - { - number: 645, - code: 1, - serial: 6451, - name: 'Landorus', - type1: 'Ground', - type2: 'Flying', - color: 'Brown', - ability1: 'Sand Force', - ability2: '', - 'ability hidden': 'Sheer Force', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.5, - weight: 68, - hp: 89, - atk: 125, - def: 90, - sp_atk: 115, - sp_def: 80, - spd: 101, - total: 600, - }, - { - number: 645, - code: 2, - serial: 6452, - name: 'Landorus', - type1: 'Ground', - type2: 'Flying', - color: 'Brown', - ability1: 'Intimidate', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.3, - weight: 68, - hp: 89, - atk: 145, - def: 90, - sp_atk: 105, - sp_def: 80, - spd: 91, - total: 600, - }, - { - number: 646, - code: 1, - serial: 6461, - name: 'Kyurem', - type1: 'Dragon', - type2: 'Ice', - color: 'Grey', - ability1: 'Pressure', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 3, - weight: 325, - hp: 125, - atk: 130, - def: 90, - sp_atk: 130, - sp_def: 90, - spd: 95, - total: 660, - }, - { - number: 646, - code: 2, - serial: 6462, - name: 'Kyurem', - type1: 'Dragon', - type2: 'Ice', - color: 'Grey', - ability1: 'Turboblaze', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 3.6, - weight: 325, - hp: 125, - atk: 120, - def: 90, - sp_atk: 170, - sp_def: 100, - spd: 95, - total: 700, - }, - { - number: 646, - code: 3, - serial: 6463, - name: 'Kyurem', - type1: 'Dragon', - type2: 'Ice', - color: 'Grey', - ability1: 'Terabolt', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 3.3, - weight: 325, - hp: 125, - atk: 170, - def: 100, - sp_atk: 120, - sp_def: 90, - spd: 95, - total: 700, - }, - { - number: 647, - code: 1, - serial: 6471, - name: 'Keldeo', - type1: 'Water', - type2: 'Fighting', - color: 'Yellow', - ability1: 'Justified', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.4, - weight: 48.5, - hp: 91, - atk: 72, - def: 90, - sp_atk: 129, - sp_def: 90, - spd: 108, - total: 580, - }, - { - number: 647, - code: 2, - serial: 6472, - name: 'Keldeo', - type1: 'Water', - type2: 'Fighting', - color: 'Yellow', - ability1: 'Justified', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.4, - weight: 48.5, - hp: 91, - atk: 72, - def: 90, - sp_atk: 129, - sp_def: 90, - spd: 108, - total: 580, - }, - { - number: 648, - code: 1, - serial: 6481, - name: 'Meloetta', - type1: 'Normal', - type2: 'Psychic', - color: 'White', - ability1: 'Serene Grace', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 0.6, - weight: 6.5, - hp: 100, - atk: 77, - def: 77, - sp_atk: 128, - sp_def: 128, - spd: 90, - total: 600, - }, - { - number: 648, - code: 2, - serial: 6482, - name: 'Meloetta', - type1: 'Normal', - type2: 'Fighting', - color: 'White', - ability1: 'Serene Grace', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 0.6, - weight: 6.5, - hp: 100, - atk: 128, - def: 90, - sp_atk: 77, - sp_def: 77, - spd: 128, - total: 600, - }, - { - number: 649, - code: 1, - serial: 6491, - name: 'Genesect', - type1: 'Bug', - type2: 'Steel', - color: 'Purple', - ability1: 'Download', - ability2: '', - 'ability hidden': '', - generation: 5, - legendary: 1, - mega_evolution: 0, - height: 1.5, - weight: 82.5, - hp: 71, - atk: 120, - def: 95, - sp_atk: 120, - sp_def: 95, - spd: 99, - total: 600, - }, - { - number: 650, - code: 1, - serial: 6501, - name: 'Chespin', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Bulletproof', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 9, - hp: 56, - atk: 61, - def: 65, - sp_atk: 48, - sp_def: 45, - spd: 38, - total: 313, - }, - { - number: 651, - code: 1, - serial: 6511, - name: 'Quilladin', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Bulletproof', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 29, - hp: 61, - atk: 78, - def: 95, - sp_atk: 56, - sp_def: 58, - spd: 57, - total: 405, - }, - { - number: 652, - code: 1, - serial: 6521, - name: 'Chesnaught', - type1: 'Grass', - type2: 'Fighting', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Bulletproof', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 90, - hp: 88, - atk: 107, - def: 122, - sp_atk: 74, - sp_def: 75, - spd: 64, - total: 530, - }, - { - number: 653, - code: 1, - serial: 6531, - name: 'Fennekin', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Magician', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 9.4, - hp: 40, - atk: 45, - def: 40, - sp_atk: 62, - sp_def: 60, - spd: 60, - total: 307, - }, - { - number: 654, - code: 1, - serial: 6541, - name: 'Braixen', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Magician', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 14.5, - hp: 59, - atk: 59, - def: 58, - sp_atk: 90, - sp_def: 70, - spd: 73, - total: 409, - }, - { - number: 655, - code: 1, - serial: 6551, - name: 'Delphox', - type1: 'Fire', - type2: 'Psychic', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Magician', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 39, - hp: 75, - atk: 69, - def: 72, - sp_atk: 114, - sp_def: 100, - spd: 104, - total: 534, - }, - { - number: 656, - code: 1, - serial: 6561, - name: 'Froakie', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Protean', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 7, - hp: 41, - atk: 56, - def: 40, - sp_atk: 62, - sp_def: 44, - spd: 71, - total: 314, - }, - { - number: 657, - code: 1, - serial: 6571, - name: 'Frogadier', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Protean', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 10.9, - hp: 54, - atk: 63, - def: 52, - sp_atk: 83, - sp_def: 56, - spd: 97, - total: 405, - }, - { - number: 658, - code: 1, - serial: 6581, - name: 'Greninja', - type1: 'Water', - type2: 'Dark', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Protean', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 40, - hp: 72, - atk: 95, - def: 67, - sp_atk: 103, - sp_def: 71, - spd: 122, - total: 530, - }, - { - number: 658, - code: 2, - serial: 6582, - name: 'Greninja', - type1: 'Water', - type2: 'Dark', - color: 'Blue', - ability1: 'Battle Bond', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.5, - weight: 40, - hp: 72, - atk: 145, - def: 67, - sp_atk: 153, - sp_def: 71, - spd: 132, - total: 640, - }, - { - number: 659, - code: 1, - serial: 6591, - name: 'Bunnelby', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Cheek Pouch', - 'ability hidden': 'Huge Power', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5, - hp: 38, - atk: 36, - def: 38, - sp_atk: 32, - sp_def: 36, - spd: 57, - total: 237, - }, - { - number: 660, - code: 1, - serial: 6601, - name: 'Diggersby', - type1: 'Normal', - type2: 'Ground', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Cheek Pouch', - 'ability hidden': 'Huge Power', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 42.4, - hp: 85, - atk: 56, - def: 77, - sp_atk: 50, - sp_def: 77, - spd: 78, - total: 423, - }, - { - number: 661, - code: 1, - serial: 6611, - name: 'Fletchling', - type1: 'Normal', - type2: 'Flying', - color: 'Red', - ability1: 'Big Pecks', - ability2: '', - 'ability hidden': 'Gale Wings', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1.7, - hp: 45, - atk: 50, - def: 43, - sp_atk: 40, - sp_def: 38, - spd: 62, - total: 278, - }, - { - number: 662, - code: 1, - serial: 6621, - name: 'Fletchinder', - type1: 'Fire', - type2: 'Flying', - color: 'Red', - ability1: 'Flame Body', - ability2: '', - 'ability hidden': 'Gale Wings', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 16, - hp: 62, - atk: 73, - def: 55, - sp_atk: 56, - sp_def: 52, - spd: 84, - total: 382, - }, - { - number: 663, - code: 1, - serial: 6631, - name: 'Talonflame', - type1: 'Fire', - type2: 'Flying', - color: 'Red', - ability1: 'Flame Body', - ability2: '', - 'ability hidden': 'Gale Wings', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 24.5, - hp: 78, - atk: 81, - def: 71, - sp_atk: 74, - sp_def: 69, - spd: 126, - total: 499, - }, - { - number: 664, - code: 1, - serial: 6641, - name: 'Scatterbug', - type1: 'Bug', - type2: '', - color: 'Black', - ability1: 'Shield Dust', - ability2: 'Compound Eyes', - 'ability hidden': 'Friend Guard', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2.5, - hp: 38, - atk: 35, - def: 40, - sp_atk: 27, - sp_def: 25, - spd: 35, - total: 200, - }, - { - number: 665, - code: 1, - serial: 6651, - name: 'Spewpa', - type1: 'Bug', - type2: '', - color: 'Black', - ability1: 'Shed Skin', - ability2: '', - 'ability hidden': 'Friend Guard', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 8.4, - hp: 45, - atk: 22, - def: 60, - sp_atk: 27, - sp_def: 30, - spd: 29, - total: 213, - }, - { - number: 666, - code: 1, - serial: 6661, - name: 'Vivillon', - type1: 'Bug', - type2: 'Flying', - color: 'White', - ability1: 'Shield Dust', - ability2: 'Compound Eyes', - 'ability hidden': 'Friend Guard', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 17, - hp: 80, - atk: 52, - def: 50, - sp_atk: 90, - sp_def: 50, - spd: 89, - total: 411, - }, - { - number: 667, - code: 1, - serial: 6671, - name: 'Litleo', - type1: 'Fire', - type2: 'Normal', - color: 'Brown', - ability1: 'Rivalry', - ability2: 'Unnerve', - 'ability hidden': 'Moxie', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 13.5, - hp: 62, - atk: 50, - def: 58, - sp_atk: 73, - sp_def: 54, - spd: 72, - total: 369, - }, - { - number: 668, - code: 1, - serial: 6681, - name: 'Pyroar', - type1: 'Fire', - type2: 'Normal', - color: 'Brown', - ability1: 'Rivalry', - ability2: 'Unnerve', - 'ability hidden': 'Moxie', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 81.5, - hp: 86, - atk: 68, - def: 72, - sp_atk: 109, - sp_def: 66, - spd: 106, - total: 507, - }, - { - number: 669, - code: 1, - serial: 6691, - name: 'Flabebe', - type1: 'Fairy', - type2: '', - color: 'White', - ability1: 'Flower Veil', - ability2: '', - 'ability hidden': 'Symbiosis', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.1, - weight: 0.1, - hp: 44, - atk: 38, - def: 39, - sp_atk: 61, - sp_def: 79, - spd: 42, - total: 303, - }, - { - number: 670, - code: 1, - serial: 6701, - name: 'Floette', - type1: 'Fairy', - type2: '', - color: 'White', - ability1: 'Flower Veil', - ability2: '', - 'ability hidden': 'Symbiosis', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.9, - hp: 54, - atk: 45, - def: 47, - sp_atk: 75, - sp_def: 98, - spd: 52, - total: 371, - }, - { - number: 671, - code: 1, - serial: 6711, - name: 'Florges', - type1: 'Fairy', - type2: '', - color: 'White', - ability1: 'Flower Veil', - ability2: '', - 'ability hidden': 'Symbiosis', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 10, - hp: 78, - atk: 65, - def: 68, - sp_atk: 112, - sp_def: 154, - spd: 75, - total: 552, - }, - { - number: 672, - code: 1, - serial: 6721, - name: 'Skiddo', - type1: 'Grass', - type2: '', - color: 'Brown', - ability1: 'Sap Sipper', - ability2: '', - 'ability hidden': 'Grass Pelt', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 31, - hp: 66, - atk: 65, - def: 48, - sp_atk: 62, - sp_def: 57, - spd: 52, - total: 350, - }, - { - number: 673, - code: 1, - serial: 6731, - name: 'Gogoat', - type1: 'Grass', - type2: '', - color: 'Brown', - ability1: 'Sap Sipper', - ability2: '', - 'ability hidden': 'Grass Pelt', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 91, - hp: 123, - atk: 100, - def: 62, - sp_atk: 97, - sp_def: 81, - spd: 68, - total: 531, - }, - { - number: 674, - code: 1, - serial: 6741, - name: 'Pancham', - type1: 'Fighting', - type2: '', - color: 'White', - ability1: 'Iron Fist', - ability2: 'Mold Breaker', - 'ability hidden': 'Scrappy', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8, - hp: 67, - atk: 82, - def: 62, - sp_atk: 46, - sp_def: 48, - spd: 43, - total: 348, - }, - { - number: 675, - code: 1, - serial: 6751, - name: 'Pangoro', - type1: 'Fighting', - type2: 'Dark', - color: 'White', - ability1: 'Iron Fist', - ability2: 'Mold Breaker', - 'ability hidden': 'Scrappy', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 2.1, - weight: 136, - hp: 95, - atk: 124, - def: 78, - sp_atk: 69, - sp_def: 71, - spd: 58, - total: 495, - }, - { - number: 676, - code: 1, - serial: 6761, - name: 'Furfrou', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Fur Coat', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 28, - hp: 75, - atk: 80, - def: 60, - sp_atk: 65, - sp_def: 90, - spd: 102, - total: 472, - }, - { - number: 677, - code: 1, - serial: 6771, - name: 'Espurr', - type1: 'Psychic', - type2: '', - color: 'Grey', - ability1: 'Keen Eye', - ability2: 'Infiltrator', - 'ability hidden': 'Own Tempo', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.5, - hp: 62, - atk: 48, - def: 54, - sp_atk: 63, - sp_def: 60, - spd: 68, - total: 355, - }, - { - number: 678, - code: 1, - serial: 6781, - name: 'Meowstic M', - type1: 'Psychic', - type2: '', - color: 'Blue', - ability1: 'Keen Eye', - ability2: 'Infiltrator', - 'ability hidden': 'Prankster', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8.5, - hp: 74, - atk: 48, - def: 76, - sp_atk: 83, - sp_def: 81, - spd: 104, - total: 466, - }, - { - number: 678, - code: 2, - serial: 6782, - name: 'Meowstic F', - type1: 'Psychic', - type2: '', - color: 'White', - ability1: 'Keen Eye', - ability2: 'Infiltrator', - 'ability hidden': 'Competitive', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8.5, - hp: 74, - atk: 48, - def: 76, - sp_atk: 83, - sp_def: 81, - spd: 104, - total: 466, - }, - { - number: 679, - code: 1, - serial: 6791, - name: 'Honedge', - type1: 'Steel', - type2: 'Ghost', - color: 'Brown', - ability1: 'No Guard', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 2, - hp: 45, - atk: 80, - def: 100, - sp_atk: 35, - sp_def: 37, - spd: 28, - total: 325, - }, - { - number: 680, - code: 1, - serial: 6801, - name: 'Doublade', - type1: 'Steel', - type2: 'Ghost', - color: 'Brown', - ability1: 'No Guard', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 4.5, - hp: 59, - atk: 110, - def: 150, - sp_atk: 45, - sp_def: 49, - spd: 35, - total: 448, - }, - { - number: 681, - code: 1, - serial: 6811, - name: 'Aegislash', - type1: 'Steel', - type2: 'Ghost', - color: 'Brown', - ability1: 'Stance Change', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 53, - hp: 60, - atk: 50, - def: 150, - sp_atk: 50, - sp_def: 150, - spd: 60, - total: 520, - }, - { - number: 681, - code: 2, - serial: 6812, - name: 'Aegislash', - type1: 'Steel', - type2: 'Ghost', - color: 'Brown', - ability1: 'Stance Change', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 53, - hp: 60, - atk: 150, - def: 50, - sp_atk: 150, - sp_def: 50, - spd: 60, - total: 520, - }, - { - number: 682, - code: 1, - serial: 6821, - name: 'Spritzee', - type1: 'Fairy', - type2: '', - color: 'Pink', - ability1: 'Healer', - ability2: '', - 'ability hidden': 'Aroma Veil', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.5, - hp: 78, - atk: 52, - def: 60, - sp_atk: 63, - sp_def: 65, - spd: 23, - total: 341, - }, - { - number: 683, - code: 1, - serial: 6831, - name: 'Aromatisse', - type1: 'Fairy', - type2: '', - color: 'Pink', - ability1: 'Healer', - ability2: '', - 'ability hidden': 'Aroma Veil', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 15.5, - hp: 101, - atk: 72, - def: 72, - sp_atk: 99, - sp_def: 89, - spd: 29, - total: 462, - }, - { - number: 684, - code: 1, - serial: 6841, - name: 'Swirlix', - type1: 'Fairy', - type2: '', - color: 'White', - ability1: 'Sweet Veil', - ability2: '', - 'ability hidden': 'Unburden', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 3.5, - hp: 62, - atk: 48, - def: 66, - sp_atk: 59, - sp_def: 57, - spd: 49, - total: 341, - }, - { - number: 685, - code: 1, - serial: 6851, - name: 'Slurpuff', - type1: 'Fairy', - type2: '', - color: 'White', - ability1: 'Sweet Veil', - ability2: '', - 'ability hidden': 'Unburden', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 5, - hp: 82, - atk: 80, - def: 86, - sp_atk: 85, - sp_def: 75, - spd: 72, - total: 480, - }, - { - number: 686, - code: 1, - serial: 6861, - name: 'Inkay', - type1: 'Dark', - type2: 'Psychic', - color: 'Blue', - ability1: 'Contrary', - ability2: 'Suction Cups', - 'ability hidden': 'Infiltrator', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 3.5, - hp: 53, - atk: 54, - def: 53, - sp_atk: 37, - sp_def: 46, - spd: 45, - total: 288, - }, - { - number: 687, - code: 1, - serial: 6871, - name: 'Malamar', - type1: 'Dark', - type2: 'Psychic', - color: 'Blue', - ability1: 'Contrary', - ability2: 'Suction Cups', - 'ability hidden': 'Infiltrator', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 47, - hp: 86, - atk: 92, - def: 88, - sp_atk: 68, - sp_def: 75, - spd: 73, - total: 482, - }, - { - number: 688, - code: 1, - serial: 6881, - name: 'Binacle', - type1: 'Rock', - type2: 'Water', - color: 'Brown', - ability1: 'Tough Claws', - ability2: 'Sniper', - 'ability hidden': 'Pickpocket', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 31, - hp: 42, - atk: 52, - def: 67, - sp_atk: 39, - sp_def: 56, - spd: 50, - total: 306, - }, - { - number: 689, - code: 1, - serial: 6891, - name: 'Barbaracle', - type1: 'Rock', - type2: 'Water', - color: 'Brown', - ability1: 'Tough Claws', - ability2: 'Sniper', - 'ability hidden': 'Pickpocket', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 96, - hp: 72, - atk: 105, - def: 115, - sp_atk: 54, - sp_def: 86, - spd: 68, - total: 500, - }, - { - number: 690, - code: 1, - serial: 6901, - name: 'Skrelp', - type1: 'Poison', - type2: 'Water', - color: 'Brown', - ability1: 'Poison Point', - ability2: 'Poison Touch', - 'ability hidden': 'Adaptability', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 7.3, - hp: 50, - atk: 60, - def: 60, - sp_atk: 60, - sp_def: 60, - spd: 30, - total: 320, - }, - { - number: 691, - code: 1, - serial: 6911, - name: 'Dragalge', - type1: 'Poison', - type2: 'Dragon', - color: 'Brown', - ability1: 'Poison Point', - ability2: 'Poison Touch', - 'ability hidden': 'Adaptability', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 81.5, - hp: 65, - atk: 75, - def: 90, - sp_atk: 97, - sp_def: 123, - spd: 44, - total: 494, - }, - { - number: 692, - code: 1, - serial: 6921, - name: 'Clauncher', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Mega Launcher', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 8.3, - hp: 50, - atk: 53, - def: 62, - sp_atk: 58, - sp_def: 63, - spd: 44, - total: 330, - }, - { - number: 693, - code: 1, - serial: 6931, - name: 'Clawitzer', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Mega Launcher', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 35.3, - hp: 71, - atk: 73, - def: 88, - sp_atk: 120, - sp_def: 89, - spd: 59, - total: 500, - }, - { - number: 694, - code: 1, - serial: 6941, - name: 'Helioptile', - type1: 'Electric', - type2: 'Normal', - color: 'Yellow', - ability1: 'Dry Skin', - ability2: 'Sand Veil', - 'ability hidden': 'Solar Power', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 6, - hp: 44, - atk: 38, - def: 33, - sp_atk: 61, - sp_def: 43, - spd: 70, - total: 289, - }, - { - number: 695, - code: 1, - serial: 6951, - name: 'Heliolisk', - type1: 'Electric', - type2: 'Normal', - color: 'Yellow', - ability1: 'Dry Skin', - ability2: 'Sand Veil', - 'ability hidden': 'Solar Power', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 21, - hp: 62, - atk: 55, - def: 52, - sp_atk: 109, - sp_def: 94, - spd: 109, - total: 481, - }, - { - number: 696, - code: 1, - serial: 6961, - name: 'Tyrunt', - type1: 'Rock', - type2: 'Dragon', - color: 'Brown', - ability1: 'Strong Jaw', - ability2: '', - 'ability hidden': 'Sturdy', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 26, - hp: 58, - atk: 89, - def: 77, - sp_atk: 45, - sp_def: 45, - spd: 48, - total: 362, - }, - { - number: 697, - code: 1, - serial: 6971, - name: 'Tyrantrum', - type1: 'Rock', - type2: 'Dragon', - color: 'Red', - ability1: 'Strong Jaw', - ability2: '', - 'ability hidden': 'Rock Head', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 2.5, - weight: 270, - hp: 82, - atk: 121, - def: 119, - sp_atk: 69, - sp_def: 59, - spd: 71, - total: 521, - }, - { - number: 698, - code: 1, - serial: 6981, - name: 'Amaura', - type1: 'Rock', - type2: 'Ice', - color: 'Blue', - ability1: 'Refrigerate', - ability2: '', - 'ability hidden': 'Snow Warning', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 25.2, - hp: 77, - atk: 59, - def: 50, - sp_atk: 67, - sp_def: 63, - spd: 46, - total: 362, - }, - { - number: 699, - code: 1, - serial: 6991, - name: 'Aurorus', - type1: 'Rock', - type2: 'Ice', - color: 'Blue', - ability1: 'Refrigerate', - ability2: '', - 'ability hidden': 'Snow Warning', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 2.7, - weight: 225, - hp: 123, - atk: 77, - def: 72, - sp_atk: 99, - sp_def: 92, - spd: 58, - total: 521, - }, - { - number: 700, - code: 1, - serial: 7001, - name: 'Sylveon', - type1: 'Fairy', - type2: '', - color: 'Pink', - ability1: 'Cute Charm', - ability2: '', - 'ability hidden': 'Pixilate', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 23.5, - hp: 95, - atk: 65, - def: 65, - sp_atk: 110, - sp_def: 130, - spd: 60, - total: 525, - }, - { - number: 701, - code: 1, - serial: 7011, - name: 'Hawlucha', - type1: 'Fighting', - type2: 'Flying', - color: 'Green', - ability1: 'Limber', - ability2: 'Unburden', - 'ability hidden': 'Mold Breaker', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 21.5, - hp: 78, - atk: 92, - def: 75, - sp_atk: 74, - sp_def: 63, - spd: 118, - total: 500, - }, - { - number: 702, - code: 1, - serial: 7021, - name: 'Dedenne', - type1: 'Electric', - type2: 'Fairy', - color: 'Yellow', - ability1: 'Cheek Pouch', - ability2: 'Pickup', - 'ability hidden': 'Plus', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 2.2, - hp: 67, - atk: 58, - def: 57, - sp_atk: 81, - sp_def: 67, - spd: 101, - total: 431, - }, - { - number: 703, - code: 1, - serial: 7031, - name: 'Carbink', - type1: 'Rock', - type2: 'Fairy', - color: 'Grey', - ability1: 'Clear Body', - ability2: '', - 'ability hidden': 'Sturdy', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 5.7, - hp: 50, - atk: 50, - def: 150, - sp_atk: 50, - sp_def: 150, - spd: 50, - total: 500, - }, - { - number: 704, - code: 1, - serial: 7041, - name: 'Goomy', - type1: 'Dragon', - type2: '', - color: 'Purple', - ability1: 'Sap Sipper', - ability2: 'Hydration', - 'ability hidden': 'Gooey', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2.8, - hp: 45, - atk: 50, - def: 35, - sp_atk: 55, - sp_def: 75, - spd: 40, - total: 300, - }, - { - number: 705, - code: 1, - serial: 7051, - name: 'Sliggoo', - type1: 'Dragon', - type2: '', - color: 'Purple', - ability1: 'Sap Sipper', - ability2: 'Hydration', - 'ability hidden': 'Gooey', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 17.5, - hp: 68, - atk: 75, - def: 53, - sp_atk: 83, - sp_def: 113, - spd: 60, - total: 452, - }, - { - number: 706, - code: 1, - serial: 7061, - name: 'Goodra', - type1: 'Dragon', - type2: '', - color: 'Purple', - ability1: 'Sap Sipper', - ability2: 'Hydration', - 'ability hidden': 'Gooey', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 150.5, - hp: 90, - atk: 100, - def: 70, - sp_atk: 110, - sp_def: 150, - spd: 80, - total: 600, - }, - { - number: 707, - code: 1, - serial: 7071, - name: 'Klefki', - type1: 'Steel', - type2: 'Fairy', - color: 'Grey', - ability1: 'Prankster', - ability2: '', - 'ability hidden': 'Magician', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 3, - hp: 57, - atk: 80, - def: 91, - sp_atk: 80, - sp_def: 87, - spd: 75, - total: 470, - }, - { - number: 708, - code: 1, - serial: 7081, - name: 'Phantump', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Natural Cure', - ability2: 'Frisk', - 'ability hidden': 'Harvest', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 7, - hp: 43, - atk: 70, - def: 48, - sp_atk: 50, - sp_def: 60, - spd: 38, - total: 309, - }, - { - number: 709, - code: 1, - serial: 7091, - name: 'Trevenant', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Natural Cure', - ability2: 'Frisk', - 'ability hidden': 'Harvest', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 71, - hp: 85, - atk: 110, - def: 76, - sp_atk: 65, - sp_def: 82, - spd: 56, - total: 474, - }, - { - number: 710, - code: 1, - serial: 7101, - name: 'Pumpkaboo', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Frisk', - 'ability hidden': 'Insomnia', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.5, - hp: 49, - atk: 66, - def: 70, - sp_atk: 44, - sp_def: 55, - spd: 51, - total: 335, - }, - { - number: 710, - code: 2, - serial: 7102, - name: 'Pumpkaboo', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Frisk', - 'ability hidden': 'Insomnia', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5, - hp: 44, - atk: 66, - def: 70, - sp_atk: 44, - sp_def: 55, - spd: 56, - total: 335, - }, - { - number: 710, - code: 3, - serial: 7103, - name: 'Pumpkaboo', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Frisk', - 'ability hidden': 'Insomnia', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 7.5, - hp: 54, - atk: 66, - def: 70, - sp_atk: 44, - sp_def: 55, - spd: 46, - total: 335, - }, - { - number: 710, - code: 4, - serial: 7104, - name: 'Pumpkaboo', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Frisk', - 'ability hidden': 'Insomnia', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 15, - hp: 59, - atk: 66, - def: 70, - sp_atk: 44, - sp_def: 55, - spd: 41, - total: 335, - }, - { - number: 711, - code: 1, - serial: 7111, - name: 'Gourgeist', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Frisk', - 'ability hidden': 'Insomnia', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 9.5, - hp: 65, - atk: 90, - def: 122, - sp_atk: 58, - sp_def: 75, - spd: 84, - total: 494, - }, - { - number: 711, - code: 2, - serial: 7112, - name: 'Gourgeist', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Frisk', - 'ability hidden': 'Insomnia', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 12.5, - hp: 55, - atk: 85, - def: 122, - sp_atk: 58, - sp_def: 75, - spd: 99, - total: 494, - }, - { - number: 711, - code: 3, - serial: 7113, - name: 'Gourgeist', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Frisk', - 'ability hidden': 'Insomnia', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 14, - hp: 75, - atk: 95, - def: 122, - sp_atk: 58, - sp_def: 75, - spd: 69, - total: 494, - }, - { - number: 711, - code: 4, - serial: 7114, - name: 'Gourgeist', - type1: 'Ghost', - type2: 'Grass', - color: 'Brown', - ability1: 'Pickup', - ability2: 'Frisk', - 'ability hidden': 'Insomnia', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 39, - hp: 85, - atk: 100, - def: 122, - sp_atk: 58, - sp_def: 75, - spd: 54, - total: 494, - }, - { - number: 712, - code: 1, - serial: 7121, - name: 'Bergmite', - type1: 'Ice', - type2: '', - color: 'Blue', - ability1: 'Own Tempo', - ability2: 'Ice Body', - 'ability hidden': 'Sturdy', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 99.5, - hp: 55, - atk: 69, - def: 85, - sp_atk: 32, - sp_def: 35, - spd: 28, - total: 304, - }, - { - number: 713, - code: 1, - serial: 7131, - name: 'Avalugg', - type1: 'Ice', - type2: '', - color: 'Blue', - ability1: 'Own Tempo', - ability2: 'Ice Body', - 'ability hidden': 'Sturdy', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 505, - hp: 95, - atk: 117, - def: 184, - sp_atk: 44, - sp_def: 46, - spd: 28, - total: 514, - }, - { - number: 714, - code: 1, - serial: 7141, - name: 'Noibat', - type1: 'Flying', - type2: 'Dragon', - color: 'Purple', - ability1: 'Frisk', - ability2: 'Infiltrator', - 'ability hidden': 'Telepathy', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 8, - hp: 40, - atk: 30, - def: 35, - sp_atk: 45, - sp_def: 40, - spd: 55, - total: 245, - }, - { - number: 715, - code: 1, - serial: 7151, - name: 'Noivern', - type1: 'Flying', - type2: 'Dragon', - color: 'Purple', - ability1: 'Frisk', - ability2: 'Infiltrator', - 'ability hidden': 'Telepathy', - generation: 6, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 85, - hp: 85, - atk: 70, - def: 80, - sp_atk: 97, - sp_def: 80, - spd: 123, - total: 535, - }, - { - number: 716, - code: 1, - serial: 7161, - name: 'Xerneas', - type1: 'Fairy', - type2: '', - color: 'Blue', - ability1: 'Fairy Aura', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 3, - weight: 215, - hp: 126, - atk: 131, - def: 95, - sp_atk: 131, - sp_def: 98, - spd: 99, - total: 680, - }, - { - number: 717, - code: 1, - serial: 7171, - name: 'Yveltal', - type1: 'Dark', - type2: 'Flying', - color: 'Red', - ability1: 'Dark Aura', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 5.8, - weight: 203, - hp: 126, - atk: 131, - def: 95, - sp_atk: 131, - sp_def: 98, - spd: 99, - total: 680, - }, - { - number: 718, - code: 1, - serial: 7181, - name: 'Zygarde', - type1: 'Dragon', - type2: 'Ground', - color: 'Green', - ability1: 'Aura Break', - ability2: 'Power Construct', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 5, - weight: 305, - hp: 108, - atk: 100, - def: 121, - sp_atk: 81, - sp_def: 95, - spd: 95, - total: 600, - }, - { - number: 718, - code: 2, - serial: 7182, - name: 'Zygarde', - type1: 'Dragon', - type2: 'Ground', - color: 'Black', - ability1: 'Aura Break', - ability2: 'Power Construct', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 1.2, - weight: 33.5, - hp: 54, - atk: 100, - def: 71, - sp_atk: 61, - sp_def: 85, - spd: 115, - total: 486, - }, - { - number: 718, - code: 3, - serial: 7183, - name: 'Zygarde', - type1: 'Dragon', - type2: 'Ground', - color: 'Black', - ability1: 'Power Construct', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 4.5, - weight: 610, - hp: 216, - atk: 100, - def: 121, - sp_atk: 91, - sp_def: 95, - spd: 85, - total: 708, - }, - { - number: 719, - code: 1, - serial: 7191, - name: 'Diancie', - type1: 'Rock', - type2: 'Fairy', - color: 'Pink', - ability1: 'Clear Body', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 0.7, - weight: 8.8, - hp: 50, - atk: 100, - def: 150, - sp_atk: 100, - sp_def: 150, - spd: 50, - total: 600, - }, - { - number: 719, - code: 2, - serial: 7192, - name: 'Mega Diancie', - type1: 'Rock', - type2: 'Fairy', - color: 'Pink', - ability1: 'Magic Bounce', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 1, - height: 1.1, - weight: 27.8, - hp: 50, - atk: 160, - def: 110, - sp_atk: 160, - sp_def: 110, - spd: 110, - total: 700, - }, - { - number: 720, - code: 1, - serial: 7201, - name: 'Hoopa', - type1: 'Psychic', - type2: 'Ghost', - color: 'Purple', - ability1: 'Magician', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 0.5, - weight: 9, - hp: 80, - atk: 110, - def: 60, - sp_atk: 150, - sp_def: 130, - spd: 70, - total: 600, - }, - { - number: 720, - code: 2, - serial: 7202, - name: 'Hoopa', - type1: 'Psychic', - type2: 'Dark', - color: 'Purple', - ability1: 'Magician', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 6.5, - weight: 490, - hp: 80, - atk: 160, - def: 60, - sp_atk: 170, - sp_def: 130, - spd: 80, - total: 680, - }, - { - number: 721, - code: 1, - serial: 7211, - name: 'Volcanion', - type1: 'Fire', - type2: 'Water', - color: 'Brown', - ability1: 'Watet Absorb', - ability2: '', - 'ability hidden': '', - generation: 6, - legendary: 1, - mega_evolution: 0, - height: 1.7, - weight: 195, - hp: 80, - atk: 110, - def: 120, - sp_atk: 130, - sp_def: 90, - spd: 70, - total: 600, - }, - { - number: 722, - code: 1, - serial: 7221, - name: 'Rowlet', - type1: 'Grass', - type2: 'Flying', - color: 'Brown', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Long Reach', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1.5, - hp: 68, - atk: 55, - def: 55, - sp_atk: 50, - sp_def: 50, - spd: 42, - total: 320, - }, - { - number: 723, - code: 1, - serial: 7231, - name: 'Dartrix', - type1: 'Grass', - type2: 'Flying', - color: 'Brown', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Long Reach', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 16, - hp: 78, - atk: 75, - def: 75, - sp_atk: 70, - sp_def: 70, - spd: 52, - total: 420, - }, - { - number: 724, - code: 1, - serial: 7241, - name: 'Decidueye', - type1: 'Grass', - type2: 'Ghost', - color: 'Brown', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Long Reach', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 36.6, - hp: 78, - atk: 107, - def: 75, - sp_atk: 100, - sp_def: 100, - spd: 70, - total: 530, - }, - { - number: 725, - code: 1, - serial: 7251, - name: 'Litten', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Intimidate', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 4.3, - hp: 45, - atk: 65, - def: 40, - sp_atk: 60, - sp_def: 40, - spd: 70, - total: 320, - }, - { - number: 726, - code: 1, - serial: 7261, - name: 'Torracat', - type1: 'Fire', - type2: '', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Intimidate', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 25, - hp: 65, - atk: 85, - def: 50, - sp_atk: 80, - sp_def: 50, - spd: 90, - total: 420, - }, - { - number: 727, - code: 1, - serial: 7271, - name: 'Incineroar', - type1: 'Fire', - type2: 'Dark', - color: 'Red', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Intimidate', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 83, - hp: 95, - atk: 115, - def: 90, - sp_atk: 80, - sp_def: 90, - spd: 60, - total: 530, - }, - { - number: 728, - code: 1, - serial: 7281, - name: 'Popplio', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Liquid Voice', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 7.5, - hp: 50, - atk: 54, - def: 54, - sp_atk: 66, - sp_def: 56, - spd: 40, - total: 320, - }, - { - number: 729, - code: 1, - serial: 7291, - name: 'Brionne', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Liquid Voice', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 17.5, - hp: 60, - atk: 69, - def: 69, - sp_atk: 91, - sp_def: 81, - spd: 50, - total: 420, - }, - { - number: 730, - code: 1, - serial: 7301, - name: 'Primarina', - type1: 'Water', - type2: 'Fairy', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Liquid Voice', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 44, - hp: 80, - atk: 74, - def: 74, - sp_atk: 126, - sp_def: 116, - spd: 60, - total: 530, - }, - { - number: 731, - code: 1, - serial: 7311, - name: 'Pikipek', - type1: 'Normal', - type2: 'Flying', - color: 'Black', - ability1: 'Keen Eye', - ability2: 'Skill Link', - 'ability hidden': 'Pickup', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1.2, - hp: 35, - atk: 75, - def: 30, - sp_atk: 30, - sp_def: 30, - spd: 65, - total: 265, - }, - { - number: 732, - code: 1, - serial: 7321, - name: 'Trumbeak', - type1: 'Normal', - type2: 'Flying', - color: 'Black', - ability1: 'Keen Eye', - ability2: 'Skill Link', - 'ability hidden': 'Pickup', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 14.8, - hp: 55, - atk: 85, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 75, - total: 355, - }, - { - number: 733, - code: 1, - serial: 7331, - name: 'Toucannon', - type1: 'Normal', - type2: 'Flying', - color: 'Black', - ability1: 'Keen Eye', - ability2: 'Skill Link', - 'ability hidden': 'Sheer Force', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 26, - hp: 80, - atk: 120, - def: 75, - sp_atk: 75, - sp_def: 75, - spd: 60, - total: 485, - }, - { - number: 734, - code: 1, - serial: 7341, - name: 'Yungoos', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Stakeout', - ability2: 'Strong Jaw', - 'ability hidden': 'Adaptability', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 6, - hp: 48, - atk: 70, - def: 30, - sp_atk: 30, - sp_def: 30, - spd: 45, - total: 253, - }, - { - number: 735, - code: 1, - serial: 7351, - name: 'Gumshoos', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Stakeout', - ability2: 'Strong Jaw', - 'ability hidden': 'Adaptability', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 14.2, - hp: 88, - atk: 110, - def: 60, - sp_atk: 55, - sp_def: 60, - spd: 45, - total: 418, - }, - { - number: 736, - code: 1, - serial: 7361, - name: 'Grubbin', - type1: 'Bug', - type2: '', - color: 'Grey', - ability1: 'Swarm', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 4.4, - hp: 47, - atk: 62, - def: 45, - sp_atk: 55, - sp_def: 45, - spd: 46, - total: 300, - }, - { - number: 737, - code: 1, - serial: 7371, - name: 'Charjabug', - type1: 'Bug', - type2: 'Electric', - color: 'Green', - ability1: 'Battery', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 10.5, - hp: 57, - atk: 82, - def: 95, - sp_atk: 55, - sp_def: 75, - spd: 36, - total: 400, - }, - { - number: 738, - code: 1, - serial: 7381, - name: 'Vikavolt', - type1: 'Bug', - type2: 'Electric', - color: 'Blue', - ability1: 'Levitate', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 45, - hp: 77, - atk: 70, - def: 90, - sp_atk: 145, - sp_def: 75, - spd: 43, - total: 500, - }, - { - number: 739, - code: 1, - serial: 7391, - name: 'Crabrawler', - type1: 'Fighting', - type2: '', - color: 'Purple', - ability1: 'Hyper Cutter', - ability2: 'Iron Fist', - 'ability hidden': 'Anger Point', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 7, - hp: 47, - atk: 82, - def: 57, - sp_atk: 42, - sp_def: 47, - spd: 63, - total: 338, - }, - { - number: 740, - code: 1, - serial: 7401, - name: 'Crabominable', - type1: 'Fighting', - type2: 'Ice', - color: 'White', - ability1: 'Hyper Cutter', - ability2: 'Iron Fist', - 'ability hidden': 'Anger Point', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.7, - weight: 180, - hp: 97, - atk: 132, - def: 77, - sp_atk: 62, - sp_def: 67, - spd: 43, - total: 478, - }, - { - number: 741, - code: 1, - serial: 7411, - name: 'Oricorio', - type1: 'Fire', - type2: 'Flying', - color: 'Red', - ability1: 'Dancer', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 3.4, - hp: 75, - atk: 70, - def: 70, - sp_atk: 98, - sp_def: 70, - spd: 93, - total: 476, - }, - { - number: 741, - code: 2, - serial: 7412, - name: 'Oricorio', - type1: 'Electric', - type2: 'Flying', - color: 'Yellow', - ability1: 'Dancer', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 3.4, - hp: 75, - atk: 70, - def: 70, - sp_atk: 98, - sp_def: 70, - spd: 93, - total: 476, - }, - { - number: 741, - code: 3, - serial: 7413, - name: 'Oricorio', - type1: 'Psychic', - type2: 'Flying', - color: 'Pink', - ability1: 'Dancer', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 3.4, - hp: 75, - atk: 70, - def: 70, - sp_atk: 98, - sp_def: 70, - spd: 93, - total: 476, - }, - { - number: 741, - code: 4, - serial: 7414, - name: 'Oricorio', - type1: 'Ghost', - type2: 'Flying', - color: 'Purple', - ability1: 'Dancer', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 3.4, - hp: 75, - atk: 70, - def: 70, - sp_atk: 98, - sp_def: 70, - spd: 93, - total: 476, - }, - { - number: 742, - code: 1, - serial: 7421, - name: 'Cutiefly', - type1: 'Bug', - type2: 'Fairy', - color: 'Yellow', - ability1: 'Honey Gather', - ability2: 'Shield Dust', - 'ability hidden': 'Sweet Veil', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.1, - weight: 0.2, - hp: 40, - atk: 45, - def: 40, - sp_atk: 55, - sp_def: 40, - spd: 84, - total: 304, - }, - { - number: 743, - code: 1, - serial: 7431, - name: 'Ribombee', - type1: 'Bug', - type2: 'Fairy', - color: 'Yellow', - ability1: 'Honey Gather', - ability2: 'Shield Dust', - 'ability hidden': 'Sweet Veil', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.5, - hp: 60, - atk: 55, - def: 60, - sp_atk: 95, - sp_def: 70, - spd: 124, - total: 464, - }, - { - number: 744, - code: 1, - serial: 7441, - name: 'Rockruff', - type1: 'Rock', - type2: '', - color: 'Brown', - ability1: 'Keen Eye', - ability2: 'Vital Spilit', - 'ability hidden': 'Steadfast', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9.2, - hp: 45, - atk: 65, - def: 40, - sp_atk: 30, - sp_def: 40, - spd: 60, - total: 280, - }, - { - number: 744, - code: 2, - serial: 7442, - name: 'Rockruff', - type1: 'Rock', - type2: '', - color: 'Brown', - ability1: 'Own Tempo', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 9.2, - hp: 45, - atk: 65, - def: 40, - sp_atk: 30, - sp_def: 40, - spd: 60, - total: 280, - }, - { - number: 745, - code: 1, - serial: 7451, - name: 'Lycanroc', - type1: 'Rock', - type2: '', - color: 'Brown', - ability1: 'Keen Eye', - ability2: 'Sand Rush', - 'ability hidden': 'Steadfast', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 25, - hp: 75, - atk: 115, - def: 65, - sp_atk: 55, - sp_def: 65, - spd: 112, - total: 487, - }, - { - number: 745, - code: 2, - serial: 7452, - name: 'Lycanroc', - type1: 'Rock', - type2: '', - color: 'Red', - ability1: 'Keen Eye', - ability2: 'Vital Spilit', - 'ability hidden': 'No Guard', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 25, - hp: 85, - atk: 115, - def: 75, - sp_atk: 55, - sp_def: 75, - spd: 82, - total: 487, - }, - { - number: 745, - code: 3, - serial: 7453, - name: 'Lycanroc', - type1: 'Rock', - type2: '', - color: 'Brown', - ability1: 'Tough Claws', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 25, - hp: 75, - atk: 117, - def: 65, - sp_atk: 55, - sp_def: 65, - spd: 110, - total: 487, - }, - { - number: 746, - code: 1, - serial: 7461, - name: 'Wishiwashi', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Schooling', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.3, - hp: 45, - atk: 20, - def: 20, - sp_atk: 25, - sp_def: 25, - spd: 40, - total: 175, - }, - { - number: 746, - code: 2, - serial: 7462, - name: 'Wishiwashi', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Schooling', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 8.2, - weight: 78.6, - hp: 45, - atk: 140, - def: 130, - sp_atk: 140, - sp_def: 135, - spd: 30, - total: 620, - }, - { - number: 747, - code: 1, - serial: 7471, - name: 'Mareanie', - type1: 'Poison', - type2: 'Water', - color: 'Blue', - ability1: 'Merciness', - ability2: 'Limber', - 'ability hidden': 'Regenerator', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 8, - hp: 50, - atk: 53, - def: 62, - sp_atk: 43, - sp_def: 52, - spd: 45, - total: 305, - }, - { - number: 748, - code: 1, - serial: 7481, - name: 'Toxapex', - type1: 'Poison', - type2: 'Water', - color: 'Blue', - ability1: 'Merciness', - ability2: 'Limber', - 'ability hidden': 'Regenerator', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 14.5, - hp: 50, - atk: 63, - def: 152, - sp_atk: 53, - sp_def: 142, - spd: 35, - total: 495, - }, - { - number: 749, - code: 1, - serial: 7491, - name: 'Mudbray', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Own Tempo', - ability2: 'Stamina', - 'ability hidden': 'Inner Focus', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 110, - hp: 70, - atk: 100, - def: 70, - sp_atk: 45, - sp_def: 55, - spd: 45, - total: 385, - }, - { - number: 750, - code: 1, - serial: 7501, - name: 'Mudsdale', - type1: 'Ground', - type2: '', - color: 'Brown', - ability1: 'Own Tempo', - ability2: 'Stamina', - 'ability hidden': 'Inner Focus', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 2.5, - weight: 920, - hp: 100, - atk: 125, - def: 100, - sp_atk: 55, - sp_def: 85, - spd: 35, - total: 500, - }, - { - number: 751, - code: 1, - serial: 7511, - name: 'Dewpider', - type1: 'Water', - type2: 'Bug', - color: 'Green', - ability1: 'Water Bubble', - ability2: '', - 'ability hidden': 'Water Absorb', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 4, - hp: 38, - atk: 40, - def: 52, - sp_atk: 40, - sp_def: 72, - spd: 27, - total: 269, - }, - { - number: 752, - code: 1, - serial: 7521, - name: 'Araquanid', - type1: 'Water', - type2: 'Bug', - color: 'Green', - ability1: 'Water Bubble', - ability2: '', - 'ability hidden': 'Water Absorb', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 82, - hp: 68, - atk: 70, - def: 92, - sp_atk: 50, - sp_def: 132, - spd: 42, - total: 454, - }, - { - number: 753, - code: 1, - serial: 7531, - name: 'Fomantis', - type1: 'Grass', - type2: '', - color: 'Pink', - ability1: 'Leaf Guard', - ability2: '', - 'ability hidden': 'Contrary', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1.5, - hp: 40, - atk: 55, - def: 35, - sp_atk: 50, - sp_def: 35, - spd: 35, - total: 250, - }, - { - number: 754, - code: 1, - serial: 7541, - name: 'Lurantis', - type1: 'Grass', - type2: '', - color: 'Pink', - ability1: 'Leaf Guard', - ability2: '', - 'ability hidden': 'Contrary', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 18.5, - hp: 70, - atk: 105, - def: 90, - sp_atk: 80, - sp_def: 90, - spd: 45, - total: 480, - }, - { - number: 755, - code: 1, - serial: 7551, - name: 'Morelull', - type1: 'Grass', - type2: 'Fairy', - color: 'Purple', - ability1: 'Illuminate', - ability2: 'Effect Spore', - 'ability hidden': 'Rain Dish', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 1.5, - hp: 40, - atk: 35, - def: 55, - sp_atk: 65, - sp_def: 75, - spd: 15, - total: 285, - }, - { - number: 756, - code: 1, - serial: 7561, - name: 'Shiinotic', - type1: 'Grass', - type2: 'Fairy', - color: 'Purple', - ability1: 'Illuminate', - ability2: 'Effect Spore', - 'ability hidden': 'Rain Dish', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 11.5, - hp: 60, - atk: 45, - def: 80, - sp_atk: 90, - sp_def: 100, - spd: 30, - total: 405, - }, - { - number: 757, - code: 1, - serial: 7571, - name: 'Salandit', - type1: 'Poison', - type2: 'Fire', - color: 'Black', - ability1: 'Corrosion', - ability2: '', - 'ability hidden': 'Oblivious', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 4.8, - hp: 48, - atk: 44, - def: 40, - sp_atk: 71, - sp_def: 40, - spd: 77, - total: 320, - }, - { - number: 758, - code: 1, - serial: 7581, - name: 'Salazzle', - type1: 'Poison', - type2: 'Fire', - color: 'Black', - ability1: 'Corrosion', - ability2: '', - 'ability hidden': 'Oblivious', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 22.2, - hp: 68, - atk: 64, - def: 60, - sp_atk: 111, - sp_def: 60, - spd: 117, - total: 480, - }, - { - number: 759, - code: 1, - serial: 7591, - name: 'Stufful', - type1: 'Normal', - type2: 'Fighting', - color: 'Pink', - ability1: 'Fluffy', - ability2: 'Klutz', - 'ability hidden': 'Cute Charm', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 6.8, - hp: 70, - atk: 75, - def: 50, - sp_atk: 45, - sp_def: 50, - spd: 50, - total: 340, - }, - { - number: 760, - code: 1, - serial: 7601, - name: 'Bewear', - type1: 'Normal', - type2: 'Fighting', - color: 'Pink', - ability1: 'Fluffy', - ability2: 'Klutz', - 'ability hidden': 'Unnerve', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 2.1, - weight: 135, - hp: 120, - atk: 125, - def: 80, - sp_atk: 55, - sp_def: 60, - spd: 60, - total: 500, - }, - { - number: 761, - code: 1, - serial: 7611, - name: 'Bounsweet', - type1: 'Grass', - type2: '', - color: 'Purple', - ability1: 'Leaf Guard', - ability2: 'Oblivious', - 'ability hidden': 'Sweet Veil', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.2, - hp: 42, - atk: 30, - def: 38, - sp_atk: 30, - sp_def: 38, - spd: 32, - total: 210, - }, - { - number: 762, - code: 1, - serial: 7621, - name: 'Steenee', - type1: 'Grass', - type2: '', - color: 'Purple', - ability1: 'Leaf Guard', - ability2: 'Oblivious', - 'ability hidden': 'Sweet Veil', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 8.2, - hp: 52, - atk: 40, - def: 48, - sp_atk: 40, - sp_def: 48, - spd: 62, - total: 290, - }, - { - number: 763, - code: 1, - serial: 7631, - name: 'Tsareena', - type1: 'Grass', - type2: '', - color: 'Purple', - ability1: 'Leaf Guard', - ability2: 'Queenly Majesty', - 'ability hidden': 'Sweet Veil', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 21.4, - hp: 72, - atk: 120, - def: 98, - sp_atk: 50, - sp_def: 98, - spd: 72, - total: 510, - }, - { - number: 764, - code: 1, - serial: 7641, - name: 'Comfey', - type1: 'Fairy', - type2: '', - color: 'Green', - ability1: 'Flower Veil', - ability2: 'Triage', - 'ability hidden': 'Natural Cure', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.1, - weight: 0.3, - hp: 51, - atk: 52, - def: 90, - sp_atk: 82, - sp_def: 110, - spd: 100, - total: 485, - }, - { - number: 765, - code: 1, - serial: 7651, - name: 'Oranguru', - type1: 'Normal', - type2: 'Psychic', - color: 'White', - ability1: 'Inner Focus', - ability2: 'Telepathy', - 'ability hidden': 'Symbiosis', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 76, - hp: 90, - atk: 60, - def: 80, - sp_atk: 90, - sp_def: 110, - spd: 60, - total: 490, - }, - { - number: 766, - code: 1, - serial: 7661, - name: 'Passimian', - type1: 'Fighting', - type2: '', - color: 'White', - ability1: 'Reciever', - ability2: '', - 'ability hidden': 'Defiant', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 82.8, - hp: 100, - atk: 120, - def: 90, - sp_atk: 40, - sp_def: 60, - spd: 80, - total: 490, - }, - { - number: 767, - code: 1, - serial: 7671, - name: 'Wimpod', - type1: 'Bug', - type2: 'Water', - color: 'Grey', - ability1: 'Wimp Out', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 12, - hp: 25, - atk: 35, - def: 40, - sp_atk: 20, - sp_def: 30, - spd: 80, - total: 230, - }, - { - number: 768, - code: 1, - serial: 7681, - name: 'Golisopod', - type1: 'Bug', - type2: 'Water', - color: 'Grey', - ability1: 'Emergency Exit', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 108, - hp: 75, - atk: 125, - def: 140, - sp_atk: 60, - sp_def: 90, - spd: 40, - total: 530, - }, - { - number: 769, - code: 1, - serial: 7691, - name: 'Sandygast', - type1: 'Ghost', - type2: 'Ground', - color: 'Brown', - ability1: 'Water Compaction', - ability2: '', - 'ability hidden': 'Sand Veil', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 70, - hp: 55, - atk: 55, - def: 80, - sp_atk: 70, - sp_def: 45, - spd: 15, - total: 320, - }, - { - number: 770, - code: 1, - serial: 7701, - name: 'Palossand', - type1: 'Ghost', - type2: 'Ground', - color: 'Brown', - ability1: 'Water Compaction', - ability2: '', - 'ability hidden': 'Sand Veil', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 250, - hp: 85, - atk: 75, - def: 110, - sp_atk: 100, - sp_def: 75, - spd: 35, - total: 480, - }, - { - number: 771, - code: 1, - serial: 7711, - name: 'Pyukumuku', - type1: 'Water', - type2: '', - color: 'Black', - ability1: 'Innards Out', - ability2: '', - 'ability hidden': 'Unaware', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1.2, - hp: 55, - atk: 60, - def: 130, - sp_atk: 30, - sp_def: 130, - spd: 5, - total: 410, - }, - { - number: 772, - code: 1, - serial: 7721, - name: 'Type: Null', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'Battle Armor', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.9, - weight: 120.5, - hp: 95, - atk: 95, - def: 95, - sp_atk: 95, - sp_def: 95, - spd: 59, - total: 534, - }, - { - number: 773, - code: 1, - serial: 7731, - name: 'Silvally', - type1: 'Normal', - type2: '', - color: 'Grey', - ability1: 'RKS System', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 2.3, - weight: 100.5, - hp: 95, - atk: 95, - def: 95, - sp_atk: 95, - sp_def: 95, - spd: 95, - total: 570, - }, - { - number: 774, - code: 1, - serial: 7741, - name: 'Minior', - type1: 'Rock', - type2: 'Flying', - color: 'Brown', - ability1: 'Shields Down', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 40, - hp: 60, - atk: 60, - def: 100, - sp_atk: 60, - sp_def: 100, - spd: 60, - total: 440, - }, - { - number: 774, - code: 2, - serial: 7742, - name: 'Minior', - type1: 'Rock', - type2: 'Flying', - color: 'Brown', - ability1: 'Shields Down', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.3, - hp: 60, - atk: 100, - def: 60, - sp_atk: 100, - sp_def: 60, - spd: 120, - total: 500, - }, - { - number: 775, - code: 1, - serial: 7751, - name: 'Komala', - type1: 'Normal', - type2: '', - color: 'Blue', - ability1: 'Comatose', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 19.9, - hp: 65, - atk: 115, - def: 65, - sp_atk: 75, - sp_def: 95, - spd: 65, - total: 480, - }, - { - number: 776, - code: 1, - serial: 7761, - name: 'Turtonator', - type1: 'Fire', - type2: 'Dragon', - color: 'Red', - ability1: 'Shell Armor', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 212, - hp: 60, - atk: 78, - def: 135, - sp_atk: 91, - sp_def: 85, - spd: 36, - total: 485, - }, - { - number: 777, - code: 1, - serial: 7771, - name: 'Togedemaru', - type1: 'Electric', - type2: 'Steel', - color: 'Grey', - ability1: 'Iron Barbs', - ability2: 'Lightning Rod', - 'ability hidden': 'Sturdy', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.3, - hp: 65, - atk: 98, - def: 63, - sp_atk: 40, - sp_def: 73, - spd: 96, - total: 435, - }, - { - number: 778, - code: 1, - serial: 7781, - name: 'Mimikyu', - type1: 'Ghost', - type2: 'Fairy', - color: 'Yellow', - ability1: 'Disguise', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.7, - hp: 55, - atk: 90, - def: 80, - sp_atk: 50, - sp_def: 105, - spd: 96, - total: 476, - }, - { - number: 779, - code: 1, - serial: 7791, - name: 'Bruxish', - type1: 'Water', - type2: 'Psychic', - color: 'Pink', - ability1: 'Dazzling', - ability2: 'Strong Jaw', - 'ability hidden': 'Wonder Skin', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 19, - hp: 68, - atk: 105, - def: 70, - sp_atk: 70, - sp_def: 70, - spd: 92, - total: 475, - }, - { - number: 780, - code: 1, - serial: 7801, - name: 'Drampa', - type1: 'Normal', - type2: 'Dragon', - color: 'White', - ability1: 'Berserk', - ability2: 'Sap Sipper', - 'ability hidden': 'Cloud Nine', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 3, - weight: 185, - hp: 78, - atk: 60, - def: 85, - sp_atk: 135, - sp_def: 91, - spd: 36, - total: 485, - }, - { - number: 781, - code: 1, - serial: 7811, - name: 'Dhelmise', - type1: 'Ghost', - type2: 'Grass', - color: 'Green', - ability1: 'Steelworker', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 3.9, - weight: 210, - hp: 70, - atk: 131, - def: 100, - sp_atk: 86, - sp_def: 90, - spd: 40, - total: 517, - }, - { - number: 782, - code: 1, - serial: 7821, - name: 'Jangmo-o', - type1: 'Dragon', - type2: '', - color: 'Grey', - ability1: 'Bulletproof', - ability2: 'Soundproof', - 'ability hidden': 'Overcoat', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 29.7, - hp: 45, - atk: 55, - def: 65, - sp_atk: 45, - sp_def: 45, - spd: 45, - total: 300, - }, - { - number: 783, - code: 1, - serial: 7831, - name: 'Hakamo-o', - type1: 'Dragon', - type2: 'Fighting', - color: 'Grey', - ability1: 'Bulletproof', - ability2: 'Soundproof', - 'ability hidden': 'Overcoat', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 47, - hp: 55, - atk: 75, - def: 90, - sp_atk: 65, - sp_def: 70, - spd: 65, - total: 420, - }, - { - number: 784, - code: 1, - serial: 7841, - name: 'Kommo-o', - type1: 'Dragon', - type2: 'Fighting', - color: 'Grey', - ability1: 'Bulletproof', - ability2: 'Soundproof', - 'ability hidden': 'Overcoat', - generation: 7, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 78.2, - hp: 75, - atk: 110, - def: 125, - sp_atk: 100, - sp_def: 105, - spd: 85, - total: 600, - }, - { - number: 785, - code: 1, - serial: 7851, - name: 'Tapu Koko', - type1: 'Electric', - type2: 'Fairy', - color: 'Yellow', - ability1: 'Electric Surge', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.8, - weight: 20.5, - hp: 70, - atk: 115, - def: 85, - sp_atk: 95, - sp_def: 75, - spd: 130, - total: 570, - }, - { - number: 786, - code: 1, - serial: 7861, - name: 'Tapu Lele', - type1: 'Psychic', - type2: 'Fairy', - color: 'Pink', - ability1: 'Psychic Surge', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.2, - weight: 28.6, - hp: 70, - atk: 85, - def: 75, - sp_atk: 130, - sp_def: 115, - spd: 95, - total: 570, - }, - { - number: 787, - code: 1, - serial: 7871, - name: 'Tapu Bulu', - type1: 'Grass', - type2: 'Fairy', - color: 'Red', - ability1: 'Grassy Surge', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.9, - weight: 45.5, - hp: 70, - atk: 130, - def: 115, - sp_atk: 85, - sp_def: 95, - spd: 75, - total: 570, - }, - { - number: 788, - code: 1, - serial: 7881, - name: 'Tapu Fini', - type1: 'Water', - type2: 'Fairy', - color: 'Purple', - ability1: 'Misty Surge', - ability2: '', - 'ability hidden': 'Telepathy', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.3, - weight: 21.2, - hp: 70, - atk: 75, - def: 115, - sp_atk: 95, - sp_def: 130, - spd: 85, - total: 570, - }, - { - number: 789, - code: 1, - serial: 7891, - name: 'Cosmog', - type1: 'Psychic', - type2: '', - color: 'Blue', - ability1: 'Unaware', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 0.2, - weight: 0.1, - hp: 43, - atk: 29, - def: 31, - sp_atk: 29, - sp_def: 31, - spd: 37, - total: 200, - }, - { - number: 790, - code: 1, - serial: 7901, - name: 'Cosmoem', - type1: 'Psychic', - type2: '', - color: 'Blue', - ability1: 'Sturdy', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 0.1, - weight: 999.9, - hp: 43, - atk: 29, - def: 131, - sp_atk: 29, - sp_def: 131, - spd: 37, - total: 400, - }, - { - number: 791, - code: 1, - serial: 7911, - name: 'Solgaleo', - type1: 'Psychic', - type2: 'Steel', - color: 'White', - ability1: 'Full Metal Body', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 3.4, - weight: 230, - hp: 137, - atk: 137, - def: 107, - sp_atk: 113, - sp_def: 89, - spd: 97, - total: 680, - }, - { - number: 792, - code: 1, - serial: 7921, - name: 'Lunala', - type1: 'Psychic', - type2: 'Ghost', - color: 'Purple', - ability1: 'Shadow Shield', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 4, - weight: 120, - hp: 137, - atk: 113, - def: 89, - sp_atk: 137, - sp_def: 107, - spd: 97, - total: 680, - }, - { - number: 793, - code: 1, - serial: 7931, - name: 'Nihilego', - type1: 'Rock', - type2: 'Poison', - color: 'White', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.2, - weight: 55.5, - hp: 109, - atk: 53, - def: 47, - sp_atk: 127, - sp_def: 131, - spd: 103, - total: 570, - }, - { - number: 794, - code: 1, - serial: 7941, - name: 'Buzzwole', - type1: 'Bug', - type2: 'Fighting', - color: 'Red', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 2.4, - weight: 333.6, - hp: 107, - atk: 139, - def: 139, - sp_atk: 53, - sp_def: 53, - spd: 79, - total: 570, - }, - { - number: 795, - code: 1, - serial: 7951, - name: 'Pheromosa', - type1: 'Bug', - type2: 'Fighting', - color: 'White', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.8, - weight: 25, - hp: 71, - atk: 137, - def: 37, - sp_atk: 137, - sp_def: 37, - spd: 151, - total: 570, - }, - { - number: 796, - code: 1, - serial: 7961, - name: 'Xurkitree', - type1: 'Electric', - type2: '', - color: 'Black', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 3.8, - weight: 100, - hp: 83, - atk: 89, - def: 71, - sp_atk: 173, - sp_def: 71, - spd: 83, - total: 570, - }, - { - number: 797, - code: 1, - serial: 7971, - name: 'Celesteela', - type1: 'Steel', - type2: 'Flying', - color: 'Green', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 9.2, - weight: 999.9, - hp: 97, - atk: 101, - def: 103, - sp_atk: 107, - sp_def: 101, - spd: 61, - total: 570, - }, - { - number: 798, - code: 1, - serial: 7981, - name: 'Kartana', - type1: 'Grass', - type2: 'Steel', - color: 'White', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 0.3, - weight: 0.1, - hp: 59, - atk: 181, - def: 131, - sp_atk: 59, - sp_def: 31, - spd: 109, - total: 570, - }, - { - number: 799, - code: 1, - serial: 7991, - name: 'Guzzlord', - type1: 'Dark', - type2: 'Dragon', - color: 'Black', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 5.5, - weight: 888, - hp: 223, - atk: 101, - def: 53, - sp_atk: 97, - sp_def: 53, - spd: 43, - total: 570, - }, - { - number: 800, - code: 1, - serial: 8001, - name: 'Necrozma', - type1: 'Psychic', - type2: '', - color: 'Black', - ability1: 'Prism Armor', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 2.4, - weight: 230, - hp: 97, - atk: 107, - def: 101, - sp_atk: 127, - sp_def: 89, - spd: 79, - total: 600, - }, - { - number: 800, - code: 2, - serial: 8002, - name: 'Necrozma', - type1: 'Psychic', - type2: 'Steel', - color: 'Yellow', - ability1: 'Prism Armor', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 3.8, - weight: 460, - hp: 97, - atk: 157, - def: 127, - sp_atk: 113, - sp_def: 109, - spd: 77, - total: 680, - }, - { - number: 800, - code: 3, - serial: 8003, - name: 'Necrozma', - type1: 'Psychic', - type2: 'Ghost', - color: 'Blue', - ability1: 'Prism Armor', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 4.2, - weight: 350, - hp: 97, - atk: 113, - def: 109, - sp_atk: 157, - sp_def: 127, - spd: 77, - total: 680, - }, - { - number: 800, - code: 4, - serial: 8004, - name: 'Necrozma', - type1: 'Psychic', - type2: 'Dragon', - color: 'Yellow', - ability1: 'Neuroforce', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 7.5, - weight: 230, - hp: 97, - atk: 167, - def: 97, - sp_atk: 167, - sp_def: 97, - spd: 129, - total: 754, - }, - { - number: 801, - code: 1, - serial: 8011, - name: 'Magearna', - type1: 'Steel', - type2: 'Fairy', - color: 'Grey', - ability1: 'Soul-Heart', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1, - weight: 80.5, - hp: 80, - atk: 95, - def: 115, - sp_atk: 130, - sp_def: 115, - spd: 65, - total: 600, - }, - { - number: 802, - code: 1, - serial: 8021, - name: 'Marshadow', - type1: 'Fighting', - type2: 'Ghost', - color: 'Grey', - ability1: 'Technician', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 0.7, - weight: 22.2, - hp: 90, - atk: 125, - def: 80, - sp_atk: 90, - sp_def: 90, - spd: 125, - total: 600, - }, - { - number: 803, - code: 1, - serial: 8031, - name: 'Poipole', - type1: 'Poison', - type2: '', - color: 'Purple', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 0.6, - weight: 1.8, - hp: 67, - atk: 73, - def: 67, - sp_atk: 73, - sp_def: 67, - spd: 73, - total: 420, - }, - { - number: 804, - code: 1, - serial: 8041, - name: 'Naganadel', - type1: 'Poison', - type2: 'Dragon', - color: 'Purple', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 3.6, - weight: 150, - hp: 73, - atk: 73, - def: 73, - sp_atk: 127, - sp_def: 73, - spd: 121, - total: 540, - }, - { - number: 805, - code: 1, - serial: 8051, - name: 'Stakataka', - type1: 'Rock', - type2: 'Steel', - color: 'Grey', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 5.5, - weight: 820, - hp: 61, - atk: 131, - def: 211, - sp_atk: 53, - sp_def: 101, - spd: 13, - total: 570, - }, - { - number: 806, - code: 1, - serial: 8061, - name: 'Blacephalon', - type1: 'Fire', - type2: 'Ghost', - color: 'White', - ability1: 'Beast Boost', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.8, - weight: 13, - hp: 53, - atk: 127, - def: 53, - sp_atk: 151, - sp_def: 79, - spd: 107, - total: 570, - }, - { - number: 807, - code: 1, - serial: 8071, - name: 'Zeraora', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Volt Absorb', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 1.5, - weight: 44.5, - hp: 88, - atk: 112, - def: 75, - sp_atk: 102, - sp_def: 80, - spd: 143, - total: 600, - }, - { - number: 808, - code: 1, - serial: 8081, - name: 'Meltan', - type1: 'Steel', - type2: '', - color: 'Grey', - ability1: 'Magnet Pull', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 0.2, - weight: 8, - hp: 46, - atk: 65, - def: 65, - sp_atk: 55, - sp_def: 35, - spd: 34, - total: 300, - }, - { - number: 809, - code: 1, - serial: 8091, - name: 'Melmetal', - type1: 'Steel', - type2: '', - color: 'Grey', - ability1: 'Iron Fist', - ability2: '', - 'ability hidden': '', - generation: 7, - legendary: 1, - mega_evolution: 0, - height: 2.5, - weight: 800, - hp: 135, - atk: 143, - def: 143, - sp_atk: 80, - sp_def: 65, - spd: 34, - total: 600, - }, - { - number: 810, - code: 1, - serial: 8101, - name: 'Grookey', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Grassy Surge', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 5, - hp: 50, - atk: 65, - def: 50, - sp_atk: 40, - sp_def: 40, - spd: 65, - total: 310, - }, - { - number: 811, - code: 1, - serial: 8111, - name: 'Thwackey', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Grassy Surge', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 14, - hp: 70, - atk: 85, - def: 70, - sp_atk: 55, - sp_def: 60, - spd: 80, - total: 420, - }, - { - number: 812, - code: 1, - serial: 8121, - name: 'Rillaboom', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Overgrow', - ability2: '', - 'ability hidden': 'Grassy Surge', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2.1, - weight: 90, - hp: 100, - atk: 125, - def: 90, - sp_atk: 60, - sp_def: 70, - spd: 85, - total: 530, - }, - { - number: 813, - code: 1, - serial: 8131, - name: 'Scorbunny', - type1: 'Fire', - type2: '', - color: 'White', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Libero', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 4.5, - hp: 50, - atk: 71, - def: 40, - sp_atk: 40, - sp_def: 40, - spd: 69, - total: 310, - }, - { - number: 814, - code: 1, - serial: 8141, - name: 'Raboot', - type1: 'Fire', - type2: '', - color: 'Grey', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Libero', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 9, - hp: 65, - atk: 86, - def: 60, - sp_atk: 55, - sp_def: 60, - spd: 94, - total: 420, - }, - { - number: 815, - code: 1, - serial: 8151, - name: 'Cinderace', - type1: 'Fire', - type2: '', - color: 'White', - ability1: 'Blaze', - ability2: '', - 'ability hidden': 'Libero', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 33, - hp: 80, - atk: 116, - def: 75, - sp_atk: 65, - sp_def: 75, - spd: 119, - total: 530, - }, - { - number: 816, - code: 1, - serial: 8161, - name: 'Sobble', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Sniper', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 4, - hp: 50, - atk: 40, - def: 40, - sp_atk: 70, - sp_def: 40, - spd: 70, - total: 310, - }, - { - number: 817, - code: 1, - serial: 8171, - name: 'Drizzile', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Sniper', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 11.5, - hp: 65, - atk: 60, - def: 60, - sp_atk: 95, - sp_def: 55, - spd: 90, - total: 425, - }, - { - number: 818, - code: 1, - serial: 8181, - name: 'Inteleon', - type1: 'Water', - type2: '', - color: 'Blue', - ability1: 'Torrent', - ability2: '', - 'ability hidden': 'Sniper', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.9, - weight: 45.2, - hp: 70, - atk: 85, - def: 75, - sp_atk: 125, - sp_def: 65, - spd: 120, - total: 540, - }, - { - number: 819, - code: 1, - serial: 8191, - name: 'Skwovet', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Cheek Pouch', - ability2: '', - 'ability hidden': 'Gluttony', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 2.5, - hp: 70, - atk: 55, - def: 40, - sp_atk: 35, - sp_def: 35, - spd: 25, - total: 260, - }, - { - number: 820, - code: 1, - serial: 8201, - name: 'Greedent', - type1: 'Normal', - type2: '', - color: 'Brown', - ability1: 'Cheek Pouch', - ability2: '', - 'ability hidden': 'Gluttony', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 6, - hp: 120, - atk: 95, - def: 55, - sp_atk: 55, - sp_def: 75, - spd: 20, - total: 420, - }, - { - number: 821, - code: 1, - serial: 8211, - name: 'Rookidee', - type1: 'Flying', - type2: '', - color: 'Blue', - ability1: 'Keen Eye', - ability2: 'Unnerve', - 'ability hidden': 'Big Pecks', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 1.8, - hp: 38, - atk: 47, - def: 65, - sp_atk: 33, - sp_def: 35, - spd: 57, - total: 275, - }, - { - number: 822, - code: 1, - serial: 8221, - name: 'Convisquire', - type1: 'Flying', - type2: '', - color: 'Blue', - ability1: 'Keen Eye', - ability2: 'Unnerve', - 'ability hidden': 'Big Pecks', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 16, - hp: 68, - atk: 67, - def: 55, - sp_atk: 43, - sp_def: 55, - spd: 77, - total: 365, - }, - { - number: 823, - code: 1, - serial: 8231, - name: 'Conviknight', - type1: 'Flying', - type2: 'Steel', - color: 'Purple', - ability1: 'Keen Eye', - ability2: 'Unnerve', - 'ability hidden': 'Mirror Armor', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2.2, - weight: 75, - hp: 98, - atk: 87, - def: 105, - sp_atk: 53, - sp_def: 85, - spd: 67, - total: 495, - }, - { - number: 824, - code: 1, - serial: 8241, - name: 'Blipbug', - type1: 'Bug', - type2: '', - color: 'Blue', - ability1: 'Swarm', - ability2: 'Compound Eyes', - 'ability hidden': 'Telepathy', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 8, - hp: 25, - atk: 20, - def: 20, - sp_atk: 25, - sp_def: 45, - spd: 45, - total: 180, - }, - { - number: 825, - code: 1, - serial: 8251, - name: 'Dottler', - type1: 'Bug', - type2: 'Psychic', - color: 'Yellow', - ability1: 'Swarm', - ability2: 'Compound Eyes', - 'ability hidden': 'Telepathy', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 19.5, - hp: 50, - atk: 35, - def: 80, - sp_atk: 50, - sp_def: 90, - spd: 30, - total: 335, - }, - { - number: 826, - code: 1, - serial: 8261, - name: 'Orbeetle', - type1: 'Bug', - type2: 'Psychic', - color: 'Red', - ability1: 'Swarm', - ability2: 'Frisk', - 'ability hidden': 'Telepathy', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 40.8, - hp: 60, - atk: 45, - def: 110, - sp_atk: 80, - sp_def: 120, - spd: 90, - total: 505, - }, - { - number: 827, - code: 1, - serial: 8271, - name: 'Nickit', - type1: 'Dark', - type2: '', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Unburden', - 'ability hidden': 'Stekeout', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 8.9, - hp: 40, - atk: 28, - def: 28, - sp_atk: 47, - sp_def: 52, - spd: 50, - total: 245, - }, - { - number: 828, - code: 1, - serial: 8281, - name: 'Thievul', - type1: 'Dark', - type2: '', - color: 'Brown', - ability1: 'Run Away', - ability2: 'Unburden', - 'ability hidden': 'Stekeout', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 19.9, - hp: 70, - atk: 58, - def: 58, - sp_atk: 87, - sp_def: 92, - spd: 90, - total: 455, - }, - { - number: 829, - code: 1, - serial: 8291, - name: 'Gossifleur', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Cotton Down', - ability2: 'Regenerator', - 'ability hidden': 'Effect Spore', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 2.2, - hp: 40, - atk: 40, - def: 60, - sp_atk: 40, - sp_def: 60, - spd: 10, - total: 250, - }, - { - number: 830, - code: 1, - serial: 8301, - name: 'Eldegoss', - type1: 'Grass', - type2: '', - color: 'Green', - ability1: 'Cotton Down', - ability2: 'Regenerator', - 'ability hidden': 'Effect Spore', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 2.5, - hp: 60, - atk: 50, - def: 90, - sp_atk: 80, - sp_def: 120, - spd: 60, - total: 460, - }, - { - number: 831, - code: 1, - serial: 8311, - name: 'Wooloo', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Fluffy', - ability2: 'Run Away', - 'ability hidden': 'Bulletproof', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 6, - hp: 42, - atk: 40, - def: 55, - sp_atk: 40, - sp_def: 45, - spd: 48, - total: 270, - }, - { - number: 832, - code: 1, - serial: 8321, - name: 'Dubwool', - type1: 'Normal', - type2: '', - color: 'White', - ability1: 'Fluffy', - ability2: 'Steadfast', - 'ability hidden': 'Bulletproof', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 43, - hp: 72, - atk: 80, - def: 100, - sp_atk: 60, - sp_def: 90, - spd: 88, - total: 490, - }, - { - number: 833, - code: 1, - serial: 8331, - name: 'Chewtle', - type1: 'Water', - type2: '', - color: 'Green', - ability1: 'Strong Jaw', - ability2: 'Shell Armor', - 'ability hidden': 'Swift Swim', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 8.5, - hp: 50, - atk: 64, - def: 50, - sp_atk: 38, - sp_def: 38, - spd: 44, - total: 284, - }, - { - number: 834, - code: 1, - serial: 8341, - name: 'Drednaw', - type1: 'Water', - type2: 'Rock', - color: 'Green', - ability1: 'Strong Jaw', - ability2: 'Shell Armor', - 'ability hidden': 'Swift Swim', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 115.5, - hp: 90, - atk: 115, - def: 90, - sp_atk: 48, - sp_def: 68, - spd: 74, - total: 485, - }, - { - number: 835, - code: 1, - serial: 8351, - name: 'Yamper', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Bell Fetch', - ability2: '', - 'ability hidden': 'Rattled', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 13.5, - hp: 59, - atk: 45, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 26, - total: 270, - }, - { - number: 836, - code: 1, - serial: 8361, - name: 'Boltund', - type1: 'Electric', - type2: '', - color: 'Yellow', - ability1: 'Strong Jaw', - ability2: '', - 'ability hidden': 'Competitive', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 34, - hp: 69, - atk: 90, - def: 60, - sp_atk: 90, - sp_def: 60, - spd: 121, - total: 490, - }, - { - number: 837, - code: 1, - serial: 8371, - name: 'Rolycoly', - type1: 'Rock', - type2: '', - color: 'Black', - ability1: 'Steam Engine', - ability2: 'Heatproof', - 'ability hidden': 'Flash Fire', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 12, - hp: 30, - atk: 40, - def: 50, - sp_atk: 40, - sp_def: 50, - spd: 30, - total: 240, - }, - { - number: 838, - code: 1, - serial: 8381, - name: 'Carkol', - type1: 'Rock', - type2: 'Fire', - color: 'Black', - ability1: 'Steam Engine', - ability2: 'Flame Body', - 'ability hidden': 'Flash Fire', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.1, - weight: 78, - hp: 80, - atk: 60, - def: 90, - sp_atk: 60, - sp_def: 70, - spd: 50, - total: 410, - }, - { - number: 839, - code: 1, - serial: 8391, - name: 'Coalossal', - type1: 'Rock', - type2: 'Fire', - color: 'Black', - ability1: 'Steam Engine', - ability2: 'Flame Body', - 'ability hidden': 'Flash Fire', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2.8, - weight: 310.5, - hp: 110, - atk: 80, - def: 120, - sp_atk: 80, - sp_def: 90, - spd: 30, - total: 510, - }, - { - number: 840, - code: 1, - serial: 8401, - name: 'Applin', - type1: 'Grass', - type2: 'Dragon', - color: 'Green', - ability1: 'Ripen', - ability2: 'Gluttony', - 'ability hidden': 'Bulletproof', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.5, - hp: 40, - atk: 40, - def: 80, - sp_atk: 40, - sp_def: 40, - spd: 20, - total: 260, - }, - { - number: 841, - code: 1, - serial: 8411, - name: 'Flapple', - type1: 'Grass', - type2: 'Dragon', - color: 'Green', - ability1: 'Ripen', - ability2: 'Gluttony', - 'ability hidden': 'Hustle', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1, - hp: 70, - atk: 110, - def: 80, - sp_atk: 95, - sp_def: 60, - spd: 70, - total: 485, - }, - { - number: 842, - code: 1, - serial: 8421, - name: 'Appletun', - type1: 'Grass', - type2: 'Dragon', - color: 'Green', - ability1: 'Ripen', - ability2: 'Gluttony', - 'ability hidden': 'Thick Fat', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 13, - hp: 110, - atk: 85, - def: 80, - sp_atk: 100, - sp_def: 80, - spd: 30, - total: 485, - }, - { - number: 843, - code: 1, - serial: 8431, - name: 'Silicobra', - type1: 'Ground', - type2: '', - color: 'Green', - ability1: 'Sand Spit', - ability2: 'Shed Skin', - 'ability hidden': 'Sand Veil', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2.2, - weight: 7.6, - hp: 52, - atk: 57, - def: 75, - sp_atk: 35, - sp_def: 50, - spd: 46, - total: 315, - }, - { - number: 844, - code: 1, - serial: 8441, - name: 'Sandaconda', - type1: 'Ground', - type2: '', - color: 'Green', - ability1: 'Sand Spit', - ability2: 'Shed Skin', - 'ability hidden': 'Sand Veil', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 3.8, - weight: 65.5, - hp: 72, - atk: 107, - def: 125, - sp_atk: 65, - sp_def: 70, - spd: 71, - total: 510, - }, - { - number: 845, - code: 1, - serial: 8451, - name: 'Cramorant', - type1: 'Flying', - type2: 'Water', - color: 'Blue', - ability1: 'Gulp Missile', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 18, - hp: 70, - atk: 85, - def: 55, - sp_atk: 85, - sp_def: 95, - spd: 85, - total: 475, - }, - { - number: 846, - code: 1, - serial: 8461, - name: 'Arrokuda', - type1: 'Water', - type2: '', - color: 'Brown', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Propeller Tail', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 1, - hp: 41, - atk: 63, - def: 40, - sp_atk: 40, - sp_def: 30, - spd: 66, - total: 280, - }, - { - number: 847, - code: 1, - serial: 8471, - name: 'Barraskewda', - type1: 'Water', - type2: '', - color: 'Brown', - ability1: 'Swift Swim', - ability2: '', - 'ability hidden': 'Propeller Tail', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 30, - hp: 61, - atk: 123, - def: 60, - sp_atk: 60, - sp_def: 50, - spd: 136, - total: 490, - }, - { - number: 848, - code: 1, - serial: 8481, - name: 'Toxel', - type1: 'Electric', - type2: 'Poison', - color: 'Purple', - ability1: 'Rattled', - ability2: 'Static', - 'ability hidden': 'Klutz', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 11, - hp: 40, - atk: 38, - def: 35, - sp_atk: 54, - sp_def: 35, - spd: 40, - total: 242, - }, - { - number: 849, - code: 1, - serial: 8491, - name: 'Toxtricity', - type1: 'Electric', - type2: 'Poison', - color: 'Purple', - ability1: 'Punk Rock', - ability2: 'Plus', - 'ability hidden': 'Technician', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 40, - hp: 75, - atk: 98, - def: 70, - sp_atk: 114, - sp_def: 70, - spd: 75, - total: 502, - }, - { - number: 849, - code: 2, - serial: 8492, - name: 'Toxtricity', - type1: 'Electric', - type2: 'Poison', - color: 'Purple', - ability1: 'Punk Rock', - ability2: 'Minus', - 'ability hidden': 'Technician', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 40, - hp: 75, - atk: 98, - def: 70, - sp_atk: 114, - sp_def: 70, - spd: 75, - total: 502, - }, - { - number: 850, - code: 1, - serial: 8501, - name: 'Sizzlipede', - type1: 'Fire', - type2: 'Bug', - color: 'Red', - ability1: 'Flash Fire', - ability2: 'White Smoke', - 'ability hidden': 'Flame Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.7, - weight: 1, - hp: 50, - atk: 65, - def: 45, - sp_atk: 50, - sp_def: 50, - spd: 45, - total: 305, - }, - { - number: 851, - code: 1, - serial: 8511, - name: 'Centiskorch', - type1: 'Fire', - type2: 'Bug', - color: 'Red', - ability1: 'Flash Fire', - ability2: 'White Smoke', - 'ability hidden': 'Flame Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 3, - weight: 120, - hp: 100, - atk: 115, - def: 65, - sp_atk: 90, - sp_def: 90, - spd: 65, - total: 525, - }, - { - number: 852, - code: 1, - serial: 8521, - name: 'Clobbopus', - type1: 'Fighting', - type2: '', - color: 'Brown', - ability1: 'Limber', - ability2: '', - 'ability hidden': 'Technician', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 4, - hp: 50, - atk: 68, - def: 60, - sp_atk: 50, - sp_def: 50, - spd: 32, - total: 310, - }, - { - number: 853, - code: 1, - serial: 8531, - name: 'Grapploct', - type1: 'Fighting', - type2: '', - color: 'Blue', - ability1: 'Limber', - ability2: '', - 'ability hidden': 'Technician', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 39, - hp: 80, - atk: 118, - def: 90, - sp_atk: 70, - sp_def: 80, - spd: 42, - total: 480, - }, - { - number: 854, - code: 1, - serial: 8541, - name: 'Sinistea', - type1: 'Ghost', - type2: '', - color: 'Purple', - ability1: 'Weak Armor', - ability2: '', - 'ability hidden': 'Cursed Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.1, - weight: 0.2, - hp: 40, - atk: 45, - def: 45, - sp_atk: 74, - sp_def: 54, - spd: 50, - total: 308, - }, - { - number: 855, - code: 1, - serial: 8551, - name: 'Polteageist', - type1: 'Ghost', - type2: '', - color: 'Purple', - ability1: 'Weak Armor', - ability2: '', - 'ability hidden': 'Cursed Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.4, - hp: 60, - atk: 65, - def: 65, - sp_atk: 134, - sp_def: 114, - spd: 70, - total: 508, - }, - { - number: 856, - code: 1, - serial: 8561, - name: 'Hatenna', - type1: 'Psychic', - type2: '', - color: 'Pink', - ability1: 'Healer', - ability2: 'Anticipation', - 'ability hidden': 'Magic Bounce', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 3.4, - hp: 42, - atk: 30, - def: 60, - sp_atk: 56, - sp_def: 53, - spd: 39, - total: 280, - }, - { - number: 857, - code: 1, - serial: 8571, - name: 'Hattrem', - type1: 'Psychic', - type2: '', - color: 'Pink', - ability1: 'Healer', - ability2: 'Anticipation', - 'ability hidden': 'Magic Bounce', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.6, - weight: 4.8, - hp: 57, - atk: 40, - def: 90, - sp_atk: 86, - sp_def: 73, - spd: 49, - total: 395, - }, - { - number: 858, - code: 1, - serial: 8581, - name: 'Hatterene', - type1: 'Psychic', - type2: 'Fairy', - color: 'Pink', - ability1: 'Healer', - ability2: 'Anticipation', - 'ability hidden': 'Magic Bounce', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2.1, - weight: 5.1, - hp: 57, - atk: 90, - def: 45, - sp_atk: 136, - sp_def: 103, - spd: 29, - total: 460, - }, - { - number: 859, - code: 1, - serial: 8591, - name: 'Impidimp', - type1: 'Dark', - type2: 'Fairy', - color: 'Pink', - ability1: 'Prankster', - ability2: 'Frisk', - 'ability hidden': 'Pickpocket', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.4, - weight: 5.5, - hp: 45, - atk: 45, - def: 65, - sp_atk: 55, - sp_def: 40, - spd: 50, - total: 300, - }, - { - number: 860, - code: 1, - serial: 8601, - name: 'Morgrem', - type1: 'Dark', - type2: 'Fairy', - color: 'Pink', - ability1: 'Prankster', - ability2: 'Frisk', - 'ability hidden': 'Pickpocket', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 12.5, - hp: 65, - atk: 60, - def: 45, - sp_atk: 75, - sp_def: 55, - spd: 70, - total: 370, - }, - { - number: 861, - code: 1, - serial: 8611, - name: 'Grimmsnarl', - type1: 'Dark', - type2: 'Fairy', - color: 'Purple', - ability1: 'Prankster', - ability2: 'Frisk', - 'ability hidden': 'Pickpocket', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 61, - hp: 95, - atk: 120, - def: 65, - sp_atk: 95, - sp_def: 75, - spd: 60, - total: 510, - }, - { - number: 862, - code: 1, - serial: 8621, - name: 'Obstagoon', - type1: 'Dark', - type2: 'Normal', - color: 'Grey', - ability1: 'Reckless', - ability2: 'Guts', - 'ability hidden': 'Defiant', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 46, - hp: 93, - atk: 90, - def: 101, - sp_atk: 60, - sp_def: 81, - spd: 95, - total: 520, - }, - { - number: 863, - code: 1, - serial: 8631, - name: 'Perrserker', - type1: 'Steel', - type2: '', - color: 'Brown', - ability1: 'Battle Armor', - ability2: 'Tough Claws', - 'ability hidden': 'Steely Spilit', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 28, - hp: 70, - atk: 110, - def: 100, - sp_atk: 50, - sp_def: 60, - spd: 50, - total: 440, - }, - { - number: 864, - code: 1, - serial: 8641, - name: 'Cursola', - type1: 'Ghost', - type2: '', - color: 'White', - ability1: 'Weak Armor', - ability2: '', - 'ability hidden': 'Perish Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1, - weight: 0.4, - hp: 60, - atk: 95, - def: 50, - sp_atk: 145, - sp_def: 130, - spd: 30, - total: 510, - }, - { - number: 865, - code: 1, - serial: 8651, - name: "Sirfetch'd", - type1: 'Fighting', - type2: '', - color: 'White', - ability1: 'Steadfast', - ability2: '', - 'ability hidden': 'Scrappy', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.8, - weight: 117, - hp: 62, - atk: 135, - def: 95, - sp_atk: 68, - sp_def: 82, - spd: 65, - total: 507, - }, - { - number: 866, - code: 1, - serial: 8661, - name: 'Mr. Rime', - type1: 'Ice', - type2: 'Psychic', - color: 'Purple', - ability1: 'Tangled Feet', - ability2: 'Screen Cleaner', - 'ability hidden': 'Ice Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.5, - weight: 58.2, - hp: 80, - atk: 85, - def: 75, - sp_atk: 110, - sp_def: 100, - spd: 70, - total: 520, - }, - { - number: 867, - code: 1, - serial: 8671, - name: 'Runerigus', - type1: 'Ground', - type2: 'Ghost', - color: 'Grey', - ability1: 'Wandering Spilit', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.6, - weight: 66.6, - hp: 58, - atk: 95, - def: 145, - sp_atk: 50, - sp_def: 105, - spd: 30, - total: 483, - }, - { - number: 868, - code: 1, - serial: 8681, - name: 'Milcery', - type1: 'Fairy', - type2: '', - color: 'White', - ability1: 'Sweet Veil', - ability2: '', - 'ability hidden': 'Aroma Veil', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.2, - weight: 0.3, - hp: 45, - atk: 40, - def: 40, - sp_atk: 50, - sp_def: 61, - spd: 34, - total: 270, - }, - { - number: 869, - code: 1, - serial: 8691, - name: 'Alcremie', - type1: 'Fairy', - type2: '', - color: 'Pink', - ability1: 'Sweet Veil', - ability2: '', - 'ability hidden': 'Aroma Veil', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 0.5, - hp: 65, - atk: 60, - def: 75, - sp_atk: 110, - sp_def: 121, - spd: 64, - total: 495, - }, - { - number: 870, - code: 1, - serial: 8701, - name: 'Falinks', - type1: 'Fighting', - type2: '', - color: 'Yellow', - ability1: 'Battle Armor', - ability2: '', - 'ability hidden': 'Defiant', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 3, - weight: 62, - hp: 65, - atk: 100, - def: 100, - sp_atk: 70, - sp_def: 60, - spd: 75, - total: 470, - }, - { - number: 871, - code: 1, - serial: 8711, - name: 'Pincurchin', - type1: 'Electric', - type2: '', - color: 'Purple', - ability1: 'Lightning Rod', - ability2: '', - 'ability hidden': 'Electric Surge', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 1, - hp: 48, - atk: 101, - def: 95, - sp_atk: 91, - sp_def: 85, - spd: 15, - total: 435, - }, - { - number: 872, - code: 1, - serial: 8721, - name: 'Snom', - type1: 'Ice', - type2: 'Bug', - color: 'White', - ability1: 'Shield Dust', - ability2: '', - 'ability hidden': 'Ice Scales', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3.8, - hp: 30, - atk: 25, - def: 35, - sp_atk: 45, - sp_def: 30, - spd: 20, - total: 185, - }, - { - number: 873, - code: 1, - serial: 8731, - name: 'Frosmoth', - type1: 'Ice', - type2: 'Bug', - color: 'White', - ability1: 'Shield Dust', - ability2: '', - 'ability hidden': 'Ice Scales', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.3, - weight: 42, - hp: 70, - atk: 65, - def: 60, - sp_atk: 125, - sp_def: 90, - spd: 65, - total: 475, - }, - { - number: 874, - code: 1, - serial: 8741, - name: 'Stonjourner', - type1: 'Rock', - type2: '', - color: 'Grey', - ability1: 'Power Spot', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2.5, - weight: 520, - hp: 100, - atk: 125, - def: 135, - sp_atk: 20, - sp_def: 20, - spd: 70, - total: 470, - }, - { - number: 875, - code: 1, - serial: 8751, - name: 'Eiscue', - type1: 'Ice', - type2: '', - color: 'Blue', - ability1: 'Ice Face', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 89, - hp: 75, - atk: 80, - def: 110, - sp_atk: 65, - sp_def: 90, - spd: 50, - total: 470, - }, - { - number: 875, - code: 2, - serial: 8752, - name: 'Eiscue', - type1: 'Ice', - type2: '', - color: 'Blue', - ability1: 'Ice Face', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 89, - hp: 75, - atk: 80, - def: 70, - sp_atk: 65, - sp_def: 50, - spd: 130, - total: 470, - }, - { - number: 876, - code: 1, - serial: 8761, - name: 'Indeedee M', - type1: 'Psychic', - type2: 'Normal', - color: 'Purple', - ability1: 'Inner Focus', - ability2: 'Synchronize', - 'ability hidden': 'Psychic Surge', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 28, - hp: 60, - atk: 65, - def: 55, - sp_atk: 105, - sp_def: 95, - spd: 95, - total: 475, - }, - { - number: 876, - code: 2, - serial: 8762, - name: 'Indeedee F', - type1: 'Psychic', - type2: 'Normal', - color: 'Purple', - ability1: 'Own Tempo', - ability2: 'Synchronize', - 'ability hidden': 'Psychic Surge', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.9, - weight: 28, - hp: 70, - atk: 55, - def: 65, - sp_atk: 95, - sp_def: 105, - spd: 85, - total: 475, - }, - { - number: 877, - code: 1, - serial: 8771, - name: 'Morpeko', - type1: 'Electric', - type2: 'Dark', - color: 'Yellow', - ability1: 'Hunger Switch', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.3, - weight: 3, - hp: 58, - atk: 95, - def: 58, - sp_atk: 70, - sp_def: 58, - spd: 97, - total: 436, - }, - { - number: 878, - code: 1, - serial: 8781, - name: 'Cufant', - type1: 'Steel', - type2: '', - color: 'Yellow', - ability1: 'Sheer Force', - ability2: '', - 'ability hidden': 'Heavy Metal', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.2, - weight: 100, - hp: 72, - atk: 80, - def: 49, - sp_atk: 40, - sp_def: 49, - spd: 40, - total: 330, - }, - { - number: 879, - code: 1, - serial: 8791, - name: 'Copperajah', - type1: 'Steel', - type2: '', - color: 'Green', - ability1: 'Sheer Force', - ability2: '', - 'ability hidden': 'Heavy Metal', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 3, - weight: 650, - hp: 122, - atk: 130, - def: 69, - sp_atk: 80, - sp_def: 69, - spd: 30, - total: 500, - }, - { - number: 880, - code: 1, - serial: 8801, - name: 'Dracozolt', - type1: 'Electric', - type2: 'Dragon', - color: 'Green', - ability1: 'Volt Absorb', - ability2: 'Hustle', - 'ability hidden': 'Sand Rush', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 190, - hp: 90, - atk: 100, - def: 90, - sp_atk: 80, - sp_def: 70, - spd: 75, - total: 505, - }, - { - number: 881, - code: 1, - serial: 8811, - name: 'Arctozolt', - type1: 'Electric', - type2: 'Ice', - color: 'Blue', - ability1: 'Volt Absorb', - ability2: 'Static', - 'ability hidden': 'Slush Rush', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2.3, - weight: 150, - hp: 90, - atk: 100, - def: 90, - sp_atk: 90, - sp_def: 80, - spd: 55, - total: 505, - }, - { - number: 882, - code: 1, - serial: 8821, - name: 'Dracovish', - type1: 'Water', - type2: 'Dragon', - color: 'Green', - ability1: 'Water Absorb', - ability2: 'Strong Jaw', - 'ability hidden': 'Sand Rush', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2.3, - weight: 215, - hp: 90, - atk: 90, - def: 100, - sp_atk: 70, - sp_def: 80, - spd: 75, - total: 505, - }, - { - number: 883, - code: 1, - serial: 8831, - name: 'Arctovish', - type1: 'Water', - type2: 'Ice', - color: 'Blue', - ability1: 'Water Absorb', - ability2: 'Ice Body', - 'ability hidden': 'Slush Rush', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 2, - weight: 175, - hp: 90, - atk: 90, - def: 100, - sp_atk: 80, - sp_def: 90, - spd: 55, - total: 505, - }, - { - number: 884, - code: 1, - serial: 8841, - name: 'Duraludon', - type1: 'Steel', - type2: 'Dragon', - color: 'White', - ability1: 'Light Metal', - ability2: 'Heavy Metal', - 'ability hidden': 'Stalwart', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.8, - weight: 40, - hp: 70, - atk: 95, - def: 115, - sp_atk: 120, - sp_def: 50, - spd: 85, - total: 535, - }, - { - number: 885, - code: 1, - serial: 8851, - name: 'Dreepy', - type1: 'Dragon', - type2: 'Ghost', - color: 'Green', - ability1: 'Clear Body', - ability2: 'Infiltrator', - 'ability hidden': 'Cursed Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 0.5, - weight: 2, - hp: 28, - atk: 60, - def: 30, - sp_atk: 40, - sp_def: 30, - spd: 82, - total: 270, - }, - { - number: 886, - code: 1, - serial: 8861, - name: 'Drakloak', - type1: 'Dragon', - type2: 'Ghost', - color: 'Green', - ability1: 'Clear Body', - ability2: 'Infiltrator', - 'ability hidden': 'Cursed Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 1.4, - weight: 11, - hp: 68, - atk: 80, - def: 50, - sp_atk: 60, - sp_def: 50, - spd: 102, - total: 410, - }, - { - number: 887, - code: 1, - serial: 8871, - name: 'Dragapult', - type1: 'Dragon', - type2: 'Ghost', - color: 'Green', - ability1: 'Clear Body', - ability2: 'Infiltrator', - 'ability hidden': 'Cursed Body', - generation: 8, - legendary: 0, - mega_evolution: 0, - height: 3, - weight: 50, - hp: 88, - atk: 120, - def: 75, - sp_atk: 100, - sp_def: 75, - spd: 142, - total: 600, - }, - { - number: 888, - code: 1, - serial: 8881, - name: 'Zacian', - type1: 'Fairy', - type2: '', - color: 'Blue', - ability1: 'Intrepid Sword', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 2.8, - weight: 110, - hp: 92, - atk: 130, - def: 115, - sp_atk: 80, - sp_def: 115, - spd: 138, - total: 670, - }, - { - number: 888, - code: 2, - serial: 8882, - name: 'Zacian', - type1: 'Fairy', - type2: 'Steel', - color: 'Blue', - ability1: 'Intrepid Sword', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 2.8, - weight: 355, - hp: 92, - atk: 170, - def: 115, - sp_atk: 80, - sp_def: 115, - spd: 148, - total: 720, - }, - { - number: 889, - code: 1, - serial: 8891, - name: 'Zamazanta', - type1: 'Fighting', - type2: '', - color: 'Red', - ability1: 'Dauntless Shield', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 2.9, - weight: 210, - hp: 92, - atk: 130, - def: 115, - sp_atk: 80, - sp_def: 115, - spd: 138, - total: 670, - }, - { - number: 889, - code: 2, - serial: 8892, - name: 'Zamazanta', - type1: 'Fighting', - type2: 'Steel', - color: 'Red', - ability1: 'Dauntless Shield', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 2.9, - weight: 785, - hp: 92, - atk: 130, - def: 145, - sp_atk: 80, - sp_def: 145, - spd: 128, - total: 720, - }, - { - number: 890, - code: 1, - serial: 8901, - name: 'Eternatus', - type1: 'Poison', - type2: 'Dragon', - color: 'Purple', - ability1: 'Pressure', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 2, - weight: 950, - hp: 140, - atk: 85, - def: 95, - sp_atk: 145, - sp_def: 95, - spd: 130, - total: 690, - }, - { - number: 891, - code: 1, - serial: 8911, - name: 'Kubfu', - type1: 'Fighting', - type2: '', - color: 'Grey', - ability1: 'Inner Focus', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 0.6, - weight: 12, - hp: 60, - atk: 90, - def: 60, - sp_atk: 53, - sp_def: 50, - spd: 72, - total: 385, - }, - { - number: 892, - code: 1, - serial: 8921, - name: 'Urshifu', - type1: 'Fighting', - type2: 'Dark', - color: 'Grey', - ability1: 'Unseen Fist', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 1.9, - weight: 105, - hp: 100, - atk: 130, - def: 100, - sp_atk: 63, - sp_def: 60, - spd: 97, - total: 550, - }, - { - number: 892, - code: 2, - serial: 8922, - name: 'Urshifu', - type1: 'Fighting', - type2: 'Water', - color: 'Grey', - ability1: 'Unseen Fist', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 1.9, - weight: 105, - hp: 100, - atk: 130, - def: 100, - sp_atk: 63, - sp_def: 60, - spd: 97, - total: 550, - }, - { - number: 893, - code: 1, - serial: 8931, - name: 'Zarude', - type1: 'Dark', - type2: 'Grass', - color: 'Green', - ability1: 'Leaf Guard', - ability2: '', - 'ability hidden': '', - generation: 8, - legendary: 1, - mega_evolution: 0, - height: 1.8, - weight: 70, - hp: 105, - atk: 120, - def: 105, - sp_atk: 70, - sp_def: 95, - spd: 105, - total: 600, - }, -]; - -export default data; diff --git a/packages/docs/src/data/random/genData.ts b/packages/docs/src/data/random/genData.ts deleted file mode 100644 index cfdd4b7..0000000 --- a/packages/docs/src/data/random/genData.ts +++ /dev/null @@ -1,119 +0,0 @@ -/** - * @lineup-lite/docs - * https://github.com/sgratzl/lineup-lite - * - * Copyright (c) 2021 Samuel Gratzl - */ - -import rnd from 'seedrandom'; - -export interface IGenerateDataOptions { - /** - * @default 100 - */ - count?: number; - - /** - * number of string columns - * @default 1 - */ - string?: number; - - /** - * number of number columns - * @default 1 - */ - number?: number; - - /** - * number of cat columns - * @default 1 - */ - cat?: number; - - /** - * @default ['c1', 'c2', 'c3'] - */ - categories?: string[]; - - /** - * number of date columns - * @default 0 - */ - date?: number; - - seed?: number; - - /** - * missing ratio - * @default 0 - */ - missing?: number; - /** - * missing ratio - * @default 0 - */ - missingString?: number; - /** - * missing ratio - * @default 0 - */ - missingNumber?: number; - /** - * missing ratio - * @default 0 - */ - missingCat?: number; - /** - * missing ratio - * @default 0 - */ - missingDate?: number; -} - -export const DEFAULT_CATEGORIES = ['c1', 'c2', 'c3']; - -export function generateData(options: IGenerateDataOptions = {}) { - const o: Required = Object.assign( - { - count: 100, - string: 1, - number: 1, - cat: 1, - categories: DEFAULT_CATEGORIES, - date: 0, - seed: 0, - missing: 0, - missingString: options.missing == null ? 0 : options.missing, - missingNumber: options.missing == null ? 0 : options.missing, - missingCat: options.missing == null ? 0 : options.missing, - missingDate: options.missing == null ? 0 : options.missing, - }, - options - ); - const arr = []; - const s = rnd(o.seed.toString()); - const isMissing = (v: number) => v > 0 && s() <= v; - for (let i = 0; i < o.count; ++i) { - let r: any = {}; - for (let j = 0; j < o.string; ++j) { - const suffix = j === 0 ? '' : j; - r[`string${suffix}`] = isMissing(o.missingString) ? null : `Row${suffix} ${i}`; - } - for (let j = 0; j < o.number; ++j) { - r[`number${j === 0 ? '' : j}`] = isMissing(o.missingNumber) ? null : s() * 10; - } - for (let j = 0; j < o.cat; ++j) { - r[`cat${j === 0 ? '' : j}`] = isMissing(o.missingCat) - ? null - : o.categories[Math.floor(s() * o.categories.length)]; - } - for (let j = 0; j < o.date; ++j) { - r[`date${j === 0 ? '' : j}`] = isMissing(o.missingDate) - ? null - : new Date(Date.now() - Math.floor(s() * 1000000000000)); - } - arr.push(r); - } - return arr; -} diff --git a/packages/docs/src/data/random/index.ts b/packages/docs/src/data/random/index.ts deleted file mode 100644 index 678297d..0000000 --- a/packages/docs/src/data/random/index.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - * @lineup-lite/docs - * https://github.com/sgratzl/lineup-lite - * - * Copyright (c) 2021 Samuel Gratzl - */ - -import { - defaultColorScale, - defaultConstantColorScale, - defaultConstantDarkColorScale, - defaultDarkColorScale, -} from '@lineup-lite/components'; -import { - asCategoricalColumn, - asDateColumn, - asNumberColumn, - asTextColumn, - BoxPlotRenderer, - ColorRenderer, - LineUpLiteColumn, - ProportionalSymbolRenderer, -} from '@lineup-lite/hooks'; -import { generateData } from './genData'; - -export interface IRandomRow { - string: string; - number: number; - number1: number; - number2: number; - date: Date; - cat: 'c1' | 'c2' | 'c3'; -} - -const defaultColumn: Partial> = { - minWidth: 30, - width: 150, - maxWidth: 400, -}; - -export default function create(darkTheme: boolean) { - const columns: LineUpLiteColumn[] = [ - asTextColumn({ - Header: 'String', - accessor: 'string', - minWidth: 100, - }), - asCategoricalColumn({ - Header: 'Cat', - accessor: 'cat', - minWidth: 100, - }), - asNumberColumn( - { - Header: 'Number', - accessor: 'number', - minWidth: 100, - }, - { min: 0, max: 10, color: darkTheme ? defaultDarkColorScale : defaultColorScale } - ), - asNumberColumn( - { - Header: 'Number', - accessor: 'number1', - minWidth: 100, - Cell: ColorRenderer, - Summary: BoxPlotRenderer, - Aggregated: BoxPlotRenderer, - }, - { min: 0, max: 10, color: darkTheme ? defaultDarkColorScale : defaultColorScale } - ), - asNumberColumn( - { - Header: 'Number', - accessor: 'number2', - minWidth: 100, - Cell: ProportionalSymbolRenderer, - }, - { min: 0, max: 10, color: darkTheme ? defaultDarkColorScale : defaultColorScale } - ), - asDateColumn( - { - Header: 'Date', - accessor: 'date', - minWidth: 100, - }, - { - color: darkTheme ? defaultConstantDarkColorScale : defaultConstantColorScale, - } - ), - ]; - - const rows = generateData({ - number: 3, - date: 1, - }) as IRandomRow[]; - - return Promise.resolve({ - rows, - defaultColumn: defaultColumn, - columns, - }); -} diff --git a/packages/docs/src/pages/index.tsx b/packages/docs/src/pages/index.tsx index 0538246..d64d707 100644 --- a/packages/docs/src/pages/index.tsx +++ b/packages/docs/src/pages/index.tsx @@ -11,11 +11,11 @@ import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import useBaseUrl from '@docusaurus/useBaseUrl'; -import styles from './index.module.css'; import Filter3FillIcon from 'remixicon-react/Filter3FillIcon'; import NewspaperLineIcon from 'remixicon-react/NewspaperLineIcon'; import BarChartBoxLineIcon from 'remixicon-react/BarChartBoxLineIcon'; import StackLineIcon from 'remixicon-react/StackLineIcon'; +import styles from './index.module.css'; function Feature({ imageUrl, title, children }: PropsWithChildren<{ imageUrl: string | ReactNode; title: string }>) { const imgUrl = useBaseUrl(typeof imageUrl === 'string' ? imageUrl : '/'); @@ -33,7 +33,7 @@ function Feature({ imageUrl, title, children }: PropsWithChildren<{ imageUrl: st ); } -export default function Home() { +export default function Home(): JSX.Element { const context = useDocusaurusContext(); const { siteConfig = {} } = context; return ( @@ -64,8 +64,8 @@ export default function Home() {
{`LineUp-lite is an extension and is based on `} - react-table - {`, a light-weight, headless React data table library.`} + react-table, a light-weight, headless React data table + library. Visual Analysis of Multi-Attribute Rankings {` by Gratzl et. al. and is the lightweight nephew of `} - LineUp.js - {`.`} + LineUp.js. react-table hooks {', to a ready-to-use '} - LineUpLite React component - {'.'} + LineUpLite React component. } > - {`Columns can be interactively filtered based on the column type using the column header.`} + Columns can be interactively filtered based on the column type using the column header. } > {`Proven visual visualizations for cells, aggregations, and summaries, such as `} - Bars, Histograms, and Boxplots - {`.`} + Bars, Histograms, and Boxplots. - {`Developed using latest web technologies and written in clean TypeScript.`} + Developed using latest web technologies and written in clean TypeScript.
diff --git a/packages/docs/src/theme/Root.tsx b/packages/docs/src/theme/Root.tsx index ec0f11c..7bbccd5 100644 --- a/packages/docs/src/theme/Root.tsx +++ b/packages/docs/src/theme/Root.tsx @@ -5,11 +5,11 @@ * Copyright (c) 2021 Samuel Gratzl */ -import React, { PropsWithChildren } from 'react'; +import React, { ReactNode } from 'react'; import Head from '@docusaurus/Head'; // Default implementation, that you can customize -function Root({ children }: PropsWithChildren<{}>) { +function Root({ children }: { children: ReactNode }): JSX.Element { return ( <> @@ -19,7 +19,7 @@ function Root({ children }: PropsWithChildren<{}>) { - + {children} diff --git a/packages/hooks/.eslintrc.js b/packages/hooks/.eslintrc.js new file mode 100644 index 0000000..40a8a88 --- /dev/null +++ b/packages/hooks/.eslintrc.js @@ -0,0 +1,33 @@ +/* eslint-env node */ + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const pkg = require('./package.json'); + +module.exports = { + plugins: ['@typescript-eslint', 'prettier'], + extends: [ + 'airbnb-typescript', + 'react-app', + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + 'prettier', + ], + parserOptions: { + project: './tsconfig.eslint.json', + }, + settings: { + react: { + version: pkg.devDependencies.react ? 'detect' : '99.99.99', + }, + }, + rules: { + 'no-continue': 'off', + 'react/require-default-props': 'off', // don't use in TypeScript + 'react/jsx-props-no-spreading': 'off', // shorthand passing of props + 'react/destructuring-assignment': 'off', // don't force destructuring + 'no-nested-ternary': 'off', + // '@typescript-eslint/explicit-module-boundary-types': 'off', + // '@typescript-eslint/no-explicit-any': 'off', + // '@typescript-eslint/no-non-null-assertion': 'off', + }, +}; diff --git a/packages/hooks/src/builder.ts b/packages/hooks/src/builder.ts index 3d1fca3..738cc4f 100644 --- a/packages/hooks/src/builder.ts +++ b/packages/hooks/src/builder.ts @@ -4,6 +4,7 @@ * * Copyright (c) 2021 Samuel Gratzl */ +/* eslint-disable @typescript-eslint/ban-types */ import { CategoricalStatsOptions, @@ -33,7 +34,7 @@ import { } from './renderers'; import { textStats, categoricalStats, dateStats, numberStats } from './stats'; import { rangeFilter, categoricalFilter, categoricalSetFilter } from './filters'; -import type { LineUpLiteColumn } from './interfaces'; +import type { LineUpLiteColumn, UnknownObject } from './interfaces'; import { sortCompare, categoricalSort, @@ -57,7 +58,9 @@ function guessName(acc: string) { .join(' '); } -export function asColumn = Column>(col: C | keyof D): C { +export function asColumn = Column>( + col: C | keyof D +): C { if (typeof col === 'string') { return { Header: guessName(col), @@ -72,7 +75,7 @@ export function asColumn = Column>(col: * @param col property key or partial column Header and accessor * @param options additional options for statistics */ -export function asTextColumn = Column>( +export function asTextColumn = Column>( col: C | keyof D, options?: TextStatsOptions ): LineUpLiteColumn { @@ -97,7 +100,7 @@ export function asTextColumn = Column>( * @param col property key or partial column Header and accessor * @param options additional options for statistics */ -export function asNumberColumn = Column>( +export function asNumberColumn = Column>( col: C | keyof D, options?: NumberStatsOptions ): LineUpLiteColumn { @@ -123,7 +126,7 @@ export function asNumberColumn = Column * @param col property key or partial column Header and accessor * @param options additional options for statistics */ -export function asNumbersColumn = Column>( +export function asNumbersColumn = Column>( col: C | keyof D, options?: NumberStatsOptions ): LineUpLiteColumn { @@ -149,7 +152,7 @@ export function asNumbersColumn = Column = Column>( +export function asNumberBoxPlotColumn = Column>( col: C | keyof D, options?: NumberStatsOptions ): LineUpLiteColumn { @@ -175,7 +178,7 @@ export function asNumberBoxPlotColumn = Co * @param col property key or partial column Header and accessor * @param options additional options for statistics */ -export function asCategoricalColumn = Column>( +export function asCategoricalColumn = Column>( col: C | keyof D, options?: CategoricalStatsOptions ): LineUpLiteColumn { @@ -203,7 +206,7 @@ export function asCategoricalColumn = Colu * @param col property key or partial column Header and accessor * @param options additional options for statistics */ -export function asCategoricalSetColumn = Column>( +export function asCategoricalSetColumn = Column>( col: C | keyof D, options?: CategoricalStatsOptions ): LineUpLiteColumn { @@ -231,7 +234,7 @@ export function asCategoricalSetColumn = C * @param col property key or partial column Header and accessor * @param options additional options for statistics */ -export function asDateColumn = Column>( +export function asDateColumn = Column>( col: C | keyof D, options?: DateStatsOptions ): LineUpLiteColumn { @@ -256,7 +259,7 @@ export function asDateColumn = Column>( * @param col property key or partial column Header and accessor * @param options additional options for statistics */ -export function asStackedNumberColumn = Column>( +export function asStackedNumberColumn = Column>( col: C | string, stack: readonly { col: keyof D | Accessor; weight: number; color?: string }[], options?: NumberStatsOptions & { colors?: (v: string) => string } @@ -274,6 +277,7 @@ export function asStackedNumberColumn = Co defaultCanGroupBy: false, groupBy: numberGroupBy, canHide: false, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion id: typeof col == 'string' ? col : col.id ?? col.Header!, ...(typeof col === 'string' ? { Header: col } : col), accessor: computeStackedValue(stack, options?.colors), diff --git a/packages/hooks/src/derive.ts b/packages/hooks/src/derive.ts index 504c745..ce0f213 100644 --- a/packages/hooks/src/derive.ts +++ b/packages/hooks/src/derive.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-types */ /** * @lineup-lite/hooks * https://github.com/sgratzl/lineup-lite @@ -11,18 +12,18 @@ import type { DateStatsOptions, TextStatsOptions, } from '@lineup-lite/components'; -import type { LineUpLiteColumn } from './interfaces'; import type { Column } from 'react-table'; +import type { LineUpLiteColumn, UnknownObject } from './interfaces'; import { asCategoricalColumn, asDateColumn, asNumberColumn, asTextColumn } from './builder'; /** * clears a set of categories of small invalid n/a values * @param categories */ -export function cleanCategories(categories: Set): string[] { +export function cleanCategories(categories: Set): string[] { // remove missing values - categories.delete(null as any); - categories.delete(undefined as any); + categories.delete(null); + categories.delete(undefined); categories.delete(''); categories.delete('NA'); categories.delete('N/A'); @@ -31,28 +32,28 @@ export function cleanCategories(categories: Set): string[] { return [...categories].map(String).sort(); } -export interface DeriveCategoricalColumnResult { +export interface DeriveCategoricalColumnResult { type: 'categorical'; column: Column; options?: CategoricalStatsOptions; } -export interface DeriveNumberColumnResult { +export interface DeriveNumberColumnResult { type: 'number'; column: Column; options?: NumberStatsOptions; } -export interface DeriveTextColumnResult { +export interface DeriveTextColumnResult { type: 'text'; column: Column; options?: TextStatsOptions; } -export interface DeriveDateColumnResult { +export interface DeriveDateColumnResult { type: 'date'; column: Column; options?: DateStatsOptions; } -export type DeriveColumnResult = +export type DeriveColumnResult = | DeriveCategoricalColumnResult | DeriveDateColumnResult | DeriveNumberColumnResult @@ -61,7 +62,10 @@ export type DeriveColumnResult = /** * guesses the column type based on the values */ -export function deriveColumn(data: D[], accessor: keyof D): DeriveColumnResult { +export function deriveColumn( + data: D[], + accessor: keyof D +): DeriveColumnResult { const column = { Header: accessor.toString(), accessor, @@ -72,7 +76,8 @@ export function deriveColumn(data: D[], accessor: keyof D let firstIndex = 0; let first = data[firstIndex][accessor]; while (first == null && firstIndex < data.length - 1) { - first = data[++firstIndex][accessor]; + firstIndex += 1; + first = data[firstIndex][accessor]; } if (first == null) { // cannot derive @@ -91,14 +96,15 @@ export function deriveColumn(data: D[], accessor: keyof D column: { Header: column.Header, id: accessor.toString(), - accessor: acc as any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + accessor: (acc as unknown) as any, }, }; } // check if categorical const values = new Set(String(first)); - for (let i = firstIndex++; i < data.length; i++) { + for (let i = firstIndex + 1; i < data.length; i += 1) { const v = data[i][accessor]; if (v != null) { values.add(String(v)); @@ -123,7 +129,7 @@ export function deriveColumn(data: D[], accessor: keyof D * @param data the data array * @param columns optional list of column names to generate */ -export function deriveColumns( +export function deriveColumns( data: D[], columns?: (keyof D)[] ): (Column & Partial>)[] { diff --git a/packages/hooks/src/filters/categoricalFilter.ts b/packages/hooks/src/filters/categoricalFilter.ts index fbe3096..a0ea113 100644 --- a/packages/hooks/src/filters/categoricalFilter.ts +++ b/packages/hooks/src/filters/categoricalFilter.ts @@ -6,6 +6,7 @@ */ import type { IdType, Row } from 'react-table'; +import type { UnknownObject } from '../interfaces'; /** * filter function by a set of filter values @@ -13,7 +14,7 @@ import type { IdType, Row } from 'react-table'; * @param ids * @param filterValue */ -export function categoricalFilter( +export function categoricalFilter( rows: readonly Row[], ids: readonly IdType[], filterValue: readonly string[] @@ -36,3 +37,5 @@ export function categoricalFilter( * determines whether the column value to should be automatically removed, since it cannot be handled by this filter */ categoricalFilter.autoRemove = (val: readonly string[]) => !Array.isArray(val); + +export default categoricalFilter; diff --git a/packages/hooks/src/filters/categoricalSetFilter.ts b/packages/hooks/src/filters/categoricalSetFilter.ts index f90e532..a5e57c4 100644 --- a/packages/hooks/src/filters/categoricalSetFilter.ts +++ b/packages/hooks/src/filters/categoricalSetFilter.ts @@ -7,6 +7,7 @@ import type { IdType, Row } from 'react-table'; import type { FilterSetValue } from '@lineup-lite/components'; +import type { UnknownObject } from '../interfaces'; /** * filter function by a set of filter values @@ -14,7 +15,7 @@ import type { FilterSetValue } from '@lineup-lite/components'; * @param ids * @param filterValue */ -export function categoricalSetFilter( +export function categoricalSetFilter( rows: readonly Row[], ids: readonly IdType[], filterValue: readonly FilterSetValue[] @@ -60,3 +61,5 @@ export function categoricalSetFilter( * determines whether the column value to should be automatically removed, since it cannot be handled by this filter */ categoricalSetFilter.autoRemove = (val: readonly string[]) => !Array.isArray(val); + +export default categoricalSetFilter; diff --git a/packages/hooks/src/filters/rangeFilter.ts b/packages/hooks/src/filters/rangeFilter.ts index 943aeb3..d941b48 100644 --- a/packages/hooks/src/filters/rangeFilter.ts +++ b/packages/hooks/src/filters/rangeFilter.ts @@ -6,11 +6,12 @@ */ import type { Row } from 'react-table'; +import type { UnknownObject } from '../interfaces'; /** * a range numeric filter */ -export function rangeFilter( +export function rangeFilter( rows: readonly Row[], ids: readonly string[], filterValue: readonly [T, T] @@ -34,4 +35,6 @@ export function rangeFilter( ); } -rangeFilter.autoRemove = (val: [any, any]) => !Array.isArray(val); +rangeFilter.autoRemove = (val: [unknown, unknown]) => !Array.isArray(val); + +export default rangeFilter; diff --git a/packages/hooks/src/grouping/internal.ts b/packages/hooks/src/grouping/baseGroupBy.ts similarity index 72% rename from packages/hooks/src/grouping/internal.ts rename to packages/hooks/src/grouping/baseGroupBy.ts index 8cd71ea..9722176 100644 --- a/packages/hooks/src/grouping/internal.ts +++ b/packages/hooks/src/grouping/baseGroupBy.ts @@ -6,22 +6,23 @@ */ import type { ColumnInstance, Row } from 'react-table'; -import { identity } from '../renderers/utils'; +import type { UnknownObject } from '../interfaces'; import { compareAsc } from '../sort/internal'; import { MISSING_GROUP } from './histGroupBy'; -export function baseGroupBy( +export default function baseGroupBy( rows: Row[], column: ColumnInstance, - acc: (v: any) => string | null = identity + acc: (v: unknown) => string | null = (v) => (v ? String(v) : null) ): Record[]> { const r: Record[]> = {}; for (const row of rows) { const value = acc(row.values[column.id]) ?? MISSING_GROUP; - if (!r[value]) { + const rValue = r[value]; + if (!rValue) { r[value] = [row]; } else { - r[value]!.push(row); + rValue.push(row); } } // sort by key asc diff --git a/packages/hooks/src/grouping/categoricalGroupBy.ts b/packages/hooks/src/grouping/categoricalGroupBy.ts index 34ac81f..3157dcc 100644 --- a/packages/hooks/src/grouping/categoricalGroupBy.ts +++ b/packages/hooks/src/grouping/categoricalGroupBy.ts @@ -7,9 +7,12 @@ import type { ColumnInstance, Row } from 'react-table'; import type { ICategoricalStats } from '@lineup-lite/components'; -import { baseGroupBy } from './internal'; +import baseGroupBy from './baseGroupBy'; +import type { UseStatsColumnProps } from '../hooks'; +import type { UnknownObject } from '../interfaces'; -export function categoricalGroupBy( +// eslint-disable-next-line @typescript-eslint/ban-types +export default function categoricalGroupBy( rows: Row[], column: ColumnInstance ): Record[]> { @@ -17,11 +20,11 @@ export function categoricalGroupBy( return {}; } const base = baseGroupBy(rows, column); - if ((column as any).statsValue == null) { + if (((column as unknown) as UseStatsColumnProps).statsValue == null) { return base; } // create a new one but this time sorted - const stats = (column as any).statsValue as ICategoricalStats; + const stats = ((column as unknown) as UseStatsColumnProps).statsValue as ICategoricalStats; const sortedGrouped: Record[]> = {}; stats.categories.forEach((cat) => { if (base[cat] != null) { diff --git a/packages/hooks/src/grouping/categoricalSetGroupBy.ts b/packages/hooks/src/grouping/categoricalSetGroupBy.ts index 92dd891..0b55092 100644 --- a/packages/hooks/src/grouping/categoricalSetGroupBy.ts +++ b/packages/hooks/src/grouping/categoricalSetGroupBy.ts @@ -7,17 +7,19 @@ import type { ColumnInstance, Row } from 'react-table'; import type { ICategoricalStats } from '@lineup-lite/components'; -import { baseGroupBy } from './internal'; +import baseGroupBy from './baseGroupBy'; import { categoricalSortFunc, compareAsc } from '../sort/internal'; +import type { UseStatsColumnProps } from '../hooks'; +import type { UnknownObject } from '../interfaces'; -export function categoricalSetGroupBy( +export default function categoricalSetGroupBy( rows: Row[], column: ColumnInstance ): Record[]> { if (rows.length === 0) { return {}; } - const stats = (column as any).statsValue as ICategoricalStats; + const stats = ((column as unknown) as UseStatsColumnProps).statsValue as ICategoricalStats; const sorter = stats ? categoricalSortFunc(stats.categories) : compareAsc; - return baseGroupBy(rows, column, (d) => (d == null ? null : (Array.from(d) as string[]).sort(sorter).join(','))); + return baseGroupBy(rows, column, (d) => (d == null ? null : [...(d as string[])].sort(sorter).join(','))); } diff --git a/packages/hooks/src/grouping/columnSpecificGroupByFn.ts b/packages/hooks/src/grouping/columnSpecificGroupByFn.ts index 6bad641..70b0425 100644 --- a/packages/hooks/src/grouping/columnSpecificGroupByFn.ts +++ b/packages/hooks/src/grouping/columnSpecificGroupByFn.ts @@ -6,13 +6,14 @@ */ import { Row, IdType, defaultGroupByFn } from 'react-table'; +import type { UnknownObject, UseColumnGroupByColumnOptions } from '../interfaces'; /** * helper function to defer the grouping logic to the column * @param rows * @param columnId */ -export function columnSpecificGroupByFn( +export default function columnSpecificGroupByFn( rows: Row[], columnId: IdType ): Record[]> { @@ -20,8 +21,9 @@ export function columnSpecificGroupByFn( return {}; } const column = rows[0].allCells.find((d) => d.column.id === columnId); - if (column && typeof (column.column as any).groupBy) { - return (column.column as any).groupBy(rows, column.column); + if (column && typeof (column.column as UseColumnGroupByColumnOptions).groupBy) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return (column.column as UseColumnGroupByColumnOptions).groupBy!(rows, column.column); } return defaultGroupByFn(rows, columnId); } diff --git a/packages/hooks/src/grouping/dateGroupBy.ts b/packages/hooks/src/grouping/dateGroupBy.ts index d664203..2b0b55d 100644 --- a/packages/hooks/src/grouping/dateGroupBy.ts +++ b/packages/hooks/src/grouping/dateGroupBy.ts @@ -6,9 +6,10 @@ */ import type { ColumnInstance, Row } from 'react-table'; +import type { UnknownObject } from '../interfaces'; import { histGroupBy } from './histGroupBy'; -export function dateGroupBy( +export default function dateGroupBy( rows: Row[], column: ColumnInstance ): Record[]> { diff --git a/packages/hooks/src/grouping/histGroupBy.ts b/packages/hooks/src/grouping/histGroupBy.ts index 3fa2b8b..4fbaa99 100644 --- a/packages/hooks/src/grouping/histGroupBy.ts +++ b/packages/hooks/src/grouping/histGroupBy.ts @@ -8,6 +8,7 @@ import type { INumericStats } from '@lineup-lite/components'; import { ColumnInstance, defaultGroupByFn, Row } from 'react-table'; import type { UseStatsColumnProps } from '../hooks'; +import type { UnknownObject } from '../interfaces'; import { computeArrayNumberStats } from '../stats'; export const MISSING_GROUP = 'Missing Values'; @@ -17,7 +18,7 @@ export const MISSING_GROUP = 'Missing Values'; * @param rows * @param column */ -export function histGroupBy( +export function histGroupBy( rows: readonly Row[], column: ColumnInstance ): Record[]> { @@ -37,8 +38,9 @@ export function histGroupBy( // support group by variants if (Array.isArray(v)) { // TODO support dates, too - const stats = computeArrayNumberStats(v, column)!; - v = stats.median; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-explicit-any + const arrayStats = computeArrayNumberStats(v, (column as unknown) as any)!; + v = arrayStats.median; } return ( v != null && diff --git a/packages/hooks/src/grouping/index.ts b/packages/hooks/src/grouping/index.ts index f613dcd..239e532 100644 --- a/packages/hooks/src/grouping/index.ts +++ b/packages/hooks/src/grouping/index.ts @@ -5,9 +5,9 @@ * Copyright (c) 2021 Samuel Gratzl */ -export * from './columnSpecificGroupByFn'; -export * from './categoricalGroupBy'; -export * from './dateGroupBy'; -export * from './numberGroupBy'; -export * from './textGroupBy'; -export * from './categoricalSetGroupBy'; +export { default as columnSpecificGroupByFn } from './columnSpecificGroupByFn'; +export { default as categoricalGroupBy } from './categoricalGroupBy'; +export { default as dateGroupBy } from './dateGroupBy'; +export { default as numberGroupBy } from './numberGroupBy'; +export { default as textGroupBy } from './textGroupBy'; +export { default as categoricalSetGroupBy } from './categoricalSetGroupBy'; diff --git a/packages/hooks/src/grouping/numberGroupBy.ts b/packages/hooks/src/grouping/numberGroupBy.ts index 0e7b76b..494a929 100644 --- a/packages/hooks/src/grouping/numberGroupBy.ts +++ b/packages/hooks/src/grouping/numberGroupBy.ts @@ -6,9 +6,10 @@ */ import type { ColumnInstance, Row } from 'react-table'; +import type { UnknownObject } from '../interfaces'; import { histGroupBy } from './histGroupBy'; -export function numberGroupBy( +export default function numberGroupBy( rows: Row[], column: ColumnInstance ): Record[]> { diff --git a/packages/hooks/src/grouping/textGroupBy.ts b/packages/hooks/src/grouping/textGroupBy.ts index 5222b84..6243d59 100644 --- a/packages/hooks/src/grouping/textGroupBy.ts +++ b/packages/hooks/src/grouping/textGroupBy.ts @@ -6,9 +6,10 @@ */ import type { ColumnInstance, Row } from 'react-table'; -import { baseGroupBy } from './internal'; +import type { UnknownObject } from '../interfaces'; +import baseGroupBy from './baseGroupBy'; -export function textGroupBy( +export default function textGroupBy( rows: Row[], column: ColumnInstance ): Record[]> { diff --git a/packages/hooks/src/hooks/IndeterminateCheckbox.tsx b/packages/hooks/src/hooks/IndeterminateCheckbox.tsx index 36ab1ae..3a3fe31 100644 --- a/packages/hooks/src/hooks/IndeterminateCheckbox.tsx +++ b/packages/hooks/src/hooks/IndeterminateCheckbox.tsx @@ -7,15 +7,21 @@ import React, { forwardRef, HTMLAttributes, RefObject, useEffect, useRef } from 'react'; -const IndeterminateCheckbox = /*!#__PURE__*/ forwardRef< +const IndeterminateCheckbox = /*! #__PURE__ */ forwardRef< HTMLInputElement, HTMLAttributes & { indeterminate?: boolean } ->(function IndeterminateCheckbox({ indeterminate, ...rest }, ref) { +>(function IndeterminateCheckbox( + { indeterminate, ...rest }: HTMLAttributes & { indeterminate?: boolean }, + ref +) { const defaultRef = useRef(null); const resolvedRef = ref || defaultRef; useEffect(() => { - (resolvedRef as RefObject).current!.indeterminate = indeterminate ?? false; + const actRef = (resolvedRef as RefObject).current; + if (actRef) { + actRef.indeterminate = indeterminate ?? false; + } }, [resolvedRef, indeterminate]); return ; diff --git a/packages/hooks/src/hooks/index.ts b/packages/hooks/src/hooks/index.ts index dac26dc..8109e31 100644 --- a/packages/hooks/src/hooks/index.ts +++ b/packages/hooks/src/hooks/index.ts @@ -9,4 +9,4 @@ export * from './useStats'; export * from './useRowSelectColumn'; export * from './useRowExpandColumn'; export * from './useRowRankColumn'; -export * from './IndeterminateCheckbox'; +export { default as IndeterminateCheckbox } from './IndeterminateCheckbox'; diff --git a/packages/hooks/src/hooks/useRowExpandColumn.tsx b/packages/hooks/src/hooks/useRowExpandColumn.tsx index 1f9fb70..b77f00f 100644 --- a/packages/hooks/src/hooks/useRowExpandColumn.tsx +++ b/packages/hooks/src/hooks/useRowExpandColumn.tsx @@ -16,8 +16,8 @@ import type { UseGroupByCellProps, UseTableCellProps, } from 'react-table'; -import type { LineUpLiteColumn } from '../interfaces'; import { clsx } from '@lineup-lite/components'; +import type { LineUpLiteColumn, UnknownObject } from '../interfaces'; export const USE_EXPAND_COLUMN_I18N_EN = { expandGroup: 'Click to expand this group', @@ -45,7 +45,7 @@ export interface UseRowExpandColumnTableOptions { expandColumnWidth?: number; } -export function useRowExpandColumn(hooks: Hooks) { +export function useRowExpandColumn(hooks: Hooks): void { hooks.visibleColumns.push(generateColumn); } useRowExpandColumn.pluginName = 'useRowExpandColumn'; @@ -55,7 +55,7 @@ function ArrowDropRightLine() { } function Cell() { - //props: TableCellProps & UseTableCellProps & UseGroupByCellProps) { + // props: TableCellProps & UseTableCellProps & UseGroupByCellProps) { // if ((props as any).allColumns.some((d: { isGrouped: boolean }) => d.isGrouped)) { // return
; // } @@ -63,9 +63,12 @@ function Cell() { } function Aggregated( - props: TableCellProps & UseTableCellProps & UseGroupByCellProps & UseRowExpandColumnTableOptions + props: TableCellProps & + UseTableCellProps & + UseGroupByCellProps & + UseRowExpandColumnTableOptions ) { - const row = props.row as Row & UseExpandedRowProps & { depth: number }; + const row = props.row as Row & UseExpandedRowProps & { depth: number }; if (!row.canExpand) { return null; } @@ -86,8 +89,9 @@ function Aggregated( ); } +// eslint-disable-next-line @typescript-eslint/no-explicit-any function Summary(props: any) { - if (!props.allColumns.some((d: any) => d.isGrouped)) { + if (!props.allColumns.some((d: { isGrouped: boolean }) => d.isGrouped)) { return
; } const i18n = { @@ -113,7 +117,7 @@ function Header() { return <>; } -function generateColumn(columns: ColumnInstance[], meta: MetaBase) { +function generateColumn(columns: ColumnInstance[], meta: MetaBase) { const width = (meta.instance as UseRowExpandColumnTableOptions).expandColumnWidth ?? 20; const expandColumn: LineUpLiteColumn = { id: 'expand', diff --git a/packages/hooks/src/hooks/useRowRankColumn.tsx b/packages/hooks/src/hooks/useRowRankColumn.tsx index eb03a7e..5391c1a 100644 --- a/packages/hooks/src/hooks/useRowRankColumn.tsx +++ b/packages/hooks/src/hooks/useRowRankColumn.tsx @@ -18,23 +18,23 @@ import { UseGroupByRowProps, MetaBase, } from 'react-table'; -import type { LineUpLiteColumn } from '../interfaces'; +import type { LineUpLiteColumn, UnknownObject } from '../interfaces'; export interface UseRankRowProps { rank: number; } -export function useRowRankColumn(hooks: Hooks) { +export function useRowRankColumn(hooks: Hooks): void { hooks.visibleColumns.push(generateColumn); hooks.useInstance.push(useInstance); } useRowRankColumn.pluginName = 'useRowRankColumn'; -function Cell(props: TableCellProps & UseTableCellProps) { +function Cell(props: TableCellProps & UseTableCellProps) { return
{`${((props.row as unknown) as UseRankRowProps).rank.toLocaleString()}.`}
; } -function Aggregated(props: TableCellProps & UseTableCellProps) { +function Aggregated(props: TableCellProps & UseTableCellProps) { const group = props.row.subRows; if (group.length === 0) { return
; @@ -66,7 +66,7 @@ export interface UseRowRankColumnTableOptions { rankColumnWidth?: number; } -function generateColumn(columns: ColumnInstance[], meta: MetaBase) { +function generateColumn(columns: ColumnInstance[], meta: MetaBase) { const width = (meta.instance as UseRowRankColumnTableOptions).rankColumnWidth ?? 40; const rankColumn: LineUpLiteColumn = { id: 'rank', @@ -86,7 +86,7 @@ function generateColumn(columns: ColumnInstance[], met return [rankColumn, ...columns]; } -function useInstance(instance: TableInstance) { +function useInstance(instance: TableInstance) { ensurePluginOrder(instance.plugins, ['useFilters', 'useGroupBy', 'useSortBy'], 'useRowRankColumn'); const extendedInstance = (instance as unknown) as TableInstance & @@ -97,9 +97,13 @@ function useInstance(instance: TableInstance) { let groupRank = 1; extendedInstance.flatRows.forEach((row) => { if (((row as unknown) as UseGroupByRowProps).isGrouped) { - ((row as unknown) as UseRankRowProps).rank = groupRank++; + // eslint-disable-next-line no-param-reassign + ((row as unknown) as UseRankRowProps).rank = groupRank; + groupRank += 1; return; } - ((row as unknown) as UseRankRowProps).rank = rank++; + // eslint-disable-next-line no-param-reassign + ((row as unknown) as UseRankRowProps).rank = rank; + rank += 1; }); } diff --git a/packages/hooks/src/hooks/useRowSelectColumn.tsx b/packages/hooks/src/hooks/useRowSelectColumn.tsx index fe0a771..f03a93b 100644 --- a/packages/hooks/src/hooks/useRowSelectColumn.tsx +++ b/packages/hooks/src/hooks/useRowSelectColumn.tsx @@ -14,12 +14,12 @@ import type { UseRowSelectRowProps, TableToggleAllRowsSelectedProps, } from 'react-table'; -import type { LineUpLiteColumn } from '../interfaces'; +import type { LineUpLiteColumn, UnknownObject } from '../interfaces'; import IndeterminateCheckbox from './IndeterminateCheckbox'; export type { TableToggleAllRowsSelectedProps } from 'react-table'; -export function useRowSelectColumn(hooks: Hooks) { +export function useRowSelectColumn(hooks: Hooks): void { hooks.visibleColumns.push(generateColumn); } useRowSelectColumn.pluginName = 'useRowSelectColumn'; @@ -47,9 +47,10 @@ export interface UseSelectColumnTableOptions { selectCheckboxComponent?: React.ComponentType; } +// eslint-disable-next-line @typescript-eslint/no-explicit-any function Cell(props: any) { - const typedRow = props.row as Row & UseRowSelectRowProps; - const rows = props.rows as (Row & UseRowSelectRowProps)[]; + const typedRow = props.row as Row & UseRowSelectRowProps; + const rows = props.rows as (Row & UseRowSelectRowProps)[]; const i18n = { ...USE_ROW_SELECT_COLUMN_I18N_EN, ...(props.i18n ?? {}), @@ -67,10 +68,10 @@ function Cell(props: any) { const shouldSelect = e.currentTarget.checked; let rangeStart = rowIndex; while (rangeStart > 0 && rows[rangeStart - 1].isSelected !== shouldSelect) { - rangeStart--; + rangeStart -= 1; } // select all others within range - for (let i = rangeStart; i < rowIndex; i++) { + for (let i = rangeStart; i < rowIndex; i += 1) { rows[i].toggleRowSelected(shouldSelect); } }, @@ -92,6 +93,7 @@ function Summary() { return
; } +// eslint-disable-next-line @typescript-eslint/no-explicit-any function Header(props: any) { const i18n = { ...USE_ROW_SELECT_COLUMN_I18N_EN, @@ -108,7 +110,7 @@ function Header(props: any) { ); } -function generateColumn(columns: ColumnInstance[], meta: MetaBase) { +function generateColumn(columns: ColumnInstance[], meta: MetaBase) { const width = (meta.instance as UseSelectColumnTableOptions).selectColumnWidth ?? 20; const selectionColumn: LineUpLiteColumn = { id: 'selection', diff --git a/packages/hooks/src/hooks/useStats.ts b/packages/hooks/src/hooks/useStats.ts index 302278c..c8330c5 100644 --- a/packages/hooks/src/hooks/useStats.ts +++ b/packages/hooks/src/hooks/useStats.ts @@ -18,22 +18,24 @@ import { UseGroupByColumnProps, UseFiltersColumnProps, } from 'react-table'; +import type { UnknownObject } from '../interfaces'; export type UseStatsOptions = Partial<{ manualStats: boolean; autoResetStats?: boolean; }>; -export interface UseStatsState { +export interface UseStatsState { Stats: Stats; } -export type UseStatsColumnOptions = Partial<{ +export type UseStatsColumnOptions = Partial<{ Summary: Renderer>; stats: StatsType; // grouper: }>; +// eslint-disable-next-line @typescript-eslint/no-empty-interface export interface UseStatsInstanceProps {} export interface UseStatsColumnProps { @@ -42,31 +44,39 @@ export interface UseStatsColumnProps { preFilterStatsValue?: StatsValue; } -export type StatsProps = HeaderProps & { +export type StatsProps = HeaderProps & { column: UseStatsColumnProps; i18n?: Record; }; -export type StatsCellProps = CellProps & { +export type StatsCellProps = CellProps & { column: UseStatsColumnProps; i18n?: Record; }; +// eslint-disable-next-line @typescript-eslint/no-explicit-any export type StatsValue = any; -export type Stats = Array<{ id: IdType; value: StatsValue }>; +export type Stats = Array<{ + id: IdType; + value: StatsValue; +}>; export interface StatsType { - (values: readonly any[], preFilterStats?: any): any; + (values: readonly unknown[], preFilterStats?: unknown): unknown; } -export type StatsAggregateArray = T[] & { _aggregate?: (gen: (vs: T[], preFilter?: V) => V, stats?: V) => any }; +export type StatsAggregateArray = T[] & { + _aggregate?: (gen: (vs: T[], preFilter?: V) => V, stats?: V) => unknown; +}; -function isStatsAggregateArray(v: any): v is StatsAggregateArray { - return Array.isArray(v) && typeof (v as StatsAggregateArray)._aggregate === 'function'; +function isStatsAggregateArray(v: unknown): v is StatsAggregateArray { + // eslint-disable-next-line no-underscore-dangle + return Array.isArray(v) && typeof (v as StatsAggregateArray)._aggregate === 'function'; } export function statsAggregate(v: T[]): T[] { // combine into an array if (Array.isArray(v)) { const copy: StatsAggregateArray = v.slice(); + // eslint-disable-next-line no-underscore-dangle copy._aggregate = (gen, stats) => gen(copy, stats); return copy; } @@ -77,9 +87,10 @@ export function statsAggregateArray(v: T[]): T[] { // combine into an array if (Array.isArray(v)) { const copy: StatsAggregateArray = v.slice(); + // eslint-disable-next-line no-underscore-dangle copy._aggregate = (gen, stats) => { // aggregate by column - const maxLength = copy.reduce((acc, v) => Math.max(acc, Array.isArray(v) ? v.length : 0), 0); + const maxLength = copy.reduce((acc, vi) => Math.max(acc, Array.isArray(vi) ? vi.length : 0), 0); return Array(maxLength) .fill(0) .map((_, i) => @@ -98,12 +109,12 @@ function DummyComponent() { return null; } -export function useStats(hooks: Hooks) { +export function useStats(hooks: Hooks): void { hooks.useInstance.push(useInstance); } useStats.pluginName = 'useStats'; -function useInstance(instance: TableInstance) { +function useInstance(instance: TableInstance) { ensurePluginOrder(instance.plugins, ['useFilters', 'useGroupBy'], 'useStats'); const extendedInstance = (instance as unknown) as TableInstance & @@ -123,9 +134,10 @@ function useInstance(instance: TableInstance) { const flat = extendedInstance.nonGroupedFlatRows ?? instance.flatRows; const values = flat.map((row) => row.values[col.id]); - const preFilteredFlatRows = extendedInstance.preFilteredFlatRows; + const { preFilteredFlatRows } = extendedInstance; if (!extended.Summary) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any extended.Summary = (extended as any).Filter ?? DummyComponent; } // compute raw stats @@ -141,6 +153,7 @@ function useInstance(instance: TableInstance) { const value = group.values[col.id]; // compute group value for stats if (isStatsAggregateArray(value)) { + // eslint-disable-next-line no-param-reassign, no-underscore-dangle, @typescript-eslint/no-non-null-assertion group.values[col.id] = value._aggregate!(extended.stats!, extended.statsValue); } }); diff --git a/packages/hooks/src/interfaces.ts b/packages/hooks/src/interfaces.ts index 90d1819..f208176 100644 --- a/packages/hooks/src/interfaces.ts +++ b/packages/hooks/src/interfaces.ts @@ -4,6 +4,7 @@ * * Copyright (c) 2021 Samuel Gratzl */ +/* eslint-disable @typescript-eslint/ban-types */ import type { Column, @@ -17,7 +18,9 @@ import type { } from 'react-table'; import type { UseStatsColumnOptions } from './hooks/useStats'; -export interface UseColumnGroupByColumnOptions { +export type UnknownObject = Record; + +export interface UseColumnGroupByColumnOptions { /** * renderer used to render the group cell */ @@ -31,7 +34,7 @@ export interface UseColumnGroupByColumnOptions { /** * a lineup lite column description */ -export type LineUpLiteColumn = Column & +export type LineUpLiteColumn = Column & UseFiltersColumnOptions & UseGroupByColumnOptions & UseSortByColumnOptions & diff --git a/packages/hooks/src/renderers/BarRenderer.tsx b/packages/hooks/src/renderers/BarRenderer.tsx index c8697fe..9067a17 100644 --- a/packages/hooks/src/renderers/BarRenderer.tsx +++ b/packages/hooks/src/renderers/BarRenderer.tsx @@ -8,7 +8,8 @@ import { NumberBar, NumberFormatter } from '@lineup-lite/components'; import React, { useContext } from 'react'; import type { CellProps, Renderer } from 'react-table'; -import { deriveNumberOptions } from './barStats'; +import type { UnknownObject } from '../interfaces'; +import deriveNumberOptions from './deriveNumberOptions'; import { missingClass, optionContext } from './utils'; export interface BarRendererOptions { @@ -20,7 +21,7 @@ export interface BarRendererOptions { /** * Cell renderer for a number to be rendered as a a bar */ -export function BarRenderer>(props: P) { +export function BarRenderer>(props: P): JSX.Element { const options = useContext(optionContext) as BarRendererOptions; const p = deriveNumberOptions(props, options); return ; @@ -29,7 +30,7 @@ export function BarRenderer>(pr /** * factory for rendering numbers as a bar */ -export function BarRendererFactory>( +export function BarRendererFactory>( options: BarRendererOptions = {} ): Renderer

{ return (props: P) => ( diff --git a/packages/hooks/src/renderers/BoxPlotArrayRenderer.tsx b/packages/hooks/src/renderers/BoxPlotArrayRenderer.tsx index 9e52308..0459cb9 100644 --- a/packages/hooks/src/renderers/BoxPlotArrayRenderer.tsx +++ b/packages/hooks/src/renderers/BoxPlotArrayRenderer.tsx @@ -5,9 +5,10 @@ * Copyright (c) 2021 Samuel Gratzl */ -import { BoxPlotArray, INumberStats, NumberStatsOptions } from '@lineup-lite/components'; +import { BoxPlotArray, INumberStats, NumberStatsOptions, IBoxPlot } from '@lineup-lite/components'; import React, { useContext } from 'react'; import type { CellProps, Renderer } from 'react-table'; +import type { UnknownObject } from '../interfaces'; import { numberStats } from '../stats'; import { deriveStats, optionContext, statsGeneratorContext, StatsPropsLike } from './utils'; @@ -15,15 +16,23 @@ export interface BoxPlotArrayRendererOptions extends NumberStatsOptions { maxBin?: number; } -export function BoxPlotArrayRenderer

>(props: P) { +export function BoxPlotArrayRenderer

>(props: P): JSX.Element { const options = useContext(optionContext) as BoxPlotArrayRendererOptions; const stats = useContext<((arr: readonly number[], preFilter?: INumberStats) => INumberStats) | null>(statsGeneratorContext) ?? numberStats(options); const { s } = deriveStats(props, stats); - const cellProps = (props as unknown) as CellProps; + const cellProps = (props as unknown) as CellProps; - return ; + return ( + + ); } export function BoxPlotArrayRendererFactory

>( diff --git a/packages/hooks/src/renderers/BoxPlotRenderer.tsx b/packages/hooks/src/renderers/BoxPlotRenderer.tsx index 691de11..313a266 100644 --- a/packages/hooks/src/renderers/BoxPlotRenderer.tsx +++ b/packages/hooks/src/renderers/BoxPlotRenderer.tsx @@ -24,14 +24,14 @@ import { useAsyncDebounce, } from './utils'; -export interface BoxPlotRendererOptions extends NumberStatsOptions {} +export type BoxPlotRendererOptions = NumberStatsOptions; function FilterBoxPlot(props: FilterRangeBoxPlotProps) { const setFilter = useAsyncDebounce(props.setFilter); return ; } -export function BoxPlotRenderer

>(props: P) { +export function BoxPlotRenderer

>(props: P): JSX.Element { const options = useContext(optionContext) as BoxPlotRendererOptions; const stats = useContext<((arr: readonly (number | null | undefined)[], preFilter?: INumberStats) => INumberStats) | null>( diff --git a/packages/hooks/src/renderers/CategoricalHistogramRenderer.tsx b/packages/hooks/src/renderers/CategoricalHistogramRenderer.tsx index 8618f8d..ca8e430 100644 --- a/packages/hooks/src/renderers/CategoricalHistogramRenderer.tsx +++ b/packages/hooks/src/renderers/CategoricalHistogramRenderer.tsx @@ -16,7 +16,7 @@ export interface CategoricalHistogramRendererOptions extends CategoricalRenderer maxBin?: number; } -export function CategoricalHistogramRenderer

>(props: P) { +export function CategoricalHistogramRenderer

>(props: P): JSX.Element { const options = useContext(optionContext) as CategoricalHistogramRendererOptions; const stats = useContext<((arr: readonly string[], preFilter?: ICategoricalStats) => ICategoricalStats) | null>( @@ -24,7 +24,7 @@ export function CategoricalHistogramRenderer

>(p ) ?? categoricalStats(options); const { s, preFilter, cell } = extractStats(props, stats); if (cell) { - const maxBin = groupMaxBin(options, cell, props); + const maxBin = groupMaxBin(options, (cell as unknown) as { isAggregated?: boolean }, props); return ; } if (isFilterAble(props) && props.column.canFilter) { diff --git a/packages/hooks/src/renderers/CategoricalRenderer.tsx b/packages/hooks/src/renderers/CategoricalRenderer.tsx index f9990c7..fecb73d 100644 --- a/packages/hooks/src/renderers/CategoricalRenderer.tsx +++ b/packages/hooks/src/renderers/CategoricalRenderer.tsx @@ -9,6 +9,7 @@ import { CategoricalColor, ICategoricalStats } from '@lineup-lite/components'; import React, { useContext } from 'react'; import type { CellProps, Renderer } from 'react-table'; import type { UseStatsColumnProps } from '../hooks'; +import type { UnknownObject } from '../interfaces'; import { generateColor, generateIdentity, missingClass, optionContext, resolve } from './utils'; export interface CategoricalRendererOptions { @@ -16,7 +17,7 @@ export interface CategoricalRendererOptions { format?: (v: string) => string; } -function deriveCategoricalOptions>( +function deriveCategoricalOptions>( props: P, options: CategoricalRendererOptions = {} ) { @@ -28,13 +29,13 @@ function deriveCategoricalOptions>(props: P) { +export function CategoricalRenderer>(props: P): JSX.Element { const options = useContext(optionContext) as CategoricalRendererOptions; const p = deriveCategoricalOptions(props, options); return ; } -export function CategoricalRendererFactory>( +export function CategoricalRendererFactory>( options: CategoricalRendererOptions = {} ): Renderer

{ return (props: P) => ( diff --git a/packages/hooks/src/renderers/CategoricalSetHistogramRenderer.tsx b/packages/hooks/src/renderers/CategoricalSetHistogramRenderer.tsx index 3940a78..6d2f0b6 100644 --- a/packages/hooks/src/renderers/CategoricalSetHistogramRenderer.tsx +++ b/packages/hooks/src/renderers/CategoricalSetHistogramRenderer.tsx @@ -16,7 +16,7 @@ export interface CategoricalSetHistogramRendererOptions extends CategoricalRende maxBin?: number; } -export function CategoricalSetHistogramRenderer

>(props: P) { +export function CategoricalSetHistogramRenderer

>(props: P): JSX.Element { const options = useContext(optionContext) as CategoricalSetHistogramRendererOptions; const stats = useContext<((arr: readonly string[], preFilter?: ICategoricalStats) => ICategoricalStats) | null>( diff --git a/packages/hooks/src/renderers/CategoricalSetRenderer.tsx b/packages/hooks/src/renderers/CategoricalSetRenderer.tsx index 6340393..1a028b5 100644 --- a/packages/hooks/src/renderers/CategoricalSetRenderer.tsx +++ b/packages/hooks/src/renderers/CategoricalSetRenderer.tsx @@ -9,6 +9,7 @@ import { ICategoricalStats, UpSetLine, CategoricalSetValue } from '@lineup-lite/ import React, { useContext } from 'react'; import type { CellProps, Renderer } from 'react-table'; import type { UseStatsColumnProps } from '../hooks'; +import type { UnknownObject } from '../interfaces'; import type { CategoricalRendererOptions } from './CategoricalRenderer'; import { EMPTY_ARR, generateColor, generateIdentity, missingClass, optionContext, resolve } from './utils'; @@ -16,7 +17,7 @@ export interface CategoricalSetRendererOptions extends CategoricalRendererOption categories?: readonly string[]; } -function deriveCategoricalSetOptions>( +function deriveCategoricalSetOptions>( props: P, options: CategoricalSetRendererOptions = {} ) { @@ -29,13 +30,15 @@ function deriveCategoricalSetOptions>(props: P) { +export function CategoricalSetRenderer>( + props: P +): JSX.Element { const options = useContext(optionContext) as CategoricalSetRendererOptions; const p = deriveCategoricalSetOptions(props, options); return ; } -export function CategoricalSetRendererFactory>( +export function CategoricalSetRendererFactory>( options: CategoricalSetRendererOptions = {} ): Renderer

{ return (props: P) => ( diff --git a/packages/hooks/src/renderers/ColorRenderer.tsx b/packages/hooks/src/renderers/ColorRenderer.tsx index 03b8f10..422c23d 100644 --- a/packages/hooks/src/renderers/ColorRenderer.tsx +++ b/packages/hooks/src/renderers/ColorRenderer.tsx @@ -7,18 +7,19 @@ import React, { useContext } from 'react'; import type { CellProps, Renderer } from 'react-table'; +import { NumberColor } from '@lineup-lite/components'; import type { BarRendererOptions } from './BarRenderer'; -import { deriveNumberOptions } from './barStats'; +import deriveNumberOptions from './deriveNumberOptions'; import { missingClass, optionContext } from './utils'; -import { NumberColor } from '@lineup-lite/components'; +import type { UnknownObject } from '../interfaces'; -export function ColorRenderer>(props: P) { +export function ColorRenderer>(props: P): JSX.Element { const options = useContext(optionContext) as BarRendererOptions; const p = deriveNumberOptions(props, options); return ; } -export function ColorRendererFactory>( +export function ColorRendererFactory>( options: BarRendererOptions = {} ): Renderer

{ return (props: P) => ( diff --git a/packages/hooks/src/renderers/DateHistogramRenderer.tsx b/packages/hooks/src/renderers/DateHistogramRenderer.tsx index 6742650..275534d 100644 --- a/packages/hooks/src/renderers/DateHistogramRenderer.tsx +++ b/packages/hooks/src/renderers/DateHistogramRenderer.tsx @@ -34,14 +34,14 @@ function Filtered(props: FilterRangeHistogramProps) { return ; } -export function DateHistogramRenderer

>(props: P) { +export function DateHistogramRenderer

>(props: P): JSX.Element { const options = useContext(optionContext) as HistogramRendererOptions; const stats = useContext<((arr: readonly (Date | null)[], preFilter?: IDateStats) => IDateStats) | null>(statsGeneratorContext) ?? dateStats(options); const { s, preFilter, cell } = extractStats(props, stats); if (cell) { - const maxBin = groupMaxBin(options, cell, props); + const maxBin = groupMaxBin(options, (cell as unknown) as { isAggregated?: boolean }, props); return ; } if (isFilterAble(props) && props.column.canFilter) { diff --git a/packages/hooks/src/renderers/DateRenderer.tsx b/packages/hooks/src/renderers/DateRenderer.tsx index 9a1d586..25de2fb 100644 --- a/packages/hooks/src/renderers/DateRenderer.tsx +++ b/packages/hooks/src/renderers/DateRenderer.tsx @@ -7,16 +7,16 @@ import React, { useContext } from 'react'; import type { Renderer, CellProps } from 'react-table'; -import { IDateStats, DateFormatter, resolveDateFormatter } from '@lineup-lite/components'; +import { IDateStats, DateFormatter, resolveDateFormatter, DateLabel } from '@lineup-lite/components'; import type { UseStatsColumnProps } from '../hooks'; import { missingClass, optionContext, resolve } from './utils'; -import { DateLabel } from '@lineup-lite/components'; +import type { UnknownObject } from '../interfaces'; export interface DateRendererOptions { format?: DateFormatter; } -function deriveDateOptions>( +function deriveDateOptions>( props: P, options: DateRendererOptions = {} ) { @@ -27,7 +27,7 @@ function deriveDateOptions>( }; } -export function DateRenderer>(props: P) { +export function DateRenderer>(props: P): JSX.Element { const options = useContext(optionContext) as DateRendererOptions; if (typeof props.value === 'string') { return

{props.value}
; @@ -36,7 +36,7 @@ export function DateRenderer>(pro return ; } -export function DateRendererFactory>( +export function DateRendererFactory>( options: DateRendererOptions = {} ): Renderer

{ return (props: P) => ( diff --git a/packages/hooks/src/renderers/GroupValueRenderer.tsx b/packages/hooks/src/renderers/GroupValueRenderer.tsx index 9032b4f..1ce87e2 100644 --- a/packages/hooks/src/renderers/GroupValueRenderer.tsx +++ b/packages/hooks/src/renderers/GroupValueRenderer.tsx @@ -7,8 +7,11 @@ import React from 'react'; import type { CellProps } from 'react-table'; +import type { UnknownObject } from '../interfaces'; -export function GroupValueRenderer>(props: P) { - const value = (props.row as any).groupByVal ?? props.value; - return

{value}
; +export default function GroupValueRenderer>( + props: P +): JSX.Element { + const value = ((props.row as unknown) as { groupByVal?: string }).groupByVal ?? props.value; + return
{String(value)}
; } diff --git a/packages/hooks/src/renderers/HeatMap1DRenderer.tsx b/packages/hooks/src/renderers/HeatMap1DRenderer.tsx index cb2d02b..e51a4f3 100644 --- a/packages/hooks/src/renderers/HeatMap1DRenderer.tsx +++ b/packages/hooks/src/renderers/HeatMap1DRenderer.tsx @@ -8,7 +8,8 @@ import { HeatMap1D, NumberFormatter } from '@lineup-lite/components'; import React, { useContext } from 'react'; import type { CellProps, Renderer } from 'react-table'; -import { deriveNumberOptions } from './barStats'; +import type { UnknownObject } from '../interfaces'; +import deriveNumberOptions from './deriveNumberOptions'; import { missingClass, optionContext } from './utils'; export interface HeatMap1DRendererOptions { @@ -20,7 +21,7 @@ export interface HeatMap1DRendererOptions { /** * Cell renderer for a number to be rendered as a a HeatMap1D */ -export function HeatMap1DRenderer>(props: P) { +export function HeatMap1DRenderer>(props: P): JSX.Element { const options = useContext(optionContext) as HeatMap1DRendererOptions; const p = deriveNumberOptions(props, options); return ; @@ -29,7 +30,7 @@ export function HeatMap1DRenderer>( +export function HeatMap1DRendererFactory>( options: HeatMap1DRendererOptions = {} ): Renderer

{ return (props: P) => ( diff --git a/packages/hooks/src/renderers/NumberHistogramRenderer.tsx b/packages/hooks/src/renderers/NumberHistogramRenderer.tsx index 20195fe..269925b 100644 --- a/packages/hooks/src/renderers/NumberHistogramRenderer.tsx +++ b/packages/hooks/src/renderers/NumberHistogramRenderer.tsx @@ -34,14 +34,14 @@ function Filtered(props: FilterRangeHistogramProps) { return ; } -export function NumberHistogramRenderer

>(props: P) { +export function NumberHistogramRenderer

>(props: P): JSX.Element { const options = useContext(optionContext) as NumberHistogramRendererOptions; const stats = useContext<((arr: readonly number[], preFilter?: INumberStats) => INumberStats) | null>(statsGeneratorContext) ?? numberStats(options); const { s, preFilter, cell } = extractStats(props, stats); if (cell) { - const maxBin = groupMaxBin(options, cell, props); + const maxBin = groupMaxBin(options, (cell as unknown) as { isAggregated?: boolean }, props); return ; } if (isFilterAble(props) && props.column.canFilter) { diff --git a/packages/hooks/src/renderers/ProportionalSymbolRenderer.tsx b/packages/hooks/src/renderers/ProportionalSymbolRenderer.tsx index ea74d21..1d61816 100644 --- a/packages/hooks/src/renderers/ProportionalSymbolRenderer.tsx +++ b/packages/hooks/src/renderers/ProportionalSymbolRenderer.tsx @@ -7,18 +7,21 @@ import React, { useContext } from 'react'; import type { Renderer, CellProps } from 'react-table'; +import { NumberSymbol } from '@lineup-lite/components'; import type { BarRendererOptions } from './BarRenderer'; import { missingClass, optionContext } from './utils'; -import { deriveNumberOptions } from './barStats'; -import { NumberSymbol } from '@lineup-lite/components'; +import deriveNumberOptions from './deriveNumberOptions'; +import type { UnknownObject } from '../interfaces'; -export function ProportionalSymbolRenderer>(props: P) { +export function ProportionalSymbolRenderer>( + props: P +): JSX.Element { const options = useContext(optionContext) as BarRendererOptions; const p = deriveNumberOptions(props, options); return ; } -export function ProportionalSymbolRendererFactory>( +export function ProportionalSymbolRendererFactory>( options: BarRendererOptions = {} ): Renderer

{ return (props: P) => ( diff --git a/packages/hooks/src/renderers/StackedBarRenderer.tsx b/packages/hooks/src/renderers/StackedBarRenderer.tsx index 67bec60..ec8972f 100644 --- a/packages/hooks/src/renderers/StackedBarRenderer.tsx +++ b/packages/hooks/src/renderers/StackedBarRenderer.tsx @@ -14,14 +14,15 @@ import { } from '@lineup-lite/components'; import React, { useContext } from 'react'; import type { Accessor, CellProps, Renderer } from 'react-table'; -import { deriveNumberOptions } from './barStats'; +import type { UnknownObject } from '../interfaces'; +import deriveNumberOptions from './deriveNumberOptions'; import { missingClass, optionContext } from './utils'; -export function computeStackedValue( +export function computeStackedValue( stack: readonly { col: keyof D | Accessor; weight: number; color?: string }[], colors: (v: string) => string = defaultCategoricalColorScale() ): Accessor { - const f = computeWeightedSumFactory(stack.map((s, i) => ({ color: colors(i + ''), ...s }))); + const f = computeWeightedSumFactory(stack.map((s, i) => ({ color: colors(`${i}`), ...s }))); const acc: Accessor[] = stack.map((d) => (typeof d.col === 'function' ? d.col : (v) => v[d.col as keyof D])); return ( originalRow: D, @@ -44,7 +45,9 @@ export interface StackedBarRendererOptions { /** * Cell renderer for a number to be rendered as a a bar */ -export function StackedBarRenderer>(props: P) { +export function StackedBarRenderer>( + props: P +): JSX.Element { const options = useContext(optionContext) as StackedBarRendererOptions; const p = deriveNumberOptions(props, options); return ; @@ -53,7 +56,7 @@ export function StackedBarRenderer>( +export function StackedBarRendererFactory>( options: StackedBarRendererOptions = {} ): Renderer

{ return (props: P) => ( diff --git a/packages/hooks/src/renderers/TextRenderer.tsx b/packages/hooks/src/renderers/TextRenderer.tsx index 58669fe..6d3a12d 100644 --- a/packages/hooks/src/renderers/TextRenderer.tsx +++ b/packages/hooks/src/renderers/TextRenderer.tsx @@ -4,13 +4,14 @@ * * Copyright (c) 2021 Samuel Gratzl */ +/* eslint-disable @typescript-eslint/ban-types */ import React, { useContext } from 'react'; import type { Renderer, CellProps } from 'react-table'; import type { ITextStats } from '@lineup-lite/components'; +import { TextLabel } from '@lineup-lite/components'; import type { UseStatsColumnProps } from '../hooks'; import { missingClass, optionContext, resolve } from './utils'; -import { TextLabel } from '@lineup-lite/components'; export interface TextRendererOptions { format?: (v: string) => string; @@ -27,7 +28,7 @@ function deriveTextOptions>( }; } -export function TextRenderer>(props: P) { +export function TextRenderer>(props: P): JSX.Element { const options = useContext(optionContext) as TextRendererOptions; if (typeof props.value === 'string') { return

{props.value}
; diff --git a/packages/hooks/src/renderers/TextSummaryRenderer.tsx b/packages/hooks/src/renderers/TextSummaryRenderer.tsx index c552551..c391867 100644 --- a/packages/hooks/src/renderers/TextSummaryRenderer.tsx +++ b/packages/hooks/src/renderers/TextSummaryRenderer.tsx @@ -7,6 +7,7 @@ import React, { useContext } from 'react'; import type { Renderer } from 'react-table'; +import { ITextStats, TextSummary, FilterTextSummary, FilterTextSummaryProps } from '@lineup-lite/components'; import { extractStats, isFilterAble, @@ -15,7 +16,6 @@ import { optionContext, useAsyncDebounce, } from './utils'; -import { ITextStats, TextSummary, FilterTextSummary, FilterTextSummaryProps } from '@lineup-lite/components'; import { textStats } from '../stats'; export interface TextSummaryRendererOptions { @@ -39,7 +39,7 @@ function Filtered(props: FilterTextSummaryProps) { return ; } -export function TextSummaryRenderer

>(props: P) { +export function TextSummaryRenderer

>(props: P): JSX.Element { const options = useContext(optionContext) as TextSummaryRendererOptions; const stats = useContext<((arr: readonly string[], preFilter?: ITextStats) => ITextStats) | null>(statsGeneratorContext) ?? diff --git a/packages/hooks/src/renderers/barStats.ts b/packages/hooks/src/renderers/deriveNumberOptions.ts similarity index 76% rename from packages/hooks/src/renderers/barStats.ts rename to packages/hooks/src/renderers/deriveNumberOptions.ts index 4521c9e..5b43889 100644 --- a/packages/hooks/src/renderers/barStats.ts +++ b/packages/hooks/src/renderers/deriveNumberOptions.ts @@ -5,16 +5,21 @@ * Copyright (c) 2021 Samuel Gratzl */ -import type { BarRendererOptions } from './BarRenderer'; import type { CellProps } from 'react-table'; -import type { UseStatsColumnProps } from '../hooks'; import { INumberStats, defaultScale, defaultConstantColorScale, resolveNumberFormatter } from '@lineup-lite/components'; +import type { BarRendererOptions } from './BarRenderer'; +import type { UseStatsColumnProps } from '../hooks'; import { resolve } from './utils'; +import type { UnknownObject } from '../interfaces'; -export function deriveNumberOptions>( +export default function deriveNumberOptions>( props: P, options: BarRendererOptions = {} -) { +): { + scale: (v: number) => number; + color: (v: number) => string; + format: (v: number) => string; +} { const col = props.column as Partial; const stats = col.statsValue as INumberStats | undefined; return { diff --git a/packages/hooks/src/renderers/index.ts b/packages/hooks/src/renderers/index.ts index f875482..439a3e6 100644 --- a/packages/hooks/src/renderers/index.ts +++ b/packages/hooks/src/renderers/index.ts @@ -15,7 +15,7 @@ export * from './DateRenderer'; export * from './NumberHistogramRenderer'; export * from './ProportionalSymbolRenderer'; export * from './TextSummaryRenderer'; -export * from './GroupValueRenderer'; +export { default as GroupValueRenderer } from './GroupValueRenderer'; export * from './CategoricalSetRenderer'; export * from './CategoricalSetHistogramRenderer'; export * from './HeatMap1DRenderer'; diff --git a/packages/hooks/src/renderers/utils.ts b/packages/hooks/src/renderers/utils.ts index c7de733..06b6a66 100644 --- a/packages/hooks/src/renderers/utils.ts +++ b/packages/hooks/src/renderers/utils.ts @@ -5,38 +5,41 @@ * Copyright (c) 2021 Samuel Gratzl */ -import type { StatsProps, StatsCellProps } from '../hooks'; import type { UseFiltersColumnProps, UseGroupByInstanceProps, Cell, CellProps, UseGroupByCellProps } from 'react-table'; import { ICommonStats, IHistStats, defaultCategoricalColorScale } from '@lineup-lite/components'; import { createContext, Context, useCallback, useRef } from 'react'; +import type { StatsProps, StatsCellProps } from '../hooks'; +import type { UnknownObject } from '../interfaces'; export const EMPTY_ARR = []; export const EMPTY_OBJ = {}; -export const optionContext: Context<{ [key: string]: any }> = createContext<{ [key: string]: any }>({}); +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const optionContext: Context = createContext({}); +// eslint-disable-next-line @typescript-eslint/no-explicit-any export const statsGeneratorContext: Context = createContext(null); export type StatsPropsLike = - | ({ value: readonly T[]; i18n?: Record } & StatsCellProps) - | StatsProps; + | ({ value: readonly T[]; i18n?: Record } & StatsCellProps) + | StatsProps; -function isValueArray(props: any): props is { value: readonly T[] } { +function isValueArray(props: unknown): props is { value: readonly T[] } { return Array.isArray((props as { value: readonly T[] }).value); } export function deriveStats, T>( props: StatsPropsLike, statsGen: (arr: readonly T[], preFilterValues?: S) => S -) { +): { s: S; preFilter?: S } { if (props.column.statsValue) { return { s: props.column.statsValue as S, preFilter: props.column.preFilterStatsValue as S, }; } - const flat = ((props as unknown) as UseGroupByInstanceProps).nonGroupedFlatRows ?? props.flatRows; + const flat = ((props as unknown) as UseGroupByInstanceProps).nonGroupedFlatRows ?? props.flatRows; const values = flat.map((row) => row.values[props.column.id]); - const preFilteredRows = ((props as unknown) as UseFiltersColumnProps).preFilteredRows; + const { preFilteredRows } = (props as unknown) as UseFiltersColumnProps; const preFilterStats = preFilteredRows ? statsGen(preFilteredRows.map((row) => row.values[props.column.id])) : undefined; @@ -50,10 +53,16 @@ export function extractStats, T>( props: StatsPropsLike, statsGen: (arr: readonly T[], preFilterValues?: S) => S, expectArray = false -) { +): { + s: S; + preFilter: S | undefined; + cell: Cell; + base?: S | null; + isAggregated?: boolean; +} { const { s, preFilter } = deriveStats(props, statsGen); - const cellProps = (props as unknown) as CellProps; - const cell = cellProps.cell as Cell & UseGroupByCellProps; + const cellProps = (props as unknown) as CellProps; + const cell = cellProps.cell as Cell & UseGroupByCellProps; if (cell) { return { @@ -72,16 +81,16 @@ export function extractStats, T>( }; } -export function groupMaxBin

>( +export function groupMaxBin

>( options: { maxBin?: number }, - cell: { isAggregated: boolean }, + cell: { isAggregated?: boolean }, props: P -) { +): number { if (options.maxBin != null || !cell.isAggregated) { - return options.maxBin; + return options.maxBin ?? 0; } - const groups = ((props as unknown) as UseGroupByInstanceProps).onlyGroupedFlatRows ?? []; - const stats = groups.map((group) => group.values[props.column.id]) as IHistStats[]; + const groups = ((props as unknown) as UseGroupByInstanceProps).onlyGroupedFlatRows ?? []; + const stats = groups.map((group) => group.values[props.column.id]) as IHistStats[]; return stats.reduce((acc, v) => (v != null && v.maxBin != null ? Math.max(acc, v.maxBin.count) : acc), 1); } @@ -91,7 +100,7 @@ export function groupMaxBin

>( * @param globalValue second candidate * @param defaultValue factory function for generating a default value */ -export function resolve(directValue: T | undefined, globalValue: T | undefined, defaultValue: () => T) { +export function resolve(directValue: T | undefined, globalValue: T | undefined, defaultValue: () => T): T { if (directValue != null) { return directValue; } @@ -101,39 +110,43 @@ export function resolve(directValue: T | undefined, globalValue: T | undefine return defaultValue(); } -export function isFilterAble(props: any): props is { column: UseFiltersColumnProps } { - return typeof (props.column as UseFiltersColumnProps).setFilter === 'function'; +export function isFilterAble( + props: unknown +): props is { column: UseFiltersColumnProps } { + if (!props || (props as UnknownObject).column != null) { + return false; + } + return typeof ((props as UnknownObject).column as UseFiltersColumnProps).setFilter === 'function'; } -export function identity(v: string) { +export function identity(v: T): T { return v; } -export function generateIdentity() { +export function generateIdentity(): (v: T) => T { return identity; } -export function generateColor() { +export function generateColor(): (v: string) => string { return defaultCategoricalColorScale(); } // own implementation to avoid regenerator runtime -export function useAsyncDebounce void>(f: F, timeout = 0): F { +export function useAsyncDebounce(f: (v: T) => void, timeout = 0): (v: T) => void { const debounceRef = useRef(-1); - const b = useCallback( - (...args: any[]) => { + return useCallback( + (arg: T) => { if (debounceRef.current >= 0) { clearTimeout(debounceRef.current); } debounceRef.current = setTimeout(() => { debounceRef.current = -1; - f(...args); + f(arg); }, timeout); }, [f, timeout] ); - return b as F; } /** @@ -142,7 +155,9 @@ export function useAsyncDebounce void>(f: F, timeo */ export function isMissing(v: null | undefined | unknown): boolean { return ( - v == null || (typeof v === 'number' && Number.isNaN(v)) || (typeof v === 'string' && ['NaN', 'N/A', ''].includes(v)) + v == null || + (typeof v === 'number' && Number.isNaN(v)) || + (typeof v === 'string' && ['NaN', 'N/A', 'NA'].includes(v)) ); } diff --git a/packages/hooks/src/setupTests.ts b/packages/hooks/src/setupTests.ts index df91c64..65dc982 100644 --- a/packages/hooks/src/setupTests.ts +++ b/packages/hooks/src/setupTests.ts @@ -11,4 +11,5 @@ // allows you to do things like: // expect(element).toHaveTextContent(/react/i) // learn more: https://github.com/testing-library/jest-dom +// eslint-disable-next-line import/no-extraneous-dependencies import '@testing-library/jest-dom/extend-expect'; diff --git a/packages/hooks/src/sort/categoricalSetSort.ts b/packages/hooks/src/sort/categoricalSetSort.ts index 67d8658..e00418f 100644 --- a/packages/hooks/src/sort/categoricalSetSort.ts +++ b/packages/hooks/src/sort/categoricalSetSort.ts @@ -5,7 +5,6 @@ * Copyright (c) 2021 Samuel Gratzl */ -import type { RowCompareFunction } from './interfaces'; import type { Row } from 'react-table'; import { ICategoricalStats, @@ -14,7 +13,9 @@ import { categoricalSetDegree, CategoricalSetValue, } from '@lineup-lite/components'; +import type { RowCompareFunction } from './interfaces'; import { compareAsc } from './internal'; +import type { UnknownObject } from '../interfaces'; function toMode(s: ICategoricalStats, bin: number) { if (bin < 0 || s.hist.length <= bin) { @@ -31,12 +32,12 @@ function toMode(s: ICategoricalStats, bin: number) { return 3; } -export function categoricalSetGroupCompare(a: Row, b: Row, columnId: string): number { +export function categoricalSetGroupCompare(a: Row, b: Row, columnId: string): number { const av: ICategoricalStats = a.values[columnId]; const bv: ICategoricalStats = b.values[columnId]; if (isCategoricalStats(av) && isCategoricalStats(bv)) { - for (let i = 0; i < av.hist.length; i++) { + for (let i = 0; i < av.hist.length; i += 1) { const avi = toMode(av, i); const bvi = toMode(bv, i); if (avi !== bvi) { @@ -75,7 +76,7 @@ export function categoricalSetCompare(categories?: readonly string[]): RowCompar const iA = categoricalSetIndices(va, lookup); const iB = categoricalSetIndices(vb, lookup); const min = Math.min(iA.length, iB.length); - for (let i = 0; i < min; i++) { + for (let i = 0; i < min; i += 1) { if (iA[i] === iB[i]) { continue; } diff --git a/packages/hooks/src/sort/categoricalSort.ts b/packages/hooks/src/sort/categoricalSort.ts index a016e89..a94779c 100644 --- a/packages/hooks/src/sort/categoricalSort.ts +++ b/packages/hooks/src/sort/categoricalSort.ts @@ -5,12 +5,13 @@ * Copyright (c) 2021 Samuel Gratzl */ -import type { RowCompareFunction } from './interfaces'; import type { Row } from 'react-table'; import { ICategoricalStats, isCategoricalStats } from '@lineup-lite/components'; +import type { RowCompareFunction } from './interfaces'; import { categoricalSortFunc, compareAsc } from './internal'; +import type { UnknownObject } from '../interfaces'; -export function categoricalGroupCompare(a: Row, b: Row, columnId: string): number { +export function categoricalGroupCompare(a: Row, b: Row, columnId: string): number { const av: ICategoricalStats = a.values[columnId]; const bv: ICategoricalStats = b.values[columnId]; diff --git a/packages/hooks/src/sort/dateSort.ts b/packages/hooks/src/sort/dateGroupCompare.ts similarity index 74% rename from packages/hooks/src/sort/dateSort.ts rename to packages/hooks/src/sort/dateGroupCompare.ts index 08acff8..19bd1bc 100644 --- a/packages/hooks/src/sort/dateSort.ts +++ b/packages/hooks/src/sort/dateGroupCompare.ts @@ -8,8 +8,9 @@ import type { Row } from 'react-table'; import { IDateStats, isDateStats } from '@lineup-lite/components'; import { compareAsc } from './internal'; +import type { UnknownObject } from '../interfaces'; -export function dateGroupCompare(a: Row, b: Row, columnId: string): number { +export default function dateGroupCompare(a: Row, b: Row, columnId: string): number { const av: IDateStats = a.values[columnId]; const bv: IDateStats = b.values[columnId]; if (isDateStats(av) && isDateStats(bv)) { diff --git a/packages/hooks/src/sort/index.ts b/packages/hooks/src/sort/index.ts index c793327..344e0b5 100644 --- a/packages/hooks/src/sort/index.ts +++ b/packages/hooks/src/sort/index.ts @@ -6,10 +6,10 @@ */ export * from './interfaces'; -export * from './sortCompare'; -export * from './sortSplitter'; +export { default as sortCompare } from './sortCompare'; +export { default as sortSplitter } from './sortSplitter'; export * from './categoricalSort'; export * from './categoricalSetSort'; export * from './numberSort'; -export * from './textSort'; -export * from './dateSort'; +export { default as textGroupCompare } from './textGroupCompare'; +export { default as dateGroupCompare } from './dateGroupCompare'; diff --git a/packages/hooks/src/sort/interfaces.ts b/packages/hooks/src/sort/interfaces.ts index 97ca773..732209e 100644 --- a/packages/hooks/src/sort/interfaces.ts +++ b/packages/hooks/src/sort/interfaces.ts @@ -6,5 +6,6 @@ */ import type { Row } from 'react-table'; +import type { UnknownObject } from '../interfaces'; -export type RowCompareFunction = (a: Row, b: Row, columnId: string) => number; +export type RowCompareFunction = (a: Row, b: Row, columnId: string) => number; diff --git a/packages/hooks/src/sort/internal.ts b/packages/hooks/src/sort/internal.ts index 12aed5d..eee78fb 100644 --- a/packages/hooks/src/sort/internal.ts +++ b/packages/hooks/src/sort/internal.ts @@ -21,8 +21,8 @@ export function compareAsc(va: T, vb: T): number { export function categoricalSortFunc(categories: readonly string[]): (a: string, b: string) => number { const lookup = new Map(categories.map((cat, i) => [cat, i])); return (va, vb) => { - const aIndex = va == null || !lookup.has(va) ? Number.POSITIVE_INFINITY : lookup.get(va)!; - const bIndex = vb == null || !lookup.has(vb) ? Number.POSITIVE_INFINITY : lookup.get(vb)!; + const aIndex = lookup.get(va) ?? Number.POSITIVE_INFINITY; + const bIndex = lookup.get(vb) ?? Number.POSITIVE_INFINITY; return compareAsc(aIndex, bIndex); }; } diff --git a/packages/hooks/src/sort/numberSort.ts b/packages/hooks/src/sort/numberSort.ts index 4a61926..8d2c21c 100644 --- a/packages/hooks/src/sort/numberSort.ts +++ b/packages/hooks/src/sort/numberSort.ts @@ -7,10 +7,11 @@ import { INumberStats, isNumberStats } from '@lineup-lite/components'; import type { Row } from 'react-table'; +import type { UnknownObject } from '../interfaces'; import { computeArrayNumberStats } from '../stats'; import { compareAsc } from './internal'; -export function numberGroupCompare(a: Row, b: Row, columnId: string): number { +export function numberGroupCompare(a: Row, b: Row, columnId: string): number { const av: INumberStats = a.values[columnId]; const bv: INumberStats = b.values[columnId]; if (isNumberStats(av) && isNumberStats(bv)) { @@ -19,7 +20,7 @@ export function numberGroupCompare(a: Row, b: Row, columnId: string): return compareAsc(av, bv); } -export function numbersCompare(a: Row, b: Row, columnId: string): number { +export function numbersCompare(a: Row, b: Row, columnId: string): number { const column = a.allCells.find((d) => d.column.id === columnId)?.column; const av = computeArrayNumberStats(a.values[columnId], column); const bv = computeArrayNumberStats(b.values[columnId], column); diff --git a/packages/hooks/src/sort/sortCompare.ts b/packages/hooks/src/sort/sortCompare.ts index d3f5281..aeaf47b 100644 --- a/packages/hooks/src/sort/sortCompare.ts +++ b/packages/hooks/src/sort/sortCompare.ts @@ -6,6 +6,7 @@ */ import type { Row } from 'react-table'; +import type { UnknownObject } from '../interfaces'; import { compareAsc } from './internal'; /** @@ -14,7 +15,7 @@ import { compareAsc } from './internal'; * @param b second row * @param columnId column id */ -export function sortCompare(a: Row, b: Row, columnId: string): number { +export default function sortCompare(a: Row, b: Row, columnId: string): number { const va = a.values[columnId]; const vb = b.values[columnId]; return compareAsc(va, vb); diff --git a/packages/hooks/src/sort/sortSplitter.ts b/packages/hooks/src/sort/sortSplitter.ts index 0244403..8cfd540 100644 --- a/packages/hooks/src/sort/sortSplitter.ts +++ b/packages/hooks/src/sort/sortSplitter.ts @@ -5,15 +5,17 @@ * Copyright (c) 2021 Samuel Gratzl */ -import type { RowCompareFunction } from './interfaces'; import type { UseGroupByRowProps, Row } from 'react-table'; +import type { UnknownObject } from '../interfaces'; +import type { RowCompareFunction } from './interfaces'; -function resolveGroupByColumn(a: Row) { - const g = ((a as unknown) as UseGroupByRowProps).isGrouped; +function resolveGroupByColumn(a: Row) { + const g = ((a as unknown) as UseGroupByRowProps).isGrouped; if (!g) { return null; } // grouped try to resolve by which column + // eslint-disable-next-line @typescript-eslint/no-explicit-any return (a as any).groupByID; } @@ -23,7 +25,7 @@ function resolveGroupByColumn(a: Row) { * @param b second row * @param columnId column id */ -export function sortSplitter(rows: RowCompareFunction, group: RowCompareFunction): RowCompareFunction { +export default function sortSplitter(rows: RowCompareFunction, group: RowCompareFunction): RowCompareFunction { return (a, b, columnId) => { const aGroupByColumn = resolveGroupByColumn(a); const bGroupByColumn = resolveGroupByColumn(b); diff --git a/packages/hooks/src/sort/textSort.ts b/packages/hooks/src/sort/textGroupCompare.ts similarity index 75% rename from packages/hooks/src/sort/textSort.ts rename to packages/hooks/src/sort/textGroupCompare.ts index fca508e..fa0ef3c 100644 --- a/packages/hooks/src/sort/textSort.ts +++ b/packages/hooks/src/sort/textGroupCompare.ts @@ -8,8 +8,9 @@ import type { Row } from 'react-table'; import { ITextStats, isTextStats } from '@lineup-lite/components'; import { compareAsc } from './internal'; +import type { UnknownObject } from '../interfaces'; -export function textGroupCompare(a: Row, b: Row, columnId: string): number { +export default function textGroupCompare(a: Row, b: Row, columnId: string): number { const av: ITextStats = a.values[columnId]; const bv: ITextStats = b.values[columnId]; if (isTextStats(av) && isTextStats(bv)) { diff --git a/packages/hooks/src/stats/categoricalStats.ts b/packages/hooks/src/stats/categoricalStats.ts index 46aa2ee..f264fe5 100644 --- a/packages/hooks/src/stats/categoricalStats.ts +++ b/packages/hooks/src/stats/categoricalStats.ts @@ -7,6 +7,8 @@ import { CategoricalStatsOptions, categoricalStatsGenerator, ICategoricalStats } from '@lineup-lite/components'; +export type { CategoricalStatsOptions, ICategoricalStats } from '@lineup-lite/components'; + function compute( gen: ReturnType, arr: readonly string[], @@ -18,7 +20,7 @@ function compute( const stats = gen(arr); const lookup = new Map(stats.hist.map((bin) => [bin.x0, bin])); // ensure the same hist structure - const hist = preFilter.hist.map((bin) => Object.assign({}, bin, lookup.get(bin.x0) ?? { count: 0 })); + const hist = preFilter.hist.map((bin) => ({ ...bin, ...(lookup.get(bin.x0) ?? { count: 0 }) })); return Object.assign(stats, { hist, }); diff --git a/packages/hooks/src/stats/dateStats.ts b/packages/hooks/src/stats/dateStats.ts index 58d0e6c..f4c7f73 100644 --- a/packages/hooks/src/stats/dateStats.ts +++ b/packages/hooks/src/stats/dateStats.ts @@ -7,6 +7,8 @@ import { dateStatsGenerator, DateStatsOptions, IDateStats } from '@lineup-lite/components'; +export type { DateStatsOptions, IDateStats } from '@lineup-lite/components'; + function compute( gen: ReturnType, options: DateStatsOptions, diff --git a/packages/hooks/src/stats/numberStats.ts b/packages/hooks/src/stats/numberStats.ts index ad4d5dd..d00a423 100644 --- a/packages/hooks/src/stats/numberStats.ts +++ b/packages/hooks/src/stats/numberStats.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-underscore-dangle */ /** * @lineup-lite/hooks * https://github.com/sgratzl/lineup-lite @@ -8,6 +9,9 @@ import { numberStatsGenerator, NumberStatsOptions, INumberStats } from '@lineup-lite/components'; import type { ColumnInstance } from 'react-table'; import type { UseStatsColumnOptions, UseStatsColumnProps } from '../hooks'; +import type { UnknownObject } from '../interfaces'; + +export type { NumberStatsOptions, INumberStats } from '@lineup-lite/components'; function compute( gen: ReturnType, @@ -39,7 +43,7 @@ export type NumberArrayWithStats = number[] & { _stats?: INumberStats }; export function computeArrayNumberStats( arr: NumberArrayWithStats, - column?: ColumnInstance & Partial & UseStatsColumnProps> + column?: ColumnInstance & Partial & UseStatsColumnProps> ): INumberStats | null { if (arr == null) { return null; @@ -48,6 +52,11 @@ export function computeArrayNumberStats( return arr._stats; } // cache stats to avoid recomputing - arr._stats = (column?.stats ?? numberStatsGenerator())(arr, column?.preFilterStatsValue ?? column?.statsValue); - return arr._stats!; + const stats = (column?.stats ?? numberStatsGenerator())( + arr, + column?.preFilterStatsValue ?? column?.statsValue + ) as INumberStats; + // eslint-disable-next-line no-param-reassign + arr._stats = stats; + return stats; } diff --git a/packages/hooks/src/stats/textStats.ts b/packages/hooks/src/stats/textStats.ts index a154d34..b9152e8 100644 --- a/packages/hooks/src/stats/textStats.ts +++ b/packages/hooks/src/stats/textStats.ts @@ -8,6 +8,8 @@ import type { ITextStats, TextStatsOptions } from '@lineup-lite/components'; import { textStatsGenerator } from '@lineup-lite/components'; +export type { TextStatsOptions, ITextStats } from '@lineup-lite/components'; + /** * generator for computing text stats */ diff --git a/packages/table/.eslintrc.js b/packages/table/.eslintrc.js new file mode 100644 index 0000000..40a8a88 --- /dev/null +++ b/packages/table/.eslintrc.js @@ -0,0 +1,33 @@ +/* eslint-env node */ + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const pkg = require('./package.json'); + +module.exports = { + plugins: ['@typescript-eslint', 'prettier'], + extends: [ + 'airbnb-typescript', + 'react-app', + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + 'prettier', + ], + parserOptions: { + project: './tsconfig.eslint.json', + }, + settings: { + react: { + version: pkg.devDependencies.react ? 'detect' : '99.99.99', + }, + }, + rules: { + 'no-continue': 'off', + 'react/require-default-props': 'off', // don't use in TypeScript + 'react/jsx-props-no-spreading': 'off', // shorthand passing of props + 'react/destructuring-assignment': 'off', // don't force destructuring + 'no-nested-ternary': 'off', + // '@typescript-eslint/explicit-module-boundary-types': 'off', + // '@typescript-eslint/no-explicit-any': 'off', + // '@typescript-eslint/no-non-null-assertion': 'off', + }, +}; diff --git a/packages/table/src/components/LineUpLite.tsx b/packages/table/src/components/LineUpLite.tsx index a25a051..7a98e30 100644 --- a/packages/table/src/components/LineUpLite.tsx +++ b/packages/table/src/components/LineUpLite.tsx @@ -6,14 +6,14 @@ */ import React, { forwardRef, ReactElement, Ref, RefAttributes } from 'react'; -import type { LineUpLiteProps } from './interfaces'; +import type { LineUpLiteProps, UnknownObject } from './interfaces'; import { LineUpLiteTHead } from './LineUpLiteTHead'; import { LineUpLiteTR } from './LineUpLiteTR'; import { useLineUpLite } from './useLineUpLite'; import { clsx } from './utils'; import { LineUpLiteTableContextProvider } from './contexts'; -export const LineUpLite = /*!#__PURE__*/ forwardRef(function LineUpLite( +export const LineUpLite = /*! #__PURE__ */ forwardRef(function LineUpLite( props: LineUpLiteProps, ref: Ref ) { @@ -49,6 +49,6 @@ export const LineUpLite = /*!#__PURE__*/ forwardRef(function LineUpLite( +export default LineUpLite as ( p: LineUpLiteProps & RefAttributes ) => ReactElement; diff --git a/packages/table/src/components/LineUpLitePaginated.tsx b/packages/table/src/components/LineUpLitePaginated.tsx index 5213996..dd4b714 100644 --- a/packages/table/src/components/LineUpLitePaginated.tsx +++ b/packages/table/src/components/LineUpLitePaginated.tsx @@ -6,21 +6,25 @@ */ import React from 'react'; -import type { LineUpLiteProps } from './interfaces'; +import { usePagination, UsePaginationOptions, UsePaginationInstanceProps, UsePaginationState } from 'react-table'; +import type { LineUpLiteProps, UnknownObject } from './interfaces'; import { LineUpLiteTHead } from './LineUpLiteTHead'; import { LineUpLiteTableInstance, useLineUpLite } from './useLineUpLite'; import { LineUpLiteTR } from './LineUpLiteTR'; import { clsx } from './utils'; -import { usePagination, UsePaginationOptions, UsePaginationInstanceProps } from 'react-table'; import { LineUpLitePagination } from './LineUpLitePagination'; import type { ActionIcons, PaginationIcons } from '../icons'; import { LineUpLiteTableContextProvider } from './contexts'; -export interface LineUpLitePaginatedProps extends LineUpLiteProps, UsePaginationOptions { +export interface LineUpLitePaginatedProps + extends LineUpLiteProps, + UsePaginationOptions { icons: PaginationIcons & ActionIcons; } -export function LineUpLitePaginated(props: LineUpLitePaginatedProps) { +export function LineUpLitePaginated( + props: LineUpLitePaginatedProps +): JSX.Element { const instance = useLineUpLite(props, usePagination); const { getTableProps, @@ -35,7 +39,7 @@ export function LineUpLitePaginated(props: LineUpLitePagi state, } = instance as LineUpLiteTableInstance & UsePaginationInstanceProps; - const { pageIndex, pageSize } = state as any; + const { pageIndex, pageSize } = state as UsePaginationState; const p = { c: props.components?.table ?? 'div', b: props.components?.tbody ?? 'div' }; diff --git a/packages/table/src/components/LineUpLitePagination.tsx b/packages/table/src/components/LineUpLitePagination.tsx index 778a1af..a186fd6 100644 --- a/packages/table/src/components/LineUpLitePagination.tsx +++ b/packages/table/src/components/LineUpLitePagination.tsx @@ -5,8 +5,8 @@ * Copyright (c) 2021 Samuel Gratzl */ -import type { PaginationIcons } from '../icons'; import React, { useCallback, MouseEvent, ChangeEvent } from 'react'; +import type { PaginationIcons } from '../icons'; export interface LineUpLitePaginationProps { pageIndex: number; @@ -24,10 +24,10 @@ export function LineUpLitePagination({ pageSize, setPageSize, icons, -}: LineUpLitePaginationProps) { +}: LineUpLitePaginationProps): JSX.Element { const changePage = useCallback( (e: MouseEvent) => { - const page = Number.parseInt(e.currentTarget.dataset.page!, 10); + const page = Number.parseInt(e.currentTarget.dataset.page ?? '0', 10); gotoPage(page); }, [gotoPage] @@ -48,16 +48,16 @@ export function LineUpLitePagination({ const lastPage = pageCount - 1; return (

- - - - @@ -71,9 +71,9 @@ export function LineUpLitePagination({ diff --git a/packages/table/src/components/LineUpLiteTD.tsx b/packages/table/src/components/LineUpLiteTD.tsx index c01f4ff..3e9c2bf 100644 --- a/packages/table/src/components/LineUpLiteTD.tsx +++ b/packages/table/src/components/LineUpLiteTD.tsx @@ -7,16 +7,16 @@ import React, { forwardRef, ReactElement, ReactNode, Ref, RefAttributes } from 'react'; import type { Cell, ColumnInstance, UseGroupByCellProps, UseResizeColumnsColumnProps } from 'react-table'; -import type { LineUpLiteColumn } from '@lineup-lite/hooks'; +import type { LineUpLiteColumn, UnknownObject } from '@lineup-lite/hooks'; import { clsx } from './utils'; import { useLineUpLiteTableContext } from './contexts'; -export interface LineUpLiteTDProps { - cell: Cell; +export interface LineUpLiteTDProps { + cell: Cell; children?: ReactNode; } -const LineUpLiteTDImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTD( +const LineUpLiteTDImpl = /*! #__PURE__ */ forwardRef(function LineUpLiteTD( { cell, children }: LineUpLiteTDProps, ref: Ref ) { @@ -42,6 +42,6 @@ const LineUpLiteTDImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTD( +export const LineUpLiteTD = LineUpLiteTDImpl as ( p: LineUpLiteTDProps & RefAttributes ) => ReactElement; diff --git a/packages/table/src/components/LineUpLiteTH.tsx b/packages/table/src/components/LineUpLiteTH.tsx index e43d212..271610b 100644 --- a/packages/table/src/components/LineUpLiteTH.tsx +++ b/packages/table/src/components/LineUpLiteTH.tsx @@ -7,18 +7,18 @@ import React, { forwardRef, ReactElement, ReactNode, Ref, RefAttributes } from 'react'; import type { HeaderGroup, UseGroupByColumnProps, UseResizeColumnsColumnProps } from 'react-table'; +import type { LineUpLiteColumn, UnknownObject } from '@lineup-lite/hooks'; import { clsx, mergeStyles } from './utils'; import { LineUpLiteToolbar } from './toolbar/LineUpLiteToolbar'; -import type { LineUpLiteColumn } from '@lineup-lite/hooks'; import type { ActionLineUpProps } from './interfaces'; import { useLineUpLiteTableContext } from './contexts'; -export interface LineUpLiteTHProps extends ActionLineUpProps { +export interface LineUpLiteTHProps extends ActionLineUpProps { col: HeaderGroup; children?: ReactNode; } -const LineUpLiteTHImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTH( +const LineUpLiteTHImpl = /*! #__PURE__ */ forwardRef(function LineUpLiteTH( { col, actions, icons, children }: LineUpLiteTHProps, ref: Ref ) { @@ -58,6 +58,6 @@ const LineUpLiteTHImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTH( +export const LineUpLiteTH = LineUpLiteTHImpl as ( p: LineUpLiteTHProps & RefAttributes ) => ReactElement; diff --git a/packages/table/src/components/LineUpLiteTHead.tsx b/packages/table/src/components/LineUpLiteTHead.tsx index 33dee48..f7af541 100644 --- a/packages/table/src/components/LineUpLiteTHead.tsx +++ b/packages/table/src/components/LineUpLiteTHead.tsx @@ -8,19 +8,18 @@ import React, { forwardRef, ReactElement, ReactNode, Ref, RefAttributes } from 'react'; import type { HeaderGroup } from 'react-table'; import { useLineUpLiteTableContext } from './contexts'; -import type { ActionLineUpProps } from './interfaces'; +import type { ActionLineUpProps, UnknownObject } from './interfaces'; import { LineUpLiteTH } from './LineUpLiteTH'; import { clsx } from './utils'; -export interface LineUpLiteTHeadProps extends ActionLineUpProps { +export interface LineUpLiteTHeadProps extends ActionLineUpProps { headerGroups: HeaderGroup[]; children?: ReactNode; } -const LineUpLiteTHeadImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTHead( - { headerGroups, icons, actions, children }: LineUpLiteTHeadProps, - ref: Ref -) { +const LineUpLiteTHeadImpl = /*! #__PURE__ */ forwardRef(function LineUpLiteTHead< + D extends UnknownObject = UnknownObject +>({ headerGroups, icons, actions, children }: LineUpLiteTHeadProps, ref: Ref) { const c = useLineUpLiteTableContext(); const p = { c: c?.components.thead ?? 'div', g: c?.components.thGroup ?? 'div' }; return ( @@ -48,6 +47,6 @@ const LineUpLiteTHeadImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTHead( +export const LineUpLiteTHead = LineUpLiteTHeadImpl as ( p: LineUpLiteTHeadProps & RefAttributes ) => ReactElement; diff --git a/packages/table/src/components/LineUpLiteTR.tsx b/packages/table/src/components/LineUpLiteTR.tsx index 278c0a4..a9a3f09 100644 --- a/packages/table/src/components/LineUpLiteTR.tsx +++ b/packages/table/src/components/LineUpLiteTR.tsx @@ -8,17 +8,18 @@ import React, { memo, Ref, forwardRef, RefAttributes, ReactElement, ReactNode } from 'react'; import type { Row, UseExpandedRowProps, UseGroupByRowProps, UseRowSelectRowProps } from 'react-table'; import { useLineUpLiteTableContext } from './contexts'; +import type { UnknownObject } from './interfaces'; import { LineUpLiteTD } from './LineUpLiteTD'; import { clsx, mergeStyles } from './utils'; -export interface LineUpLiteTRProps { +export interface LineUpLiteTRProps { row: Row; virtualStart?: number; virtualSize?: number; children?: ReactNode; } -const LineUpLiteTRImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTR( +const LineUpLiteTRImpl = /*! #__PURE__ */ forwardRef(function LineUpLiteTR( props: LineUpLiteTRProps, ref: Ref ) { @@ -61,8 +62,8 @@ const LineUpLiteTRImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTR( +export const LineUpLiteTR = LineUpLiteTRImpl as ( p: LineUpLiteTRProps & RefAttributes ) => ReactElement; -export const LineUpLiteTRMemo = /*!#__PURE__*/ memo(LineUpLiteTRImpl) as typeof LineUpLiteTR; +export const LineUpLiteTRMemo = /*! #__PURE__ */ memo(LineUpLiteTRImpl) as typeof LineUpLiteTR; diff --git a/packages/table/src/components/LineUpLiteTVirtualBody.tsx b/packages/table/src/components/LineUpLiteTVirtualBody.tsx index 70f4d0c..11b49de 100644 --- a/packages/table/src/components/LineUpLiteTVirtualBody.tsx +++ b/packages/table/src/components/LineUpLiteTVirtualBody.tsx @@ -7,13 +7,14 @@ import React, { useRef, useCallback, useLayoutEffect, useMemo, RefObject } from 'react'; import type { Row, TableInstance, UseExpandedRowProps, UseGroupByRowProps } from 'react-table'; -import { clsx } from './utils'; import { useVirtual } from 'react-virtual'; +import { clsx } from './utils'; import { LineUpLiteTRMemo } from './LineUpLiteTR'; import type { SizeEstimator } from './LineUpLiteVirtual'; import { useLineUpLiteTableContext } from './contexts'; +import type { UnknownObject } from './interfaces'; -export function LineUpLiteTVirtualBody({ +export default function LineUpLiteTVirtualBody({ rows, prepareRow, getTableBodyProps, @@ -29,7 +30,7 @@ export function LineUpLiteTVirtualBody({ estimatedSize: SizeEstimator; rowSpacing: number; overscan?: number; -}) { +}): JSX.Element { const c = useLineUpLiteTableContext(); const ref = useRef(null); const givenEstimate = estimatedSize; @@ -60,10 +61,10 @@ export function LineUpLiteTVirtualBody({ const thead = theadRef.current; if (!elem || !thead) { - return; + return undefined; } const scrollListener = (e: Event) => { - const scrollLeft = (e.currentTarget as HTMLDivElement).scrollLeft; + const { scrollLeft } = e.currentTarget as HTMLDivElement; if (Math.abs(thead.scrollLeft - scrollLeft) > 0) { thead.scrollLeft = scrollLeft; } diff --git a/packages/table/src/components/LineUpLiteVirtual.tsx b/packages/table/src/components/LineUpLiteVirtual.tsx index 195cf50..b4a2180 100644 --- a/packages/table/src/components/LineUpLiteVirtual.tsx +++ b/packages/table/src/components/LineUpLiteVirtual.tsx @@ -5,28 +5,27 @@ * Copyright (c) 2021 Samuel Gratzl */ -import type { ActionIcons } from '../icons'; import React, { forwardRef, ReactElement, Ref, RefAttributes, useRef } from 'react'; -import type { LineUpLiteProps } from './interfaces'; +import type { ActionIcons } from '../icons'; +import type { LineUpLiteProps, UnknownObject } from './interfaces'; import { LineUpLiteTHead } from './LineUpLiteTHead'; -import { LineUpLiteTVirtualBody } from './LineUpLiteTVirtualBody'; +import LineUpLiteTVirtualBody from './LineUpLiteTVirtualBody'; import { useLineUpLite } from './useLineUpLite'; import { clsx } from './utils'; import { LineUpLiteTableContextProvider } from './contexts'; export type SizeEstimator = number | [number, number] | ((index: number) => number); -export interface LineUpLiteVirtualProps extends LineUpLiteProps { +export interface LineUpLiteVirtualProps extends LineUpLiteProps { estimatedSize: SizeEstimator; rowSpacing?: number; overscan?: number; icons?: Partial; } -const LineUpLiteVirtualImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteVirtual( - props: LineUpLiteVirtualProps, - ref: Ref -) { +const LineUpLiteVirtualImpl = /*! #__PURE__ */ forwardRef(function LineUpLiteVirtual< + D extends UnknownObject = UnknownObject +>(props: LineUpLiteVirtualProps, ref: Ref) { const instance = useLineUpLite(props); const { getTableProps, getTableBodyProps, headerGroups, prepareRow, rows } = instance; @@ -58,6 +57,6 @@ const LineUpLiteVirtualImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteVirtu ); }); -export const LineUpLiteVirtual = LineUpLiteVirtualImpl as ( +export const LineUpLiteVirtual = LineUpLiteVirtualImpl as ( p: LineUpLiteVirtualProps & RefAttributes ) => ReactElement; diff --git a/packages/table/src/components/contexts.tsx b/packages/table/src/components/contexts.tsx index 835fd90..ae0c0b5 100644 --- a/packages/table/src/components/contexts.tsx +++ b/packages/table/src/components/contexts.tsx @@ -5,10 +5,10 @@ * Copyright (c) 2021 Samuel Gratzl */ -import { createContext, PropsWithChildren, useContext, useEffect, useMemo, useState } from 'react'; -import React from 'react'; -import type { TableDispatch } from 'react-table'; -import type { CustomizeLineUpProps } from './interfaces'; +import React, { createContext, PropsWithChildren, useContext, useEffect, useMemo, useState } from 'react'; + +import type { TableDispatch, UseGroupByState, UseSortByState } from 'react-table'; +import type { CustomizeLineUpProps, UnknownObject } from './interfaces'; import { EMPTY_OBJ } from './utils'; import type { LineUpLiteState, LineUpLiteTableInstance } from './useLineUpLite'; @@ -21,12 +21,12 @@ export interface LineUpLiteTableContextProps extends Required( +export function LineUpLiteTableContextProvider( props: PropsWithChildren<{ instance: LineUpLiteTableInstance; props: CustomizeLineUpProps; }> -) { +): JSX.Element { const { styles = EMPTY_OBJ, classNames = EMPTY_OBJ, @@ -36,8 +36,8 @@ export function LineUpLiteTableContextProvider( } = props.props; const { dispatch, state } = props.instance; - const sortByColumnCount = (state as any).sortBy?.length ?? 0; - const groupByColumnCount = (state as any).groupBy?.length ?? 0; + const sortByColumnCount = (state as UseSortByState).sortBy?.length ?? 0; + const groupByColumnCount = (state as UseGroupByState).groupBy?.length ?? 0; const value = useMemo( () => ({ @@ -59,19 +59,25 @@ export function useLineUpLiteTableContext(): LineUpLiteTableContextProps | undef return useContext(LineUpLiteTableContext); } -export interface LineUpLiteStateContextProps { +export interface LineUpLiteStateContextProps { state?: LineUpLiteState; instance?: LineUpLiteTableInstance; } -export interface LineUpLiteStateContextSetter { +export interface LineUpLiteStateContextSetter { setState(state: LineUpLiteState): void; setInstance(instance: LineUpLiteTableInstance): void; } -export const LineUpLiteStateContext = createContext(undefined as LineUpLiteStateContextProps | undefined); -export const LineUpLiteStateSetterContext = createContext(undefined as LineUpLiteStateContextSetter | undefined); +export const LineUpLiteStateContext = createContext( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + undefined as LineUpLiteStateContextProps | undefined +); +export const LineUpLiteStateSetterContext = createContext( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + undefined as LineUpLiteStateContextSetter | undefined +); -export function useStateListener( +export function useStateListener( props: { onStateChange?: (state: LineUpLiteState) => void; }, @@ -100,7 +106,9 @@ export function useStateListener( }, [setInstance, instance]); } -export function LineUpLiteStateContextProvider(props: PropsWithChildren<{}>) { +export function LineUpLiteStateContextProvider( + props: PropsWithChildren> +): JSX.Element { const [state, setState] = useState(undefined as undefined | LineUpLiteState); const [instance, setInstance] = useState(undefined as undefined | LineUpLiteTableInstance); // have a context which are just the values which will change @@ -118,6 +126,8 @@ export function LineUpLiteStateContextProvider(props: Pro ); } -export function useLineUpLiteStateContext(): LineUpLiteStateContextProps | undefined { +export function useLineUpLiteStateContext(): + | LineUpLiteStateContextProps + | undefined { return useContext(LineUpLiteStateContext); } diff --git a/packages/table/src/components/index.ts b/packages/table/src/components/index.ts index e401676..85956d0 100644 --- a/packages/table/src/components/index.ts +++ b/packages/table/src/components/index.ts @@ -15,6 +15,7 @@ export * from './LineUpLiteTHead'; export * from './LineUpLiteTR'; export * from './LineUpLitePaginated'; export * from './LineUpLitePagination'; +export { default as LineUpLiteTVirtualBody } from './LineUpLiteTVirtualBody'; export * from './panel'; export * from './toolbar'; export * from './contexts'; diff --git a/packages/table/src/components/interfaces.ts b/packages/table/src/components/interfaces.ts index 9f12071..84c6fdd 100644 --- a/packages/table/src/components/interfaces.ts +++ b/packages/table/src/components/interfaces.ts @@ -6,13 +6,16 @@ */ import type { ColumnInstance } from 'react-table'; +import type { ComponentType, CSSProperties, DetailedHTMLProps, HTMLAttributes, ReactNode } from 'react'; +import type { CommonProps } from '@lineup-lite/components'; +import type { UnknownObject } from '@lineup-lite/hooks'; import type { ActionIcons } from '../icons'; import type { LineUpLiteI18N } from '../i18n'; import type { UseLineUpLiteOptions } from './useLineUpLite'; -import type { ComponentType, CSSProperties, DetailedHTMLProps, HTMLAttributes, ReactNode } from 'react'; -import type { CommonProps } from '@lineup-lite/components'; export type { ColumnInstance, HeaderGroup, Row, Column } from 'react-table'; +export type { UnknownObject } from '@lineup-lite/hooks'; + export type MultiCustomizeKeys = 'tbody' | 'tr' | 'thead' | 'th' | 'thGroup' | 'td' | 'header'; export type LineUpLiteComponentLike = ComponentType, HTMLElement>>; @@ -34,7 +37,7 @@ export interface CustomizeLineUpProps { dark?: boolean; } -export interface ActionLineUpProps { +export interface ActionLineUpProps { /** * customize the icons to use */ @@ -46,7 +49,7 @@ export interface ActionLineUpProps { actions?: (column: ColumnInstance, icons: ActionIcons) => ReactNode; } -export interface LineUpLiteProps +export interface LineUpLiteProps extends UseLineUpLiteOptions, ActionLineUpProps, CustomizeLineUpProps, diff --git a/packages/table/src/components/panel/LineUpLiteDataSummary.tsx b/packages/table/src/components/panel/LineUpLiteDataSummary.tsx index 81b2ac8..24b0628 100644 --- a/packages/table/src/components/panel/LineUpLiteDataSummary.tsx +++ b/packages/table/src/components/panel/LineUpLiteDataSummary.tsx @@ -6,8 +6,9 @@ */ import { clsx, CommonProps, mergeStyles, useI18N, toLocaleString } from '@lineup-lite/components'; -import React, { forwardRef, Ref, useCallback } from 'react'; +import React, { forwardRef, Ref, RefAttributes, useCallback } from 'react'; import { ActionIcons, LINEUP_LITE_TEXT_ICONS } from '../../icons'; +import type { UnknownObject } from '../interfaces'; import type { LineUpLiteState, LineUpLiteTableInstance } from '../useLineUpLite'; import { useLineUpLitePanelContext } from './contexts'; @@ -19,17 +20,16 @@ export const DATA_SUMMARY_I18N_EN = { dataSummaryClearSelection: 'Click to clear selection', }; -export interface LineUpLiteDataSummaryProps extends CommonProps { - instance: LineUpLiteTableInstance; - state?: LineUpLiteState; +export interface LineUpLiteDataSummaryProps extends CommonProps { + instance: LineUpLiteTableInstance; + state?: LineUpLiteState; format?: (v: number) => string; icons?: Partial>; } -export const LineUpLiteDataSummary = /*!#__PURE__*/ forwardRef(function LineUpLiteDataSummary( - props: LineUpLiteDataSummaryProps, - ref: Ref -) { +const LineUpLiteDataSummaryImpl = /*! #__PURE__ */ forwardRef(function LineUpLiteDataSummary< + D extends UnknownObject = UnknownObject +>(props: LineUpLiteDataSummaryProps, ref: Ref) { const c = useLineUpLitePanelContext(); const p = { c: c?.components.dataSummary ?? 'div' }; const i18n = useI18N(DATA_SUMMARY_I18N_EN, c?.i18n); @@ -90,3 +90,9 @@ export const LineUpLiteDataSummary = /*!#__PURE__*/ forwardRef(function LineUpLi ); }); + +export const LineUpLiteDataSummary = LineUpLiteDataSummaryImpl as ( + p: LineUpLiteDataSummaryProps & RefAttributes +) => JSX.Element; + +export default LineUpLiteDataSummary; diff --git a/packages/table/src/components/panel/LineUpLitePanel.tsx b/packages/table/src/components/panel/LineUpLitePanel.tsx index 29990e9..e5e2c3a 100644 --- a/packages/table/src/components/panel/LineUpLitePanel.tsx +++ b/packages/table/src/components/panel/LineUpLitePanel.tsx @@ -5,18 +5,18 @@ * Copyright (c) 2021 Samuel Gratzl */ -import React, { forwardRef, ReactElement, Ref, RefAttributes } from 'react'; +import React, { forwardRef, Ref, RefAttributes } from 'react'; import { useLineUpLiteStateContext } from '../contexts'; +import type { UnknownObject } from '../interfaces'; import { clsx } from '../utils'; import { LineUpLitePanelContextProvider } from './contexts'; import type { LineUpLitePanelProps } from './interfaces'; import { LineUpLiteDataSummary } from './LineUpLiteDataSummary'; import { LineUpLiteTableSummary } from './LineUpLiteTableSummary'; -const LineUpLitePanelImpl = /*!#__PURE__*/ forwardRef(function LineUpLitePanel( - props: LineUpLitePanelProps, - ref: Ref -) { +const LineUpLitePanelImpl = /*! #__PURE__ */ forwardRef(function LineUpLitePanel< + D extends UnknownObject = UnknownObject +>(props: LineUpLitePanelProps, ref: Ref) { const { instance, state } = useLineUpLiteStateContext() ?? {}; const p = { c: props.components?.panel ?? 'div' }; @@ -29,7 +29,7 @@ const LineUpLitePanelImpl = /*!#__PURE__*/ forwardRef(function LineUpLitePanel {instance && ( - + instance={instance} state={state} icons={props.icons} /> instance={instance} state={state} icons={props.icons} actions={props.actions} /> {props.children} @@ -38,6 +38,8 @@ const LineUpLitePanelImpl = /*!#__PURE__*/ forwardRef(function LineUpLitePanel( +export const LineUpLitePanel = LineUpLitePanelImpl as ( p: LineUpLitePanelProps & RefAttributes -) => ReactElement; +) => JSX.Element; + +export default LineUpLitePanel; diff --git a/packages/table/src/components/panel/LineUpLiteTHSummary.tsx b/packages/table/src/components/panel/LineUpLiteTHSummary.tsx index 65b3eeb..df96df3 100644 --- a/packages/table/src/components/panel/LineUpLiteTHSummary.tsx +++ b/packages/table/src/components/panel/LineUpLiteTHSummary.tsx @@ -5,23 +5,22 @@ * Copyright (c) 2021 Samuel Gratzl */ -import React, { forwardRef, ReactElement, ReactNode, Ref, RefAttributes } from 'react'; +import React, { forwardRef, ReactNode, Ref, RefAttributes } from 'react'; import type { ColumnInstance, HeaderGroup, UseGroupByColumnProps, UseResizeColumnsColumnProps } from 'react-table'; +import type { LineUpLiteColumn, UnknownObject } from '@lineup-lite/hooks'; import { clsx } from '../utils'; import { LineUpLiteToolbar } from '../toolbar/LineUpLiteToolbar'; import type { ActionLineUpProps } from '../interfaces'; import { useLineUpLitePanelContext } from './contexts'; -import type { LineUpLiteColumn } from '@lineup-lite/hooks'; -export interface LineUpLiteTHSummaryProps extends ActionLineUpProps { +export interface LineUpLiteTHSummaryProps extends ActionLineUpProps { col: ColumnInstance; children?: ReactNode; } -const LineUpLiteTHSummaryImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTHSummary( - { col, actions, icons, children }: LineUpLiteTHSummaryProps, - ref: Ref -) { +const LineUpLiteTHSummaryImpl = /*! #__PURE__ */ forwardRef(function LineUpLiteTHSummary< + D extends UnknownObject = UnknownObject +>({ col, actions, icons, children }: LineUpLiteTHSummaryProps, ref: Ref) { const column = (col as unknown) as HeaderGroup & UseGroupByColumnProps & UseResizeColumnsColumnProps & @@ -42,7 +41,7 @@ const LineUpLiteTHSummaryImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTHS > {column.render('Header')}
- + {...col} icons={icons} actions={actions} />
{column.Summary && column.render('Summary')} {children} @@ -50,6 +49,8 @@ const LineUpLiteTHSummaryImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTHS ); }); -export const LineUpLiteTHSummary = LineUpLiteTHSummaryImpl as ( +export const LineUpLiteTHSummary = LineUpLiteTHSummaryImpl as ( p: LineUpLiteTHSummaryProps & RefAttributes -) => ReactElement; +) => JSX.Element; + +export default LineUpLiteTHSummary; diff --git a/packages/table/src/components/panel/LineUpLiteTableSummary.tsx b/packages/table/src/components/panel/LineUpLiteTableSummary.tsx index b65ad49..a8a98f4 100644 --- a/packages/table/src/components/panel/LineUpLiteTableSummary.tsx +++ b/packages/table/src/components/panel/LineUpLiteTableSummary.tsx @@ -6,22 +6,23 @@ */ import { clsx, CommonProps, mergeStyles } from '@lineup-lite/components'; -import React, { forwardRef, ReactElement, Ref, RefAttributes } from 'react'; +import React, { forwardRef, Ref, RefAttributes } from 'react'; +import type { LineUpLiteColumn, UnknownObject } from '@lineup-lite/hooks'; import type { ActionLineUpProps } from '../interfaces'; import type { LineUpLiteState, LineUpLiteTableInstance } from '../useLineUpLite'; import { useLineUpLitePanelContext } from './contexts'; -import type { LineUpLiteColumn } from '@lineup-lite/hooks'; import { LineUpLiteTHSummary } from './LineUpLiteTHSummary'; -export interface LineUpLiteTableSummaryProps extends CommonProps, ActionLineUpProps { +export interface LineUpLiteTableSummaryProps + extends CommonProps, + ActionLineUpProps { instance: LineUpLiteTableInstance; state?: LineUpLiteState; } -const LineUpLiteTableSummaryImpl = /*!#__PURE__*/ forwardRef(function LineUpLiteTableSummary( - props: LineUpLiteTableSummaryProps, - ref: Ref -) { +const LineUpLiteTableSummaryImpl = /*! #__PURE__ */ forwardRef(function LineUpLiteTableSummary< + D extends UnknownObject = UnknownObject +>(props: LineUpLiteTableSummaryProps, ref: Ref) { const c = useLineUpLitePanelContext(); const p = { c: c?.components.tableSummary ?? 'div' }; @@ -42,6 +43,8 @@ const LineUpLiteTableSummaryImpl = /*!#__PURE__*/ forwardRef(function LineUpLite ); }); -export const LineUpLiteTableSummary = LineUpLiteTableSummaryImpl as ( +export const LineUpLiteTableSummary = LineUpLiteTableSummaryImpl as ( p: LineUpLiteTableSummaryProps & RefAttributes -) => ReactElement; +) => JSX.Element; + +export default LineUpLiteTableSummary; diff --git a/packages/table/src/components/panel/contexts.tsx b/packages/table/src/components/panel/contexts.tsx index d85a3b1..6f0ee36 100644 --- a/packages/table/src/components/panel/contexts.tsx +++ b/packages/table/src/components/panel/contexts.tsx @@ -5,11 +5,12 @@ * Copyright (c) 2021 Samuel Gratzl */ -import { createContext, PropsWithChildren, useContext, useMemo } from 'react'; -import React from 'react'; +import React, { createContext, PropsWithChildren, useContext, useMemo } from 'react'; + import type { TableDispatch, TableInstance } from 'react-table'; import type { CustomizeLineUpPanelProps } from './interfaces'; import { EMPTY_OBJ } from '../utils'; +import type { UnknownObject } from '../interfaces'; export interface LineUpLitePanelContextProps extends Required { dispatch: TableDispatch; @@ -17,12 +18,12 @@ export interface LineUpLitePanelContextProps extends Required( +export function LineUpLitePanelContextProvider( props: PropsWithChildren<{ instance: TableInstance; props: CustomizeLineUpPanelProps; }> -) { +): JSX.Element { const { styles = EMPTY_OBJ, classNames = EMPTY_OBJ, diff --git a/packages/table/src/components/panel/interfaces.ts b/packages/table/src/components/panel/interfaces.ts index 42ea16a..8db79de 100644 --- a/packages/table/src/components/panel/interfaces.ts +++ b/packages/table/src/components/panel/interfaces.ts @@ -7,7 +7,7 @@ import type { CSSProperties, ReactNode } from 'react'; import type { CommonProps } from '@lineup-lite/components'; -import type { ActionLineUpProps, LineUpLiteComponentLike } from '../interfaces'; +import type { ActionLineUpProps, LineUpLiteComponentLike, UnknownObject } from '../interfaces'; import type { DATA_SUMMARY_I18N_EN } from './LineUpLiteDataSummary'; export type MultiCustomizePanelKeys = 'dataSummary' | 'tableSummary' | 'th' | 'header'; @@ -29,7 +29,7 @@ export interface CustomizeLineUpPanelProps { dark?: boolean; } -export interface LineUpLitePanelProps +export interface LineUpLitePanelProps extends CustomizeLineUpPanelProps, ActionLineUpProps, CommonProps { diff --git a/packages/table/src/components/toolbar/LineUpLiteFilterAction.tsx b/packages/table/src/components/toolbar/LineUpLiteFilterAction.tsx index 46b0b1e..6c6269a 100644 --- a/packages/table/src/components/toolbar/LineUpLiteFilterAction.tsx +++ b/packages/table/src/components/toolbar/LineUpLiteFilterAction.tsx @@ -7,20 +7,23 @@ import React, { ComponentType, useCallback, MouseEvent, ReactNode } from 'react'; import type { UseFiltersColumnProps } from 'react-table'; +import type { CommonProps } from '@lineup-lite/components'; import { LINEUP_LITE_I18N_EN } from '../../i18n'; import { useLineUpLiteTableContext } from '../contexts'; import { clsx } from '../utils'; -import type { CommonProps } from '@lineup-lite/components'; +import type { UnknownObject } from '../interfaces'; + export type { UseFiltersColumnProps } from 'react-table'; -export function LineUpLiteFilterAction( +export function LineUpLiteFilterAction( props: UseFiltersColumnProps & CommonProps & { children?: ReactNode; + // eslint-disable-next-line react/no-unused-prop-types iconFilter: ComponentType; toggleFilterColumn: (e: MouseEvent) => void; } -) { +): JSX.Element { const { canFilter, filterValue, toggleFilterColumn } = props; const c = useLineUpLiteTableContext(); const i18n = c?.i18n ?? LINEUP_LITE_I18N_EN; @@ -36,5 +39,7 @@ export function LineUpLiteFilterAction( {props.children} - ) : null; + ) : ( + <> + ); } diff --git a/packages/table/src/components/toolbar/LineUpLiteGroupByAction.tsx b/packages/table/src/components/toolbar/LineUpLiteGroupByAction.tsx index cac4f7f..a0264d6 100644 --- a/packages/table/src/components/toolbar/LineUpLiteGroupByAction.tsx +++ b/packages/table/src/components/toolbar/LineUpLiteGroupByAction.tsx @@ -7,21 +7,22 @@ import React, { ComponentType, useCallback, MouseEvent, ReactNode } from 'react'; import type { ColumnInstance, UseGroupByColumnProps } from 'react-table'; +import type { CommonProps } from '@lineup-lite/components'; import { LINEUP_LITE_I18N_EN } from '../../i18n'; import { useLineUpLiteTableContext } from '../contexts'; import { clsx } from '../utils'; -import type { CommonProps } from '@lineup-lite/components'; +import type { UnknownObject } from '../interfaces'; export type { UseGroupByColumnProps } from 'react-table'; -export function LineUpLiteGroupByAction( - props: UseGroupByColumnProps & - ColumnInstance & +export function LineUpLiteGroupByAction( + props: UseGroupByColumnProps & + ColumnInstance & CommonProps & { children?: ReactNode; icon: ComponentType; } -) { +): JSX.Element { const c = useLineUpLiteTableContext(); const dispatch = c?.dispatch; const { toggleGroupBy, isGrouped, id } = props; @@ -58,5 +59,7 @@ export function LineUpLiteGroupByAction( {props.children} - ) : null; + ) : ( + <> + ); } diff --git a/packages/table/src/components/toolbar/LineUpLiteHideAction.tsx b/packages/table/src/components/toolbar/LineUpLiteHideAction.tsx index 4923c86..79d7c33 100644 --- a/packages/table/src/components/toolbar/LineUpLiteHideAction.tsx +++ b/packages/table/src/components/toolbar/LineUpLiteHideAction.tsx @@ -7,20 +7,21 @@ import React, { ComponentType, ReactNode, useCallback } from 'react'; import type { ColumnInstance } from 'react-table'; +import type { CommonProps } from '@lineup-lite/components'; import { LINEUP_LITE_I18N_EN } from '../../i18n'; import { useLineUpLiteTableContext } from '../contexts'; import { clsx } from '../utils'; -import type { CommonProps } from '@lineup-lite/components'; +import type { UnknownObject } from '../interfaces'; -export function LineUpLiteHideAction( - props: ColumnInstance & +export default function LineUpLiteHideAction( + props: ColumnInstance & CommonProps & { children?: ReactNode; canHide?: boolean; canResize?: boolean; icon: ComponentType; } -) { +): JSX.Element { const c = useLineUpLiteTableContext(); const i18n = c?.i18n ?? LINEUP_LITE_I18N_EN; const { toggleHidden } = props; @@ -38,5 +39,7 @@ export function LineUpLiteHideAction( {props.children} - ) : null; + ) : ( + <> + ); } diff --git a/packages/table/src/components/toolbar/LineUpLiteSortByAction.tsx b/packages/table/src/components/toolbar/LineUpLiteSortByAction.tsx index 13420fe..4b3016d 100644 --- a/packages/table/src/components/toolbar/LineUpLiteSortByAction.tsx +++ b/packages/table/src/components/toolbar/LineUpLiteSortByAction.tsx @@ -7,21 +7,22 @@ import React, { ComponentType, useCallback, MouseEvent, ReactNode } from 'react'; import type { UseSortByColumnProps } from 'react-table'; +import type { CommonProps } from '@lineup-lite/components'; import { LINEUP_LITE_I18N_EN } from '../../i18n'; import { useLineUpLiteTableContext } from '../contexts'; import { clsx } from '../utils'; -import type { CommonProps } from '@lineup-lite/components'; +import type { UnknownObject } from '../interfaces'; export type { UseSortByColumnProps } from 'react-table'; -export function LineUpLiteSortByAction( - props: UseSortByColumnProps & +export function LineUpLiteSortByAction( + props: UseSortByColumnProps & CommonProps & { children?: ReactNode; iconAsc: ComponentType; iconDesc: ComponentType; } -) { +): JSX.Element { const { toggleSortBy, isSorted } = props; const sort = useCallback( (e: MouseEvent) => toggleSortBy(undefined, e.shiftKey || e.ctrlKey || isSorted), @@ -30,7 +31,7 @@ export function LineUpLiteSortByAction( const c = useLineUpLiteTableContext(); const i18n = c?.i18n ?? LINEUP_LITE_I18N_EN; const sortBys = c?.sortByColumnCount ?? 0; - const descFirst = (props as any).sortDescFirst as boolean; + const descFirst = (props as { sortDescFirst?: boolean }).sortDescFirst ?? false; let title = descFirst ? i18n.sortByColumnDesc : i18n.sortByColumn; if (props.isSorted) { if (descFirst) { @@ -61,5 +62,7 @@ export function LineUpLiteSortByAction( {props.isSortedDesc || (!props.isSorted && descFirst) ? : } {props.children} - ) : null; + ) : ( + <> + ); } diff --git a/packages/table/src/components/toolbar/LineUpLiteToolbar.tsx b/packages/table/src/components/toolbar/LineUpLiteToolbar.tsx index 2894e4d..f85b0ae 100644 --- a/packages/table/src/components/toolbar/LineUpLiteToolbar.tsx +++ b/packages/table/src/components/toolbar/LineUpLiteToolbar.tsx @@ -6,7 +6,6 @@ */ import React, { CSSProperties, PropsWithChildren, useMemo } from 'react'; -import { clsx } from '../utils'; import type { ColumnInstance, UseFiltersColumnProps, @@ -14,23 +13,28 @@ import type { UseResizeColumnsColumnProps, UseSortByColumnProps, } from 'react-table'; +import { clsx } from '../utils'; import { LINEUP_LITE_TEXT_ICONS } from '../../icons'; import { LineUpLiteSortByAction } from './LineUpLiteSortByAction'; import { LineUpLiteGroupByAction } from './LineUpLiteGroupByAction'; -import { LineUpLiteHideAction } from './LineUpLiteHideAction'; -import type { ActionLineUpProps } from '../interfaces'; +import LineUpLiteHideAction from './LineUpLiteHideAction'; +import type { ActionLineUpProps, UnknownObject } from '../interfaces'; -export interface LineUpLiteToolbarProps extends ColumnInstance, ActionLineUpProps { +export interface LineUpLiteToolbarProps + extends ColumnInstance, + ActionLineUpProps { className?: string; style?: CSSProperties; } -export function LineUpLiteToolbar(props: PropsWithChildren>) { - const column = (props as unknown) as ColumnInstance & - UseGroupByColumnProps & - UseResizeColumnsColumnProps & - UseFiltersColumnProps & - UseSortByColumnProps & { +export function LineUpLiteToolbar( + props: PropsWithChildren> +): JSX.Element { + const column = (props as unknown) as ColumnInstance & + UseGroupByColumnProps & + UseResizeColumnsColumnProps & + UseFiltersColumnProps & + UseSortByColumnProps & { canHide?: boolean; }; const pIcons = props.icons; diff --git a/packages/table/src/components/toolbar/index.tsx b/packages/table/src/components/toolbar/index.tsx index f4f0a15..4f5c3f4 100644 --- a/packages/table/src/components/toolbar/index.tsx +++ b/packages/table/src/components/toolbar/index.tsx @@ -8,5 +8,5 @@ export * from './LineUpLiteToolbar'; export * from './LineUpLiteSortByAction'; export * from './LineUpLiteGroupByAction'; -export * from './LineUpLiteHideAction'; +export { default as LineUpLiteHideAction } from './LineUpLiteHideAction'; export * from './LineUpLiteFilterAction'; diff --git a/packages/table/src/components/useLineUpLite.ts b/packages/table/src/components/useLineUpLite.ts index 1ea8fe6..739e819 100644 --- a/packages/table/src/components/useLineUpLite.ts +++ b/packages/table/src/components/useLineUpLite.ts @@ -8,6 +8,7 @@ import { columnSpecificGroupByFn, LineUpLiteColumn, + UnknownObject, useRowExpandColumn, UseRowExpandColumnTableOptions, useRowRankColumn, @@ -56,7 +57,7 @@ export { useFlexLayout as featureFlexLayout, } from 'react-table'; -export type UseLineUpLiteTableOptions = TableOptions & +export type UseLineUpLiteTableOptions = TableOptions & UseFiltersOptions & UseExpandedOptions & UseGroupByOptions & @@ -66,7 +67,7 @@ export type UseLineUpLiteTableOptions = TableOptions & UseSelectColumnTableOptions & UseRowRankColumnTableOptions; -export interface LineUpLiteState +export interface LineUpLiteState extends TableState, UseFiltersState, UseExpandedState, @@ -75,7 +76,7 @@ export interface LineUpLiteState UseSortByState, UseResizeColumnsState {} -export interface LineUpLiteTableInstance +export interface LineUpLiteTableInstance extends TableInstance, UseFiltersInstanceProps, UseExpandedInstanceProps, @@ -83,7 +84,7 @@ export interface LineUpLiteTableInstance UseRowSelectInstanceProps, UseSortByInstanceProps {} -export interface UseLineUpLiteOptions extends UseLineUpLiteTableOptions { +export interface UseLineUpLiteOptions extends UseLineUpLiteTableOptions { defaultColumn?: Partial>; columns: LineUpLiteColumn[]; features: readonly (PluginHook | PluginHook[])[]; @@ -91,26 +92,29 @@ export interface UseLineUpLiteOptions extends UseLineUpLi onStateChange?: (state: LineUpLiteState) => void; } -export function featureRowSelect(): PluginHook[] { +export function featureRowSelect(): PluginHook[] { return [useRowSelectImpl, useRowSelectColumn]; } -export function featureSortAndGroupBy(): PluginHook[] { +export function featureSortAndGroupBy(): PluginHook[] { return [useGroupByImpl, useSortBy, useExpanded, useRowExpandColumn]; } /** * default feature set including: filters, sorting, grouping, row select, row rank, and default layout */ -export function featureDefault(): PluginHook[] { +export function featureDefault(): PluginHook[] { return [useFilters, ...featureSortAndGroupBy(), ...featureRowSelect(), useRowRankColumn, useBlockLayout]; } -function sortByPriority(a: [PluginHook, number], b: [PluginHook, number]) { +function sortByPriority( + a: [PluginHook, number], + b: [PluginHook, number] +) { const specialOrders = ['useRowSelect', 'useRowRankColumn', 'useRowExpandColumn']; // ensure useRowExpandColumn is after useRowSelectColumn - const isASpecial = specialOrders.indexOf(a[0].pluginName!); - const isBSpecial = specialOrders.indexOf(b[0].pluginName!); + const isASpecial = specialOrders.indexOf(a[0].pluginName ?? ''); + const isBSpecial = specialOrders.indexOf(b[0].pluginName ?? ''); if (isASpecial >= 0) { return isBSpecial >= 0 ? isASpecial - isBSpecial : 1; } @@ -120,7 +124,7 @@ function sortByPriority(a: [PluginHook, number], b: [P return a[1] - b[1]; } -export function useLineUpLite( +export function useLineUpLite( { features, ...props }: UseLineUpLiteOptions, ...extraPlugins: PluginHook[] ): LineUpLiteTableInstance { diff --git a/packages/table/src/icons/text.tsx b/packages/table/src/icons/text.tsx index 07531e0..50f1cc4 100644 --- a/packages/table/src/icons/text.tsx +++ b/packages/table/src/icons/text.tsx @@ -8,43 +8,43 @@ import React from 'react'; import type { ActionIcons, PaginationIcons } from './interfaces'; -function SortAsc() { +function SortAsc(): JSX.Element { return <>↑; } -function SortDesc() { +function SortDesc(): JSX.Element { return <>↓; } -function Delete() { +function Delete(): JSX.Element { return <>×; } -function ArrowDropRightLine() { +function ArrowDropRightLine(): JSX.Element { return <>▸; } -function GroupBy() { +function GroupBy(): JSX.Element { return ; } -function FirstPage() { +function FirstPage(): JSX.Element { return <>«; } -function LastPage() { +function LastPage(): JSX.Element { return <>»; } -function NextPage() { +function NextPage(): JSX.Element { return <>›; } -function PreviousPage() { +function PreviousPage(): JSX.Element { return <>‹; } -function Filter() { +function Filter(): JSX.Element { return <>#; } @@ -62,3 +62,5 @@ export const LINEUP_LITE_TEXT_ICONS: PaginationIcons & ActionIcons = { lastPage: LastPage, filterColumn: Filter, }; + +export default LINEUP_LITE_TEXT_ICONS; diff --git a/packages/table/src/index.ts b/packages/table/src/index.ts index bf5565a..82e7e3f 100644 --- a/packages/table/src/index.ts +++ b/packages/table/src/index.ts @@ -24,4 +24,4 @@ export { asColumn, } from '@lineup-lite/hooks'; -export type { TableInstance, Cell, Row } from 'react-table'; +export type { TableInstance, Cell } from 'react-table'; diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000..aee30d0 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.tsx", "*.js"] +} diff --git a/yarn.lock b/yarn.lock index 74ff459..06527c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10173,7 +10173,7 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-node@npm:^0.3.4": +"eslint-import-resolver-node@npm:*, eslint-import-resolver-node@npm:^0.3.4": version: 0.3.4 resolution: "eslint-import-resolver-node@npm:0.3.4" dependencies: