mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 10:47:04 +02:00
feat: generalized breakdown
This commit is contained in:
1 parent
e37e0ccf9f
commit
63257a13f5
4 files changed
+55
-73
No files matched your search
+2
-1
@@ -13,4 +13,5 @@ test.*
|
||||
/docs/.vitepress/dist
|
||||
/docs/.vitepress/cache
|
||||
servers.csv
|
||||
.next/
|
||||
.next/
|
||||
tsconfig.tsbuildinfo
|
||||
@@ -1,40 +1,32 @@
|
||||
import getWN8Percentile from '../../../core/blitz/getWN8Percentile';
|
||||
import { Percentile } from '../../../constants/percentiles';
|
||||
import { TankType } from '../../../core/blitz/tankopedia';
|
||||
import { theme } from '../../../stitches.config';
|
||||
import { TREE_TYPE_ICONS, TreeTypeEnum } from '../../Tanks';
|
||||
import { RowStat } from './RowStat';
|
||||
|
||||
export interface RowProps {
|
||||
name: string;
|
||||
winrate: number;
|
||||
careerWinrate: number;
|
||||
WN8?: number;
|
||||
careerWN8?: number;
|
||||
damage: number;
|
||||
careerDamage: number;
|
||||
battles: number;
|
||||
careerBattles: number;
|
||||
minimized: boolean;
|
||||
isTank: boolean;
|
||||
treeType?: TreeTypeEnum;
|
||||
tankType?: TankType;
|
||||
}
|
||||
type RowProps = (
|
||||
| {
|
||||
type: 'tank';
|
||||
treeType?: TreeTypeEnum;
|
||||
tankType?: TankType;
|
||||
}
|
||||
| {
|
||||
type: 'summary';
|
||||
}
|
||||
) & {
|
||||
title: string;
|
||||
minimized?: boolean;
|
||||
|
||||
export function Row({
|
||||
isTank,
|
||||
minimized,
|
||||
name,
|
||||
winrate,
|
||||
careerWinrate,
|
||||
WN8,
|
||||
careerWN8,
|
||||
damage,
|
||||
careerDamage,
|
||||
battles,
|
||||
careerBattles,
|
||||
treeType,
|
||||
tankType,
|
||||
}: RowProps) {
|
||||
rows: {
|
||||
title: string;
|
||||
current?: number | string;
|
||||
career?: number | string;
|
||||
delta?: number;
|
||||
percentile?: Percentile;
|
||||
}[];
|
||||
};
|
||||
|
||||
export function Row(props: RowProps) {
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
@@ -55,26 +47,30 @@ export function Row({
|
||||
backgroundColor: theme.colors.componentInteractive,
|
||||
}}
|
||||
>
|
||||
{isTank && treeType !== undefined && tankType !== undefined && (
|
||||
<img
|
||||
src={TREE_TYPE_ICONS[treeType][tankType]}
|
||||
style={{ width: 16, height: 16 }}
|
||||
/>
|
||||
)}
|
||||
{props.type === 'tank' &&
|
||||
props.treeType !== undefined &&
|
||||
props.tankType !== undefined && (
|
||||
<img
|
||||
src={TREE_TYPE_ICONS[props.treeType][props.tankType]}
|
||||
style={{ width: 16, height: 16 }}
|
||||
/>
|
||||
)}
|
||||
|
||||
<span
|
||||
style={{
|
||||
color: isTank
|
||||
? treeType === TreeTypeEnum.Collector
|
||||
? theme.colors.textLowContrast_blue
|
||||
: treeType === TreeTypeEnum.Premium
|
||||
? theme.colors.textLowContrast_amber
|
||||
: theme.colors.textHighContrast
|
||||
: theme.colors.textLowContrast,
|
||||
color:
|
||||
props.type === 'tank'
|
||||
? props.treeType === TreeTypeEnum.Collector
|
||||
? theme.colors.textLowContrast_blue
|
||||
: props.treeType === TreeTypeEnum.Premium
|
||||
? theme.colors.textLowContrast_amber
|
||||
: theme.colors.textHighContrast
|
||||
: theme.colors.textLowContrast,
|
||||
fontWeight: 900,
|
||||
fontSize: 16,
|
||||
}}
|
||||
>
|
||||
{name}
|
||||
{props.title}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -85,31 +81,16 @@ export function Row({
|
||||
paddingBottom: 8,
|
||||
}}
|
||||
>
|
||||
<RowStat
|
||||
minimized={minimized}
|
||||
name={`Battles • ${careerBattles.toFixed(0)}`}
|
||||
value={battles.toFixed(0)}
|
||||
/>
|
||||
<RowStat
|
||||
minimized={minimized}
|
||||
name={`Winrate • ${(careerWinrate * 100).toFixed(2)}%`}
|
||||
value={`${(winrate * 100).toFixed(2)}%`}
|
||||
delta={winrate - careerWinrate}
|
||||
/>
|
||||
<RowStat
|
||||
minimized={minimized}
|
||||
name={`WN8 • ${
|
||||
careerWN8 === undefined ? '--' : careerWN8.toFixed(0)
|
||||
}`}
|
||||
value={WN8 === undefined ? '--' : WN8.toFixed(0)}
|
||||
percentile={WN8 === undefined ? undefined : getWN8Percentile(WN8)}
|
||||
/>
|
||||
<RowStat
|
||||
minimized={minimized}
|
||||
name={`Damage • ${careerDamage.toFixed(0)}`}
|
||||
value={damage.toFixed(0)}
|
||||
delta={damage - careerDamage}
|
||||
/>
|
||||
{props.rows.map((row, index) => (
|
||||
<RowStat
|
||||
minimized={props.minimized}
|
||||
key={index}
|
||||
name={`${row.title} • ${row.career ?? '--'}`}
|
||||
value={row.current ?? '--'}
|
||||
delta={row.delta}
|
||||
percentile={row.percentile}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -4,7 +4,7 @@ import PercentileIndicator from '../../PercentileIndicator';
|
||||
|
||||
export interface RowStatProps {
|
||||
name: string;
|
||||
value: string | number;
|
||||
value?: string | number;
|
||||
delta?: number;
|
||||
percentile?: Percentile;
|
||||
minimized?: boolean;
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@sapphire/shapeshift/dist/index.d.ts","./node_modules/discord-api-types/globals.d.ts","./node_modules/discord-api-types/rest/common.d.ts","./node_modules/discord-api-types/payloads/common.d.ts","./node_modules/discord-api-types/payloads/v10/permissions.d.ts","./node_modules/discord-api-types/payloads/v10/user.d.ts","./node_modules/discord-api-types/payloads/v10/emoji.d.ts","./node_modules/discord-api-types/payloads/v10/oauth2.d.ts","./node_modules/discord-api-types/payloads/v10/sticker.d.ts","./node_modules/discord-api-types/payloads/v10/guild.d.ts","./node_modules/discord-api-types/payloads/v10/teams.d.ts","./node_modules/discord-api-types/payloads/v10/application.d.ts","./node_modules/discord-api-types/payloads/v10/autoModeration.d.ts","./node_modules/discord-api-types/payloads/v10/guildScheduledEvent.d.ts","./node_modules/discord-api-types/payloads/v10/stageInstance.d.ts","./node_modules/discord-api-types/payloads/v10/webhook.d.ts","./node_modules/discord-api-types/payloads/v10/auditLog.d.ts","./node_modules/discord-api-types/payloads/v10/invite.d.ts","./node_modules/discord-api-types/rest/v10/application.d.ts","./node_modules/discord-api-types/rest/v10/auditLog.d.ts","./node_modules/discord-api-types/rest/v10/autoModeration.d.ts","./node_modules/discord-api-types/utils/internals.d.ts","./node_modules/discord-api-types/rest/v10/channel.d.ts","./node_modules/discord-api-types/rest/Line truncated
|
||||
{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@sapphire/shapeshift/dist/index.d.ts","./node_modules/discord-api-types/globals.d.ts","./node_modules/discord-api-types/rest/common.d.ts","./node_modules/discord-api-types/payloads/common.d.ts","./node_modules/discord-api-types/payloads/v10/permissions.d.ts","./node_modules/discord-api-types/payloads/v10/user.d.ts","./node_modules/discord-api-types/payloads/v10/emoji.d.ts","./node_modules/discord-api-types/payloads/v10/oauth2.d.ts","./node_modules/discord-api-types/payloads/v10/sticker.d.ts","./node_modules/discord-api-types/payloads/v10/guild.d.ts","./node_modules/discord-api-types/payloads/v10/teams.d.ts","./node_modules/discord-api-types/payloads/v10/application.d.ts","./node_modules/discord-api-types/payloads/v10/autoModeration.d.ts","./node_modules/discord-api-types/payloads/v10/guildScheduledEvent.d.ts","./node_modules/discord-api-types/payloads/v10/stageInstance.d.ts","./node_modules/discord-api-types/payloads/v10/webhook.d.ts","./node_modules/discord-api-types/payloads/v10/auditLog.d.ts","./node_modules/discord-api-types/payloads/v10/invite.d.ts","./node_modules/discord-api-types/rest/v10/application.d.ts","./node_modules/discord-api-types/rest/v10/auditLog.d.ts","./node_modules/discord-api-types/rest/v10/autoModeration.d.ts","./node_modules/discord-api-types/utils/internals.d.ts","./node_modules/discord-api-types/rest/v10/channel.d.ts","./node_modules/discord-api-types/rest/Line truncated
|
||||
Reference in new issue
Block a user