From dee0dc6a144a7b61f2ad9a276704bf705d8a4da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 21 Oct 2024 22:42:11 -0500 Subject: [PATCH] feat: graphs --- .vscode/settings.json | 1 + bun.lockb | Bin 387128 -> 379521 bytes .../src/blitzkit/tankDefinitions/constants.ts | 13 +- packages/website/package.json | 2 +- .../website/src/components/EChart/index.tsx | 64 ++++++++ .../website/src/components/EChart/theme.ts | 140 ++++++++++++++++++ .../src/components/Performance/Charts.tsx | 3 - .../BattleDistributionAcrossTiers.tsx | 57 +++++++ .../BattleDistributionAcrossTiersByClass.tsx | 65 ++++++++ .../components/Performance/Charts/index.tsx | 14 ++ .../src/components/StickyTableRoot.tsx | 6 +- packages/website/src/core/radix/var.ts | 18 ++- .../src/pages/tools/performance/_index.tsx | 9 +- .../src/stores/tankPerformanceEphemeral.ts | 2 +- 14 files changed, 377 insertions(+), 17 deletions(-) create mode 100644 packages/website/src/components/EChart/index.tsx create mode 100644 packages/website/src/components/EChart/theme.ts delete mode 100644 packages/website/src/components/Performance/Charts.tsx create mode 100644 packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiers.tsx create mode 100644 packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersByClass.tsx create mode 100644 packages/website/src/components/Performance/Charts/index.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index a170310c1..be8de5a69 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -63,6 +63,7 @@ "DVPLCRC", "dvpm", "dxgi", + "echarts", "Everytime", "FASTNAME", "FOURCC", diff --git a/bun.lockb b/bun.lockb index fd099fde37bf2f7ff47a42d766ce91a3d475dab7..d70c1121f477d22e881d69ac0212f7ff52dc4bba 100644 GIT binary patch delta 70189 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 z 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 = { [TankClass.MEDIUM]: 'https://i.imgur.com/u8YDMBh.png', [TankClass.HEAVY]: 'https://i.imgur.com/8xRf3nc.png', }; -export const TIERS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as const; +export const TIERS = [ + Tier.I, + Tier.II, + Tier.III, + Tier.IV, + Tier.V, + Tier.VI, + Tier.VII, + Tier.VIII, + Tier.IX, + Tier.X, +]; export const TIER_ROMAN_NUMERALS: Record = { [Tier.I]: 'I', [Tier.II]: 'II', diff --git a/packages/website/package.json b/packages/website/package.json index 070b424d0..dcecbd642 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -13,7 +13,6 @@ "@blitzkit/core": "workspace:*", "@nanostores/persistent": "^0.10.2", "@nanostores/react": "^0.7.3", - "@nivo/core": "^0.87.0", "@radix-ui/colors": "^3.0.0", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/themes": "^3.1.3", @@ -22,6 +21,7 @@ "@vanilla-extract/css": "^1.15.5", "@vanilla-extract/dynamic": "^2.1.2", "compare-versions": "^6.1.1", + "echarts": "^5.5.1", "immer": "^10.1.1", "js-cookie": "^3.0.5", "markdown-to-jsx": "^7.5.0", diff --git a/packages/website/src/components/EChart/index.tsx b/packages/website/src/components/EChart/index.tsx new file mode 100644 index 000000000..0387b2078 --- /dev/null +++ b/packages/website/src/components/EChart/index.tsx @@ -0,0 +1,64 @@ +import { Box, Flex, Heading, type BoxProps } from '@radix-ui/themes'; +import type { ECharts, EChartsOption, SetOptionOpts } from 'echarts'; +import { getInstanceByDom, init } from 'echarts'; +import type { CSSProperties } from 'react'; +import { useEffect, useRef } from 'react'; +import { echartsTheme } from './theme'; + +export type EChartProps = BoxProps & { + option: EChartsOption; + style?: CSSProperties; + settings?: SetOptionOpts; +}; + +/** + * Thank you Maneet Goyal! Heavily modified. + * + * https://dev.to/manufac/using-apache-echarts-with-react-and-typescript-353k + */ +export function EChart({ + option, + settings, + title, + ...props +}: EChartProps): JSX.Element { + const chartRef = useRef(null); + + useEffect(() => { + // Initialize chart + let chart: ECharts | undefined; + if (chartRef.current !== null) { + chart = init(chartRef.current, echartsTheme, { renderer: 'svg' }); + } + + // Add chart resize listener + // ResizeObserver is leading to a bit janky UX + function resizeChart() { + chart?.resize(); + } + window.addEventListener('resize', resizeChart); + + // Return cleanup function + return () => { + chart?.dispose(); + window.removeEventListener('resize', resizeChart); + }; + }, []); + + useEffect(() => { + if (chartRef.current === null) return undefined; + + const chart = getInstanceByDom(chartRef.current); + + if (chart === undefined) return undefined; + + chart.setOption(option, settings); + }, [option, settings]); + + return ( + + {title && {title}} + + + ); +} diff --git a/packages/website/src/components/EChart/theme.ts b/packages/website/src/components/EChart/theme.ts new file mode 100644 index 000000000..d4dff35d1 --- /dev/null +++ b/packages/website/src/components/EChart/theme.ts @@ -0,0 +1,140 @@ +import { Var } from '../../core/radix/var'; + +export const echartsTheme = { + seriesCnt: '3', + backgroundColor: Var('color-background'), + titleColor: '#ff0000', + subtitleColor: '#dddddd', + textColorShow: false, + textColor: '#333', + markTextColor: '#293441', + color: [ + Var('accent-indicator'), + '#fc97af', + '#87f7cf', + '#f7f494', + '#72ccff', + '#f7c5a0', + '#d4a4eb', + '#d2f5a6', + '#76f2f2', + ], + borderColor: '#ccc', + borderWidth: 0, + visualMapColor: ['#fc97af', '#87f7cf'], + legendTextColor: '#999999', + kColor: '#fc97af', + kColor0: 'transparent', + kBorderColor: '#fc97af', + kBorderColor0: '#87f7cf', + kBorderWidth: '2', + lineWidth: '3', + symbolSize: '0', + symbol: 'circle', + symbolBorderWidth: '4', + lineSmooth: true, + graphLineWidth: '1', + graphLineColor: '#ffffff', + mapLabelColor: '#893448', + mapLabelColorE: 'rgb(137,52,72)', + mapBorderColor: '#999999', + mapBorderColorE: '#eb8146', + mapBorderWidth: 0.5, + mapBorderWidthE: 1, + mapAreaColor: '#f3f3f3', + mapAreaColorE: 'rgba(255,178,72,1)', + axes: [ + { + type: 'all', + name: '通用坐标轴', + axisLineShow: true, + axisLineColor: '#666666', + axisTickShow: false, + axisTickColor: '#333', + axisLabelShow: true, + axisLabelColor: '#aaaaaa', + splitLineShow: false, + splitLineColor: ['#e6e6e6'], + splitAreaShow: false, + splitAreaColor: ['rgba(250,250,250,0.05)', 'rgba(200,200,200,0.02)'], + }, + { + type: 'category', + name: '类目坐标轴', + axisLineShow: true, + axisLineColor: '#333', + axisTickShow: true, + axisTickColor: '#333', + axisLabelShow: true, + axisLabelColor: '#333', + splitLineShow: false, + splitLineColor: ['#ccc'], + splitAreaShow: false, + splitAreaColor: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], + }, + { + type: 'value', + name: '数值坐标轴', + axisLineShow: true, + axisLineColor: '#333', + axisTickShow: true, + axisTickColor: '#333', + axisLabelShow: true, + axisLabelColor: '#333', + splitLineShow: true, + splitLineColor: ['#ccc'], + splitAreaShow: false, + splitAreaColor: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], + }, + { + type: 'log', + name: '对数坐标轴', + axisLineShow: true, + axisLineColor: '#333', + axisTickShow: true, + axisTickColor: '#333', + axisLabelShow: true, + axisLabelColor: '#333', + splitLineShow: true, + splitLineColor: ['#ccc'], + splitAreaShow: false, + splitAreaColor: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], + }, + { + type: 'time', + name: '时间坐标轴', + axisLineShow: true, + axisLineColor: '#333', + axisTickShow: true, + axisTickColor: '#333', + axisLabelShow: true, + axisLabelColor: '#333', + splitLineShow: true, + splitLineColor: ['#ccc'], + splitAreaShow: false, + splitAreaColor: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], + }, + ], + axisSeperateSetting: false, + toolboxColor: '#999999', + toolboxEmphasisColor: '#666666', + tooltipAxisColor: '#cccccc', + tooltipAxisWidth: 1, + timelineLineColor: '#87f7cf', + timelineLineWidth: 1, + timelineItemColor: '#87f7cf', + timelineItemColorE: '#f7f494', + timelineCheckColor: '#fc97af', + timelineCheckBorderColor: '#fc97af', + timelineItemBorderWidth: 1, + timelineControlColor: '#87f7cf', + timelineControlBorderColor: '#87f7cf', + timelineControlBorderWidth: 0.5, + timelineLabelColor: '#87f7cf', + datazoomBackgroundColor: 'rgba(255,255,255,0)', + datazoomDataColor: 'rgba(114,204,255,1)', + datazoomFillColor: 'rgba(114,204,255,0.2)', + datazoomHandleColor: '#72ccff', + datazoomHandleWidth: '100', + datazoomLabelColor: '#333333', +}; diff --git a/packages/website/src/components/Performance/Charts.tsx b/packages/website/src/components/Performance/Charts.tsx deleted file mode 100644 index 9d2091681..000000000 --- a/packages/website/src/components/Performance/Charts.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export function Charts() { - return 'amogos'; -} diff --git a/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiers.tsx b/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiers.tsx new file mode 100644 index 000000000..2f5a53876 --- /dev/null +++ b/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiers.tsx @@ -0,0 +1,57 @@ +import { + TIERS, + TIER_ROMAN_NUMERALS, + fetchAverageDefinitions, + fetchTankDefinitions, +} from '@blitzkit/core'; +import { TankPerformanceEphemeral } from '../../../../stores/tankPerformanceEphemeral'; +import { EChart } from '../../../EChart'; + +const averageDefinitions = await fetchAverageDefinitions(); +const tankDefinitions = await fetchTankDefinitions(); +const averageDefinitionsArray = Object.entries(averageDefinitions.averages); + +export function BattleDistributionAcrossTiers() { + const playerCountPeriod = TankPerformanceEphemeral.use( + (state) => state.playerCountPeriod, + ); + + return ( + TIER_ROMAN_NUMERALS[tier]), + }, + yAxis: { + type: 'value', + }, + series: [ + { + data: TIERS.map((tier) => { + return averageDefinitionsArray.reduce( + (accumulator, [idString, entry]) => { + const id = Number(idString); + const tank = tankDefinitions.tanks[id]; + + if (tank === undefined || tank.tier !== tier) { + return accumulator; + } + + return ( + accumulator + + entry.mu.battles * entry.samples[playerCountPeriod] + ); + }, + 0, + ); + }), + type: 'bar', + }, + ], + }} + /> + ); +} diff --git a/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersByClass.tsx b/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersByClass.tsx new file mode 100644 index 000000000..fea1bca49 --- /dev/null +++ b/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersByClass.tsx @@ -0,0 +1,65 @@ +import { + TANK_CLASSES, + TIERS, + TIER_ROMAN_NUMERALS, + fetchAverageDefinitions, + fetchTankDefinitions, +} from '@blitzkit/core'; +import strings from '@blitzkit/core/lang/en-US.json'; +import { TankPerformanceEphemeral } from '../../../../stores/tankPerformanceEphemeral'; +import { EChart } from '../../../EChart'; + +const averageDefinitions = await fetchAverageDefinitions(); +const tankDefinitions = await fetchTankDefinitions(); +const averageDefinitionsArray = Object.entries(averageDefinitions.averages); + +export function BattleDistributionAcrossTiersByClass() { + const playerCountPeriod = TankPerformanceEphemeral.use( + (state) => state.playerCountPeriod, + ); + + return ( + TIER_ROMAN_NUMERALS[tier]), + }, + yAxis: { + type: 'value', + }, + legend: { + data: TANK_CLASSES.map((c) => strings.common.tank_class_short[c]), + }, + series: TANK_CLASSES.map((c) => ({ + name: strings.common.tank_class_short[c], + data: TIERS.map((tier) => { + return averageDefinitionsArray.reduce( + (accumulator, [idString, entry]) => { + const id = Number(idString); + const tank = tankDefinitions.tanks[id]; + + if ( + tank === undefined || + tank.tier !== tier || + tank.class !== c + ) { + return accumulator; + } + + return ( + accumulator + + entry.mu.battles * entry.samples[playerCountPeriod] + ); + }, + 0, + ); + }), + type: 'bar', + })), + }} + /> + ); +} diff --git a/packages/website/src/components/Performance/Charts/index.tsx b/packages/website/src/components/Performance/Charts/index.tsx new file mode 100644 index 000000000..27190efd0 --- /dev/null +++ b/packages/website/src/components/Performance/Charts/index.tsx @@ -0,0 +1,14 @@ +import { Flex } from '@radix-ui/themes'; +import { BattleDistributionAcrossTiers } from './components/BattleDistributionAcrossTiers'; +import { BattleDistributionAcrossTiersByClass } from './components/BattleDistributionAcrossTiersByClass'; + +export function Charts() { + return ( + + + + + + + ); +} diff --git a/packages/website/src/components/StickyTableRoot.tsx b/packages/website/src/components/StickyTableRoot.tsx index 04fc7546d..d0b8e2cdc 100644 --- a/packages/website/src/components/StickyTableRoot.tsx +++ b/packages/website/src/components/StickyTableRoot.tsx @@ -6,9 +6,9 @@ export function StickyTableRoot({ style, ...props }: RootProps) { const table = useRef(null); useEffect(() => { - // table.current - // ?.querySelector('table') - // ?.style.setProperty('overflow', 'auto'); + table.current + ?.querySelector('table') + ?.style.setProperty('overflow', 'auto'); }, []); return ( diff --git a/packages/website/src/core/radix/var.ts b/packages/website/src/core/radix/var.ts index 57ac36f64..4c397dbba 100644 --- a/packages/website/src/core/radix/var.ts +++ b/packages/website/src/core/radix/var.ts @@ -8,7 +8,23 @@ type Name = | `color-${'background' | `panel-${'solid' | 'translucent'}` | 'surface' | 'overlay'}` | `radius-${1 | 2 | 3 | 4 | 5 | 6 | 'full'}` | `space-${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}` - | `${RadixColor}-${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12}`; + | `${RadixColor | 'accent' | 'gray'}-${ + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 'surface' + | 'indicator' + | 'track' + | 'contrast'}`; export function Var(name: Name) { return `var(--${name})`; diff --git a/packages/website/src/pages/tools/performance/_index.tsx b/packages/website/src/pages/tools/performance/_index.tsx index a8555f2c8..d877ddc37 100644 --- a/packages/website/src/pages/tools/performance/_index.tsx +++ b/packages/website/src/pages/tools/performance/_index.tsx @@ -31,14 +31,9 @@ function Content({ skeleton }: MaybeSkeletonComponentProps) { + - {mode === TankPerformanceMode.Table && ( - <> - - - - )} - + {mode === TankPerformanceMode.Table && } {mode === TankPerformanceMode.Charts && } ); diff --git a/packages/website/src/stores/tankPerformanceEphemeral.ts b/packages/website/src/stores/tankPerformanceEphemeral.ts index 5b54031d6..b4188367f 100644 --- a/packages/website/src/stores/tankPerformanceEphemeral.ts +++ b/packages/website/src/stores/tankPerformanceEphemeral.ts @@ -23,6 +23,6 @@ export enum PlayerCountPeriod { export const TankPerformanceEphemeral = createContextualStore(() => create()(() => ({ playerCountPeriod: PlayerCountPeriod.ThisMonth, - mode: TankPerformanceMode.Table, + mode: TankPerformanceMode.Charts, })), );