@pitvox/partner-react 0.7.20 → 0.7.22
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/index.cjs +1 -1
- package/dist/index.js +1331 -1142
- package/dist/styles.css +42 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { jsx as n, jsxs as l, Fragment as
|
|
2
|
-
import { createContext as
|
|
3
|
-
import { useQueryClient as
|
|
4
|
-
const
|
|
5
|
-
let
|
|
6
|
-
function
|
|
1
|
+
import { jsx as n, jsxs as l, Fragment as B } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as He, useMemo as T, useContext as je, useState as E, useCallback as K, useRef as Ve, useEffect as We } from "react";
|
|
3
|
+
import { useQueryClient as O, QueryClient as Ke, QueryClientProvider as Oe, useQuery as $, useMutation as Y, useQueries as xe } from "@tanstack/react-query";
|
|
4
|
+
const ae = He(null), Ge = "https://cdn.pitvox.com", ze = "https://pitvox.com";
|
|
5
|
+
let te = null;
|
|
6
|
+
function Rt({
|
|
7
7
|
partnerSlug: e = null,
|
|
8
|
-
cdnUrl:
|
|
9
|
-
pitvoxUrl:
|
|
8
|
+
cdnUrl: t = Ge,
|
|
9
|
+
pitvoxUrl: r = ze,
|
|
10
10
|
getSteamId: s,
|
|
11
11
|
onRegister: a,
|
|
12
12
|
onWithdraw: i,
|
|
@@ -14,12 +14,12 @@ function ut({
|
|
|
14
14
|
onMarkNotificationRead: d,
|
|
15
15
|
onMarkAllNotificationsRead: p,
|
|
16
16
|
onFetchServerPassword: c,
|
|
17
|
-
children:
|
|
17
|
+
children: u
|
|
18
18
|
}) {
|
|
19
|
-
const
|
|
19
|
+
const v = T(() => ({
|
|
20
20
|
partnerSlug: e,
|
|
21
|
-
cdnUrl:
|
|
22
|
-
pitvoxUrl:
|
|
21
|
+
cdnUrl: t.replace(/\/$/, ""),
|
|
22
|
+
pitvoxUrl: r.replace(/\/$/, ""),
|
|
23
23
|
getSteamId: s || (() => null),
|
|
24
24
|
onRegister: a || null,
|
|
25
25
|
onWithdraw: i || null,
|
|
@@ -27,68 +27,68 @@ function ut({
|
|
|
27
27
|
onMarkNotificationRead: d || null,
|
|
28
28
|
onMarkAllNotificationsRead: p || null,
|
|
29
29
|
onFetchServerPassword: c || null
|
|
30
|
-
}), [e,
|
|
30
|
+
}), [e, t, r, s, a, i, o, d, p, c]);
|
|
31
31
|
let f = !1;
|
|
32
32
|
try {
|
|
33
|
-
|
|
33
|
+
O(), f = !0;
|
|
34
34
|
} catch {
|
|
35
35
|
f = !1;
|
|
36
36
|
}
|
|
37
|
-
return f ? /* @__PURE__ */ n(
|
|
37
|
+
return f ? /* @__PURE__ */ n(ae.Provider, { value: v, children: u }) : (te || (te = new Ke({
|
|
38
38
|
defaultOptions: {
|
|
39
39
|
queries: { staleTime: 6e4 }
|
|
40
40
|
}
|
|
41
|
-
})), /* @__PURE__ */ n(
|
|
41
|
+
})), /* @__PURE__ */ n(Oe, { client: te, children: /* @__PURE__ */ n(ae.Provider, { value: v, children: u }) }));
|
|
42
42
|
}
|
|
43
43
|
function L() {
|
|
44
|
-
const e =
|
|
44
|
+
const e = je(ae);
|
|
45
45
|
if (!e)
|
|
46
46
|
throw new Error("usePitVox must be used within a <PitVoxPartnerProvider>");
|
|
47
47
|
return e;
|
|
48
48
|
}
|
|
49
|
-
async function
|
|
50
|
-
const
|
|
51
|
-
if (!
|
|
52
|
-
if (
|
|
53
|
-
throw new Error(`CDN fetch failed: ${
|
|
49
|
+
async function D(e, t) {
|
|
50
|
+
const r = await fetch(`${e}/${t}`);
|
|
51
|
+
if (!r.ok) {
|
|
52
|
+
if (r.status === 404 || r.status === 403) return null;
|
|
53
|
+
throw new Error(`CDN fetch failed: ${r.status}`);
|
|
54
54
|
}
|
|
55
|
-
return
|
|
55
|
+
return r.json();
|
|
56
56
|
}
|
|
57
|
-
function
|
|
57
|
+
function ie(e, t, r, ...s) {
|
|
58
58
|
const a = ["leaderboards"];
|
|
59
|
-
return e && a.push(`partners/${e}`),
|
|
59
|
+
return e && a.push(`partners/${e}`), t && a.push(t), r && a.push(`v/${r}`), [...a, ...s].join("/");
|
|
60
60
|
}
|
|
61
|
-
function
|
|
61
|
+
function Qe(e, t, r, s) {
|
|
62
62
|
const a = s || "default";
|
|
63
|
-
return e ? `laps/partners/${e}/${
|
|
63
|
+
return e ? `laps/partners/${e}/${t}/${r}/${a}.json` : `laps/${t}/${r}/${a}.json`;
|
|
64
64
|
}
|
|
65
|
-
function
|
|
66
|
-
return e ? `laps/partners/${e}/${
|
|
65
|
+
function ye(e, t) {
|
|
66
|
+
return e ? `laps/partners/${e}/${t}/index.json` : `laps/${t}/index.json`;
|
|
67
67
|
}
|
|
68
|
-
function
|
|
68
|
+
function Ye(e) {
|
|
69
69
|
return e ? `recent-laps/partners/${e}.json` : "recent-laps.json";
|
|
70
70
|
}
|
|
71
71
|
function q(e) {
|
|
72
72
|
if (!e && e !== 0) return "-";
|
|
73
|
-
const
|
|
74
|
-
return `${
|
|
73
|
+
const t = Math.floor(e / 1e3), r = Math.floor(t / 60), s = t % 60, a = e % 1e3;
|
|
74
|
+
return `${r}:${String(s).padStart(2, "0")}.${String(a).padStart(3, "0")}`;
|
|
75
75
|
}
|
|
76
|
-
function
|
|
76
|
+
function F(e) {
|
|
77
77
|
return !e && e !== 0 ? "-" : e >= 6e4 ? q(e) : (e / 1e3).toFixed(3);
|
|
78
78
|
}
|
|
79
|
-
function
|
|
79
|
+
function _(e) {
|
|
80
80
|
if (!e) return "";
|
|
81
|
-
let
|
|
82
|
-
return
|
|
81
|
+
let t = e;
|
|
82
|
+
return t.startsWith("ks_") && (t = t.slice(3)), t.split("_").map((r) => r.charAt(0).toUpperCase() + r.slice(1)).join(" ");
|
|
83
83
|
}
|
|
84
|
-
function
|
|
84
|
+
function V(e, t, r) {
|
|
85
85
|
if (!e) return "";
|
|
86
|
-
const s = e.split("_").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" "), a =
|
|
87
|
-
if (!
|
|
88
|
-
const i =
|
|
86
|
+
const s = e.split("_").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" "), a = r === "acc" || !r && (t == null ? void 0 : t.toLowerCase()) === "track config";
|
|
87
|
+
if (!t || t === "default" || a) return s;
|
|
88
|
+
const i = t.split("_").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" ");
|
|
89
89
|
return `${s} ${i}`;
|
|
90
90
|
}
|
|
91
|
-
function
|
|
91
|
+
function G(e) {
|
|
92
92
|
if (!e) return "-";
|
|
93
93
|
try {
|
|
94
94
|
return new Date(e).toLocaleDateString("en-GB", {
|
|
@@ -100,25 +100,25 @@ function W(e) {
|
|
|
100
100
|
return "-";
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
|
-
function
|
|
103
|
+
function oe(e) {
|
|
104
104
|
if (!e) return "";
|
|
105
|
-
const
|
|
106
|
-
if (
|
|
107
|
-
const s = Math.floor(
|
|
105
|
+
const t = Date.now() - new Date(e).getTime(), r = Math.floor(t / 1e3);
|
|
106
|
+
if (r < 60) return "Just now";
|
|
107
|
+
const s = Math.floor(r / 60);
|
|
108
108
|
if (s < 60) return `${s}m ago`;
|
|
109
109
|
const a = Math.floor(s / 60);
|
|
110
110
|
if (a < 24) return `${a}h ago`;
|
|
111
111
|
const i = Math.floor(a / 24);
|
|
112
|
-
return i < 30 ? `${i}d ago` :
|
|
112
|
+
return i < 30 ? `${i}d ago` : G(e);
|
|
113
113
|
}
|
|
114
|
-
function
|
|
114
|
+
function Tt(e) {
|
|
115
115
|
return e == null ? "" : `${e >= 0 ? "+" : "-"}${(Math.abs(e) / 1e3).toFixed(3)}`;
|
|
116
116
|
}
|
|
117
|
-
function
|
|
118
|
-
const { type:
|
|
119
|
-
return
|
|
117
|
+
function Ze(e, t) {
|
|
118
|
+
const { type: r, title: s, trackId: a, trackLayout: i, carId: o, game: d, data: p } = e, c = typeof p == "string" ? JSON.parse(p) : p, u = a ? V(a, i, d) : null, v = o ? _(o) : null, f = [u, v].filter(Boolean).join(" — ");
|
|
119
|
+
return r === "RECORD_BEATEN" && f ? `${c != null && c.beatenBySteamId && t ? t(c.beatenBySteamId).displayName : "Someone"} beat your record on ${f}` : r === "RECORD_SET" && f ? `You set a new record on ${f}` : s || "New notification";
|
|
120
120
|
}
|
|
121
|
-
function
|
|
121
|
+
function ke(e) {
|
|
122
122
|
return e ? {
|
|
123
123
|
E: "Eco",
|
|
124
124
|
RD: "Road",
|
|
@@ -132,108 +132,108 @@ function be(e) {
|
|
|
132
132
|
S: "Soft"
|
|
133
133
|
}[e] || e : "Unknown";
|
|
134
134
|
}
|
|
135
|
-
function
|
|
135
|
+
function we(e) {
|
|
136
136
|
if (!e) return "-";
|
|
137
|
-
const
|
|
138
|
-
return isNaN(
|
|
139
|
-
}
|
|
140
|
-
function
|
|
141
|
-
var p, c,
|
|
142
|
-
const { cdnUrl:
|
|
143
|
-
queryKey: ["pitvox", "leaderboards",
|
|
144
|
-
queryFn: () =>
|
|
137
|
+
const t = Number(e);
|
|
138
|
+
return isNaN(t) ? "-" : t % 1 ? `${t.toFixed(1)}L` : `${t}L`;
|
|
139
|
+
}
|
|
140
|
+
function Je(e = {}) {
|
|
141
|
+
var p, c, u, v, f, h;
|
|
142
|
+
const { cdnUrl: t, partnerSlug: r } = L(), { game: s, gameVersion: a } = e, i = ie(r, null, null, "index.json"), o = $({
|
|
143
|
+
queryKey: ["pitvox", "leaderboards", r, "index"],
|
|
144
|
+
queryFn: () => D(t, i),
|
|
145
145
|
staleTime: 3e4,
|
|
146
146
|
refetchInterval: 3e4
|
|
147
|
-
}), d =
|
|
148
|
-
var
|
|
149
|
-
if (!((
|
|
150
|
-
let
|
|
151
|
-
return s && (
|
|
152
|
-
id:
|
|
153
|
-
layout:
|
|
154
|
-
game:
|
|
155
|
-
gameVersion:
|
|
156
|
-
displayName:
|
|
157
|
-
driverCount:
|
|
158
|
-
carCount:
|
|
159
|
-
record:
|
|
160
|
-
visibleId:
|
|
161
|
-
carId:
|
|
162
|
-
carDisplayName:
|
|
163
|
-
lapTimeMs:
|
|
164
|
-
timestamp:
|
|
147
|
+
}), d = T(() => {
|
|
148
|
+
var m;
|
|
149
|
+
if (!((m = o.data) != null && m.tracks)) return [];
|
|
150
|
+
let k = o.data.tracks;
|
|
151
|
+
return s && (k = k.filter((g) => g.game === s)), a && (k = k.filter((g) => g.gameVersion === a)), k.map((g) => ({
|
|
152
|
+
id: g.trackId,
|
|
153
|
+
layout: g.layout,
|
|
154
|
+
game: g.game,
|
|
155
|
+
gameVersion: g.gameVersion,
|
|
156
|
+
displayName: V(g.trackId, g.layout, g.game),
|
|
157
|
+
driverCount: g.driverCount || 0,
|
|
158
|
+
carCount: g.carCount || 0,
|
|
159
|
+
record: g.recordHolder ? {
|
|
160
|
+
visibleId: g.recordHolder.steamId || g.recordHolder.userId,
|
|
161
|
+
carId: g.recordHolder.carId,
|
|
162
|
+
carDisplayName: _(g.recordHolder.carId),
|
|
163
|
+
lapTimeMs: g.recordHolder.lapTimeMs,
|
|
164
|
+
timestamp: g.recordHolder.recordedAt
|
|
165
165
|
} : null,
|
|
166
|
-
recordByTag:
|
|
166
|
+
recordByTag: g.recordByTag || null
|
|
167
167
|
}));
|
|
168
168
|
}, [(p = o.data) == null ? void 0 : p.tracks, s, a]);
|
|
169
169
|
return {
|
|
170
170
|
...o,
|
|
171
171
|
data: d,
|
|
172
172
|
partner: ((c = o.data) == null ? void 0 : c.partner) || null,
|
|
173
|
-
generatedAt: (
|
|
174
|
-
totalLaps: ((
|
|
173
|
+
generatedAt: (u = o.data) == null ? void 0 : u.generatedAt,
|
|
174
|
+
totalLaps: ((v = o.data) == null ? void 0 : v.totalLaps) || 0,
|
|
175
175
|
totalUsers: ((f = o.data) == null ? void 0 : f.totalUsers) || 0,
|
|
176
|
-
versions: ((
|
|
176
|
+
versions: ((h = o.data) == null ? void 0 : h.versions) || {}
|
|
177
177
|
};
|
|
178
178
|
}
|
|
179
|
-
function
|
|
180
|
-
const { cdnUrl: s, partnerSlug: a } = L(), { carId: i, game: o, gameVersion: d } =
|
|
179
|
+
function Xe(e, t, r = {}) {
|
|
180
|
+
const { cdnUrl: s, partnerSlug: a } = L(), { carId: i, game: o, gameVersion: d } = r, p = t || "default", c = ie(a, o, d, `tracks/${e}/${p}.json`), { data: u, isLoading: v, error: f } = $({
|
|
181
181
|
queryKey: ["pitvox", "leaderboards", a, "track", e, p, o, d],
|
|
182
|
-
queryFn: () =>
|
|
182
|
+
queryFn: () => D(s, c),
|
|
183
183
|
enabled: !!e,
|
|
184
184
|
staleTime: 3e4,
|
|
185
185
|
refetchInterval: 3e4
|
|
186
186
|
});
|
|
187
|
-
return { data:
|
|
188
|
-
if (!(
|
|
189
|
-
let
|
|
190
|
-
if (o && (
|
|
191
|
-
const
|
|
192
|
-
for (const
|
|
193
|
-
const
|
|
194
|
-
|
|
187
|
+
return { data: T(() => {
|
|
188
|
+
if (!(u != null && u.entries)) return [];
|
|
189
|
+
let k = u.entries;
|
|
190
|
+
if (o && (k = k.filter((m) => m.game === o)), !i) {
|
|
191
|
+
const m = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Map();
|
|
192
|
+
for (const b of k) {
|
|
193
|
+
const x = b.steamId || b.userId;
|
|
194
|
+
g.has(b.carId) || g.set(b.carId, /* @__PURE__ */ new Set()), g.get(b.carId).add(x), (!m.has(b.carId) || b.lapTimeMs < m.get(b.carId).lapTimeMs) && m.set(b.carId, b);
|
|
195
195
|
}
|
|
196
|
-
return Array.from(
|
|
197
|
-
var
|
|
198
|
-
return { ...
|
|
199
|
-
}).sort((
|
|
196
|
+
return Array.from(m.values()).map((b) => {
|
|
197
|
+
var x;
|
|
198
|
+
return { ...b, driverCount: ((x = g.get(b.carId)) == null ? void 0 : x.size) || 0 };
|
|
199
|
+
}).sort((b, x) => b.lapTimeMs - x.lapTimeMs);
|
|
200
200
|
}
|
|
201
|
-
return
|
|
202
|
-
}, [
|
|
203
|
-
}
|
|
204
|
-
function
|
|
205
|
-
var
|
|
206
|
-
const { cdnUrl: i, partnerSlug: o } = L(), { showInvalid: d = !1, game: p, gameVersion: c } = a,
|
|
207
|
-
queryKey: ["pitvox", "laps", o, e,
|
|
208
|
-
queryFn: () =>
|
|
209
|
-
enabled: !!e && !!
|
|
201
|
+
return k.filter((m) => m.carId === i).sort((m, g) => m.lapTimeMs - g.lapTimeMs);
|
|
202
|
+
}, [u == null ? void 0 : u.entries, i, o]), isLoading: v, error: f };
|
|
203
|
+
}
|
|
204
|
+
function en(e, t, r, s, a = {}) {
|
|
205
|
+
var m, g;
|
|
206
|
+
const { cdnUrl: i, partnerSlug: o } = L(), { showInvalid: d = !1, game: p, gameVersion: c } = a, u = e && t ? Qe(o, e, t, r) : null, f = $({
|
|
207
|
+
queryKey: ["pitvox", "laps", o, e, t, r || "default"],
|
|
208
|
+
queryFn: () => D(i, u),
|
|
209
|
+
enabled: !!e && !!t,
|
|
210
210
|
staleTime: 3e4,
|
|
211
211
|
refetchInterval: 3e4
|
|
212
|
-
}),
|
|
213
|
-
var
|
|
214
|
-
return (
|
|
215
|
-
}, [(
|
|
216
|
-
const
|
|
217
|
-
if (
|
|
218
|
-
const
|
|
219
|
-
return
|
|
220
|
-
}, [
|
|
212
|
+
}), h = T(() => {
|
|
213
|
+
var b;
|
|
214
|
+
return (b = f.data) != null && b.laps ? f.data.laps.filter((x) => !(x.carId !== s || p && x.game !== p || c && x.gameVersion !== c || !d && !x.isValid)).sort((x, w) => x.lapTimeMs - w.lapTimeMs) : [];
|
|
215
|
+
}, [(m = f.data) == null ? void 0 : m.laps, s, p, c, d]), k = T(() => {
|
|
216
|
+
const b = h.filter((N) => N.isValid && N.sector1Ms && N.sector2Ms && N.sector3Ms);
|
|
217
|
+
if (b.length < 2) return null;
|
|
218
|
+
const x = Math.min(...b.map((N) => N.sector1Ms)), w = Math.min(...b.map((N) => N.sector2Ms)), C = Math.min(...b.map((N) => N.sector3Ms)), M = x + w + C, P = Math.min(...b.map((N) => N.lapTimeMs));
|
|
219
|
+
return M >= P ? null : { lapTimeMs: M, sector1Ms: x, sector2Ms: w, sector3Ms: C };
|
|
220
|
+
}, [h]);
|
|
221
221
|
return {
|
|
222
222
|
...f,
|
|
223
|
-
data:
|
|
224
|
-
driverName: ((
|
|
225
|
-
theoreticalBest:
|
|
223
|
+
data: h,
|
|
224
|
+
driverName: ((g = f.data) == null ? void 0 : g.driverName) || "Driver",
|
|
225
|
+
theoreticalBest: k
|
|
226
226
|
};
|
|
227
227
|
}
|
|
228
|
-
function
|
|
229
|
-
const { cdnUrl: e } = L(), { data:
|
|
228
|
+
function Ce() {
|
|
229
|
+
const { cdnUrl: e } = L(), { data: t } = $({
|
|
230
230
|
queryKey: ["pitvox", "users", "index"],
|
|
231
|
-
queryFn: () =>
|
|
231
|
+
queryFn: () => D(e, "users/index.json"),
|
|
232
232
|
staleTime: 5 * 6e4,
|
|
233
233
|
gcTime: 30 * 6e4
|
|
234
|
-
}),
|
|
234
|
+
}), r = (t == null ? void 0 : t.users) || {};
|
|
235
235
|
return (s, a) => {
|
|
236
|
-
const i =
|
|
236
|
+
const i = r[s];
|
|
237
237
|
return {
|
|
238
238
|
displayName: (i == null ? void 0 : i.displayName) || a || s || "Unknown",
|
|
239
239
|
avatarUrl: (i == null ? void 0 : i.avatarUrl) || null,
|
|
@@ -241,25 +241,25 @@ function ke() {
|
|
|
241
241
|
};
|
|
242
242
|
};
|
|
243
243
|
}
|
|
244
|
-
function
|
|
245
|
-
const { cdnUrl:
|
|
244
|
+
function $t(e = "evo") {
|
|
245
|
+
const { cdnUrl: t } = L(), { data: r } = $({
|
|
246
246
|
queryKey: ["pitvox", "cars", e],
|
|
247
|
-
queryFn: () =>
|
|
247
|
+
queryFn: () => D(t, `cars/${e}.json`),
|
|
248
248
|
staleTime: 5 * 6e4,
|
|
249
249
|
gcTime: 30 * 6e4
|
|
250
250
|
});
|
|
251
251
|
return {
|
|
252
|
-
tags: (
|
|
253
|
-
cars: (
|
|
254
|
-
categories: (
|
|
255
|
-
tagLabels: (
|
|
252
|
+
tags: (r == null ? void 0 : r.tags) || [],
|
|
253
|
+
cars: (r == null ? void 0 : r.cars) || {},
|
|
254
|
+
categories: (r == null ? void 0 : r.categories) || [],
|
|
255
|
+
tagLabels: (r == null ? void 0 : r.tagLabels) || {}
|
|
256
256
|
};
|
|
257
257
|
}
|
|
258
|
-
function
|
|
258
|
+
function Mt() {
|
|
259
259
|
var a, i;
|
|
260
|
-
const { cdnUrl: e, partnerSlug:
|
|
261
|
-
queryKey: ["pitvox", "recentLaps",
|
|
262
|
-
queryFn: () =>
|
|
260
|
+
const { cdnUrl: e, partnerSlug: t } = L(), r = Ye(t), s = $({
|
|
261
|
+
queryKey: ["pitvox", "recentLaps", t],
|
|
262
|
+
queryFn: () => D(e, r),
|
|
263
263
|
staleTime: 3e4,
|
|
264
264
|
refetchInterval: 3e4,
|
|
265
265
|
gcTime: 10 * 6e4
|
|
@@ -270,103 +270,112 @@ function vt() {
|
|
|
270
270
|
isLoading: s.isLoading
|
|
271
271
|
};
|
|
272
272
|
}
|
|
273
|
-
function
|
|
274
|
-
return
|
|
273
|
+
function Dt(e, t) {
|
|
274
|
+
return Xe(e, null, { carId: t });
|
|
275
275
|
}
|
|
276
|
-
function
|
|
277
|
-
const { cdnUrl: e, partnerSlug:
|
|
278
|
-
return
|
|
279
|
-
queryKey: ["pitvox", "competitions",
|
|
276
|
+
function At() {
|
|
277
|
+
const { cdnUrl: e, partnerSlug: t } = L();
|
|
278
|
+
return $({
|
|
279
|
+
queryKey: ["pitvox", "competitions", t],
|
|
280
280
|
queryFn: async () => {
|
|
281
|
-
const
|
|
282
|
-
return
|
|
281
|
+
const r = await D(e, "competitions/index.json");
|
|
282
|
+
return r != null && r.competitions ? t ? r.competitions.filter((s) => s.partnerSlug === t) : r.competitions : [];
|
|
283
283
|
},
|
|
284
284
|
staleTime: 6e4
|
|
285
285
|
});
|
|
286
286
|
}
|
|
287
|
-
function
|
|
288
|
-
const
|
|
289
|
-
return
|
|
287
|
+
function Se(e, t = {}) {
|
|
288
|
+
const r = L(), s = t.partnerSlug || r.partnerSlug;
|
|
289
|
+
return $({
|
|
290
290
|
queryKey: ["pitvox", "competition", s, e, "config"],
|
|
291
|
-
queryFn: () =>
|
|
291
|
+
queryFn: () => D(r.cdnUrl, `competitions/${s}/${e}/config.json`),
|
|
292
292
|
enabled: !!s && !!e,
|
|
293
293
|
staleTime: 6e4
|
|
294
294
|
});
|
|
295
295
|
}
|
|
296
|
-
function
|
|
297
|
-
const
|
|
298
|
-
return
|
|
296
|
+
function Le(e, t = {}) {
|
|
297
|
+
const r = L(), s = t.partnerSlug || r.partnerSlug;
|
|
298
|
+
return $({
|
|
299
299
|
queryKey: ["pitvox", "competition", s, e, "standings"],
|
|
300
|
-
queryFn: () =>
|
|
300
|
+
queryFn: () => D(r.cdnUrl, `competitions/${s}/${e}/standings.json`),
|
|
301
301
|
enabled: !!s && !!e,
|
|
302
302
|
staleTime: 6e4
|
|
303
303
|
});
|
|
304
304
|
}
|
|
305
|
-
function
|
|
306
|
-
const s = L(), a =
|
|
307
|
-
return
|
|
308
|
-
queryKey: ["pitvox", "competition", a, e, "round",
|
|
309
|
-
queryFn: () =>
|
|
310
|
-
enabled: !!a && !!e &&
|
|
305
|
+
function nn(e, t, r = {}) {
|
|
306
|
+
const s = L(), a = r.partnerSlug || s.partnerSlug;
|
|
307
|
+
return $({
|
|
308
|
+
queryKey: ["pitvox", "competition", a, e, "round", t],
|
|
309
|
+
queryFn: () => D(s.cdnUrl, `competitions/${a}/${e}/rounds/${t}.json`),
|
|
310
|
+
enabled: !!a && !!e && t != null,
|
|
311
311
|
staleTime: 6e4
|
|
312
312
|
});
|
|
313
313
|
}
|
|
314
|
-
function
|
|
315
|
-
const s = L(), a =
|
|
316
|
-
return
|
|
317
|
-
queryKey: ["pitvox", "competition", a, e, "allRounds",
|
|
314
|
+
function tn(e, t = [], r = {}) {
|
|
315
|
+
const s = L(), a = r.partnerSlug || s.partnerSlug;
|
|
316
|
+
return $({
|
|
317
|
+
queryKey: ["pitvox", "competition", a, e, "allRounds", t],
|
|
318
318
|
queryFn: async () => (await Promise.all(
|
|
319
|
-
|
|
320
|
-
(o) =>
|
|
319
|
+
t.map(
|
|
320
|
+
(o) => D(s.cdnUrl, `competitions/${a}/${e}/rounds/${o}.json`).catch(() => null)
|
|
321
321
|
)
|
|
322
322
|
)).filter(Boolean),
|
|
323
|
-
enabled: !!a && !!e &&
|
|
323
|
+
enabled: !!a && !!e && t.length > 0,
|
|
324
324
|
staleTime: 6e4
|
|
325
325
|
});
|
|
326
326
|
}
|
|
327
|
-
function
|
|
328
|
-
const
|
|
329
|
-
return
|
|
327
|
+
function rn(e, t = {}) {
|
|
328
|
+
const r = L(), s = t.partnerSlug || r.partnerSlug;
|
|
329
|
+
return $({
|
|
330
330
|
queryKey: ["pitvox", "competition", s, e, "leaderboard"],
|
|
331
|
-
queryFn: () =>
|
|
331
|
+
queryFn: () => D(r.cdnUrl, `competitions/${s}/${e}/leaderboard.json`).catch(() => null),
|
|
332
332
|
enabled: !!s && !!e,
|
|
333
333
|
staleTime: 6e4
|
|
334
334
|
});
|
|
335
335
|
}
|
|
336
|
-
function
|
|
337
|
-
const s = L(), a =
|
|
338
|
-
return
|
|
339
|
-
queryKey: ["pitvox", "competition", a, e, "round",
|
|
340
|
-
queryFn: () =>
|
|
341
|
-
enabled: !!a && !!e &&
|
|
336
|
+
function sn(e, t, r = {}) {
|
|
337
|
+
const s = L(), a = r.partnerSlug || s.partnerSlug;
|
|
338
|
+
return $({
|
|
339
|
+
queryKey: ["pitvox", "competition", a, e, "round", t, "leaderboard"],
|
|
340
|
+
queryFn: () => D(s.cdnUrl, `competitions/${a}/${e}/rounds/${t}/leaderboard.json`).catch(() => null),
|
|
341
|
+
enabled: !!a && !!e && t != null,
|
|
342
|
+
staleTime: 6e4
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
function an(e, t, r = {}) {
|
|
346
|
+
const s = L(), a = r.partnerSlug || s.partnerSlug;
|
|
347
|
+
return $({
|
|
348
|
+
queryKey: ["pitvox", "competition", a, e, "round", t, "laps"],
|
|
349
|
+
queryFn: () => D(s.cdnUrl, `competitions/${a}/${e}/rounds/${t}/laps.json`).catch(() => null),
|
|
350
|
+
enabled: !!a && !!e && t != null,
|
|
342
351
|
staleTime: 6e4
|
|
343
352
|
});
|
|
344
353
|
}
|
|
345
|
-
function
|
|
346
|
-
const s = L(), a =
|
|
347
|
-
return
|
|
348
|
-
queryKey: ["pitvox", "competition", a, e, "round",
|
|
349
|
-
queryFn: () =>
|
|
350
|
-
enabled: (
|
|
354
|
+
function on(e, t, r = {}) {
|
|
355
|
+
const s = L(), a = r.partnerSlug || s.partnerSlug;
|
|
356
|
+
return $({
|
|
357
|
+
queryKey: ["pitvox", "competition", a, e, "round", t, "positions"],
|
|
358
|
+
queryFn: () => D(s.cdnUrl, `competitions/${a}/${e}/rounds/${t}/positions.json`).catch(() => null),
|
|
359
|
+
enabled: (r.enabled ?? !0) && !!a && !!e && t != null,
|
|
351
360
|
staleTime: 6e4
|
|
352
361
|
});
|
|
353
362
|
}
|
|
354
|
-
function
|
|
355
|
-
const
|
|
356
|
-
return
|
|
363
|
+
function Re(e, t = {}) {
|
|
364
|
+
const r = L(), s = t.partnerSlug || r.partnerSlug;
|
|
365
|
+
return $({
|
|
357
366
|
queryKey: ["pitvox", "competition", s, e, "entrylist"],
|
|
358
|
-
queryFn: () =>
|
|
367
|
+
queryFn: () => D(r.cdnUrl, `competitions/${s}/${e}/entrylist.json`),
|
|
359
368
|
enabled: !!s && !!e,
|
|
360
369
|
staleTime: 6e4
|
|
361
370
|
});
|
|
362
371
|
}
|
|
363
|
-
function
|
|
364
|
-
const { cdnUrl:
|
|
365
|
-
return
|
|
366
|
-
queryKey: ["pitvox", "registration",
|
|
372
|
+
function le(e) {
|
|
373
|
+
const { cdnUrl: t, partnerSlug: r, getSteamId: s } = L(), a = s();
|
|
374
|
+
return $({
|
|
375
|
+
queryKey: ["pitvox", "registration", r, e, a],
|
|
367
376
|
queryFn: async () => {
|
|
368
377
|
var p;
|
|
369
|
-
const i = await fetch(`${
|
|
378
|
+
const i = await fetch(`${t}/competitions/${r}/${e}/entrylist.json`);
|
|
370
379
|
if (!i.ok) return { isRegistered: !1, entryList: null };
|
|
371
380
|
const o = await i.json();
|
|
372
381
|
return { isRegistered: !!a && ((p = o.drivers) == null ? void 0 : p.some((c) => c.steamId === a)), entryList: o };
|
|
@@ -375,20 +384,20 @@ function ae(e) {
|
|
|
375
384
|
staleTime: 6e4
|
|
376
385
|
});
|
|
377
386
|
}
|
|
378
|
-
function
|
|
379
|
-
const { onRegister:
|
|
380
|
-
return
|
|
387
|
+
function Te(e) {
|
|
388
|
+
const { onRegister: t, partnerSlug: r, getSteamId: s } = L(), a = O(), i = Ce();
|
|
389
|
+
return Y({
|
|
381
390
|
mutationFn: (o) => {
|
|
382
|
-
if (!
|
|
391
|
+
if (!t)
|
|
383
392
|
throw new Error(
|
|
384
393
|
"No onRegister callback provided to PitVoxPartnerProvider. Provide onRegister for in-app registration, or use useRegistrationUrl() to link to pitvox.com."
|
|
385
394
|
);
|
|
386
|
-
return
|
|
395
|
+
return t(e, o);
|
|
387
396
|
},
|
|
388
397
|
onSuccess: () => {
|
|
389
398
|
const o = s();
|
|
390
399
|
if (a.setQueriesData(
|
|
391
|
-
{ queryKey: ["pitvox", "registration",
|
|
400
|
+
{ queryKey: ["pitvox", "registration", r, e] },
|
|
392
401
|
(d) => d ? { ...d, isRegistered: !0 } : { isRegistered: !0, entryList: null }
|
|
393
402
|
), o) {
|
|
394
403
|
const d = i(o), p = {
|
|
@@ -397,10 +406,10 @@ function Se(e) {
|
|
|
397
406
|
avatarUrl: d.avatarUrl
|
|
398
407
|
};
|
|
399
408
|
a.setQueriesData(
|
|
400
|
-
{ queryKey: ["pitvox", "competition",
|
|
409
|
+
{ queryKey: ["pitvox", "competition", r, e, "entrylist"] },
|
|
401
410
|
(c) => {
|
|
402
|
-
var
|
|
403
|
-
return c ? ((
|
|
411
|
+
var v;
|
|
412
|
+
return c ? ((v = c.drivers) == null ? void 0 : v.some((f) => f.steamId === o)) ? c : { ...c, drivers: [...c.drivers || [], p] } : { drivers: [p] };
|
|
404
413
|
}
|
|
405
414
|
);
|
|
406
415
|
}
|
|
@@ -408,115 +417,115 @@ function Se(e) {
|
|
|
408
417
|
});
|
|
409
418
|
}
|
|
410
419
|
function $e(e) {
|
|
411
|
-
const { onWithdraw:
|
|
412
|
-
return
|
|
420
|
+
const { onWithdraw: t, partnerSlug: r, getSteamId: s } = L(), a = O();
|
|
421
|
+
return Y({
|
|
413
422
|
mutationFn: (i) => {
|
|
414
|
-
if (!
|
|
423
|
+
if (!t)
|
|
415
424
|
throw new Error(
|
|
416
425
|
"No onWithdraw callback provided to PitVoxPartnerProvider. Provide onWithdraw for in-app withdrawal, or use useRegistrationUrl() to link to pitvox.com."
|
|
417
426
|
);
|
|
418
427
|
const o = i || s();
|
|
419
428
|
if (!o) throw new Error("No Steam ID available");
|
|
420
|
-
return
|
|
429
|
+
return t(e, o);
|
|
421
430
|
},
|
|
422
431
|
onSuccess: () => {
|
|
423
432
|
const i = s();
|
|
424
433
|
a.setQueriesData(
|
|
425
|
-
{ queryKey: ["pitvox", "registration",
|
|
434
|
+
{ queryKey: ["pitvox", "registration", r, e] },
|
|
426
435
|
(o) => o ? { ...o, isRegistered: !1 } : { isRegistered: !1, entryList: null }
|
|
427
436
|
), i && a.setQueriesData(
|
|
428
|
-
{ queryKey: ["pitvox", "competition",
|
|
437
|
+
{ queryKey: ["pitvox", "competition", r, e, "entrylist"] },
|
|
429
438
|
(o) => o != null && o.drivers ? { ...o, drivers: o.drivers.filter((d) => d.steamId !== i) } : o
|
|
430
439
|
);
|
|
431
440
|
}
|
|
432
441
|
});
|
|
433
442
|
}
|
|
434
|
-
function
|
|
435
|
-
const { onRegister: e, onWithdraw:
|
|
436
|
-
return { isPowerMode:
|
|
443
|
+
function ce() {
|
|
444
|
+
const { onRegister: e, onWithdraw: t } = L(), r = !!(e && t);
|
|
445
|
+
return { isPowerMode: r, isBasicMode: !r };
|
|
437
446
|
}
|
|
438
|
-
function
|
|
439
|
-
const { pitvoxUrl:
|
|
440
|
-
return `${
|
|
447
|
+
function de(e) {
|
|
448
|
+
const { pitvoxUrl: t, partnerSlug: r } = L();
|
|
449
|
+
return `${t}/p/${r}/competitions/${e}/register`;
|
|
441
450
|
}
|
|
442
|
-
function
|
|
443
|
-
for (const
|
|
444
|
-
if (
|
|
451
|
+
function ln(e, t) {
|
|
452
|
+
for (const r of t)
|
|
453
|
+
if (r.tags.includes(e)) return r.id;
|
|
445
454
|
return "other";
|
|
446
455
|
}
|
|
447
|
-
function
|
|
448
|
-
if (
|
|
456
|
+
function Me(e, t, r = []) {
|
|
457
|
+
if (t.size === 0) return !0;
|
|
449
458
|
const s = {};
|
|
450
|
-
for (const a of
|
|
451
|
-
const i =
|
|
459
|
+
for (const a of t) {
|
|
460
|
+
const i = ln(a, r);
|
|
452
461
|
s[i] || (s[i] = []), s[i].push(a);
|
|
453
462
|
}
|
|
454
463
|
for (const a of Object.values(s))
|
|
455
464
|
if (!a.some((i) => e.includes(i))) return !1;
|
|
456
465
|
return !0;
|
|
457
466
|
}
|
|
458
|
-
function
|
|
459
|
-
const [
|
|
467
|
+
function De(e, t) {
|
|
468
|
+
const [r, s] = E(/* @__PURE__ */ new Set()), a = e !== void 0, i = a ? e : r, o = K((p) => {
|
|
460
469
|
const c = new Set(i);
|
|
461
|
-
c.has(p) ? c.delete(p) : c.add(p), a &&
|
|
462
|
-
}, [i, a,
|
|
463
|
-
a &&
|
|
464
|
-
}, [a,
|
|
470
|
+
c.has(p) ? c.delete(p) : c.add(p), a && t ? t(c) : s(c);
|
|
471
|
+
}, [i, a, t]), d = K(() => {
|
|
472
|
+
a && t ? t(/* @__PURE__ */ new Set()) : s(/* @__PURE__ */ new Set());
|
|
473
|
+
}, [a, t]);
|
|
465
474
|
return { activeTags: i, toggle: o, clear: d };
|
|
466
475
|
}
|
|
467
|
-
function
|
|
468
|
-
const [
|
|
469
|
-
|
|
476
|
+
function Z(e) {
|
|
477
|
+
const [t, r] = E(e), s = K((a) => {
|
|
478
|
+
r(
|
|
470
479
|
(i) => i.key === a ? { key: a, dir: i.dir === "asc" ? "desc" : "asc" } : { key: a, dir: a.includes("timestamp") || a.includes("Date") ? "desc" : "asc" }
|
|
471
480
|
);
|
|
472
481
|
}, []);
|
|
473
|
-
return [
|
|
482
|
+
return [t, s];
|
|
474
483
|
}
|
|
475
|
-
function
|
|
484
|
+
function J(e, t, r) {
|
|
476
485
|
return [...e].sort((s, a) => {
|
|
477
|
-
const i =
|
|
486
|
+
const i = r(s, t.key), o = r(a, t.key);
|
|
478
487
|
if (i == null && o == null) return 0;
|
|
479
488
|
if (i == null) return 1;
|
|
480
489
|
if (o == null) return -1;
|
|
481
490
|
const d = typeof i == "string" ? i.localeCompare(o) : i - o;
|
|
482
|
-
return
|
|
491
|
+
return t.dir === "desc" ? -d : d;
|
|
483
492
|
});
|
|
484
493
|
}
|
|
485
|
-
function
|
|
486
|
-
const
|
|
487
|
-
return
|
|
488
|
-
s1: Math.min(...
|
|
489
|
-
s2: Math.min(...
|
|
490
|
-
s3: Math.min(...
|
|
494
|
+
function Ae(e, t = !1) {
|
|
495
|
+
const r = t ? e == null ? void 0 : e.filter((s) => s.isValid) : e;
|
|
496
|
+
return r != null && r.length ? {
|
|
497
|
+
s1: Math.min(...r.map((s) => s.sector1Ms).filter(Boolean)),
|
|
498
|
+
s2: Math.min(...r.map((s) => s.sector2Ms).filter(Boolean)),
|
|
499
|
+
s3: Math.min(...r.map((s) => s.sector3Ms).filter(Boolean))
|
|
491
500
|
} : null;
|
|
492
501
|
}
|
|
493
|
-
function
|
|
494
|
-
return e ?
|
|
502
|
+
function cn({ active: e, dir: t }) {
|
|
503
|
+
return e ? t === "asc" ? /* @__PURE__ */ n("svg", { className: "pvx-sort-icon", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 15.75l7.5-7.5 7.5 7.5" }) }) : /* @__PURE__ */ n("svg", { className: "pvx-sort-icon", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" }) }) : /* @__PURE__ */ n("svg", { className: "pvx-sort-icon pvx-sort-icon--inactive", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 9l4-4 4 4M16 15l-4 4-4-4" }) });
|
|
495
504
|
}
|
|
496
|
-
function
|
|
505
|
+
function I({ label: e, sortKey: t, config: r, onSort: s, className: a = "" }) {
|
|
497
506
|
return /* @__PURE__ */ n(
|
|
498
507
|
"th",
|
|
499
508
|
{
|
|
500
509
|
className: `pvx-th pvx-th--sortable ${a}`,
|
|
501
|
-
onClick: () => s(
|
|
510
|
+
onClick: () => s(t),
|
|
502
511
|
children: /* @__PURE__ */ l("span", { className: "pvx-th-inner", children: [
|
|
503
512
|
e,
|
|
504
|
-
/* @__PURE__ */ n(
|
|
513
|
+
/* @__PURE__ */ n(cn, { active: r.key === t, dir: r.dir })
|
|
505
514
|
] })
|
|
506
515
|
}
|
|
507
516
|
);
|
|
508
517
|
}
|
|
509
|
-
function
|
|
510
|
-
const { displayName:
|
|
518
|
+
function X({ userId: e, getUserDisplay: t }) {
|
|
519
|
+
const { displayName: r, avatarUrl: s } = t(e);
|
|
511
520
|
return /* @__PURE__ */ l("span", { className: "pvx-driver", children: [
|
|
512
521
|
s ? /* @__PURE__ */ n("img", { src: s, alt: "", className: "pvx-driver-avatar" }) : /* @__PURE__ */ n("span", { className: "pvx-driver-avatar pvx-driver-avatar--placeholder" }),
|
|
513
|
-
/* @__PURE__ */ n("span", { className: "pvx-driver-name", children:
|
|
522
|
+
/* @__PURE__ */ n("span", { className: "pvx-driver-name", children: r })
|
|
514
523
|
] });
|
|
515
524
|
}
|
|
516
|
-
function
|
|
517
|
-
return /* @__PURE__ */ n("span", { className:
|
|
525
|
+
function pe({ rank: e, podium: t = !1 }) {
|
|
526
|
+
return /* @__PURE__ */ n("span", { className: t ? e === 1 ? "pvx-rank pvx-rank--gold" : e === 2 ? "pvx-rank pvx-rank--silver" : e === 3 ? "pvx-rank pvx-rank--bronze" : "pvx-rank" : "pvx-rank", children: e });
|
|
518
527
|
}
|
|
519
|
-
function
|
|
528
|
+
function Pe({ availableTags: e, activeTags: t, onToggle: r, onClear: s, categories: a = [], tagLabels: i = {} }) {
|
|
520
529
|
if (!e || e.length < 2) return null;
|
|
521
530
|
const o = a.map((d) => ({ id: d.id, tags: d.tags.filter((p) => e.includes(p)) })).filter((d) => d.tags.length > 0);
|
|
522
531
|
return /* @__PURE__ */ l("div", { className: "pvx-tag-bar", children: [
|
|
@@ -524,7 +533,7 @@ function De({ availableTags: e, activeTags: r, onToggle: t, onClear: s, categori
|
|
|
524
533
|
"button",
|
|
525
534
|
{
|
|
526
535
|
onClick: s,
|
|
527
|
-
className: `pvx-tag ${
|
|
536
|
+
className: `pvx-tag ${t.size === 0 ? "pvx-tag--active" : ""}`,
|
|
528
537
|
children: "All"
|
|
529
538
|
}
|
|
530
539
|
),
|
|
@@ -533,8 +542,8 @@ function De({ availableTags: e, activeTags: r, onToggle: t, onClear: s, categori
|
|
|
533
542
|
d.tags.map((c) => /* @__PURE__ */ n(
|
|
534
543
|
"button",
|
|
535
544
|
{
|
|
536
|
-
onClick: () =>
|
|
537
|
-
className: `pvx-tag ${
|
|
545
|
+
onClick: () => r(c),
|
|
546
|
+
className: `pvx-tag ${t.has(c) ? "pvx-tag--active" : ""}`,
|
|
538
547
|
children: i[c] || c
|
|
539
548
|
},
|
|
540
549
|
c
|
|
@@ -542,156 +551,156 @@ function De({ availableTags: e, activeTags: r, onToggle: t, onClear: s, categori
|
|
|
542
551
|
] }, d.id))
|
|
543
552
|
] });
|
|
544
553
|
}
|
|
545
|
-
function
|
|
546
|
-
return /* @__PURE__ */ n("nav", { className: "pvx-breadcrumb", "aria-label": "Breadcrumb", children: /* @__PURE__ */ n("ol", { className: "pvx-breadcrumb-list", children: e.map((
|
|
547
|
-
const s =
|
|
554
|
+
function ue({ segments: e }) {
|
|
555
|
+
return /* @__PURE__ */ n("nav", { className: "pvx-breadcrumb", "aria-label": "Breadcrumb", children: /* @__PURE__ */ n("ol", { className: "pvx-breadcrumb-list", children: e.map((t, r) => {
|
|
556
|
+
const s = r === e.length - 1;
|
|
548
557
|
return /* @__PURE__ */ l("li", { className: "pvx-breadcrumb-item", children: [
|
|
549
|
-
|
|
550
|
-
!s &&
|
|
551
|
-
] },
|
|
558
|
+
r > 0 && /* @__PURE__ */ n("svg", { className: "pvx-breadcrumb-chevron", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 4.5l7.5 7.5-7.5 7.5" }) }),
|
|
559
|
+
!s && t.onClick ? /* @__PURE__ */ n("button", { onClick: t.onClick, className: "pvx-breadcrumb-link", children: t.label }) : /* @__PURE__ */ n("span", { className: "pvx-breadcrumb-current", children: t.label })
|
|
560
|
+
] }, t.key);
|
|
552
561
|
}) }) });
|
|
553
562
|
}
|
|
554
|
-
function
|
|
563
|
+
function z({ message: e }) {
|
|
555
564
|
return /* @__PURE__ */ l("div", { className: "pvx-empty", children: [
|
|
556
565
|
/* @__PURE__ */ n("svg", { className: "pvx-empty-icon", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16.5 18.75h-9m9 0a3 3 0 013 3h-15a3 3 0 013-3m9 0v-4.5A3.375 3.375 0 0013.125 10.875h-2.25A3.375 3.375 0 007.5 14.25v4.5" }) }),
|
|
557
566
|
/* @__PURE__ */ n("p", { children: e })
|
|
558
567
|
] });
|
|
559
568
|
}
|
|
560
|
-
function
|
|
569
|
+
function Q() {
|
|
561
570
|
return /* @__PURE__ */ n("div", { className: "pvx-loading", children: "Loading..." });
|
|
562
571
|
}
|
|
563
|
-
function
|
|
572
|
+
function dn() {
|
|
564
573
|
return /* @__PURE__ */ n("svg", { className: "pvx-icon pvx-icon--valid", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 12.75l6 6 9-13.5" }) });
|
|
565
574
|
}
|
|
566
|
-
function
|
|
575
|
+
function pn() {
|
|
567
576
|
return /* @__PURE__ */ n("svg", { className: "pvx-icon pvx-icon--invalid", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) });
|
|
568
577
|
}
|
|
569
|
-
function
|
|
570
|
-
const [d, p] =
|
|
571
|
-
var
|
|
572
|
-
if (!((
|
|
573
|
-
const
|
|
574
|
-
for (const
|
|
575
|
-
|
|
576
|
-
return
|
|
577
|
-
}, [e,
|
|
578
|
-
var
|
|
579
|
-
if (!
|
|
580
|
-
let
|
|
581
|
-
const
|
|
582
|
-
for (const
|
|
583
|
-
if (
|
|
584
|
-
|
|
585
|
-
const
|
|
586
|
-
|
|
578
|
+
function Pt({ tracks: e, isLoading: t, carMetadata: r, getUserDisplay: s, onTrackSelect: a, tags: i, onTagChange: o }) {
|
|
579
|
+
const [d, p] = Z({ key: "record.timestamp", dir: "desc" }), { activeTags: c, toggle: u, clear: v } = De(i, o), f = T(() => {
|
|
580
|
+
var g;
|
|
581
|
+
if (!((g = r == null ? void 0 : r.tags) != null && g.length)) return [];
|
|
582
|
+
const m = /* @__PURE__ */ new Set();
|
|
583
|
+
for (const b of e || [])
|
|
584
|
+
b.recordByTag && Object.keys(b.recordByTag).forEach((x) => m.add(x));
|
|
585
|
+
return r.tags.filter((b) => m.has(b));
|
|
586
|
+
}, [e, r]), h = T(() => e ? c.size === 0 ? e : e.map((m) => {
|
|
587
|
+
var x, w;
|
|
588
|
+
if (!m.recordByTag) return null;
|
|
589
|
+
let g = null;
|
|
590
|
+
const b = /* @__PURE__ */ new Set();
|
|
591
|
+
for (const C of Object.values(m.recordByTag)) {
|
|
592
|
+
if (b.has(C.carId)) continue;
|
|
593
|
+
b.add(C.carId);
|
|
594
|
+
const M = ((w = (x = r == null ? void 0 : r.cars) == null ? void 0 : x[C.carId]) == null ? void 0 : w.tags) || [];
|
|
595
|
+
Me(M, c, r == null ? void 0 : r.categories) && (!g || C.lapTimeMs < g.lapTimeMs) && (g = C);
|
|
587
596
|
}
|
|
588
|
-
return
|
|
589
|
-
...
|
|
597
|
+
return g ? {
|
|
598
|
+
...m,
|
|
590
599
|
record: {
|
|
591
|
-
visibleId:
|
|
592
|
-
carId:
|
|
593
|
-
carDisplayName:
|
|
594
|
-
lapTimeMs:
|
|
595
|
-
timestamp:
|
|
600
|
+
visibleId: g.steamId || g.identifier,
|
|
601
|
+
carId: g.carId,
|
|
602
|
+
carDisplayName: _(g.carId),
|
|
603
|
+
lapTimeMs: g.lapTimeMs,
|
|
604
|
+
timestamp: g.recordedAt
|
|
596
605
|
}
|
|
597
606
|
} : null;
|
|
598
|
-
}).filter(Boolean) : [], [e, c,
|
|
599
|
-
var
|
|
600
|
-
switch (
|
|
607
|
+
}).filter(Boolean) : [], [e, c, r]), k = T(() => J(h, d, (m, g) => {
|
|
608
|
+
var b, x;
|
|
609
|
+
switch (g) {
|
|
601
610
|
case "displayName":
|
|
602
|
-
return
|
|
611
|
+
return m.displayName;
|
|
603
612
|
case "record.lapTimeMs":
|
|
604
|
-
return (
|
|
613
|
+
return (b = m.record) == null ? void 0 : b.lapTimeMs;
|
|
605
614
|
case "driverCount":
|
|
606
|
-
return
|
|
615
|
+
return m.driverCount || 0;
|
|
607
616
|
case "carCount":
|
|
608
|
-
return
|
|
617
|
+
return m.carCount || 0;
|
|
609
618
|
case "record.timestamp":
|
|
610
619
|
default:
|
|
611
|
-
return (
|
|
620
|
+
return (x = m.record) != null && x.timestamp ? new Date(m.record.timestamp).getTime() : 0;
|
|
612
621
|
}
|
|
613
|
-
}), [
|
|
614
|
-
return
|
|
622
|
+
}), [h, d]);
|
|
623
|
+
return t ? /* @__PURE__ */ n(Q, {}) : e != null && e.length ? /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
615
624
|
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ n("h2", { className: "pvx-card-title", children: "Track Records" }) }),
|
|
616
625
|
/* @__PURE__ */ n(
|
|
617
|
-
|
|
626
|
+
Pe,
|
|
618
627
|
{
|
|
619
628
|
availableTags: f,
|
|
620
629
|
activeTags: c,
|
|
621
|
-
onToggle:
|
|
622
|
-
onClear:
|
|
623
|
-
categories:
|
|
624
|
-
tagLabels:
|
|
630
|
+
onToggle: u,
|
|
631
|
+
onClear: v,
|
|
632
|
+
categories: r == null ? void 0 : r.categories,
|
|
633
|
+
tagLabels: r == null ? void 0 : r.tagLabels
|
|
625
634
|
}
|
|
626
635
|
),
|
|
627
636
|
/* @__PURE__ */ n("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
628
637
|
/* @__PURE__ */ n("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
629
|
-
/* @__PURE__ */ n(
|
|
638
|
+
/* @__PURE__ */ n(I, { label: "Track", sortKey: "displayName", config: d, onSort: p }),
|
|
630
639
|
/* @__PURE__ */ n("th", { className: "pvx-th", children: "Record Holder" }),
|
|
631
640
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-lg", children: "Car" }),
|
|
632
|
-
/* @__PURE__ */ n(
|
|
633
|
-
/* @__PURE__ */ n(
|
|
634
|
-
/* @__PURE__ */ n(
|
|
635
|
-
/* @__PURE__ */ n(
|
|
641
|
+
/* @__PURE__ */ n(I, { label: "Lap Time", sortKey: "record.lapTimeMs", config: d, onSort: p }),
|
|
642
|
+
/* @__PURE__ */ n(I, { label: "Drivers", sortKey: "driverCount", config: d, onSort: p, className: "pvx-hidden-below-md" }),
|
|
643
|
+
/* @__PURE__ */ n(I, { label: "Cars", sortKey: "carCount", config: d, onSort: p, className: "pvx-hidden-below-lg" }),
|
|
644
|
+
/* @__PURE__ */ n(I, { label: "Date", sortKey: "record.timestamp", config: d, onSort: p, className: "pvx-hidden-below-xl" })
|
|
636
645
|
] }) }),
|
|
637
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children:
|
|
638
|
-
var
|
|
646
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: k.map((m) => {
|
|
647
|
+
var g, b, x;
|
|
639
648
|
return /* @__PURE__ */ l(
|
|
640
649
|
"tr",
|
|
641
650
|
{
|
|
642
651
|
className: "pvx-row pvx-row--clickable",
|
|
643
|
-
onClick: () => a(
|
|
652
|
+
onClick: () => a(m.id, m.layout),
|
|
644
653
|
children: [
|
|
645
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary", children:
|
|
646
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: (
|
|
647
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-lg", children: ((
|
|
648
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
649
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children:
|
|
650
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children:
|
|
651
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: (
|
|
654
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary", children: m.displayName }),
|
|
655
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: (g = m.record) != null && g.visibleId ? /* @__PURE__ */ n(X, { userId: m.record.visibleId, getUserDisplay: s }) : "-" }),
|
|
656
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-lg", children: ((b = m.record) == null ? void 0 : b.carDisplayName) || "-" }),
|
|
657
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: m.record ? q(m.record.lapTimeMs) : "-" }),
|
|
658
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children: m.driverCount || "-" }),
|
|
659
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: m.carCount || "-" }),
|
|
660
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: (x = m.record) != null && x.timestamp ? G(m.record.timestamp) : "-" })
|
|
652
661
|
]
|
|
653
662
|
},
|
|
654
|
-
`${
|
|
663
|
+
`${m.id}|${m.layout || ""}`
|
|
655
664
|
);
|
|
656
665
|
}) })
|
|
657
666
|
] }) })
|
|
658
|
-
] }) : /* @__PURE__ */ n(
|
|
667
|
+
] }) : /* @__PURE__ */ n(z, { message: "No lap times recorded yet." });
|
|
659
668
|
}
|
|
660
|
-
function
|
|
661
|
-
const [c,
|
|
662
|
-
var
|
|
663
|
-
if (!e || !((
|
|
664
|
-
const
|
|
665
|
-
for (const
|
|
666
|
-
(((
|
|
667
|
-
return s.tags.filter((
|
|
668
|
-
}, [e, s]),
|
|
669
|
-
var
|
|
670
|
-
const
|
|
671
|
-
return
|
|
672
|
-
}) : [], [e,
|
|
673
|
-
switch (
|
|
669
|
+
function Bt({ entries: e, isLoading: t, track: r, carMetadata: s, getUserDisplay: a, onCarSelect: i, onNavigate: o, tags: d, onTagChange: p }) {
|
|
670
|
+
const [c, u] = Z({ key: "lapTimeMs", dir: "asc" }), { activeTags: v, toggle: f, clear: h } = De(d, p), k = T(() => {
|
|
671
|
+
var w, C, M;
|
|
672
|
+
if (!e || !((w = s == null ? void 0 : s.tags) != null && w.length)) return [];
|
|
673
|
+
const x = /* @__PURE__ */ new Set();
|
|
674
|
+
for (const P of e)
|
|
675
|
+
(((M = (C = s.cars) == null ? void 0 : C[P.carId]) == null ? void 0 : M.tags) || []).forEach((S) => x.add(S));
|
|
676
|
+
return s.tags.filter((P) => x.has(P));
|
|
677
|
+
}, [e, s]), m = T(() => e ? v.size === 0 ? e : e.filter((x) => {
|
|
678
|
+
var C, M;
|
|
679
|
+
const w = ((M = (C = s == null ? void 0 : s.cars) == null ? void 0 : C[x.carId]) == null ? void 0 : M.tags) || [];
|
|
680
|
+
return Me(w, v, s == null ? void 0 : s.categories);
|
|
681
|
+
}) : [], [e, v, s]), g = T(() => J(m, c, (x, w) => {
|
|
682
|
+
switch (w) {
|
|
674
683
|
case "carId":
|
|
675
|
-
return
|
|
684
|
+
return _(x.carId);
|
|
676
685
|
case "driverCount":
|
|
677
|
-
return
|
|
686
|
+
return x.driverCount || 0;
|
|
678
687
|
case "lapTimeMs":
|
|
679
688
|
default:
|
|
680
|
-
return
|
|
689
|
+
return x.lapTimeMs;
|
|
681
690
|
}
|
|
682
|
-
}), [
|
|
691
|
+
}), [m, c]), b = [
|
|
683
692
|
{ key: "tracks", label: "Tracks", onClick: () => o("tracks") },
|
|
684
|
-
{ key: "track", label:
|
|
693
|
+
{ key: "track", label: r.displayName }
|
|
685
694
|
];
|
|
686
|
-
return
|
|
687
|
-
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ n(
|
|
695
|
+
return t ? /* @__PURE__ */ n(Q, {}) : /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
696
|
+
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ n(ue, { segments: b }) }),
|
|
688
697
|
/* @__PURE__ */ n(
|
|
689
|
-
|
|
698
|
+
Pe,
|
|
690
699
|
{
|
|
691
|
-
availableTags:
|
|
692
|
-
activeTags:
|
|
700
|
+
availableTags: k,
|
|
701
|
+
activeTags: v,
|
|
693
702
|
onToggle: f,
|
|
694
|
-
onClear:
|
|
703
|
+
onClear: h,
|
|
695
704
|
categories: s == null ? void 0 : s.categories,
|
|
696
705
|
tagLabels: s == null ? void 0 : s.tagLabels
|
|
697
706
|
}
|
|
@@ -699,103 +708,103 @@ function Nt({ entries: e, isLoading: r, track: t, carMetadata: s, getUserDisplay
|
|
|
699
708
|
e != null && e.length ? /* @__PURE__ */ n("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
700
709
|
/* @__PURE__ */ n("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
701
710
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-th--narrow", children: "#" }),
|
|
702
|
-
/* @__PURE__ */ n(
|
|
711
|
+
/* @__PURE__ */ n(I, { label: "Car", sortKey: "carId", config: c, onSort: u }),
|
|
703
712
|
/* @__PURE__ */ n("th", { className: "pvx-th", children: "Record Holder" }),
|
|
704
|
-
/* @__PURE__ */ n(
|
|
705
|
-
/* @__PURE__ */ n(
|
|
713
|
+
/* @__PURE__ */ n(I, { label: "Lap Time", sortKey: "lapTimeMs", config: c, onSort: u }),
|
|
714
|
+
/* @__PURE__ */ n(I, { label: "Drivers", sortKey: "driverCount", config: c, onSort: u, className: "pvx-hidden-below-md" }),
|
|
706
715
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-lg", children: "Date" })
|
|
707
716
|
] }) }),
|
|
708
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children:
|
|
717
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: g.map((x, w) => /* @__PURE__ */ l(
|
|
709
718
|
"tr",
|
|
710
719
|
{
|
|
711
720
|
className: "pvx-row pvx-row--clickable",
|
|
712
|
-
onClick: () => i(
|
|
721
|
+
onClick: () => i(x.carId),
|
|
713
722
|
children: [
|
|
714
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(
|
|
715
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary", children:
|
|
716
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(
|
|
717
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: q(
|
|
718
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children:
|
|
719
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-lg", children:
|
|
723
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(pe, { rank: w + 1, podium: !0 }) }),
|
|
724
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary", children: _(x.carId) }),
|
|
725
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(X, { userId: x.steamId || x.userId, getUserDisplay: a }) }),
|
|
726
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: q(x.lapTimeMs) }),
|
|
727
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children: x.driverCount || "-" }),
|
|
728
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-lg", children: x.recordedAt ? G(x.recordedAt) : "-" })
|
|
720
729
|
]
|
|
721
730
|
},
|
|
722
|
-
|
|
731
|
+
x.carId
|
|
723
732
|
)) })
|
|
724
|
-
] }) }) : /* @__PURE__ */ n(
|
|
733
|
+
] }) }) : /* @__PURE__ */ n(z, { message: "No lap times for this track yet." })
|
|
725
734
|
] });
|
|
726
735
|
}
|
|
727
|
-
function
|
|
728
|
-
const [p, c] =
|
|
729
|
-
switch (
|
|
736
|
+
function It({ entries: e, isLoading: t, track: r, carId: s, getUserDisplay: a, onDriverSelect: i, onNavigate: o, highlightId: d }) {
|
|
737
|
+
const [p, c] = Z({ key: "lapTimeMs", dir: "asc" }), u = T(() => Ae(e), [e]), v = T(() => J(e || [], p, (h, k) => {
|
|
738
|
+
switch (k) {
|
|
730
739
|
case "userId":
|
|
731
|
-
return a(
|
|
740
|
+
return a(h.steamId || h.userId).displayName;
|
|
732
741
|
case "lapCount":
|
|
733
|
-
return
|
|
742
|
+
return h.lapCount || 0;
|
|
734
743
|
case "lapTimeMs":
|
|
735
744
|
default:
|
|
736
|
-
return
|
|
745
|
+
return h.lapTimeMs;
|
|
737
746
|
}
|
|
738
747
|
}), [e, p, a]), f = [
|
|
739
748
|
{ key: "tracks", label: "Tracks", onClick: () => o("tracks") },
|
|
740
|
-
{ key: "track", label:
|
|
741
|
-
{ key: "car", label:
|
|
749
|
+
{ key: "track", label: r.displayName, onClick: () => o("track") },
|
|
750
|
+
{ key: "car", label: _(s) }
|
|
742
751
|
];
|
|
743
|
-
return
|
|
744
|
-
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ n(
|
|
752
|
+
return t ? /* @__PURE__ */ n(Q, {}) : /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
753
|
+
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ n(ue, { segments: f }) }),
|
|
745
754
|
e != null && e.length ? /* @__PURE__ */ n("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
746
755
|
/* @__PURE__ */ n("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
747
756
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-th--narrow", children: "#" }),
|
|
748
|
-
/* @__PURE__ */ n(
|
|
749
|
-
/* @__PURE__ */ n(
|
|
757
|
+
/* @__PURE__ */ n(I, { label: "Driver", sortKey: "userId", config: p, onSort: c }),
|
|
758
|
+
/* @__PURE__ */ n(I, { label: "Lap Time", sortKey: "lapTimeMs", config: p, onSort: c }),
|
|
750
759
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "S1" }),
|
|
751
760
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "S2" }),
|
|
752
761
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "S3" }),
|
|
753
762
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-lg", children: "Tyre" }),
|
|
754
763
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-xl", children: "Fuel" }),
|
|
755
|
-
/* @__PURE__ */ n(
|
|
764
|
+
/* @__PURE__ */ n(I, { label: "Laps", sortKey: "lapCount", config: p, onSort: c, className: "pvx-hidden-below-lg" }),
|
|
756
765
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-xl", children: "Date" })
|
|
757
766
|
] }) }),
|
|
758
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children:
|
|
759
|
-
const
|
|
767
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: v.map((h, k) => {
|
|
768
|
+
const m = k + 1, g = h.steamId || h.userId, b = u && h.sector1Ms === u.s1, x = u && h.sector2Ms === u.s2, w = u && h.sector3Ms === u.s3;
|
|
760
769
|
return /* @__PURE__ */ l(
|
|
761
770
|
"tr",
|
|
762
771
|
{
|
|
763
|
-
className: `pvx-row pvx-row--clickable ${d &&
|
|
764
|
-
onClick: () => i(
|
|
772
|
+
className: `pvx-row pvx-row--clickable ${d && g === d ? "pvx-row--highlight" : m <= 3 ? "pvx-row--podium" : ""}`,
|
|
773
|
+
onClick: () => i(g),
|
|
765
774
|
children: [
|
|
766
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(
|
|
767
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ n(
|
|
768
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: q(
|
|
769
|
-
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
770
|
-
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
771
|
-
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
772
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title:
|
|
773
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-xl", children:
|
|
774
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children:
|
|
775
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children:
|
|
775
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(pe, { rank: m, podium: !0 }) }),
|
|
776
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ n(X, { userId: g, getUserDisplay: a }) }),
|
|
777
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: q(h.lapTimeMs) }),
|
|
778
|
+
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${b ? "pvx-td--best-sector" : ""}`, children: F(h.sector1Ms) }),
|
|
779
|
+
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${x ? "pvx-td--best-sector" : ""}`, children: F(h.sector2Ms) }),
|
|
780
|
+
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${w ? "pvx-td--best-sector" : ""}`, children: F(h.sector3Ms) }),
|
|
781
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title: ke(h.tyreCompound), children: h.tyreCompound || "-" }),
|
|
782
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-xl", children: we(h.startingFuelL) }),
|
|
783
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: h.lapCount || "-" }),
|
|
784
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: h.recordedAt ? G(h.recordedAt) : "-" })
|
|
776
785
|
]
|
|
777
786
|
},
|
|
778
|
-
|
|
787
|
+
g
|
|
779
788
|
);
|
|
780
789
|
}) })
|
|
781
|
-
] }) }) : /* @__PURE__ */ n(
|
|
790
|
+
] }) }) : /* @__PURE__ */ n(z, { message: "No lap times for this car yet." })
|
|
782
791
|
] });
|
|
783
792
|
}
|
|
784
|
-
function
|
|
785
|
-
const { data: c, driverName:
|
|
786
|
-
const
|
|
787
|
-
return
|
|
788
|
-
}, [c]),
|
|
793
|
+
function Et({ userId: e, track: t, carId: r, game: s, gameVersion: a, showInvalid: i, getUserDisplay: o, onToggleInvalid: d, onNavigate: p }) {
|
|
794
|
+
const { data: c, driverName: u, theoreticalBest: v, isLoading: f } = en(e, t.id, t.layout, r, { showInvalid: i, game: s, gameVersion: a }), { displayName: h, avatarUrl: k } = o(e, u), m = T(() => Ae(c, !0), [c]), g = T(() => {
|
|
795
|
+
const x = (c == null ? void 0 : c.filter((w) => w.isValid)) || [];
|
|
796
|
+
return x.length ? Math.min(...x.map((w) => w.lapTimeMs)) : null;
|
|
797
|
+
}, [c]), b = [
|
|
789
798
|
{ key: "tracks", label: "Tracks", onClick: () => p("tracks") },
|
|
790
|
-
{ key: "track", label:
|
|
791
|
-
{ key: "car", label:
|
|
792
|
-
{ key: "driver", label:
|
|
799
|
+
{ key: "track", label: t.displayName, onClick: () => p("track") },
|
|
800
|
+
{ key: "car", label: _(r), onClick: () => p("car") },
|
|
801
|
+
{ key: "driver", label: h }
|
|
793
802
|
];
|
|
794
|
-
return f ? /* @__PURE__ */ n(
|
|
803
|
+
return f ? /* @__PURE__ */ n(Q, {}) : /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
795
804
|
/* @__PURE__ */ l("div", { className: "pvx-card-header pvx-card-header--split", children: [
|
|
796
805
|
/* @__PURE__ */ l("div", { className: "pvx-card-header-left", children: [
|
|
797
|
-
/* @__PURE__ */ n(
|
|
798
|
-
|
|
806
|
+
/* @__PURE__ */ n(ue, { segments: b }),
|
|
807
|
+
k ? /* @__PURE__ */ n("img", { src: k, alt: "", className: "pvx-driver-avatar pvx-driver-avatar--lg" }) : /* @__PURE__ */ n("span", { className: "pvx-driver-avatar pvx-driver-avatar--lg pvx-driver-avatar--placeholder" })
|
|
799
808
|
] }),
|
|
800
809
|
/* @__PURE__ */ l("label", { className: "pvx-checkbox-label", children: [
|
|
801
810
|
/* @__PURE__ */ n(
|
|
@@ -810,16 +819,16 @@ function yt({ userId: e, track: r, carId: t, game: s, gameVersion: a, showInvali
|
|
|
810
819
|
/* @__PURE__ */ n("span", { children: "Show invalid laps" })
|
|
811
820
|
] })
|
|
812
821
|
] }),
|
|
813
|
-
|
|
822
|
+
v && /* @__PURE__ */ l("div", { className: "pvx-theoretical-best", children: [
|
|
814
823
|
/* @__PURE__ */ n("span", { className: "pvx-theoretical-best-label", children: "Theoretical Best:" }),
|
|
815
|
-
/* @__PURE__ */ n("span", { className: "pvx-theoretical-best-time", children: q(
|
|
824
|
+
/* @__PURE__ */ n("span", { className: "pvx-theoretical-best-time", children: q(v.lapTimeMs) }),
|
|
816
825
|
/* @__PURE__ */ l("span", { className: "pvx-theoretical-best-sectors", children: [
|
|
817
826
|
"(",
|
|
818
|
-
|
|
827
|
+
F(v.sector1Ms),
|
|
819
828
|
" + ",
|
|
820
|
-
|
|
829
|
+
F(v.sector2Ms),
|
|
821
830
|
" + ",
|
|
822
|
-
|
|
831
|
+
F(v.sector3Ms),
|
|
823
832
|
")"
|
|
824
833
|
] })
|
|
825
834
|
] }),
|
|
@@ -836,28 +845,28 @@ function yt({ userId: e, track: r, carId: t, game: s, gameVersion: a, showInvali
|
|
|
836
845
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-lg", children: "Fuel" }),
|
|
837
846
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-xl", children: "Date" })
|
|
838
847
|
] }) }),
|
|
839
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: c.map((
|
|
840
|
-
const
|
|
848
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: c.map((x, w) => {
|
|
849
|
+
const C = x.isValid && x.lapTimeMs === g, M = m && x.isValid && x.sector1Ms === m.s1, P = m && x.isValid && x.sector2Ms === m.s2, N = m && x.isValid && x.sector3Ms === m.s3;
|
|
841
850
|
let S = "pvx-row";
|
|
842
|
-
return
|
|
843
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n("span", { className: `pvx-rank ${
|
|
844
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-md", children:
|
|
845
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: q(
|
|
846
|
-
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
847
|
-
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
848
|
-
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
849
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", title:
|
|
850
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title:
|
|
851
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children:
|
|
852
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children:
|
|
853
|
-
] },
|
|
851
|
+
return x.isValid || (S += " pvx-row--invalid"), C && (S += " pvx-row--personal-best"), /* @__PURE__ */ l("tr", { className: S, children: [
|
|
852
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n("span", { className: `pvx-rank ${C ? "pvx-rank--gold" : ""}`, children: w + 1 }) }),
|
|
853
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-md", children: x.lapNumber || "-" }),
|
|
854
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: q(x.lapTimeMs) }),
|
|
855
|
+
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${M ? "pvx-td--best-sector" : ""}`, children: F(x.sector1Ms) }),
|
|
856
|
+
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${P ? "pvx-td--best-sector" : ""}`, children: F(x.sector2Ms) }),
|
|
857
|
+
/* @__PURE__ */ n("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${N ? "pvx-td--best-sector" : ""}`, children: F(x.sector3Ms) }),
|
|
858
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", title: x.isValid ? void 0 : x.invalidReason || "Invalid", children: x.isValid ? /* @__PURE__ */ n(dn, {}) : /* @__PURE__ */ n(pn, {}) }),
|
|
859
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title: ke(x.tyreCompound), children: x.tyreCompound || "-" }),
|
|
860
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: we(x.startingFuelL) }),
|
|
861
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: G(x.timestamp) })
|
|
862
|
+
] }, x.id);
|
|
854
863
|
}) })
|
|
855
|
-
] }) }) : /* @__PURE__ */ n(
|
|
864
|
+
] }) }) : /* @__PURE__ */ n(z, { message: i ? "No laps recorded for this combination." : 'No valid laps. Try enabling "Show invalid laps".' })
|
|
856
865
|
] });
|
|
857
866
|
}
|
|
858
|
-
function
|
|
859
|
-
const [o, d] =
|
|
860
|
-
switch (
|
|
867
|
+
function _t({ drivers: e, isLoading: t, getUserDisplay: r, game: s, gameVersion: a, onComboSelect: i }) {
|
|
868
|
+
const [o, d] = Z({ key: "rank", dir: "asc" }), [p, c] = E(null), u = T(() => e ? J(e, o, (f, h) => {
|
|
869
|
+
switch (h) {
|
|
861
870
|
case "rating":
|
|
862
871
|
return f.rating;
|
|
863
872
|
case "comboCount":
|
|
@@ -869,10 +878,10 @@ function kt({ drivers: e, isLoading: r, getUserDisplay: t, game: s, gameVersion:
|
|
|
869
878
|
return f.rank;
|
|
870
879
|
}
|
|
871
880
|
}) : [], [e, o]);
|
|
872
|
-
if (
|
|
881
|
+
if (t) return /* @__PURE__ */ n(Q, {});
|
|
873
882
|
if (!(e != null && e.length))
|
|
874
|
-
return /* @__PURE__ */ n("div", { className: "pvx-card", children: /* @__PURE__ */ n(
|
|
875
|
-
const
|
|
883
|
+
return /* @__PURE__ */ n("div", { className: "pvx-card", children: /* @__PURE__ */ n(z, { message: "Not enough data for rankings yet." }) });
|
|
884
|
+
const v = 5;
|
|
876
885
|
return /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
877
886
|
/* @__PURE__ */ l("div", { className: "pvx-card-header pvx-rankings-header", children: [
|
|
878
887
|
/* @__PURE__ */ n("h2", { className: "pvx-card-title", children: "Driver Rankings" }),
|
|
@@ -891,22 +900,22 @@ function kt({ drivers: e, isLoading: r, getUserDisplay: t, game: s, gameVersion:
|
|
|
891
900
|
] }),
|
|
892
901
|
/* @__PURE__ */ n("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
893
902
|
/* @__PURE__ */ n("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
894
|
-
/* @__PURE__ */ n(
|
|
903
|
+
/* @__PURE__ */ n(I, { label: "#", sortKey: "rank", config: o, onSort: d, className: "pvx-th--narrow" }),
|
|
895
904
|
/* @__PURE__ */ n("th", { className: "pvx-th", children: "Driver" }),
|
|
896
|
-
/* @__PURE__ */ n(
|
|
897
|
-
/* @__PURE__ */ n(
|
|
898
|
-
/* @__PURE__ */ n(
|
|
905
|
+
/* @__PURE__ */ n(I, { label: "Rating", sortKey: "rating", config: o, onSort: d }),
|
|
906
|
+
/* @__PURE__ */ n(I, { label: "Cars", sortKey: "distinctCars", config: o, onSort: d, className: "pvx-hidden-below-sm" }),
|
|
907
|
+
/* @__PURE__ */ n(I, { label: "Combos", sortKey: "comboCount", config: o, onSort: d, className: "pvx-hidden-below-sm" })
|
|
899
908
|
] }) }),
|
|
900
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children:
|
|
901
|
-
const
|
|
909
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: u.map((f) => {
|
|
910
|
+
const h = p === f.identifier;
|
|
902
911
|
return /* @__PURE__ */ n(
|
|
903
|
-
|
|
912
|
+
un,
|
|
904
913
|
{
|
|
905
914
|
driver: f,
|
|
906
|
-
getUserDisplay:
|
|
907
|
-
isExpanded:
|
|
908
|
-
onToggle: () => c(
|
|
909
|
-
colCount:
|
|
915
|
+
getUserDisplay: r,
|
|
916
|
+
isExpanded: h,
|
|
917
|
+
onToggle: () => c(h ? null : f.identifier),
|
|
918
|
+
colCount: v,
|
|
910
919
|
game: s,
|
|
911
920
|
gameVersion: a,
|
|
912
921
|
onComboSelect: i
|
|
@@ -917,28 +926,28 @@ function kt({ drivers: e, isLoading: r, getUserDisplay: t, game: s, gameVersion:
|
|
|
917
926
|
] }) })
|
|
918
927
|
] });
|
|
919
928
|
}
|
|
920
|
-
function
|
|
929
|
+
function un({ driver: e, getUserDisplay: t, isExpanded: r, onToggle: s, colCount: a, game: i, gameVersion: o, onComboSelect: d }) {
|
|
921
930
|
const p = e.identifier;
|
|
922
|
-
return /* @__PURE__ */ l(
|
|
931
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
923
932
|
/* @__PURE__ */ l(
|
|
924
933
|
"tr",
|
|
925
934
|
{
|
|
926
935
|
className: `pvx-row pvx-row--clickable ${e.rank <= 3 ? "pvx-row--podium" : ""}`,
|
|
927
936
|
onClick: s,
|
|
928
937
|
children: [
|
|
929
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(
|
|
930
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ n(
|
|
938
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(pe, { rank: e.rank, podium: !0 }) }),
|
|
939
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ n(X, { userId: p, getUserDisplay: t }) }),
|
|
931
940
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: e.rating.toFixed(1) }),
|
|
932
941
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: e.distinctCars || "-" }),
|
|
933
942
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: /* @__PURE__ */ l("span", { className: "pvx-rankings-combo-count", children: [
|
|
934
943
|
e.comboCount,
|
|
935
|
-
/* @__PURE__ */ n("svg", { className: `pvx-rankings-chevron ${
|
|
944
|
+
/* @__PURE__ */ n("svg", { className: `pvx-rankings-chevron ${r ? "pvx-rankings-chevron--open" : ""}`, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ n("path", { d: "m6 9 6 6 6-6" }) })
|
|
936
945
|
] }) })
|
|
937
946
|
]
|
|
938
947
|
}
|
|
939
948
|
),
|
|
940
|
-
|
|
941
|
-
const
|
|
949
|
+
r && e.combos && /* @__PURE__ */ n("tr", { children: /* @__PURE__ */ n("td", { colSpan: a, className: "pvx-rankings-combos-cell", children: /* @__PURE__ */ n("div", { className: "pvx-rankings-combos", children: e.combos.map((c, u) => {
|
|
950
|
+
const v = c.layout ? `${c.trackId}|${c.layout}` : c.trackId, f = d ? () => d({ track: v, car: c.carId, highlight: p, game: i, gameVersion: o }) : void 0;
|
|
942
951
|
return /* @__PURE__ */ l(
|
|
943
952
|
"div",
|
|
944
953
|
{
|
|
@@ -947,8 +956,8 @@ function ln({ driver: e, getUserDisplay: r, isExpanded: t, onToggle: s, colCount
|
|
|
947
956
|
role: f ? "button" : void 0,
|
|
948
957
|
children: [
|
|
949
958
|
/* @__PURE__ */ l("div", { className: "pvx-rankings-combo-info", children: [
|
|
950
|
-
/* @__PURE__ */ n("p", { className: "pvx-rankings-combo-track", children:
|
|
951
|
-
/* @__PURE__ */ n("p", { className: "pvx-rankings-combo-car", children:
|
|
959
|
+
/* @__PURE__ */ n("p", { className: "pvx-rankings-combo-track", children: V(c.trackId, c.layout, i) }),
|
|
960
|
+
/* @__PURE__ */ n("p", { className: "pvx-rankings-combo-car", children: _(c.carId) })
|
|
952
961
|
] }),
|
|
953
962
|
/* @__PURE__ */ l("div", { className: "pvx-rankings-combo-stats", children: [
|
|
954
963
|
/* @__PURE__ */ n("p", { className: "pvx-rankings-combo-time", children: q(c.lapTimeMs) }),
|
|
@@ -966,12 +975,12 @@ function ln({ driver: e, getUserDisplay: r, isExpanded: t, onToggle: s, colCount
|
|
|
966
975
|
] })
|
|
967
976
|
]
|
|
968
977
|
},
|
|
969
|
-
|
|
978
|
+
u
|
|
970
979
|
);
|
|
971
980
|
}) }) }) })
|
|
972
981
|
] });
|
|
973
982
|
}
|
|
974
|
-
const
|
|
983
|
+
const hn = {
|
|
975
984
|
GBR: "🇬🇧",
|
|
976
985
|
DEU: "🇩🇪",
|
|
977
986
|
NLD: "🇳🇱",
|
|
@@ -1002,173 +1011,308 @@ const cn = {
|
|
|
1002
1011
|
RUS: "🇷🇺",
|
|
1003
1012
|
TUR: "🇹🇷",
|
|
1004
1013
|
KOR: "🇰🇷"
|
|
1005
|
-
},
|
|
1014
|
+
}, he = ["🥇", "🥈", "🥉"], mn = {
|
|
1006
1015
|
championship: "Championship",
|
|
1007
1016
|
series: "Series",
|
|
1008
1017
|
event: "Event",
|
|
1009
1018
|
hotlap: "Hotlap"
|
|
1010
|
-
},
|
|
1011
|
-
function
|
|
1012
|
-
const
|
|
1013
|
-
if (
|
|
1014
|
-
const t = e.match(/^PRACTICE_(\d+)$/);
|
|
1015
|
-
return t ? 100 + parseInt(t[1]) : 999;
|
|
1016
|
-
}
|
|
1017
|
-
function pe(e) {
|
|
1019
|
+
}, vn = ["PRACTICE", "QUALIFYING", "RACE"];
|
|
1020
|
+
function ge(e) {
|
|
1021
|
+
const t = vn.indexOf(e);
|
|
1022
|
+
if (t >= 0) return t;
|
|
1018
1023
|
const r = e.match(/^PRACTICE_(\d+)$/);
|
|
1019
|
-
return r ?
|
|
1024
|
+
return r ? 100 + parseInt(r[1]) : 999;
|
|
1025
|
+
}
|
|
1026
|
+
function ee(e) {
|
|
1027
|
+
const t = e.match(/^PRACTICE_(\d+)$/);
|
|
1028
|
+
return t ? `P${t[1]}` : e;
|
|
1020
1029
|
}
|
|
1021
|
-
function
|
|
1030
|
+
function me({ position: e }) {
|
|
1022
1031
|
return /* @__PURE__ */ n("span", { className: e === 1 ? "pvx-rank pvx-rank--gold" : e === 2 ? "pvx-rank pvx-rank--silver" : e === 3 ? "pvx-rank pvx-rank--bronze" : "pvx-rank", children: e });
|
|
1023
1032
|
}
|
|
1024
|
-
function
|
|
1025
|
-
const
|
|
1026
|
-
return
|
|
1033
|
+
function ne({ nation: e }) {
|
|
1034
|
+
const t = e && hn[e];
|
|
1035
|
+
return t ? /* @__PURE__ */ n("span", { className: "pvx-nation-flag", title: e, children: t }) : null;
|
|
1027
1036
|
}
|
|
1028
|
-
function
|
|
1037
|
+
function xn({ sessions: e, activeSession: t, onSelect: r }) {
|
|
1029
1038
|
if (!e || e.length <= 1) return null;
|
|
1030
1039
|
const s = [...e].sort(
|
|
1031
|
-
(a, i) =>
|
|
1040
|
+
(a, i) => ge(a.type) - ge(i.type)
|
|
1032
1041
|
);
|
|
1033
1042
|
return /* @__PURE__ */ n("div", { className: "pvx-session-tabs", children: s.map((a) => /* @__PURE__ */ n(
|
|
1034
1043
|
"button",
|
|
1035
1044
|
{
|
|
1036
|
-
onClick: () =>
|
|
1037
|
-
className: `pvx-session-tab ${
|
|
1038
|
-
children:
|
|
1045
|
+
onClick: () => r(a.type),
|
|
1046
|
+
className: `pvx-session-tab ${t === a.type ? "pvx-session-tab--active" : ""}`,
|
|
1047
|
+
children: ee(a.type)
|
|
1039
1048
|
},
|
|
1040
1049
|
a.type
|
|
1041
1050
|
)) });
|
|
1042
1051
|
}
|
|
1043
|
-
function
|
|
1044
|
-
return /* @__PURE__ */ n("span", { className: `pvx-comp-badge pvx-comp-badge--${e}`, children:
|
|
1052
|
+
function gn({ type: e }) {
|
|
1053
|
+
return /* @__PURE__ */ n("span", { className: `pvx-comp-badge pvx-comp-badge--${e}`, children: mn[e] || e });
|
|
1045
1054
|
}
|
|
1046
|
-
function
|
|
1047
|
-
return /* @__PURE__ */ n("span", { className: `pvx-info-pill ${
|
|
1055
|
+
function re({ children: e, variant: t = "default" }) {
|
|
1056
|
+
return /* @__PURE__ */ n("span", { className: `pvx-info-pill ${t !== "default" ? `pvx-info-pill--${t}` : ""}`, children: e });
|
|
1048
1057
|
}
|
|
1049
|
-
function
|
|
1058
|
+
function fn(e) {
|
|
1050
1059
|
if (!e) return "TBD";
|
|
1051
|
-
const
|
|
1052
|
-
if (isNaN(
|
|
1053
|
-
const
|
|
1054
|
-
return `${
|
|
1060
|
+
const t = new Date(e);
|
|
1061
|
+
if (isNaN(t)) return "TBD";
|
|
1062
|
+
const r = t.toLocaleDateString("en-GB", { weekday: "short", day: "numeric", month: "short" }), s = t.toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" });
|
|
1063
|
+
return `${r} • ${s}`;
|
|
1055
1064
|
}
|
|
1056
|
-
function
|
|
1057
|
-
return e.reduce((
|
|
1065
|
+
function Nn(e) {
|
|
1066
|
+
return e.reduce((t, r) => {
|
|
1058
1067
|
var s;
|
|
1059
|
-
return (s =
|
|
1060
|
-
const o =
|
|
1068
|
+
return (s = r.splits) != null && s.length ? t ? t.map((a, i) => {
|
|
1069
|
+
const o = r.splits[i];
|
|
1061
1070
|
return o && o < a ? o : a;
|
|
1062
|
-
}) : [...
|
|
1071
|
+
}) : [...r.splits] : t;
|
|
1063
1072
|
}, null);
|
|
1064
1073
|
}
|
|
1065
|
-
function
|
|
1074
|
+
function W({ message: e = "Loading..." }) {
|
|
1066
1075
|
return /* @__PURE__ */ n("div", { className: "pvx-loading", children: e });
|
|
1067
1076
|
}
|
|
1068
1077
|
function U({ message: e = "No data available." }) {
|
|
1069
1078
|
return /* @__PURE__ */ n("div", { className: "pvx-empty", children: /* @__PURE__ */ n("p", { children: e }) });
|
|
1070
1079
|
}
|
|
1071
|
-
const
|
|
1072
|
-
function
|
|
1073
|
-
|
|
1074
|
-
|
|
1080
|
+
const Be = 3;
|
|
1081
|
+
function j(e) {
|
|
1082
|
+
if (!e) return !1;
|
|
1083
|
+
if (e.closesAt) {
|
|
1084
|
+
const t = new Date(e.closesAt).getTime();
|
|
1085
|
+
if (!Number.isNaN(t)) return Date.now() >= t;
|
|
1086
|
+
}
|
|
1087
|
+
return !!e.isClosed;
|
|
1088
|
+
}
|
|
1089
|
+
function bn(e) {
|
|
1090
|
+
const t = e == null ? void 0 : e.rounds;
|
|
1091
|
+
return t != null && t.length ? e.type === "hotlap" ? t.every((r) => j(r)) : t.every((r) => r.isFinalized) : !1;
|
|
1075
1092
|
}
|
|
1076
|
-
function
|
|
1077
|
-
const
|
|
1078
|
-
if (!(
|
|
1079
|
-
let
|
|
1080
|
-
for (const s of
|
|
1093
|
+
function yn(e) {
|
|
1094
|
+
const t = e == null ? void 0 : e.rounds;
|
|
1095
|
+
if (!(t != null && t.length)) return null;
|
|
1096
|
+
let r = null;
|
|
1097
|
+
for (const s of t) {
|
|
1081
1098
|
if (!s.startTime) continue;
|
|
1082
1099
|
const a = new Date(s.startTime);
|
|
1083
|
-
isNaN(a) || (!
|
|
1100
|
+
isNaN(a) || (!r || a > r) && (r = a);
|
|
1084
1101
|
}
|
|
1085
|
-
return
|
|
1102
|
+
return r;
|
|
1086
1103
|
}
|
|
1087
|
-
function
|
|
1088
|
-
if (!
|
|
1089
|
-
const
|
|
1090
|
-
if (!
|
|
1091
|
-
const s =
|
|
1092
|
-
return Date.now() -
|
|
1104
|
+
function Ie(e, t = Be) {
|
|
1105
|
+
if (!bn(e)) return "active";
|
|
1106
|
+
const r = yn(e);
|
|
1107
|
+
if (!r) return "recently-completed";
|
|
1108
|
+
const s = t * 24 * 60 * 60 * 1e3;
|
|
1109
|
+
return Date.now() - r.getTime() <= s ? "recently-completed" : "archived";
|
|
1093
1110
|
}
|
|
1094
|
-
function
|
|
1111
|
+
function Ut(e, t, r = Be) {
|
|
1095
1112
|
if (!(e != null && e.length)) return [];
|
|
1096
|
-
const s = new Set(Array.isArray(
|
|
1097
|
-
return e.filter((a) => s.has(
|
|
1113
|
+
const s = new Set(Array.isArray(t) ? t : [t]);
|
|
1114
|
+
return e.filter((a) => s.has(Ie(a, r)));
|
|
1098
1115
|
}
|
|
1099
|
-
function
|
|
1100
|
-
const
|
|
1101
|
-
return Array.isArray(
|
|
1116
|
+
function kn(e, t = 3) {
|
|
1117
|
+
const r = e == null ? void 0 : e.standings;
|
|
1118
|
+
return Array.isArray(r) ? [...r].sort((s, a) => (s.position ?? 999) - (a.position ?? 999)).slice(0, t) : [];
|
|
1102
1119
|
}
|
|
1103
|
-
function
|
|
1104
|
-
const { data: a } =
|
|
1120
|
+
function wn({ competitionId: e, topN: t = 3, label: r = "Completed", className: s }) {
|
|
1121
|
+
const { data: a } = Le(e), i = kn(a, t);
|
|
1105
1122
|
return /* @__PURE__ */ l("div", { className: `pvx-comp-completed-badge ${s || ""}`, children: [
|
|
1106
|
-
/* @__PURE__ */ n("span", { className: "pvx-comp-completed-badge-label", children:
|
|
1123
|
+
/* @__PURE__ */ n("span", { className: "pvx-comp-completed-badge-label", children: r }),
|
|
1107
1124
|
i.length > 0 && /* @__PURE__ */ n("ol", { className: "pvx-comp-completed-badge-podium", children: i.map((o, d) => /* @__PURE__ */ l("li", { className: "pvx-comp-completed-badge-driver", children: [
|
|
1108
|
-
/* @__PURE__ */ n("span", { className: "pvx-comp-completed-badge-medal", "aria-hidden": "true", children:
|
|
1109
|
-
/* @__PURE__ */ n(
|
|
1125
|
+
/* @__PURE__ */ n("span", { className: "pvx-comp-completed-badge-medal", "aria-hidden": "true", children: he[d] || "" }),
|
|
1126
|
+
/* @__PURE__ */ n(ne, { nation: o.nation }),
|
|
1110
1127
|
/* @__PURE__ */ n("span", { className: "pvx-comp-completed-badge-name", children: o.driverName })
|
|
1111
1128
|
] }, o.driverId || d)) })
|
|
1112
1129
|
] });
|
|
1113
1130
|
}
|
|
1114
|
-
|
|
1115
|
-
|
|
1131
|
+
const Cn = {
|
|
1132
|
+
GameModeSelectionWeatherType_CLEAR: "Clear",
|
|
1133
|
+
GameModeSelectionWeatherType_SCATTERED_CLOUDS: "Scattered Clouds",
|
|
1134
|
+
GameModeSelectionWeatherType_BROKEN_CLOUDS: "Broken Clouds",
|
|
1135
|
+
GameModeSelectionWeatherType_OVERCAST: "Overcast",
|
|
1136
|
+
GameModeSelectionWeatherType_DRIZZLE: "Drizzle",
|
|
1137
|
+
GameModeSelectionWeatherType_DAMP: "Damp",
|
|
1138
|
+
GameModeSelectionWeatherType_RAIN: "Rain",
|
|
1139
|
+
GameModeSelectionWeatherType_HEAVY_RAIN: "Heavy Rain"
|
|
1140
|
+
}, Sn = {
|
|
1141
|
+
viewBox: "0 0 24 24",
|
|
1142
|
+
fill: "none",
|
|
1143
|
+
stroke: "currentColor",
|
|
1144
|
+
strokeWidth: 1.5,
|
|
1145
|
+
strokeLinecap: "round",
|
|
1146
|
+
strokeLinejoin: "round"
|
|
1147
|
+
};
|
|
1148
|
+
function Ln() {
|
|
1149
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1150
|
+
/* @__PURE__ */ n("circle", { cx: "12", cy: "12", r: "4" }),
|
|
1151
|
+
/* @__PURE__ */ n("path", { d: "M12 2v2" }),
|
|
1152
|
+
/* @__PURE__ */ n("path", { d: "M12 20v2" }),
|
|
1153
|
+
/* @__PURE__ */ n("path", { d: "m4.93 4.93 1.41 1.41" }),
|
|
1154
|
+
/* @__PURE__ */ n("path", { d: "m17.66 17.66 1.41 1.41" }),
|
|
1155
|
+
/* @__PURE__ */ n("path", { d: "M2 12h2" }),
|
|
1156
|
+
/* @__PURE__ */ n("path", { d: "M20 12h2" }),
|
|
1157
|
+
/* @__PURE__ */ n("path", { d: "m6.34 17.66-1.41 1.41" }),
|
|
1158
|
+
/* @__PURE__ */ n("path", { d: "m19.07 4.93-1.41 1.41" })
|
|
1159
|
+
] });
|
|
1160
|
+
}
|
|
1161
|
+
function Rn() {
|
|
1162
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1163
|
+
/* @__PURE__ */ n("path", { d: "M12 2v2" }),
|
|
1164
|
+
/* @__PURE__ */ n("path", { d: "m4.93 4.93 1.41 1.41" }),
|
|
1165
|
+
/* @__PURE__ */ n("path", { d: "M20 12h2" }),
|
|
1166
|
+
/* @__PURE__ */ n("path", { d: "m19.07 4.93-1.41 1.41" }),
|
|
1167
|
+
/* @__PURE__ */ n("path", { d: "M15.947 12.65a4 4 0 0 0-5.925-4.128" }),
|
|
1168
|
+
/* @__PURE__ */ n("path", { d: "M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z" })
|
|
1169
|
+
] });
|
|
1170
|
+
}
|
|
1171
|
+
function Tn() {
|
|
1172
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1173
|
+
/* @__PURE__ */ n("path", { d: "M17.5 21H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z" }),
|
|
1174
|
+
/* @__PURE__ */ n("path", { d: "M22 10a3 3 0 0 0-3-3h-2.207a5.502 5.502 0 0 0-10.702.5" })
|
|
1175
|
+
] });
|
|
1176
|
+
}
|
|
1177
|
+
function $n() {
|
|
1178
|
+
return /* @__PURE__ */ n("path", { d: "M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z" });
|
|
1179
|
+
}
|
|
1180
|
+
function Mn() {
|
|
1181
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1182
|
+
/* @__PURE__ */ n("path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }),
|
|
1183
|
+
/* @__PURE__ */ n("path", { d: "M8 19v1" }),
|
|
1184
|
+
/* @__PURE__ */ n("path", { d: "M8 14v1" }),
|
|
1185
|
+
/* @__PURE__ */ n("path", { d: "M16 19v1" }),
|
|
1186
|
+
/* @__PURE__ */ n("path", { d: "M16 14v1" }),
|
|
1187
|
+
/* @__PURE__ */ n("path", { d: "M12 21v1" }),
|
|
1188
|
+
/* @__PURE__ */ n("path", { d: "M12 16v1" })
|
|
1189
|
+
] });
|
|
1190
|
+
}
|
|
1191
|
+
function Dn() {
|
|
1192
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1193
|
+
/* @__PURE__ */ n("path", { d: "M16 17H7" }),
|
|
1194
|
+
/* @__PURE__ */ n("path", { d: "M17 21H9" }),
|
|
1195
|
+
/* @__PURE__ */ n("path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" })
|
|
1196
|
+
] });
|
|
1197
|
+
}
|
|
1198
|
+
function An() {
|
|
1199
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1200
|
+
/* @__PURE__ */ n("path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }),
|
|
1201
|
+
/* @__PURE__ */ n("path", { d: "M16 14v6" }),
|
|
1202
|
+
/* @__PURE__ */ n("path", { d: "M8 14v6" }),
|
|
1203
|
+
/* @__PURE__ */ n("path", { d: "M12 16v6" })
|
|
1204
|
+
] });
|
|
1205
|
+
}
|
|
1206
|
+
function Pn() {
|
|
1207
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1208
|
+
/* @__PURE__ */ n("path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }),
|
|
1209
|
+
/* @__PURE__ */ n("path", { d: "m9.2 22 3-7" }),
|
|
1210
|
+
/* @__PURE__ */ n("path", { d: "m9 13-3 7" }),
|
|
1211
|
+
/* @__PURE__ */ n("path", { d: "m17 13-3 7" })
|
|
1212
|
+
] });
|
|
1116
1213
|
}
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1214
|
+
const Bn = {
|
|
1215
|
+
GameModeSelectionWeatherType_CLEAR: Ln,
|
|
1216
|
+
GameModeSelectionWeatherType_SCATTERED_CLOUDS: Rn,
|
|
1217
|
+
GameModeSelectionWeatherType_BROKEN_CLOUDS: Tn,
|
|
1218
|
+
GameModeSelectionWeatherType_OVERCAST: $n,
|
|
1219
|
+
GameModeSelectionWeatherType_DRIZZLE: Mn,
|
|
1220
|
+
GameModeSelectionWeatherType_DAMP: Dn,
|
|
1221
|
+
GameModeSelectionWeatherType_RAIN: An,
|
|
1222
|
+
GameModeSelectionWeatherType_HEAVY_RAIN: Pn
|
|
1223
|
+
};
|
|
1224
|
+
function In({ weatherType: e, weatherBehaviour: t, className: r }) {
|
|
1225
|
+
const s = e ? Bn[e] : null;
|
|
1226
|
+
if (!s) return null;
|
|
1227
|
+
const a = Cn[e] || e, i = t === "GameModeSelectionWeatherBehaviour_DYNAMIC", o = i ? `${a} · Dynamic` : a;
|
|
1228
|
+
return /* @__PURE__ */ l(
|
|
1229
|
+
"span",
|
|
1230
|
+
{
|
|
1231
|
+
className: `pvx-weather-icon ${r || ""}`.trim(),
|
|
1232
|
+
title: o,
|
|
1233
|
+
"aria-label": o,
|
|
1234
|
+
children: [
|
|
1235
|
+
/* @__PURE__ */ n("svg", { className: "pvx-weather-icon-main", ...Sn, children: /* @__PURE__ */ n(s, {}) }),
|
|
1236
|
+
i && /* @__PURE__ */ n("span", { className: "pvx-weather-icon-dynamic", "aria-hidden": "true", children: /* @__PURE__ */ l("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1237
|
+
/* @__PURE__ */ n("path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" }),
|
|
1238
|
+
/* @__PURE__ */ n("path", { d: "M21 3v5h-5" }),
|
|
1239
|
+
/* @__PURE__ */ n("path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" }),
|
|
1240
|
+
/* @__PURE__ */ n("path", { d: "M8 16H3v5" })
|
|
1241
|
+
] }) })
|
|
1242
|
+
]
|
|
1243
|
+
}
|
|
1244
|
+
);
|
|
1245
|
+
}
|
|
1246
|
+
function Ft({ competitions: e, isLoading: t, onSelect: r, onRegister: s, className: a }) {
|
|
1247
|
+
return t ? /* @__PURE__ */ n(W, { message: "Loading competitions..." }) : e != null && e.length ? /* @__PURE__ */ n("div", { className: `pvx-comp-grid ${a || ""}`, children: e.map((i) => /* @__PURE__ */ n(En, { comp: i, onSelect: r, onRegister: s || r }, i.id)) }) : /* @__PURE__ */ n(U, { message: "No competitions available." });
|
|
1248
|
+
}
|
|
1249
|
+
function En({ comp: e, onSelect: t, onRegister: r }) {
|
|
1250
|
+
var P, N, S, y, A;
|
|
1251
|
+
const { cdnUrl: s } = L(), a = e.posterCdnPath ? `${s}/${e.posterCdnPath}` : null, i = e.registration, o = (i == null ? void 0 : i.currentCount) || 0, d = i == null ? void 0 : i.maxParticipants, p = d && o >= d, c = (i == null ? void 0 : i.deadline) && new Date(i.deadline) < /* @__PURE__ */ new Date(), u = (i == null ? void 0 : i.isOpen) && !c && !p, v = /* @__PURE__ */ new Date(), f = (P = e.rounds) == null ? void 0 : P.find(
|
|
1252
|
+
(R) => R.startTime && new Date(R.startTime) <= v && !j(R)
|
|
1253
|
+
), h = f || ((N = e.rounds) == null ? void 0 : N.find((R) => R.startTime && new Date(R.startTime) >= v)), k = !!f, m = ((S = e.rounds) == null ? void 0 : S.length) || 0, g = e.type === "hotlap", b = g && m > 1, x = g ? ((y = e.rounds) == null ? void 0 : y.filter(j).length) || 0 : ((A = e.rounds) == null ? void 0 : A.filter((R) => R.isFinalized).length) || 0, w = Ie(e), C = w === "recently-completed" || w === "archived", M = e.type === "championship";
|
|
1120
1254
|
return /* @__PURE__ */ l(
|
|
1121
1255
|
"div",
|
|
1122
1256
|
{
|
|
1123
1257
|
className: "pvx-comp-card",
|
|
1124
|
-
onClick: () =>
|
|
1258
|
+
onClick: () => t(e.id),
|
|
1125
1259
|
role: "button",
|
|
1126
1260
|
tabIndex: 0,
|
|
1127
|
-
onKeyDown: (
|
|
1128
|
-
(
|
|
1261
|
+
onKeyDown: (R) => {
|
|
1262
|
+
(R.key === "Enter" || R.key === " ") && (R.preventDefault(), t(e.id));
|
|
1129
1263
|
},
|
|
1130
1264
|
children: [
|
|
1131
|
-
/* @__PURE__ */ n("div", { className: "pvx-comp-card-poster", children: a ? /* @__PURE__ */ n("img", { src: a, alt: e.name, className: "pvx-comp-card-poster-img" }) : /* @__PURE__ */ n("div", { className: "pvx-comp-card-poster-placeholder", children: /* @__PURE__ */ n(
|
|
1265
|
+
/* @__PURE__ */ n("div", { className: "pvx-comp-card-poster", children: a ? /* @__PURE__ */ n("img", { src: a, alt: e.name, className: "pvx-comp-card-poster-img" }) : /* @__PURE__ */ n("div", { className: "pvx-comp-card-poster-placeholder", children: /* @__PURE__ */ n(Un, {}) }) }),
|
|
1132
1266
|
/* @__PURE__ */ l("div", { className: "pvx-comp-card-body", children: [
|
|
1133
1267
|
/* @__PURE__ */ n("h3", { className: "pvx-comp-card-title", children: e.name }),
|
|
1134
1268
|
e.description && /* @__PURE__ */ n("p", { className: "pvx-comp-card-desc", children: e.description }),
|
|
1135
1269
|
/* @__PURE__ */ l("div", { className: "pvx-comp-card-pills", children: [
|
|
1136
|
-
/* @__PURE__ */ n(
|
|
1137
|
-
e.game && /* @__PURE__ */ n(
|
|
1138
|
-
e.formatDescription && e.formatDescription.split(", ").map((
|
|
1270
|
+
/* @__PURE__ */ n(gn, { type: e.type }),
|
|
1271
|
+
e.game && /* @__PURE__ */ n(re, { children: e.game.toUpperCase() }),
|
|
1272
|
+
e.formatDescription && e.formatDescription.split(", ").map((R, H) => /* @__PURE__ */ n(re, { variant: "format", children: R }, H))
|
|
1139
1273
|
] }),
|
|
1140
|
-
e.carsDescription && /* @__PURE__ */ n("div", { className: "pvx-comp-card-pills", children: e.carsDescription.split(", ").map((
|
|
1274
|
+
e.carsDescription && /* @__PURE__ */ n("div", { className: "pvx-comp-card-pills", children: e.carsDescription.split(", ").map((R, H) => /* @__PURE__ */ n(re, { children: R }, H)) }),
|
|
1141
1275
|
/* @__PURE__ */ l("div", { className: "pvx-comp-card-schedule", children: [
|
|
1142
|
-
|
|
1143
|
-
/* @__PURE__ */ n("span", { className: "pvx-comp-card-schedule-label", children: "Next:" }),
|
|
1276
|
+
h ? /* @__PURE__ */ l("span", { className: "pvx-comp-card-schedule-next", children: [
|
|
1277
|
+
/* @__PURE__ */ n("span", { className: "pvx-comp-card-schedule-label", children: k ? "Live:" : "Next:" }),
|
|
1144
1278
|
" ",
|
|
1145
|
-
e.type !== "hotlap" && `R${
|
|
1146
|
-
|
|
1279
|
+
(e.type !== "hotlap" || b) && `R${h.roundNumber} `,
|
|
1280
|
+
h.track || "TBD",
|
|
1147
1281
|
" · ",
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1282
|
+
fn(h.startTime),
|
|
1283
|
+
(h.weatherType || e.weatherType) && /* @__PURE__ */ l(B, { children: [
|
|
1284
|
+
" ",
|
|
1285
|
+
/* @__PURE__ */ n(
|
|
1286
|
+
In,
|
|
1287
|
+
{
|
|
1288
|
+
weatherType: h.weatherType || e.weatherType,
|
|
1289
|
+
weatherBehaviour: h.weatherBehaviour || e.weatherBehaviour
|
|
1290
|
+
}
|
|
1291
|
+
)
|
|
1292
|
+
] })
|
|
1293
|
+
] }) : m > 0 ? /* @__PURE__ */ l("span", { className: "pvx-comp-card-schedule-next", children: [
|
|
1294
|
+
x,
|
|
1151
1295
|
"/",
|
|
1152
|
-
|
|
1296
|
+
m,
|
|
1153
1297
|
" rounds completed"
|
|
1154
1298
|
] }) : null,
|
|
1155
|
-
|
|
1156
|
-
|
|
1299
|
+
m > 0 && /* @__PURE__ */ l("span", { className: "pvx-comp-card-round-count", children: [
|
|
1300
|
+
m,
|
|
1157
1301
|
" round",
|
|
1158
|
-
|
|
1302
|
+
m !== 1 ? "s" : ""
|
|
1159
1303
|
] })
|
|
1160
1304
|
] }),
|
|
1161
|
-
|
|
1162
|
-
i && !
|
|
1163
|
-
|
|
1305
|
+
C && (M || b) && /* @__PURE__ */ n(wn, { competitionId: e.id }),
|
|
1306
|
+
i && !C && /* @__PURE__ */ n(
|
|
1307
|
+
_n,
|
|
1164
1308
|
{
|
|
1165
1309
|
competitionId: e.id,
|
|
1166
|
-
regOpen:
|
|
1310
|
+
regOpen: u,
|
|
1167
1311
|
isFull: p,
|
|
1168
1312
|
deadlinePassed: c,
|
|
1169
1313
|
regCount: o,
|
|
1170
1314
|
regMax: d,
|
|
1171
|
-
onRegister:
|
|
1315
|
+
onRegister: r
|
|
1172
1316
|
}
|
|
1173
1317
|
)
|
|
1174
1318
|
] })
|
|
@@ -1176,8 +1320,8 @@ function bn({ comp: e, onSelect: r, onRegister: t }) {
|
|
|
1176
1320
|
}
|
|
1177
1321
|
);
|
|
1178
1322
|
}
|
|
1179
|
-
function
|
|
1180
|
-
const { isPowerMode: d } =
|
|
1323
|
+
function _n({ competitionId: e, regOpen: t, isFull: r, deadlinePassed: s, regCount: a, regMax: i, onRegister: o }) {
|
|
1324
|
+
const { isPowerMode: d } = ce(), p = de(e), { data: c } = le(e), u = (c == null ? void 0 : c.isRegistered) || !1, v = i ? a / i * 100 : 0, f = v >= 100 ? "full" : v >= 75 ? "warning" : "ok";
|
|
1181
1325
|
return /* @__PURE__ */ l("div", { className: "pvx-comp-card-reg", children: [
|
|
1182
1326
|
/* @__PURE__ */ n("div", { className: "pvx-comp-card-reg-info", children: /* @__PURE__ */ l("span", { className: `pvx-reg-capacity pvx-reg-capacity--${f}`, children: [
|
|
1183
1327
|
a,
|
|
@@ -1185,21 +1329,21 @@ function yn({ competitionId: e, regOpen: r, isFull: t, deadlinePassed: s, regCou
|
|
|
1185
1329
|
i || "∞",
|
|
1186
1330
|
" drivers"
|
|
1187
1331
|
] }) }),
|
|
1188
|
-
/* @__PURE__ */ n("div", { className: "pvx-comp-card-reg-action", children:
|
|
1332
|
+
/* @__PURE__ */ n("div", { className: "pvx-comp-card-reg-action", children: u ? /* @__PURE__ */ n(
|
|
1189
1333
|
"button",
|
|
1190
1334
|
{
|
|
1191
1335
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--registered",
|
|
1192
|
-
onClick: (
|
|
1193
|
-
|
|
1336
|
+
onClick: (h) => {
|
|
1337
|
+
h.stopPropagation(), o(e);
|
|
1194
1338
|
},
|
|
1195
1339
|
children: "✓ Registered"
|
|
1196
1340
|
}
|
|
1197
|
-
) :
|
|
1341
|
+
) : t ? d ? /* @__PURE__ */ n(
|
|
1198
1342
|
"button",
|
|
1199
1343
|
{
|
|
1200
1344
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--open",
|
|
1201
|
-
onClick: (
|
|
1202
|
-
|
|
1345
|
+
onClick: (h) => {
|
|
1346
|
+
h.stopPropagation(), o(e);
|
|
1203
1347
|
},
|
|
1204
1348
|
children: "Register"
|
|
1205
1349
|
}
|
|
@@ -1210,13 +1354,13 @@ function yn({ competitionId: e, regOpen: r, isFull: t, deadlinePassed: s, regCou
|
|
|
1210
1354
|
target: "_blank",
|
|
1211
1355
|
rel: "noopener noreferrer",
|
|
1212
1356
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--open",
|
|
1213
|
-
onClick: (
|
|
1357
|
+
onClick: (h) => h.stopPropagation(),
|
|
1214
1358
|
children: "Register"
|
|
1215
1359
|
}
|
|
1216
|
-
) : /* @__PURE__ */ n("span", { className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--closed", children:
|
|
1360
|
+
) : /* @__PURE__ */ n("span", { className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--closed", children: r ? "Full" : "Closed" }) })
|
|
1217
1361
|
] });
|
|
1218
1362
|
}
|
|
1219
|
-
function
|
|
1363
|
+
function Un() {
|
|
1220
1364
|
return /* @__PURE__ */ l("svg", { className: "pvx-comp-trophy-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1221
1365
|
/* @__PURE__ */ n("path", { d: "M6 9H4.5a2.5 2.5 0 0 1 0-5H6" }),
|
|
1222
1366
|
/* @__PURE__ */ n("path", { d: "M18 9h1.5a2.5 2.5 0 0 0 0-5H18" }),
|
|
@@ -1226,23 +1370,24 @@ function kn() {
|
|
|
1226
1370
|
/* @__PURE__ */ n("path", { d: "M18 2H6v7a6 6 0 0 0 12 0V2Z" })
|
|
1227
1371
|
] });
|
|
1228
1372
|
}
|
|
1229
|
-
function
|
|
1230
|
-
var
|
|
1231
|
-
const { data:
|
|
1373
|
+
function Fn({ competitionId: e, className: t }) {
|
|
1374
|
+
var c, u, v;
|
|
1375
|
+
const { data: r, isLoading: s } = Le(e), { data: a, isLoading: i } = Se(e);
|
|
1232
1376
|
if (s || i)
|
|
1233
|
-
return /* @__PURE__ */ n(
|
|
1234
|
-
if (!((
|
|
1377
|
+
return /* @__PURE__ */ n(W, { message: "Loading standings..." });
|
|
1378
|
+
if (!((c = r == null ? void 0 : r.standings) != null && c.length))
|
|
1235
1379
|
return /* @__PURE__ */ n(U, { message: "No standings data yet. Results will appear once rounds are finalised." });
|
|
1236
|
-
const o = ((
|
|
1237
|
-
return /* @__PURE__ */ l("div", { className: `pvx-card ${
|
|
1380
|
+
const o = (a == null ? void 0 : a.type) === "hotlap", d = o ? ((u = a == null ? void 0 : a.rounds) == null ? void 0 : u.filter(j)) || [] : ((v = a == null ? void 0 : a.rounds) == null ? void 0 : v.filter((f) => f.isFinalized)) || [], p = r.roundsClosed ?? r.roundsCompleted ?? 0;
|
|
1381
|
+
return /* @__PURE__ */ l("div", { className: `pvx-card ${t || ""}`, children: [
|
|
1238
1382
|
/* @__PURE__ */ n("div", { className: "pvx-card-header--split", children: /* @__PURE__ */ l("div", { className: "pvx-card-header-left", children: [
|
|
1239
|
-
/* @__PURE__ */ n("h3", { className: "pvx-card-title", children: "Championship Standings" }),
|
|
1383
|
+
/* @__PURE__ */ n("h3", { className: "pvx-card-title", children: o ? "Overall Standings" : "Championship Standings" }),
|
|
1240
1384
|
/* @__PURE__ */ l("span", { className: "pvx-standings-subtitle", children: [
|
|
1241
1385
|
"After ",
|
|
1242
|
-
|
|
1386
|
+
p,
|
|
1243
1387
|
" round",
|
|
1244
|
-
|
|
1245
|
-
|
|
1388
|
+
p !== 1 ? "s" : "",
|
|
1389
|
+
o ? " closed" : "",
|
|
1390
|
+
r.countingRounds > 0 && ` (best ${r.countingRounds} count)`
|
|
1246
1391
|
] })
|
|
1247
1392
|
] }) }),
|
|
1248
1393
|
/* @__PURE__ */ n("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
@@ -1252,56 +1397,56 @@ function wn({ competitionId: e, className: r }) {
|
|
|
1252
1397
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-th--center pvx-hidden-below-sm", children: "W" }),
|
|
1253
1398
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-th--center pvx-hidden-below-sm", children: "Pod" }),
|
|
1254
1399
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-th--center", children: "Points" }),
|
|
1255
|
-
|
|
1400
|
+
d.map((f) => /* @__PURE__ */ l(
|
|
1256
1401
|
"th",
|
|
1257
1402
|
{
|
|
1258
1403
|
className: "pvx-th pvx-th--center pvx-hidden-below-md",
|
|
1259
|
-
title:
|
|
1404
|
+
title: f.track || `Round ${f.roundNumber}`,
|
|
1260
1405
|
children: [
|
|
1261
1406
|
"R",
|
|
1262
|
-
|
|
1407
|
+
f.roundNumber
|
|
1263
1408
|
]
|
|
1264
1409
|
},
|
|
1265
|
-
|
|
1410
|
+
f.roundNumber
|
|
1266
1411
|
))
|
|
1267
1412
|
] }) }),
|
|
1268
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children:
|
|
1269
|
-
|
|
1413
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: r.standings.map((f) => /* @__PURE__ */ n(
|
|
1414
|
+
qn,
|
|
1270
1415
|
{
|
|
1271
|
-
driver:
|
|
1272
|
-
|
|
1416
|
+
driver: f,
|
|
1417
|
+
columnRounds: d
|
|
1273
1418
|
},
|
|
1274
|
-
|
|
1419
|
+
f.driverId || f.driverName
|
|
1275
1420
|
)) })
|
|
1276
1421
|
] }) })
|
|
1277
1422
|
] });
|
|
1278
1423
|
}
|
|
1279
|
-
function
|
|
1424
|
+
function qn({ driver: e, columnRounds: t }) {
|
|
1280
1425
|
var o, d, p;
|
|
1281
|
-
const
|
|
1426
|
+
const r = e.position <= 3, s = new Map(
|
|
1282
1427
|
((o = e.roundResults) == null ? void 0 : o.map((c) => [c.roundNumber, c])) || []
|
|
1283
1428
|
), a = ((d = e.roundResults) == null ? void 0 : d.filter((c) => c.position === 1).length) || 0, i = ((p = e.roundResults) == null ? void 0 : p.filter((c) => c.position <= 3).length) || 0;
|
|
1284
|
-
return /* @__PURE__ */ l("tr", { className: `pvx-row ${
|
|
1285
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(
|
|
1429
|
+
return /* @__PURE__ */ l("tr", { className: `pvx-row ${r ? "pvx-row--podium" : ""}`, children: [
|
|
1430
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(me, { position: e.position }) }),
|
|
1286
1431
|
/* @__PURE__ */ l("td", { className: "pvx-td pvx-td--primary", children: [
|
|
1287
|
-
/* @__PURE__ */ n(
|
|
1432
|
+
/* @__PURE__ */ n(ne, { nation: e.nation }),
|
|
1288
1433
|
e.driverName
|
|
1289
1434
|
] }),
|
|
1290
1435
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: a || "-" }),
|
|
1291
1436
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: i || "-" }),
|
|
1292
1437
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--center pvx-standings-total", children: e.totalPoints }),
|
|
1293
|
-
|
|
1294
|
-
const
|
|
1438
|
+
t.map((c) => {
|
|
1439
|
+
const u = s.get(c.roundNumber), v = u == null ? void 0 : u.dropped;
|
|
1295
1440
|
return /* @__PURE__ */ n(
|
|
1296
1441
|
"td",
|
|
1297
1442
|
{
|
|
1298
|
-
className: `pvx-td pvx-td--center pvx-hidden-below-md ${!
|
|
1299
|
-
children:
|
|
1443
|
+
className: `pvx-td pvx-td--center pvx-hidden-below-md ${!v && (u == null ? void 0 : u.position) === 1 ? "pvx-standings-cell--p1" : !v && (u == null ? void 0 : u.position) === 2 ? "pvx-standings-cell--p2" : !v && (u == null ? void 0 : u.position) === 3 ? "pvx-standings-cell--p3" : ""}`,
|
|
1444
|
+
children: u ? /* @__PURE__ */ l("div", { className: `pvx-standings-round-cell ${v ? "pvx-standings-round-cell--dropped" : ""}`, children: [
|
|
1300
1445
|
/* @__PURE__ */ l("span", { className: "pvx-standings-round-pos", children: [
|
|
1301
1446
|
"P",
|
|
1302
|
-
|
|
1447
|
+
u.position
|
|
1303
1448
|
] }),
|
|
1304
|
-
/* @__PURE__ */ n("span", { className: "pvx-standings-round-pts", children:
|
|
1449
|
+
/* @__PURE__ */ n("span", { className: "pvx-standings-round-pts", children: u.points })
|
|
1305
1450
|
] }) : /* @__PURE__ */ n("span", { className: "pvx-td--muted", children: "-" })
|
|
1306
1451
|
},
|
|
1307
1452
|
c.roundNumber
|
|
@@ -1309,7 +1454,7 @@ function Cn({ driver: e, finalizedRounds: r }) {
|
|
|
1309
1454
|
})
|
|
1310
1455
|
] });
|
|
1311
1456
|
}
|
|
1312
|
-
const
|
|
1457
|
+
const fe = [
|
|
1313
1458
|
"#f59e0b",
|
|
1314
1459
|
"#3b82f6",
|
|
1315
1460
|
"#ef4444",
|
|
@@ -1335,118 +1480,118 @@ const xe = [
|
|
|
1335
1480
|
"#f87171",
|
|
1336
1481
|
"#38bdf8"
|
|
1337
1482
|
];
|
|
1338
|
-
function
|
|
1339
|
-
return e.map((
|
|
1340
|
-
driverName:
|
|
1341
|
-
carClass:
|
|
1342
|
-
positions:
|
|
1343
|
-
const o = e.filter((d) => d.positions[a] != null).sort((d, p) => d.positions[a] - p.positions[a]).findIndex((d) => d.driverName ===
|
|
1483
|
+
function Hn(e, t) {
|
|
1484
|
+
return e.map((r) => ({
|
|
1485
|
+
driverName: r.driverName,
|
|
1486
|
+
carClass: r.carClass,
|
|
1487
|
+
positions: r.positions.map((s, a) => {
|
|
1488
|
+
const o = e.filter((d) => d.positions[a] != null).sort((d, p) => d.positions[a] - p.positions[a]).findIndex((d) => d.driverName === r.driverName);
|
|
1344
1489
|
return o === -1 ? null : o + 1;
|
|
1345
1490
|
})
|
|
1346
1491
|
}));
|
|
1347
1492
|
}
|
|
1348
|
-
function
|
|
1349
|
-
const [s, a] =
|
|
1493
|
+
function jn({ title: e, drivers: t, timingPoints: r }) {
|
|
1494
|
+
const [s, a] = E(() => /* @__PURE__ */ new Set()), i = K((N) => {
|
|
1350
1495
|
a((S) => {
|
|
1351
|
-
const
|
|
1352
|
-
return
|
|
1496
|
+
const y = new Set(S);
|
|
1497
|
+
return y.has(N) ? y.delete(N) : y.add(N), y;
|
|
1353
1498
|
});
|
|
1354
|
-
}, []), { series: o, maxPos: d } =
|
|
1355
|
-
let
|
|
1356
|
-
return { series:
|
|
1357
|
-
for (const
|
|
1358
|
-
return { ...
|
|
1359
|
-
}), maxPos:
|
|
1360
|
-
}, [
|
|
1361
|
-
if (!o.length ||
|
|
1499
|
+
}, []), { series: o, maxPos: d } = T(() => {
|
|
1500
|
+
let N = 1;
|
|
1501
|
+
return { series: t.map((y, A) => {
|
|
1502
|
+
for (const R of y.positions) R != null && R > N && (N = R);
|
|
1503
|
+
return { ...y, colour: fe[A % fe.length] };
|
|
1504
|
+
}), maxPos: N };
|
|
1505
|
+
}, [t]);
|
|
1506
|
+
if (!o.length || r.length < 2)
|
|
1362
1507
|
return /* @__PURE__ */ l("div", { className: "pvx-positions-empty", children: [
|
|
1363
1508
|
"No position data for ",
|
|
1364
1509
|
e || "this race",
|
|
1365
1510
|
"."
|
|
1366
1511
|
] });
|
|
1367
|
-
const p = 800, c = 34,
|
|
1512
|
+
const p = 800, c = 34, u = 12, v = 12, f = 22, h = 34, k = p - c - u, m = Math.max(f * (d - 1), f), g = v + m + h, b = r.length, x = (N) => c + (b === 1 ? 0 : N / (b - 1) * k), w = (N) => v + (d === 1 ? 0 : (N - 1) / (d - 1) * m), C = (N) => {
|
|
1368
1513
|
const S = [];
|
|
1369
|
-
let
|
|
1370
|
-
return
|
|
1371
|
-
|
|
1372
|
-
}),
|
|
1373
|
-
},
|
|
1514
|
+
let y = [];
|
|
1515
|
+
return N.forEach((A, R) => {
|
|
1516
|
+
A == null ? y.length && (S.push(y), y = []) : y.push([x(R), w(A)]);
|
|
1517
|
+
}), y.length && S.push(y), S;
|
|
1518
|
+
}, M = s.size > 0, P = Math.ceil(b / 24);
|
|
1374
1519
|
return /* @__PURE__ */ l("div", { className: "pvx-positions-chart", children: [
|
|
1375
1520
|
e && /* @__PURE__ */ n("div", { className: "pvx-positions-title", children: e }),
|
|
1376
1521
|
/* @__PURE__ */ l(
|
|
1377
1522
|
"svg",
|
|
1378
1523
|
{
|
|
1379
1524
|
className: "pvx-positions-svg",
|
|
1380
|
-
viewBox: `0 0 ${p} ${
|
|
1525
|
+
viewBox: `0 0 ${p} ${g}`,
|
|
1381
1526
|
preserveAspectRatio: "xMidYMid meet",
|
|
1382
1527
|
role: "img",
|
|
1383
1528
|
"aria-label": `Race position progression${e ? ` — ${e}` : ""}`,
|
|
1384
1529
|
children: [
|
|
1385
|
-
Array.from({ length: d }, (
|
|
1530
|
+
Array.from({ length: d }, (N, S) => S + 1).map((N) => /* @__PURE__ */ l("g", { children: [
|
|
1386
1531
|
/* @__PURE__ */ n(
|
|
1387
1532
|
"line",
|
|
1388
1533
|
{
|
|
1389
1534
|
className: "pvx-positions-grid",
|
|
1390
1535
|
x1: c,
|
|
1391
|
-
y1:
|
|
1392
|
-
x2: p -
|
|
1393
|
-
y2:
|
|
1536
|
+
y1: w(N),
|
|
1537
|
+
x2: p - u,
|
|
1538
|
+
y2: w(N)
|
|
1394
1539
|
}
|
|
1395
1540
|
),
|
|
1396
|
-
/* @__PURE__ */ l("text", { className: "pvx-positions-axis", x: c - 6, y:
|
|
1541
|
+
/* @__PURE__ */ l("text", { className: "pvx-positions-axis", x: c - 6, y: w(N) + 3, textAnchor: "end", children: [
|
|
1397
1542
|
"P",
|
|
1398
|
-
|
|
1543
|
+
N
|
|
1399
1544
|
] })
|
|
1400
|
-
] }, `y${
|
|
1401
|
-
|
|
1545
|
+
] }, `y${N}`)),
|
|
1546
|
+
r.map((N, S) => S % P === 0 && /* @__PURE__ */ n(
|
|
1402
1547
|
"text",
|
|
1403
1548
|
{
|
|
1404
1549
|
className: "pvx-positions-axis",
|
|
1405
|
-
x:
|
|
1406
|
-
y:
|
|
1550
|
+
x: x(S),
|
|
1551
|
+
y: g - h + 16,
|
|
1407
1552
|
textAnchor: "middle",
|
|
1408
|
-
children:
|
|
1553
|
+
children: N.label
|
|
1409
1554
|
},
|
|
1410
1555
|
`x${S}`
|
|
1411
1556
|
)),
|
|
1412
|
-
o.map((
|
|
1413
|
-
const S =
|
|
1557
|
+
o.map((N) => {
|
|
1558
|
+
const S = M && !s.has(N.driverName);
|
|
1414
1559
|
return /* @__PURE__ */ l("g", { opacity: S ? 0.12 : 1, children: [
|
|
1415
|
-
|
|
1560
|
+
C(N.positions).map((y, A) => /* @__PURE__ */ n(
|
|
1416
1561
|
"polyline",
|
|
1417
1562
|
{
|
|
1418
1563
|
fill: "none",
|
|
1419
|
-
stroke:
|
|
1564
|
+
stroke: N.colour,
|
|
1420
1565
|
strokeWidth: S ? 1 : 2,
|
|
1421
|
-
points:
|
|
1566
|
+
points: y.map(([R, H]) => `${R},${H}`).join(" ")
|
|
1422
1567
|
},
|
|
1423
|
-
|
|
1568
|
+
A
|
|
1424
1569
|
)),
|
|
1425
|
-
!S &&
|
|
1426
|
-
] },
|
|
1570
|
+
!S && N.positions.map((y, A) => y != null && /* @__PURE__ */ n("circle", { cx: x(A), cy: w(y), r: 2.4, fill: N.colour, children: /* @__PURE__ */ n("title", { children: `${N.driverName} — ${r[A].label}: P${y}` }) }, A))
|
|
1571
|
+
] }, N.driverName);
|
|
1427
1572
|
})
|
|
1428
1573
|
]
|
|
1429
1574
|
}
|
|
1430
1575
|
),
|
|
1431
1576
|
/* @__PURE__ */ l("div", { className: "pvx-positions-legend", children: [
|
|
1432
|
-
o.map((
|
|
1433
|
-
const S =
|
|
1577
|
+
o.map((N) => {
|
|
1578
|
+
const S = M && !s.has(N.driverName);
|
|
1434
1579
|
return /* @__PURE__ */ l(
|
|
1435
1580
|
"button",
|
|
1436
1581
|
{
|
|
1437
1582
|
type: "button",
|
|
1438
1583
|
className: "pvx-positions-legend-item",
|
|
1439
1584
|
style: { opacity: S ? 0.4 : 1 },
|
|
1440
|
-
onClick: () => i(
|
|
1585
|
+
onClick: () => i(N.driverName),
|
|
1441
1586
|
children: [
|
|
1442
|
-
/* @__PURE__ */ n("span", { className: "pvx-positions-swatch", style: { background:
|
|
1443
|
-
|
|
1587
|
+
/* @__PURE__ */ n("span", { className: "pvx-positions-swatch", style: { background: N.colour } }),
|
|
1588
|
+
N.driverName
|
|
1444
1589
|
]
|
|
1445
1590
|
},
|
|
1446
|
-
|
|
1591
|
+
N.driverName
|
|
1447
1592
|
);
|
|
1448
1593
|
}),
|
|
1449
|
-
|
|
1594
|
+
M && /* @__PURE__ */ n(
|
|
1450
1595
|
"button",
|
|
1451
1596
|
{
|
|
1452
1597
|
type: "button",
|
|
@@ -1458,36 +1603,36 @@ function Sn({ title: e, drivers: r, timingPoints: t }) {
|
|
|
1458
1603
|
] })
|
|
1459
1604
|
] });
|
|
1460
1605
|
}
|
|
1461
|
-
function
|
|
1462
|
-
const
|
|
1463
|
-
const a = [...new Set(
|
|
1464
|
-
return a.length <= 1 ? [{ title: a[0] || null, drivers:
|
|
1606
|
+
function Vn({ positions: e }) {
|
|
1607
|
+
const t = (e == null ? void 0 : e.timingPoints) || [], r = (e == null ? void 0 : e.drivers) || [], s = T(() => {
|
|
1608
|
+
const a = [...new Set(r.map((i) => i.carClass).filter(Boolean))];
|
|
1609
|
+
return a.length <= 1 ? [{ title: a[0] || null, drivers: r }] : a.sort().map((i) => ({
|
|
1465
1610
|
title: i,
|
|
1466
|
-
drivers:
|
|
1467
|
-
|
|
1468
|
-
|
|
1611
|
+
drivers: Hn(
|
|
1612
|
+
r.filter((o) => o.carClass === i),
|
|
1613
|
+
t.length
|
|
1469
1614
|
)
|
|
1470
1615
|
}));
|
|
1471
|
-
}, [
|
|
1472
|
-
return !
|
|
1473
|
-
|
|
1616
|
+
}, [r, t.length]);
|
|
1617
|
+
return !t.length || !r.length ? /* @__PURE__ */ n("div", { className: "pvx-positions-empty", children: "No position data available for this race." }) : /* @__PURE__ */ n("div", { className: "pvx-positions", children: s.map((a, i) => /* @__PURE__ */ n(
|
|
1618
|
+
jn,
|
|
1474
1619
|
{
|
|
1475
1620
|
title: s.length > 1 ? a.title : null,
|
|
1476
1621
|
drivers: a.drivers,
|
|
1477
|
-
timingPoints:
|
|
1622
|
+
timingPoints: t
|
|
1478
1623
|
},
|
|
1479
1624
|
a.title || i
|
|
1480
1625
|
)) });
|
|
1481
1626
|
}
|
|
1482
|
-
function
|
|
1627
|
+
function qt({ competitionId: e, roundNumber: t, className: r }) {
|
|
1483
1628
|
var p;
|
|
1484
|
-
const { data: s, isLoading: a } =
|
|
1629
|
+
const { data: s, isLoading: a } = nn(e, t);
|
|
1485
1630
|
if (a)
|
|
1486
|
-
return /* @__PURE__ */ n(
|
|
1631
|
+
return /* @__PURE__ */ n(W, { message: "Loading results..." });
|
|
1487
1632
|
if (!s)
|
|
1488
1633
|
return /* @__PURE__ */ n(U, { message: "No results for this round." });
|
|
1489
|
-
const o = (s.sessions || []).find((c) => c.type === "RACE"), d = (p = o == null ? void 0 : o.results) == null ? void 0 : p.filter((c) => c.position <= 3).sort((c,
|
|
1490
|
-
return /* @__PURE__ */ l("div", { className: `pvx-round-results ${
|
|
1634
|
+
const o = (s.sessions || []).find((c) => c.type === "RACE"), d = (p = o == null ? void 0 : o.results) == null ? void 0 : p.filter((c) => c.position <= 3).sort((c, u) => c.position - u.position);
|
|
1635
|
+
return /* @__PURE__ */ l("div", { className: `pvx-round-results ${r || ""}`, children: [
|
|
1491
1636
|
/* @__PURE__ */ l("div", { className: "pvx-round-results-header", children: [
|
|
1492
1637
|
/* @__PURE__ */ l("div", { children: [
|
|
1493
1638
|
/* @__PURE__ */ l("h4", { className: "pvx-round-results-title", children: [
|
|
@@ -1502,66 +1647,66 @@ function Lt({ competitionId: e, roundNumber: r, className: t }) {
|
|
|
1502
1647
|
}) })
|
|
1503
1648
|
] }),
|
|
1504
1649
|
(d == null ? void 0 : d.length) > 0 && /* @__PURE__ */ n("div", { className: "pvx-round-podium-summary", children: d.map((c) => /* @__PURE__ */ l("span", { className: "pvx-round-podium-item", children: [
|
|
1505
|
-
/* @__PURE__ */ n("span", { children:
|
|
1650
|
+
/* @__PURE__ */ n("span", { children: he[c.position - 1] }),
|
|
1506
1651
|
/* @__PURE__ */ n("span", { children: c.driverName })
|
|
1507
1652
|
] }, c.driverId)) })
|
|
1508
1653
|
] }),
|
|
1509
|
-
/* @__PURE__ */ n(
|
|
1654
|
+
/* @__PURE__ */ n(ve, { round: s, competitionId: e })
|
|
1510
1655
|
] });
|
|
1511
1656
|
}
|
|
1512
|
-
function
|
|
1513
|
-
var
|
|
1514
|
-
const [s, a] =
|
|
1657
|
+
function ve({ round: e, competitionId: t, className: r }) {
|
|
1658
|
+
var h, k, m, g, b, x;
|
|
1659
|
+
const [s, a] = E(null), i = (e == null ? void 0 : e.sessions) || [];
|
|
1515
1660
|
if (!i.length)
|
|
1516
1661
|
return /* @__PURE__ */ n(U, { message: "No session data for this round." });
|
|
1517
|
-
const { data: o } =
|
|
1518
|
-
|
|
1662
|
+
const { data: o } = an(
|
|
1663
|
+
t,
|
|
1519
1664
|
e == null ? void 0 : e.roundNumber,
|
|
1520
1665
|
{}
|
|
1521
|
-
), d = i.some((
|
|
1522
|
-
|
|
1666
|
+
), d = i.some((w) => w.type === "RACE"), { data: p } = on(
|
|
1667
|
+
t,
|
|
1523
1668
|
e == null ? void 0 : e.roundNumber,
|
|
1524
|
-
{ enabled: !!
|
|
1525
|
-
), c = s || ((
|
|
1526
|
-
return /* @__PURE__ */ l("div", { className:
|
|
1669
|
+
{ enabled: !!t && d }
|
|
1670
|
+
), c = s || ((h = i.find((w) => w.type === "RACE")) == null ? void 0 : h.type) || ((k = i[0]) == null ? void 0 : k.type), u = i.find((w) => w.type === c) || i[0], v = ((g = (m = o == null ? void 0 : o.sessions) == null ? void 0 : m.find((w) => w.type === c)) == null ? void 0 : g.drivers) || null, f = (u == null ? void 0 : u.type) === "RACE" && ((b = p == null ? void 0 : p.timingPoints) == null ? void 0 : b.length) > 0 && ((x = p == null ? void 0 : p.drivers) == null ? void 0 : x.length) > 0;
|
|
1671
|
+
return /* @__PURE__ */ l("div", { className: r || "", children: [
|
|
1527
1672
|
/* @__PURE__ */ n(
|
|
1528
|
-
|
|
1673
|
+
xn,
|
|
1529
1674
|
{
|
|
1530
1675
|
sessions: i,
|
|
1531
1676
|
activeSession: c,
|
|
1532
1677
|
onSelect: a
|
|
1533
1678
|
}
|
|
1534
1679
|
),
|
|
1535
|
-
/* @__PURE__ */ n(
|
|
1680
|
+
/* @__PURE__ */ n(Wn, { session: u, sessionLaps: v }),
|
|
1536
1681
|
f && /* @__PURE__ */ l("div", { className: "pvx-positions-section", children: [
|
|
1537
1682
|
/* @__PURE__ */ n("div", { className: "pvx-positions-section-title", children: "Race Positions" }),
|
|
1538
|
-
/* @__PURE__ */ n(
|
|
1683
|
+
/* @__PURE__ */ n(Vn, { positions: p })
|
|
1539
1684
|
] })
|
|
1540
1685
|
] });
|
|
1541
1686
|
}
|
|
1542
|
-
function
|
|
1543
|
-
var
|
|
1544
|
-
const
|
|
1545
|
-
if (!((
|
|
1687
|
+
function Wn({ session: e, sessionLaps: t }) {
|
|
1688
|
+
var u;
|
|
1689
|
+
const r = e.type === "RACE", [s, a] = E(null);
|
|
1690
|
+
if (!((u = e.results) != null && u.length))
|
|
1546
1691
|
return /* @__PURE__ */ n(U, { message: `No results for ${e.type}.` });
|
|
1547
|
-
const i =
|
|
1548
|
-
var
|
|
1549
|
-
const
|
|
1692
|
+
const i = Nn(e.results), o = r ? 7 : 4, d = [...new Set(e.results.map((v) => v.carClass).filter(Boolean))], p = d.length > 1, c = (v, f, h) => {
|
|
1693
|
+
var g;
|
|
1694
|
+
const k = (g = t == null ? void 0 : t[v.driverId]) == null ? void 0 : g.laps, m = s === v.driverId && !!k;
|
|
1550
1695
|
return /* @__PURE__ */ n(
|
|
1551
|
-
|
|
1696
|
+
Kn,
|
|
1552
1697
|
{
|
|
1553
|
-
result:
|
|
1554
|
-
isRace:
|
|
1698
|
+
result: v,
|
|
1699
|
+
isRace: r,
|
|
1555
1700
|
fastestSplits: i,
|
|
1556
1701
|
rowIndex: f,
|
|
1557
|
-
displayPosition:
|
|
1558
|
-
hasLapDetail: !!
|
|
1559
|
-
isExpanded:
|
|
1560
|
-
onToggle: () => a(
|
|
1561
|
-
driverLaps:
|
|
1702
|
+
displayPosition: h,
|
|
1703
|
+
hasLapDetail: !!k,
|
|
1704
|
+
isExpanded: m,
|
|
1705
|
+
onToggle: () => a(m ? null : v.driverId),
|
|
1706
|
+
driverLaps: m ? k : null,
|
|
1562
1707
|
colCount: o
|
|
1563
1708
|
},
|
|
1564
|
-
|
|
1709
|
+
v.driverId || f
|
|
1565
1710
|
);
|
|
1566
1711
|
};
|
|
1567
1712
|
return /* @__PURE__ */ n("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
@@ -1570,36 +1715,36 @@ function Rn({ session: e, sessionLaps: r }) {
|
|
|
1570
1715
|
/* @__PURE__ */ n("th", { className: "pvx-th", children: "Driver" }),
|
|
1571
1716
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "Car" }),
|
|
1572
1717
|
/* @__PURE__ */ n("th", { className: "pvx-th", children: "Best Lap" }),
|
|
1573
|
-
|
|
1718
|
+
r && /* @__PURE__ */ l(B, { children: [
|
|
1574
1719
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "Laps" }),
|
|
1575
1720
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "Time / Gap" }),
|
|
1576
1721
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-th--center", children: "Points" })
|
|
1577
1722
|
] })
|
|
1578
1723
|
] }) }),
|
|
1579
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: p ? d.sort().map((
|
|
1580
|
-
const f = e.results.filter((
|
|
1724
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: p ? d.sort().map((v) => {
|
|
1725
|
+
const f = e.results.filter((h) => h.carClass === v).sort((h, k) => (h.classPosition ?? h.position) - (k.classPosition ?? k.position));
|
|
1581
1726
|
return [
|
|
1582
|
-
/* @__PURE__ */ n("tr", { className: "pvx-row pvx-row--class-header", children: /* @__PURE__ */ n("td", { colSpan: o, className: "pvx-td pvx-td--class-header", children:
|
|
1727
|
+
/* @__PURE__ */ n("tr", { className: "pvx-row pvx-row--class-header", children: /* @__PURE__ */ n("td", { colSpan: o, className: "pvx-td pvx-td--class-header", children: v }) }, `hdr-${v}`),
|
|
1583
1728
|
...f.map(
|
|
1584
|
-
(
|
|
1729
|
+
(h, k) => c(h, k, h.classPosition ?? h.position)
|
|
1585
1730
|
)
|
|
1586
1731
|
];
|
|
1587
|
-
}) : e.results.map((
|
|
1732
|
+
}) : e.results.map((v, f) => c(v, f)) })
|
|
1588
1733
|
] }) });
|
|
1589
1734
|
}
|
|
1590
|
-
function
|
|
1591
|
-
const
|
|
1592
|
-
return /* @__PURE__ */ l(
|
|
1735
|
+
function Kn({ result: e, isRace: t, fastestSplits: r, rowIndex: s, displayPosition: a, hasLapDetail: i, isExpanded: o, onToggle: d, driverLaps: p, colCount: c }) {
|
|
1736
|
+
const u = a ?? e.position, v = u <= 3;
|
|
1737
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1593
1738
|
/* @__PURE__ */ l(
|
|
1594
1739
|
"tr",
|
|
1595
1740
|
{
|
|
1596
|
-
className: `pvx-row ${
|
|
1741
|
+
className: `pvx-row ${v ? "pvx-row--podium" : ""} ${i ? "pvx-row--expandable" : ""}`,
|
|
1597
1742
|
onClick: i ? d : void 0,
|
|
1598
1743
|
style: i ? { cursor: "pointer" } : void 0,
|
|
1599
1744
|
children: [
|
|
1600
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(
|
|
1745
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(me, { position: u }) }),
|
|
1601
1746
|
/* @__PURE__ */ l("td", { className: "pvx-td pvx-td--primary", children: [
|
|
1602
|
-
/* @__PURE__ */ n(
|
|
1747
|
+
/* @__PURE__ */ n(ne, { nation: e.nation }),
|
|
1603
1748
|
e.driverName,
|
|
1604
1749
|
e.carNumber != null && /* @__PURE__ */ l("span", { className: "pvx-car-number", children: [
|
|
1605
1750
|
"#",
|
|
@@ -1607,18 +1752,18 @@ function Tn({ result: e, isRace: r, fastestSplits: t, rowIndex: s, displayPositi
|
|
|
1607
1752
|
] }),
|
|
1608
1753
|
e.penalty && /* @__PURE__ */ n("span", { className: "pvx-penalty", children: e.penalty })
|
|
1609
1754
|
] }),
|
|
1610
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children:
|
|
1755
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children: _(e.carId) }),
|
|
1611
1756
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono", children: /* @__PURE__ */ n(
|
|
1612
|
-
|
|
1757
|
+
Gn,
|
|
1613
1758
|
{
|
|
1614
1759
|
bestLap: e.bestLapFormatted,
|
|
1615
1760
|
hasBestLap: e.hasBestLap,
|
|
1616
1761
|
splits: e.splits,
|
|
1617
|
-
fastestSplits:
|
|
1762
|
+
fastestSplits: r,
|
|
1618
1763
|
showAbove: s <= 1
|
|
1619
1764
|
}
|
|
1620
1765
|
) }),
|
|
1621
|
-
|
|
1766
|
+
t && /* @__PURE__ */ l(B, { children: [
|
|
1622
1767
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children: e.lapsCompleted }),
|
|
1623
1768
|
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono pvx-td--muted pvx-hidden-below-sm", children: e.position === 1 ? e.totalTime || "-" : e.gap || "-" }),
|
|
1624
1769
|
/* @__PURE__ */ l("td", { className: "pvx-td pvx-td--center", children: [
|
|
@@ -1634,11 +1779,11 @@ function Tn({ result: e, isRace: r, fastestSplits: t, rowIndex: s, displayPositi
|
|
|
1634
1779
|
]
|
|
1635
1780
|
}
|
|
1636
1781
|
),
|
|
1637
|
-
o && p && /* @__PURE__ */ n("tr", { className: "pvx-row pvx-row--lap-detail", children: /* @__PURE__ */ n("td", { colSpan: c, className: "pvx-td pvx-td--lap-detail", children: /* @__PURE__ */ n(
|
|
1782
|
+
o && p && /* @__PURE__ */ n("tr", { className: "pvx-row pvx-row--lap-detail", children: /* @__PURE__ */ n("td", { colSpan: c, className: "pvx-td pvx-td--lap-detail", children: /* @__PURE__ */ n(On, { laps: p }) }) })
|
|
1638
1783
|
] });
|
|
1639
1784
|
}
|
|
1640
|
-
function
|
|
1641
|
-
const
|
|
1785
|
+
function On({ laps: e }) {
|
|
1786
|
+
const t = Math.min(...e.filter((r) => r.valid && r.timeMs > 0).map((r) => r.timeMs));
|
|
1642
1787
|
return /* @__PURE__ */ l("table", { className: "pvx-table pvx-table--laps", children: [
|
|
1643
1788
|
/* @__PURE__ */ n("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
1644
1789
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-th--narrow", children: "Lap" }),
|
|
@@ -1647,22 +1792,22 @@ function Mn({ laps: e }) {
|
|
|
1647
1792
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "S2" }),
|
|
1648
1793
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "S3" })
|
|
1649
1794
|
] }) }),
|
|
1650
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: e.map((
|
|
1795
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: e.map((r) => {
|
|
1651
1796
|
var a;
|
|
1652
|
-
const s =
|
|
1653
|
-
return /* @__PURE__ */ l("tr", { className: `pvx-row ${
|
|
1654
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted", children:
|
|
1655
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono", children:
|
|
1656
|
-
(
|
|
1657
|
-
Array.from({ length: Math.max(0, 3 - (((a =
|
|
1658
|
-
] },
|
|
1797
|
+
const s = r.valid && r.timeMs === t;
|
|
1798
|
+
return /* @__PURE__ */ l("tr", { className: `pvx-row ${r.valid ? "" : "pvx-row--invalid"} ${s ? "pvx-row--fastest" : ""}`, children: [
|
|
1799
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--muted", children: r.lap }),
|
|
1800
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono", children: r.time }),
|
|
1801
|
+
(r.splits || []).map((i, o) => /* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono pvx-td--muted pvx-hidden-below-sm", children: i }, o)),
|
|
1802
|
+
Array.from({ length: Math.max(0, 3 - (((a = r.splits) == null ? void 0 : a.length) || 0)) }).map((i, o) => /* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm" }, `pad-${o}`))
|
|
1803
|
+
] }, r.lap);
|
|
1659
1804
|
}) })
|
|
1660
1805
|
] });
|
|
1661
1806
|
}
|
|
1662
|
-
function
|
|
1663
|
-
return e ? /* @__PURE__ */ l("span", { className: `pvx-best-lap-cell ${
|
|
1807
|
+
function Gn({ bestLap: e, hasBestLap: t, splits: r, fastestSplits: s, showAbove: a }) {
|
|
1808
|
+
return e ? /* @__PURE__ */ l("span", { className: `pvx-best-lap-cell ${t ? "pvx-best-lap-cell--fastest" : ""}`, children: [
|
|
1664
1809
|
/* @__PURE__ */ n("span", { className: "pvx-best-lap-time", children: e }),
|
|
1665
|
-
(
|
|
1810
|
+
(r == null ? void 0 : r.length) > 0 && /* @__PURE__ */ n("span", { className: "pvx-splits-tooltip-anchor", children: /* @__PURE__ */ n("span", { className: `pvx-splits-tooltip ${a ? "" : "pvx-splits-tooltip--above"}`, children: r.map((i, o) => {
|
|
1666
1811
|
const d = s && i === s[o];
|
|
1667
1812
|
return /* @__PURE__ */ l("span", { className: "pvx-splits-tooltip-row", children: [
|
|
1668
1813
|
/* @__PURE__ */ l("span", { className: "pvx-splits-tooltip-label", children: [
|
|
@@ -1674,13 +1819,13 @@ function Dn({ bestLap: e, hasBestLap: r, splits: t, fastestSplits: s, showAbove:
|
|
|
1674
1819
|
}) }) })
|
|
1675
1820
|
] }) : /* @__PURE__ */ n("span", { className: "pvx-td--muted", children: "-" });
|
|
1676
1821
|
}
|
|
1677
|
-
function
|
|
1678
|
-
const { getSteamId:
|
|
1822
|
+
function Ht({ competitionId: e, className: t }) {
|
|
1823
|
+
const { getSteamId: r } = L(), { data: s, isLoading: a } = Re(e), i = r();
|
|
1679
1824
|
if (a)
|
|
1680
|
-
return /* @__PURE__ */ n(
|
|
1825
|
+
return /* @__PURE__ */ n(W, { message: "Loading drivers..." });
|
|
1681
1826
|
const o = (s == null ? void 0 : s.drivers) || (s == null ? void 0 : s.entries) || [];
|
|
1682
|
-
return o.length ? /* @__PURE__ */ n("div", { className: `pvx-entry-grid ${
|
|
1683
|
-
var c,
|
|
1827
|
+
return o.length ? /* @__PURE__ */ n("div", { className: `pvx-entry-grid ${t || ""}`, children: o.map((d) => {
|
|
1828
|
+
var c, u;
|
|
1684
1829
|
const p = i && d.steamId === i;
|
|
1685
1830
|
return /* @__PURE__ */ l("div", { className: `pvx-entry-card ${p ? "pvx-entry-card--you" : ""}`, children: [
|
|
1686
1831
|
d.avatarUrl ? /* @__PURE__ */ n(
|
|
@@ -1690,7 +1835,7 @@ function St({ competitionId: e, className: r }) {
|
|
|
1690
1835
|
alt: "",
|
|
1691
1836
|
className: "pvx-entry-avatar"
|
|
1692
1837
|
}
|
|
1693
|
-
) : /* @__PURE__ */ n("div", { className: "pvx-entry-avatar pvx-entry-avatar--placeholder", children: ((
|
|
1838
|
+
) : /* @__PURE__ */ n("div", { className: "pvx-entry-avatar pvx-entry-avatar--placeholder", children: ((u = (c = d.displayName) == null ? void 0 : c.charAt(0)) == null ? void 0 : u.toUpperCase()) || "?" }),
|
|
1694
1839
|
/* @__PURE__ */ l("span", { className: "pvx-entry-name", children: [
|
|
1695
1840
|
d.displayName,
|
|
1696
1841
|
p && /* @__PURE__ */ n("span", { className: "pvx-entry-you", children: " (you)" })
|
|
@@ -1698,24 +1843,24 @@ function St({ competitionId: e, className: r }) {
|
|
|
1698
1843
|
] }, d.steamId || d.driverId);
|
|
1699
1844
|
}) }) : /* @__PURE__ */ n(U, { message: "No drivers registered yet." });
|
|
1700
1845
|
}
|
|
1701
|
-
function
|
|
1846
|
+
function jt({
|
|
1702
1847
|
competitionId: e,
|
|
1703
|
-
driverData:
|
|
1704
|
-
className:
|
|
1848
|
+
driverData: t,
|
|
1849
|
+
className: r,
|
|
1705
1850
|
children: s
|
|
1706
1851
|
}) {
|
|
1707
|
-
const { data: a, isLoading: i } =
|
|
1708
|
-
o && p.mutate(
|
|
1709
|
-
},
|
|
1852
|
+
const { data: a, isLoading: i } = le(e), { isPowerMode: o } = ce(), d = de(e), p = Te(e), c = $e(e), u = (a == null ? void 0 : a.isRegistered) || !1, v = i || p.isPending || c.isPending, f = p.error || c.error || null, h = () => {
|
|
1853
|
+
o && p.mutate(t || {});
|
|
1854
|
+
}, k = () => {
|
|
1710
1855
|
o && c.mutate();
|
|
1711
1856
|
};
|
|
1712
|
-
return typeof s == "function" ? s({ isRegistered:
|
|
1857
|
+
return typeof s == "function" ? s({ isRegistered: u, isLoading: v, register: h, withdraw: k, error: f, isPowerMode: o, registrationUrl: d }) : o ? /* @__PURE__ */ n(
|
|
1713
1858
|
"button",
|
|
1714
1859
|
{
|
|
1715
|
-
className: `pvx-comp-register-btn ${
|
|
1716
|
-
onClick:
|
|
1717
|
-
disabled:
|
|
1718
|
-
children:
|
|
1860
|
+
className: `pvx-comp-register-btn ${r || ""}`,
|
|
1861
|
+
onClick: u ? k : h,
|
|
1862
|
+
disabled: v,
|
|
1863
|
+
children: v ? "Loading..." : u ? "Withdraw" : "Register"
|
|
1719
1864
|
}
|
|
1720
1865
|
) : /* @__PURE__ */ n(
|
|
1721
1866
|
"a",
|
|
@@ -1723,51 +1868,51 @@ function $t({
|
|
|
1723
1868
|
href: d,
|
|
1724
1869
|
target: "_blank",
|
|
1725
1870
|
rel: "noopener noreferrer",
|
|
1726
|
-
className: `pvx-comp-register-link ${
|
|
1727
|
-
children:
|
|
1871
|
+
className: `pvx-comp-register-link ${r || ""}`,
|
|
1872
|
+
children: u ? "View Registration" : "Register on PitVox"
|
|
1728
1873
|
}
|
|
1729
1874
|
);
|
|
1730
1875
|
}
|
|
1731
|
-
function
|
|
1732
|
-
const { getSteamId: a } = L(), { isPowerMode: i } =
|
|
1733
|
-
return p ||
|
|
1734
|
-
|
|
1876
|
+
function Vt({ competitionId: e, registration: t, onWithdrawSuccess: r, className: s }) {
|
|
1877
|
+
const { getSteamId: a } = L(), { isPowerMode: i } = ce(), o = de(e), { data: d, isLoading: p } = le(e), { data: c, isLoading: u } = Re(e), v = Te(e), f = $e(e), h = a(), k = (d == null ? void 0 : d.isRegistered) || !1, m = (c == null ? void 0 : c.drivers) || (c == null ? void 0 : c.entries) || [], g = t || {}, b = m.length || g.currentCount || 0, x = g.maxParticipants && b >= g.maxParticipants, w = g.deadline && new Date(g.deadline) < /* @__PURE__ */ new Date(), C = g.isOpen && !w && !x;
|
|
1878
|
+
return p || u ? /* @__PURE__ */ n(W, { message: "Loading registration..." }) : k ? /* @__PURE__ */ n("div", { className: `pvx-reg-panel ${s || ""}`, children: /* @__PURE__ */ n(
|
|
1879
|
+
Qn,
|
|
1735
1880
|
{
|
|
1736
1881
|
competitionId: e,
|
|
1737
|
-
drivers:
|
|
1738
|
-
steamId:
|
|
1882
|
+
drivers: m,
|
|
1883
|
+
steamId: h,
|
|
1739
1884
|
isPowerMode: i,
|
|
1740
1885
|
registrationUrl: o,
|
|
1741
1886
|
withdrawMutation: f,
|
|
1742
|
-
onWithdrawSuccess:
|
|
1743
|
-
registration:
|
|
1887
|
+
onWithdrawSuccess: r,
|
|
1888
|
+
registration: g
|
|
1744
1889
|
}
|
|
1745
|
-
) }) :
|
|
1746
|
-
|
|
1890
|
+
) }) : C ? h ? i ? /* @__PURE__ */ n("div", { className: `pvx-reg-panel ${s || ""}`, children: /* @__PURE__ */ n(
|
|
1891
|
+
zn,
|
|
1747
1892
|
{
|
|
1748
1893
|
competitionId: e,
|
|
1749
|
-
registerMutation:
|
|
1750
|
-
registration:
|
|
1894
|
+
registerMutation: v,
|
|
1895
|
+
registration: g
|
|
1751
1896
|
}
|
|
1752
1897
|
) }) : /* @__PURE__ */ n("div", { className: `pvx-reg-panel ${s || ""}`, children: /* @__PURE__ */ n("a", { href: o, target: "_blank", rel: "noopener noreferrer", className: "pvx-comp-register-link", children: "Register on PitVox" }) }) : /* @__PURE__ */ n("div", { className: `pvx-reg-panel ${s || ""}`, children: i ? /* @__PURE__ */ n("div", { className: "pvx-reg-status-msg", children: "Sign in to register for this competition." }) : /* @__PURE__ */ n("div", { className: "pvx-reg-status-msg", children: /* @__PURE__ */ n("a", { href: o, target: "_blank", rel: "noopener noreferrer", className: "pvx-comp-register-link", children: "Register on PitVox" }) }) }) : /* @__PURE__ */ l("div", { className: `pvx-reg-panel ${s || ""}`, children: [
|
|
1753
|
-
/* @__PURE__ */ n("div", { className: "pvx-reg-status-msg", children:
|
|
1754
|
-
|
|
1898
|
+
/* @__PURE__ */ n("div", { className: "pvx-reg-status-msg", children: x ? "Registration is full." : w ? "Registration deadline has passed." : "Registration is closed." }),
|
|
1899
|
+
m.length > 0 && /* @__PURE__ */ n(Ee, { drivers: m, steamId: h })
|
|
1755
1900
|
] });
|
|
1756
1901
|
}
|
|
1757
|
-
function
|
|
1758
|
-
const [s, a] =
|
|
1759
|
-
|
|
1902
|
+
function zn({ competitionId: e, registerMutation: t, registration: r }) {
|
|
1903
|
+
const [s, a] = E(""), [i, o] = E("intermediate"), [d, p] = E(""), c = (h) => {
|
|
1904
|
+
h.preventDefault(), t.mutate({
|
|
1760
1905
|
discordUsername: s || void 0,
|
|
1761
1906
|
experience: i,
|
|
1762
1907
|
comments: d || void 0
|
|
1763
1908
|
});
|
|
1764
|
-
},
|
|
1909
|
+
}, u = r || {}, v = u.currentCount || 0, f = u.maxParticipants;
|
|
1765
1910
|
return /* @__PURE__ */ l("form", { className: "pvx-reg-form", onSubmit: c, children: [
|
|
1766
1911
|
/* @__PURE__ */ l("div", { className: "pvx-reg-form-header", children: [
|
|
1767
1912
|
/* @__PURE__ */ n("h3", { className: "pvx-reg-form-title", children: "Register" }),
|
|
1768
|
-
f && /* @__PURE__ */ n(
|
|
1913
|
+
f && /* @__PURE__ */ n(_e, { count: v, max: f })
|
|
1769
1914
|
] }),
|
|
1770
|
-
|
|
1915
|
+
t.error && /* @__PURE__ */ n("div", { className: "pvx-reg-error", children: t.error.message || "Registration failed" }),
|
|
1771
1916
|
/* @__PURE__ */ l("div", { className: "pvx-reg-field", children: [
|
|
1772
1917
|
/* @__PURE__ */ l("label", { className: "pvx-reg-label", htmlFor: `pvx-discord-${e}`, children: [
|
|
1773
1918
|
"Discord Username ",
|
|
@@ -1781,7 +1926,7 @@ function Pn({ competitionId: e, registerMutation: r, registration: t }) {
|
|
|
1781
1926
|
className: "pvx-reg-input",
|
|
1782
1927
|
placeholder: "e.g. username",
|
|
1783
1928
|
value: s,
|
|
1784
|
-
onChange: (
|
|
1929
|
+
onChange: (h) => a(h.target.value)
|
|
1785
1930
|
}
|
|
1786
1931
|
)
|
|
1787
1932
|
] }),
|
|
@@ -1793,7 +1938,7 @@ function Pn({ competitionId: e, registerMutation: r, registration: t }) {
|
|
|
1793
1938
|
id: `pvx-exp-${e}`,
|
|
1794
1939
|
className: "pvx-reg-select",
|
|
1795
1940
|
value: i,
|
|
1796
|
-
onChange: (
|
|
1941
|
+
onChange: (h) => o(h.target.value),
|
|
1797
1942
|
children: [
|
|
1798
1943
|
/* @__PURE__ */ n("option", { value: "beginner", children: "Beginner" }),
|
|
1799
1944
|
/* @__PURE__ */ n("option", { value: "intermediate", children: "Intermediate" }),
|
|
@@ -1815,7 +1960,7 @@ function Pn({ competitionId: e, registerMutation: r, registration: t }) {
|
|
|
1815
1960
|
rows: 3,
|
|
1816
1961
|
placeholder: "Anything the organisers should know?",
|
|
1817
1962
|
value: d,
|
|
1818
|
-
onChange: (
|
|
1963
|
+
onChange: (h) => p(h.target.value)
|
|
1819
1964
|
}
|
|
1820
1965
|
)
|
|
1821
1966
|
] }),
|
|
@@ -1824,26 +1969,26 @@ function Pn({ competitionId: e, registerMutation: r, registration: t }) {
|
|
|
1824
1969
|
{
|
|
1825
1970
|
type: "submit",
|
|
1826
1971
|
className: "pvx-comp-register-btn",
|
|
1827
|
-
disabled:
|
|
1828
|
-
children:
|
|
1972
|
+
disabled: t.isPending,
|
|
1973
|
+
children: t.isPending ? "Registering..." : "Register"
|
|
1829
1974
|
}
|
|
1830
1975
|
) })
|
|
1831
1976
|
] });
|
|
1832
1977
|
}
|
|
1833
|
-
function
|
|
1834
|
-
const [p, c] =
|
|
1978
|
+
function Qn({ competitionId: e, drivers: t, steamId: r, isPowerMode: s, registrationUrl: a, withdrawMutation: i, onWithdrawSuccess: o, registration: d }) {
|
|
1979
|
+
const [p, c] = E(!1), u = () => {
|
|
1835
1980
|
i.mutate(void 0, {
|
|
1836
1981
|
onSuccess: () => {
|
|
1837
1982
|
c(!1), o && o();
|
|
1838
1983
|
}
|
|
1839
1984
|
});
|
|
1840
|
-
},
|
|
1841
|
-
return /* @__PURE__ */ l(
|
|
1985
|
+
}, v = d || {}, f = t.length || v.currentCount || 0, h = v.maxParticipants;
|
|
1986
|
+
return /* @__PURE__ */ l(B, { children: [
|
|
1842
1987
|
/* @__PURE__ */ l("div", { className: "pvx-reg-form-header", children: [
|
|
1843
1988
|
/* @__PURE__ */ n("h3", { className: "pvx-reg-form-title", children: "Registered Drivers" }),
|
|
1844
|
-
|
|
1989
|
+
h && /* @__PURE__ */ n(_e, { count: f, max: h })
|
|
1845
1990
|
] }),
|
|
1846
|
-
/* @__PURE__ */ n(
|
|
1991
|
+
/* @__PURE__ */ n(Ee, { drivers: t, steamId: r }),
|
|
1847
1992
|
i.error && /* @__PURE__ */ n("div", { className: "pvx-reg-error", children: i.error.message || "Withdrawal failed" }),
|
|
1848
1993
|
s ? /* @__PURE__ */ n("div", { className: "pvx-reg-actions", children: p ? /* @__PURE__ */ l("div", { className: "pvx-reg-confirm", children: [
|
|
1849
1994
|
/* @__PURE__ */ n("p", { className: "pvx-reg-confirm-text", children: "Are you sure you want to unregister?" }),
|
|
@@ -1862,7 +2007,7 @@ function Bn({ competitionId: e, drivers: r, steamId: t, isPowerMode: s, registra
|
|
|
1862
2007
|
{
|
|
1863
2008
|
type: "button",
|
|
1864
2009
|
className: "pvx-reg-danger-btn",
|
|
1865
|
-
onClick:
|
|
2010
|
+
onClick: u,
|
|
1866
2011
|
disabled: i.isPending,
|
|
1867
2012
|
children: i.isPending ? "Unregistering..." : "Yes, Unregister"
|
|
1868
2013
|
}
|
|
@@ -1879,16 +2024,16 @@ function Bn({ competitionId: e, drivers: r, steamId: t, isPowerMode: s, registra
|
|
|
1879
2024
|
) }) : /* @__PURE__ */ n("div", { className: "pvx-reg-actions", children: /* @__PURE__ */ n("a", { href: a, target: "_blank", rel: "noopener noreferrer", className: "pvx-comp-register-link", children: "Manage on PitVox" }) })
|
|
1880
2025
|
] });
|
|
1881
2026
|
}
|
|
1882
|
-
function
|
|
2027
|
+
function Ee({ drivers: e, steamId: t }) {
|
|
1883
2028
|
if (!e.length)
|
|
1884
2029
|
return /* @__PURE__ */ n("div", { className: "pvx-reg-no-drivers", children: "No drivers registered yet." });
|
|
1885
|
-
const
|
|
1886
|
-
const i =
|
|
2030
|
+
const r = [...e].sort((s, a) => {
|
|
2031
|
+
const i = t && s.steamId === t ? -1 : 0, o = t && a.steamId === t ? -1 : 0;
|
|
1887
2032
|
return i - o;
|
|
1888
2033
|
});
|
|
1889
|
-
return /* @__PURE__ */ n("div", { className: "pvx-reg-driver-list", children:
|
|
2034
|
+
return /* @__PURE__ */ n("div", { className: "pvx-reg-driver-list", children: r.map((s) => {
|
|
1890
2035
|
var i, o;
|
|
1891
|
-
const a =
|
|
2036
|
+
const a = t && s.steamId === t;
|
|
1892
2037
|
return /* @__PURE__ */ l(
|
|
1893
2038
|
"div",
|
|
1894
2039
|
{
|
|
@@ -1905,73 +2050,89 @@ function Ae({ drivers: e, steamId: r }) {
|
|
|
1905
2050
|
);
|
|
1906
2051
|
}) });
|
|
1907
2052
|
}
|
|
1908
|
-
function
|
|
1909
|
-
const
|
|
2053
|
+
function _e({ count: e, max: t }) {
|
|
2054
|
+
const r = t ? e / t * 100 : 0, s = r >= 100 ? "full" : r >= 75 ? "warning" : "ok";
|
|
1910
2055
|
return /* @__PURE__ */ l("span", { className: `pvx-reg-capacity pvx-reg-capacity--${s}`, children: [
|
|
1911
2056
|
e,
|
|
1912
2057
|
"/",
|
|
1913
|
-
|
|
2058
|
+
t,
|
|
1914
2059
|
" drivers"
|
|
1915
2060
|
] });
|
|
1916
2061
|
}
|
|
1917
|
-
function
|
|
1918
|
-
const { data:
|
|
1919
|
-
() =>
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
[
|
|
1924
|
-
),
|
|
1925
|
-
() => d.map((w) => w.roundNumber),
|
|
1926
|
-
[d]
|
|
1927
|
-
), { data: c = [], isLoading: h } = Xe(
|
|
2062
|
+
function Wt({ competitionId: e, className: t }) {
|
|
2063
|
+
const { data: r, isLoading: s } = Se(e), a = (r == null ? void 0 : r.type) === "championship", i = (r == null ? void 0 : r.type) === "hotlap", o = T(() => (r == null ? void 0 : r.rounds) || [], [r]), d = i && o.length > 1, p = i && !d, { data: c } = rn(p ? e : null), u = T(
|
|
2064
|
+
() => o.filter((y) => y.isFinalized),
|
|
2065
|
+
[o]
|
|
2066
|
+
), v = T(
|
|
2067
|
+
() => u.map((y) => y.roundNumber),
|
|
2068
|
+
[u]
|
|
2069
|
+
), { data: f = [], isLoading: h } = tn(
|
|
1928
2070
|
e,
|
|
1929
|
-
|
|
1930
|
-
),
|
|
2071
|
+
v
|
|
2072
|
+
), k = p && f.length > 0 ? f[0] : null, m = (k == null ? void 0 : k.sessions) || [], g = d ? o.find(
|
|
2073
|
+
(y) => y.startTime && new Date(y.startTime) <= /* @__PURE__ */ new Date() && !j(y)
|
|
2074
|
+
) : null, b = d ? g ? `hlround-${g.roundNumber}` : "standings" : p ? "leaderboard" : a ? "standings" : v.length > 0 ? `round-${v[v.length - 1]}` : null, [x, w] = E(null), C = x || b;
|
|
1931
2075
|
if (s || h)
|
|
1932
|
-
return /* @__PURE__ */ n(
|
|
1933
|
-
if (!
|
|
2076
|
+
return /* @__PURE__ */ n(W, { message: "Loading results..." });
|
|
2077
|
+
if (!r)
|
|
1934
2078
|
return /* @__PURE__ */ n(U, { message: "Competition not found." });
|
|
1935
|
-
if (!
|
|
2079
|
+
if (!u.length)
|
|
1936
2080
|
return /* @__PURE__ */ n(U, { message: "No results available yet. Results will appear here once rounds are finalised." });
|
|
1937
|
-
const
|
|
1938
|
-
if (
|
|
1939
|
-
|
|
1940
|
-
for (const
|
|
1941
|
-
|
|
2081
|
+
const M = new Map(f.map((y) => [`round-${y.roundNumber}`, y])), P = new Map(f.map((y) => [y.roundNumber, y])), N = [];
|
|
2082
|
+
if (d) {
|
|
2083
|
+
N.push({ id: "standings", label: "Standings" });
|
|
2084
|
+
for (const y of [...o].sort((A, R) => A.roundNumber - R.roundNumber))
|
|
2085
|
+
N.push({ id: `hlround-${y.roundNumber}`, label: `R${y.roundNumber}`, track: y.track || null });
|
|
2086
|
+
} else if (p) {
|
|
2087
|
+
N.push({ id: "leaderboard", label: "Leaderboard" });
|
|
2088
|
+
for (const y of m)
|
|
2089
|
+
N.push({ id: `session-${y.type}`, label: ee(y.type) });
|
|
2090
|
+
} else if (a) {
|
|
2091
|
+
N.push({ id: "standings", label: "Standings" });
|
|
2092
|
+
for (const y of u)
|
|
2093
|
+
N.push({ id: `round-${y.roundNumber}`, label: `R${y.roundNumber}`, track: null });
|
|
1942
2094
|
} else
|
|
1943
|
-
for (const
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
2095
|
+
for (const y of u)
|
|
2096
|
+
N.push({ id: `round-${y.roundNumber}`, label: `R${y.roundNumber}`, track: null });
|
|
2097
|
+
let S;
|
|
2098
|
+
if (C === "standings")
|
|
2099
|
+
S = /* @__PURE__ */ n(Fn, { competitionId: e });
|
|
2100
|
+
else if (C === "leaderboard")
|
|
2101
|
+
S = /* @__PURE__ */ n(Ue, { leaderboard: c, config: r });
|
|
2102
|
+
else if (C != null && C.startsWith("hlround-")) {
|
|
2103
|
+
const y = parseInt(C.slice(8), 10), A = o.find((R) => R.roundNumber === y);
|
|
2104
|
+
S = A ? /* @__PURE__ */ n(Zn, { competitionId: e, roundMeta: A, roundData: P.get(y) }) : /* @__PURE__ */ n(U, { message: "No results for this round." });
|
|
2105
|
+
} else if (C != null && C.startsWith("session-"))
|
|
2106
|
+
S = /* @__PURE__ */ n(
|
|
2107
|
+
Fe,
|
|
2108
|
+
{
|
|
2109
|
+
session: m.find((y) => `session-${y.type}` === C),
|
|
2110
|
+
round: k,
|
|
2111
|
+
competitionId: e
|
|
2112
|
+
}
|
|
2113
|
+
);
|
|
2114
|
+
else {
|
|
2115
|
+
const y = M.get(C);
|
|
2116
|
+
S = y ? /* @__PURE__ */ n(Yn, { round: y, competitionId: e }) : /* @__PURE__ */ n(U, { message: "No results for this round." });
|
|
2117
|
+
}
|
|
2118
|
+
return /* @__PURE__ */ l("div", { className: t || "", children: [
|
|
2119
|
+
/* @__PURE__ */ n("div", { className: "pvx-results-tabs", children: N.map((y) => /* @__PURE__ */ l(
|
|
1952
2120
|
"button",
|
|
1953
2121
|
{
|
|
1954
|
-
className: `pvx-results-tab ${
|
|
1955
|
-
onClick: () =>
|
|
1956
|
-
title:
|
|
2122
|
+
className: `pvx-results-tab ${C === y.id ? "pvx-results-tab--active" : ""}`,
|
|
2123
|
+
onClick: () => w(y.id),
|
|
2124
|
+
title: y.track || void 0,
|
|
1957
2125
|
children: [
|
|
1958
|
-
/* @__PURE__ */ n("span", { className: "pvx-results-tab-label", children:
|
|
1959
|
-
|
|
2126
|
+
/* @__PURE__ */ n("span", { className: "pvx-results-tab-label", children: y.label }),
|
|
2127
|
+
y.track && /* @__PURE__ */ n("span", { className: "pvx-results-tab-track", children: y.track })
|
|
1960
2128
|
]
|
|
1961
2129
|
},
|
|
1962
|
-
|
|
2130
|
+
y.id
|
|
1963
2131
|
)) }),
|
|
1964
|
-
|
|
1965
|
-
Un,
|
|
1966
|
-
{
|
|
1967
|
-
session: f.find((w) => `session-${w.type}` === v),
|
|
1968
|
-
round: g,
|
|
1969
|
-
competitionId: e
|
|
1970
|
-
}
|
|
1971
|
-
) : k ? /* @__PURE__ */ n(An, { round: k, competitionId: e }) : /* @__PURE__ */ n(U, { message: "No results for this round." })
|
|
2132
|
+
S
|
|
1972
2133
|
] });
|
|
1973
2134
|
}
|
|
1974
|
-
function
|
|
2135
|
+
function Yn({ round: e, competitionId: t }) {
|
|
1975
2136
|
var i;
|
|
1976
2137
|
const s = (e.sessions || []).find((o) => o.type === "RACE"), a = (i = s == null ? void 0 : s.results) == null ? void 0 : i.filter((o) => o.position <= 3).sort((o, d) => o.position - d.position);
|
|
1977
2138
|
return /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
@@ -1989,18 +2150,18 @@ function An({ round: e, competitionId: r }) {
|
|
|
1989
2150
|
}) })
|
|
1990
2151
|
] }),
|
|
1991
2152
|
(a == null ? void 0 : a.length) > 0 && /* @__PURE__ */ n("div", { className: "pvx-round-podium-summary", children: a.map((o) => /* @__PURE__ */ l("span", { className: "pvx-round-podium-item", children: [
|
|
1992
|
-
/* @__PURE__ */ n("span", { children:
|
|
2153
|
+
/* @__PURE__ */ n("span", { children: he[o.position - 1] }),
|
|
1993
2154
|
/* @__PURE__ */ n("span", { children: o.driverName })
|
|
1994
2155
|
] }, o.driverId)) })
|
|
1995
2156
|
] }),
|
|
1996
|
-
/* @__PURE__ */ n(
|
|
2157
|
+
/* @__PURE__ */ n(ve, { round: e, competitionId: t })
|
|
1997
2158
|
] });
|
|
1998
2159
|
}
|
|
1999
|
-
function
|
|
2000
|
-
var
|
|
2001
|
-
return (
|
|
2160
|
+
function Ue({ leaderboard: e, config: t, heading: r }) {
|
|
2161
|
+
var s;
|
|
2162
|
+
return (s = e == null ? void 0 : e.drivers) != null && s.length ? /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
2002
2163
|
/* @__PURE__ */ n("div", { className: "pvx-card-header--split", children: /* @__PURE__ */ l("div", { children: [
|
|
2003
|
-
/* @__PURE__ */ n("h4", { className: "pvx-card-title", children: e.track || (
|
|
2164
|
+
/* @__PURE__ */ n("h4", { className: "pvx-card-title", children: r || e.track || (t == null ? void 0 : t.name) || "Hotlap Leaderboard" }),
|
|
2004
2165
|
/* @__PURE__ */ l("span", { className: "pvx-standings-subtitle", children: [
|
|
2005
2166
|
e.sessionsCompleted,
|
|
2006
2167
|
" session",
|
|
@@ -2018,47 +2179,72 @@ function In({ leaderboard: e, config: r }) {
|
|
|
2018
2179
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "Sessions" }),
|
|
2019
2180
|
/* @__PURE__ */ n("th", { className: "pvx-th pvx-hidden-below-sm", children: "Gap" })
|
|
2020
2181
|
] }) }),
|
|
2021
|
-
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: e.drivers.map((
|
|
2022
|
-
const
|
|
2023
|
-
return /* @__PURE__ */ l("tr", { className: `pvx-row ${
|
|
2024
|
-
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(
|
|
2182
|
+
/* @__PURE__ */ n("tbody", { className: "pvx-tbody", children: e.drivers.map((a) => {
|
|
2183
|
+
const i = a.position === 1 ? "" : `+${((a.bestLapMs - e.drivers[0].bestLapMs) / 1e3).toFixed(3)}`;
|
|
2184
|
+
return /* @__PURE__ */ l("tr", { className: `pvx-row ${a.position <= 3 ? "pvx-row--podium" : ""}`, children: [
|
|
2185
|
+
/* @__PURE__ */ n("td", { className: "pvx-td", children: /* @__PURE__ */ n(me, { position: a.position }) }),
|
|
2025
2186
|
/* @__PURE__ */ l("td", { className: "pvx-td pvx-td--primary", children: [
|
|
2026
|
-
/* @__PURE__ */ n(
|
|
2027
|
-
|
|
2187
|
+
/* @__PURE__ */ n(ne, { nation: a.nation }),
|
|
2188
|
+
a.driverName
|
|
2028
2189
|
] }),
|
|
2029
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children:
|
|
2030
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono", children: /* @__PURE__ */ n("span", { className:
|
|
2031
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children:
|
|
2032
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children:
|
|
2033
|
-
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono pvx-td--muted pvx-hidden-below-sm", children:
|
|
2034
|
-
] },
|
|
2190
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children: _(a.carId) }),
|
|
2191
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono", children: /* @__PURE__ */ n("span", { className: a.position === 1 ? "pvx-best-lap-cell--fastest" : "", children: a.bestLapFormatted }) }),
|
|
2192
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children: a.totalLaps }),
|
|
2193
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-hidden-below-sm", children: a.sessionsParticipated }),
|
|
2194
|
+
/* @__PURE__ */ n("td", { className: "pvx-td pvx-td--mono pvx-td--muted pvx-hidden-below-sm", children: i })
|
|
2195
|
+
] }, a.driverId);
|
|
2035
2196
|
}) })
|
|
2036
2197
|
] }) })
|
|
2037
2198
|
] }) : /* @__PURE__ */ n(U, { message: "No lap times recorded yet." });
|
|
2038
2199
|
}
|
|
2039
|
-
function
|
|
2200
|
+
function Fe({ session: e, round: t, competitionId: r }) {
|
|
2040
2201
|
return e ? /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
2041
|
-
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ n("h4", { className: "pvx-card-title", children:
|
|
2202
|
+
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ n("h4", { className: "pvx-card-title", children: ee(e.type) }) }),
|
|
2042
2203
|
/* @__PURE__ */ n(
|
|
2043
|
-
|
|
2204
|
+
ve,
|
|
2044
2205
|
{
|
|
2045
|
-
round: { ...
|
|
2046
|
-
competitionId:
|
|
2206
|
+
round: { ...t, sessions: [e] },
|
|
2207
|
+
competitionId: r
|
|
2047
2208
|
}
|
|
2048
2209
|
)
|
|
2049
2210
|
] }) : /* @__PURE__ */ n(U, { message: "Session data not available." });
|
|
2050
2211
|
}
|
|
2051
|
-
function
|
|
2052
|
-
const {
|
|
2212
|
+
function Zn({ competitionId: e, roundMeta: t, roundData: r }) {
|
|
2213
|
+
const { data: s } = sn(e, t.roundNumber), a = (r == null ? void 0 : r.sessions) || [], [i, o] = E("leaderboard"), d = [
|
|
2214
|
+
{ id: "leaderboard", label: "Leaderboard" },
|
|
2215
|
+
...a.map((u) => ({ id: `session-${u.type}`, label: ee(u.type) }))
|
|
2216
|
+
], p = d.some((u) => u.id === i) ? i : "leaderboard", c = `Round ${t.roundNumber}${t.track ? ` — ${t.track}` : ""}`;
|
|
2217
|
+
return /* @__PURE__ */ l("div", { children: [
|
|
2218
|
+
/* @__PURE__ */ n("div", { className: "pvx-session-tabs", children: d.map((u) => /* @__PURE__ */ n(
|
|
2219
|
+
"button",
|
|
2220
|
+
{
|
|
2221
|
+
onClick: () => o(u.id),
|
|
2222
|
+
className: `pvx-session-tab ${p === u.id ? "pvx-session-tab--active" : ""}`,
|
|
2223
|
+
children: u.label
|
|
2224
|
+
},
|
|
2225
|
+
u.id
|
|
2226
|
+
)) }),
|
|
2227
|
+
p === "leaderboard" ? /* @__PURE__ */ n(Ue, { leaderboard: s, heading: c }) : /* @__PURE__ */ n(
|
|
2228
|
+
Fe,
|
|
2229
|
+
{
|
|
2230
|
+
session: a.find((u) => `session-${u.type}` === p),
|
|
2231
|
+
round: r,
|
|
2232
|
+
competitionId: e
|
|
2233
|
+
}
|
|
2234
|
+
)
|
|
2235
|
+
] });
|
|
2236
|
+
}
|
|
2237
|
+
function Jn(e) {
|
|
2238
|
+
const { cdnUrl: t } = L(), r = $({
|
|
2053
2239
|
queryKey: ["pitvox", "laps", "global", e, "index"],
|
|
2054
|
-
queryFn: () =>
|
|
2240
|
+
queryFn: () => D(t, ye(null, e)),
|
|
2055
2241
|
enabled: !!e,
|
|
2056
2242
|
staleTime: 3e4,
|
|
2057
2243
|
refetchInterval: 3e4
|
|
2058
|
-
}), s =
|
|
2244
|
+
}), s = r.data;
|
|
2059
2245
|
return {
|
|
2060
|
-
isLoading:
|
|
2061
|
-
error:
|
|
2246
|
+
isLoading: r.isLoading,
|
|
2247
|
+
error: r.error,
|
|
2062
2248
|
data: s ? {
|
|
2063
2249
|
driverName: s.driverName || "Driver",
|
|
2064
2250
|
lapCount: s.lapCount || 0,
|
|
@@ -2074,14 +2260,14 @@ function Fn(e) {
|
|
|
2074
2260
|
} : null
|
|
2075
2261
|
};
|
|
2076
2262
|
}
|
|
2077
|
-
function
|
|
2078
|
-
const { cdnUrl:
|
|
2079
|
-
queryKey: ["pitvox", "laps",
|
|
2080
|
-
queryFn: () =>
|
|
2263
|
+
function Xn(e) {
|
|
2264
|
+
const { cdnUrl: t, partnerSlug: r } = L(), s = $({
|
|
2265
|
+
queryKey: ["pitvox", "laps", r || "global", e, "index"],
|
|
2266
|
+
queryFn: () => D(t, ye(r, e)),
|
|
2081
2267
|
enabled: !!e,
|
|
2082
2268
|
staleTime: 3e4,
|
|
2083
2269
|
refetchInterval: 3e4
|
|
2084
|
-
}), a =
|
|
2270
|
+
}), a = T(() => {
|
|
2085
2271
|
var i;
|
|
2086
2272
|
return ((i = s.data) == null ? void 0 : i.combos) || [];
|
|
2087
2273
|
}, [s.data]);
|
|
@@ -2091,168 +2277,168 @@ function En(e) {
|
|
|
2091
2277
|
data: a
|
|
2092
2278
|
};
|
|
2093
2279
|
}
|
|
2094
|
-
function
|
|
2095
|
-
const { cdnUrl:
|
|
2096
|
-
return
|
|
2097
|
-
queryKey: ["pitvox", "ratings",
|
|
2098
|
-
queryFn: () =>
|
|
2280
|
+
function qe(e = {}) {
|
|
2281
|
+
const { cdnUrl: t, partnerSlug: r } = L(), { game: s, gameVersion: a, enabled: i = !0 } = e, o = ie(r, s, a, "ratings.json");
|
|
2282
|
+
return $({
|
|
2283
|
+
queryKey: ["pitvox", "ratings", r, s || null, a || null],
|
|
2284
|
+
queryFn: () => D(t, o),
|
|
2099
2285
|
staleTime: 3e4,
|
|
2100
2286
|
refetchInterval: 3e4,
|
|
2101
2287
|
enabled: i
|
|
2102
2288
|
});
|
|
2103
2289
|
}
|
|
2104
|
-
function
|
|
2290
|
+
function Kt(e) {
|
|
2105
2291
|
var s;
|
|
2106
|
-
const
|
|
2292
|
+
const t = qe(), r = T(() => {
|
|
2107
2293
|
var a;
|
|
2108
|
-
return !((a =
|
|
2294
|
+
return !((a = t.data) != null && a.drivers) || !e ? null : t.data.drivers.find(
|
|
2109
2295
|
(i) => i.identifier === e
|
|
2110
2296
|
) || null;
|
|
2111
|
-
}, [(s =
|
|
2297
|
+
}, [(s = t.data) == null ? void 0 : s.drivers, e]);
|
|
2112
2298
|
return {
|
|
2113
|
-
isLoading:
|
|
2114
|
-
error:
|
|
2115
|
-
data:
|
|
2116
|
-
rating:
|
|
2117
|
-
rank:
|
|
2118
|
-
totalDrivers:
|
|
2119
|
-
comboCount:
|
|
2120
|
-
distinctCars:
|
|
2121
|
-
combos:
|
|
2299
|
+
isLoading: t.isLoading,
|
|
2300
|
+
error: t.error,
|
|
2301
|
+
data: r ? {
|
|
2302
|
+
rating: r.rating,
|
|
2303
|
+
rank: r.rank,
|
|
2304
|
+
totalDrivers: t.data.driverCount || t.data.drivers.length,
|
|
2305
|
+
comboCount: r.comboCount || 0,
|
|
2306
|
+
distinctCars: r.distinctCars || 0,
|
|
2307
|
+
combos: r.combos || []
|
|
2122
2308
|
} : null
|
|
2123
2309
|
};
|
|
2124
2310
|
}
|
|
2125
|
-
function
|
|
2126
|
-
const
|
|
2311
|
+
function se(e = {}) {
|
|
2312
|
+
const t = qe(e);
|
|
2127
2313
|
return {
|
|
2128
|
-
data:
|
|
2129
|
-
isLoading:
|
|
2130
|
-
error:
|
|
2314
|
+
data: t.data || null,
|
|
2315
|
+
isLoading: t.isLoading,
|
|
2316
|
+
error: t.error
|
|
2131
2317
|
};
|
|
2132
2318
|
}
|
|
2133
|
-
function
|
|
2319
|
+
function et(e) {
|
|
2134
2320
|
var p, c;
|
|
2135
|
-
const { versions:
|
|
2321
|
+
const { versions: t } = Je(), r = (p = t == null ? void 0 : t.evo) == null ? void 0 : p.default, s = (c = t == null ? void 0 : t.lmu) == null ? void 0 : c.default, a = se({ game: "evo", gameVersion: r, enabled: !!r }), i = se({ game: "acc" }), o = se({ game: "lmu", gameVersion: s, enabled: !!s });
|
|
2136
2322
|
return {
|
|
2137
|
-
data:
|
|
2323
|
+
data: T(() => e ? [
|
|
2138
2324
|
{ data: a.data, game: "evo", label: "EVO" },
|
|
2139
2325
|
{ data: i.data, game: "acc", label: "ACC" },
|
|
2140
2326
|
{ data: o.data, game: "lmu", label: "LMU" }
|
|
2141
|
-
].map(({ data:
|
|
2142
|
-
var
|
|
2143
|
-
if (!((
|
|
2144
|
-
const
|
|
2145
|
-
return
|
|
2146
|
-
game:
|
|
2327
|
+
].map(({ data: u, game: v, label: f }) => {
|
|
2328
|
+
var m;
|
|
2329
|
+
if (!((m = u == null ? void 0 : u.drivers) != null && m.length)) return null;
|
|
2330
|
+
const h = [...u.drivers].sort((g, b) => b.rating - g.rating), k = h.findIndex((g) => g.identifier === e);
|
|
2331
|
+
return k === -1 ? null : {
|
|
2332
|
+
game: v,
|
|
2147
2333
|
label: f,
|
|
2148
|
-
rating:
|
|
2149
|
-
rank:
|
|
2150
|
-
totalDrivers:
|
|
2334
|
+
rating: h[k].rating,
|
|
2335
|
+
rank: k + 1,
|
|
2336
|
+
totalDrivers: h.length
|
|
2151
2337
|
};
|
|
2152
2338
|
}).filter(Boolean) : [], [e, a.data, i.data, o.data]),
|
|
2153
2339
|
isLoading: a.isLoading || i.isLoading || o.isLoading
|
|
2154
2340
|
};
|
|
2155
2341
|
}
|
|
2156
|
-
function
|
|
2157
|
-
const { cdnUrl: e, partnerSlug:
|
|
2158
|
-
queryKey: ["pitvox", "competitions",
|
|
2342
|
+
function nt() {
|
|
2343
|
+
const { cdnUrl: e, partnerSlug: t, getSteamId: r, onFetchServerPassword: s } = L(), a = r(), { data: i, isLoading: o } = $({
|
|
2344
|
+
queryKey: ["pitvox", "competitions", t],
|
|
2159
2345
|
queryFn: async () => {
|
|
2160
|
-
const
|
|
2161
|
-
return
|
|
2346
|
+
const h = await D(e, "competitions/index.json");
|
|
2347
|
+
return h != null && h.competitions ? h.competitions.filter((k) => k.partnerSlug === t) : [];
|
|
2162
2348
|
},
|
|
2163
2349
|
staleTime: 6e4
|
|
2164
|
-
}), d = (i == null ? void 0 : i.map((
|
|
2165
|
-
queries: d.map((
|
|
2166
|
-
queryKey: ["pitvox", "competition",
|
|
2167
|
-
queryFn: () =>
|
|
2350
|
+
}), d = (i == null ? void 0 : i.map((h) => h.id)) || [], p = xe({
|
|
2351
|
+
queries: d.map((h) => ({
|
|
2352
|
+
queryKey: ["pitvox", "competition", t, h, "entrylist"],
|
|
2353
|
+
queryFn: () => D(e, `competitions/${t}/${h}/entrylist.json`),
|
|
2168
2354
|
enabled: !!a && d.length > 0,
|
|
2169
2355
|
staleTime: 6e4
|
|
2170
2356
|
}))
|
|
2171
|
-
}), c = p.some((
|
|
2172
|
-
var
|
|
2357
|
+
}), c = p.some((h) => h.isLoading), u = T(() => {
|
|
2358
|
+
var m, g;
|
|
2173
2359
|
if (!i || !a || c) return [];
|
|
2174
|
-
const
|
|
2175
|
-
for (let
|
|
2176
|
-
const
|
|
2177
|
-
if (!((
|
|
2178
|
-
const
|
|
2179
|
-
for (const
|
|
2180
|
-
if (
|
|
2181
|
-
const
|
|
2182
|
-
!
|
|
2183
|
-
competitionId:
|
|
2184
|
-
competitionName:
|
|
2185
|
-
roundNumber:
|
|
2186
|
-
track:
|
|
2187
|
-
startTime:
|
|
2188
|
-
dediStatus:
|
|
2189
|
-
dediServerAddress:
|
|
2360
|
+
const h = /* @__PURE__ */ new Date(), k = [];
|
|
2361
|
+
for (let b = 0; b < i.length; b++) {
|
|
2362
|
+
const x = i[b], w = (m = p[b]) == null ? void 0 : m.data;
|
|
2363
|
+
if (!((g = w == null ? void 0 : w.drivers) == null ? void 0 : g.some((N) => N.steamId === a))) continue;
|
|
2364
|
+
const M = x.type === "hotlap", P = x.rounds || [];
|
|
2365
|
+
for (const N of P) {
|
|
2366
|
+
if (M ? j(N) : N.isFinalized) continue;
|
|
2367
|
+
const y = N.dediStatus === "running" || N.dediStatus === "provisioning", A = N.dediStatus === "scheduled", R = N.startTime && new Date(N.startTime) > h, H = y || A || N.dediServerAddress;
|
|
2368
|
+
!y && !R && !H || k.push({
|
|
2369
|
+
competitionId: x.id,
|
|
2370
|
+
competitionName: x.name,
|
|
2371
|
+
roundNumber: N.roundNumber,
|
|
2372
|
+
track: N.track || "TBD",
|
|
2373
|
+
startTime: N.startTime,
|
|
2374
|
+
dediStatus: N.dediStatus || null,
|
|
2375
|
+
dediServerAddress: N.dediServerAddress || null
|
|
2190
2376
|
});
|
|
2191
2377
|
}
|
|
2192
2378
|
}
|
|
2193
|
-
return
|
|
2194
|
-
const
|
|
2195
|
-
return
|
|
2196
|
-
}),
|
|
2197
|
-
}, [i, a, c, p]),
|
|
2198
|
-
queries:
|
|
2199
|
-
queryKey: ["pitvox", "serverInfo",
|
|
2200
|
-
queryFn: () => s(
|
|
2201
|
-
enabled: !!s &&
|
|
2379
|
+
return k.sort((b, x) => {
|
|
2380
|
+
const w = b.dediStatus === "running" || b.dediStatus === "provisioning", C = x.dediStatus === "running" || x.dediStatus === "provisioning";
|
|
2381
|
+
return w && !C ? -1 : !w && C ? 1 : new Date(b.startTime) - new Date(x.startTime);
|
|
2382
|
+
}), k.length > 0 && (k[0].isNext = !0), k;
|
|
2383
|
+
}, [i, a, c, p]), v = xe({
|
|
2384
|
+
queries: u.map((h) => ({
|
|
2385
|
+
queryKey: ["pitvox", "serverInfo", h.competitionId, h.roundNumber],
|
|
2386
|
+
queryFn: () => s(h.competitionId, h.roundNumber),
|
|
2387
|
+
enabled: !!s && u.length > 0,
|
|
2202
2388
|
staleTime: 5 * 6e4,
|
|
2203
2389
|
// 5 minutes
|
|
2204
2390
|
retry: !1
|
|
2205
2391
|
}))
|
|
2206
2392
|
});
|
|
2207
2393
|
return {
|
|
2208
|
-
data:
|
|
2209
|
-
var
|
|
2210
|
-
const
|
|
2211
|
-
return
|
|
2212
|
-
...
|
|
2213
|
-
serverAddress:
|
|
2214
|
-
serverPassword:
|
|
2215
|
-
} :
|
|
2216
|
-
}) :
|
|
2394
|
+
data: T(() => u.length ? s ? u.map((h, k) => {
|
|
2395
|
+
var g;
|
|
2396
|
+
const m = (g = v[k]) == null ? void 0 : g.data;
|
|
2397
|
+
return m != null && m.success ? {
|
|
2398
|
+
...h,
|
|
2399
|
+
serverAddress: m.serverAddress || null,
|
|
2400
|
+
serverPassword: m.serverPassword || null
|
|
2401
|
+
} : h;
|
|
2402
|
+
}) : u : [], [u, s, v]),
|
|
2217
2403
|
isLoading: o || !!a && c
|
|
2218
2404
|
};
|
|
2219
2405
|
}
|
|
2220
|
-
function
|
|
2406
|
+
function tt() {
|
|
2221
2407
|
const { onFetchNotifications: e } = L();
|
|
2222
2408
|
return !!e;
|
|
2223
2409
|
}
|
|
2224
|
-
function
|
|
2225
|
-
const { onFetchNotifications:
|
|
2226
|
-
return
|
|
2227
|
-
queryKey: ["pitvox", "notifications",
|
|
2228
|
-
queryFn: () =>
|
|
2229
|
-
enabled: !!
|
|
2410
|
+
function rt(e = {}) {
|
|
2411
|
+
const { onFetchNotifications: t, partnerSlug: r } = L(), { limit: s = 20, unreadOnly: a = !1 } = e;
|
|
2412
|
+
return $({
|
|
2413
|
+
queryKey: ["pitvox", "notifications", r, { limit: s, unreadOnly: a }],
|
|
2414
|
+
queryFn: () => t({ limit: s, unreadOnly: a }),
|
|
2415
|
+
enabled: !!t,
|
|
2230
2416
|
staleTime: 3e4,
|
|
2231
2417
|
refetchInterval: 3e4
|
|
2232
2418
|
});
|
|
2233
2419
|
}
|
|
2234
|
-
function
|
|
2235
|
-
const { onFetchNotifications: e, partnerSlug:
|
|
2236
|
-
queryKey: ["pitvox", "notifications",
|
|
2420
|
+
function Ot() {
|
|
2421
|
+
const { onFetchNotifications: e, partnerSlug: t } = L(), { data: r, isLoading: s } = $({
|
|
2422
|
+
queryKey: ["pitvox", "notifications", t, { limit: 1, unreadOnly: !1 }],
|
|
2237
2423
|
queryFn: () => e({ limit: 1 }),
|
|
2238
2424
|
enabled: !!e,
|
|
2239
2425
|
staleTime: 3e4,
|
|
2240
2426
|
refetchInterval: 3e4,
|
|
2241
2427
|
select: (a) => (a == null ? void 0 : a.unreadCount) ?? 0
|
|
2242
2428
|
});
|
|
2243
|
-
return { count:
|
|
2429
|
+
return { count: r ?? 0, isLoading: s };
|
|
2244
2430
|
}
|
|
2245
|
-
function
|
|
2246
|
-
const { onMarkNotificationRead: e, partnerSlug:
|
|
2247
|
-
return
|
|
2431
|
+
function st() {
|
|
2432
|
+
const { onMarkNotificationRead: e, partnerSlug: t } = L(), r = O();
|
|
2433
|
+
return Y({
|
|
2248
2434
|
mutationFn: (s) => {
|
|
2249
2435
|
if (!e)
|
|
2250
2436
|
throw new Error("No onMarkNotificationRead callback provided to PitVoxPartnerProvider.");
|
|
2251
2437
|
return e(s);
|
|
2252
2438
|
},
|
|
2253
2439
|
onSuccess: (s, a) => {
|
|
2254
|
-
|
|
2255
|
-
{ queryKey: ["pitvox", "notifications",
|
|
2440
|
+
r.setQueriesData(
|
|
2441
|
+
{ queryKey: ["pitvox", "notifications", t] },
|
|
2256
2442
|
(i) => i != null && i.notifications ? {
|
|
2257
2443
|
...i,
|
|
2258
2444
|
unreadCount: Math.max(0, (i.unreadCount || 0) - 1),
|
|
@@ -2264,17 +2450,17 @@ function Kn() {
|
|
|
2264
2450
|
}
|
|
2265
2451
|
});
|
|
2266
2452
|
}
|
|
2267
|
-
function
|
|
2268
|
-
const { onMarkAllNotificationsRead: e, partnerSlug:
|
|
2269
|
-
return
|
|
2453
|
+
function at() {
|
|
2454
|
+
const { onMarkAllNotificationsRead: e, partnerSlug: t } = L(), r = O();
|
|
2455
|
+
return Y({
|
|
2270
2456
|
mutationFn: () => {
|
|
2271
2457
|
if (!e)
|
|
2272
2458
|
throw new Error("No onMarkAllNotificationsRead callback provided to PitVoxPartnerProvider.");
|
|
2273
2459
|
return e();
|
|
2274
2460
|
},
|
|
2275
2461
|
onSuccess: () => {
|
|
2276
|
-
|
|
2277
|
-
{ queryKey: ["pitvox", "notifications",
|
|
2462
|
+
r.setQueriesData(
|
|
2463
|
+
{ queryKey: ["pitvox", "notifications", t] },
|
|
2278
2464
|
(s) => s != null && s.notifications ? {
|
|
2279
2465
|
...s,
|
|
2280
2466
|
unreadCount: 0,
|
|
@@ -2288,10 +2474,10 @@ function Hn() {
|
|
|
2288
2474
|
}
|
|
2289
2475
|
});
|
|
2290
2476
|
}
|
|
2291
|
-
function
|
|
2292
|
-
const a =
|
|
2477
|
+
function it({ driverName: e, avatarUrl: t, memberSince: r, className: s = "" }) {
|
|
2478
|
+
const a = r ? new Date(r).toLocaleDateString("en-GB", { day: "2-digit", month: "2-digit", year: "numeric" }) : null;
|
|
2293
2479
|
return /* @__PURE__ */ l("div", { className: `pvx-card pvx-dash-profile ${s}`, children: [
|
|
2294
|
-
|
|
2480
|
+
t ? /* @__PURE__ */ n("img", { src: t, alt: "", className: "pvx-dash-profile-avatar" }) : /* @__PURE__ */ n("div", { className: "pvx-dash-profile-avatar pvx-dash-profile-avatar--placeholder", children: (e || "?")[0].toUpperCase() }),
|
|
2295
2481
|
/* @__PURE__ */ l("div", { className: "pvx-dash-profile-info", children: [
|
|
2296
2482
|
/* @__PURE__ */ n("h2", { className: "pvx-dash-profile-name", children: e }),
|
|
2297
2483
|
a && /* @__PURE__ */ l("p", { className: "pvx-dash-profile-since", children: [
|
|
@@ -2301,7 +2487,7 @@ function Wn({ driverName: e, avatarUrl: r, memberSince: t, className: s = "" })
|
|
|
2301
2487
|
] })
|
|
2302
2488
|
] });
|
|
2303
2489
|
}
|
|
2304
|
-
function
|
|
2490
|
+
function ot() {
|
|
2305
2491
|
return /* @__PURE__ */ l("svg", { className: "pvx-dash-stat-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2306
2492
|
/* @__PURE__ */ n("line", { x1: "4", y1: "9", x2: "20", y2: "9" }),
|
|
2307
2493
|
/* @__PURE__ */ n("line", { x1: "4", y1: "15", x2: "20", y2: "15" }),
|
|
@@ -2309,7 +2495,7 @@ function On() {
|
|
|
2309
2495
|
/* @__PURE__ */ n("line", { x1: "16", y1: "3", x2: "14", y2: "21" })
|
|
2310
2496
|
] });
|
|
2311
2497
|
}
|
|
2312
|
-
function
|
|
2498
|
+
function lt() {
|
|
2313
2499
|
return /* @__PURE__ */ l("svg", { className: "pvx-dash-stat-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2314
2500
|
/* @__PURE__ */ n("circle", { cx: "12", cy: "12", r: "10" }),
|
|
2315
2501
|
/* @__PURE__ */ n("circle", { cx: "12", cy: "12", r: "2" }),
|
|
@@ -2318,53 +2504,53 @@ function zn() {
|
|
|
2318
2504
|
/* @__PURE__ */ n("path", { d: "M13.5 12.5l4 2.5" })
|
|
2319
2505
|
] });
|
|
2320
2506
|
}
|
|
2321
|
-
function
|
|
2507
|
+
function Ne() {
|
|
2322
2508
|
return /* @__PURE__ */ n("svg", { className: "pvx-dash-stat-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ n("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" }) });
|
|
2323
2509
|
}
|
|
2324
|
-
function
|
|
2325
|
-
const [o, d] =
|
|
2326
|
-
|
|
2510
|
+
function be({ icon: e, value: t, label: r, items: s, labelKey: a, countKey: i }) {
|
|
2511
|
+
const [o, d] = E(!1), p = Ve(null);
|
|
2512
|
+
We(() => {
|
|
2327
2513
|
if (!o) return;
|
|
2328
|
-
function
|
|
2329
|
-
p.current && !p.current.contains(
|
|
2514
|
+
function u(v) {
|
|
2515
|
+
p.current && !p.current.contains(v.target) && d(!1);
|
|
2330
2516
|
}
|
|
2331
|
-
return document.addEventListener("mousedown",
|
|
2517
|
+
return document.addEventListener("mousedown", u), () => document.removeEventListener("mousedown", u);
|
|
2332
2518
|
}, [o]);
|
|
2333
|
-
const c = s != null && s.length ? s.slice().sort((
|
|
2519
|
+
const c = s != null && s.length ? s.slice().sort((u, v) => v[i] - u[i]) : null;
|
|
2334
2520
|
return /* @__PURE__ */ l(
|
|
2335
2521
|
"div",
|
|
2336
2522
|
{
|
|
2337
2523
|
ref: p,
|
|
2338
2524
|
className: `pvx-dash-stat-card ${c ? "pvx-dash-stat-card--clickable" : ""}`,
|
|
2339
|
-
onClick: c ? () => d((
|
|
2525
|
+
onClick: c ? () => d((u) => !u) : void 0,
|
|
2340
2526
|
children: [
|
|
2341
2527
|
e,
|
|
2342
2528
|
/* @__PURE__ */ l("div", { className: "pvx-dash-stat-content", children: [
|
|
2343
|
-
/* @__PURE__ */ n("span", { className: "pvx-dash-stat-value", children:
|
|
2344
|
-
/* @__PURE__ */ n("span", { className: "pvx-dash-stat-label", children:
|
|
2529
|
+
/* @__PURE__ */ n("span", { className: "pvx-dash-stat-value", children: t }),
|
|
2530
|
+
/* @__PURE__ */ n("span", { className: "pvx-dash-stat-label", children: r })
|
|
2345
2531
|
] }),
|
|
2346
|
-
c && /* @__PURE__ */ n("div", { className: `pvx-dash-tooltip pvx-dash-tooltip--scrollable ${o ? "pvx-dash-tooltip--open" : ""}`, children: c.map((
|
|
2347
|
-
/* @__PURE__ */ n("span", { className: "pvx-dash-tooltip-label", children:
|
|
2348
|
-
/* @__PURE__ */ n("span", { className: "pvx-dash-tooltip-value", children:
|
|
2349
|
-
] },
|
|
2532
|
+
c && /* @__PURE__ */ n("div", { className: `pvx-dash-tooltip pvx-dash-tooltip--scrollable ${o ? "pvx-dash-tooltip--open" : ""}`, children: c.map((u, v) => /* @__PURE__ */ l("div", { className: "pvx-dash-tooltip-row", children: [
|
|
2533
|
+
/* @__PURE__ */ n("span", { className: "pvx-dash-tooltip-label", children: u[a] }),
|
|
2534
|
+
/* @__PURE__ */ n("span", { className: "pvx-dash-tooltip-value", children: u[i] })
|
|
2535
|
+
] }, v)) })
|
|
2350
2536
|
]
|
|
2351
2537
|
}
|
|
2352
2538
|
);
|
|
2353
2539
|
}
|
|
2354
|
-
function
|
|
2540
|
+
function ct({ stats: e, gameRatings: t, onGameRatingSelect: r, rating: s, className: a = "" }) {
|
|
2355
2541
|
if (!e) return null;
|
|
2356
2542
|
const i = e.trackBreakdown.map((p) => ({
|
|
2357
|
-
name:
|
|
2543
|
+
name: V(p.trackId, p.layout),
|
|
2358
2544
|
lapCount: p.lapCount
|
|
2359
2545
|
})), o = e.carBreakdown.map((p) => ({
|
|
2360
|
-
name:
|
|
2546
|
+
name: _(p.carId),
|
|
2361
2547
|
lapCount: p.lapCount
|
|
2362
|
-
})), d = Array.isArray(
|
|
2548
|
+
})), d = Array.isArray(t) && t.length > 0;
|
|
2363
2549
|
return /* @__PURE__ */ l("div", { className: `pvx-dash-stats ${a}`, children: [
|
|
2364
2550
|
/* @__PURE__ */ n(
|
|
2365
|
-
|
|
2551
|
+
be,
|
|
2366
2552
|
{
|
|
2367
|
-
icon: /* @__PURE__ */ n(
|
|
2553
|
+
icon: /* @__PURE__ */ n(ot, {}),
|
|
2368
2554
|
value: e.lapCount.toLocaleString(),
|
|
2369
2555
|
label: "Total Laps",
|
|
2370
2556
|
items: i,
|
|
@@ -2373,9 +2559,9 @@ function Qn({ stats: e, gameRatings: r, onGameRatingSelect: t, rating: s, classN
|
|
|
2373
2559
|
}
|
|
2374
2560
|
),
|
|
2375
2561
|
/* @__PURE__ */ n(
|
|
2376
|
-
|
|
2562
|
+
be,
|
|
2377
2563
|
{
|
|
2378
|
-
icon: /* @__PURE__ */ n(
|
|
2564
|
+
icon: /* @__PURE__ */ n(lt, {}),
|
|
2379
2565
|
value: e.carBreakdown.length,
|
|
2380
2566
|
label: "Cars Used",
|
|
2381
2567
|
items: o,
|
|
@@ -2384,18 +2570,18 @@ function Qn({ stats: e, gameRatings: r, onGameRatingSelect: t, rating: s, classN
|
|
|
2384
2570
|
}
|
|
2385
2571
|
),
|
|
2386
2572
|
d ? /* @__PURE__ */ l("div", { className: "pvx-dash-stat-card pvx-dash-stat-card--rating-chips", children: [
|
|
2387
|
-
/* @__PURE__ */ n(
|
|
2573
|
+
/* @__PURE__ */ n(Ne, {}),
|
|
2388
2574
|
/* @__PURE__ */ l("div", { className: "pvx-dash-stat-content", children: [
|
|
2389
2575
|
/* @__PURE__ */ n("span", { className: "pvx-dash-stat-label", children: "Driver Rating" }),
|
|
2390
|
-
/* @__PURE__ */ n("div", { className: "pvx-dash-rating-chips", children:
|
|
2391
|
-
const c = !!
|
|
2576
|
+
/* @__PURE__ */ n("div", { className: "pvx-dash-rating-chips", children: t.map((p) => {
|
|
2577
|
+
const c = !!r;
|
|
2392
2578
|
return /* @__PURE__ */ l(
|
|
2393
2579
|
"span",
|
|
2394
2580
|
{
|
|
2395
2581
|
className: `pvx-dash-rating-chip${c ? " pvx-dash-rating-chip--clickable" : ""}`,
|
|
2396
|
-
onClick: c ? () =>
|
|
2397
|
-
onKeyDown: c ? (
|
|
2398
|
-
c && (
|
|
2582
|
+
onClick: c ? () => r(p) : void 0,
|
|
2583
|
+
onKeyDown: c ? (v) => {
|
|
2584
|
+
c && (v.key === "Enter" || v.key === " ") && (v.preventDefault(), r(p));
|
|
2399
2585
|
} : void 0,
|
|
2400
2586
|
role: c ? "button" : void 0,
|
|
2401
2587
|
tabIndex: c ? 0 : void 0,
|
|
@@ -2416,7 +2602,7 @@ function Qn({ stats: e, gameRatings: r, onGameRatingSelect: t, rating: s, classN
|
|
|
2416
2602
|
}) })
|
|
2417
2603
|
] })
|
|
2418
2604
|
] }) : s ? /* @__PURE__ */ l("div", { className: "pvx-dash-stat-card pvx-dash-stat-card--rating", children: [
|
|
2419
|
-
/* @__PURE__ */ n(
|
|
2605
|
+
/* @__PURE__ */ n(Ne, {}),
|
|
2420
2606
|
/* @__PURE__ */ l("div", { className: "pvx-dash-stat-content", children: [
|
|
2421
2607
|
/* @__PURE__ */ n("span", { className: "pvx-dash-stat-value", children: s.rating.toFixed(1) }),
|
|
2422
2608
|
/* @__PURE__ */ n("span", { className: "pvx-dash-stat-label", children: "Driver Rating" }),
|
|
@@ -2430,8 +2616,8 @@ function Qn({ stats: e, gameRatings: r, onGameRatingSelect: t, rating: s, classN
|
|
|
2430
2616
|
] }) : null
|
|
2431
2617
|
] });
|
|
2432
2618
|
}
|
|
2433
|
-
function
|
|
2434
|
-
return e != null && e.length ? /* @__PURE__ */ l("div", { className: `pvx-card ${
|
|
2619
|
+
function dt({ combos: e, onComboSelect: t, className: r = "" }) {
|
|
2620
|
+
return e != null && e.length ? /* @__PURE__ */ l("div", { className: `pvx-card ${r}`, children: [
|
|
2435
2621
|
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ l("h3", { className: "pvx-card-title", children: [
|
|
2436
2622
|
/* @__PURE__ */ n("span", { className: "pvx-dash-combos-icon", children: /* @__PURE__ */ l("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2437
2623
|
/* @__PURE__ */ n("circle", { cx: "12", cy: "12", r: "10" }),
|
|
@@ -2445,36 +2631,36 @@ function Gn({ combos: e, onComboSelect: r, className: t = "" }) {
|
|
|
2445
2631
|
] })
|
|
2446
2632
|
] }) }),
|
|
2447
2633
|
/* @__PURE__ */ n("div", { className: "pvx-dash-combos-list", children: e.map((s) => /* @__PURE__ */ n(
|
|
2448
|
-
|
|
2634
|
+
pt,
|
|
2449
2635
|
{
|
|
2450
2636
|
combo: s,
|
|
2451
|
-
onClick:
|
|
2637
|
+
onClick: t ? () => t(s) : null
|
|
2452
2638
|
},
|
|
2453
2639
|
`${s.trackId}|${s.trackLayout || ""}|${s.carId}|${s.game || ""}|${s.gameVersion || ""}`
|
|
2454
2640
|
)) })
|
|
2455
2641
|
] }) : null;
|
|
2456
2642
|
}
|
|
2457
|
-
function
|
|
2458
|
-
const
|
|
2643
|
+
function pt({ combo: e, onClick: t }) {
|
|
2644
|
+
const r = e.game || "evo", s = e.gapToLeaderMs && e.gapToLeaderMs > 0 ? (e.gapToLeaderMs / 1e3).toFixed(3) : null, a = e.rank === 1 && e.totalDrivers > 1;
|
|
2459
2645
|
return /* @__PURE__ */ l(
|
|
2460
2646
|
"div",
|
|
2461
2647
|
{
|
|
2462
|
-
className: `pvx-dash-combo-row${
|
|
2463
|
-
onClick:
|
|
2464
|
-
onKeyDown:
|
|
2465
|
-
|
|
2648
|
+
className: `pvx-dash-combo-row${t ? " pvx-dash-combo-row--clickable" : ""}`,
|
|
2649
|
+
onClick: t || void 0,
|
|
2650
|
+
onKeyDown: t ? (d) => {
|
|
2651
|
+
t && (d.key === "Enter" || d.key === " ") && (d.preventDefault(), t());
|
|
2466
2652
|
} : void 0,
|
|
2467
|
-
role:
|
|
2468
|
-
tabIndex:
|
|
2653
|
+
role: t ? "button" : void 0,
|
|
2654
|
+
tabIndex: t ? 0 : void 0,
|
|
2469
2655
|
children: [
|
|
2470
2656
|
/* @__PURE__ */ l("div", { className: "pvx-dash-combo-info", children: [
|
|
2471
2657
|
/* @__PURE__ */ l("div", { className: "pvx-dash-combo-title", children: [
|
|
2472
|
-
e.game && /* @__PURE__ */ n("span", { className: `pvx-dash-game-badge pvx-dash-game-badge--${
|
|
2473
|
-
/* @__PURE__ */ n("span", { className: "pvx-dash-combo-track", children:
|
|
2658
|
+
e.game && /* @__PURE__ */ n("span", { className: `pvx-dash-game-badge pvx-dash-game-badge--${r}`, children: r.toUpperCase() }),
|
|
2659
|
+
/* @__PURE__ */ n("span", { className: "pvx-dash-combo-track", children: V(e.trackId, e.trackLayout, e.game) })
|
|
2474
2660
|
] }),
|
|
2475
2661
|
/* @__PURE__ */ l("div", { className: "pvx-dash-combo-meta", children: [
|
|
2476
|
-
/* @__PURE__ */ n("span", { className: "pvx-dash-combo-car", children:
|
|
2477
|
-
e.lapCount > 0 && /* @__PURE__ */ l(
|
|
2662
|
+
/* @__PURE__ */ n("span", { className: "pvx-dash-combo-car", children: _(e.carId) }),
|
|
2663
|
+
e.lapCount > 0 && /* @__PURE__ */ l(B, { children: [
|
|
2478
2664
|
/* @__PURE__ */ n("span", { className: "pvx-dash-combo-meta-sep", children: "·" }),
|
|
2479
2665
|
/* @__PURE__ */ l("span", { children: [
|
|
2480
2666
|
e.lapCount,
|
|
@@ -2482,9 +2668,9 @@ function Yn({ combo: e, onClick: r }) {
|
|
|
2482
2668
|
e.lapCount === 1 ? "lap" : "laps"
|
|
2483
2669
|
] })
|
|
2484
2670
|
] }),
|
|
2485
|
-
e.lastDrivenAt && /* @__PURE__ */ l(
|
|
2671
|
+
e.lastDrivenAt && /* @__PURE__ */ l(B, { children: [
|
|
2486
2672
|
/* @__PURE__ */ n("span", { className: "pvx-dash-combo-meta-sep", children: "·" }),
|
|
2487
|
-
/* @__PURE__ */ n("span", { children:
|
|
2673
|
+
/* @__PURE__ */ n("span", { children: oe(e.lastDrivenAt) })
|
|
2488
2674
|
] })
|
|
2489
2675
|
] })
|
|
2490
2676
|
] }),
|
|
@@ -2520,15 +2706,15 @@ function Yn({ combo: e, onClick: r }) {
|
|
|
2520
2706
|
}
|
|
2521
2707
|
);
|
|
2522
2708
|
}
|
|
2523
|
-
function
|
|
2524
|
-
if (
|
|
2709
|
+
function ut({ events: e, isLoading: t, className: r, limit: s = 3 }) {
|
|
2710
|
+
if (t)
|
|
2525
2711
|
return /* @__PURE__ */ n("div", { className: "pvx-loading", children: "Loading upcoming events..." });
|
|
2526
2712
|
if (!(e != null && e.length))
|
|
2527
2713
|
return null;
|
|
2528
2714
|
const a = s ? e.slice(0, s) : e, i = e.length - a.length;
|
|
2529
|
-
return /* @__PURE__ */ l("div", { className: `pvx-card ${
|
|
2715
|
+
return /* @__PURE__ */ l("div", { className: `pvx-card ${r || ""}`, children: [
|
|
2530
2716
|
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ l("h3", { className: "pvx-card-title", children: [
|
|
2531
|
-
/* @__PURE__ */ n(
|
|
2717
|
+
/* @__PURE__ */ n(vt, {}),
|
|
2532
2718
|
"Upcoming Events",
|
|
2533
2719
|
/* @__PURE__ */ l("span", { className: "pvx-dash-records-count", children: [
|
|
2534
2720
|
"(",
|
|
@@ -2551,7 +2737,7 @@ function Jn({ events: e, isLoading: r, className: t, limit: s = 3 }) {
|
|
|
2551
2737
|
o.track
|
|
2552
2738
|
] }),
|
|
2553
2739
|
o.serverPassword && /* @__PURE__ */ n(
|
|
2554
|
-
|
|
2740
|
+
ht,
|
|
2555
2741
|
{
|
|
2556
2742
|
password: o.serverPassword,
|
|
2557
2743
|
address: o.serverAddress
|
|
@@ -2564,7 +2750,7 @@ function Jn({ events: e, isLoading: r, className: t, limit: s = 3 }) {
|
|
|
2564
2750
|
month: "short",
|
|
2565
2751
|
year: "numeric"
|
|
2566
2752
|
}) }),
|
|
2567
|
-
/* @__PURE__ */ n("span", { className: "pvx-upcoming-relative", children: o.dediStatus === "running" ? "Live now" : o.dediStatus === "provisioning" ? "Starting..." :
|
|
2753
|
+
/* @__PURE__ */ n("span", { className: "pvx-upcoming-relative", children: o.dediStatus === "running" ? "Live now" : o.dediStatus === "provisioning" ? "Starting..." : mt(o.startTime) }),
|
|
2568
2754
|
o.dediStatus === "running" && /* @__PURE__ */ n("span", { className: "pvx-upcoming-badge pvx-upcoming-badge--live", children: "Live" }),
|
|
2569
2755
|
!o.dediStatus && o.isNext && /* @__PURE__ */ n("span", { className: "pvx-upcoming-badge", children: "Next" })
|
|
2570
2756
|
] })
|
|
@@ -2581,8 +2767,8 @@ function Jn({ events: e, isLoading: r, className: t, limit: s = 3 }) {
|
|
|
2581
2767
|
] })
|
|
2582
2768
|
] });
|
|
2583
2769
|
}
|
|
2584
|
-
function
|
|
2585
|
-
const [
|
|
2770
|
+
function ht({ password: e, address: t }) {
|
|
2771
|
+
const [r, s] = E(!1), [a, i] = E(!1), o = t ? e ? `join:${t}|${e}` : `join:${t}` : null, d = K(async () => {
|
|
2586
2772
|
if (o)
|
|
2587
2773
|
try {
|
|
2588
2774
|
await navigator.clipboard.writeText(o), s(!0), setTimeout(() => s(!1), 2e3);
|
|
@@ -2597,100 +2783,100 @@ function Zn({ password: e, address: r }) {
|
|
|
2597
2783
|
onClick: d,
|
|
2598
2784
|
title: "Copy join string to clipboard",
|
|
2599
2785
|
children: [
|
|
2600
|
-
/* @__PURE__ */ n(
|
|
2786
|
+
/* @__PURE__ */ n(gt, {}),
|
|
2601
2787
|
" ",
|
|
2602
|
-
|
|
2788
|
+
r ? "Copied!" : "Join"
|
|
2603
2789
|
]
|
|
2604
2790
|
}
|
|
2605
2791
|
),
|
|
2606
|
-
e && /* @__PURE__ */ l(
|
|
2792
|
+
e && /* @__PURE__ */ l(B, { children: [
|
|
2607
2793
|
/* @__PURE__ */ n(
|
|
2608
2794
|
"span",
|
|
2609
2795
|
{
|
|
2610
2796
|
className: "pvx-server-detail pvx-server-detail--clickable",
|
|
2611
2797
|
onClick: () => i((p) => !p),
|
|
2612
2798
|
title: a ? "Hide password" : "Reveal password",
|
|
2613
|
-
children: a ? /* @__PURE__ */ n(
|
|
2799
|
+
children: a ? /* @__PURE__ */ n(Nt, {}) : /* @__PURE__ */ n(ft, {})
|
|
2614
2800
|
}
|
|
2615
2801
|
),
|
|
2616
2802
|
a && /* @__PURE__ */ l("span", { className: "pvx-server-detail", children: [
|
|
2617
|
-
/* @__PURE__ */ n(
|
|
2803
|
+
/* @__PURE__ */ n(xt, {}),
|
|
2618
2804
|
" ",
|
|
2619
2805
|
e
|
|
2620
2806
|
] })
|
|
2621
2807
|
] })
|
|
2622
2808
|
] });
|
|
2623
2809
|
}
|
|
2624
|
-
function
|
|
2625
|
-
const
|
|
2626
|
-
if (
|
|
2627
|
-
const
|
|
2628
|
-
if (
|
|
2629
|
-
if (
|
|
2630
|
-
const s = Math.floor(
|
|
2810
|
+
function mt(e) {
|
|
2811
|
+
const t = new Date(e).getTime() - Date.now();
|
|
2812
|
+
if (t <= 0) return "Now";
|
|
2813
|
+
const r = Math.floor(t / (1e3 * 60 * 60));
|
|
2814
|
+
if (r < 1) return "Less than 1 hour";
|
|
2815
|
+
if (r < 24) return `in ${r}h`;
|
|
2816
|
+
const s = Math.floor(r / 24);
|
|
2631
2817
|
if (s === 1) return "Tomorrow";
|
|
2632
2818
|
if (s < 7) return `in ${s} days`;
|
|
2633
2819
|
if (s < 30) {
|
|
2634
2820
|
const a = Math.floor(s / 7);
|
|
2635
2821
|
return `in ${a} week${a !== 1 ? "s" : ""}`;
|
|
2636
2822
|
}
|
|
2637
|
-
return
|
|
2823
|
+
return oe(e);
|
|
2638
2824
|
}
|
|
2639
|
-
function
|
|
2825
|
+
function vt() {
|
|
2640
2826
|
return /* @__PURE__ */ l("svg", { className: "pvx-dash-records-icon", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2641
2827
|
/* @__PURE__ */ n("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
|
|
2642
2828
|
/* @__PURE__ */ n("path", { d: "M16 2v4M8 2v4M3 10h18" })
|
|
2643
2829
|
] });
|
|
2644
2830
|
}
|
|
2645
|
-
function
|
|
2831
|
+
function xt() {
|
|
2646
2832
|
return /* @__PURE__ */ l("svg", { className: "pvx-server-icon", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2647
2833
|
/* @__PURE__ */ n("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2" }),
|
|
2648
2834
|
/* @__PURE__ */ n("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
|
|
2649
2835
|
] });
|
|
2650
2836
|
}
|
|
2651
|
-
function
|
|
2837
|
+
function gt() {
|
|
2652
2838
|
return /* @__PURE__ */ l("svg", { className: "pvx-server-icon pvx-server-icon--action", width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2653
2839
|
/* @__PURE__ */ n("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2" }),
|
|
2654
2840
|
/* @__PURE__ */ n("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
|
|
2655
2841
|
] });
|
|
2656
2842
|
}
|
|
2657
|
-
function
|
|
2843
|
+
function ft() {
|
|
2658
2844
|
return /* @__PURE__ */ l("svg", { className: "pvx-server-icon pvx-server-icon--action", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2659
2845
|
/* @__PURE__ */ n("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }),
|
|
2660
2846
|
/* @__PURE__ */ n("circle", { cx: "12", cy: "12", r: "3" })
|
|
2661
2847
|
] });
|
|
2662
2848
|
}
|
|
2663
|
-
function
|
|
2849
|
+
function Nt() {
|
|
2664
2850
|
return /* @__PURE__ */ l("svg", { className: "pvx-server-icon pvx-server-icon--action", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2665
2851
|
/* @__PURE__ */ n("path", { d: "M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24" }),
|
|
2666
2852
|
/* @__PURE__ */ n("line", { x1: "1", y1: "1", x2: "23", y2: "23" })
|
|
2667
2853
|
] });
|
|
2668
2854
|
}
|
|
2669
|
-
function
|
|
2670
|
-
const o =
|
|
2855
|
+
function bt({ notifications: e, unreadCount: t = 0, onMarkRead: r, onMarkAllRead: s, isLoading: a, className: i }) {
|
|
2856
|
+
const o = Ce();
|
|
2671
2857
|
return a ? /* @__PURE__ */ n("div", { className: "pvx-loading", children: "Loading notifications..." }) : /* @__PURE__ */ l("div", { className: `pvx-card ${i || ""}`, children: [
|
|
2672
2858
|
/* @__PURE__ */ l("div", { className: "pvx-card-header", children: [
|
|
2673
2859
|
/* @__PURE__ */ l("h3", { className: "pvx-card-title", children: [
|
|
2674
|
-
/* @__PURE__ */ n(
|
|
2860
|
+
/* @__PURE__ */ n(wt, {}),
|
|
2675
2861
|
"Notifications",
|
|
2676
|
-
|
|
2862
|
+
t > 0 && /* @__PURE__ */ n("span", { className: "pvx-notif-badge", children: t > 99 ? "99+" : t })
|
|
2677
2863
|
] }),
|
|
2678
|
-
|
|
2864
|
+
t > 0 && s && /* @__PURE__ */ n("button", { className: "pvx-notif-mark-all", onClick: s, children: "Mark all read" })
|
|
2679
2865
|
] }),
|
|
2680
2866
|
e != null && e.length ? /* @__PURE__ */ n("div", { className: "pvx-notif-list", children: e.map((d) => /* @__PURE__ */ n(
|
|
2681
|
-
|
|
2867
|
+
yt,
|
|
2682
2868
|
{
|
|
2683
2869
|
notification: d,
|
|
2684
2870
|
getUserDisplay: o,
|
|
2685
|
-
onMarkRead:
|
|
2871
|
+
onMarkRead: r
|
|
2686
2872
|
},
|
|
2687
2873
|
d.id
|
|
2688
2874
|
)) }) : /* @__PURE__ */ n("div", { className: "pvx-notif-empty", children: "No notifications" })
|
|
2689
2875
|
] });
|
|
2690
2876
|
}
|
|
2691
|
-
function
|
|
2877
|
+
function yt({ notification: e, getUserDisplay: t, onMarkRead: r }) {
|
|
2692
2878
|
const s = () => {
|
|
2693
|
-
!e.isRead &&
|
|
2879
|
+
!e.isRead && r && r(e.id);
|
|
2694
2880
|
};
|
|
2695
2881
|
return /* @__PURE__ */ l(
|
|
2696
2882
|
"button",
|
|
@@ -2698,17 +2884,17 @@ function it({ notification: e, getUserDisplay: r, onMarkRead: t }) {
|
|
|
2698
2884
|
className: `pvx-notif-item ${e.isRead ? "" : "pvx-notif-item--unread"}`,
|
|
2699
2885
|
onClick: s,
|
|
2700
2886
|
children: [
|
|
2701
|
-
/* @__PURE__ */ n(
|
|
2887
|
+
/* @__PURE__ */ n(kt, { type: e.type }),
|
|
2702
2888
|
/* @__PURE__ */ l("div", { className: "pvx-notif-content", children: [
|
|
2703
|
-
/* @__PURE__ */ n("span", { className: "pvx-notif-message", children:
|
|
2704
|
-
/* @__PURE__ */ n("span", { className: "pvx-notif-time", children:
|
|
2889
|
+
/* @__PURE__ */ n("span", { className: "pvx-notif-message", children: Ze(e, t) }),
|
|
2890
|
+
/* @__PURE__ */ n("span", { className: "pvx-notif-time", children: oe(e.createdAt) })
|
|
2705
2891
|
] }),
|
|
2706
2892
|
!e.isRead && /* @__PURE__ */ n("span", { className: "pvx-notif-dot" })
|
|
2707
2893
|
]
|
|
2708
2894
|
}
|
|
2709
2895
|
);
|
|
2710
2896
|
}
|
|
2711
|
-
function
|
|
2897
|
+
function kt({ type: e }) {
|
|
2712
2898
|
return e === "RECORD_BEATEN" ? /* @__PURE__ */ n("span", { className: "pvx-notif-icon pvx-notif-icon--beaten", children: /* @__PURE__ */ n("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ n("path", { d: "m7 7 10 10M17 7v10H7" }) }) }) : e === "ADMIN_MESSAGE" ? /* @__PURE__ */ n("span", { className: "pvx-notif-icon pvx-notif-icon--admin", children: /* @__PURE__ */ l("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2713
2899
|
/* @__PURE__ */ n("path", { d: "m3 11 18-5v12L3 13v-2z" }),
|
|
2714
2900
|
/* @__PURE__ */ n("path", { d: "M11.6 16.8a3 3 0 1 1-5.8-1.6" })
|
|
@@ -2721,61 +2907,61 @@ function ot({ type: e }) {
|
|
|
2721
2907
|
/* @__PURE__ */ n("path", { d: "M18 2H6v7a6 6 0 0 0 12 0V2Z" })
|
|
2722
2908
|
] }) });
|
|
2723
2909
|
}
|
|
2724
|
-
function
|
|
2910
|
+
function wt() {
|
|
2725
2911
|
return /* @__PURE__ */ l("svg", { className: "pvx-dash-records-icon", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2726
2912
|
/* @__PURE__ */ n("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }),
|
|
2727
2913
|
/* @__PURE__ */ n("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })
|
|
2728
2914
|
] });
|
|
2729
2915
|
}
|
|
2730
|
-
function
|
|
2916
|
+
function Gt({
|
|
2731
2917
|
steamId: e,
|
|
2732
|
-
avatarUrl:
|
|
2733
|
-
memberSince:
|
|
2918
|
+
avatarUrl: t,
|
|
2919
|
+
memberSince: r,
|
|
2734
2920
|
hideProfile: s = !1,
|
|
2735
2921
|
onComboSelect: a,
|
|
2736
2922
|
onGameRatingSelect: i,
|
|
2737
2923
|
className: o = ""
|
|
2738
2924
|
}) {
|
|
2739
|
-
const { data: d, isLoading: p, error: c } =
|
|
2925
|
+
const { data: d, isLoading: p, error: c } = Jn(e), { data: u } = et(e), { data: v } = Xn(e), { data: f, isLoading: h } = nt(), k = tt(), { data: m, isLoading: g } = rt({ limit: 10 }), b = st(), x = at();
|
|
2740
2926
|
return p ? /* @__PURE__ */ n("div", { className: "pvx-loading", children: "Loading dashboard..." }) : c ? /* @__PURE__ */ n("div", { className: "pvx-empty", children: "Failed to load dashboard data." }) : d ? /* @__PURE__ */ l("div", { className: `pvx-dash ${o}`, children: [
|
|
2741
2927
|
!s && /* @__PURE__ */ n(
|
|
2742
|
-
|
|
2928
|
+
it,
|
|
2743
2929
|
{
|
|
2744
2930
|
driverName: d.driverName,
|
|
2745
|
-
avatarUrl:
|
|
2746
|
-
memberSince:
|
|
2931
|
+
avatarUrl: t,
|
|
2932
|
+
memberSince: r
|
|
2747
2933
|
}
|
|
2748
2934
|
),
|
|
2749
2935
|
/* @__PURE__ */ n(
|
|
2750
|
-
|
|
2936
|
+
ct,
|
|
2751
2937
|
{
|
|
2752
2938
|
stats: d,
|
|
2753
|
-
gameRatings:
|
|
2939
|
+
gameRatings: u,
|
|
2754
2940
|
onGameRatingSelect: i
|
|
2755
2941
|
}
|
|
2756
2942
|
),
|
|
2757
|
-
e && /* @__PURE__ */ n(
|
|
2758
|
-
/* @__PURE__ */ l("div", { className: `pvx-dash-row ${
|
|
2759
|
-
/* @__PURE__ */ n(
|
|
2760
|
-
|
|
2761
|
-
|
|
2943
|
+
e && /* @__PURE__ */ n(ut, { events: f, isLoading: h }),
|
|
2944
|
+
/* @__PURE__ */ l("div", { className: `pvx-dash-row ${k ? "pvx-dash-row--2col" : ""}`, children: [
|
|
2945
|
+
/* @__PURE__ */ n(dt, { combos: v, onComboSelect: a }),
|
|
2946
|
+
k && /* @__PURE__ */ n(
|
|
2947
|
+
bt,
|
|
2762
2948
|
{
|
|
2763
|
-
notifications:
|
|
2764
|
-
unreadCount: (
|
|
2765
|
-
onMarkRead: (
|
|
2766
|
-
onMarkAllRead: () =>
|
|
2767
|
-
isLoading:
|
|
2949
|
+
notifications: m == null ? void 0 : m.notifications,
|
|
2950
|
+
unreadCount: (m == null ? void 0 : m.unreadCount) || 0,
|
|
2951
|
+
onMarkRead: (w) => b.mutate(w),
|
|
2952
|
+
onMarkAllRead: () => x.mutate(),
|
|
2953
|
+
isLoading: g
|
|
2768
2954
|
}
|
|
2769
2955
|
)
|
|
2770
2956
|
] })
|
|
2771
2957
|
] }) : /* @__PURE__ */ n("div", { className: "pvx-empty", children: "No data available yet. Start driving to see your stats!" });
|
|
2772
2958
|
}
|
|
2773
|
-
function
|
|
2774
|
-
const
|
|
2959
|
+
function zt({ records: e, className: t = "" }) {
|
|
2960
|
+
const r = T(() => e != null && e.length ? e.slice().sort((s, a) => {
|
|
2775
2961
|
const i = s.recordedAt ? new Date(s.recordedAt).getTime() : 0;
|
|
2776
2962
|
return (a.recordedAt ? new Date(a.recordedAt).getTime() : 0) - i;
|
|
2777
2963
|
}) : [], [e]);
|
|
2778
|
-
return
|
|
2964
|
+
return r.length ? /* @__PURE__ */ l("div", { className: `pvx-card ${t}`, children: [
|
|
2779
2965
|
/* @__PURE__ */ n("div", { className: "pvx-card-header", children: /* @__PURE__ */ l("h3", { className: "pvx-card-title", children: [
|
|
2780
2966
|
/* @__PURE__ */ n("span", { className: "pvx-dash-records-icon", children: /* @__PURE__ */ l("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2781
2967
|
/* @__PURE__ */ n("path", { d: "M6 9H4.5a2.5 2.5 0 010-5H6" }),
|
|
@@ -2788,14 +2974,14 @@ function Bt({ records: e, className: r = "" }) {
|
|
|
2788
2974
|
"Current Records",
|
|
2789
2975
|
/* @__PURE__ */ l("span", { className: "pvx-dash-records-count", children: [
|
|
2790
2976
|
"(",
|
|
2791
|
-
|
|
2977
|
+
r.length,
|
|
2792
2978
|
")"
|
|
2793
2979
|
] })
|
|
2794
2980
|
] }) }),
|
|
2795
|
-
/* @__PURE__ */ n("div", { className: "pvx-dash-records-list", children:
|
|
2981
|
+
/* @__PURE__ */ n("div", { className: "pvx-dash-records-list", children: r.map((s, a) => /* @__PURE__ */ l("div", { className: "pvx-dash-record-row", children: [
|
|
2796
2982
|
/* @__PURE__ */ l("div", { className: "pvx-dash-record-info", children: [
|
|
2797
|
-
/* @__PURE__ */ n("span", { className: "pvx-dash-record-track", children:
|
|
2798
|
-
/* @__PURE__ */ n("span", { className: "pvx-dash-record-car", children:
|
|
2983
|
+
/* @__PURE__ */ n("span", { className: "pvx-dash-record-track", children: V(s.trackId, s.layout, s.game) }),
|
|
2984
|
+
/* @__PURE__ */ n("span", { className: "pvx-dash-record-car", children: _(s.carId) })
|
|
2799
2985
|
] }),
|
|
2800
2986
|
/* @__PURE__ */ l("div", { className: "pvx-dash-record-time", children: [
|
|
2801
2987
|
/* @__PURE__ */ n("span", { className: "pvx-dash-record-lap", children: q(s.lapTimeMs) }),
|
|
@@ -2808,88 +2994,91 @@ function Bt({ records: e, className: r = "" }) {
|
|
|
2808
2994
|
] }) : null;
|
|
2809
2995
|
}
|
|
2810
2996
|
export {
|
|
2811
|
-
|
|
2997
|
+
Bt as CarsTable,
|
|
2812
2998
|
U as CompEmptyState,
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2999
|
+
W as CompLoadingState,
|
|
3000
|
+
En as CompetitionCard,
|
|
3001
|
+
Ft as CompetitionCards,
|
|
3002
|
+
Wt as CompetitionResultsTabs,
|
|
3003
|
+
wn as CompletedBadge,
|
|
3004
|
+
Be as DEFAULT_COMPLETION_GRACE_DAYS,
|
|
3005
|
+
Gt as DriverDashboard,
|
|
3006
|
+
it as DriverProfile,
|
|
3007
|
+
It as DriversTable,
|
|
3008
|
+
Ht as EntryList,
|
|
3009
|
+
re as InfoPill,
|
|
3010
|
+
Et as LapHistoryTable,
|
|
3011
|
+
bt as NotificationsCard,
|
|
3012
|
+
he as PODIUM_MEDALS,
|
|
3013
|
+
Rt as PitVoxPartnerProvider,
|
|
3014
|
+
Vn as RacePositionsChart,
|
|
3015
|
+
_t as RankingsTable,
|
|
3016
|
+
dt as RecentCombosCard,
|
|
3017
|
+
zt as RecordsTable,
|
|
3018
|
+
jt as RegisterButton,
|
|
3019
|
+
Vt as RegistrationPanel,
|
|
3020
|
+
qt as RoundResults,
|
|
3021
|
+
ve as RoundSessionResults,
|
|
3022
|
+
Fn as StandingsTable,
|
|
3023
|
+
ct as StatsCards,
|
|
3024
|
+
Pt as TracksTable,
|
|
3025
|
+
gn as TypeBadge,
|
|
3026
|
+
ut as UpcomingEvents,
|
|
3027
|
+
In as WeatherIcon,
|
|
3028
|
+
ye as buildDriverIndexPath,
|
|
3029
|
+
Qe as buildLapsPath,
|
|
3030
|
+
ie as buildLeaderboardPath,
|
|
3031
|
+
Ye as buildRecentLapsPath,
|
|
3032
|
+
D as fetchCdnJson,
|
|
3033
|
+
Ut as filterCompetitionsByStatus,
|
|
3034
|
+
_ as formatCarName,
|
|
3035
|
+
G as formatDate,
|
|
3036
|
+
Tt as formatDelta,
|
|
3037
|
+
we as formatFuel,
|
|
2851
3038
|
q as formatLapTime,
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
nn as
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
3039
|
+
Ze as formatNotificationMessage,
|
|
3040
|
+
oe as formatRelativeTime,
|
|
3041
|
+
F as formatSectorTime,
|
|
3042
|
+
ee as formatSessionLabel,
|
|
3043
|
+
V as formatTrackName,
|
|
3044
|
+
ke as formatTyreCompound,
|
|
3045
|
+
kn as getCompetitionPodium,
|
|
3046
|
+
Ie as getCompetitionStatus,
|
|
3047
|
+
yn as getCompletionDate,
|
|
3048
|
+
bn as isCompetitionComplete,
|
|
3049
|
+
j as isRoundClosed,
|
|
3050
|
+
Dt as useCarLeaderboard,
|
|
3051
|
+
$t as useCarMetadata,
|
|
3052
|
+
tn as useCompetitionAllRounds,
|
|
3053
|
+
Se as useCompetitionConfig,
|
|
3054
|
+
Re as useCompetitionEntryList,
|
|
3055
|
+
rn as useCompetitionLeaderboard,
|
|
3056
|
+
nn as useCompetitionRound,
|
|
3057
|
+
an as useCompetitionRoundLaps,
|
|
3058
|
+
sn as useCompetitionRoundLeaderboard,
|
|
3059
|
+
on as useCompetitionRoundPositions,
|
|
3060
|
+
Le as useCompetitionStandings,
|
|
3061
|
+
At as useCompetitions,
|
|
3062
|
+
Xn as useDriverCombos,
|
|
3063
|
+
en as useDriverLaps,
|
|
3064
|
+
Kt as useDriverRating,
|
|
3065
|
+
se as useDriverRatings,
|
|
3066
|
+
et as useDriverRatingsByGame,
|
|
3067
|
+
Jn as useDriverStats,
|
|
3068
|
+
Je as useLeaderboardIndex,
|
|
3069
|
+
at as useMarkAllNotificationsRead,
|
|
3070
|
+
st as useMarkNotificationRead,
|
|
3071
|
+
rt as useNotifications,
|
|
3072
|
+
tt as useNotificationsEnabled,
|
|
2884
3073
|
L as usePitVox,
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
3074
|
+
Mt as useRecentLaps,
|
|
3075
|
+
Te as useRegister,
|
|
3076
|
+
ce as useRegistrationMode,
|
|
3077
|
+
le as useRegistrationStatus,
|
|
3078
|
+
de as useRegistrationUrl,
|
|
3079
|
+
Xe as useTrackLeaderboard,
|
|
3080
|
+
Ot as useUnreadCount,
|
|
3081
|
+
nt as useUpcomingEvents,
|
|
3082
|
+
Ce as useUserLookup,
|
|
2894
3083
|
$e as useWithdraw
|
|
2895
3084
|
};
|