@pitvox/partner-react 0.5.7 → 0.5.9
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/README.md +24 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +692 -602
- package/dist/styles.css +42 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,45 +1,47 @@
|
|
|
1
|
-
import { jsx as e, jsxs as l, Fragment as
|
|
2
|
-
import { createContext as
|
|
3
|
-
import { useQueryClient as U, QueryClient as
|
|
4
|
-
const Y =
|
|
5
|
-
let
|
|
6
|
-
function
|
|
1
|
+
import { jsx as e, jsxs as l, Fragment as A } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as ke, useMemo as w, useContext as we, useState as M, useCallback as K, useRef as Ce, useEffect as Le } from "react";
|
|
3
|
+
import { useQueryClient as U, QueryClient as Re, QueryClientProvider as Te, useQuery as L, useMutation as H, useQueries as ne } from "@tanstack/react-query";
|
|
4
|
+
const Y = ke(null), Se = "https://cdn.pitvox.com", $e = "https://pitvox.com";
|
|
5
|
+
let z = null;
|
|
6
|
+
function Br({
|
|
7
7
|
partnerSlug: r,
|
|
8
8
|
cdnUrl: n = Se,
|
|
9
9
|
pitvoxUrl: s = $e,
|
|
10
10
|
getSteamId: t,
|
|
11
|
-
onRegister:
|
|
12
|
-
onWithdraw:
|
|
11
|
+
onRegister: i,
|
|
12
|
+
onWithdraw: a,
|
|
13
13
|
onFetchNotifications: o,
|
|
14
14
|
onMarkNotificationRead: d,
|
|
15
15
|
onMarkAllNotificationsRead: m,
|
|
16
|
-
|
|
16
|
+
onFetchServerPassword: c,
|
|
17
|
+
children: v
|
|
17
18
|
}) {
|
|
18
|
-
const
|
|
19
|
+
const f = w(() => ({
|
|
19
20
|
partnerSlug: r,
|
|
20
21
|
cdnUrl: n.replace(/\/$/, ""),
|
|
21
22
|
pitvoxUrl: s.replace(/\/$/, ""),
|
|
22
23
|
getSteamId: t || (() => null),
|
|
23
|
-
onRegister:
|
|
24
|
-
onWithdraw:
|
|
24
|
+
onRegister: i || null,
|
|
25
|
+
onWithdraw: a || null,
|
|
25
26
|
onFetchNotifications: o || null,
|
|
26
27
|
onMarkNotificationRead: d || null,
|
|
27
|
-
onMarkAllNotificationsRead: m || null
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
onMarkAllNotificationsRead: m || null,
|
|
29
|
+
onFetchServerPassword: c || null
|
|
30
|
+
}), [r, n, s, t, i, a, o, d, m, c]);
|
|
31
|
+
let g = !1;
|
|
30
32
|
try {
|
|
31
|
-
U(),
|
|
33
|
+
U(), g = !0;
|
|
32
34
|
} catch {
|
|
33
|
-
|
|
35
|
+
g = !1;
|
|
34
36
|
}
|
|
35
|
-
return
|
|
37
|
+
return g ? /* @__PURE__ */ e(Y.Provider, { value: f, children: v }) : (z || (z = new Re({
|
|
36
38
|
defaultOptions: {
|
|
37
39
|
queries: { staleTime: 6e4 }
|
|
38
40
|
}
|
|
39
|
-
})), /* @__PURE__ */ e(
|
|
41
|
+
})), /* @__PURE__ */ e(Te, { client: z, children: /* @__PURE__ */ e(Y.Provider, { value: f, children: v }) }));
|
|
40
42
|
}
|
|
41
43
|
function k() {
|
|
42
|
-
const r =
|
|
44
|
+
const r = we(Y);
|
|
43
45
|
if (!r)
|
|
44
46
|
throw new Error("usePitVox must be used within a <PitVoxPartnerProvider>");
|
|
45
47
|
return r;
|
|
@@ -52,26 +54,26 @@ async function T(r, n) {
|
|
|
52
54
|
}
|
|
53
55
|
return s.json();
|
|
54
56
|
}
|
|
55
|
-
function
|
|
57
|
+
function B(r) {
|
|
56
58
|
if (!r && r !== 0) return "-";
|
|
57
|
-
const n = Math.floor(r / 1e3), s = Math.floor(n / 60), t = n % 60,
|
|
58
|
-
return `${s}:${String(t).padStart(2, "0")}.${String(
|
|
59
|
+
const n = Math.floor(r / 1e3), s = Math.floor(n / 60), t = n % 60, i = r % 1e3;
|
|
60
|
+
return `${s}:${String(t).padStart(2, "0")}.${String(i).padStart(3, "0")}`;
|
|
59
61
|
}
|
|
60
62
|
function D(r) {
|
|
61
63
|
return !r && r !== 0 ? "-" : (r / 1e3).toFixed(3);
|
|
62
64
|
}
|
|
63
|
-
function
|
|
65
|
+
function I(r) {
|
|
64
66
|
if (!r) return "";
|
|
65
67
|
let n = r;
|
|
66
68
|
return n.startsWith("ks_") && (n = n.slice(3)), n.split("_").map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(" ");
|
|
67
69
|
}
|
|
68
|
-
function
|
|
69
|
-
const t = r.split("_").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" "),
|
|
70
|
-
if (!n || n === "default" ||
|
|
71
|
-
const
|
|
72
|
-
return `${t} ${
|
|
70
|
+
function E(r, n, s) {
|
|
71
|
+
const t = r.split("_").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" "), i = s === "acc" || !s && (n == null ? void 0 : n.toLowerCase()) === "track config";
|
|
72
|
+
if (!n || n === "default" || i) return t;
|
|
73
|
+
const a = n.split("_").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" ");
|
|
74
|
+
return `${t} ${a}`;
|
|
73
75
|
}
|
|
74
|
-
function
|
|
76
|
+
function F(r) {
|
|
75
77
|
if (!r) return "-";
|
|
76
78
|
try {
|
|
77
79
|
return new Date(r).toLocaleDateString("en-GB", {
|
|
@@ -83,25 +85,25 @@ function E(r) {
|
|
|
83
85
|
return "-";
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
|
-
function
|
|
88
|
+
function ae(r) {
|
|
87
89
|
if (!r) return "";
|
|
88
90
|
const n = Date.now() - new Date(r).getTime(), s = Math.floor(n / 1e3);
|
|
89
91
|
if (s < 60) return "Just now";
|
|
90
92
|
const t = Math.floor(s / 60);
|
|
91
93
|
if (t < 60) return `${t}m ago`;
|
|
92
|
-
const
|
|
93
|
-
if (
|
|
94
|
-
const
|
|
95
|
-
return
|
|
94
|
+
const i = Math.floor(t / 60);
|
|
95
|
+
if (i < 24) return `${i}h ago`;
|
|
96
|
+
const a = Math.floor(i / 24);
|
|
97
|
+
return a < 30 ? `${a}d ago` : F(r);
|
|
96
98
|
}
|
|
97
|
-
function
|
|
99
|
+
function Pr(r) {
|
|
98
100
|
return r == null ? "" : `${r >= 0 ? "+" : "-"}${(Math.abs(r) / 1e3).toFixed(3)}`;
|
|
99
101
|
}
|
|
100
102
|
function Me(r, n) {
|
|
101
|
-
const { type: s, title: t, trackId:
|
|
103
|
+
const { type: s, title: t, trackId: i, trackLayout: a, carId: o, game: d, data: m } = r, c = typeof m == "string" ? JSON.parse(m) : m, v = i ? E(i, a, d) : null, f = o ? I(o) : null, g = [v, f].filter(Boolean).join(" — ");
|
|
102
104
|
return s === "RECORD_BEATEN" && g ? `${c != null && c.beatenBySteamId && n ? n(c.beatenBySteamId).displayName : "Someone"} beat your record on ${g}` : s === "RECORD_SET" && g ? `You set a new record on ${g}` : t || "New notification";
|
|
103
105
|
}
|
|
104
|
-
function
|
|
106
|
+
function ie(r) {
|
|
105
107
|
return r ? {
|
|
106
108
|
E: "Eco",
|
|
107
109
|
RD: "Road",
|
|
@@ -115,112 +117,112 @@ function ae(r) {
|
|
|
115
117
|
S: "Soft"
|
|
116
118
|
}[r] || r : "Unknown";
|
|
117
119
|
}
|
|
118
|
-
function
|
|
119
|
-
var d, m, c,
|
|
120
|
-
const { cdnUrl: n, partnerSlug: s } = k(), { game: t, gameVersion:
|
|
120
|
+
function Ar(r = {}) {
|
|
121
|
+
var d, m, c, v, f, g;
|
|
122
|
+
const { cdnUrl: n, partnerSlug: s } = k(), { game: t, gameVersion: i } = r, a = L({
|
|
121
123
|
queryKey: ["pitvox", "leaderboards", s, "index"],
|
|
122
124
|
queryFn: () => T(n, `leaderboards/partners/${s}/index.json`),
|
|
123
125
|
staleTime: 3e4,
|
|
124
126
|
refetchInterval: 3e4
|
|
125
127
|
}), o = w(() => {
|
|
126
128
|
var b;
|
|
127
|
-
if (!((b =
|
|
128
|
-
let
|
|
129
|
-
return t && (
|
|
129
|
+
if (!((b = a.data) != null && b.tracks)) return [];
|
|
130
|
+
let p = a.data.tracks;
|
|
131
|
+
return t && (p = p.filter((u) => u.game === t)), i && (p = p.filter((u) => u.gameVersion === i)), p.map((u) => ({
|
|
130
132
|
id: u.trackId,
|
|
131
133
|
layout: u.layout,
|
|
132
134
|
game: u.game,
|
|
133
135
|
gameVersion: u.gameVersion,
|
|
134
|
-
displayName:
|
|
136
|
+
displayName: E(u.trackId, u.layout, u.game),
|
|
135
137
|
driverCount: u.driverCount || 0,
|
|
136
138
|
carCount: u.carCount || 0,
|
|
137
139
|
record: u.recordHolder ? {
|
|
138
140
|
visibleId: u.recordHolder.steamId || u.recordHolder.userId,
|
|
139
141
|
carId: u.recordHolder.carId,
|
|
140
|
-
carDisplayName:
|
|
142
|
+
carDisplayName: I(u.recordHolder.carId),
|
|
141
143
|
lapTimeMs: u.recordHolder.lapTimeMs,
|
|
142
144
|
timestamp: u.recordHolder.recordedAt
|
|
143
145
|
} : null,
|
|
144
146
|
recordByTag: u.recordByTag || null
|
|
145
147
|
}));
|
|
146
|
-
}, [(d =
|
|
148
|
+
}, [(d = a.data) == null ? void 0 : d.tracks, t, i]);
|
|
147
149
|
return {
|
|
148
|
-
...
|
|
150
|
+
...a,
|
|
149
151
|
data: o,
|
|
150
|
-
partner: ((m =
|
|
151
|
-
generatedAt: (c =
|
|
152
|
-
totalLaps: ((
|
|
153
|
-
totalUsers: ((
|
|
154
|
-
versions: ((g =
|
|
152
|
+
partner: ((m = a.data) == null ? void 0 : m.partner) || null,
|
|
153
|
+
generatedAt: (c = a.data) == null ? void 0 : c.generatedAt,
|
|
154
|
+
totalLaps: ((v = a.data) == null ? void 0 : v.totalLaps) || 0,
|
|
155
|
+
totalUsers: ((f = a.data) == null ? void 0 : f.totalUsers) || 0,
|
|
156
|
+
versions: ((g = a.data) == null ? void 0 : g.versions) || {}
|
|
155
157
|
};
|
|
156
158
|
}
|
|
157
|
-
function
|
|
158
|
-
const { cdnUrl: t, partnerSlug:
|
|
159
|
-
queryKey: ["pitvox", "leaderboards",
|
|
159
|
+
function Ie(r, n, s = {}) {
|
|
160
|
+
const { cdnUrl: t, partnerSlug: i } = k(), { carId: a, game: o, gameVersion: d } = s, m = n || "default", c = d ? `leaderboards/partners/${i}/v/${d}/tracks/${r}/${m}.json` : `leaderboards/partners/${i}/tracks/${r}/${m}.json`, { data: v, isLoading: f, error: g } = L({
|
|
161
|
+
queryKey: ["pitvox", "leaderboards", i, "track", r, m, d],
|
|
160
162
|
queryFn: () => T(t, c),
|
|
161
163
|
enabled: !!r,
|
|
162
164
|
staleTime: 3e4,
|
|
163
165
|
refetchInterval: 3e4
|
|
164
166
|
});
|
|
165
167
|
return { data: w(() => {
|
|
166
|
-
if (!(
|
|
167
|
-
let b =
|
|
168
|
-
if (o && (b = b.filter((u) => u.game === o)), !
|
|
168
|
+
if (!(v != null && v.entries)) return [];
|
|
169
|
+
let b = v.entries;
|
|
170
|
+
if (o && (b = b.filter((u) => u.game === o)), !a) {
|
|
169
171
|
const u = /* @__PURE__ */ new Map(), N = /* @__PURE__ */ new Map();
|
|
170
|
-
for (const
|
|
171
|
-
const
|
|
172
|
-
N.has(
|
|
172
|
+
for (const h of b) {
|
|
173
|
+
const x = h.steamId || h.userId;
|
|
174
|
+
N.has(h.carId) || N.set(h.carId, /* @__PURE__ */ new Set()), N.get(h.carId).add(x), (!u.has(h.carId) || h.lapTimeMs < u.get(h.carId).lapTimeMs) && u.set(h.carId, h);
|
|
173
175
|
}
|
|
174
|
-
return Array.from(u.values()).map((
|
|
175
|
-
var
|
|
176
|
-
return { ...
|
|
177
|
-
}).sort((
|
|
176
|
+
return Array.from(u.values()).map((h) => {
|
|
177
|
+
var x;
|
|
178
|
+
return { ...h, driverCount: ((x = N.get(h.carId)) == null ? void 0 : x.size) || 0 };
|
|
179
|
+
}).sort((h, x) => h.lapTimeMs - x.lapTimeMs);
|
|
178
180
|
}
|
|
179
|
-
return b.filter((u) => u.carId ===
|
|
180
|
-
}, [
|
|
181
|
+
return b.filter((u) => u.carId === a).sort((u, N) => u.lapTimeMs - N.lapTimeMs);
|
|
182
|
+
}, [v == null ? void 0 : v.entries, a, o]), isLoading: f, error: g };
|
|
181
183
|
}
|
|
182
|
-
function
|
|
183
|
-
var g,
|
|
184
|
-
const { cdnUrl:
|
|
184
|
+
function De(r, n, s, t, i = {}) {
|
|
185
|
+
var g, p;
|
|
186
|
+
const { cdnUrl: a, partnerSlug: o } = k(), { showInvalid: d = !1, game: m, gameVersion: c } = i, v = L({
|
|
185
187
|
queryKey: ["pitvox", "laps", o, r],
|
|
186
|
-
queryFn: () => T(
|
|
188
|
+
queryFn: () => T(a, `laps/partners/${o}/${r}.json`),
|
|
187
189
|
enabled: !!r,
|
|
188
190
|
staleTime: 3e4,
|
|
189
191
|
refetchInterval: 3e4
|
|
190
|
-
}),
|
|
192
|
+
}), f = w(() => {
|
|
191
193
|
var b;
|
|
192
|
-
return (b =
|
|
194
|
+
return (b = v.data) != null && b.laps ? v.data.laps.filter((u) => {
|
|
193
195
|
if (u.trackId !== n) return !1;
|
|
194
196
|
if (s) {
|
|
195
197
|
if (u.trackLayout !== s) return !1;
|
|
196
198
|
} else if (u.trackLayout && u.trackLayout !== "default") return !1;
|
|
197
199
|
return !(u.carId !== t || m && u.game !== m || c && u.gameVersion !== c || !d && !u.isValid);
|
|
198
200
|
}).sort((u, N) => u.lapTimeMs - N.lapTimeMs) : [];
|
|
199
|
-
}, [(g =
|
|
201
|
+
}, [(g = v.data) == null ? void 0 : g.laps, n, s, t, m, c, d]);
|
|
200
202
|
return {
|
|
201
|
-
...
|
|
202
|
-
data:
|
|
203
|
-
driverName: ((
|
|
203
|
+
...v,
|
|
204
|
+
data: f,
|
|
205
|
+
driverName: ((p = v.data) == null ? void 0 : p.driverName) || "Driver"
|
|
204
206
|
};
|
|
205
207
|
}
|
|
206
|
-
function
|
|
207
|
-
const { cdnUrl: r } = k(), { data: n } =
|
|
208
|
+
function oe() {
|
|
209
|
+
const { cdnUrl: r } = k(), { data: n } = L({
|
|
208
210
|
queryKey: ["pitvox", "users", "index"],
|
|
209
211
|
queryFn: () => T(r, "users/index.json"),
|
|
210
212
|
staleTime: 5 * 6e4,
|
|
211
213
|
gcTime: 30 * 6e4
|
|
212
214
|
}), s = (n == null ? void 0 : n.users) || {};
|
|
213
|
-
return (t,
|
|
214
|
-
const
|
|
215
|
+
return (t, i) => {
|
|
216
|
+
const a = s[t];
|
|
215
217
|
return {
|
|
216
|
-
displayName: (
|
|
217
|
-
avatarUrl: (
|
|
218
|
-
affiliations: (
|
|
218
|
+
displayName: (a == null ? void 0 : a.displayName) || i || t || "Unknown",
|
|
219
|
+
avatarUrl: (a == null ? void 0 : a.avatarUrl) || null,
|
|
220
|
+
affiliations: (a == null ? void 0 : a.affiliations) || []
|
|
219
221
|
};
|
|
220
222
|
};
|
|
221
223
|
}
|
|
222
|
-
function
|
|
223
|
-
const { cdnUrl: r } = k(), { data: n } =
|
|
224
|
+
function Ur() {
|
|
225
|
+
const { cdnUrl: r } = k(), { data: n } = L({
|
|
224
226
|
queryKey: ["pitvox", "cars", "index"],
|
|
225
227
|
queryFn: () => T(r, "cars/index.json"),
|
|
226
228
|
staleTime: 5 * 6e4,
|
|
@@ -231,12 +233,12 @@ function Dr() {
|
|
|
231
233
|
cars: (n == null ? void 0 : n.cars) || {}
|
|
232
234
|
};
|
|
233
235
|
}
|
|
234
|
-
function
|
|
235
|
-
return
|
|
236
|
+
function Er(r, n) {
|
|
237
|
+
return Ie(r, null, { carId: n });
|
|
236
238
|
}
|
|
237
|
-
function
|
|
239
|
+
function Fr() {
|
|
238
240
|
const { cdnUrl: r, partnerSlug: n } = k();
|
|
239
|
-
return
|
|
241
|
+
return L({
|
|
240
242
|
queryKey: ["pitvox", "competitions", n],
|
|
241
243
|
queryFn: async () => {
|
|
242
244
|
const s = await T(r, "competitions/index.json");
|
|
@@ -247,7 +249,7 @@ function Br() {
|
|
|
247
249
|
}
|
|
248
250
|
function Be(r) {
|
|
249
251
|
const { cdnUrl: n, partnerSlug: s } = k();
|
|
250
|
-
return
|
|
252
|
+
return L({
|
|
251
253
|
queryKey: ["pitvox", "competition", s, r, "config"],
|
|
252
254
|
queryFn: () => T(n, `competitions/${s}/${r}/config.json`),
|
|
253
255
|
enabled: !!r,
|
|
@@ -256,62 +258,62 @@ function Be(r) {
|
|
|
256
258
|
}
|
|
257
259
|
function Pe(r) {
|
|
258
260
|
const { cdnUrl: n, partnerSlug: s } = k();
|
|
259
|
-
return
|
|
261
|
+
return L({
|
|
260
262
|
queryKey: ["pitvox", "competition", s, r, "standings"],
|
|
261
263
|
queryFn: () => T(n, `competitions/${s}/${r}/standings.json`),
|
|
262
264
|
enabled: !!r,
|
|
263
265
|
staleTime: 6e4
|
|
264
266
|
});
|
|
265
267
|
}
|
|
266
|
-
function
|
|
268
|
+
function Ae(r, n) {
|
|
267
269
|
const { cdnUrl: s, partnerSlug: t } = k();
|
|
268
|
-
return
|
|
270
|
+
return L({
|
|
269
271
|
queryKey: ["pitvox", "competition", t, r, "round", n],
|
|
270
272
|
queryFn: () => T(s, `competitions/${t}/${r}/rounds/${n}.json`),
|
|
271
273
|
enabled: !!r && n != null,
|
|
272
274
|
staleTime: 6e4
|
|
273
275
|
});
|
|
274
276
|
}
|
|
275
|
-
function
|
|
277
|
+
function _r(r, n = []) {
|
|
276
278
|
const { cdnUrl: s, partnerSlug: t } = k();
|
|
277
|
-
return
|
|
279
|
+
return L({
|
|
278
280
|
queryKey: ["pitvox", "competition", t, r, "allRounds", n],
|
|
279
281
|
queryFn: async () => (await Promise.all(
|
|
280
282
|
n.map(
|
|
281
|
-
(
|
|
283
|
+
(a) => T(s, `competitions/${t}/${r}/rounds/${a}.json`).catch(() => null)
|
|
282
284
|
)
|
|
283
285
|
)).filter(Boolean),
|
|
284
286
|
enabled: !!r && n.length > 0,
|
|
285
287
|
staleTime: 6e4
|
|
286
288
|
});
|
|
287
289
|
}
|
|
288
|
-
function
|
|
290
|
+
function ce(r) {
|
|
289
291
|
const { cdnUrl: n, partnerSlug: s } = k();
|
|
290
|
-
return
|
|
292
|
+
return L({
|
|
291
293
|
queryKey: ["pitvox", "competition", s, r, "entrylist"],
|
|
292
294
|
queryFn: () => T(n, `competitions/${s}/${r}/entrylist.json`),
|
|
293
295
|
enabled: !!r,
|
|
294
296
|
staleTime: 6e4
|
|
295
297
|
});
|
|
296
298
|
}
|
|
297
|
-
function
|
|
298
|
-
const { cdnUrl: n, partnerSlug: s, getSteamId: t } = k(),
|
|
299
|
-
return
|
|
300
|
-
queryKey: ["pitvox", "registration", s, r,
|
|
299
|
+
function J(r) {
|
|
300
|
+
const { cdnUrl: n, partnerSlug: s, getSteamId: t } = k(), i = t();
|
|
301
|
+
return L({
|
|
302
|
+
queryKey: ["pitvox", "registration", s, r, i],
|
|
301
303
|
queryFn: async () => {
|
|
302
304
|
var m;
|
|
303
|
-
const
|
|
304
|
-
if (!
|
|
305
|
-
const o = await
|
|
306
|
-
return { isRegistered: !!
|
|
305
|
+
const a = await fetch(`${n}/competitions/${s}/${r}/entrylist.json`);
|
|
306
|
+
if (!a.ok) return { isRegistered: !1, entryList: null };
|
|
307
|
+
const o = await a.json();
|
|
308
|
+
return { isRegistered: !!i && ((m = o.drivers) == null ? void 0 : m.some((c) => c.steamId === i)), entryList: o };
|
|
307
309
|
},
|
|
308
310
|
enabled: !!r,
|
|
309
311
|
staleTime: 6e4
|
|
310
312
|
});
|
|
311
313
|
}
|
|
312
|
-
function
|
|
313
|
-
const { onRegister: n, partnerSlug: s, getSteamId: t } = k(),
|
|
314
|
-
return
|
|
314
|
+
function le(r) {
|
|
315
|
+
const { onRegister: n, partnerSlug: s, getSteamId: t } = k(), i = U(), a = oe();
|
|
316
|
+
return H({
|
|
315
317
|
mutationFn: (o) => {
|
|
316
318
|
if (!n)
|
|
317
319
|
throw new Error(
|
|
@@ -321,51 +323,51 @@ function ce(r) {
|
|
|
321
323
|
},
|
|
322
324
|
onSuccess: () => {
|
|
323
325
|
const o = t();
|
|
324
|
-
if (
|
|
326
|
+
if (i.setQueriesData(
|
|
325
327
|
{ queryKey: ["pitvox", "registration", s, r] },
|
|
326
328
|
(d) => d ? { ...d, isRegistered: !0 } : { isRegistered: !0, entryList: null }
|
|
327
329
|
), o) {
|
|
328
|
-
const d =
|
|
330
|
+
const d = a(o), m = {
|
|
329
331
|
steamId: o,
|
|
330
332
|
displayName: d.displayName,
|
|
331
333
|
avatarUrl: d.avatarUrl
|
|
332
334
|
};
|
|
333
|
-
|
|
335
|
+
i.setQueriesData(
|
|
334
336
|
{ queryKey: ["pitvox", "competition", s, r, "entrylist"] },
|
|
335
337
|
(c) => {
|
|
336
|
-
var
|
|
337
|
-
return c ? ((
|
|
338
|
+
var f;
|
|
339
|
+
return c ? ((f = c.drivers) == null ? void 0 : f.some((g) => g.steamId === o)) ? c : { ...c, drivers: [...c.drivers || [], m] } : { drivers: [m] };
|
|
338
340
|
}
|
|
339
341
|
);
|
|
340
342
|
}
|
|
341
343
|
}
|
|
342
344
|
});
|
|
343
345
|
}
|
|
344
|
-
function
|
|
345
|
-
const { onWithdraw: n, partnerSlug: s, getSteamId: t } = k(),
|
|
346
|
-
return
|
|
347
|
-
mutationFn: (
|
|
346
|
+
function de(r) {
|
|
347
|
+
const { onWithdraw: n, partnerSlug: s, getSteamId: t } = k(), i = U();
|
|
348
|
+
return H({
|
|
349
|
+
mutationFn: (a) => {
|
|
348
350
|
if (!n)
|
|
349
351
|
throw new Error(
|
|
350
352
|
"No onWithdraw callback provided to PitVoxPartnerProvider. Provide onWithdraw for in-app withdrawal, or use useRegistrationUrl() to link to pitvox.com."
|
|
351
353
|
);
|
|
352
|
-
const o =
|
|
354
|
+
const o = a || t();
|
|
353
355
|
if (!o) throw new Error("No Steam ID available");
|
|
354
356
|
return n(r, o);
|
|
355
357
|
},
|
|
356
358
|
onSuccess: () => {
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
+
const a = t();
|
|
360
|
+
i.setQueriesData(
|
|
359
361
|
{ queryKey: ["pitvox", "registration", s, r] },
|
|
360
362
|
(o) => o ? { ...o, isRegistered: !1 } : { isRegistered: !1, entryList: null }
|
|
361
|
-
),
|
|
363
|
+
), a && i.setQueriesData(
|
|
362
364
|
{ queryKey: ["pitvox", "competition", s, r, "entrylist"] },
|
|
363
|
-
(o) => o != null && o.drivers ? { ...o, drivers: o.drivers.filter((d) => d.steamId !==
|
|
365
|
+
(o) => o != null && o.drivers ? { ...o, drivers: o.drivers.filter((d) => d.steamId !== a) } : o
|
|
364
366
|
);
|
|
365
367
|
}
|
|
366
368
|
});
|
|
367
369
|
}
|
|
368
|
-
function
|
|
370
|
+
function Z() {
|
|
369
371
|
const { onRegister: r, onWithdraw: n } = k(), s = !!(r && n);
|
|
370
372
|
return { isPowerMode: s, isBasicMode: !s };
|
|
371
373
|
}
|
|
@@ -373,7 +375,7 @@ function X(r) {
|
|
|
373
375
|
const { pitvoxUrl: n, partnerSlug: s } = k();
|
|
374
376
|
return `${n}/p/${s}/competitions/${r}/register`;
|
|
375
377
|
}
|
|
376
|
-
const
|
|
378
|
+
const Ue = {
|
|
377
379
|
formula: "Formula",
|
|
378
380
|
gt3: "GT3",
|
|
379
381
|
gt2: "GT2",
|
|
@@ -393,55 +395,55 @@ const Ae = {
|
|
|
393
395
|
"2000s": "2000s",
|
|
394
396
|
"2010s": "2010s",
|
|
395
397
|
"2020s": "2020s"
|
|
396
|
-
},
|
|
398
|
+
}, pe = [
|
|
397
399
|
{ id: "class", tags: ["formula", "gt3", "gt2", "gt4", "cup", "prototype", "rally"] },
|
|
398
400
|
{ id: "tier", tags: ["hypercar", "supercar", "sports_car", "hot_hatch", "lightweight"] },
|
|
399
401
|
{ id: "era", tags: ["1960s", "1970s", "1980s", "1990s", "2000s", "2010s", "2020s"] }
|
|
400
402
|
];
|
|
401
403
|
function Ee(r) {
|
|
402
|
-
for (const n of
|
|
404
|
+
for (const n of pe)
|
|
403
405
|
if (n.tags.includes(r)) return n.id;
|
|
404
406
|
return "other";
|
|
405
407
|
}
|
|
406
|
-
function
|
|
408
|
+
function ue(r, n) {
|
|
407
409
|
if (n.size === 0) return !0;
|
|
408
410
|
const s = {};
|
|
409
411
|
for (const t of n) {
|
|
410
|
-
const
|
|
411
|
-
s[
|
|
412
|
+
const i = Ee(t);
|
|
413
|
+
s[i] || (s[i] = []), s[i].push(t);
|
|
412
414
|
}
|
|
413
415
|
for (const t of Object.values(s))
|
|
414
|
-
if (!t.some((
|
|
416
|
+
if (!t.some((i) => r.includes(i))) return !1;
|
|
415
417
|
return !0;
|
|
416
418
|
}
|
|
417
|
-
function
|
|
418
|
-
const [s, t] = M(/* @__PURE__ */ new Set()),
|
|
419
|
-
const c = new Set(
|
|
420
|
-
c.has(m) ? c.delete(m) : c.add(m),
|
|
421
|
-
}, [
|
|
422
|
-
|
|
423
|
-
}, [
|
|
424
|
-
return { activeTags:
|
|
425
|
-
}
|
|
426
|
-
function
|
|
427
|
-
const [n, s] = M(r), t =
|
|
419
|
+
function me(r, n) {
|
|
420
|
+
const [s, t] = M(/* @__PURE__ */ new Set()), i = r !== void 0, a = i ? r : s, o = K((m) => {
|
|
421
|
+
const c = new Set(a);
|
|
422
|
+
c.has(m) ? c.delete(m) : c.add(m), i && n ? n(c) : t(c);
|
|
423
|
+
}, [a, i, n]), d = K(() => {
|
|
424
|
+
i && n ? n(/* @__PURE__ */ new Set()) : t(/* @__PURE__ */ new Set());
|
|
425
|
+
}, [i, n]);
|
|
426
|
+
return { activeTags: a, toggle: o, clear: d };
|
|
427
|
+
}
|
|
428
|
+
function W(r) {
|
|
429
|
+
const [n, s] = M(r), t = K((i) => {
|
|
428
430
|
s(
|
|
429
|
-
(
|
|
431
|
+
(a) => a.key === i ? { key: i, dir: a.dir === "asc" ? "desc" : "asc" } : { key: i, dir: i.includes("timestamp") || i.includes("Date") ? "desc" : "asc" }
|
|
430
432
|
);
|
|
431
433
|
}, []);
|
|
432
434
|
return [n, t];
|
|
433
435
|
}
|
|
434
436
|
function O(r, n, s) {
|
|
435
|
-
return [...r].sort((t,
|
|
436
|
-
const
|
|
437
|
-
if (
|
|
438
|
-
if (
|
|
437
|
+
return [...r].sort((t, i) => {
|
|
438
|
+
const a = s(t, n.key), o = s(i, n.key);
|
|
439
|
+
if (a == null && o == null) return 0;
|
|
440
|
+
if (a == null) return 1;
|
|
439
441
|
if (o == null) return -1;
|
|
440
|
-
const d = typeof
|
|
442
|
+
const d = typeof a == "string" ? a.localeCompare(o) : a - o;
|
|
441
443
|
return n.dir === "desc" ? -d : d;
|
|
442
444
|
});
|
|
443
445
|
}
|
|
444
|
-
function
|
|
446
|
+
function ve(r, n = !1) {
|
|
445
447
|
const s = n ? r == null ? void 0 : r.filter((t) => t.isValid) : r;
|
|
446
448
|
return s != null && s.length ? {
|
|
447
449
|
s1: Math.min(...s.map((t) => t.sector1Ms).filter(Boolean)),
|
|
@@ -452,11 +454,11 @@ function me(r, n = !1) {
|
|
|
452
454
|
function Fe({ active: r, dir: n }) {
|
|
453
455
|
return r ? n === "asc" ? /* @__PURE__ */ e("svg", { className: "pvx-sort-icon", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 15.75l7.5-7.5 7.5 7.5" }) }) : /* @__PURE__ */ e("svg", { className: "pvx-sort-icon", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" }) }) : /* @__PURE__ */ e("svg", { className: "pvx-sort-icon pvx-sort-icon--inactive", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 9l4-4 4 4M16 15l-4 4-4-4" }) });
|
|
454
456
|
}
|
|
455
|
-
function R({ label: r, sortKey: n, config: s, onSort: t, className:
|
|
457
|
+
function R({ label: r, sortKey: n, config: s, onSort: t, className: i = "" }) {
|
|
456
458
|
return /* @__PURE__ */ e(
|
|
457
459
|
"th",
|
|
458
460
|
{
|
|
459
|
-
className: `pvx-th pvx-th--sortable ${
|
|
461
|
+
className: `pvx-th pvx-th--sortable ${i}`,
|
|
460
462
|
onClick: () => t(n),
|
|
461
463
|
children: /* @__PURE__ */ l("span", { className: "pvx-th-inner", children: [
|
|
462
464
|
r,
|
|
@@ -465,7 +467,7 @@ function R({ label: r, sortKey: n, config: s, onSort: t, className: a = "" }) {
|
|
|
465
467
|
}
|
|
466
468
|
);
|
|
467
469
|
}
|
|
468
|
-
function
|
|
470
|
+
function G({ userId: r, getUserDisplay: n }) {
|
|
469
471
|
const { displayName: s, avatarUrl: t } = n(r);
|
|
470
472
|
return /* @__PURE__ */ l("span", { className: "pvx-driver", children: [
|
|
471
473
|
t ? /* @__PURE__ */ e("img", { src: t, alt: "", className: "pvx-driver-avatar" }) : /* @__PURE__ */ e("span", { className: "pvx-driver-avatar pvx-driver-avatar--placeholder" }),
|
|
@@ -475,9 +477,9 @@ function W({ userId: r, getUserDisplay: n }) {
|
|
|
475
477
|
function ee({ rank: r, podium: n = !1 }) {
|
|
476
478
|
return /* @__PURE__ */ e("span", { className: n ? r === 1 ? "pvx-rank pvx-rank--gold" : r === 2 ? "pvx-rank pvx-rank--silver" : r === 3 ? "pvx-rank pvx-rank--bronze" : "pvx-rank" : "pvx-rank", children: r });
|
|
477
479
|
}
|
|
478
|
-
function
|
|
480
|
+
function he({ availableTags: r, activeTags: n, onToggle: s, onClear: t }) {
|
|
479
481
|
if (!r || r.length < 2) return null;
|
|
480
|
-
const
|
|
482
|
+
const i = pe.map((a) => ({ id: a.id, tags: a.tags.filter((o) => r.includes(o)) })).filter((a) => a.tags.length > 0);
|
|
481
483
|
return /* @__PURE__ */ l("div", { className: "pvx-tag-bar", children: [
|
|
482
484
|
/* @__PURE__ */ e(
|
|
483
485
|
"button",
|
|
@@ -487,18 +489,18 @@ function ve({ availableTags: r, activeTags: n, onToggle: s, onClear: t }) {
|
|
|
487
489
|
children: "All"
|
|
488
490
|
}
|
|
489
491
|
),
|
|
490
|
-
|
|
492
|
+
i.map((a, o) => /* @__PURE__ */ l("span", { className: "contents", children: [
|
|
491
493
|
o > 0 && /* @__PURE__ */ e("span", { className: "pvx-tag-separator" }),
|
|
492
|
-
|
|
494
|
+
a.tags.map((d) => /* @__PURE__ */ e(
|
|
493
495
|
"button",
|
|
494
496
|
{
|
|
495
497
|
onClick: () => s(d),
|
|
496
498
|
className: `pvx-tag ${n.has(d) ? "pvx-tag--active" : ""}`,
|
|
497
|
-
children:
|
|
499
|
+
children: Ue[d] || d
|
|
498
500
|
},
|
|
499
501
|
d
|
|
500
502
|
))
|
|
501
|
-
] },
|
|
503
|
+
] }, a.id))
|
|
502
504
|
] });
|
|
503
505
|
}
|
|
504
506
|
function re({ segments: r }) {
|
|
@@ -510,13 +512,13 @@ function re({ segments: r }) {
|
|
|
510
512
|
] }, n.key);
|
|
511
513
|
}) }) });
|
|
512
514
|
}
|
|
513
|
-
function
|
|
515
|
+
function _({ message: r }) {
|
|
514
516
|
return /* @__PURE__ */ l("div", { className: "pvx-empty", children: [
|
|
515
517
|
/* @__PURE__ */ e("svg", { className: "pvx-empty-icon", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, stroke: "currentColor", children: /* @__PURE__ */ e("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" }) }),
|
|
516
518
|
/* @__PURE__ */ e("p", { children: r })
|
|
517
519
|
] });
|
|
518
520
|
}
|
|
519
|
-
function
|
|
521
|
+
function q() {
|
|
520
522
|
return /* @__PURE__ */ e("div", { className: "pvx-loading", children: "Loading..." });
|
|
521
523
|
}
|
|
522
524
|
function _e() {
|
|
@@ -525,54 +527,54 @@ function _e() {
|
|
|
525
527
|
function qe() {
|
|
526
528
|
return /* @__PURE__ */ e("svg", { className: "pvx-icon pvx-icon--invalid", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) });
|
|
527
529
|
}
|
|
528
|
-
function
|
|
529
|
-
const [d, m] =
|
|
530
|
+
function qr({ tracks: r, isLoading: n, carMetadata: s, getUserDisplay: t, onTrackSelect: i, tags: a, onTagChange: o }) {
|
|
531
|
+
const [d, m] = W({ key: "record.timestamp", dir: "desc" }), { activeTags: c, toggle: v, clear: f } = me(a, o), g = w(() => {
|
|
530
532
|
var N;
|
|
531
533
|
if (!((N = s == null ? void 0 : s.tags) != null && N.length)) return [];
|
|
532
534
|
const u = /* @__PURE__ */ new Set();
|
|
533
|
-
for (const
|
|
534
|
-
|
|
535
|
-
return s.tags.filter((
|
|
536
|
-
}, [r, s]),
|
|
537
|
-
var
|
|
535
|
+
for (const h of r || [])
|
|
536
|
+
h.recordByTag && Object.keys(h.recordByTag).forEach((x) => u.add(x));
|
|
537
|
+
return s.tags.filter((h) => u.has(h));
|
|
538
|
+
}, [r, s]), p = w(() => r ? c.size === 0 ? r : r.map((u) => {
|
|
539
|
+
var x, y;
|
|
538
540
|
if (!u.recordByTag) return null;
|
|
539
541
|
let N = null;
|
|
540
|
-
const
|
|
541
|
-
for (const
|
|
542
|
-
if (
|
|
543
|
-
|
|
544
|
-
const $ = ((y = (
|
|
545
|
-
|
|
542
|
+
const h = /* @__PURE__ */ new Set();
|
|
543
|
+
for (const C of Object.values(u.recordByTag)) {
|
|
544
|
+
if (h.has(C.carId)) continue;
|
|
545
|
+
h.add(C.carId);
|
|
546
|
+
const $ = ((y = (x = s == null ? void 0 : s.cars) == null ? void 0 : x[C.carId]) == null ? void 0 : y.tags) || ["sports_car"];
|
|
547
|
+
ue($, c) && (!N || C.lapTimeMs < N.lapTimeMs) && (N = C);
|
|
546
548
|
}
|
|
547
549
|
return N ? {
|
|
548
550
|
...u,
|
|
549
551
|
record: {
|
|
550
552
|
visibleId: N.steamId || N.identifier,
|
|
551
553
|
carId: N.carId,
|
|
552
|
-
carDisplayName:
|
|
554
|
+
carDisplayName: I(N.carId),
|
|
553
555
|
lapTimeMs: N.lapTimeMs,
|
|
554
556
|
timestamp: N.recordedAt
|
|
555
557
|
}
|
|
556
558
|
} : null;
|
|
557
|
-
}).filter(Boolean) : [], [r, c, s]), b = w(() => O(
|
|
558
|
-
var
|
|
559
|
+
}).filter(Boolean) : [], [r, c, s]), b = w(() => O(p, d, (u, N) => {
|
|
560
|
+
var h, x;
|
|
559
561
|
switch (N) {
|
|
560
562
|
case "displayName":
|
|
561
563
|
return u.displayName;
|
|
562
564
|
case "record.lapTimeMs":
|
|
563
|
-
return (
|
|
565
|
+
return (h = u.record) == null ? void 0 : h.lapTimeMs;
|
|
564
566
|
case "driverCount":
|
|
565
567
|
return u.driverCount || 0;
|
|
566
568
|
case "carCount":
|
|
567
569
|
return u.carCount || 0;
|
|
568
570
|
case "record.timestamp":
|
|
569
571
|
default:
|
|
570
|
-
return (
|
|
572
|
+
return (x = u.record) != null && x.timestamp ? new Date(u.record.timestamp).getTime() : 0;
|
|
571
573
|
}
|
|
572
|
-
}), [
|
|
573
|
-
return n ? /* @__PURE__ */ e(
|
|
574
|
+
}), [p, d]);
|
|
575
|
+
return n ? /* @__PURE__ */ e(q, {}) : r != null && r.length ? /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
574
576
|
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e("h2", { className: "pvx-card-title", children: "Track Records" }) }),
|
|
575
|
-
/* @__PURE__ */ e(
|
|
577
|
+
/* @__PURE__ */ e(he, { availableTags: g, activeTags: c, onToggle: v, onClear: f }),
|
|
576
578
|
/* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
577
579
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
578
580
|
/* @__PURE__ */ e(R, { label: "Track", sortKey: "displayName", config: d, onSort: m }),
|
|
@@ -584,102 +586,102 @@ function Ur({ tracks: r, isLoading: n, carMetadata: s, getUserDisplay: t, onTrac
|
|
|
584
586
|
/* @__PURE__ */ e(R, { label: "Date", sortKey: "record.timestamp", config: d, onSort: m, className: "pvx-hidden-below-xl" })
|
|
585
587
|
] }) }),
|
|
586
588
|
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: b.map((u) => {
|
|
587
|
-
var N,
|
|
589
|
+
var N, h, x;
|
|
588
590
|
return /* @__PURE__ */ l(
|
|
589
591
|
"tr",
|
|
590
592
|
{
|
|
591
593
|
className: "pvx-row pvx-row--clickable",
|
|
592
|
-
onClick: () =>
|
|
594
|
+
onClick: () => i(u.id, u.layout),
|
|
593
595
|
children: [
|
|
594
596
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: u.displayName }),
|
|
595
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: (N = u.record) != null && N.visibleId ? /* @__PURE__ */ e(
|
|
596
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-lg", children: ((
|
|
597
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: u.record ?
|
|
597
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: (N = u.record) != null && N.visibleId ? /* @__PURE__ */ e(G, { userId: u.record.visibleId, getUserDisplay: t }) : "-" }),
|
|
598
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-lg", children: ((h = u.record) == null ? void 0 : h.carDisplayName) || "-" }),
|
|
599
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: u.record ? B(u.record.lapTimeMs) : "-" }),
|
|
598
600
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children: u.driverCount || "-" }),
|
|
599
601
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: u.carCount || "-" }),
|
|
600
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: (
|
|
602
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: (x = u.record) != null && x.timestamp ? F(u.record.timestamp) : "-" })
|
|
601
603
|
]
|
|
602
604
|
},
|
|
603
605
|
`${u.id}|${u.layout || ""}`
|
|
604
606
|
);
|
|
605
607
|
}) })
|
|
606
608
|
] }) })
|
|
607
|
-
] }) : /* @__PURE__ */ e(
|
|
609
|
+
] }) : /* @__PURE__ */ e(_, { message: "No lap times recorded yet." });
|
|
608
610
|
}
|
|
609
|
-
function
|
|
610
|
-
const [c,
|
|
611
|
-
var y,
|
|
611
|
+
function jr({ entries: r, isLoading: n, track: s, carMetadata: t, getUserDisplay: i, onCarSelect: a, onNavigate: o, tags: d, onTagChange: m }) {
|
|
612
|
+
const [c, v] = W({ key: "lapTimeMs", dir: "asc" }), { activeTags: f, toggle: g, clear: p } = me(d, m), b = w(() => {
|
|
613
|
+
var y, C, $;
|
|
612
614
|
if (!r || !((y = t == null ? void 0 : t.tags) != null && y.length)) return [];
|
|
613
|
-
const
|
|
614
|
-
for (const
|
|
615
|
-
((($ = (
|
|
616
|
-
return t.tags.filter((
|
|
617
|
-
}, [r, t]), u = w(() => r ?
|
|
618
|
-
var
|
|
619
|
-
const y = (($ = (
|
|
620
|
-
return
|
|
621
|
-
}) : [], [r,
|
|
615
|
+
const x = /* @__PURE__ */ new Set();
|
|
616
|
+
for (const S of r)
|
|
617
|
+
((($ = (C = t.cars) == null ? void 0 : C[S.carId]) == null ? void 0 : $.tags) || ["sports_car"]).forEach((ye) => x.add(ye));
|
|
618
|
+
return t.tags.filter((S) => x.has(S));
|
|
619
|
+
}, [r, t]), u = w(() => r ? f.size === 0 ? r : r.filter((x) => {
|
|
620
|
+
var C, $;
|
|
621
|
+
const y = (($ = (C = t == null ? void 0 : t.cars) == null ? void 0 : C[x.carId]) == null ? void 0 : $.tags) || ["sports_car"];
|
|
622
|
+
return ue(y, f);
|
|
623
|
+
}) : [], [r, f, t]), N = w(() => O(u, c, (x, y) => {
|
|
622
624
|
switch (y) {
|
|
623
625
|
case "carId":
|
|
624
|
-
return
|
|
626
|
+
return I(x.carId);
|
|
625
627
|
case "driverCount":
|
|
626
|
-
return
|
|
628
|
+
return x.driverCount || 0;
|
|
627
629
|
case "lapTimeMs":
|
|
628
630
|
default:
|
|
629
|
-
return
|
|
631
|
+
return x.lapTimeMs;
|
|
630
632
|
}
|
|
631
|
-
}), [u, c]),
|
|
633
|
+
}), [u, c]), h = [
|
|
632
634
|
{ key: "tracks", label: "Tracks", onClick: () => o("tracks") },
|
|
633
635
|
{ key: "track", label: s.displayName }
|
|
634
636
|
];
|
|
635
|
-
return n ? /* @__PURE__ */ e(
|
|
636
|
-
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e(re, { segments:
|
|
637
|
-
/* @__PURE__ */ e(
|
|
637
|
+
return n ? /* @__PURE__ */ e(q, {}) : /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
638
|
+
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e(re, { segments: h }) }),
|
|
639
|
+
/* @__PURE__ */ e(he, { availableTags: b, activeTags: f, onToggle: g, onClear: p }),
|
|
638
640
|
r != null && r.length ? /* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
639
641
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
640
642
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-th--narrow", children: "#" }),
|
|
641
|
-
/* @__PURE__ */ e(R, { label: "Car", sortKey: "carId", config: c, onSort:
|
|
643
|
+
/* @__PURE__ */ e(R, { label: "Car", sortKey: "carId", config: c, onSort: v }),
|
|
642
644
|
/* @__PURE__ */ e("th", { className: "pvx-th", children: "Record Holder" }),
|
|
643
|
-
/* @__PURE__ */ e(R, { label: "Lap Time", sortKey: "lapTimeMs", config: c, onSort:
|
|
644
|
-
/* @__PURE__ */ e(R, { label: "Drivers", sortKey: "driverCount", config: c, onSort:
|
|
645
|
+
/* @__PURE__ */ e(R, { label: "Lap Time", sortKey: "lapTimeMs", config: c, onSort: v }),
|
|
646
|
+
/* @__PURE__ */ e(R, { label: "Drivers", sortKey: "driverCount", config: c, onSort: v, className: "pvx-hidden-below-md" }),
|
|
645
647
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-lg", children: "Date" })
|
|
646
648
|
] }) }),
|
|
647
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: N.map((
|
|
649
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: N.map((x, y) => /* @__PURE__ */ l(
|
|
648
650
|
"tr",
|
|
649
651
|
{
|
|
650
652
|
className: "pvx-row pvx-row--clickable",
|
|
651
|
-
onClick: () =>
|
|
653
|
+
onClick: () => a(x.carId),
|
|
652
654
|
children: [
|
|
653
655
|
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(ee, { rank: y + 1, podium: !0 }) }),
|
|
654
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children:
|
|
655
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(
|
|
656
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
657
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children:
|
|
658
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-lg", children:
|
|
656
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: I(x.carId) }),
|
|
657
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(G, { userId: x.steamId || x.userId, getUserDisplay: i }) }),
|
|
658
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: B(x.lapTimeMs) }),
|
|
659
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children: x.driverCount || "-" }),
|
|
660
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-lg", children: x.recordedAt ? F(x.recordedAt) : "-" })
|
|
659
661
|
]
|
|
660
662
|
},
|
|
661
|
-
|
|
663
|
+
x.carId
|
|
662
664
|
)) })
|
|
663
|
-
] }) }) : /* @__PURE__ */ e(
|
|
665
|
+
] }) }) : /* @__PURE__ */ e(_, { message: "No lap times for this track yet." })
|
|
664
666
|
] });
|
|
665
667
|
}
|
|
666
|
-
function
|
|
667
|
-
const [m, c] =
|
|
668
|
+
function Vr({ entries: r, isLoading: n, track: s, carId: t, getUserDisplay: i, onDriverSelect: a, onNavigate: o, highlightId: d }) {
|
|
669
|
+
const [m, c] = W({ key: "lapTimeMs", dir: "asc" }), v = w(() => ve(r), [r]), f = w(() => O(r || [], m, (p, b) => {
|
|
668
670
|
switch (b) {
|
|
669
671
|
case "userId":
|
|
670
|
-
return
|
|
672
|
+
return i(p.steamId || p.userId).displayName;
|
|
671
673
|
case "lapCount":
|
|
672
|
-
return
|
|
674
|
+
return p.lapCount || 0;
|
|
673
675
|
case "lapTimeMs":
|
|
674
676
|
default:
|
|
675
|
-
return
|
|
677
|
+
return p.lapTimeMs;
|
|
676
678
|
}
|
|
677
|
-
}), [r, m,
|
|
679
|
+
}), [r, m, i]), g = [
|
|
678
680
|
{ key: "tracks", label: "Tracks", onClick: () => o("tracks") },
|
|
679
681
|
{ key: "track", label: s.displayName, onClick: () => o("track") },
|
|
680
|
-
{ key: "car", label:
|
|
682
|
+
{ key: "car", label: I(t) }
|
|
681
683
|
];
|
|
682
|
-
return n ? /* @__PURE__ */ e(
|
|
684
|
+
return n ? /* @__PURE__ */ e(q, {}) : /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
683
685
|
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e(re, { segments: g }) }),
|
|
684
686
|
r != null && r.length ? /* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
685
687
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
@@ -694,54 +696,54 @@ function Er({ entries: r, isLoading: n, track: s, carId: t, getUserDisplay: a, o
|
|
|
694
696
|
/* @__PURE__ */ e(R, { label: "Laps", sortKey: "lapCount", config: m, onSort: c, className: "pvx-hidden-below-lg" }),
|
|
695
697
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-xl", children: "Date" })
|
|
696
698
|
] }) }),
|
|
697
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children:
|
|
698
|
-
const u = b + 1, N =
|
|
699
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: f.map((p, b) => {
|
|
700
|
+
const u = b + 1, N = p.steamId || p.userId, h = v && p.sector1Ms === v.s1, x = v && p.sector2Ms === v.s2, y = v && p.sector3Ms === v.s3;
|
|
699
701
|
return /* @__PURE__ */ l(
|
|
700
702
|
"tr",
|
|
701
703
|
{
|
|
702
704
|
className: `pvx-row pvx-row--clickable ${d && N === d ? "pvx-row--highlight" : u <= 3 ? "pvx-row--podium" : ""}`,
|
|
703
|
-
onClick: () =>
|
|
705
|
+
onClick: () => a(N),
|
|
704
706
|
children: [
|
|
705
707
|
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(ee, { rank: u, podium: !0 }) }),
|
|
706
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ e(
|
|
707
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
708
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
709
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
710
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${y ? "pvx-td--best-sector" : ""}`, children: D(
|
|
711
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title:
|
|
712
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-xl", children:
|
|
713
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children:
|
|
714
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children:
|
|
708
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ e(G, { userId: N, getUserDisplay: i }) }),
|
|
709
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: B(p.lapTimeMs) }),
|
|
710
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${h ? "pvx-td--best-sector" : ""}`, children: D(p.sector1Ms) }),
|
|
711
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${x ? "pvx-td--best-sector" : ""}`, children: D(p.sector2Ms) }),
|
|
712
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${y ? "pvx-td--best-sector" : ""}`, children: D(p.sector3Ms) }),
|
|
713
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title: ie(p.tyreCompound), children: p.tyreCompound || "-" }),
|
|
714
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-xl", children: p.startingFuelL ? `${p.startingFuelL}L` : "-" }),
|
|
715
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: p.lapCount || "-" }),
|
|
716
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: p.recordedAt ? F(p.recordedAt) : "-" })
|
|
715
717
|
]
|
|
716
718
|
},
|
|
717
719
|
N
|
|
718
720
|
);
|
|
719
721
|
}) })
|
|
720
|
-
] }) }) : /* @__PURE__ */ e(
|
|
722
|
+
] }) }) : /* @__PURE__ */ e(_, { message: "No lap times for this car yet." })
|
|
721
723
|
] });
|
|
722
724
|
}
|
|
723
|
-
function
|
|
724
|
-
const { data: c, driverName:
|
|
725
|
-
const
|
|
726
|
-
return
|
|
725
|
+
function Kr({ userId: r, track: n, carId: s, game: t, gameVersion: i, showInvalid: a, getUserDisplay: o, onToggleInvalid: d, onNavigate: m }) {
|
|
726
|
+
const { data: c, driverName: v, isLoading: f } = De(r, n.id, n.layout, s, { showInvalid: a, game: t, gameVersion: i }), { displayName: g, avatarUrl: p } = o(r, v), b = w(() => ve(c, !0), [c]), u = w(() => {
|
|
727
|
+
const h = (c == null ? void 0 : c.filter((x) => x.isValid)) || [];
|
|
728
|
+
return h.length ? Math.min(...h.map((x) => x.lapTimeMs)) : null;
|
|
727
729
|
}, [c]), N = [
|
|
728
730
|
{ key: "tracks", label: "Tracks", onClick: () => m("tracks") },
|
|
729
731
|
{ key: "track", label: n.displayName, onClick: () => m("track") },
|
|
730
|
-
{ key: "car", label:
|
|
732
|
+
{ key: "car", label: I(s), onClick: () => m("car") },
|
|
731
733
|
{ key: "driver", label: g }
|
|
732
734
|
];
|
|
733
|
-
return
|
|
735
|
+
return f ? /* @__PURE__ */ e(q, {}) : /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
734
736
|
/* @__PURE__ */ l("div", { className: "pvx-card-header pvx-card-header--split", children: [
|
|
735
737
|
/* @__PURE__ */ l("div", { className: "pvx-card-header-left", children: [
|
|
736
738
|
/* @__PURE__ */ e(re, { segments: N }),
|
|
737
|
-
|
|
739
|
+
p ? /* @__PURE__ */ e("img", { src: p, alt: "", className: "pvx-driver-avatar pvx-driver-avatar--lg" }) : /* @__PURE__ */ e("span", { className: "pvx-driver-avatar pvx-driver-avatar--lg pvx-driver-avatar--placeholder" })
|
|
738
740
|
] }),
|
|
739
741
|
/* @__PURE__ */ l("label", { className: "pvx-checkbox-label", children: [
|
|
740
742
|
/* @__PURE__ */ e(
|
|
741
743
|
"input",
|
|
742
744
|
{
|
|
743
745
|
type: "checkbox",
|
|
744
|
-
checked:
|
|
746
|
+
checked: a,
|
|
745
747
|
onChange: d,
|
|
746
748
|
className: "pvx-checkbox"
|
|
747
749
|
}
|
|
@@ -762,28 +764,28 @@ function Fr({ userId: r, track: n, carId: s, game: t, gameVersion: a, showInvali
|
|
|
762
764
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-lg", children: "Fuel" }),
|
|
763
765
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-xl", children: "Date" })
|
|
764
766
|
] }) }),
|
|
765
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: c.map((
|
|
766
|
-
const y =
|
|
767
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: c.map((h, x) => {
|
|
768
|
+
const y = h.isValid && h.lapTimeMs === u, C = b && h.isValid && h.sector1Ms === b.s1, $ = b && h.isValid && h.sector2Ms === b.s2, S = b && h.isValid && h.sector3Ms === b.s3;
|
|
767
769
|
let V = "pvx-row";
|
|
768
|
-
return
|
|
769
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e("span", { className: `pvx-rank ${y ? "pvx-rank--gold" : ""}`, children:
|
|
770
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-md", children:
|
|
771
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
772
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
773
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${$ ? "pvx-td--best-sector" : ""}`, children: D(
|
|
774
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
775
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", title:
|
|
776
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title:
|
|
777
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children:
|
|
778
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children:
|
|
779
|
-
] },
|
|
770
|
+
return h.isValid || (V += " pvx-row--invalid"), y && (V += " pvx-row--personal-best"), /* @__PURE__ */ l("tr", { className: V, children: [
|
|
771
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e("span", { className: `pvx-rank ${y ? "pvx-rank--gold" : ""}`, children: x + 1 }) }),
|
|
772
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-md", children: h.lapNumber || "-" }),
|
|
773
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: B(h.lapTimeMs) }),
|
|
774
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${C ? "pvx-td--best-sector" : ""}`, children: D(h.sector1Ms) }),
|
|
775
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${$ ? "pvx-td--best-sector" : ""}`, children: D(h.sector2Ms) }),
|
|
776
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${S ? "pvx-td--best-sector" : ""}`, children: D(h.sector3Ms) }),
|
|
777
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", title: h.isValid ? void 0 : h.invalidReason || "Invalid", children: h.isValid ? /* @__PURE__ */ e(_e, {}) : /* @__PURE__ */ e(qe, {}) }),
|
|
778
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title: ie(h.tyreCompound), children: h.tyreCompound || "-" }),
|
|
779
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: h.startingFuelL ? `${h.startingFuelL}L` : "-" }),
|
|
780
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: F(h.timestamp) })
|
|
781
|
+
] }, h.id);
|
|
780
782
|
}) })
|
|
781
|
-
] }) }) : /* @__PURE__ */ e(
|
|
783
|
+
] }) }) : /* @__PURE__ */ e(_, { message: a ? "No laps recorded for this combination." : 'No valid laps. Try enabling "Show invalid laps".' })
|
|
782
784
|
] });
|
|
783
785
|
}
|
|
784
|
-
function
|
|
785
|
-
const [o, d] =
|
|
786
|
-
switch (
|
|
786
|
+
function Hr({ drivers: r, isLoading: n, getUserDisplay: s, game: t, gameVersion: i, onComboSelect: a }) {
|
|
787
|
+
const [o, d] = W({ key: "rank", dir: "asc" }), [m, c] = M(null), v = w(() => r ? O(r, o, (g, p) => {
|
|
788
|
+
switch (p) {
|
|
787
789
|
case "rating":
|
|
788
790
|
return g.rating;
|
|
789
791
|
case "comboCount":
|
|
@@ -795,10 +797,10 @@ function _r({ drivers: r, isLoading: n, getUserDisplay: s, game: t, gameVersion:
|
|
|
795
797
|
return g.rank;
|
|
796
798
|
}
|
|
797
799
|
}) : [], [r, o]);
|
|
798
|
-
if (n) return /* @__PURE__ */ e(
|
|
800
|
+
if (n) return /* @__PURE__ */ e(q, {});
|
|
799
801
|
if (!(r != null && r.length))
|
|
800
|
-
return /* @__PURE__ */ e("div", { className: "pvx-card", children: /* @__PURE__ */ e(
|
|
801
|
-
const
|
|
802
|
+
return /* @__PURE__ */ e("div", { className: "pvx-card", children: /* @__PURE__ */ e(_, { message: "Not enough data for rankings yet." }) });
|
|
803
|
+
const f = 5;
|
|
802
804
|
return /* @__PURE__ */ l("div", { className: "pvx-card", children: [
|
|
803
805
|
/* @__PURE__ */ l("div", { className: "pvx-card-header pvx-rankings-header", children: [
|
|
804
806
|
/* @__PURE__ */ e("h2", { className: "pvx-card-title", children: "Driver Rankings" }),
|
|
@@ -823,19 +825,19 @@ function _r({ drivers: r, isLoading: n, getUserDisplay: s, game: t, gameVersion:
|
|
|
823
825
|
/* @__PURE__ */ e(R, { label: "Cars", sortKey: "distinctCars", config: o, onSort: d, className: "pvx-hidden-below-sm" }),
|
|
824
826
|
/* @__PURE__ */ e(R, { label: "Combos", sortKey: "comboCount", config: o, onSort: d, className: "pvx-hidden-below-sm" })
|
|
825
827
|
] }) }),
|
|
826
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children:
|
|
827
|
-
const
|
|
828
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: v.map((g) => {
|
|
829
|
+
const p = m === g.identifier;
|
|
828
830
|
return /* @__PURE__ */ e(
|
|
829
|
-
|
|
831
|
+
je,
|
|
830
832
|
{
|
|
831
833
|
driver: g,
|
|
832
834
|
getUserDisplay: s,
|
|
833
|
-
isExpanded:
|
|
834
|
-
onToggle: () => c(
|
|
835
|
-
colCount:
|
|
835
|
+
isExpanded: p,
|
|
836
|
+
onToggle: () => c(p ? null : g.identifier),
|
|
837
|
+
colCount: f,
|
|
836
838
|
game: t,
|
|
837
|
-
gameVersion:
|
|
838
|
-
onComboSelect:
|
|
839
|
+
gameVersion: i,
|
|
840
|
+
onComboSelect: a
|
|
839
841
|
},
|
|
840
842
|
g.identifier
|
|
841
843
|
);
|
|
@@ -843,9 +845,9 @@ function _r({ drivers: r, isLoading: n, getUserDisplay: s, game: t, gameVersion:
|
|
|
843
845
|
] }) })
|
|
844
846
|
] });
|
|
845
847
|
}
|
|
846
|
-
function
|
|
848
|
+
function je({ driver: r, getUserDisplay: n, isExpanded: s, onToggle: t, colCount: i, game: a, gameVersion: o, onComboSelect: d }) {
|
|
847
849
|
const m = r.identifier;
|
|
848
|
-
return /* @__PURE__ */ l(
|
|
850
|
+
return /* @__PURE__ */ l(A, { children: [
|
|
849
851
|
/* @__PURE__ */ l(
|
|
850
852
|
"tr",
|
|
851
853
|
{
|
|
@@ -853,7 +855,7 @@ function Ve({ driver: r, getUserDisplay: n, isExpanded: s, onToggle: t, colCount
|
|
|
853
855
|
onClick: t,
|
|
854
856
|
children: [
|
|
855
857
|
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(ee, { rank: r.rank, podium: !0 }) }),
|
|
856
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ e(
|
|
858
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ e(G, { userId: m, getUserDisplay: n }) }),
|
|
857
859
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: r.rating.toFixed(1) }),
|
|
858
860
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: r.distinctCars || "-" }),
|
|
859
861
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: /* @__PURE__ */ l("span", { className: "pvx-rankings-combo-count", children: [
|
|
@@ -863,8 +865,8 @@ function Ve({ driver: r, getUserDisplay: n, isExpanded: s, onToggle: t, colCount
|
|
|
863
865
|
]
|
|
864
866
|
}
|
|
865
867
|
),
|
|
866
|
-
s && r.combos && /* @__PURE__ */ e("tr", { children: /* @__PURE__ */ e("td", { colSpan:
|
|
867
|
-
const
|
|
868
|
+
s && r.combos && /* @__PURE__ */ e("tr", { children: /* @__PURE__ */ e("td", { colSpan: i, className: "pvx-rankings-combos-cell", children: /* @__PURE__ */ e("div", { className: "pvx-rankings-combos", children: r.combos.map((c, v) => {
|
|
869
|
+
const f = c.layout ? `${c.trackId}|${c.layout}` : c.trackId, g = d ? () => d({ track: f, car: c.carId, highlight: m, game: a, gameVersion: o }) : void 0;
|
|
868
870
|
return /* @__PURE__ */ l(
|
|
869
871
|
"div",
|
|
870
872
|
{
|
|
@@ -873,11 +875,11 @@ function Ve({ driver: r, getUserDisplay: n, isExpanded: s, onToggle: t, colCount
|
|
|
873
875
|
role: g ? "button" : void 0,
|
|
874
876
|
children: [
|
|
875
877
|
/* @__PURE__ */ l("div", { className: "pvx-rankings-combo-info", children: [
|
|
876
|
-
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-track", children:
|
|
877
|
-
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-car", children:
|
|
878
|
+
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-track", children: E(c.trackId, c.layout, a) }),
|
|
879
|
+
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-car", children: I(c.carId) })
|
|
878
880
|
] }),
|
|
879
881
|
/* @__PURE__ */ l("div", { className: "pvx-rankings-combo-stats", children: [
|
|
880
|
-
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-time", children:
|
|
882
|
+
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-time", children: B(c.lapTimeMs) }),
|
|
881
883
|
/* @__PURE__ */ l("p", { className: `pvx-rankings-combo-pct ${c.percentile >= 75 ? "pvx-rankings-combo-pct--high" : c.percentile >= 50 ? "pvx-rankings-combo-pct--mid" : c.percentile >= 25 ? "pvx-rankings-combo-pct--low" : "pvx-rankings-combo-pct--bottom"}`, children: [
|
|
882
884
|
c.percentile.toFixed(0),
|
|
883
885
|
"%",
|
|
@@ -892,12 +894,12 @@ function Ve({ driver: r, getUserDisplay: n, isExpanded: s, onToggle: t, colCount
|
|
|
892
894
|
] })
|
|
893
895
|
]
|
|
894
896
|
},
|
|
895
|
-
|
|
897
|
+
v
|
|
896
898
|
);
|
|
897
899
|
}) }) }) })
|
|
898
900
|
] });
|
|
899
901
|
}
|
|
900
|
-
const
|
|
902
|
+
const Ve = {
|
|
901
903
|
GBR: "🇬🇧",
|
|
902
904
|
DEU: "🇩🇪",
|
|
903
905
|
NLD: "🇳🇱",
|
|
@@ -932,33 +934,33 @@ const je = {
|
|
|
932
934
|
championship: "Championship",
|
|
933
935
|
series: "Series",
|
|
934
936
|
event: "Event"
|
|
935
|
-
},
|
|
936
|
-
function
|
|
937
|
+
}, te = ["PRACTICE", "QUALIFYING", "RACE"];
|
|
938
|
+
function xe({ position: r }) {
|
|
937
939
|
return /* @__PURE__ */ e("span", { className: r === 1 ? "pvx-rank pvx-rank--gold" : r === 2 ? "pvx-rank pvx-rank--silver" : r === 3 ? "pvx-rank pvx-rank--bronze" : "pvx-rank", children: r });
|
|
938
940
|
}
|
|
939
|
-
function
|
|
940
|
-
const n = r &&
|
|
941
|
+
function ge({ nation: r }) {
|
|
942
|
+
const n = r && Ve[r];
|
|
941
943
|
return n ? /* @__PURE__ */ e("span", { className: "pvx-nation-flag", title: r, children: n }) : null;
|
|
942
944
|
}
|
|
943
|
-
function
|
|
945
|
+
function We({ sessions: r, activeSession: n, onSelect: s }) {
|
|
944
946
|
if (!r || r.length <= 1) return null;
|
|
945
947
|
const t = [...r].sort(
|
|
946
|
-
(
|
|
948
|
+
(i, a) => te.indexOf(i.type) - te.indexOf(a.type)
|
|
947
949
|
);
|
|
948
|
-
return /* @__PURE__ */ e("div", { className: "pvx-session-tabs", children: t.map((
|
|
950
|
+
return /* @__PURE__ */ e("div", { className: "pvx-session-tabs", children: t.map((i) => /* @__PURE__ */ e(
|
|
949
951
|
"button",
|
|
950
952
|
{
|
|
951
|
-
onClick: () => s(
|
|
952
|
-
className: `pvx-session-tab ${n ===
|
|
953
|
-
children:
|
|
953
|
+
onClick: () => s(i.type),
|
|
954
|
+
className: `pvx-session-tab ${n === i.type ? "pvx-session-tab--active" : ""}`,
|
|
955
|
+
children: i.type
|
|
954
956
|
},
|
|
955
|
-
|
|
957
|
+
i.type
|
|
956
958
|
)) });
|
|
957
959
|
}
|
|
958
|
-
function
|
|
960
|
+
function Oe({ type: r }) {
|
|
959
961
|
return /* @__PURE__ */ e("span", { className: `pvx-comp-badge pvx-comp-badge--${r}`, children: He[r] || r });
|
|
960
962
|
}
|
|
961
|
-
function
|
|
963
|
+
function Q({ children: r, variant: n = "default" }) {
|
|
962
964
|
return /* @__PURE__ */ e("span", { className: `pvx-info-pill ${n !== "default" ? `pvx-info-pill--${n}` : ""}`, children: r });
|
|
963
965
|
}
|
|
964
966
|
function Ge(r) {
|
|
@@ -971,24 +973,24 @@ function Ge(r) {
|
|
|
971
973
|
function ze(r) {
|
|
972
974
|
return r.reduce((n, s) => {
|
|
973
975
|
var t;
|
|
974
|
-
return (t = s.splits) != null && t.length ? n ? n.map((
|
|
975
|
-
const o = s.splits[
|
|
976
|
-
return o && o <
|
|
976
|
+
return (t = s.splits) != null && t.length ? n ? n.map((i, a) => {
|
|
977
|
+
const o = s.splits[a];
|
|
978
|
+
return o && o < i ? o : i;
|
|
977
979
|
}) : [...s.splits] : n;
|
|
978
980
|
}, null);
|
|
979
981
|
}
|
|
980
|
-
function
|
|
982
|
+
function j({ message: r = "Loading..." }) {
|
|
981
983
|
return /* @__PURE__ */ e("div", { className: "pvx-loading", children: r });
|
|
982
984
|
}
|
|
983
|
-
function
|
|
985
|
+
function P({ message: r = "No data available." }) {
|
|
984
986
|
return /* @__PURE__ */ e("div", { className: "pvx-empty", children: /* @__PURE__ */ e("p", { children: r }) });
|
|
985
987
|
}
|
|
986
|
-
function
|
|
987
|
-
return n ? /* @__PURE__ */ e(
|
|
988
|
+
function Wr({ competitions: r, isLoading: n, onSelect: s, onRegister: t, className: i }) {
|
|
989
|
+
return n ? /* @__PURE__ */ e(j, { message: "Loading competitions..." }) : r != null && r.length ? /* @__PURE__ */ e("div", { className: `pvx-comp-grid ${i || ""}`, children: r.map((a) => /* @__PURE__ */ e(Qe, { comp: a, onSelect: s, onRegister: t || s }, a.id)) }) : /* @__PURE__ */ e(P, { message: "No competitions available." });
|
|
988
990
|
}
|
|
989
991
|
function Qe({ comp: r, onSelect: n, onRegister: s }) {
|
|
990
|
-
var u, N,
|
|
991
|
-
const { cdnUrl: t } = k(),
|
|
992
|
+
var u, N, h;
|
|
993
|
+
const { cdnUrl: t } = k(), i = r.posterCdnPath ? `${t}/${r.posterCdnPath}` : null, a = r.registration, o = (a == null ? void 0 : a.currentCount) || 0, d = a == null ? void 0 : a.maxParticipants, m = d && o >= d, c = (a == null ? void 0 : a.deadline) && new Date(a.deadline) < /* @__PURE__ */ new Date(), v = (a == null ? void 0 : a.isOpen) && !c && !m, f = /* @__PURE__ */ new Date(), g = (u = r.rounds) == null ? void 0 : u.find((x) => x.startTime && new Date(x.startTime) >= f), p = ((N = r.rounds) == null ? void 0 : N.length) || 0, b = ((h = r.rounds) == null ? void 0 : h.filter((x) => x.isFinalized).length) || 0;
|
|
992
994
|
return /* @__PURE__ */ l(
|
|
993
995
|
"div",
|
|
994
996
|
{
|
|
@@ -996,20 +998,20 @@ function Qe({ comp: r, onSelect: n, onRegister: s }) {
|
|
|
996
998
|
onClick: () => n(r.id),
|
|
997
999
|
role: "button",
|
|
998
1000
|
tabIndex: 0,
|
|
999
|
-
onKeyDown: (
|
|
1000
|
-
(
|
|
1001
|
+
onKeyDown: (x) => {
|
|
1002
|
+
(x.key === "Enter" || x.key === " ") && (x.preventDefault(), n(r.id));
|
|
1001
1003
|
},
|
|
1002
1004
|
children: [
|
|
1003
|
-
/* @__PURE__ */ e("div", { className: "pvx-comp-card-poster", children:
|
|
1005
|
+
/* @__PURE__ */ e("div", { className: "pvx-comp-card-poster", children: i ? /* @__PURE__ */ e("img", { src: i, alt: r.name, className: "pvx-comp-card-poster-img" }) : /* @__PURE__ */ e("div", { className: "pvx-comp-card-poster-placeholder", children: /* @__PURE__ */ e(Je, {}) }) }),
|
|
1004
1006
|
/* @__PURE__ */ l("div", { className: "pvx-comp-card-body", children: [
|
|
1005
1007
|
/* @__PURE__ */ e("h3", { className: "pvx-comp-card-title", children: r.name }),
|
|
1006
1008
|
r.description && /* @__PURE__ */ e("p", { className: "pvx-comp-card-desc", children: r.description }),
|
|
1007
1009
|
/* @__PURE__ */ l("div", { className: "pvx-comp-card-pills", children: [
|
|
1008
|
-
/* @__PURE__ */ e(
|
|
1009
|
-
r.game && /* @__PURE__ */ e(
|
|
1010
|
-
r.formatDescription && r.formatDescription.split(", ").map((
|
|
1010
|
+
/* @__PURE__ */ e(Oe, { type: r.type }),
|
|
1011
|
+
r.game && /* @__PURE__ */ e(Q, { children: r.game.toUpperCase() }),
|
|
1012
|
+
r.formatDescription && r.formatDescription.split(", ").map((x, y) => /* @__PURE__ */ e(Q, { variant: "format", children: x }, y))
|
|
1011
1013
|
] }),
|
|
1012
|
-
r.carsDescription && /* @__PURE__ */ e("div", { className: "pvx-comp-card-pills", children: r.carsDescription.split(", ").map((
|
|
1014
|
+
r.carsDescription && /* @__PURE__ */ e("div", { className: "pvx-comp-card-pills", children: r.carsDescription.split(", ").map((x, y) => /* @__PURE__ */ e(Q, { children: x }, y)) }),
|
|
1013
1015
|
/* @__PURE__ */ l("div", { className: "pvx-comp-card-schedule", children: [
|
|
1014
1016
|
g ? /* @__PURE__ */ l("span", { className: "pvx-comp-card-schedule-next", children: [
|
|
1015
1017
|
/* @__PURE__ */ e("span", { className: "pvx-comp-card-schedule-label", children: "Next:" }),
|
|
@@ -1020,23 +1022,23 @@ function Qe({ comp: r, onSelect: n, onRegister: s }) {
|
|
|
1020
1022
|
g.track || "TBD",
|
|
1021
1023
|
" — ",
|
|
1022
1024
|
Ge(g.startTime)
|
|
1023
|
-
] }) :
|
|
1025
|
+
] }) : p > 0 ? /* @__PURE__ */ l("span", { className: "pvx-comp-card-schedule-next", children: [
|
|
1024
1026
|
b,
|
|
1025
1027
|
"/",
|
|
1026
|
-
|
|
1028
|
+
p,
|
|
1027
1029
|
" rounds completed"
|
|
1028
1030
|
] }) : null,
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
+
p > 0 && /* @__PURE__ */ l("span", { className: "pvx-comp-card-round-count", children: [
|
|
1032
|
+
p,
|
|
1031
1033
|
" round",
|
|
1032
|
-
|
|
1034
|
+
p !== 1 ? "s" : ""
|
|
1033
1035
|
] })
|
|
1034
1036
|
] }),
|
|
1035
|
-
|
|
1037
|
+
a && /* @__PURE__ */ e(
|
|
1036
1038
|
Ye,
|
|
1037
1039
|
{
|
|
1038
1040
|
competitionId: r.id,
|
|
1039
|
-
regOpen:
|
|
1041
|
+
regOpen: v,
|
|
1040
1042
|
isFull: m,
|
|
1041
1043
|
deadlinePassed: c,
|
|
1042
1044
|
regCount: o,
|
|
@@ -1049,21 +1051,21 @@ function Qe({ comp: r, onSelect: n, onRegister: s }) {
|
|
|
1049
1051
|
}
|
|
1050
1052
|
);
|
|
1051
1053
|
}
|
|
1052
|
-
function Ye({ competitionId: r, regOpen: n, isFull: s, deadlinePassed: t, regCount:
|
|
1053
|
-
const { isPowerMode: d } =
|
|
1054
|
+
function Ye({ competitionId: r, regOpen: n, isFull: s, deadlinePassed: t, regCount: i, regMax: a, onRegister: o }) {
|
|
1055
|
+
const { isPowerMode: d } = Z(), m = X(r), { data: c } = J(r), v = (c == null ? void 0 : c.isRegistered) || !1, f = a ? i / a * 100 : 0, g = f >= 100 ? "full" : f >= 75 ? "warning" : "ok";
|
|
1054
1056
|
return /* @__PURE__ */ l("div", { className: "pvx-comp-card-reg", children: [
|
|
1055
1057
|
/* @__PURE__ */ e("div", { className: "pvx-comp-card-reg-info", children: /* @__PURE__ */ l("span", { className: `pvx-reg-capacity pvx-reg-capacity--${g}`, children: [
|
|
1056
|
-
|
|
1058
|
+
i,
|
|
1057
1059
|
"/",
|
|
1058
|
-
|
|
1060
|
+
a || "∞",
|
|
1059
1061
|
" drivers"
|
|
1060
1062
|
] }) }),
|
|
1061
|
-
/* @__PURE__ */ e("div", { className: "pvx-comp-card-reg-action", children:
|
|
1063
|
+
/* @__PURE__ */ e("div", { className: "pvx-comp-card-reg-action", children: v ? /* @__PURE__ */ e(
|
|
1062
1064
|
"button",
|
|
1063
1065
|
{
|
|
1064
1066
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--registered",
|
|
1065
|
-
onClick: (
|
|
1066
|
-
|
|
1067
|
+
onClick: (p) => {
|
|
1068
|
+
p.stopPropagation(), o(r);
|
|
1067
1069
|
},
|
|
1068
1070
|
children: "✓ Registered"
|
|
1069
1071
|
}
|
|
@@ -1071,8 +1073,8 @@ function Ye({ competitionId: r, regOpen: n, isFull: s, deadlinePassed: t, regCou
|
|
|
1071
1073
|
"button",
|
|
1072
1074
|
{
|
|
1073
1075
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--open",
|
|
1074
|
-
onClick: (
|
|
1075
|
-
|
|
1076
|
+
onClick: (p) => {
|
|
1077
|
+
p.stopPropagation(), o(r);
|
|
1076
1078
|
},
|
|
1077
1079
|
children: "Register"
|
|
1078
1080
|
}
|
|
@@ -1083,13 +1085,13 @@ function Ye({ competitionId: r, regOpen: n, isFull: s, deadlinePassed: t, regCou
|
|
|
1083
1085
|
target: "_blank",
|
|
1084
1086
|
rel: "noopener noreferrer",
|
|
1085
1087
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--open",
|
|
1086
|
-
onClick: (
|
|
1088
|
+
onClick: (p) => p.stopPropagation(),
|
|
1087
1089
|
children: "Register"
|
|
1088
1090
|
}
|
|
1089
1091
|
) : /* @__PURE__ */ e("span", { className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--closed", children: s ? "Full" : "Closed" }) })
|
|
1090
1092
|
] });
|
|
1091
1093
|
}
|
|
1092
|
-
function
|
|
1094
|
+
function Je() {
|
|
1093
1095
|
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: [
|
|
1094
1096
|
/* @__PURE__ */ e("path", { d: "M6 9H4.5a2.5 2.5 0 0 1 0-5H6" }),
|
|
1095
1097
|
/* @__PURE__ */ e("path", { d: "M18 9h1.5a2.5 2.5 0 0 0 0-5H18" }),
|
|
@@ -1099,14 +1101,14 @@ function Ze() {
|
|
|
1099
1101
|
/* @__PURE__ */ e("path", { d: "M18 2H6v7a6 6 0 0 0 12 0V2Z" })
|
|
1100
1102
|
] });
|
|
1101
1103
|
}
|
|
1102
|
-
function
|
|
1104
|
+
function Or({ competitionId: r, className: n }) {
|
|
1103
1105
|
var d, m;
|
|
1104
|
-
const { data: s, isLoading: t } = Pe(r), { data:
|
|
1105
|
-
if (t ||
|
|
1106
|
-
return /* @__PURE__ */ e(
|
|
1106
|
+
const { data: s, isLoading: t } = Pe(r), { data: i, isLoading: a } = Be(r);
|
|
1107
|
+
if (t || a)
|
|
1108
|
+
return /* @__PURE__ */ e(j, { message: "Loading standings..." });
|
|
1107
1109
|
if (!((d = s == null ? void 0 : s.standings) != null && d.length))
|
|
1108
|
-
return /* @__PURE__ */ e(
|
|
1109
|
-
const o = ((m =
|
|
1110
|
+
return /* @__PURE__ */ e(P, { message: "No standings data yet. Results will appear once rounds are finalised." });
|
|
1111
|
+
const o = ((m = i == null ? void 0 : i.rounds) == null ? void 0 : m.filter((c) => c.isFinalized)) || [];
|
|
1110
1112
|
return /* @__PURE__ */ l("div", { className: `pvx-card ${n || ""}`, children: [
|
|
1111
1113
|
/* @__PURE__ */ e("div", { className: "pvx-card-header--split", children: /* @__PURE__ */ l("div", { className: "pvx-card-header-left", children: [
|
|
1112
1114
|
/* @__PURE__ */ e("h3", { className: "pvx-card-title", children: "Championship Standings" }),
|
|
@@ -1139,7 +1141,7 @@ function Vr({ competitionId: r, className: n }) {
|
|
|
1139
1141
|
))
|
|
1140
1142
|
] }) }),
|
|
1141
1143
|
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: s.standings.map((c) => /* @__PURE__ */ e(
|
|
1142
|
-
|
|
1144
|
+
Ze,
|
|
1143
1145
|
{
|
|
1144
1146
|
driver: c,
|
|
1145
1147
|
finalizedRounds: o
|
|
@@ -1149,32 +1151,32 @@ function Vr({ competitionId: r, className: n }) {
|
|
|
1149
1151
|
] }) })
|
|
1150
1152
|
] });
|
|
1151
1153
|
}
|
|
1152
|
-
function
|
|
1154
|
+
function Ze({ driver: r, finalizedRounds: n }) {
|
|
1153
1155
|
var o, d, m;
|
|
1154
1156
|
const s = r.position <= 3, t = new Map(
|
|
1155
1157
|
((o = r.roundResults) == null ? void 0 : o.map((c) => [c.roundNumber, c])) || []
|
|
1156
|
-
),
|
|
1158
|
+
), i = ((d = r.roundResults) == null ? void 0 : d.filter((c) => c.position === 1).length) || 0, a = ((m = r.roundResults) == null ? void 0 : m.filter((c) => c.position <= 3).length) || 0;
|
|
1157
1159
|
return /* @__PURE__ */ l("tr", { className: `pvx-row ${s ? "pvx-row--podium" : ""}`, children: [
|
|
1158
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(
|
|
1160
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(xe, { position: r.position }) }),
|
|
1159
1161
|
/* @__PURE__ */ l("td", { className: "pvx-td pvx-td--primary", children: [
|
|
1160
|
-
/* @__PURE__ */ e(
|
|
1162
|
+
/* @__PURE__ */ e(ge, { nation: r.nation }),
|
|
1161
1163
|
r.driverName
|
|
1162
1164
|
] }),
|
|
1163
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: a || "-" }),
|
|
1164
1165
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: i || "-" }),
|
|
1166
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: a || "-" }),
|
|
1165
1167
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-standings-total", children: r.totalPoints }),
|
|
1166
1168
|
n.map((c) => {
|
|
1167
|
-
const
|
|
1169
|
+
const v = t.get(c.roundNumber), f = v == null ? void 0 : v.dropped;
|
|
1168
1170
|
return /* @__PURE__ */ e(
|
|
1169
1171
|
"td",
|
|
1170
1172
|
{
|
|
1171
|
-
className: `pvx-td pvx-td--center pvx-hidden-below-md ${!
|
|
1172
|
-
children:
|
|
1173
|
+
className: `pvx-td pvx-td--center pvx-hidden-below-md ${!f && (v == null ? void 0 : v.position) <= 3 ? "pvx-standings-cell--podium" : ""}`,
|
|
1174
|
+
children: v ? /* @__PURE__ */ l("div", { className: `pvx-standings-round-cell ${f ? "pvx-standings-round-cell--dropped" : ""}`, children: [
|
|
1173
1175
|
/* @__PURE__ */ l("span", { className: "pvx-standings-round-pos", children: [
|
|
1174
1176
|
"P",
|
|
1175
|
-
|
|
1177
|
+
v.position
|
|
1176
1178
|
] }),
|
|
1177
|
-
/* @__PURE__ */ e("span", { className: "pvx-standings-round-pts", children:
|
|
1179
|
+
/* @__PURE__ */ e("span", { className: "pvx-standings-round-pts", children: v.points })
|
|
1178
1180
|
] }) : /* @__PURE__ */ e("span", { className: "pvx-td--muted", children: "-" })
|
|
1179
1181
|
},
|
|
1180
1182
|
c.roundNumber
|
|
@@ -1182,14 +1184,14 @@ function Je({ driver: r, finalizedRounds: n }) {
|
|
|
1182
1184
|
})
|
|
1183
1185
|
] });
|
|
1184
1186
|
}
|
|
1185
|
-
function
|
|
1187
|
+
function Gr({ competitionId: r, roundNumber: n, className: s }) {
|
|
1186
1188
|
var m;
|
|
1187
|
-
const { data: t, isLoading:
|
|
1188
|
-
if (
|
|
1189
|
-
return /* @__PURE__ */ e(
|
|
1189
|
+
const { data: t, isLoading: i } = Ae(r, n);
|
|
1190
|
+
if (i)
|
|
1191
|
+
return /* @__PURE__ */ e(j, { message: "Loading results..." });
|
|
1190
1192
|
if (!t)
|
|
1191
|
-
return /* @__PURE__ */ e(
|
|
1192
|
-
const o = (t.sessions || []).find((c) => c.type === "RACE"), d = (m = o == null ? void 0 : o.results) == null ? void 0 : m.filter((c) => c.position <= 3).sort((c,
|
|
1193
|
+
return /* @__PURE__ */ e(P, { message: "No results for this round." });
|
|
1194
|
+
const o = (t.sessions || []).find((c) => c.type === "RACE"), d = (m = o == null ? void 0 : o.results) == null ? void 0 : m.filter((c) => c.position <= 3).sort((c, v) => c.position - v.position);
|
|
1193
1195
|
return /* @__PURE__ */ l("div", { className: `pvx-round-results ${s || ""}`, children: [
|
|
1194
1196
|
/* @__PURE__ */ l("div", { className: "pvx-round-results-header", children: [
|
|
1195
1197
|
/* @__PURE__ */ l("div", { children: [
|
|
@@ -1214,16 +1216,16 @@ function jr({ competitionId: r, roundNumber: n, className: s }) {
|
|
|
1214
1216
|
}
|
|
1215
1217
|
function Xe({ round: r, className: n }) {
|
|
1216
1218
|
var d, m;
|
|
1217
|
-
const [s, t] = M(null),
|
|
1218
|
-
if (!
|
|
1219
|
-
return /* @__PURE__ */ e(
|
|
1220
|
-
const
|
|
1219
|
+
const [s, t] = M(null), i = (r == null ? void 0 : r.sessions) || [];
|
|
1220
|
+
if (!i.length)
|
|
1221
|
+
return /* @__PURE__ */ e(P, { message: "No session data for this round." });
|
|
1222
|
+
const a = s || ((d = i.find((c) => c.type === "RACE")) == null ? void 0 : d.type) || ((m = i[0]) == null ? void 0 : m.type), o = i.find((c) => c.type === a) || i[0];
|
|
1221
1223
|
return /* @__PURE__ */ l("div", { className: n || "", children: [
|
|
1222
1224
|
/* @__PURE__ */ e(
|
|
1223
|
-
|
|
1225
|
+
We,
|
|
1224
1226
|
{
|
|
1225
|
-
sessions:
|
|
1226
|
-
activeSession:
|
|
1227
|
+
sessions: i,
|
|
1228
|
+
activeSession: a,
|
|
1227
1229
|
onSelect: t
|
|
1228
1230
|
}
|
|
1229
1231
|
),
|
|
@@ -1234,7 +1236,7 @@ function er({ session: r }) {
|
|
|
1234
1236
|
var t;
|
|
1235
1237
|
const n = r.type === "RACE";
|
|
1236
1238
|
if (!((t = r.results) != null && t.length))
|
|
1237
|
-
return /* @__PURE__ */ e(
|
|
1239
|
+
return /* @__PURE__ */ e(P, { message: `No results for ${r.type}.` });
|
|
1238
1240
|
const s = ze(r.results);
|
|
1239
1241
|
return /* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ l("table", { className: "pvx-table", children: [
|
|
1240
1242
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ l("tr", { className: "pvx-thead-row", children: [
|
|
@@ -1242,30 +1244,30 @@ function er({ session: r }) {
|
|
|
1242
1244
|
/* @__PURE__ */ e("th", { className: "pvx-th", children: "Driver" }),
|
|
1243
1245
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "Car" }),
|
|
1244
1246
|
/* @__PURE__ */ e("th", { className: "pvx-th", children: "Best Lap" }),
|
|
1245
|
-
n && /* @__PURE__ */ l(
|
|
1247
|
+
n && /* @__PURE__ */ l(A, { children: [
|
|
1246
1248
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "Laps" }),
|
|
1247
1249
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "Time / Gap" }),
|
|
1248
1250
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-th--center", children: "Points" })
|
|
1249
1251
|
] })
|
|
1250
1252
|
] }) }),
|
|
1251
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: r.results.map((
|
|
1253
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: r.results.map((i, a) => /* @__PURE__ */ e(
|
|
1252
1254
|
rr,
|
|
1253
1255
|
{
|
|
1254
|
-
result:
|
|
1256
|
+
result: i,
|
|
1255
1257
|
isRace: n,
|
|
1256
1258
|
fastestSplits: s,
|
|
1257
|
-
rowIndex:
|
|
1259
|
+
rowIndex: a
|
|
1258
1260
|
},
|
|
1259
|
-
|
|
1261
|
+
i.driverId || a
|
|
1260
1262
|
)) })
|
|
1261
1263
|
] }) });
|
|
1262
1264
|
}
|
|
1263
1265
|
function rr({ result: r, isRace: n, fastestSplits: s, rowIndex: t }) {
|
|
1264
|
-
const
|
|
1265
|
-
return /* @__PURE__ */ l("tr", { className: `pvx-row ${
|
|
1266
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(
|
|
1266
|
+
const i = r.position <= 3;
|
|
1267
|
+
return /* @__PURE__ */ l("tr", { className: `pvx-row ${i ? "pvx-row--podium" : ""}`, children: [
|
|
1268
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(xe, { position: r.position }) }),
|
|
1267
1269
|
/* @__PURE__ */ l("td", { className: "pvx-td pvx-td--primary", children: [
|
|
1268
|
-
/* @__PURE__ */ e(
|
|
1270
|
+
/* @__PURE__ */ e(ge, { nation: r.nation }),
|
|
1269
1271
|
r.driverName,
|
|
1270
1272
|
r.carNumber != null && /* @__PURE__ */ l("span", { className: "pvx-car-number", children: [
|
|
1271
1273
|
"#",
|
|
@@ -1273,7 +1275,7 @@ function rr({ result: r, isRace: n, fastestSplits: s, rowIndex: t }) {
|
|
|
1273
1275
|
] }),
|
|
1274
1276
|
r.penalty && /* @__PURE__ */ e("span", { className: "pvx-penalty", children: r.penalty })
|
|
1275
1277
|
] }),
|
|
1276
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-sm", children:
|
|
1278
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-sm", children: I(r.carId) }),
|
|
1277
1279
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--mono", children: /* @__PURE__ */ e(
|
|
1278
1280
|
nr,
|
|
1279
1281
|
{
|
|
@@ -1284,7 +1286,7 @@ function rr({ result: r, isRace: n, fastestSplits: s, rowIndex: t }) {
|
|
|
1284
1286
|
showAbove: t <= 1
|
|
1285
1287
|
}
|
|
1286
1288
|
) }),
|
|
1287
|
-
n && /* @__PURE__ */ l(
|
|
1289
|
+
n && /* @__PURE__ */ l(A, { children: [
|
|
1288
1290
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-sm", children: r.lapsCompleted }),
|
|
1289
1291
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--mono pvx-td--muted pvx-hidden-below-sm", children: r.position === 1 ? r.totalTime || "-" : r.gap || "-" }),
|
|
1290
1292
|
/* @__PURE__ */ l("td", { className: "pvx-td pvx-td--center", children: [
|
|
@@ -1299,29 +1301,29 @@ function rr({ result: r, isRace: n, fastestSplits: s, rowIndex: t }) {
|
|
|
1299
1301
|
] })
|
|
1300
1302
|
] });
|
|
1301
1303
|
}
|
|
1302
|
-
function nr({ bestLap: r, hasBestLap: n, splits: s, fastestSplits: t, showAbove:
|
|
1304
|
+
function nr({ bestLap: r, hasBestLap: n, splits: s, fastestSplits: t, showAbove: i }) {
|
|
1303
1305
|
return r ? /* @__PURE__ */ l("span", { className: `pvx-best-lap-cell ${n ? "pvx-best-lap-cell--fastest" : ""}`, children: [
|
|
1304
1306
|
/* @__PURE__ */ e("span", { className: "pvx-best-lap-time", children: r }),
|
|
1305
|
-
(s == null ? void 0 : s.length) > 0 && /* @__PURE__ */ e("span", { className: "pvx-splits-tooltip-anchor", children: /* @__PURE__ */ e("span", { className: `pvx-splits-tooltip ${
|
|
1306
|
-
const d = t &&
|
|
1307
|
+
(s == null ? void 0 : s.length) > 0 && /* @__PURE__ */ e("span", { className: "pvx-splits-tooltip-anchor", children: /* @__PURE__ */ e("span", { className: `pvx-splits-tooltip ${i ? "" : "pvx-splits-tooltip--above"}`, children: s.map((a, o) => {
|
|
1308
|
+
const d = t && a === t[o];
|
|
1307
1309
|
return /* @__PURE__ */ l("span", { className: "pvx-splits-tooltip-row", children: [
|
|
1308
1310
|
/* @__PURE__ */ l("span", { className: "pvx-splits-tooltip-label", children: [
|
|
1309
1311
|
"S",
|
|
1310
1312
|
o + 1
|
|
1311
1313
|
] }),
|
|
1312
|
-
/* @__PURE__ */ e("span", { className: d ? "pvx-splits-tooltip-best" : "", children:
|
|
1314
|
+
/* @__PURE__ */ e("span", { className: d ? "pvx-splits-tooltip-best" : "", children: a })
|
|
1313
1315
|
] }, o);
|
|
1314
1316
|
}) }) })
|
|
1315
1317
|
] }) : /* @__PURE__ */ e("span", { className: "pvx-td--muted", children: "-" });
|
|
1316
1318
|
}
|
|
1317
|
-
function
|
|
1318
|
-
const { getSteamId: s } = k(), { data: t, isLoading:
|
|
1319
|
-
if (
|
|
1320
|
-
return /* @__PURE__ */ e(
|
|
1319
|
+
function zr({ competitionId: r, className: n }) {
|
|
1320
|
+
const { getSteamId: s } = k(), { data: t, isLoading: i } = ce(r), a = s();
|
|
1321
|
+
if (i)
|
|
1322
|
+
return /* @__PURE__ */ e(j, { message: "Loading drivers..." });
|
|
1321
1323
|
const o = (t == null ? void 0 : t.drivers) || (t == null ? void 0 : t.entries) || [];
|
|
1322
1324
|
return o.length ? /* @__PURE__ */ e("div", { className: `pvx-entry-grid ${n || ""}`, children: o.map((d) => {
|
|
1323
|
-
var c,
|
|
1324
|
-
const m =
|
|
1325
|
+
var c, v;
|
|
1326
|
+
const m = a && d.steamId === a;
|
|
1325
1327
|
return /* @__PURE__ */ l("div", { className: `pvx-entry-card ${m ? "pvx-entry-card--you" : ""}`, children: [
|
|
1326
1328
|
d.avatarUrl ? /* @__PURE__ */ e(
|
|
1327
1329
|
"img",
|
|
@@ -1330,32 +1332,32 @@ function Kr({ competitionId: r, className: n }) {
|
|
|
1330
1332
|
alt: "",
|
|
1331
1333
|
className: "pvx-entry-avatar"
|
|
1332
1334
|
}
|
|
1333
|
-
) : /* @__PURE__ */ e("div", { className: "pvx-entry-avatar pvx-entry-avatar--placeholder", children: ((
|
|
1335
|
+
) : /* @__PURE__ */ e("div", { className: "pvx-entry-avatar pvx-entry-avatar--placeholder", children: ((v = (c = d.displayName) == null ? void 0 : c.charAt(0)) == null ? void 0 : v.toUpperCase()) || "?" }),
|
|
1334
1336
|
/* @__PURE__ */ l("span", { className: "pvx-entry-name", children: [
|
|
1335
1337
|
d.displayName,
|
|
1336
1338
|
m && /* @__PURE__ */ e("span", { className: "pvx-entry-you", children: " (you)" })
|
|
1337
1339
|
] })
|
|
1338
1340
|
] }, d.steamId || d.driverId);
|
|
1339
|
-
}) }) : /* @__PURE__ */ e(
|
|
1341
|
+
}) }) : /* @__PURE__ */ e(P, { message: "No drivers registered yet." });
|
|
1340
1342
|
}
|
|
1341
|
-
function
|
|
1343
|
+
function Qr({
|
|
1342
1344
|
competitionId: r,
|
|
1343
1345
|
driverData: n,
|
|
1344
1346
|
className: s,
|
|
1345
1347
|
children: t
|
|
1346
1348
|
}) {
|
|
1347
|
-
const { data:
|
|
1349
|
+
const { data: i, isLoading: a } = J(r), { isPowerMode: o } = Z(), d = X(r), m = le(r), c = de(r), v = (i == null ? void 0 : i.isRegistered) || !1, f = a || m.isPending || c.isPending, g = m.error || c.error || null, p = () => {
|
|
1348
1350
|
o && m.mutate(n || {});
|
|
1349
1351
|
}, b = () => {
|
|
1350
1352
|
o && c.mutate();
|
|
1351
1353
|
};
|
|
1352
|
-
return typeof t == "function" ? t({ isRegistered:
|
|
1354
|
+
return typeof t == "function" ? t({ isRegistered: v, isLoading: f, register: p, withdraw: b, error: g, isPowerMode: o, registrationUrl: d }) : o ? /* @__PURE__ */ e(
|
|
1353
1355
|
"button",
|
|
1354
1356
|
{
|
|
1355
1357
|
className: `pvx-comp-register-btn ${s || ""}`,
|
|
1356
|
-
onClick:
|
|
1357
|
-
disabled:
|
|
1358
|
-
children:
|
|
1358
|
+
onClick: v ? b : p,
|
|
1359
|
+
disabled: f,
|
|
1360
|
+
children: f ? "Loading..." : v ? "Withdraw" : "Register"
|
|
1359
1361
|
}
|
|
1360
1362
|
) : /* @__PURE__ */ e(
|
|
1361
1363
|
"a",
|
|
@@ -1364,48 +1366,48 @@ function Hr({
|
|
|
1364
1366
|
target: "_blank",
|
|
1365
1367
|
rel: "noopener noreferrer",
|
|
1366
1368
|
className: `pvx-comp-register-link ${s || ""}`,
|
|
1367
|
-
children:
|
|
1369
|
+
children: v ? "View Registration" : "Register on PitVox"
|
|
1368
1370
|
}
|
|
1369
1371
|
);
|
|
1370
1372
|
}
|
|
1371
|
-
function
|
|
1372
|
-
const { getSteamId:
|
|
1373
|
-
return m ||
|
|
1373
|
+
function Yr({ competitionId: r, registration: n, onWithdrawSuccess: s, className: t }) {
|
|
1374
|
+
const { getSteamId: i } = k(), { isPowerMode: a } = Z(), o = X(r), { data: d, isLoading: m } = J(r), { data: c, isLoading: v } = ce(r), f = le(r), g = de(r), p = i(), b = (d == null ? void 0 : d.isRegistered) || !1, u = (c == null ? void 0 : c.drivers) || (c == null ? void 0 : c.entries) || [], N = n || {}, h = u.length || N.currentCount || 0, x = N.maxParticipants && h >= N.maxParticipants, y = N.deadline && new Date(N.deadline) < /* @__PURE__ */ new Date(), C = N.isOpen && !y && !x;
|
|
1375
|
+
return m || v ? /* @__PURE__ */ e(j, { message: "Loading registration..." }) : b ? /* @__PURE__ */ e("div", { className: `pvx-reg-panel ${t || ""}`, children: /* @__PURE__ */ e(
|
|
1374
1376
|
sr,
|
|
1375
1377
|
{
|
|
1376
1378
|
competitionId: r,
|
|
1377
1379
|
drivers: u,
|
|
1378
|
-
steamId:
|
|
1379
|
-
isPowerMode:
|
|
1380
|
+
steamId: p,
|
|
1381
|
+
isPowerMode: a,
|
|
1380
1382
|
registrationUrl: o,
|
|
1381
1383
|
withdrawMutation: g,
|
|
1382
1384
|
onWithdrawSuccess: s,
|
|
1383
1385
|
registration: N
|
|
1384
1386
|
}
|
|
1385
|
-
) }) :
|
|
1387
|
+
) }) : C ? p ? a ? /* @__PURE__ */ e("div", { className: `pvx-reg-panel ${t || ""}`, children: /* @__PURE__ */ e(
|
|
1386
1388
|
tr,
|
|
1387
1389
|
{
|
|
1388
1390
|
competitionId: r,
|
|
1389
|
-
registerMutation:
|
|
1391
|
+
registerMutation: f,
|
|
1390
1392
|
registration: N
|
|
1391
1393
|
}
|
|
1392
|
-
) }) : /* @__PURE__ */ e("div", { className: `pvx-reg-panel ${t || ""}`, children: /* @__PURE__ */ e("a", { href: o, target: "_blank", rel: "noopener noreferrer", className: "pvx-comp-register-link", children: "Register on PitVox" }) }) : /* @__PURE__ */ e("div", { className: `pvx-reg-panel ${t || ""}`, children:
|
|
1393
|
-
/* @__PURE__ */ e("div", { className: "pvx-reg-status-msg", children:
|
|
1394
|
-
u.length > 0 && /* @__PURE__ */ e(
|
|
1394
|
+
) }) : /* @__PURE__ */ e("div", { className: `pvx-reg-panel ${t || ""}`, children: /* @__PURE__ */ e("a", { href: o, target: "_blank", rel: "noopener noreferrer", className: "pvx-comp-register-link", children: "Register on PitVox" }) }) : /* @__PURE__ */ e("div", { className: `pvx-reg-panel ${t || ""}`, children: a ? /* @__PURE__ */ e("div", { className: "pvx-reg-status-msg", children: "Sign in to register for this competition." }) : /* @__PURE__ */ e("div", { className: "pvx-reg-status-msg", children: /* @__PURE__ */ e("a", { href: o, target: "_blank", rel: "noopener noreferrer", className: "pvx-comp-register-link", children: "Register on PitVox" }) }) }) : /* @__PURE__ */ l("div", { className: `pvx-reg-panel ${t || ""}`, children: [
|
|
1395
|
+
/* @__PURE__ */ e("div", { className: "pvx-reg-status-msg", children: x ? "Registration is full." : y ? "Registration deadline has passed." : "Registration is closed." }),
|
|
1396
|
+
u.length > 0 && /* @__PURE__ */ e(fe, { drivers: u, steamId: p })
|
|
1395
1397
|
] });
|
|
1396
1398
|
}
|
|
1397
1399
|
function tr({ competitionId: r, registerMutation: n, registration: s }) {
|
|
1398
|
-
const [t,
|
|
1399
|
-
|
|
1400
|
+
const [t, i] = M(""), [a, o] = M("intermediate"), [d, m] = M(""), c = (p) => {
|
|
1401
|
+
p.preventDefault(), n.mutate({
|
|
1400
1402
|
discordUsername: t || void 0,
|
|
1401
|
-
experience:
|
|
1403
|
+
experience: a,
|
|
1402
1404
|
comments: d || void 0
|
|
1403
1405
|
});
|
|
1404
|
-
},
|
|
1406
|
+
}, v = s || {}, f = v.currentCount || 0, g = v.maxParticipants;
|
|
1405
1407
|
return /* @__PURE__ */ l("form", { className: "pvx-reg-form", onSubmit: c, children: [
|
|
1406
1408
|
/* @__PURE__ */ l("div", { className: "pvx-reg-form-header", children: [
|
|
1407
1409
|
/* @__PURE__ */ e("h3", { className: "pvx-reg-form-title", children: "Register" }),
|
|
1408
|
-
g && /* @__PURE__ */ e(
|
|
1410
|
+
g && /* @__PURE__ */ e(Ne, { count: f, max: g })
|
|
1409
1411
|
] }),
|
|
1410
1412
|
n.error && /* @__PURE__ */ e("div", { className: "pvx-reg-error", children: n.error.message || "Registration failed" }),
|
|
1411
1413
|
/* @__PURE__ */ l("div", { className: "pvx-reg-field", children: [
|
|
@@ -1421,7 +1423,7 @@ function tr({ competitionId: r, registerMutation: n, registration: s }) {
|
|
|
1421
1423
|
className: "pvx-reg-input",
|
|
1422
1424
|
placeholder: "e.g. username",
|
|
1423
1425
|
value: t,
|
|
1424
|
-
onChange: (
|
|
1426
|
+
onChange: (p) => i(p.target.value)
|
|
1425
1427
|
}
|
|
1426
1428
|
)
|
|
1427
1429
|
] }),
|
|
@@ -1432,8 +1434,8 @@ function tr({ competitionId: r, registerMutation: n, registration: s }) {
|
|
|
1432
1434
|
{
|
|
1433
1435
|
id: `pvx-exp-${r}`,
|
|
1434
1436
|
className: "pvx-reg-select",
|
|
1435
|
-
value:
|
|
1436
|
-
onChange: (
|
|
1437
|
+
value: a,
|
|
1438
|
+
onChange: (p) => o(p.target.value),
|
|
1437
1439
|
children: [
|
|
1438
1440
|
/* @__PURE__ */ e("option", { value: "beginner", children: "Beginner" }),
|
|
1439
1441
|
/* @__PURE__ */ e("option", { value: "intermediate", children: "Intermediate" }),
|
|
@@ -1455,7 +1457,7 @@ function tr({ competitionId: r, registerMutation: n, registration: s }) {
|
|
|
1455
1457
|
rows: 3,
|
|
1456
1458
|
placeholder: "Anything the organisers should know?",
|
|
1457
1459
|
value: d,
|
|
1458
|
-
onChange: (
|
|
1460
|
+
onChange: (p) => m(p.target.value)
|
|
1459
1461
|
}
|
|
1460
1462
|
)
|
|
1461
1463
|
] }),
|
|
@@ -1470,21 +1472,21 @@ function tr({ competitionId: r, registerMutation: n, registration: s }) {
|
|
|
1470
1472
|
) })
|
|
1471
1473
|
] });
|
|
1472
1474
|
}
|
|
1473
|
-
function sr({ competitionId: r, drivers: n, steamId: s, isPowerMode: t, registrationUrl:
|
|
1474
|
-
const [m, c] = M(!1),
|
|
1475
|
-
|
|
1475
|
+
function sr({ competitionId: r, drivers: n, steamId: s, isPowerMode: t, registrationUrl: i, withdrawMutation: a, onWithdrawSuccess: o, registration: d }) {
|
|
1476
|
+
const [m, c] = M(!1), v = () => {
|
|
1477
|
+
a.mutate(void 0, {
|
|
1476
1478
|
onSuccess: () => {
|
|
1477
1479
|
c(!1), o && o();
|
|
1478
1480
|
}
|
|
1479
1481
|
});
|
|
1480
|
-
},
|
|
1481
|
-
return /* @__PURE__ */ l(
|
|
1482
|
+
}, f = d || {}, g = n.length || f.currentCount || 0, p = f.maxParticipants;
|
|
1483
|
+
return /* @__PURE__ */ l(A, { children: [
|
|
1482
1484
|
/* @__PURE__ */ l("div", { className: "pvx-reg-form-header", children: [
|
|
1483
1485
|
/* @__PURE__ */ e("h3", { className: "pvx-reg-form-title", children: "Registered Drivers" }),
|
|
1484
|
-
|
|
1486
|
+
p && /* @__PURE__ */ e(Ne, { count: g, max: p })
|
|
1485
1487
|
] }),
|
|
1486
|
-
/* @__PURE__ */ e(
|
|
1487
|
-
|
|
1488
|
+
/* @__PURE__ */ e(fe, { drivers: n, steamId: s }),
|
|
1489
|
+
a.error && /* @__PURE__ */ e("div", { className: "pvx-reg-error", children: a.error.message || "Withdrawal failed" }),
|
|
1488
1490
|
t ? /* @__PURE__ */ e("div", { className: "pvx-reg-actions", children: m ? /* @__PURE__ */ l("div", { className: "pvx-reg-confirm", children: [
|
|
1489
1491
|
/* @__PURE__ */ e("p", { className: "pvx-reg-confirm-text", children: "Are you sure you want to unregister?" }),
|
|
1490
1492
|
/* @__PURE__ */ l("div", { className: "pvx-reg-confirm-actions", children: [
|
|
@@ -1502,9 +1504,9 @@ function sr({ competitionId: r, drivers: n, steamId: s, isPowerMode: t, registra
|
|
|
1502
1504
|
{
|
|
1503
1505
|
type: "button",
|
|
1504
1506
|
className: "pvx-reg-danger-btn",
|
|
1505
|
-
onClick:
|
|
1506
|
-
disabled:
|
|
1507
|
-
children:
|
|
1507
|
+
onClick: v,
|
|
1508
|
+
disabled: a.isPending,
|
|
1509
|
+
children: a.isPending ? "Unregistering..." : "Yes, Unregister"
|
|
1508
1510
|
}
|
|
1509
1511
|
)
|
|
1510
1512
|
] })
|
|
@@ -1516,28 +1518,28 @@ function sr({ competitionId: r, drivers: n, steamId: s, isPowerMode: t, registra
|
|
|
1516
1518
|
onClick: () => c(!0),
|
|
1517
1519
|
children: "Unregister"
|
|
1518
1520
|
}
|
|
1519
|
-
) }) : /* @__PURE__ */ e("div", { className: "pvx-reg-actions", children: /* @__PURE__ */ e("a", { href:
|
|
1521
|
+
) }) : /* @__PURE__ */ e("div", { className: "pvx-reg-actions", children: /* @__PURE__ */ e("a", { href: i, target: "_blank", rel: "noopener noreferrer", className: "pvx-comp-register-link", children: "Manage on PitVox" }) })
|
|
1520
1522
|
] });
|
|
1521
1523
|
}
|
|
1522
|
-
function
|
|
1524
|
+
function fe({ drivers: r, steamId: n }) {
|
|
1523
1525
|
if (!r.length)
|
|
1524
1526
|
return /* @__PURE__ */ e("div", { className: "pvx-reg-no-drivers", children: "No drivers registered yet." });
|
|
1525
|
-
const s = [...r].sort((t,
|
|
1526
|
-
const
|
|
1527
|
-
return
|
|
1527
|
+
const s = [...r].sort((t, i) => {
|
|
1528
|
+
const a = n && t.steamId === n ? -1 : 0, o = n && i.steamId === n ? -1 : 0;
|
|
1529
|
+
return a - o;
|
|
1528
1530
|
});
|
|
1529
1531
|
return /* @__PURE__ */ e("div", { className: "pvx-reg-driver-list", children: s.map((t) => {
|
|
1530
|
-
var
|
|
1531
|
-
const
|
|
1532
|
+
var a, o;
|
|
1533
|
+
const i = n && t.steamId === n;
|
|
1532
1534
|
return /* @__PURE__ */ l(
|
|
1533
1535
|
"div",
|
|
1534
1536
|
{
|
|
1535
|
-
className: `pvx-reg-driver-row ${
|
|
1537
|
+
className: `pvx-reg-driver-row ${i ? "pvx-reg-driver-row--you" : ""}`,
|
|
1536
1538
|
children: [
|
|
1537
|
-
t.avatarUrl ? /* @__PURE__ */ e("img", { src: t.avatarUrl, alt: "", className: "pvx-reg-driver-avatar" }) : /* @__PURE__ */ e("div", { className: "pvx-reg-driver-avatar pvx-reg-driver-avatar--placeholder", children: ((o = (
|
|
1539
|
+
t.avatarUrl ? /* @__PURE__ */ e("img", { src: t.avatarUrl, alt: "", className: "pvx-reg-driver-avatar" }) : /* @__PURE__ */ e("div", { className: "pvx-reg-driver-avatar pvx-reg-driver-avatar--placeholder", children: ((o = (a = t.displayName) == null ? void 0 : a.charAt(0)) == null ? void 0 : o.toUpperCase()) || "?" }),
|
|
1538
1540
|
/* @__PURE__ */ l("span", { className: "pvx-reg-driver-name", children: [
|
|
1539
1541
|
t.displayName,
|
|
1540
|
-
|
|
1542
|
+
i && /* @__PURE__ */ e("span", { className: "pvx-entry-you", children: " (you)" })
|
|
1541
1543
|
] })
|
|
1542
1544
|
]
|
|
1543
1545
|
},
|
|
@@ -1545,7 +1547,7 @@ function ge({ drivers: r, steamId: n }) {
|
|
|
1545
1547
|
);
|
|
1546
1548
|
}) });
|
|
1547
1549
|
}
|
|
1548
|
-
function
|
|
1550
|
+
function Ne({ count: r, max: n }) {
|
|
1549
1551
|
const s = n ? r / n * 100 : 0, t = s >= 100 ? "full" : s >= 75 ? "warning" : "ok";
|
|
1550
1552
|
return /* @__PURE__ */ l("span", { className: `pvx-reg-capacity pvx-reg-capacity--${t}`, children: [
|
|
1551
1553
|
r,
|
|
@@ -1555,7 +1557,7 @@ function fe({ count: r, max: n }) {
|
|
|
1555
1557
|
] });
|
|
1556
1558
|
}
|
|
1557
1559
|
function ar(r) {
|
|
1558
|
-
const { cdnUrl: n } = k(), s =
|
|
1560
|
+
const { cdnUrl: n } = k(), s = L({
|
|
1559
1561
|
queryKey: ["pitvox", "laps", "global", r],
|
|
1560
1562
|
queryFn: () => T(n, `laps/${r}.json`),
|
|
1561
1563
|
enabled: !!r,
|
|
@@ -1580,22 +1582,22 @@ function ar(r) {
|
|
|
1580
1582
|
} : null
|
|
1581
1583
|
};
|
|
1582
1584
|
}
|
|
1583
|
-
function
|
|
1584
|
-
const { cdnUrl: n, partnerSlug: s } = k(), { gameVersion: t, enabled:
|
|
1585
|
-
return
|
|
1585
|
+
function be(r = {}) {
|
|
1586
|
+
const { cdnUrl: n, partnerSlug: s } = k(), { gameVersion: t, enabled: i = !0 } = r, a = t ? `leaderboards/partners/${s}/v/${t}/ratings.json` : `leaderboards/partners/${s}/ratings.json`;
|
|
1587
|
+
return L({
|
|
1586
1588
|
queryKey: ["pitvox", "ratings", s, t || null],
|
|
1587
|
-
queryFn: () => T(n,
|
|
1589
|
+
queryFn: () => T(n, a),
|
|
1588
1590
|
staleTime: 3e4,
|
|
1589
1591
|
refetchInterval: 3e4,
|
|
1590
|
-
enabled:
|
|
1592
|
+
enabled: i
|
|
1591
1593
|
});
|
|
1592
1594
|
}
|
|
1593
1595
|
function ir(r) {
|
|
1594
1596
|
var t;
|
|
1595
|
-
const n =
|
|
1596
|
-
var
|
|
1597
|
-
return !((
|
|
1598
|
-
(
|
|
1597
|
+
const n = be(), s = w(() => {
|
|
1598
|
+
var i;
|
|
1599
|
+
return !((i = n.data) != null && i.drivers) || !r ? null : n.data.drivers.find(
|
|
1600
|
+
(a) => a.identifier === r
|
|
1599
1601
|
) || null;
|
|
1600
1602
|
}, [(t = n.data) == null ? void 0 : t.drivers, r]);
|
|
1601
1603
|
return {
|
|
@@ -1611,8 +1613,8 @@ function ir(r) {
|
|
|
1611
1613
|
} : null
|
|
1612
1614
|
};
|
|
1613
1615
|
}
|
|
1614
|
-
function
|
|
1615
|
-
const n =
|
|
1616
|
+
function Jr(r = {}) {
|
|
1617
|
+
const n = be(r);
|
|
1616
1618
|
return {
|
|
1617
1619
|
data: n.data || null,
|
|
1618
1620
|
isLoading: n.isLoading,
|
|
@@ -1620,42 +1622,59 @@ function Wr(r = {}) {
|
|
|
1620
1622
|
};
|
|
1621
1623
|
}
|
|
1622
1624
|
function or() {
|
|
1623
|
-
const { cdnUrl: r, partnerSlug: n, getSteamId: s } = k(),
|
|
1625
|
+
const { cdnUrl: r, partnerSlug: n, getSteamId: s, onFetchServerPassword: t } = k(), i = s(), { data: a, isLoading: o } = L({
|
|
1624
1626
|
queryKey: ["pitvox", "competitions", n],
|
|
1625
1627
|
queryFn: async () => {
|
|
1626
1628
|
const p = await T(r, "competitions/index.json");
|
|
1627
|
-
return p != null && p.competitions ? p.competitions.filter((
|
|
1629
|
+
return p != null && p.competitions ? p.competitions.filter((b) => b.partnerSlug === n) : [];
|
|
1628
1630
|
},
|
|
1629
1631
|
staleTime: 6e4
|
|
1630
|
-
}),
|
|
1631
|
-
queries:
|
|
1632
|
+
}), d = (a == null ? void 0 : a.map((p) => p.id)) || [], m = ne({
|
|
1633
|
+
queries: d.map((p) => ({
|
|
1632
1634
|
queryKey: ["pitvox", "competition", n, p, "entrylist"],
|
|
1633
1635
|
queryFn: () => T(r, `competitions/${n}/${p}/entrylist.json`),
|
|
1634
|
-
enabled: !!
|
|
1636
|
+
enabled: !!i && d.length > 0,
|
|
1635
1637
|
staleTime: 6e4
|
|
1636
1638
|
}))
|
|
1637
|
-
}),
|
|
1639
|
+
}), c = m.some((p) => p.isLoading), v = w(() => {
|
|
1640
|
+
var u, N;
|
|
1641
|
+
if (!a || !i || c) return [];
|
|
1642
|
+
const p = /* @__PURE__ */ new Date(), b = [];
|
|
1643
|
+
for (let h = 0; h < a.length; h++) {
|
|
1644
|
+
const x = a[h], y = (u = m[h]) == null ? void 0 : u.data;
|
|
1645
|
+
if (!((N = y == null ? void 0 : y.drivers) == null ? void 0 : N.some((S) => S.steamId === i))) continue;
|
|
1646
|
+
const $ = x.rounds || [];
|
|
1647
|
+
for (const S of $)
|
|
1648
|
+
S.isFinalized || !S.startTime || new Date(S.startTime) <= p || b.push({
|
|
1649
|
+
competitionId: x.id,
|
|
1650
|
+
competitionName: x.name,
|
|
1651
|
+
roundNumber: S.roundNumber,
|
|
1652
|
+
track: S.track || "TBD",
|
|
1653
|
+
startTime: S.startTime
|
|
1654
|
+
});
|
|
1655
|
+
}
|
|
1656
|
+
return b.sort((h, x) => new Date(h.startTime) - new Date(x.startTime)), b.length > 0 && (b[0].isNext = !0), b;
|
|
1657
|
+
}, [a, i, c, m]), f = ne({
|
|
1658
|
+
queries: v.map((p) => ({
|
|
1659
|
+
queryKey: ["pitvox", "serverInfo", p.competitionId, p.roundNumber],
|
|
1660
|
+
queryFn: () => t(p.competitionId, p.roundNumber),
|
|
1661
|
+
enabled: !!t && v.length > 0,
|
|
1662
|
+
staleTime: 5 * 6e4,
|
|
1663
|
+
// 5 minutes
|
|
1664
|
+
retry: !1
|
|
1665
|
+
}))
|
|
1666
|
+
});
|
|
1638
1667
|
return {
|
|
1639
|
-
data: w(() => {
|
|
1640
|
-
var
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
competitionId: u.id,
|
|
1650
|
-
competitionName: u.name,
|
|
1651
|
-
roundNumber: y.roundNumber,
|
|
1652
|
-
track: y.track || "TBD",
|
|
1653
|
-
startTime: y.startTime
|
|
1654
|
-
});
|
|
1655
|
-
}
|
|
1656
|
-
return h.sort((b, u) => new Date(b.startTime) - new Date(u.startTime)), h.length > 0 && (h[0].isNext = !0), h;
|
|
1657
|
-
}, [a, t, m, d]),
|
|
1658
|
-
isLoading: i || !!t && m
|
|
1668
|
+
data: w(() => v.length ? t ? v.map((p, b) => {
|
|
1669
|
+
var N;
|
|
1670
|
+
const u = (N = f[b]) == null ? void 0 : N.data;
|
|
1671
|
+
return u != null && u.success ? {
|
|
1672
|
+
...p,
|
|
1673
|
+
serverAddress: u.serverAddress || null,
|
|
1674
|
+
serverPassword: u.serverPassword || null
|
|
1675
|
+
} : p;
|
|
1676
|
+
}) : v : [], [v, t, f]),
|
|
1677
|
+
isLoading: o || !!i && c
|
|
1659
1678
|
};
|
|
1660
1679
|
}
|
|
1661
1680
|
function cr() {
|
|
@@ -1663,51 +1682,51 @@ function cr() {
|
|
|
1663
1682
|
return !!r;
|
|
1664
1683
|
}
|
|
1665
1684
|
function lr(r = {}) {
|
|
1666
|
-
const { onFetchNotifications: n, partnerSlug: s } = k(), { limit: t = 20, unreadOnly:
|
|
1667
|
-
return
|
|
1668
|
-
queryKey: ["pitvox", "notifications", s, { limit: t, unreadOnly:
|
|
1669
|
-
queryFn: () => n({ limit: t, unreadOnly:
|
|
1685
|
+
const { onFetchNotifications: n, partnerSlug: s } = k(), { limit: t = 20, unreadOnly: i = !1 } = r;
|
|
1686
|
+
return L({
|
|
1687
|
+
queryKey: ["pitvox", "notifications", s, { limit: t, unreadOnly: i }],
|
|
1688
|
+
queryFn: () => n({ limit: t, unreadOnly: i }),
|
|
1670
1689
|
enabled: !!n,
|
|
1671
1690
|
staleTime: 3e4,
|
|
1672
1691
|
refetchInterval: 3e4
|
|
1673
1692
|
});
|
|
1674
1693
|
}
|
|
1675
|
-
function
|
|
1676
|
-
const { onFetchNotifications: r, partnerSlug: n } = k(), { data: s, isLoading: t } =
|
|
1694
|
+
function Zr() {
|
|
1695
|
+
const { onFetchNotifications: r, partnerSlug: n } = k(), { data: s, isLoading: t } = L({
|
|
1677
1696
|
queryKey: ["pitvox", "notifications", n, { limit: 1, unreadOnly: !1 }],
|
|
1678
1697
|
queryFn: () => r({ limit: 1 }),
|
|
1679
1698
|
enabled: !!r,
|
|
1680
1699
|
staleTime: 3e4,
|
|
1681
1700
|
refetchInterval: 3e4,
|
|
1682
|
-
select: (
|
|
1701
|
+
select: (i) => (i == null ? void 0 : i.unreadCount) ?? 0
|
|
1683
1702
|
});
|
|
1684
1703
|
return { count: s ?? 0, isLoading: t };
|
|
1685
1704
|
}
|
|
1686
1705
|
function dr() {
|
|
1687
1706
|
const { onMarkNotificationRead: r, partnerSlug: n } = k(), s = U();
|
|
1688
|
-
return
|
|
1707
|
+
return H({
|
|
1689
1708
|
mutationFn: (t) => {
|
|
1690
1709
|
if (!r)
|
|
1691
1710
|
throw new Error("No onMarkNotificationRead callback provided to PitVoxPartnerProvider.");
|
|
1692
1711
|
return r(t);
|
|
1693
1712
|
},
|
|
1694
|
-
onSuccess: (t,
|
|
1713
|
+
onSuccess: (t, i) => {
|
|
1695
1714
|
s.setQueriesData(
|
|
1696
1715
|
{ queryKey: ["pitvox", "notifications", n] },
|
|
1697
|
-
(
|
|
1698
|
-
...
|
|
1699
|
-
unreadCount: Math.max(0, (
|
|
1700
|
-
notifications:
|
|
1701
|
-
(o) => o.id ===
|
|
1716
|
+
(a) => a != null && a.notifications ? {
|
|
1717
|
+
...a,
|
|
1718
|
+
unreadCount: Math.max(0, (a.unreadCount || 0) - 1),
|
|
1719
|
+
notifications: a.notifications.map(
|
|
1720
|
+
(o) => o.id === i ? { ...o, isRead: !0, readAt: (/* @__PURE__ */ new Date()).toISOString() } : o
|
|
1702
1721
|
)
|
|
1703
|
-
} :
|
|
1722
|
+
} : a
|
|
1704
1723
|
);
|
|
1705
1724
|
}
|
|
1706
1725
|
});
|
|
1707
1726
|
}
|
|
1708
1727
|
function pr() {
|
|
1709
1728
|
const { onMarkAllNotificationsRead: r, partnerSlug: n } = k(), s = U();
|
|
1710
|
-
return
|
|
1729
|
+
return H({
|
|
1711
1730
|
mutationFn: () => {
|
|
1712
1731
|
if (!r)
|
|
1713
1732
|
throw new Error("No onMarkAllNotificationsRead callback provided to PitVoxPartnerProvider.");
|
|
@@ -1719,10 +1738,10 @@ function pr() {
|
|
|
1719
1738
|
(t) => t != null && t.notifications ? {
|
|
1720
1739
|
...t,
|
|
1721
1740
|
unreadCount: 0,
|
|
1722
|
-
notifications: t.notifications.map((
|
|
1723
|
-
...
|
|
1741
|
+
notifications: t.notifications.map((i) => ({
|
|
1742
|
+
...i,
|
|
1724
1743
|
isRead: !0,
|
|
1725
|
-
readAt:
|
|
1744
|
+
readAt: i.readAt || (/* @__PURE__ */ new Date()).toISOString()
|
|
1726
1745
|
}))
|
|
1727
1746
|
} : t
|
|
1728
1747
|
);
|
|
@@ -1730,14 +1749,14 @@ function pr() {
|
|
|
1730
1749
|
});
|
|
1731
1750
|
}
|
|
1732
1751
|
function ur({ driverName: r, avatarUrl: n, memberSince: s, className: t = "" }) {
|
|
1733
|
-
const
|
|
1752
|
+
const i = s ? new Date(s).toLocaleDateString("en-GB", { day: "2-digit", month: "2-digit", year: "numeric" }) : null;
|
|
1734
1753
|
return /* @__PURE__ */ l("div", { className: `pvx-card pvx-dash-profile ${t}`, children: [
|
|
1735
1754
|
n ? /* @__PURE__ */ e("img", { src: n, alt: "", className: "pvx-dash-profile-avatar" }) : /* @__PURE__ */ e("div", { className: "pvx-dash-profile-avatar pvx-dash-profile-avatar--placeholder", children: (r || "?")[0].toUpperCase() }),
|
|
1736
1755
|
/* @__PURE__ */ l("div", { className: "pvx-dash-profile-info", children: [
|
|
1737
1756
|
/* @__PURE__ */ e("h2", { className: "pvx-dash-profile-name", children: r }),
|
|
1738
|
-
|
|
1757
|
+
i && /* @__PURE__ */ l("p", { className: "pvx-dash-profile-since", children: [
|
|
1739
1758
|
"Racing since ",
|
|
1740
|
-
|
|
1759
|
+
i
|
|
1741
1760
|
] })
|
|
1742
1761
|
] })
|
|
1743
1762
|
] });
|
|
@@ -1762,48 +1781,48 @@ function vr() {
|
|
|
1762
1781
|
function hr() {
|
|
1763
1782
|
return /* @__PURE__ */ e("svg", { className: "pvx-dash-stat-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ e("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" }) });
|
|
1764
1783
|
}
|
|
1765
|
-
function
|
|
1766
|
-
const [o, d] = M(!1), m =
|
|
1767
|
-
|
|
1784
|
+
function se({ icon: r, value: n, label: s, items: t, labelKey: i, countKey: a }) {
|
|
1785
|
+
const [o, d] = M(!1), m = Ce(null);
|
|
1786
|
+
Le(() => {
|
|
1768
1787
|
if (!o) return;
|
|
1769
|
-
function
|
|
1770
|
-
m.current && !m.current.contains(
|
|
1788
|
+
function v(f) {
|
|
1789
|
+
m.current && !m.current.contains(f.target) && d(!1);
|
|
1771
1790
|
}
|
|
1772
|
-
return document.addEventListener("mousedown",
|
|
1791
|
+
return document.addEventListener("mousedown", v), () => document.removeEventListener("mousedown", v);
|
|
1773
1792
|
}, [o]);
|
|
1774
|
-
const c = t != null && t.length ? t.slice().sort((
|
|
1793
|
+
const c = t != null && t.length ? t.slice().sort((v, f) => f[a] - v[a]) : null;
|
|
1775
1794
|
return /* @__PURE__ */ l(
|
|
1776
1795
|
"div",
|
|
1777
1796
|
{
|
|
1778
1797
|
ref: m,
|
|
1779
1798
|
className: `pvx-dash-stat-card ${c ? "pvx-dash-stat-card--clickable" : ""}`,
|
|
1780
|
-
onClick: c ? () => d((
|
|
1799
|
+
onClick: c ? () => d((v) => !v) : void 0,
|
|
1781
1800
|
children: [
|
|
1782
1801
|
r,
|
|
1783
1802
|
/* @__PURE__ */ l("div", { className: "pvx-dash-stat-content", children: [
|
|
1784
1803
|
/* @__PURE__ */ e("span", { className: "pvx-dash-stat-value", children: n }),
|
|
1785
1804
|
/* @__PURE__ */ e("span", { className: "pvx-dash-stat-label", children: s })
|
|
1786
1805
|
] }),
|
|
1787
|
-
c && /* @__PURE__ */ e("div", { className: `pvx-dash-tooltip pvx-dash-tooltip--scrollable ${o ? "pvx-dash-tooltip--open" : ""}`, children: c.map((
|
|
1788
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-tooltip-label", children:
|
|
1789
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-tooltip-value", children:
|
|
1790
|
-
] },
|
|
1806
|
+
c && /* @__PURE__ */ e("div", { className: `pvx-dash-tooltip pvx-dash-tooltip--scrollable ${o ? "pvx-dash-tooltip--open" : ""}`, children: c.map((v, f) => /* @__PURE__ */ l("div", { className: "pvx-dash-tooltip-row", children: [
|
|
1807
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-tooltip-label", children: v[i] }),
|
|
1808
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-tooltip-value", children: v[a] })
|
|
1809
|
+
] }, f)) })
|
|
1791
1810
|
]
|
|
1792
1811
|
}
|
|
1793
1812
|
);
|
|
1794
1813
|
}
|
|
1795
1814
|
function xr({ stats: r, rating: n, className: s = "" }) {
|
|
1796
1815
|
if (!r) return null;
|
|
1797
|
-
const t = r.trackBreakdown.map((
|
|
1798
|
-
name:
|
|
1799
|
-
lapCount:
|
|
1800
|
-
})),
|
|
1801
|
-
name:
|
|
1802
|
-
lapCount:
|
|
1816
|
+
const t = r.trackBreakdown.map((a) => ({
|
|
1817
|
+
name: E(a.trackId, a.layout),
|
|
1818
|
+
lapCount: a.lapCount
|
|
1819
|
+
})), i = r.carBreakdown.map((a) => ({
|
|
1820
|
+
name: I(a.carId),
|
|
1821
|
+
lapCount: a.lapCount
|
|
1803
1822
|
}));
|
|
1804
1823
|
return /* @__PURE__ */ l("div", { className: `pvx-dash-stats ${s}`, children: [
|
|
1805
1824
|
/* @__PURE__ */ e(
|
|
1806
|
-
|
|
1825
|
+
se,
|
|
1807
1826
|
{
|
|
1808
1827
|
icon: /* @__PURE__ */ e(mr, {}),
|
|
1809
1828
|
value: r.lapCount.toLocaleString(),
|
|
@@ -1814,12 +1833,12 @@ function xr({ stats: r, rating: n, className: s = "" }) {
|
|
|
1814
1833
|
}
|
|
1815
1834
|
),
|
|
1816
1835
|
/* @__PURE__ */ e(
|
|
1817
|
-
|
|
1836
|
+
se,
|
|
1818
1837
|
{
|
|
1819
1838
|
icon: /* @__PURE__ */ e(vr, {}),
|
|
1820
1839
|
value: r.carBreakdown.length,
|
|
1821
1840
|
label: "Cars Used",
|
|
1822
|
-
items:
|
|
1841
|
+
items: i,
|
|
1823
1842
|
labelKey: "name",
|
|
1824
1843
|
countKey: "lapCount"
|
|
1825
1844
|
}
|
|
@@ -1840,9 +1859,9 @@ function xr({ stats: r, rating: n, className: s = "" }) {
|
|
|
1840
1859
|
] });
|
|
1841
1860
|
}
|
|
1842
1861
|
function gr({ records: r, className: n = "" }) {
|
|
1843
|
-
const s = w(() => r != null && r.length ? r.slice().sort((t,
|
|
1844
|
-
const
|
|
1845
|
-
return (
|
|
1862
|
+
const s = w(() => r != null && r.length ? r.slice().sort((t, i) => {
|
|
1863
|
+
const a = t.recordedAt ? new Date(t.recordedAt).getTime() : 0;
|
|
1864
|
+
return (i.recordedAt ? new Date(i.recordedAt).getTime() : 0) - a;
|
|
1846
1865
|
}) : [], [r]);
|
|
1847
1866
|
return s.length ? /* @__PURE__ */ l("div", { className: `pvx-card ${n}`, children: [
|
|
1848
1867
|
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ l("h3", { className: "pvx-card-title", children: [
|
|
@@ -1861,19 +1880,19 @@ function gr({ records: r, className: n = "" }) {
|
|
|
1861
1880
|
")"
|
|
1862
1881
|
] })
|
|
1863
1882
|
] }) }),
|
|
1864
|
-
/* @__PURE__ */ e("div", { className: "pvx-dash-records-list", children: s.map((t,
|
|
1883
|
+
/* @__PURE__ */ e("div", { className: "pvx-dash-records-list", children: s.map((t, i) => /* @__PURE__ */ l("div", { className: "pvx-dash-record-row", children: [
|
|
1865
1884
|
/* @__PURE__ */ l("div", { className: "pvx-dash-record-info", children: [
|
|
1866
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-record-track", children:
|
|
1867
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-record-car", children:
|
|
1885
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-record-track", children: E(t.trackId, t.layout, t.game) }),
|
|
1886
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-record-car", children: I(t.carId) })
|
|
1868
1887
|
] }),
|
|
1869
1888
|
/* @__PURE__ */ l("div", { className: "pvx-dash-record-time", children: [
|
|
1870
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-record-lap", children:
|
|
1889
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-record-lap", children: B(t.lapTimeMs) }),
|
|
1871
1890
|
/* @__PURE__ */ l("span", { className: `pvx-dash-game-badge pvx-dash-game-badge--${t.game || "evo"}`, children: [
|
|
1872
1891
|
(t.game || "evo").toUpperCase(),
|
|
1873
1892
|
t.gameVersion ? ` ${t.gameVersion}` : ""
|
|
1874
1893
|
] })
|
|
1875
1894
|
] })
|
|
1876
|
-
] },
|
|
1895
|
+
] }, i)) })
|
|
1877
1896
|
] }) : null;
|
|
1878
1897
|
}
|
|
1879
1898
|
function fr({ events: r, isLoading: n, className: s, limit: t = 3 }) {
|
|
@@ -1881,10 +1900,10 @@ function fr({ events: r, isLoading: n, className: s, limit: t = 3 }) {
|
|
|
1881
1900
|
return /* @__PURE__ */ e("div", { className: "pvx-loading", children: "Loading upcoming events..." });
|
|
1882
1901
|
if (!(r != null && r.length))
|
|
1883
1902
|
return null;
|
|
1884
|
-
const
|
|
1903
|
+
const i = t ? r.slice(0, t) : r, a = r.length - i.length;
|
|
1885
1904
|
return /* @__PURE__ */ l("div", { className: `pvx-card ${s || ""}`, children: [
|
|
1886
1905
|
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ l("h3", { className: "pvx-card-title", children: [
|
|
1887
|
-
/* @__PURE__ */ e(
|
|
1906
|
+
/* @__PURE__ */ e(yr, {}),
|
|
1888
1907
|
"Upcoming Events",
|
|
1889
1908
|
/* @__PURE__ */ l("span", { className: "pvx-dash-records-count", children: [
|
|
1890
1909
|
"(",
|
|
@@ -1893,7 +1912,7 @@ function fr({ events: r, isLoading: n, className: s, limit: t = 3 }) {
|
|
|
1893
1912
|
] })
|
|
1894
1913
|
] }) }),
|
|
1895
1914
|
/* @__PURE__ */ l("div", { className: "pvx-upcoming-list", children: [
|
|
1896
|
-
|
|
1915
|
+
i.map((o) => /* @__PURE__ */ l(
|
|
1897
1916
|
"div",
|
|
1898
1917
|
{
|
|
1899
1918
|
className: `pvx-upcoming-item ${o.isNext ? "pvx-upcoming-item--next" : ""}`,
|
|
@@ -1905,7 +1924,14 @@ function fr({ events: r, isLoading: n, className: s, limit: t = 3 }) {
|
|
|
1905
1924
|
o.roundNumber,
|
|
1906
1925
|
": ",
|
|
1907
1926
|
o.track
|
|
1908
|
-
] })
|
|
1927
|
+
] }),
|
|
1928
|
+
o.serverPassword && /* @__PURE__ */ e(
|
|
1929
|
+
Nr,
|
|
1930
|
+
{
|
|
1931
|
+
password: o.serverPassword,
|
|
1932
|
+
address: o.serverAddress
|
|
1933
|
+
}
|
|
1934
|
+
)
|
|
1909
1935
|
] }),
|
|
1910
1936
|
/* @__PURE__ */ l("div", { className: "pvx-upcoming-time", children: [
|
|
1911
1937
|
/* @__PURE__ */ e("span", { className: "pvx-upcoming-date", children: new Date(o.startTime).toLocaleDateString("en-GB", {
|
|
@@ -1913,23 +1939,63 @@ function fr({ events: r, isLoading: n, className: s, limit: t = 3 }) {
|
|
|
1913
1939
|
month: "short",
|
|
1914
1940
|
year: "numeric"
|
|
1915
1941
|
}) }),
|
|
1916
|
-
/* @__PURE__ */ e("span", { className: "pvx-upcoming-relative", children:
|
|
1942
|
+
/* @__PURE__ */ e("span", { className: "pvx-upcoming-relative", children: br(o.startTime) }),
|
|
1917
1943
|
o.isNext && /* @__PURE__ */ e("span", { className: "pvx-upcoming-badge", children: "Next" })
|
|
1918
1944
|
] })
|
|
1919
1945
|
]
|
|
1920
1946
|
},
|
|
1921
1947
|
`${o.competitionId}-${o.roundNumber}`
|
|
1922
1948
|
)),
|
|
1923
|
-
|
|
1949
|
+
a > 0 && /* @__PURE__ */ l("div", { className: "pvx-upcoming-remaining", children: [
|
|
1924
1950
|
"+",
|
|
1925
|
-
|
|
1951
|
+
a,
|
|
1926
1952
|
" more event",
|
|
1927
|
-
|
|
1953
|
+
a !== 1 ? "s" : ""
|
|
1928
1954
|
] })
|
|
1929
1955
|
] })
|
|
1930
1956
|
] });
|
|
1931
1957
|
}
|
|
1932
|
-
function Nr(r) {
|
|
1958
|
+
function Nr({ password: r, address: n }) {
|
|
1959
|
+
const [s, t] = M(!1), [i, a] = M(!1), o = n ? r ? `join:${n}|${r}` : `join:${n}` : null, d = K(async () => {
|
|
1960
|
+
if (o)
|
|
1961
|
+
try {
|
|
1962
|
+
await navigator.clipboard.writeText(o), t(!0), setTimeout(() => t(!1), 2e3);
|
|
1963
|
+
} catch {
|
|
1964
|
+
}
|
|
1965
|
+
}, [o]);
|
|
1966
|
+
return /* @__PURE__ */ l("div", { className: "pvx-server-info", children: [
|
|
1967
|
+
o && /* @__PURE__ */ l(
|
|
1968
|
+
"span",
|
|
1969
|
+
{
|
|
1970
|
+
className: "pvx-server-detail pvx-server-detail--clickable",
|
|
1971
|
+
onClick: d,
|
|
1972
|
+
title: "Copy join string to clipboard",
|
|
1973
|
+
children: [
|
|
1974
|
+
/* @__PURE__ */ e(wr, {}),
|
|
1975
|
+
" ",
|
|
1976
|
+
s ? "Copied!" : "Join"
|
|
1977
|
+
]
|
|
1978
|
+
}
|
|
1979
|
+
),
|
|
1980
|
+
r && /* @__PURE__ */ l(A, { children: [
|
|
1981
|
+
/* @__PURE__ */ e(
|
|
1982
|
+
"span",
|
|
1983
|
+
{
|
|
1984
|
+
className: "pvx-server-detail pvx-server-detail--clickable",
|
|
1985
|
+
onClick: () => a((m) => !m),
|
|
1986
|
+
title: i ? "Hide password" : "Reveal password",
|
|
1987
|
+
children: i ? /* @__PURE__ */ e(Lr, {}) : /* @__PURE__ */ e(Cr, {})
|
|
1988
|
+
}
|
|
1989
|
+
),
|
|
1990
|
+
i && /* @__PURE__ */ l("span", { className: "pvx-server-detail", children: [
|
|
1991
|
+
/* @__PURE__ */ e(kr, {}),
|
|
1992
|
+
" ",
|
|
1993
|
+
r
|
|
1994
|
+
] })
|
|
1995
|
+
] })
|
|
1996
|
+
] });
|
|
1997
|
+
}
|
|
1998
|
+
function br(r) {
|
|
1933
1999
|
const n = new Date(r).getTime() - Date.now();
|
|
1934
2000
|
if (n <= 0) return "Now";
|
|
1935
2001
|
const s = Math.floor(n / (1e3 * 60 * 60));
|
|
@@ -1939,30 +2005,54 @@ function Nr(r) {
|
|
|
1939
2005
|
if (t === 1) return "Tomorrow";
|
|
1940
2006
|
if (t < 7) return `in ${t} days`;
|
|
1941
2007
|
if (t < 30) {
|
|
1942
|
-
const
|
|
1943
|
-
return `in ${
|
|
2008
|
+
const i = Math.floor(t / 7);
|
|
2009
|
+
return `in ${i} week${i !== 1 ? "s" : ""}`;
|
|
1944
2010
|
}
|
|
1945
|
-
return
|
|
2011
|
+
return ae(r);
|
|
1946
2012
|
}
|
|
1947
|
-
function
|
|
2013
|
+
function yr() {
|
|
1948
2014
|
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: [
|
|
1949
2015
|
/* @__PURE__ */ e("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
|
|
1950
2016
|
/* @__PURE__ */ e("path", { d: "M16 2v4M8 2v4M3 10h18" })
|
|
1951
2017
|
] });
|
|
1952
2018
|
}
|
|
1953
|
-
function
|
|
1954
|
-
|
|
1955
|
-
|
|
2019
|
+
function kr() {
|
|
2020
|
+
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: [
|
|
2021
|
+
/* @__PURE__ */ e("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2" }),
|
|
2022
|
+
/* @__PURE__ */ e("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
|
|
2023
|
+
] });
|
|
2024
|
+
}
|
|
2025
|
+
function wr() {
|
|
2026
|
+
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: [
|
|
2027
|
+
/* @__PURE__ */ e("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2" }),
|
|
2028
|
+
/* @__PURE__ */ e("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
|
|
2029
|
+
] });
|
|
2030
|
+
}
|
|
2031
|
+
function Cr() {
|
|
2032
|
+
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: [
|
|
2033
|
+
/* @__PURE__ */ e("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }),
|
|
2034
|
+
/* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "3" })
|
|
2035
|
+
] });
|
|
2036
|
+
}
|
|
2037
|
+
function Lr() {
|
|
2038
|
+
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: [
|
|
2039
|
+
/* @__PURE__ */ e("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" }),
|
|
2040
|
+
/* @__PURE__ */ e("line", { x1: "1", y1: "1", x2: "23", y2: "23" })
|
|
2041
|
+
] });
|
|
2042
|
+
}
|
|
2043
|
+
function Rr({ notifications: r, unreadCount: n = 0, onMarkRead: s, onMarkAllRead: t, isLoading: i, className: a }) {
|
|
2044
|
+
const o = oe();
|
|
2045
|
+
return i ? /* @__PURE__ */ e("div", { className: "pvx-loading", children: "Loading notifications..." }) : /* @__PURE__ */ l("div", { className: `pvx-card ${a || ""}`, children: [
|
|
1956
2046
|
/* @__PURE__ */ l("div", { className: "pvx-card-header", children: [
|
|
1957
2047
|
/* @__PURE__ */ l("h3", { className: "pvx-card-title", children: [
|
|
1958
|
-
/* @__PURE__ */ e(
|
|
2048
|
+
/* @__PURE__ */ e($r, {}),
|
|
1959
2049
|
"Notifications",
|
|
1960
2050
|
n > 0 && /* @__PURE__ */ e("span", { className: "pvx-notif-badge", children: n > 99 ? "99+" : n })
|
|
1961
2051
|
] }),
|
|
1962
2052
|
n > 0 && t && /* @__PURE__ */ e("button", { className: "pvx-notif-mark-all", onClick: t, children: "Mark all read" })
|
|
1963
2053
|
] }),
|
|
1964
2054
|
r != null && r.length ? /* @__PURE__ */ e("div", { className: "pvx-notif-list", children: r.map((d) => /* @__PURE__ */ e(
|
|
1965
|
-
|
|
2055
|
+
Tr,
|
|
1966
2056
|
{
|
|
1967
2057
|
notification: d,
|
|
1968
2058
|
getUserDisplay: o,
|
|
@@ -1972,7 +2062,7 @@ function yr({ notifications: r, unreadCount: n = 0, onMarkRead: s, onMarkAllRead
|
|
|
1972
2062
|
)) }) : /* @__PURE__ */ e("div", { className: "pvx-notif-empty", children: "No notifications" })
|
|
1973
2063
|
] });
|
|
1974
2064
|
}
|
|
1975
|
-
function
|
|
2065
|
+
function Tr({ notification: r, getUserDisplay: n, onMarkRead: s }) {
|
|
1976
2066
|
const t = () => {
|
|
1977
2067
|
!r.isRead && s && s(r.id);
|
|
1978
2068
|
};
|
|
@@ -1982,17 +2072,17 @@ function kr({ notification: r, getUserDisplay: n, onMarkRead: s }) {
|
|
|
1982
2072
|
className: `pvx-notif-item ${r.isRead ? "" : "pvx-notif-item--unread"}`,
|
|
1983
2073
|
onClick: t,
|
|
1984
2074
|
children: [
|
|
1985
|
-
/* @__PURE__ */ e(
|
|
2075
|
+
/* @__PURE__ */ e(Sr, { type: r.type }),
|
|
1986
2076
|
/* @__PURE__ */ l("div", { className: "pvx-notif-content", children: [
|
|
1987
2077
|
/* @__PURE__ */ e("span", { className: "pvx-notif-message", children: Me(r, n) }),
|
|
1988
|
-
/* @__PURE__ */ e("span", { className: "pvx-notif-time", children:
|
|
2078
|
+
/* @__PURE__ */ e("span", { className: "pvx-notif-time", children: ae(r.createdAt) })
|
|
1989
2079
|
] }),
|
|
1990
2080
|
!r.isRead && /* @__PURE__ */ e("span", { className: "pvx-notif-dot" })
|
|
1991
2081
|
]
|
|
1992
2082
|
}
|
|
1993
2083
|
);
|
|
1994
2084
|
}
|
|
1995
|
-
function
|
|
2085
|
+
function Sr({ type: r }) {
|
|
1996
2086
|
return r === "RECORD_BEATEN" ? /* @__PURE__ */ e("span", { className: "pvx-notif-icon pvx-notif-icon--beaten", children: /* @__PURE__ */ e("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ e("path", { d: "m7 7 10 10M17 7v10H7" }) }) }) : r === "ADMIN_MESSAGE" ? /* @__PURE__ */ e("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: [
|
|
1997
2087
|
/* @__PURE__ */ e("path", { d: "m3 11 18-5v12L3 13v-2z" }),
|
|
1998
2088
|
/* @__PURE__ */ e("path", { d: "M11.6 16.8a3 3 0 1 1-5.8-1.6" })
|
|
@@ -2005,99 +2095,99 @@ function wr({ type: r }) {
|
|
|
2005
2095
|
/* @__PURE__ */ e("path", { d: "M18 2H6v7a6 6 0 0 0 12 0V2Z" })
|
|
2006
2096
|
] }) });
|
|
2007
2097
|
}
|
|
2008
|
-
function
|
|
2098
|
+
function $r() {
|
|
2009
2099
|
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: [
|
|
2010
2100
|
/* @__PURE__ */ e("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }),
|
|
2011
2101
|
/* @__PURE__ */ e("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })
|
|
2012
2102
|
] });
|
|
2013
2103
|
}
|
|
2014
|
-
function
|
|
2015
|
-
const { data:
|
|
2016
|
-
return
|
|
2104
|
+
function Xr({ steamId: r, avatarUrl: n, memberSince: s, className: t = "" }) {
|
|
2105
|
+
const { data: i, isLoading: a, error: o } = ar(r), { data: d, isLoading: m } = ir(r), { data: c, isLoading: v } = or(), f = cr(), { data: g, isLoading: p } = lr({ limit: 10 }), b = dr(), u = pr();
|
|
2106
|
+
return a || m ? /* @__PURE__ */ e("div", { className: "pvx-loading", children: "Loading dashboard..." }) : o ? /* @__PURE__ */ e("div", { className: "pvx-empty", children: "Failed to load dashboard data." }) : i ? /* @__PURE__ */ l("div", { className: `pvx-dash ${t}`, children: [
|
|
2017
2107
|
/* @__PURE__ */ e(
|
|
2018
2108
|
ur,
|
|
2019
2109
|
{
|
|
2020
|
-
driverName:
|
|
2110
|
+
driverName: i.driverName,
|
|
2021
2111
|
avatarUrl: n,
|
|
2022
2112
|
memberSince: s
|
|
2023
2113
|
}
|
|
2024
2114
|
),
|
|
2025
|
-
/* @__PURE__ */ e(xr, { stats:
|
|
2026
|
-
r && /* @__PURE__ */ e(fr, { events: c, isLoading:
|
|
2027
|
-
/* @__PURE__ */ l("div", { className: `pvx-dash-row ${
|
|
2028
|
-
/* @__PURE__ */ e(gr, { records:
|
|
2029
|
-
|
|
2030
|
-
|
|
2115
|
+
/* @__PURE__ */ e(xr, { stats: i, rating: d }),
|
|
2116
|
+
r && /* @__PURE__ */ e(fr, { events: c, isLoading: v }),
|
|
2117
|
+
/* @__PURE__ */ l("div", { className: `pvx-dash-row ${f ? "pvx-dash-row--2col" : ""}`, children: [
|
|
2118
|
+
/* @__PURE__ */ e(gr, { records: i.currentRecords }),
|
|
2119
|
+
f && /* @__PURE__ */ e(
|
|
2120
|
+
Rr,
|
|
2031
2121
|
{
|
|
2032
2122
|
notifications: g == null ? void 0 : g.notifications,
|
|
2033
2123
|
unreadCount: (g == null ? void 0 : g.unreadCount) || 0,
|
|
2034
2124
|
onMarkRead: (N) => b.mutate(N),
|
|
2035
2125
|
onMarkAllRead: () => u.mutate(),
|
|
2036
|
-
isLoading:
|
|
2126
|
+
isLoading: p
|
|
2037
2127
|
}
|
|
2038
2128
|
)
|
|
2039
2129
|
] })
|
|
2040
2130
|
] }) : /* @__PURE__ */ e("div", { className: "pvx-empty", children: "No data available yet. Start driving to see your stats!" });
|
|
2041
2131
|
}
|
|
2042
2132
|
export {
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2133
|
+
jr as CarsTable,
|
|
2134
|
+
P as CompEmptyState,
|
|
2135
|
+
j as CompLoadingState,
|
|
2136
|
+
Wr as CompetitionCards,
|
|
2137
|
+
Xr as DriverDashboard,
|
|
2048
2138
|
ur as DriverProfile,
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2139
|
+
Vr as DriversTable,
|
|
2140
|
+
zr as EntryList,
|
|
2141
|
+
Q as InfoPill,
|
|
2142
|
+
Kr as LapHistoryTable,
|
|
2143
|
+
Rr as NotificationsCard,
|
|
2054
2144
|
Ke as PODIUM_MEDALS,
|
|
2055
|
-
|
|
2056
|
-
|
|
2145
|
+
Br as PitVoxPartnerProvider,
|
|
2146
|
+
Hr as RankingsTable,
|
|
2057
2147
|
gr as RecordsTable,
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2148
|
+
Qr as RegisterButton,
|
|
2149
|
+
Yr as RegistrationPanel,
|
|
2150
|
+
Gr as RoundResults,
|
|
2061
2151
|
Xe as RoundSessionResults,
|
|
2062
|
-
|
|
2152
|
+
Or as StandingsTable,
|
|
2063
2153
|
xr as StatsCards,
|
|
2064
|
-
|
|
2065
|
-
|
|
2154
|
+
qr as TracksTable,
|
|
2155
|
+
Oe as TypeBadge,
|
|
2066
2156
|
fr as UpcomingEvents,
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2157
|
+
I as formatCarName,
|
|
2158
|
+
F as formatDate,
|
|
2159
|
+
Pr as formatDelta,
|
|
2160
|
+
B as formatLapTime,
|
|
2071
2161
|
Me as formatNotificationMessage,
|
|
2072
|
-
|
|
2162
|
+
ae as formatRelativeTime,
|
|
2073
2163
|
D as formatSectorTime,
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2164
|
+
E as formatTrackName,
|
|
2165
|
+
ie as formatTyreCompound,
|
|
2166
|
+
Er as useCarLeaderboard,
|
|
2167
|
+
Ur as useCarMetadata,
|
|
2168
|
+
_r as useCompetitionAllRounds,
|
|
2079
2169
|
Be as useCompetitionConfig,
|
|
2080
|
-
|
|
2081
|
-
|
|
2170
|
+
ce as useCompetitionEntryList,
|
|
2171
|
+
Ae as useCompetitionRound,
|
|
2082
2172
|
Pe as useCompetitionStandings,
|
|
2083
|
-
|
|
2084
|
-
|
|
2173
|
+
Fr as useCompetitions,
|
|
2174
|
+
De as useDriverLaps,
|
|
2085
2175
|
ir as useDriverRating,
|
|
2086
|
-
|
|
2176
|
+
Jr as useDriverRatings,
|
|
2087
2177
|
ar as useDriverStats,
|
|
2088
|
-
|
|
2178
|
+
Ar as useLeaderboardIndex,
|
|
2089
2179
|
pr as useMarkAllNotificationsRead,
|
|
2090
2180
|
dr as useMarkNotificationRead,
|
|
2091
2181
|
lr as useNotifications,
|
|
2092
2182
|
cr as useNotificationsEnabled,
|
|
2093
2183
|
k as usePitVox,
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2184
|
+
le as useRegister,
|
|
2185
|
+
Z as useRegistrationMode,
|
|
2186
|
+
J as useRegistrationStatus,
|
|
2097
2187
|
X as useRegistrationUrl,
|
|
2098
|
-
|
|
2099
|
-
|
|
2188
|
+
Ie as useTrackLeaderboard,
|
|
2189
|
+
Zr as useUnreadCount,
|
|
2100
2190
|
or as useUpcomingEvents,
|
|
2101
|
-
|
|
2102
|
-
|
|
2191
|
+
oe as useUserLookup,
|
|
2192
|
+
de as useWithdraw
|
|
2103
2193
|
};
|