@tennisvisuals/scoring-visualizations 0.2.1
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/__tests__/LiveEngine.test.d.ts +2 -0
- package/dist/__tests__/LiveEngine.test.d.ts.map +1 -0
- package/dist/__tests__/LiveEngine.test.js +142 -0
- package/dist/__tests__/LiveEngine.test.js.map +1 -0
- package/dist/__tests__/buildEpisodes.test.d.ts +2 -0
- package/dist/__tests__/buildEpisodes.test.d.ts.map +1 -0
- package/dist/__tests__/buildEpisodes.test.js +150 -0
- package/dist/__tests__/buildEpisodes.test.js.map +1 -0
- package/dist/__tests__/extractors.test.d.ts +2 -0
- package/dist/__tests__/extractors.test.d.ts.map +1 -0
- package/dist/__tests__/extractors.test.js +50 -0
- package/dist/__tests__/extractors.test.js.map +1 -0
- package/dist/__tests__/feedMatchUp.test.d.ts +2 -0
- package/dist/__tests__/feedMatchUp.test.d.ts.map +1 -0
- package/dist/__tests__/feedMatchUp.test.js +96 -0
- package/dist/__tests__/feedMatchUp.test.js.map +1 -0
- package/dist/engine/LiveEngine.d.ts +42 -0
- package/dist/engine/LiveEngine.d.ts.map +1 -0
- package/dist/engine/LiveEngine.js +82 -0
- package/dist/engine/LiveEngine.js.map +1 -0
- package/dist/engine/buildSetMap.d.ts +14 -0
- package/dist/engine/buildSetMap.d.ts.map +1 -0
- package/dist/engine/buildSetMap.js +42 -0
- package/dist/engine/buildSetMap.js.map +1 -0
- package/dist/engine/createPlaybackEngine.d.ts +34 -0
- package/dist/engine/createPlaybackEngine.d.ts.map +1 -0
- package/dist/engine/createPlaybackEngine.js +90 -0
- package/dist/engine/createPlaybackEngine.js.map +1 -0
- package/dist/engine/feedMatchUp.d.ts +82 -0
- package/dist/engine/feedMatchUp.d.ts.map +1 -0
- package/dist/engine/feedMatchUp.js +116 -0
- package/dist/engine/feedMatchUp.js.map +1 -0
- package/dist/episodes/buildEpisodes.d.ts +10 -0
- package/dist/episodes/buildEpisodes.d.ts.map +1 -0
- package/dist/episodes/buildEpisodes.js +166 -0
- package/dist/episodes/buildEpisodes.js.map +1 -0
- package/dist/episodes/types.d.ts +45 -0
- package/dist/episodes/types.d.ts.map +1 -0
- package/dist/episodes/types.js +2 -0
- package/dist/episodes/types.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/statistics/index.d.ts +3 -0
- package/dist/statistics/index.d.ts.map +1 -0
- package/dist/statistics/index.js +2 -0
- package/dist/statistics/index.js.map +1 -0
- package/dist/statistics/matchStatistics.d.ts +22 -0
- package/dist/statistics/matchStatistics.d.ts.map +1 -0
- package/dist/statistics/matchStatistics.js +59 -0
- package/dist/statistics/matchStatistics.js.map +1 -0
- package/dist/visualizations/coronaChart.d.ts +54 -0
- package/dist/visualizations/coronaChart.d.ts.map +1 -0
- package/dist/visualizations/coronaChart.js +254 -0
- package/dist/visualizations/coronaChart.js.map +1 -0
- package/dist/visualizations/data/mcpFixtures.json +13166 -0
- package/dist/visualizations/data/sampleGame.d.ts +37 -0
- package/dist/visualizations/data/sampleGame.d.ts.map +1 -0
- package/dist/visualizations/data/sampleGame.js +521 -0
- package/dist/visualizations/data/sampleGame.js.map +1 -0
- package/dist/visualizations/gameFish.d.ts +16 -0
- package/dist/visualizations/gameFish.d.ts.map +1 -0
- package/dist/visualizations/gameFish.js +692 -0
- package/dist/visualizations/gameFish.js.map +1 -0
- package/dist/visualizations/gameTree.d.ts +17 -0
- package/dist/visualizations/gameTree.d.ts.map +1 -0
- package/dist/visualizations/gameTree.js +837 -0
- package/dist/visualizations/gameTree.js.map +1 -0
- package/dist/visualizations/groupGames.d.ts +6 -0
- package/dist/visualizations/groupGames.d.ts.map +1 -0
- package/dist/visualizations/groupGames.js +35 -0
- package/dist/visualizations/groupGames.js.map +1 -0
- package/dist/visualizations/helpers/JsonViewer.d.ts +27 -0
- package/dist/visualizations/helpers/JsonViewer.d.ts.map +1 -0
- package/dist/visualizations/helpers/JsonViewer.js +276 -0
- package/dist/visualizations/helpers/JsonViewer.js.map +1 -0
- package/dist/visualizations/helpers/PlaybackControls.d.ts +12 -0
- package/dist/visualizations/helpers/PlaybackControls.d.ts.map +1 -0
- package/dist/visualizations/helpers/PlaybackControls.js +98 -0
- package/dist/visualizations/helpers/PlaybackControls.js.map +1 -0
- package/dist/visualizations/horizonChart.d.ts +59 -0
- package/dist/visualizations/horizonChart.d.ts.map +1 -0
- package/dist/visualizations/horizonChart.js +215 -0
- package/dist/visualizations/horizonChart.js.map +1 -0
- package/dist/visualizations/index.d.ts +21 -0
- package/dist/visualizations/index.d.ts.map +1 -0
- package/dist/visualizations/index.js +23 -0
- package/dist/visualizations/index.js.map +1 -0
- package/dist/visualizations/legacyRally.d.ts +3 -0
- package/dist/visualizations/legacyRally.d.ts.map +1 -0
- package/dist/visualizations/legacyRally.js +26 -0
- package/dist/visualizations/legacyRally.js.map +1 -0
- package/dist/visualizations/matchDashboard.d.ts +39 -0
- package/dist/visualizations/matchDashboard.d.ts.map +1 -0
- package/dist/visualizations/matchDashboard.js +235 -0
- package/dist/visualizations/matchDashboard.js.map +1 -0
- package/dist/visualizations/momentumChart.d.ts +12 -0
- package/dist/visualizations/momentumChart.d.ts.map +1 -0
- package/dist/visualizations/momentumChart.js +454 -0
- package/dist/visualizations/momentumChart.js.map +1 -0
- package/dist/visualizations/ptsChart.d.ts +14 -0
- package/dist/visualizations/ptsChart.d.ts.map +1 -0
- package/dist/visualizations/ptsChart.js +925 -0
- package/dist/visualizations/ptsChart.js.map +1 -0
- package/dist/visualizations/ptsHorizon.d.ts +83 -0
- package/dist/visualizations/ptsHorizon.d.ts.map +1 -0
- package/dist/visualizations/ptsHorizon.js +290 -0
- package/dist/visualizations/ptsHorizon.js.map +1 -0
- package/dist/visualizations/rallyTree.d.ts +78 -0
- package/dist/visualizations/rallyTree.d.ts.map +1 -0
- package/dist/visualizations/rallyTree.js +410 -0
- package/dist/visualizations/rallyTree.js.map +1 -0
- package/dist/visualizations/simpleChart.d.ts +6 -0
- package/dist/visualizations/simpleChart.d.ts.map +1 -0
- package/dist/visualizations/simpleChart.js +126 -0
- package/dist/visualizations/simpleChart.js.map +1 -0
- package/dist/visualizations/statView.d.ts +52 -0
- package/dist/visualizations/statView.d.ts.map +1 -0
- package/dist/visualizations/statView.js +200 -0
- package/dist/visualizations/statView.js.map +1 -0
- package/dist/visualizations/typeOf.d.ts +6 -0
- package/dist/visualizations/typeOf.d.ts.map +1 -0
- package/dist/visualizations/typeOf.js +18 -0
- package/dist/visualizations/typeOf.js.map +1 -0
- package/dist/visualizations/types/events.d.ts +92 -0
- package/dist/visualizations/types/events.d.ts.map +1 -0
- package/dist/visualizations/types/events.js +2 -0
- package/dist/visualizations/types/events.js.map +1 -0
- package/dist/visualizations/types/index.d.ts +79 -0
- package/dist/visualizations/types/index.d.ts.map +1 -0
- package/dist/visualizations/types/index.js +8 -0
- package/dist/visualizations/types/index.js.map +1 -0
- package/dist/visualizations/utils/arrays.d.ts +18 -0
- package/dist/visualizations/utils/arrays.d.ts.map +1 -0
- package/dist/visualizations/utils/arrays.js +46 -0
- package/dist/visualizations/utils/arrays.js.map +1 -0
- package/dist/visualizations/utils/colorUtils.d.ts +36 -0
- package/dist/visualizations/utils/colorUtils.d.ts.map +1 -0
- package/dist/visualizations/utils/colorUtils.js +112 -0
- package/dist/visualizations/utils/colorUtils.js.map +1 -0
- package/dist/visualizations/utils/generateId.d.ts +2 -0
- package/dist/visualizations/utils/generateId.d.ts.map +1 -0
- package/dist/visualizations/utils/generateId.js +3 -0
- package/dist/visualizations/utils/generateId.js.map +1 -0
- package/dist/visualizations/utils/keyWalk.d.ts +2 -0
- package/dist/visualizations/utils/keyWalk.d.ts.map +1 -0
- package/dist/visualizations/utils/keyWalk.js +19 -0
- package/dist/visualizations/utils/keyWalk.js.map +1 -0
- package/dist/visualizations/utils/math.d.ts +10 -0
- package/dist/visualizations/utils/math.d.ts.map +1 -0
- package/dist/visualizations/utils/math.js +14 -0
- package/dist/visualizations/utils/math.js.map +1 -0
- package/dist/visualizations/utils/setDev.d.ts +29 -0
- package/dist/visualizations/utils/setDev.d.ts.map +1 -0
- package/dist/visualizations/utils/setDev.js +35 -0
- package/dist/visualizations/utils/setDev.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
/**
|
|
4
|
+
* Rally Tree - Migrated to D3 v7
|
|
5
|
+
* Displays rally length distribution in a tree-like format
|
|
6
|
+
* Shows how rally lengths are distributed by player and outcome
|
|
7
|
+
*/
|
|
8
|
+
import { max, scaleLinear, area, curveLinear, curveBasis } from 'd3';
|
|
9
|
+
import tippy, { followCursor as followCursorPlugin } from 'tippy.js';
|
|
10
|
+
import { buildEpisodes } from '../episodes/buildEpisodes';
|
|
11
|
+
import { generateId } from './utils/generateId';
|
|
12
|
+
export function rallyTree() {
|
|
13
|
+
let points = [];
|
|
14
|
+
let ryl;
|
|
15
|
+
let max0, max1;
|
|
16
|
+
let maxRally;
|
|
17
|
+
let maxLimb, widthScale, barSpacing, barHeight;
|
|
18
|
+
let displayPct = true;
|
|
19
|
+
let barPadding = 1;
|
|
20
|
+
let cellPadding = 1;
|
|
21
|
+
const transitionTime = 1000;
|
|
22
|
+
let tippyInstances = [];
|
|
23
|
+
function destroyTooltips() {
|
|
24
|
+
tippyInstances.forEach((t) => t.destroy());
|
|
25
|
+
tippyInstances = [];
|
|
26
|
+
}
|
|
27
|
+
const options = {
|
|
28
|
+
id: generateId(),
|
|
29
|
+
width: 100,
|
|
30
|
+
height: 100,
|
|
31
|
+
margins: {
|
|
32
|
+
top: 0,
|
|
33
|
+
right: 0,
|
|
34
|
+
bottom: 0,
|
|
35
|
+
left: 0,
|
|
36
|
+
},
|
|
37
|
+
display: {
|
|
38
|
+
sizeToFit: false,
|
|
39
|
+
},
|
|
40
|
+
orientation: 'horizontal',
|
|
41
|
+
data: {
|
|
42
|
+
sort: false,
|
|
43
|
+
},
|
|
44
|
+
areas: {
|
|
45
|
+
colors: { 0: 'blue', 1: 'purple' },
|
|
46
|
+
interpolation: 'linear',
|
|
47
|
+
},
|
|
48
|
+
points: {
|
|
49
|
+
colors: {},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
const events = {
|
|
53
|
+
pointbar: { mouseover: null, mouseout: null, click: null },
|
|
54
|
+
statbar: { click: null },
|
|
55
|
+
pctarea: { mouseover: null, mouseout: null },
|
|
56
|
+
update: { begin: null, end: null },
|
|
57
|
+
rallies: { none: null, display: null },
|
|
58
|
+
};
|
|
59
|
+
let rtroot;
|
|
60
|
+
let rttree;
|
|
61
|
+
let rtarea;
|
|
62
|
+
let parentNode = null;
|
|
63
|
+
function chart(selection) {
|
|
64
|
+
parentNode = selection.node();
|
|
65
|
+
const root = selection.append('div').attr('class', 'rallyRoot');
|
|
66
|
+
rtroot = root
|
|
67
|
+
.append('svg')
|
|
68
|
+
.attr('class', 'rallyTree')
|
|
69
|
+
.attr('height', options.orientation === 'horizontal' ? options.height : options.width)
|
|
70
|
+
.attr('width', options.orientation === 'horizontal' ? options.width : options.height);
|
|
71
|
+
rttree = rtroot.append('g').attr('class', 'rttree');
|
|
72
|
+
rtarea = rtroot.append('g').attr('class', 'rtarea');
|
|
73
|
+
chart.update = update;
|
|
74
|
+
}
|
|
75
|
+
function update(opts) {
|
|
76
|
+
destroyTooltips();
|
|
77
|
+
// Calculate max rally length using D3 v7 max
|
|
78
|
+
maxRally = max(points, (point) => {
|
|
79
|
+
if (point.rallyLength != null)
|
|
80
|
+
return point.rallyLength;
|
|
81
|
+
return 0;
|
|
82
|
+
}) || 0;
|
|
83
|
+
if (maxRally < 3) {
|
|
84
|
+
rtroot.selectAll('rect').remove();
|
|
85
|
+
rtarea.selectAll('path').remove();
|
|
86
|
+
rtarea.selectAll('line').remove();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (options.display.sizeToFit || (opts && opts.sizeToFit)) {
|
|
90
|
+
if (parentNode) {
|
|
91
|
+
const dims = parentNode.getBoundingClientRect();
|
|
92
|
+
if (dims.width > 0)
|
|
93
|
+
options.width = dims.width;
|
|
94
|
+
if (dims.height > 0)
|
|
95
|
+
options.height = dims.height;
|
|
96
|
+
}
|
|
97
|
+
options.width = Math.max(options.width, 100);
|
|
98
|
+
options.height = Math.max(options.height, 100);
|
|
99
|
+
}
|
|
100
|
+
if (points.length > 500) {
|
|
101
|
+
barPadding = 0;
|
|
102
|
+
cellPadding = 0;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
barPadding = 1;
|
|
106
|
+
cellPadding = 1;
|
|
107
|
+
}
|
|
108
|
+
// Track rally length counts
|
|
109
|
+
ryl = [[], []];
|
|
110
|
+
points.forEach((e, i) => {
|
|
111
|
+
e.i = i;
|
|
112
|
+
const rallyLen = e.rallyLength ?? 0;
|
|
113
|
+
if (ryl[e.winner][rallyLen]) {
|
|
114
|
+
ryl[e.winner][rallyLen] += 1;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
ryl[e.winner][rallyLen] = 1;
|
|
118
|
+
}
|
|
119
|
+
e.rl = [ryl[0][rallyLen] || 0, ryl[1][rallyLen] || 0];
|
|
120
|
+
});
|
|
121
|
+
rtroot
|
|
122
|
+
.transition()
|
|
123
|
+
.duration(transitionTime)
|
|
124
|
+
.attr('width', options.width)
|
|
125
|
+
.attr('height', options.height);
|
|
126
|
+
max0 = points.length ? (points.length === 1 ? points[0].rl[0] : max(points, (p) => p.rl[0])) : 0;
|
|
127
|
+
max1 = points.length ? (points.length === 1 ? points[0].rl[1] : max(points, (p) => p.rl[1])) : 0;
|
|
128
|
+
max0 = max0 || 0;
|
|
129
|
+
max1 = max1 || 0;
|
|
130
|
+
maxLimb = max0 + max1 + 1;
|
|
131
|
+
widthScale = (options.orientation === 'horizontal' ? options.width : options.height) / maxLimb;
|
|
132
|
+
barSpacing = (options.orientation === 'horizontal' ? options.height : options.width) / (maxRally + 1);
|
|
133
|
+
barHeight = barSpacing - barPadding;
|
|
134
|
+
// D3 v7: Use .join() instead of .enter().append().merge()
|
|
135
|
+
// Point bars
|
|
136
|
+
rttree.selectAll('rect.point-bar')
|
|
137
|
+
.data(points)
|
|
138
|
+
.join(
|
|
139
|
+
// Enter
|
|
140
|
+
enter => enter
|
|
141
|
+
.append('rect')
|
|
142
|
+
.attr('id', (d, i) => `cell_${options.id}_${i}`)
|
|
143
|
+
.attr('class', 'point-bar')
|
|
144
|
+
.attr('x', () => Math.random() * options.width)
|
|
145
|
+
.attr('y', () => Math.random() * options.height)
|
|
146
|
+
.attr('fill', (d) => options.points.colors[d.result || ''] || '#ccc')
|
|
147
|
+
.attr('width', () => (options.orientation === 'horizontal' ? widthScale - cellPadding : barHeight))
|
|
148
|
+
.attr('height', () => (options.orientation === 'horizontal' ? barHeight : widthScale - cellPadding))
|
|
149
|
+
.on('mouseover', events.pointbar.mouseover)
|
|
150
|
+
.on('mouseout', events.pointbar.mouseout)
|
|
151
|
+
.on('click', events.pointbar.click)
|
|
152
|
+
.call(enter => enter.transition()
|
|
153
|
+
.duration(transitionTime)
|
|
154
|
+
.style('opacity', 1)
|
|
155
|
+
.attr('x', (d) => calcX(d))
|
|
156
|
+
.attr('y', (d) => calcY(d))),
|
|
157
|
+
// Update
|
|
158
|
+
update => update
|
|
159
|
+
.call(update => update.transition()
|
|
160
|
+
.duration(transitionTime)
|
|
161
|
+
.attr('fill', (d) => options.points.colors[d.result || ''] || '#ccc')
|
|
162
|
+
.style('opacity', (d) => (d.hide ? 0 : 1))
|
|
163
|
+
.attr('x', (d) => calcX(d))
|
|
164
|
+
.attr('y', (d) => calcY(d))
|
|
165
|
+
.attr('width', () => (options.orientation === 'horizontal' ? widthScale - cellPadding : barHeight))
|
|
166
|
+
.attr('height', () => (options.orientation === 'horizontal' ? barHeight : widthScale - cellPadding))));
|
|
167
|
+
// Point bar tooltips
|
|
168
|
+
rttree.selectAll('rect.point-bar').each(function (d) {
|
|
169
|
+
const el = this;
|
|
170
|
+
const name = options.players?.[d.winner] ?? (d.winner === 0 ? 'Player 1' : 'Player 2');
|
|
171
|
+
const result = d.result || '';
|
|
172
|
+
const rally = d.rallyLength ?? 0;
|
|
173
|
+
tippyInstances.push(tippy(el, {
|
|
174
|
+
content: `${name}: ${result} (rally: ${rally})`,
|
|
175
|
+
allowHTML: false,
|
|
176
|
+
delay: [200, 0],
|
|
177
|
+
placement: 'top',
|
|
178
|
+
appendTo: document.body,
|
|
179
|
+
}));
|
|
180
|
+
});
|
|
181
|
+
// Win percentage areas
|
|
182
|
+
rtarea.selectAll('.pct-area')
|
|
183
|
+
.data([0, 1])
|
|
184
|
+
.join(enter => enter
|
|
185
|
+
.append('path')
|
|
186
|
+
.attr('id', (d) => `player${d}pctarea_${options.id}`)
|
|
187
|
+
.attr('class', 'pct-area')
|
|
188
|
+
.attr('opacity', 0)
|
|
189
|
+
.style('pointer-events', 'none'), update => update)
|
|
190
|
+
.attr('fill', (d) => options.areas.colors[d])
|
|
191
|
+
.attr('display', displayPct ? 'inline' : 'none')
|
|
192
|
+
.transition()
|
|
193
|
+
.delay(transitionTime)
|
|
194
|
+
.attr('opacity', displayPct ? 0.2 : 0)
|
|
195
|
+
.attr('d', (d) => calcArea(d));
|
|
196
|
+
// Center stat bar
|
|
197
|
+
rtarea.selectAll('rect.stat-bar')
|
|
198
|
+
.data([0])
|
|
199
|
+
.join(enter => enter
|
|
200
|
+
.append('rect')
|
|
201
|
+
.attr('class', 'stat-bar')
|
|
202
|
+
.style('opacity', 0.2)
|
|
203
|
+
.attr('fill', 'blue'))
|
|
204
|
+
.on('click', events.statbar.click)
|
|
205
|
+
.transition()
|
|
206
|
+
.duration(transitionTime)
|
|
207
|
+
.style('opacity', 0.2)
|
|
208
|
+
.attr('x', statbarX())
|
|
209
|
+
.attr('y', statbarY())
|
|
210
|
+
.attr('width', statbarWidth())
|
|
211
|
+
.attr('height', statbarHeight());
|
|
212
|
+
// Stat bar tooltip — shows rally length based on mouse position
|
|
213
|
+
const statBarEl = rtarea.select('rect.stat-bar').node();
|
|
214
|
+
if (statBarEl) {
|
|
215
|
+
const statTip = tippy(statBarEl, {
|
|
216
|
+
content: '',
|
|
217
|
+
followCursor: true,
|
|
218
|
+
plugins: [followCursorPlugin],
|
|
219
|
+
allowHTML: false,
|
|
220
|
+
placement: 'right',
|
|
221
|
+
appendTo: document.body,
|
|
222
|
+
});
|
|
223
|
+
tippyInstances.push(statTip);
|
|
224
|
+
statBarEl.addEventListener('mousemove', (event) => {
|
|
225
|
+
const rect = statBarEl.getBoundingClientRect();
|
|
226
|
+
let rallyLen;
|
|
227
|
+
if (options.orientation === 'horizontal') {
|
|
228
|
+
const relY = event.clientY - rect.top;
|
|
229
|
+
rallyLen = Math.floor((relY / rect.height) * (maxRally + 1));
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
const relX = event.clientX - rect.left;
|
|
233
|
+
rallyLen = Math.floor((relX / rect.width) * (maxRally + 1));
|
|
234
|
+
}
|
|
235
|
+
rallyLen = Math.max(0, Math.min(rallyLen, maxRally));
|
|
236
|
+
statTip.setContent(`Rally length: ${rallyLen}`);
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function rallyWinPct(player) {
|
|
241
|
+
// Cumulative win percentage: for each rally length, compute the odds
|
|
242
|
+
// that the player wins a point of AT LEAST that length. This matches
|
|
243
|
+
// the "Persistence of Server Advantage" methodology (Jeff Sackmann).
|
|
244
|
+
// Summing from each rally length onwards smooths the yo-yo effect
|
|
245
|
+
// inherent in per-length calculations.
|
|
246
|
+
const pct = [];
|
|
247
|
+
const maxLen = maxRally || 20;
|
|
248
|
+
for (let i = 0; i <= maxLen; i++) {
|
|
249
|
+
let cumPlayed = 0;
|
|
250
|
+
let cumWon = 0;
|
|
251
|
+
for (let j = i; j <= maxLen; j++) {
|
|
252
|
+
const p0 = ryl[0][j] || 0;
|
|
253
|
+
const p1 = ryl[1][j] || 0;
|
|
254
|
+
cumPlayed += p0 + p1;
|
|
255
|
+
cumWon += ryl[player][j] || 0;
|
|
256
|
+
}
|
|
257
|
+
pct.push(cumPlayed > 0 ? (cumWon / cumPlayed) * 100 : 0);
|
|
258
|
+
}
|
|
259
|
+
return pct;
|
|
260
|
+
}
|
|
261
|
+
function calcArea(player) {
|
|
262
|
+
// D3 v7: Use curveLinear/curveBasis directly
|
|
263
|
+
const curveType = options.areas.interpolation === 'linear' ? curveLinear : curveBasis;
|
|
264
|
+
const pct = rallyWinPct(player);
|
|
265
|
+
if (options.orientation === 'horizontal') {
|
|
266
|
+
const xScale = scaleLinear()
|
|
267
|
+
.range(player === 0 ? [max0 * widthScale, 0] : [(max0 + 1) * widthScale, options.width])
|
|
268
|
+
.domain([0, 100]);
|
|
269
|
+
const yScale = scaleLinear()
|
|
270
|
+
.range([0, options.height])
|
|
271
|
+
.domain([0, pct.length - 1]);
|
|
272
|
+
return area()
|
|
273
|
+
.curve(curveType)
|
|
274
|
+
.x1((d) => xScale(d))
|
|
275
|
+
.x0(player === 0 ? max0 * widthScale : (max0 + 1) * widthScale)
|
|
276
|
+
.y((d, i) => yScale(i))(pct);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
const yScale = scaleLinear()
|
|
280
|
+
.range(player === 0 ? [max0 * widthScale, 0] : [max0 * widthScale, options.height])
|
|
281
|
+
.domain([0, 100]);
|
|
282
|
+
const xScale = scaleLinear()
|
|
283
|
+
.range([0, options.width])
|
|
284
|
+
.domain([0, pct.length - 1]);
|
|
285
|
+
return area()
|
|
286
|
+
.curve(curveType)
|
|
287
|
+
.y1((d) => yScale(d))
|
|
288
|
+
.y0(player === 0 ? max0 * widthScale : max0 * widthScale)
|
|
289
|
+
.x((d, i) => xScale(i))(pct);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function calcX(d) {
|
|
293
|
+
const rallyLen = d.rallyLength ?? 0;
|
|
294
|
+
if (d.winner === 0) {
|
|
295
|
+
return options.orientation === 'horizontal'
|
|
296
|
+
? max0 * widthScale - (d.rl[0] || 0) * widthScale
|
|
297
|
+
: rallyLen * barSpacing;
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
return options.orientation === 'horizontal'
|
|
301
|
+
? max0 * widthScale + (d.rl[1] || 0) * widthScale
|
|
302
|
+
: rallyLen * barSpacing;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function calcY(d) {
|
|
306
|
+
const rallyLen = d.rallyLength ?? 0;
|
|
307
|
+
if (d.winner === 0) {
|
|
308
|
+
return options.orientation === 'horizontal'
|
|
309
|
+
? rallyLen * barSpacing
|
|
310
|
+
: max0 * widthScale - (d.rl[0] || 0) * widthScale;
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
return options.orientation === 'horizontal'
|
|
314
|
+
? rallyLen * barSpacing
|
|
315
|
+
: max0 * widthScale + (d.rl[1] || 0) * widthScale;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
function statbarX() {
|
|
319
|
+
return options.orientation === 'horizontal' ? max0 * widthScale : 0;
|
|
320
|
+
}
|
|
321
|
+
function statbarY() {
|
|
322
|
+
return options.orientation === 'horizontal' ? 0 : max0 * widthScale;
|
|
323
|
+
}
|
|
324
|
+
function statbarWidth() {
|
|
325
|
+
return options.orientation === 'horizontal' ? widthScale - cellPadding : options.width;
|
|
326
|
+
}
|
|
327
|
+
function statbarHeight() {
|
|
328
|
+
return options.orientation === 'horizontal' ? options.height : widthScale - cellPadding;
|
|
329
|
+
}
|
|
330
|
+
// ACCESSORS
|
|
331
|
+
chart.options = function (values) {
|
|
332
|
+
if (!arguments.length)
|
|
333
|
+
return options;
|
|
334
|
+
const vKeys = Object.keys(values);
|
|
335
|
+
const oKeys = Object.keys(options);
|
|
336
|
+
for (let k = 0; k < vKeys.length; k++) {
|
|
337
|
+
if (oKeys.indexOf(vKeys[k]) >= 0) {
|
|
338
|
+
if (typeof options[vKeys[k]] === 'object') {
|
|
339
|
+
const sKeys = Object.keys(values[vKeys[k]]);
|
|
340
|
+
const osKeys = Object.keys(options[vKeys[k]]);
|
|
341
|
+
for (let sk = 0; sk < sKeys.length; sk++) {
|
|
342
|
+
if (osKeys.indexOf(sKeys[sk]) >= 0) {
|
|
343
|
+
options[vKeys[k]][sKeys[sk]] = values[vKeys[k]][sKeys[sk]];
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
options[vKeys[k]] = values[vKeys[k]];
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return chart;
|
|
353
|
+
};
|
|
354
|
+
chart.data = function (value) {
|
|
355
|
+
if (!arguments.length)
|
|
356
|
+
return points;
|
|
357
|
+
points = value || [];
|
|
358
|
+
return chart;
|
|
359
|
+
};
|
|
360
|
+
chart.matchUp = function (matchUpState) {
|
|
361
|
+
const episodes = buildEpisodes(matchUpState);
|
|
362
|
+
const pts = episodes.map((ep) => ({
|
|
363
|
+
winner: ep.point.winner,
|
|
364
|
+
result: ep.point.result,
|
|
365
|
+
rallyLength: ep.point.rallyLength ?? 2,
|
|
366
|
+
}));
|
|
367
|
+
// Extract player names if available
|
|
368
|
+
const sides = matchUpState?.sides;
|
|
369
|
+
if (Array.isArray(sides) && sides.length === 2) {
|
|
370
|
+
const getName = (side) => {
|
|
371
|
+
const participant = side?.participant;
|
|
372
|
+
if (participant?.participantName)
|
|
373
|
+
return participant.participantName;
|
|
374
|
+
const person = participant?.person;
|
|
375
|
+
if (person)
|
|
376
|
+
return [person.standardGivenName, person.standardFamilyName].filter(Boolean).join(' ');
|
|
377
|
+
return undefined;
|
|
378
|
+
};
|
|
379
|
+
const n0 = getName(sides[0]);
|
|
380
|
+
const n1 = getName(sides[1]);
|
|
381
|
+
if (n0 && n1)
|
|
382
|
+
options.players = [n0, n1];
|
|
383
|
+
}
|
|
384
|
+
chart.data(pts);
|
|
385
|
+
return chart;
|
|
386
|
+
};
|
|
387
|
+
chart.events = function (value) {
|
|
388
|
+
if (!arguments.length)
|
|
389
|
+
return events;
|
|
390
|
+
if (typeof value !== 'undefined') {
|
|
391
|
+
const vKeys = Object.keys(value);
|
|
392
|
+
const eKeys = Object.keys(events);
|
|
393
|
+
for (let k = 0; k < vKeys.length; k++) {
|
|
394
|
+
if (eKeys.indexOf(vKeys[k]) >= 0) {
|
|
395
|
+
const sKeys = Object.keys(value[vKeys[k]]);
|
|
396
|
+
const esKeys = Object.keys(events[vKeys[k]]);
|
|
397
|
+
for (let sk = 0; sk < sKeys.length; sk++) {
|
|
398
|
+
if (esKeys.indexOf(sKeys[sk]) >= 0) {
|
|
399
|
+
events[vKeys[k]][sKeys[sk]] = value[vKeys[k]][sKeys[sk]];
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return chart;
|
|
406
|
+
};
|
|
407
|
+
chart.update = update;
|
|
408
|
+
return chart;
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=rallyTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rallyTree.js","sourceRoot":"","sources":["../../src/visualizations/rallyTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function simpleChart(target: any, data: any, playerNames?: [string, string]): void;
|
|
2
|
+
/**
|
|
3
|
+
* Companion function: render simpleChart directly from a ScoringEngine MatchUp.
|
|
4
|
+
*/
|
|
5
|
+
export declare function simpleChartFromMatchUp(target: any, matchUp: any, playerNames?: [string, string]): void;
|
|
6
|
+
//# sourceMappingURL=simpleChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simpleChart.d.ts","sourceRoot":"","sources":["../../src/visualizations/simpleChart.ts"],"names":[],"mappings":"AAKA,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,QA8HjF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAKtG"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
import { select, scaleLinear, line, axisBottom, axisLeft } from 'd3';
|
|
4
|
+
import { extractRallyLengths } from '../engine/feedMatchUp';
|
|
5
|
+
export function simpleChart(target, data, playerNames) {
|
|
6
|
+
const dom_parent = select('#' + target);
|
|
7
|
+
if (!dom_parent.node())
|
|
8
|
+
return; // Element not yet in DOM
|
|
9
|
+
// let dims = dom_parent.node().getBoundingClientRect();
|
|
10
|
+
// let screen_width = dims.width;
|
|
11
|
+
// let screen_height = screen_width / 2;
|
|
12
|
+
const screen_width = window.innerWidth * 0.85;
|
|
13
|
+
const screen_height = screen_width / 2;
|
|
14
|
+
const min_points = 50;
|
|
15
|
+
const colors = ['blue', 'red'];
|
|
16
|
+
dom_parent.selectAll('svg').remove();
|
|
17
|
+
const svg = dom_parent.append('svg').attr('width', screen_width).attr('height', screen_height);
|
|
18
|
+
const margin = { top: 30, right: 20, bottom: 50, left: 55 };
|
|
19
|
+
const width = +svg.attr('width') - margin.left - margin.right;
|
|
20
|
+
const height = +svg.attr('height') - margin.top - margin.bottom;
|
|
21
|
+
const x = scaleLinear().range([0, width]);
|
|
22
|
+
const y = scaleLinear().range([height, 0]);
|
|
23
|
+
const lineGenerator = line()
|
|
24
|
+
.x(function (d) {
|
|
25
|
+
return x(d[0]);
|
|
26
|
+
})
|
|
27
|
+
.y(function (d) {
|
|
28
|
+
return y(d[1]);
|
|
29
|
+
});
|
|
30
|
+
// .curve(d3.curveStepAfter);
|
|
31
|
+
const chart = svg.append('g').attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
|
|
32
|
+
const maxY = Math.max(...data.map((p) => p.length));
|
|
33
|
+
x.domain([0, Math.max(...data.map((p) => Math.max(...p)), min_points)]);
|
|
34
|
+
y.domain([0, maxY]);
|
|
35
|
+
chart
|
|
36
|
+
.append('g')
|
|
37
|
+
.attr('transform', 'translate(0,' + height + ')')
|
|
38
|
+
.call(axisBottom(x));
|
|
39
|
+
chart
|
|
40
|
+
.append('g')
|
|
41
|
+
.call(axisLeft(y)
|
|
42
|
+
.ticks(Math.min(maxY, 4))
|
|
43
|
+
.tickFormat((d) => d));
|
|
44
|
+
// X-axis label
|
|
45
|
+
chart
|
|
46
|
+
.append('text')
|
|
47
|
+
.attr('text-anchor', 'middle')
|
|
48
|
+
.attr('x', width / 2)
|
|
49
|
+
.attr('y', height + 40)
|
|
50
|
+
.attr('font-size', '14px')
|
|
51
|
+
.attr('fill', '#333')
|
|
52
|
+
.text('Rally Length');
|
|
53
|
+
// Y-axis label
|
|
54
|
+
chart
|
|
55
|
+
.append('text')
|
|
56
|
+
.attr('text-anchor', 'middle')
|
|
57
|
+
.attr('transform', 'rotate(-90)')
|
|
58
|
+
.attr('x', -height / 2)
|
|
59
|
+
.attr('y', -40)
|
|
60
|
+
.attr('font-size', '14px')
|
|
61
|
+
.attr('fill', '#333')
|
|
62
|
+
.text('Points Won');
|
|
63
|
+
// Legend
|
|
64
|
+
const names = playerNames || ['Player 1', 'Player 2'];
|
|
65
|
+
const legend = chart.append('g').attr('transform', `translate(${width - 180}, 0)`);
|
|
66
|
+
[0, 1].forEach((i) => {
|
|
67
|
+
const g = legend.append('g').attr('transform', `translate(0, ${i * 20})`);
|
|
68
|
+
g.append('line').attr('x1', 0).attr('x2', 20).attr('y1', 0).attr('y2', 0)
|
|
69
|
+
.attr('stroke', colors[i]).attr('stroke-width', 3);
|
|
70
|
+
g.append('text').attr('x', 25).attr('y', 4).attr('font-size', '12px').attr('fill', '#333')
|
|
71
|
+
.text(names[i]);
|
|
72
|
+
});
|
|
73
|
+
drawLines(data);
|
|
74
|
+
appendCircles(data);
|
|
75
|
+
function lineData(points) {
|
|
76
|
+
points = points.map((point, index) => [point, index + 1]);
|
|
77
|
+
points.unshift([0, 0]);
|
|
78
|
+
return points;
|
|
79
|
+
}
|
|
80
|
+
function drawLines(players) {
|
|
81
|
+
players.forEach((points, index) => {
|
|
82
|
+
chart
|
|
83
|
+
.append('path')
|
|
84
|
+
.datum(lineData(points))
|
|
85
|
+
.attr('fill', 'none')
|
|
86
|
+
.attr('stroke', colors[index])
|
|
87
|
+
.attr('stroke-width', '5px')
|
|
88
|
+
.attr('shape-rendering', 'crispEdges')
|
|
89
|
+
.attr('d', lineGenerator);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
function appendCircles(players) {
|
|
93
|
+
players.forEach((points, index) => {
|
|
94
|
+
const targetclass = '.datapoint' + index;
|
|
95
|
+
if (points.length < 10) {
|
|
96
|
+
// D3 v7: Use .join() instead of .enter().append()
|
|
97
|
+
chart
|
|
98
|
+
.selectAll(targetclass)
|
|
99
|
+
.data(lineData(points))
|
|
100
|
+
.join('circle')
|
|
101
|
+
.attr('class', targetclass.slice(1)) // Remove leading dot for class name
|
|
102
|
+
.attr('fill', '#FFFFFF')
|
|
103
|
+
.attr('stroke', colors[index])
|
|
104
|
+
.attr('stroke-width', '2px')
|
|
105
|
+
.attr('r', 3.5)
|
|
106
|
+
.attr('cx', function (d) {
|
|
107
|
+
return x(d[0]);
|
|
108
|
+
})
|
|
109
|
+
.attr('cy', function (d) {
|
|
110
|
+
return y(d[1]);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Companion function: render simpleChart directly from a ScoringEngine MatchUp.
|
|
118
|
+
*/
|
|
119
|
+
export function simpleChartFromMatchUp(target, matchUp, playerNames) {
|
|
120
|
+
const dom_parent = select('#' + target);
|
|
121
|
+
if (!dom_parent.node())
|
|
122
|
+
return; // Element not yet in DOM
|
|
123
|
+
const data = extractRallyLengths(matchUp);
|
|
124
|
+
simpleChart(target, data, playerNames);
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=simpleChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simpleChart.js","sourceRoot":"","sources":["../../src/visualizations/simpleChart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StatView — Match statistics bar chart (D3 v7)
|
|
3
|
+
*
|
|
4
|
+
* Renders an SVG "table" — one row per stat: name centered, player values
|
|
5
|
+
* on left/right, horizontal bars showing relative proportions.
|
|
6
|
+
*
|
|
7
|
+
* Ported from legacy statView.js to D3 v7 TypeScript.
|
|
8
|
+
*/
|
|
9
|
+
import type { StatObject } from "tods-competition-factory";
|
|
10
|
+
interface StatViewOptions {
|
|
11
|
+
id: string;
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
rowHeight: number;
|
|
15
|
+
margins: {
|
|
16
|
+
top: number;
|
|
17
|
+
bottom: number;
|
|
18
|
+
left: number;
|
|
19
|
+
right: number;
|
|
20
|
+
};
|
|
21
|
+
display: {
|
|
22
|
+
sizeToFit: {
|
|
23
|
+
width: boolean;
|
|
24
|
+
height: boolean;
|
|
25
|
+
};
|
|
26
|
+
transitionTime: number;
|
|
27
|
+
};
|
|
28
|
+
colors: {
|
|
29
|
+
players: {
|
|
30
|
+
0: string;
|
|
31
|
+
1: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export declare function statView(): {
|
|
36
|
+
(selection: any): void;
|
|
37
|
+
options(values?: Record<string, any>): StatViewOptions | /*elided*/ any;
|
|
38
|
+
events(functions?: any): {
|
|
39
|
+
update: {
|
|
40
|
+
begin: (() => void) | null;
|
|
41
|
+
end: (() => void) | null;
|
|
42
|
+
};
|
|
43
|
+
} | /*elided*/ any;
|
|
44
|
+
data(value?: StatObject[]): StatObject[] | /*elided*/ any;
|
|
45
|
+
matchUp(matchUpState: any): /*elided*/ any;
|
|
46
|
+
update(opts?: any): void;
|
|
47
|
+
width(value?: number): number | /*elided*/ any;
|
|
48
|
+
height(value?: number): number | /*elided*/ any;
|
|
49
|
+
colors(playerColors?: [string, string]): string[] | /*elided*/ any;
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=statView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statView.d.ts","sourceRoot":"","sources":["../../src/visualizations/statView.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAM3D,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,OAAO,EAAE;QACP,SAAS,EAAE;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAE,CAAC;QAC/C,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,MAAM,EAAE;QAAE,OAAO,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CAC/C;AAUD,wBAAgB,QAAQ;gBA0BI,GAAG;qBAqIM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;uBAMjB,GAAG;;mBAhJrB,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;iBACrB,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;;;iBAqJL,UAAU,EAAE;0BAMH,GAAG;kBAMX,GAAG;kBAQH,MAAM;mBAML,MAAM;0BAMC,CAAC,MAAM,EAAE,MAAM,CAAC;EAQzD"}
|