beatsaber-bot-core 0.3.0-rc.1 → 0.3.0-rc.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cmd/bind/bind-beatleader.js +8 -11
- package/dist/cjs/cmd/bind/bind-beatleader.js.map +1 -1
- package/dist/cjs/cmd/bind/bind-beatsaver.js +7 -12
- package/dist/cjs/cmd/bind/bind-beatsaver.js.map +1 -1
- package/dist/cjs/cmd/bind/bind-id-beatleader.js +8 -11
- package/dist/cjs/cmd/bind/bind-id-beatleader.js.map +1 -1
- package/dist/cjs/cmd/bind/bind-id-beatsaver.js +7 -11
- package/dist/cjs/cmd/bind/bind-id-beatsaver.js.map +1 -1
- package/dist/cjs/cmd/bind/bind-scoresaber.js +9 -14
- package/dist/cjs/cmd/bind/bind-scoresaber.js.map +1 -1
- package/dist/cjs/cmd/rank.js +3 -3
- package/dist/cjs/cmd/rank.js.map +1 -1
- package/dist/cjs/cmd/score.js +2 -2
- package/dist/cjs/cmd/score.js.map +1 -1
- package/dist/cjs/cmd/subscribe/beatleader.js +1 -1
- package/dist/cjs/cmd/subscribe/beatleader.js.map +1 -1
- package/dist/cjs/cmd/subscribe/beatsaver.js +1 -1
- package/dist/cjs/cmd/subscribe/beatsaver.js.map +1 -1
- package/dist/cjs/cmd/subscribe/id-beatleader-score.js +1 -1
- package/dist/cjs/cmd/subscribe/id-beatleader-score.js.map +1 -1
- package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js +1 -1
- package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js.map +1 -1
- package/dist/cjs/cmd/subscribe/index.js +4 -4
- package/dist/cjs/cmd/subscribe/index.js.map +1 -1
- package/dist/cjs/cmd/subscribe/subleave.js +4 -4
- package/dist/cjs/cmd/subscribe/subleave.js.map +1 -1
- package/dist/cjs/common/i18n/index.js +2 -1
- package/dist/cjs/common/i18n/index.js.map +1 -1
- package/dist/cjs/components/components/RankDifficulty.js +32 -21
- package/dist/cjs/components/components/RankDifficulty.js.map +1 -1
- package/dist/cjs/components/components/base/avatar.js +12 -1
- package/dist/cjs/components/components/base/avatar.js.map +1 -1
- package/dist/cjs/components/components/bl-rank-score-item.js +8 -7
- package/dist/cjs/components/components/bl-rank-score-item.js.map +1 -1
- package/dist/cjs/components/components/bl-score-item.js +20 -9
- package/dist/cjs/components/components/bl-score-item.js.map +1 -1
- package/dist/cjs/components/components/characteristic.js +36 -25
- package/dist/cjs/components/components/characteristic.js.map +1 -1
- package/dist/cjs/components/components/flag.js +4 -3
- package/dist/cjs/components/components/flag.js.map +1 -1
- package/dist/cjs/components/components/icons/BeatLeader.js +30 -19
- package/dist/cjs/components/components/icons/BeatLeader.js.map +1 -1
- package/dist/cjs/components/components/scoreItem.js +20 -9
- package/dist/cjs/components/components/scoreItem.js.map +1 -1
- package/dist/cjs/components/components/scoregraph.js +2 -1
- package/dist/cjs/components/components/scoregraph.js.map +1 -1
- package/dist/cjs/components/components/skill-graph.js +33 -22
- package/dist/cjs/components/components/skill-graph.js.map +1 -1
- package/dist/cjs/components/components/socre-badge.js +14 -3
- package/dist/cjs/components/components/socre-badge.js.map +1 -1
- package/dist/cjs/components/components/ss-rank-score-item.js +8 -7
- package/dist/cjs/components/components/ss-rank-score-item.js.map +1 -1
- package/dist/cjs/components/components/ss-score-item.js.map +1 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/components/pages/bl-player.js +1 -1
- package/dist/cjs/components/pages/bl-player.js.map +1 -1
- package/dist/cjs/components/pages/bl-score-with-rank.js +1 -1
- package/dist/cjs/components/pages/bl-score-with-rank.js.map +1 -1
- package/dist/cjs/components/pages/bl-score.js +1 -1
- package/dist/cjs/components/pages/bl-score.js.map +1 -1
- package/dist/cjs/components/pages/ss-player.js +1 -1
- package/dist/cjs/components/pages/ss-player.js.map +1 -1
- package/dist/esm/cmd/bind/bind-beatleader.js +8 -11
- package/dist/esm/cmd/bind/bind-beatleader.js.map +1 -1
- package/dist/esm/cmd/bind/bind-beatsaver.js +7 -12
- package/dist/esm/cmd/bind/bind-beatsaver.js.map +1 -1
- package/dist/esm/cmd/bind/bind-id-beatleader.js +8 -11
- package/dist/esm/cmd/bind/bind-id-beatleader.js.map +1 -1
- package/dist/esm/cmd/bind/bind-id-beatsaver.js +7 -11
- package/dist/esm/cmd/bind/bind-id-beatsaver.js.map +1 -1
- package/dist/esm/cmd/bind/bind-scoresaber.js +9 -14
- package/dist/esm/cmd/bind/bind-scoresaber.js.map +1 -1
- package/dist/esm/cmd/rank.js +3 -3
- package/dist/esm/cmd/rank.js.map +1 -1
- package/dist/esm/cmd/score.js +2 -2
- package/dist/esm/cmd/score.js.map +1 -1
- package/dist/esm/cmd/subscribe/beatleader.js +1 -1
- package/dist/esm/cmd/subscribe/beatleader.js.map +1 -1
- package/dist/esm/cmd/subscribe/beatsaver.js +1 -1
- package/dist/esm/cmd/subscribe/beatsaver.js.map +1 -1
- package/dist/esm/cmd/subscribe/id-beatleader-score.js +1 -1
- package/dist/esm/cmd/subscribe/id-beatleader-score.js.map +1 -1
- package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js +1 -1
- package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js.map +1 -1
- package/dist/esm/cmd/subscribe/index.js +4 -4
- package/dist/esm/cmd/subscribe/index.js.map +1 -1
- package/dist/esm/cmd/subscribe/subleave.js +4 -4
- package/dist/esm/cmd/subscribe/subleave.js.map +1 -1
- package/dist/esm/common/i18n/index.js +2 -1
- package/dist/esm/common/i18n/index.js.map +1 -1
- package/dist/esm/components/components/RankDifficulty.js +1 -0
- package/dist/esm/components/components/RankDifficulty.js.map +1 -1
- package/dist/esm/components/components/base/avatar.js +1 -0
- package/dist/esm/components/components/base/avatar.js.map +1 -1
- package/dist/esm/components/components/bl-rank-score-item.js +1 -0
- package/dist/esm/components/components/bl-rank-score-item.js.map +1 -1
- package/dist/esm/components/components/bl-score-item.js +1 -0
- package/dist/esm/components/components/bl-score-item.js.map +1 -1
- package/dist/esm/components/components/characteristic.js +1 -0
- package/dist/esm/components/components/characteristic.js.map +1 -1
- package/dist/esm/components/components/flag.js +1 -0
- package/dist/esm/components/components/flag.js.map +1 -1
- package/dist/esm/components/components/icons/BeatLeader.js +1 -0
- package/dist/esm/components/components/icons/BeatLeader.js.map +1 -1
- package/dist/esm/components/components/scoreItem.js +1 -0
- package/dist/esm/components/components/scoreItem.js.map +1 -1
- package/dist/esm/components/components/scoregraph.js +1 -0
- package/dist/esm/components/components/scoregraph.js.map +1 -1
- package/dist/esm/components/components/skill-graph.js +1 -0
- package/dist/esm/components/components/skill-graph.js.map +1 -1
- package/dist/esm/components/components/socre-badge.js +1 -0
- package/dist/esm/components/components/socre-badge.js.map +1 -1
- package/dist/esm/components/components/ss-rank-score-item.js +1 -0
- package/dist/esm/components/components/ss-rank-score-item.js.map +1 -1
- package/dist/esm/components/components/ss-score-item.js.map +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/components/pages/bl-player.js +1 -1
- package/dist/esm/components/pages/bl-player.js.map +1 -1
- package/dist/esm/components/pages/bl-score-with-rank.js +1 -1
- package/dist/esm/components/pages/bl-score-with-rank.js.map +1 -1
- package/dist/esm/components/pages/bl-score.js +1 -1
- package/dist/esm/components/pages/bl-score.js.map +1 -1
- package/dist/esm/components/pages/ss-player.js +1 -1
- package/dist/esm/components/pages/ss-player.js.map +1 -1
- package/package.json +8 -17
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/components/scoregraph.tsx"],"sourcesContent":["import { processAccGraphs, processUnderswings } from '../utils/bl/bsorReplayAcc'\nimport {\n createDistanceWeightFunction,\n createMinMaxCounter,\n} from '../utils/bl/beatleader'\nimport getStatistic from '../utils/bl/stastic'\nimport Chart from 'chart.js/auto'\nimport { BSOR, Score } from '@/service/api/interfaces/beatleader'\nimport { createCanvas } from '@napi-rs/canvas'\n\nexport function formatNumber(\n num: number,\n digits = 2,\n addSign = false,\n notANumber = null\n) {\n if (!Number.isFinite(num)) {\n return notANumber\n }\n\n return (\n (addSign && num > 0 ? '+' : '') +\n num.toLocaleString('zh-CN', {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n })\n )\n}\n\nfunction timeToLabel(time: any) {\n const minutes = Math.floor(time / 60)\n const seconds = Math.floor(time % 60)\n return minutes + ':' + seconds.toString().padStart(2, '0')\n}\n\nfunction processChartData(\n chartData: any,\n resolution: any,\n smoothPeriodPercentage: any,\n weightFunctionSteepness: any\n) {\n const data = [] as any[]\n if (chartData.length === 0 || resolution === 0) return data\n\n const songDuration = chartData[chartData.length - 1][1]\n const distanceWeightFunction = createDistanceWeightFunction(\n songDuration * smoothPeriodPercentage,\n weightFunctionSteepness\n )\n\n for (let i = 0.0; i < resolution; i += 1.0) {\n const songTime = (songDuration * i) / (resolution - 1)\n\n let sum = 0\n let divider = 0\n\n for (let j = 0.0; j < chartData.length; j += 1.0) {\n const item = chartData[j]\n const weight = distanceWeightFunction.getWeight(item[1] - songTime)\n\n sum += item[0] * weight\n divider += weight\n }\n\n if (divider === 0) continue\n const value = 100 + (sum / divider) * 15\n data.push(value)\n }\n\n return data\n}\n\n// get score Statics\nexport default function ScoreGraph({\n scoreId,\n scoreInfo,\n statistic,\n bsor,\n height,\n width,\n}: {\n scoreId: number\n scoreInfo: Score\n statistic: any\n bsor: BSOR\n height: number\n width: number\n}) {\n const canvas = createCanvas(width * 4, height * 4)\n\n const setupChart = (\n canvas: any,\n chartData: any,\n underswingsData: any,\n beatSavior: any\n ) => {\n if (!canvas || !chartData || !Object.keys(chartData).length) return\n\n const title =\n underswingsData?.noUnderswingsScore > underswingsData?.score\n ? `Lost by underswings: ${formatNumber(underswingsData.noUnderswingsScore - underswingsData.score, 0)}pts, ${formatNumber(\n underswingsData.noUnderswingsAcc - underswingsData.acc,\n 2\n )}% acc` +\n (underswingsData?.noUnderswingsPp &&\n underswingsData?.noUnderswingsPp > underswingsData?.pp\n ? `, ${formatNumber(underswingsData.noUnderswingsPp - underswingsData.pp, 2)}pp`\n : '')\n : null\n\n const labels = chartData.times.map(timeToLabel)\n\n const minMaxCounter = createMinMaxCounter(0, 115, 1.0)\n\n const hands = [] as any\n if (beatSavior?.stats?.accLeft) {\n hands.push('red')\n }\n if (beatSavior?.stats?.accRight) {\n hands.push('blue')\n }\n if (hands.length == 2) {\n hands.push('total')\n }\n\n for (let i = 0; i < chartData.times.length; i++) {\n hands.forEach((saberType: any) => {\n minMaxCounter.update(chartData.realScoreBySaber[saberType][i])\n minMaxCounter.update(chartData.fullSwingBySaber[saberType][i])\n })\n }\n let datasets = [] as any[]\n if (beatSavior?.stats?.accLeft) {\n datasets.push({\n yAxisID: 'score',\n label: 'Accuracy (left)',\n data: chartData.fullSwingBySaber.red,\n type: 'line',\n borderColor: '#ee5555',\n backgroundColor: '#ee5555',\n borderWidth: 8,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 3,\n })\n datasets.push({\n yAxisID: 'score',\n label: 'Underswing (left)',\n data: chartData.realScoreBySaber.red,\n type: 'line',\n fill: '-1',\n borderColor: '#ee555555',\n backgroundColor: '#ee555555',\n borderWidth: 2,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 4,\n })\n }\n\n if (beatSavior?.stats?.accRight) {\n datasets.push({\n yAxisID: 'score',\n label: 'Accuracy (right)',\n data: chartData.fullSwingBySaber.blue,\n type: 'line',\n borderColor: '#5555ee',\n backgroundColor: '#5555ee',\n borderWidth: 8,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 5,\n })\n datasets.push({\n yAxisID: 'score',\n label: 'Underswing (right)',\n data: chartData.realScoreBySaber.blue,\n type: 'line',\n fill: '-1',\n borderColor: '#5555ee55',\n backgroundColor: '#5555ee55',\n borderWidth: 2,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 6,\n })\n }\n\n datasets = datasets.concat([\n {\n yAxisID: 'score',\n label: 'Accuracy',\n data: chartData.fullSwingBySaber.total,\n type: 'line',\n borderColor: 'white',\n backgroundColor: 'white',\n borderWidth: 8,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 1,\n },\n {\n yAxisID: 'score',\n label: 'Underswing',\n data: chartData.realScoreBySaber.total,\n type: 'line',\n fill: '-1',\n borderColor: '#aaaaaa55',\n backgroundColor: '#aaaaaa55',\n borderWidth: 2,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 2,\n },\n {\n yAxisID: 'score',\n label: 'Score',\n data: chartData.realScoreBySaber.total,\n type: 'line',\n borderColor: '#aaaaaa',\n backgroundColor: '#aaaaaa',\n borderWidth: 8,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 0,\n },\n ])\n\n new Chart(canvas, {\n data: { labels, datasets },\n options: {\n responsive: false,\n devicePixelRatio: 1,\n maintainAspectRatio: false,\n plugins: {\n legend: {\n display: false,\n },\n title: {\n display: !!title?.length,\n text: title as any,\n color: 'white',\n font: {\n weight: 'normal',\n size: 60,\n },\n position: 'bottom',\n padding: { top: 5, bottom: 0 },\n },\n tooltip: {\n callbacks: {\n title(tooltipItems) {\n const item = tooltipItems[0]\n const labels = item.chart.data.labels as any[]\n return labels[item.dataIndex] + ' (10 seconds average)'\n },\n label(ctx: any) {\n const datasetLabel = ctx.dataset.label\n\n let percentage\n let value\n\n switch (datasetLabel) {\n case 'Underswing (left)':\n value =\n ctx.raw - chartData.fullSwingBySaber.red[ctx.dataIndex]\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value, 1)} (${formatNumber(percentage * 100, 2)}%)`\n case 'Underswing (right)':\n value =\n ctx.raw - chartData.fullSwingBySaber.blue[ctx.dataIndex]\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value, 1)} (${formatNumber(percentage * 100, 2)}%)`\n case 'Underswing':\n value =\n ctx.raw - chartData.fullSwingBySaber.total[ctx.dataIndex]\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value, 1)} (${formatNumber(percentage * 100, 2)}%)`\n case 'Score':\n value = ctx.raw\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value, 1)} (${formatNumber(percentage * 100, 2)}%)`\n default:\n value = ctx.raw\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value - 100.0, 1)} (${formatNumber(percentage * 100, 2)}%)`\n }\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n autoSkip: true,\n autoSkipPadding: 4,\n color: 'white',\n font: {\n weight: 'normal',\n size: 60,\n },\n },\n },\n y: {\n display: true,\n min: minMaxCounter.minValue,\n max: minMaxCounter.maxValue,\n ticks: {\n autoSkip: true,\n autoSkipPadding: 4,\n color: 'white',\n font: {\n weight: 'normal',\n size: 60,\n },\n },\n },\n score: {\n display: false,\n min: minMaxCounter.minValue,\n max: minMaxCounter.maxValue,\n ticks: {\n autoSkip: true,\n autoSkipPadding: 4,\n color: 'white',\n },\n },\n },\n },\n })\n }\n const beatSavior = getStatistic(scoreInfo, scoreId, statistic)\n const replayAccGraphs = processAccGraphs(bsor)\n const underswingsData = processUnderswings(bsor)\n setupChart(canvas, replayAccGraphs, underswingsData, beatSavior)\n const dataURL = canvas.toDataURL('image/png')\n return (\n <>\n <div>\n <img src={dataURL} width={width} height={height} />\n </div>\n </>\n )\n}\n"],"mappings":"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","names":["canvas","underswingsData","beatSavior","Chart","labels","getStatistic"]}
|
1
|
+
{"version":3,"sources":["../../../../src/components/components/scoregraph.tsx"],"sourcesContent":["import { processAccGraphs, processUnderswings } from '../utils/bl/bsorReplayAcc'\nimport {\n createDistanceWeightFunction,\n createMinMaxCounter,\n} from '../utils/bl/beatleader'\nimport getStatistic from '../utils/bl/stastic'\nimport Chart from 'chart.js/auto'\nimport { BSOR, Score } from '@/services/api/interfaces/beatleader'\nimport { createCanvas } from '@napi-rs/canvas'\nimport React from 'react'\n\nexport function formatNumber(\n num: number,\n digits = 2,\n addSign = false,\n notANumber = null\n) {\n if (!Number.isFinite(num)) {\n return notANumber\n }\n\n return (\n (addSign && num > 0 ? '+' : '') +\n num.toLocaleString('zh-CN', {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n })\n )\n}\n\nfunction timeToLabel(time: any) {\n const minutes = Math.floor(time / 60)\n const seconds = Math.floor(time % 60)\n return minutes + ':' + seconds.toString().padStart(2, '0')\n}\n\nfunction processChartData(\n chartData: any,\n resolution: any,\n smoothPeriodPercentage: any,\n weightFunctionSteepness: any\n) {\n const data = [] as any[]\n if (chartData.length === 0 || resolution === 0) return data\n\n const songDuration = chartData[chartData.length - 1][1]\n const distanceWeightFunction = createDistanceWeightFunction(\n songDuration * smoothPeriodPercentage,\n weightFunctionSteepness\n )\n\n for (let i = 0.0; i < resolution; i += 1.0) {\n const songTime = (songDuration * i) / (resolution - 1)\n\n let sum = 0\n let divider = 0\n\n for (let j = 0.0; j < chartData.length; j += 1.0) {\n const item = chartData[j]\n const weight = distanceWeightFunction.getWeight(item[1] - songTime)\n\n sum += item[0] * weight\n divider += weight\n }\n\n if (divider === 0) continue\n const value = 100 + (sum / divider) * 15\n data.push(value)\n }\n\n return data\n}\n\n// get score Statics\nexport default function ScoreGraph({\n scoreId,\n scoreInfo,\n statistic,\n bsor,\n height,\n width,\n}: {\n scoreId: number\n scoreInfo: Score\n statistic: any\n bsor: BSOR\n height: number\n width: number\n}) {\n const canvas = createCanvas(width * 4, height * 4)\n\n const setupChart = (\n canvas: any,\n chartData: any,\n underswingsData: any,\n beatSavior: any\n ) => {\n if (!canvas || !chartData || !Object.keys(chartData).length) return\n\n const title =\n underswingsData?.noUnderswingsScore > underswingsData?.score\n ? `Lost by underswings: ${formatNumber(underswingsData.noUnderswingsScore - underswingsData.score, 0)}pts, ${formatNumber(\n underswingsData.noUnderswingsAcc - underswingsData.acc,\n 2\n )}% acc` +\n (underswingsData?.noUnderswingsPp &&\n underswingsData?.noUnderswingsPp > underswingsData?.pp\n ? `, ${formatNumber(underswingsData.noUnderswingsPp - underswingsData.pp, 2)}pp`\n : '')\n : null\n\n const labels = chartData.times.map(timeToLabel)\n\n const minMaxCounter = createMinMaxCounter(0, 115, 1.0)\n\n const hands = [] as any\n if (beatSavior?.stats?.accLeft) {\n hands.push('red')\n }\n if (beatSavior?.stats?.accRight) {\n hands.push('blue')\n }\n if (hands.length == 2) {\n hands.push('total')\n }\n\n for (let i = 0; i < chartData.times.length; i++) {\n hands.forEach((saberType: any) => {\n minMaxCounter.update(chartData.realScoreBySaber[saberType][i])\n minMaxCounter.update(chartData.fullSwingBySaber[saberType][i])\n })\n }\n let datasets = [] as any[]\n if (beatSavior?.stats?.accLeft) {\n datasets.push({\n yAxisID: 'score',\n label: 'Accuracy (left)',\n data: chartData.fullSwingBySaber.red,\n type: 'line',\n borderColor: '#ee5555',\n backgroundColor: '#ee5555',\n borderWidth: 8,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 3,\n })\n datasets.push({\n yAxisID: 'score',\n label: 'Underswing (left)',\n data: chartData.realScoreBySaber.red,\n type: 'line',\n fill: '-1',\n borderColor: '#ee555555',\n backgroundColor: '#ee555555',\n borderWidth: 2,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 4,\n })\n }\n\n if (beatSavior?.stats?.accRight) {\n datasets.push({\n yAxisID: 'score',\n label: 'Accuracy (right)',\n data: chartData.fullSwingBySaber.blue,\n type: 'line',\n borderColor: '#5555ee',\n backgroundColor: '#5555ee',\n borderWidth: 8,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 5,\n })\n datasets.push({\n yAxisID: 'score',\n label: 'Underswing (right)',\n data: chartData.realScoreBySaber.blue,\n type: 'line',\n fill: '-1',\n borderColor: '#5555ee55',\n backgroundColor: '#5555ee55',\n borderWidth: 2,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 6,\n })\n }\n\n datasets = datasets.concat([\n {\n yAxisID: 'score',\n label: 'Accuracy',\n data: chartData.fullSwingBySaber.total,\n type: 'line',\n borderColor: 'white',\n backgroundColor: 'white',\n borderWidth: 8,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 1,\n },\n {\n yAxisID: 'score',\n label: 'Underswing',\n data: chartData.realScoreBySaber.total,\n type: 'line',\n fill: '-1',\n borderColor: '#aaaaaa55',\n backgroundColor: '#aaaaaa55',\n borderWidth: 2,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 2,\n },\n {\n yAxisID: 'score',\n label: 'Score',\n data: chartData.realScoreBySaber.total,\n type: 'line',\n borderColor: '#aaaaaa',\n backgroundColor: '#aaaaaa',\n borderWidth: 8,\n pointRadius: 0,\n cubicInterpolationMode: 'monotone',\n tension: 0.4,\n spanGaps: true,\n order: 0,\n },\n ])\n\n new Chart(canvas, {\n data: { labels, datasets },\n options: {\n responsive: false,\n devicePixelRatio: 1,\n maintainAspectRatio: false,\n plugins: {\n legend: {\n display: false,\n },\n title: {\n display: !!title?.length,\n text: title as any,\n color: 'white',\n font: {\n weight: 'normal',\n size: 60,\n },\n position: 'bottom',\n padding: { top: 5, bottom: 0 },\n },\n tooltip: {\n callbacks: {\n title(tooltipItems) {\n const item = tooltipItems[0]\n const labels = item.chart.data.labels as any[]\n return labels[item.dataIndex] + ' (10 seconds average)'\n },\n label(ctx: any) {\n const datasetLabel = ctx.dataset.label\n\n let percentage\n let value\n\n switch (datasetLabel) {\n case 'Underswing (left)':\n value =\n ctx.raw - chartData.fullSwingBySaber.red[ctx.dataIndex]\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value, 1)} (${formatNumber(percentage * 100, 2)}%)`\n case 'Underswing (right)':\n value =\n ctx.raw - chartData.fullSwingBySaber.blue[ctx.dataIndex]\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value, 1)} (${formatNumber(percentage * 100, 2)}%)`\n case 'Underswing':\n value =\n ctx.raw - chartData.fullSwingBySaber.total[ctx.dataIndex]\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value, 1)} (${formatNumber(percentage * 100, 2)}%)`\n case 'Score':\n value = ctx.raw\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value, 1)} (${formatNumber(percentage * 100, 2)}%)`\n default:\n value = ctx.raw\n percentage = value / 115.0\n return `${datasetLabel}: ${formatNumber(value - 100.0, 1)} (${formatNumber(percentage * 100, 2)}%)`\n }\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n autoSkip: true,\n autoSkipPadding: 4,\n color: 'white',\n font: {\n weight: 'normal',\n size: 60,\n },\n },\n },\n y: {\n display: true,\n min: minMaxCounter.minValue,\n max: minMaxCounter.maxValue,\n ticks: {\n autoSkip: true,\n autoSkipPadding: 4,\n color: 'white',\n font: {\n weight: 'normal',\n size: 60,\n },\n },\n },\n score: {\n display: false,\n min: minMaxCounter.minValue,\n max: minMaxCounter.maxValue,\n ticks: {\n autoSkip: true,\n autoSkipPadding: 4,\n color: 'white',\n },\n },\n },\n },\n })\n }\n const beatSavior = getStatistic(scoreInfo, scoreId, statistic)\n const replayAccGraphs = processAccGraphs(bsor)\n const underswingsData = processUnderswings(bsor)\n setupChart(canvas, replayAccGraphs, underswingsData, beatSavior)\n const dataURL = canvas.toDataURL('image/png')\n return (\n <>\n <div>\n <img src={dataURL} width={width} height={height} />\n </div>\n </>\n )\n}\n"],"mappings":"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","names":["canvas","underswingsData","beatSavior","Chart","labels","getStatistic","React"]}
|
@@ -1,6 +1,8 @@
|
|
1
|
+
var __create = Object.create;
|
1
2
|
var __defProp = Object.defineProperty;
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
4
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
7
|
var __export = (target, all) => {
|
6
8
|
for (var name in all)
|
@@ -14,12 +16,21 @@ var __copyProps = (to, from, except, desc) => {
|
|
14
16
|
}
|
15
17
|
return to;
|
16
18
|
};
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
25
|
+
mod
|
26
|
+
));
|
17
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
18
28
|
var skill_graph_exports = {};
|
19
29
|
__export(skill_graph_exports, {
|
20
30
|
default: () => SkillGraph
|
21
31
|
});
|
22
32
|
module.exports = __toCommonJS(skill_graph_exports);
|
33
|
+
var import_react = __toESM(require("react"));
|
23
34
|
const getPoint = (center, edgePoint, edgeFactor, pointFactor) => {
|
24
35
|
const factorY = (center.y - edgePoint.y) / edgeFactor;
|
25
36
|
const factorX = (center.x - edgePoint.x) / edgeFactor;
|
@@ -54,14 +65,14 @@ function SkillGraph({
|
|
54
65
|
const PA = getPoint(centerPoint, edgePointA, base, factorA);
|
55
66
|
const PB = getPoint(centerPoint, edgePointB, base, factorB);
|
56
67
|
const PC = getPoint(centerPoint, edgePointC, base, factorC);
|
57
|
-
return /* @__PURE__ */
|
68
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
|
58
69
|
"svg",
|
59
70
|
{
|
60
71
|
height: "145",
|
61
72
|
viewBox: `0 0 125 125`,
|
62
73
|
xmlns: "http://www.w3.org/2000/svg"
|
63
74
|
},
|
64
|
-
/* @__PURE__ */
|
75
|
+
/* @__PURE__ */ import_react.default.createElement(
|
65
76
|
"circle",
|
66
77
|
{
|
67
78
|
cx: centerPoint.x,
|
@@ -71,8 +82,8 @@ function SkillGraph({
|
|
71
82
|
filter: "url(#blur)"
|
72
83
|
}
|
73
84
|
),
|
74
|
-
/* @__PURE__ */
|
75
|
-
/* @__PURE__ */
|
85
|
+
/* @__PURE__ */ import_react.default.createElement("circle", { cx: PA.x, cy: PA.y }),
|
86
|
+
/* @__PURE__ */ import_react.default.createElement(
|
76
87
|
"text",
|
77
88
|
{
|
78
89
|
x: edgePointA.x - 10,
|
@@ -82,7 +93,7 @@ function SkillGraph({
|
|
82
93
|
},
|
83
94
|
"Acc"
|
84
95
|
),
|
85
|
-
/* @__PURE__ */
|
96
|
+
/* @__PURE__ */ import_react.default.createElement(
|
86
97
|
"text",
|
87
98
|
{
|
88
99
|
x: edgePointA.x - 20,
|
@@ -93,7 +104,7 @@ function SkillGraph({
|
|
93
104
|
(factorA * 100).toFixed(2),
|
94
105
|
"%"
|
95
106
|
),
|
96
|
-
/* @__PURE__ */
|
107
|
+
/* @__PURE__ */ import_react.default.createElement(
|
97
108
|
"text",
|
98
109
|
{
|
99
110
|
x: edgePointB.x - 6,
|
@@ -103,7 +114,7 @@ function SkillGraph({
|
|
103
114
|
},
|
104
115
|
"Tech"
|
105
116
|
),
|
106
|
-
/* @__PURE__ */
|
117
|
+
/* @__PURE__ */ import_react.default.createElement(
|
107
118
|
"text",
|
108
119
|
{
|
109
120
|
x: edgePointB.x - 6,
|
@@ -114,7 +125,7 @@ function SkillGraph({
|
|
114
125
|
(factorB * 100).toFixed(2),
|
115
126
|
"%"
|
116
127
|
),
|
117
|
-
/* @__PURE__ */
|
128
|
+
/* @__PURE__ */ import_react.default.createElement(
|
118
129
|
"text",
|
119
130
|
{
|
120
131
|
x: edgePointC.x - 6,
|
@@ -124,7 +135,7 @@ function SkillGraph({
|
|
124
135
|
},
|
125
136
|
"Pass"
|
126
137
|
),
|
127
|
-
/* @__PURE__ */
|
138
|
+
/* @__PURE__ */ import_react.default.createElement(
|
128
139
|
"text",
|
129
140
|
{
|
130
141
|
x: edgePointC.x - 8,
|
@@ -135,19 +146,19 @@ function SkillGraph({
|
|
135
146
|
(factorC * 100).toFixed(2),
|
136
147
|
"%"
|
137
148
|
),
|
138
|
-
/* @__PURE__ */
|
139
|
-
/* @__PURE__ */
|
140
|
-
/* @__PURE__ */
|
141
|
-
/* @__PURE__ */
|
142
|
-
/* @__PURE__ */
|
143
|
-
/* @__PURE__ */
|
149
|
+
/* @__PURE__ */ import_react.default.createElement("circle", { cx: PB.x, cy: PB.y }),
|
150
|
+
/* @__PURE__ */ import_react.default.createElement("circle", { cx: PC.x, cy: PC.y }),
|
151
|
+
/* @__PURE__ */ import_react.default.createElement("line", { x1: PA.x, y1: PA.y, x2: PC.x, y2: PC.y }),
|
152
|
+
/* @__PURE__ */ import_react.default.createElement("line", { x1: PA.x, y1: PA.y, x2: PB.x, y2: PB.y }),
|
153
|
+
/* @__PURE__ */ import_react.default.createElement("line", { x1: PC.x, y1: PC.y, x2: PB.x, y2: PB.y }),
|
154
|
+
/* @__PURE__ */ import_react.default.createElement(
|
144
155
|
"polygon",
|
145
156
|
{
|
146
157
|
points: `${PA.x},${PA.y} ${PB.x},${PB.y} ${PC.x},${PC.y}`,
|
147
158
|
fill: "url(#gradient)"
|
148
159
|
}
|
149
160
|
),
|
150
|
-
/* @__PURE__ */
|
161
|
+
/* @__PURE__ */ import_react.default.createElement("defs", null, /* @__PURE__ */ import_react.default.createElement(
|
151
162
|
"linearGradient",
|
152
163
|
{
|
153
164
|
id: "gradient1",
|
@@ -157,7 +168,7 @@ function SkillGraph({
|
|
157
168
|
y2: "100%",
|
158
169
|
opacity: 0
|
159
170
|
},
|
160
|
-
/* @__PURE__ */
|
171
|
+
/* @__PURE__ */ import_react.default.createElement(
|
161
172
|
"stop",
|
162
173
|
{
|
163
174
|
offset: "0%",
|
@@ -167,7 +178,7 @@ function SkillGraph({
|
|
167
178
|
}
|
168
179
|
}
|
169
180
|
),
|
170
|
-
/* @__PURE__ */
|
181
|
+
/* @__PURE__ */ import_react.default.createElement(
|
171
182
|
"stop",
|
172
183
|
{
|
173
184
|
offset: "100%",
|
@@ -177,7 +188,7 @@ function SkillGraph({
|
|
177
188
|
}
|
178
189
|
}
|
179
190
|
)
|
180
|
-
), /* @__PURE__ */
|
191
|
+
), /* @__PURE__ */ import_react.default.createElement(
|
181
192
|
"linearGradient",
|
182
193
|
{
|
183
194
|
id: "gradient",
|
@@ -187,7 +198,7 @@ function SkillGraph({
|
|
187
198
|
y2: "100%",
|
188
199
|
opacity: 0
|
189
200
|
},
|
190
|
-
/* @__PURE__ */
|
201
|
+
/* @__PURE__ */ import_react.default.createElement(
|
191
202
|
"stop",
|
192
203
|
{
|
193
204
|
offset: "0%",
|
@@ -197,7 +208,7 @@ function SkillGraph({
|
|
197
208
|
}
|
198
209
|
}
|
199
210
|
),
|
200
|
-
/* @__PURE__ */
|
211
|
+
/* @__PURE__ */ import_react.default.createElement(
|
201
212
|
"stop",
|
202
213
|
{
|
203
214
|
offset: "100%",
|
@@ -207,7 +218,7 @@ function SkillGraph({
|
|
207
218
|
}
|
208
219
|
}
|
209
220
|
)
|
210
|
-
), /* @__PURE__ */
|
221
|
+
), /* @__PURE__ */ import_react.default.createElement("filter", { id: "blur" }, /* @__PURE__ */ import_react.default.createElement("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "1" })))
|
211
222
|
));
|
212
223
|
}
|
213
224
|
//# sourceMappingURL=skill-graph.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/components/skill-graph.tsx"],"sourcesContent":["
|
1
|
+
{"version":3,"sources":["../../../../src/components/components/skill-graph.tsx"],"sourcesContent":["import React from 'react'\ninterface Point {\n x: number\n y: number\n}\n\nconst getPoint = (\n center: Point,\n edgePoint: Point,\n edgeFactor: number,\n pointFactor: number\n) => {\n const factorY = (center.y - edgePoint.y) / edgeFactor\n const factorX = (center.x - edgePoint.x) / edgeFactor\n return {\n x: center.x - pointFactor * factorX,\n y: center.y - pointFactor * factorY,\n }\n}\n\nexport default function SkillGraph({\n factorA = 0.4,\n factorB = 0.2,\n factorC = 0.2,\n}: {\n factorA?: number\n factorB?: number\n factorC?: number\n}) {\n const base = 0.4\n const sqrt3 = Math.sqrt(3)\n const centerPoint = {\n x: 60,\n y: 80 / sqrt3 + 10,\n }\n const edgePointA = {\n x: 20,\n y: 40 / sqrt3 + 10,\n }\n\n const edgePointB = {\n x: 100,\n y: 40 / sqrt3 + 10,\n }\n\n const edgePointC = {\n x: 60,\n y: 160 / sqrt3 + 10,\n }\n\n const PA = getPoint(centerPoint, edgePointA, base, factorA)\n const PB = getPoint(centerPoint, edgePointB, base, factorB)\n const PC = getPoint(centerPoint, edgePointC, base, factorC)\n // 50,78 90,10 10,10\n return (\n <>\n <svg\n height=\"145\"\n viewBox={`0 0 125 125`}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx={centerPoint.x}\n cy={centerPoint.y}\n r={80 / sqrt3}\n className=\"fill-gray-100/30\"\n filter=\"url(#blur)\"\n />\n {/* <polygon points={`${edgePointA.x},${edgePointA.y} ${edgePointB.x},${edgePointB.y} ${edgePointC.x},${edgePointC.y}`}\n className=\"fill-gray-300\"\n /> */}\n <circle cx={PA.x} cy={PA.y} />\n <text\n x={edgePointA.x - 10}\n y={edgePointA.y}\n fill=\"url(#gradient1)\"\n className=\"text-[8px] font-bold text-white\"\n >\n Acc\n </text>\n <text\n x={edgePointA.x - 20}\n y={edgePointA.y + 10}\n fill=\"url(#gradient1)\"\n className=\"text-[8px] font-bold text-white\"\n >\n {(factorA * 100).toFixed(2)}%\n </text>\n <text\n x={edgePointB.x - 6}\n y={edgePointB.y}\n fill=\"url(#gradient1)\"\n className=\"text-[8px] font-bold text-white\"\n >\n Tech\n </text>\n <text\n x={edgePointB.x - 6}\n y={edgePointB.y + 8}\n fill=\"url(#gradient1)\"\n className=\"text-[8px] font-bold text-white\"\n >\n {(factorB * 100).toFixed(2)}%\n </text>\n <text\n x={edgePointC.x - 6}\n y={edgePointC.y + 2}\n fill=\"url(#gradient1)\"\n className=\"text-[8px] font-bold text-white\"\n >\n Pass\n </text>\n <text\n x={edgePointC.x - 8}\n y={edgePointC.y + 12}\n fill=\"url(#gradient1)\"\n className=\"text-[8px] font-bold text-white\"\n >\n {(factorC * 100).toFixed(2)}%\n </text>\n {/* 数据点b */}\n <circle cx={PB.x} cy={PB.y} />\n {/* 数据点c */}\n <circle cx={PC.x} cy={PC.y} />\n\n <line x1={PA.x} y1={PA.y} x2={PC.x} y2={PC.y} />\n <line x1={PA.x} y1={PA.y} x2={PB.x} y2={PB.y} />\n <line x1={PC.x} y1={PC.y} x2={PB.x} y2={PB.y} />\n <polygon\n points={`${PA.x},${PA.y} ${PB.x},${PB.y} ${PC.x},${PC.y}`}\n fill=\"url(#gradient)\"\n />\n <defs>\n <linearGradient\n id=\"gradient1\"\n x1=\"0%\"\n y1=\"0%\"\n x2=\"100%\"\n y2=\"100%\"\n opacity={0}\n >\n <stop\n offset=\"0%\"\n style={{\n stopColor: 'rgb(252 165 165)',\n stopOpacity: 1,\n }}\n />\n <stop\n offset=\"100%\"\n style={{\n stopColor: 'rgb(147 197 253)',\n stopOpacity: 1,\n }}\n />\n </linearGradient>\n <linearGradient\n id=\"gradient\"\n x1=\"0%\"\n y1=\"0%\"\n x2=\"100%\"\n y2=\"100%\"\n opacity={0}\n >\n <stop\n offset=\"0%\"\n style={{\n stopColor: 'red',\n stopOpacity: 0.3,\n }}\n />\n <stop\n offset=\"100%\"\n style={{\n stopColor: 'blue',\n stopOpacity: 0.4,\n }}\n />\n </linearGradient>\n <filter id=\"blur\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"1\" />\n </filter>\n </defs>\n </svg>\n </>\n )\n}\n"],"mappings":"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","names":["React"]}
|
@@ -1,6 +1,8 @@
|
|
1
|
+
var __create = Object.create;
|
1
2
|
var __defProp = Object.defineProperty;
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
4
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
7
|
var __export = (target, all) => {
|
6
8
|
for (var name in all)
|
@@ -14,19 +16,28 @@ var __copyProps = (to, from, except, desc) => {
|
|
14
16
|
}
|
15
17
|
return to;
|
16
18
|
};
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
25
|
+
mod
|
26
|
+
));
|
17
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
18
28
|
var socre_badge_exports = {};
|
19
29
|
__export(socre_badge_exports, {
|
20
30
|
default: () => ScoreBadge
|
21
31
|
});
|
22
32
|
module.exports = __toCommonJS(socre_badge_exports);
|
33
|
+
var import_react = __toESM(require("react"));
|
23
34
|
var import_tw_join = require("../utils/tw-join.js");
|
24
35
|
function ScoreBadge({
|
25
36
|
name,
|
26
37
|
count,
|
27
38
|
className
|
28
39
|
}) {
|
29
|
-
return /* @__PURE__ */
|
40
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
|
30
41
|
"div",
|
31
42
|
{
|
32
43
|
className: (0, import_tw_join.twJoin)(
|
@@ -35,8 +46,8 @@ function ScoreBadge({
|
|
35
46
|
className
|
36
47
|
)
|
37
48
|
},
|
38
|
-
/* @__PURE__ */
|
39
|
-
/* @__PURE__ */
|
49
|
+
/* @__PURE__ */ import_react.default.createElement("span", { className: "border-r-0.5 font-semibold m-auto text-center rounded-l-lg w-8" }, name),
|
50
|
+
/* @__PURE__ */ import_react.default.createElement("span", { className: "bg-transparent m-auto text-ellipsis line-clamp-1" }, count)
|
40
51
|
));
|
41
52
|
}
|
42
53
|
//# sourceMappingURL=socre-badge.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/components/socre-badge.tsx"],"sourcesContent":["import { twJoin } from '../utils/tw-join'\n\nexport default function ScoreBadge({\n name,\n count,\n className,\n}: {\n name: string\n count: string | number\n className?: string\n}) {\n return (\n <>\n <div\n className={twJoin(\n 'flex items-center self-center rounded-md w-18',\n 'bg-gradient-to-r bg-clip-text text-transparent from-blue-300 to-red-300',\n className\n )}\n >\n <span className=\"border-r-0.5 font-semibold m-auto text-center rounded-l-lg w-8\">\n {name}\n </span>\n <span className=\"bg-transparent m-auto text-ellipsis line-clamp-1\">\n {count}\n </span>\n </div>\n </>\n )\n}\n"],"mappings":"
|
1
|
+
{"version":3,"sources":["../../../../src/components/components/socre-badge.tsx"],"sourcesContent":["import React from 'react'\nimport { twJoin } from '../utils/tw-join'\n\nexport default function ScoreBadge({\n name,\n count,\n className,\n}: {\n name: string\n count: string | number\n className?: string\n}) {\n return (\n <>\n <div\n className={twJoin(\n 'flex items-center self-center rounded-md w-18',\n 'bg-gradient-to-r bg-clip-text text-transparent from-blue-300 to-red-300',\n className\n )}\n >\n <span className=\"border-r-0.5 font-semibold m-auto text-center rounded-l-lg w-8\">\n {name}\n </span>\n <span className=\"bg-transparent m-auto text-ellipsis line-clamp-1\">\n {count}\n </span>\n </div>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,qBAAuB;AAER,SAAR,WAA4B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SACE,6BAAAA,QAAA,2BAAAA,QAAA,gBACE,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,6BAAAA,QAAA,cAAC,UAAK,WAAU,oEACb,IACH;AAAA,IACA,6BAAAA,QAAA,cAAC,UAAK,WAAU,sDACb,KACH;AAAA,EACF,CACF;AAEJ;","names":["React"]}
|
@@ -31,40 +31,41 @@ __export(ss_rank_score_item_exports, {
|
|
31
31
|
ScoreItemSkeleton: () => ScoreItemSkeleton
|
32
32
|
});
|
33
33
|
module.exports = __toCommonJS(ss_rank_score_item_exports);
|
34
|
+
var import_react = __toESM(require("react"));
|
34
35
|
var import_dayjs = __toESM(require("dayjs"));
|
35
36
|
var import_flag = __toESM(require("../../components/components/flag.js"));
|
36
37
|
var import_utils = require("../../components/utils/index.js");
|
37
38
|
function SSRankScoreItem(props) {
|
38
|
-
return /* @__PURE__ */
|
39
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
39
40
|
"div",
|
40
41
|
{
|
41
42
|
className: `${props.self ? "gradient-border" : ""} bs-bg-gradient shadow-xl rounded-lg -skew-x-12 w-80 h-20 text-white font-bold flex flex-col p-1 z-10 relative max-w-[300px]`
|
42
43
|
},
|
43
|
-
/* @__PURE__ */
|
44
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "skew-x-12 relative" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center translate-x-2 justify-between" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "w-12 h-12 relative" }, /* @__PURE__ */ import_react.default.createElement(
|
44
45
|
"img",
|
45
46
|
{
|
46
47
|
src: props.avatar,
|
47
48
|
className: "shadow-lg w-12 h-12 rounded-full object-cover"
|
48
49
|
}
|
49
|
-
), /* @__PURE__ */
|
50
|
+
), /* @__PURE__ */ import_react.default.createElement("div", { className: "w-3 h-3 absolute bottom-0 right-3" }, /* @__PURE__ */ import_react.default.createElement(import_flag.default, { flagNationCode: props.countryCode }))), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { className: "line-clamp-1 text-ellipsis max-w-[100px]" }, props.name), /* @__PURE__ */ import_react.default.createElement("span", { className: "flex items-center space-x-1" }, !props.isRegionRank && /* @__PURE__ */ import_react.default.createElement(import_flag.EarchIcon, null), /* @__PURE__ */ import_react.default.createElement("span", null, "# ", props.globalRank)))), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col items-end -translate-x-2 -skew-x-3" }, /* @__PURE__ */ import_react.default.createElement("div", null, (props.acc * 100).toFixed(2), " %"), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "space-x-1" }, props.modifiers.split(",").map((it) => /* @__PURE__ */ import_react.default.createElement("span", { key: it }, it))), /* @__PURE__ */ import_react.default.createElement("div", null, (0, import_utils.numberWithCommas)(props.score))))), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center justify-between mt-0 px-4 -translate-x-4" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-1 items-center justify-start -skew-x-2 text-xs opacity-60" }, /* @__PURE__ */ import_react.default.createElement("div", null, (0, import_utils.formatDate)(
|
50
51
|
(0, import_dayjs.default)(props.date * 1e3).toDate(),
|
51
52
|
"YY \u5E74 MM \u6708 DD \u65E5"
|
52
|
-
)))), /* @__PURE__ */
|
53
|
+
)))), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-1 items-center justify-start translate-x-6 text-xl font-bold text-green-300" }, /* @__PURE__ */ import_react.default.createElement("div", null, " ", props.pp.toFixed(2), " PP")))))
|
53
54
|
);
|
54
55
|
}
|
55
56
|
function ScoreItemSkeleton({ isRegionRank }) {
|
56
|
-
return /* @__PURE__ */
|
57
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
57
58
|
"div",
|
58
59
|
{
|
59
60
|
className: `bs-bg-gradient shadow-xl rounded-lg -skew-x-12 w-80 h-20 text-white font-bold flex flex-col p-1 z-10 relative max-w-[300px]`
|
60
61
|
},
|
61
|
-
/* @__PURE__ */
|
62
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "skew-x-12 relative" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center translate-x-2 justify-between" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "w-12 h-12 relative" }, /* @__PURE__ */ import_react.default.createElement(
|
62
63
|
"img",
|
63
64
|
{
|
64
65
|
src: `https://avatar.iran.liara.run/public`,
|
65
66
|
className: "shadow-lg w-12 h-12 rounded-full object-cover"
|
66
67
|
}
|
67
|
-
)), /* @__PURE__ */
|
68
|
+
)), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { className: "line-clamp-1 text-ellipsis max-w-[100px]" }, "\u865A\u4F4D\u4EE5\u5F85"), /* @__PURE__ */ import_react.default.createElement("span", { className: "flex items-center space-x-1" }, !isRegionRank && /* @__PURE__ */ import_react.default.createElement(import_flag.EarchIcon, null), /* @__PURE__ */ import_react.default.createElement("span", null, "# 0 ")))), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col items-end -translate-x-2 -skew-x-3" }, /* @__PURE__ */ import_react.default.createElement("div", null, "0.00 %"), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "space-x-1" }, " "), /* @__PURE__ */ import_react.default.createElement("div", null, "000,000")))), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center justify-between mt-0 px-4 -translate-x-4" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-1 items-center justify-start -skew-x-2 text-xs opacity-60" }, /* @__PURE__ */ import_react.default.createElement("div", null, "00 \u5E74 00 \u6708 00 \u65E5")), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-1 items-center justify-start translate-x-6 text-xl font-bold text-green-300" }, /* @__PURE__ */ import_react.default.createElement("div", null, " 0.00 PP"))))
|
68
69
|
);
|
69
70
|
}
|
70
71
|
// Annotate the CommonJS export names for ESM import in node:
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/components/ss-rank-score-item.tsx"],"sourcesContent":["import dayjs from 'dayjs'\nimport Flags, { EarchIcon } from '@/components/components/flag'\nimport { formatDate, numberWithCommas } from '@/components/utils'\n\ninterface ScoreItemProps {\n name: string\n avatar: string\n globalRank: number\n countryCode: string\n isRegionRank: boolean\n score: number\n modifiers: string\n acc: number\n pp: number\n date: number\n self: boolean\n}\n\nexport function SSRankScoreItem(props: ScoreItemProps) {\n return (\n <div\n className={`${props.self ? 'gradient-border' : ''} bs-bg-gradient shadow-xl rounded-lg -skew-x-12 w-80 h-20 text-white font-bold flex flex-col p-1 z-10 relative max-w-[300px]`}\n >\n <div className=\"skew-x-12 relative\">\n <div className=\"flex items-center translate-x-2 justify-between\">\n <div className=\"flex gap-2\">\n <div className={'w-12 h-12 relative'}>\n <img\n src={props.avatar}\n className=\"shadow-lg w-12 h-12 rounded-full object-cover\"\n />\n <div className={'w-3 h-3 absolute bottom-0 right-3'}>\n <Flags flagNationCode={props.countryCode} />\n </div>\n </div>\n <div>\n <div className={'line-clamp-1 text-ellipsis max-w-[100px]'}>\n {props.name}\n </div>\n <span className=\"flex items-center space-x-1\">\n {!props.isRegionRank && <EarchIcon />}\n <span># {props.globalRank}</span>\n </span>\n </div>\n </div>\n\n <div className=\"flex flex-col items-end -translate-x-2 -skew-x-3\">\n <div>{(props.acc * 100).toFixed(2)} %</div>\n <div className={'flex gap-2'}>\n <div className={'space-x-1'}>\n {props.modifiers.split(',').map((it) => (\n <span key={it}>{it}</span>\n ))}\n </div>\n <div>{numberWithCommas(props.score)}</div>\n </div>\n </div>\n </div>\n <div className=\"flex items-center justify-between mt-0 px-4 -translate-x-4\">\n <div className=\"flex gap-2\">\n <div className=\"flex gap-1 items-center justify-start -skew-x-2 text-xs opacity-60\">\n <div>\n {formatDate(\n dayjs(props.date * 1000).toDate(),\n 'YY 年 MM 月 DD 日'\n )}\n </div>\n </div>\n </div>\n <div>\n <div className=\"flex gap-1 items-center justify-start translate-x-6 text-xl font-bold text-green-300\">\n <div> {props.pp.toFixed(2)} PP</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport function ScoreItemSkeleton({ isRegionRank }: { isRegionRank: boolean }) {\n return (\n <div\n className={`bs-bg-gradient shadow-xl rounded-lg -skew-x-12 w-80 h-20 text-white font-bold flex flex-col p-1 z-10 relative max-w-[300px]`}\n >\n <div className=\"skew-x-12 relative\">\n <div className=\"flex items-center translate-x-2 justify-between\">\n <div className=\"flex gap-2\">\n <div className={'w-12 h-12 relative'}>\n <img\n src={`https://avatar.iran.liara.run/public`}\n className=\"shadow-lg w-12 h-12 rounded-full object-cover\"\n />\n </div>\n <div>\n <div className={'line-clamp-1 text-ellipsis max-w-[100px]'}>\n 虚位以待\n </div>\n <span className=\"flex items-center space-x-1\">\n {!isRegionRank && <EarchIcon />}\n <span># 0 </span>\n </span>\n </div>\n </div>\n\n <div className=\"flex flex-col items-end -translate-x-2 -skew-x-3\">\n <div>0.00 %</div>\n <div className={'flex gap-2'}>\n <div className={'space-x-1'}> </div>\n <div>000,000</div>\n </div>\n </div>\n </div>\n <div className=\"flex items-center justify-between mt-0 px-4 -translate-x-4\">\n <div className=\"flex gap-1 items-center justify-start -skew-x-2 text-xs opacity-60\">\n <div>00 年 00 月 00 日</div>\n </div>\n <div className=\"flex gap-1 items-center justify-start translate-x-6 text-xl font-bold text-green-300\">\n <div> 0.00 PP</div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAiC;AACjC,mBAA6C;AAgBtC,SAAS,gBAAgB,OAAuB;AACrD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,MAAM,OAAO,oBAAoB,EAAE;AAAA;AAAA,IAEjD,
|
1
|
+
{"version":3,"sources":["../../../../src/components/components/ss-rank-score-item.tsx"],"sourcesContent":["import React from 'react'\nimport dayjs from 'dayjs'\nimport Flags, { EarchIcon } from '@/components/components/flag'\nimport { formatDate, numberWithCommas } from '@/components/utils'\n\ninterface ScoreItemProps {\n name: string\n avatar: string\n globalRank: number\n countryCode: string\n isRegionRank: boolean\n score: number\n modifiers: string\n acc: number\n pp: number\n date: number\n self: boolean\n}\n\nexport function SSRankScoreItem(props: ScoreItemProps) {\n return (\n <div\n className={`${props.self ? 'gradient-border' : ''} bs-bg-gradient shadow-xl rounded-lg -skew-x-12 w-80 h-20 text-white font-bold flex flex-col p-1 z-10 relative max-w-[300px]`}\n >\n <div className=\"skew-x-12 relative\">\n <div className=\"flex items-center translate-x-2 justify-between\">\n <div className=\"flex gap-2\">\n <div className={'w-12 h-12 relative'}>\n <img\n src={props.avatar}\n className=\"shadow-lg w-12 h-12 rounded-full object-cover\"\n />\n <div className={'w-3 h-3 absolute bottom-0 right-3'}>\n <Flags flagNationCode={props.countryCode} />\n </div>\n </div>\n <div>\n <div className={'line-clamp-1 text-ellipsis max-w-[100px]'}>\n {props.name}\n </div>\n <span className=\"flex items-center space-x-1\">\n {!props.isRegionRank && <EarchIcon />}\n <span># {props.globalRank}</span>\n </span>\n </div>\n </div>\n\n <div className=\"flex flex-col items-end -translate-x-2 -skew-x-3\">\n <div>{(props.acc * 100).toFixed(2)} %</div>\n <div className={'flex gap-2'}>\n <div className={'space-x-1'}>\n {props.modifiers.split(',').map((it) => (\n <span key={it}>{it}</span>\n ))}\n </div>\n <div>{numberWithCommas(props.score)}</div>\n </div>\n </div>\n </div>\n <div className=\"flex items-center justify-between mt-0 px-4 -translate-x-4\">\n <div className=\"flex gap-2\">\n <div className=\"flex gap-1 items-center justify-start -skew-x-2 text-xs opacity-60\">\n <div>\n {formatDate(\n dayjs(props.date * 1000).toDate(),\n 'YY 年 MM 月 DD 日'\n )}\n </div>\n </div>\n </div>\n <div>\n <div className=\"flex gap-1 items-center justify-start translate-x-6 text-xl font-bold text-green-300\">\n <div> {props.pp.toFixed(2)} PP</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport function ScoreItemSkeleton({ isRegionRank }: { isRegionRank: boolean }) {\n return (\n <div\n className={`bs-bg-gradient shadow-xl rounded-lg -skew-x-12 w-80 h-20 text-white font-bold flex flex-col p-1 z-10 relative max-w-[300px]`}\n >\n <div className=\"skew-x-12 relative\">\n <div className=\"flex items-center translate-x-2 justify-between\">\n <div className=\"flex gap-2\">\n <div className={'w-12 h-12 relative'}>\n <img\n src={`https://avatar.iran.liara.run/public`}\n className=\"shadow-lg w-12 h-12 rounded-full object-cover\"\n />\n </div>\n <div>\n <div className={'line-clamp-1 text-ellipsis max-w-[100px]'}>\n 虚位以待\n </div>\n <span className=\"flex items-center space-x-1\">\n {!isRegionRank && <EarchIcon />}\n <span># 0 </span>\n </span>\n </div>\n </div>\n\n <div className=\"flex flex-col items-end -translate-x-2 -skew-x-3\">\n <div>0.00 %</div>\n <div className={'flex gap-2'}>\n <div className={'space-x-1'}> </div>\n <div>000,000</div>\n </div>\n </div>\n </div>\n <div className=\"flex items-center justify-between mt-0 px-4 -translate-x-4\">\n <div className=\"flex gap-1 items-center justify-start -skew-x-2 text-xs opacity-60\">\n <div>00 年 00 月 00 日</div>\n </div>\n <div className=\"flex gap-1 items-center justify-start translate-x-6 text-xl font-bold text-green-300\">\n <div> 0.00 PP</div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","names":["React","Flags","dayjs"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/components/ss-score-item.tsx"],"sourcesContent":["import { BarChart, Key, Star, Wrench } from 'lucide-react'\nimport { diffConv, formatRelativeTimeByDay } from '../utils'\nimport React from 'react'\nimport { ScoreSaberItem } from '@/
|
1
|
+
{"version":3,"sources":["../../../../src/components/components/ss-score-item.tsx"],"sourcesContent":["import { BarChart, Key, Star, Wrench } from 'lucide-react'\nimport { diffConv, formatRelativeTimeByDay } from '../utils'\nimport React from 'react'\nimport type { ScoreSaberItem } from '@/services/api/interfaces/scoresaber'\n\nconst getModifiers = (modifiers: string) => {\n return modifiers ? modifiers.split(',') : []\n}\nexport default function SsScoreItem({\n scoreItem,\n}: {\n scoreItem: ScoreSaberItem\n}) {\n return (\n <div className={'relative'}>\n <div\n className={\n 'rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-none overflow-hidden'\n }\n >\n <img\n loading={'eager'}\n src={scoreItem.leaderboard.coverImage}\n className={'rounded-md h-20 w-20'}\n />\n <div className={'flex flex-col space-y-1 py-0.5'}>\n <div\n className={\n 'font-semibold text-xs text-ellipsis overflow-hidden line-clamp-1 break-all'\n }\n >\n {scoreItem.leaderboard.songName}\n </div>\n <div\n className={\n 'text-xs flex items-center space-x-2 *:flex *:items-center *:space-x-1 '\n }\n >\n <div>\n <span>\n <BarChart className={'w-3 h-3'} />\n </span>\n <span>\n {diffConv(scoreItem.leaderboard.difficulty.difficultyRaw)}\n </span>\n </div>\n <div>\n <span>\n <Star className={'w-3 h-3'} />\n </span>\n <span>{scoreItem.leaderboard.stars} </span>\n </div>\n <div>\n <span>\n <Key className={'w-3 h-3'} />\n </span>\n <span>{scoreItem.mapId ?? 'unknown'}</span>\n </div>\n </div>\n <div className={'flex space-x-2 text-xs'}>\n <span>\n {(\n (scoreItem.score.baseScore / scoreItem.leaderboard.maxScore) *\n 100\n ).toFixed(2)}\n %\n </span>\n <span className={'text-orange-200'}>\n {scoreItem.score.pp.toFixed(1)}\n PP\n </span>\n <span className={'opacity-70'}>\n {formatRelativeTimeByDay(scoreItem.score.timeSet)}\n </span>\n </div>\n {getModifiers(scoreItem.score.modifiers).length > 0 && (\n <div className=\"text-xs flex flex-wrap space-x-2 items-center\">\n <Wrench className=\"h-3 w-3\" />\n {getModifiers(scoreItem.score.modifiers).map((modifier) => (\n <span key={modifier}>{modifier}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n <div className=\"absolute right-1 bottom-1 text-white flex text-xs space-x-1 items-center\">\n {scoreItem.score.fullCombo && (\n <span className=\"from-blue-300 to-red-300 bg-gradient-to-r bg-clip-text text-transparent\">\n FC\n </span>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA4C;AAC5C,mBAAkD;AAClD,mBAAkB;AAGlB,MAAM,eAAe,CAAC,cAAsB;AAC1C,SAAO,YAAY,UAAU,MAAM,GAAG,IAAI,CAAC;AAC7C;AACe,SAAR,YAA6B;AAAA,EAClC;AACF,GAEG;AAZH;AAaE,SACE,6BAAAA,QAAA,cAAC,SAAI,WAAW,cACd,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WACE;AAAA;AAAA,IAGF,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,KAAK,UAAU,YAAY;AAAA,QAC3B,WAAW;AAAA;AAAA,IACb;AAAA,IACA,6BAAAA,QAAA,cAAC,SAAI,WAAW,oCACd,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WACE;AAAA;AAAA,MAGD,UAAU,YAAY;AAAA,IACzB,GACA,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WACE;AAAA;AAAA,MAGF,6BAAAA,QAAA,cAAC,aACC,6BAAAA,QAAA,cAAC,cACC,6BAAAA,QAAA,cAAC,gCAAS,WAAW,WAAW,CAClC,GACA,6BAAAA,QAAA,cAAC,kBACE,uBAAS,UAAU,YAAY,WAAW,aAAa,CAC1D,CACF;AAAA,MACA,6BAAAA,QAAA,cAAC,aACC,6BAAAA,QAAA,cAAC,cACC,6BAAAA,QAAA,cAAC,4BAAK,WAAW,WAAW,CAC9B,GACA,6BAAAA,QAAA,cAAC,cAAM,UAAU,YAAY,OAAM,GAAC,CACtC;AAAA,MACA,6BAAAA,QAAA,cAAC,aACC,6BAAAA,QAAA,cAAC,cACC,6BAAAA,QAAA,cAAC,2BAAI,WAAW,WAAW,CAC7B,GACA,6BAAAA,QAAA,cAAC,eAAM,eAAU,UAAV,YAAmB,SAAU,CACtC;AAAA,IACF,GACA,6BAAAA,QAAA,cAAC,SAAI,WAAW,4BACd,6BAAAA,QAAA,cAAC,eAEI,UAAU,MAAM,YAAY,UAAU,YAAY,WACnD,KACA,QAAQ,CAAC,GAAE,GAEf,GACA,6BAAAA,QAAA,cAAC,UAAK,WAAW,qBACd,UAAU,MAAM,GAAG,QAAQ,CAAC,GAAE,IAEjC,GACA,6BAAAA,QAAA,cAAC,UAAK,WAAW,oBACd,sCAAwB,UAAU,MAAM,OAAO,CAClD,CACF,GACC,aAAa,UAAU,MAAM,SAAS,EAAE,SAAS,KAChD,6BAAAA,QAAA,cAAC,SAAI,WAAU,mDACb,6BAAAA,QAAA,cAAC,8BAAO,WAAU,WAAU,GAC3B,aAAa,UAAU,MAAM,SAAS,EAAE,IAAI,CAAC,aAC5C,6BAAAA,QAAA,cAAC,UAAK,KAAK,YAAW,QAAS,CAChC,CACH,CAEJ;AAAA,EACF,GACA,6BAAAA,QAAA,cAAC,SAAI,WAAU,8EACZ,UAAU,MAAM,aACf,6BAAAA,QAAA,cAAC,UAAK,WAAU,6EAA0E,IAE1F,CAEJ,CACF;AAEJ;","names":["React"]}
|
@@ -30,8 +30,8 @@ __export(components_exports, {
|
|
30
30
|
getHtml: () => getHtml
|
31
31
|
});
|
32
32
|
module.exports = __toCommonJS(components_exports);
|
33
|
-
var import_react = __toESM(require("react"));
|
34
33
|
var ReactDOMServer = __toESM(require("react-dom/server"));
|
34
|
+
var import_react = __toESM(require("react"));
|
35
35
|
function App({ children }) {
|
36
36
|
return /* @__PURE__ */ import_react.default.createElement("html", null, /* @__PURE__ */ import_react.default.createElement("head", null, /* @__PURE__ */ import_react.default.createElement("script", { src: "https://cdn.tailwindcss.com" }), /* @__PURE__ */ import_react.default.createElement("title", null, "IMG Render")), /* @__PURE__ */ import_react.default.createElement("body", { className: "bg-transparent" }, children));
|
37
37
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/components/index.tsx"],"sourcesContent":["import
|
1
|
+
{"version":3,"sources":["../../../src/components/index.tsx"],"sourcesContent":["import * as ReactDOMServer from 'react-dom/server'\nimport React from \"react\";\n\nfunction App({ children }: { children?: React.ReactNode }) {\n return (\n <html>\n <head>\n <script src=\"https://cdn.tailwindcss.com\"></script>\n <title>IMG Render</title>\n </head>\n <body className={'bg-transparent'}>{children}</body>\n </html>\n )\n}\n\nexport const getHtml = (child: React.ReactNode) => {\n let res = ReactDOMServer.renderToString(<App>{child}</App>)\n res = ` <!DOCTYPE html>` + res\n return res\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAgC;AAChC,mBAAkB;AAElB,SAAS,IAAI,EAAE,SAAS,GAAmC;AACzD,SACE,6BAAAA,QAAA,cAAC,cACC,6BAAAA,QAAA,cAAC,cACC,6BAAAA,QAAA,cAAC,YAAO,KAAI,+BAA8B,GAC1C,6BAAAA,QAAA,cAAC,eAAM,YAAU,CACnB,GACA,6BAAAA,QAAA,cAAC,UAAK,WAAW,oBAAmB,QAAS,CAC/C;AAEJ;AAEO,MAAM,UAAU,CAAC,UAA2B;AACjD,MAAI,MAAM,eAAe,eAAe,6BAAAA,QAAA,cAAC,WAAK,KAAM,CAAM;AAC1D,QAAM,qBAAqB;AAC3B,SAAO;AACT;","names":["React"]}
|
@@ -47,6 +47,7 @@ __export(bl_player_exports, {
|
|
47
47
|
default: () => BLPlayerPage
|
48
48
|
});
|
49
49
|
module.exports = __toCommonJS(bl_player_exports);
|
50
|
+
var import_react = __toESM(require("react"));
|
50
51
|
var import_getPart = __toESM(require("../utils/bl/getPart.js"));
|
51
52
|
var import_socre_badge = __toESM(require("../components/socre-badge.js"));
|
52
53
|
var import_skill_graph = __toESM(require("../components/skill-graph.js"));
|
@@ -54,7 +55,6 @@ var import_bl_score_item = __toESM(require("../components/bl-score-item.js"));
|
|
54
55
|
var import_flag = __toESM(require("../components/flag.js"));
|
55
56
|
var import_tw_join = require("../utils/tw-join.js");
|
56
57
|
var import_blheadset = require("../utils/bl/blheadset.js");
|
57
|
-
var import_react = __toESM(require("react"));
|
58
58
|
function BLPlayerPage({
|
59
59
|
beatleaderItems: items,
|
60
60
|
user,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/bl-player.tsx"],"sourcesContent":["import getPart from '../utils/bl/getPart'\nimport ScoreBadge from '../components/socre-badge'\nimport SkillGraph from '../components/skill-graph'\nimport BeatLeaderItem from '../components/bl-score-item'\nimport Flags, { EarchIcon } from '../components/flag'\nimport { twJoin } from '../utils/tw-join'\nimport { getHeadsetForHMD } from '../utils/bl/blheadset'\
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/bl-player.tsx"],"sourcesContent":["import React from 'react'\nimport getPart from '../utils/bl/getPart'\nimport ScoreBadge from '../components/socre-badge'\nimport SkillGraph from '../components/skill-graph'\nimport BeatLeaderItem from '../components/bl-score-item'\nimport Flags, { EarchIcon } from '../components/flag'\nimport { twJoin } from '../utils/tw-join'\nimport { getHeadsetForHMD } from '../utils/bl/blheadset'\n\ninterface BLPlayerInfoProps {\n beatleaderItems: any\n user: any\n params?: Record<string, string>\n bg: string\n}\n\nexport default function BLPlayerPage({\n beatleaderItems: items,\n user,\n params,\n bg,\n}: BLPlayerInfoProps) {\n const part = getPart(user)\n const beatleaderItems = items.map((it) => ({\n ...it,\n pinned: it.metadata?.pinnedContexts !== undefined,\n }))\n return (\n <>\n <div\n id={'render-result'}\n key={'render-result'}\n className={\n 'flex flex-col justify-center items-center relative h-[720px] w-[1200px] my-auto'\n }\n >\n <div\n className={\n 'bg-blend-darken h-full w-full left-auto absolute right-auto bg-black/[.6] p-4 text-white rounded-lg flex flex-col space-y-2 z-10'\n }\n >\n <div className={'flex justify-between'}>\n <div className=\"flex space-x-4 pb-2\">\n <img\n src={user.avatar}\n className={'h-36 w-36 rounded-md z-10'}\n loading={'eager'}\n />\n <div className={'flex flex-col justify-between'}>\n <span className={'text-3xl font-bold'}>{user.name}</span>\n <div\n className={'flex space-x-2 text-md font-bold items-center'}\n >\n <span className=\"flex items-center space-x-1\">\n <EarchIcon />\n <span># {user.rank}</span>\n </span>\n <span className=\"flex items-center space-x-1\">\n <Flags flagNationCode={user.country} />\n <span># {user.countryRank}</span>\n </span>\n </div>\n\n <div className=\"flex gap-2 align-items-center \">\n <ScoreBadge\n className=\"w-auto text-white\"\n name={'P'}\n count={user.scoreStats.topPlatform}\n />\n <ScoreBadge\n className=\"w-auto text-white\"\n name={'H'}\n count={getHeadsetForHMD(user.scoreStats.topHMD)}\n />\n <ScoreBadge\n className=\"w-auto text-white\"\n name={'R'}\n count={user.scoreStats.rankedPlayCount}\n />\n </div>\n <div\n className={twJoin(\n 'text-4xl font-bold ',\n ' bg-gradient-to-r bg-clip-text text-transparent from-blue-300 to-red-300',\n 'text-orange-100'\n )}\n >\n {user.pp} PP\n </div>\n </div>\n </div>\n <div className=\"px-3 flex flex-col justify-end items-center grow\">\n {user.badges.length > 0 && (\n <div className=\"grid grid-cols-3 gap-2 justify-self-center align-items-cener justify-items-center mb-auto mt-2\">\n {user.badges.map((badge) => (\n <>\n <img\n alt={badge.description}\n key={badge.id}\n src={badge.image}\n width={'70px'}\n height={'20px'}\n className=\"self-center w-[70px] h-5\"\n ></img>\n </>\n ))}\n </div>\n )}\n\n <div className=\"grid grid-cols-3 gap-2 align-items-center py-2\">\n <ScoreBadge name={'SS+'} count={user.scoreStats.sspPlays} />\n <ScoreBadge name={'SS'} count={user.scoreStats.ssPlays} />\n <ScoreBadge name={'S+'} count={user.scoreStats.spPlays} />\n <ScoreBadge name={'S'} count={user.scoreStats.sPlays} />\n <ScoreBadge name={'A'} count={user.scoreStats.aPlays} />\n </div>\n {/* more badages */}\n </div>\n\n <div className=\"ml-auto mr-4 flex justify-center items-center\">\n <SkillGraph\n factorA={part.accPpPart}\n factorB={part.techPpPart}\n factorC={part.passPpPart}\n />\n </div>\n </div>\n <div className={'grid grid-cols-4 gap-2'}>\n {beatleaderItems.map((item, idx) => (\n <BeatLeaderItem item={item} key={idx} />\n ))}\n </div>\n </div>\n <img\n src={bg}\n className={\n 'inset-0 mx-auto w-full rounded-lg absolute h-full object-center'\n }\n loading={'eager'}\n />\n </div>\n </>\n )\n}\n"],"mappings":"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","names":["getPart","React","Flags","ScoreBadge","SkillGraph","BeatLeaderItem"]}
|
@@ -47,9 +47,9 @@ __export(bl_score_with_rank_exports, {
|
|
47
47
|
default: () => BLRankScore
|
48
48
|
});
|
49
49
|
module.exports = __toCommonJS(bl_score_with_rank_exports);
|
50
|
+
var import_react = __toESM(require("react"));
|
50
51
|
var import_lucide_react = require("lucide-react");
|
51
52
|
var import_scoregraph = __toESM(require("../components/scoregraph.js"));
|
52
|
-
var import_react = __toESM(require("react"));
|
53
53
|
var import_bl_rank_score_item = require("../../components/components/bl-rank-score-item.js");
|
54
54
|
var import_RankDifficulty = require("../../components/components/RankDifficulty.js");
|
55
55
|
var import_avatar = require("../../components/components/base/avatar.js");
|