@pitvox/partner-react 0.6.7 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/index.cjs +1 -1
- package/dist/index.js +926 -926
- package/package.json +8 -5
package/dist/index.js
CHANGED
|
@@ -1,92 +1,97 @@
|
|
|
1
|
-
import { jsx as e, jsxs as c, Fragment as
|
|
2
|
-
import { createContext as Re, useMemo as
|
|
3
|
-
import { useQueryClient as
|
|
4
|
-
const
|
|
5
|
-
let
|
|
6
|
-
function
|
|
7
|
-
partnerSlug:
|
|
8
|
-
cdnUrl:
|
|
1
|
+
import { jsx as e, jsxs as c, Fragment as F } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as Re, useMemo as w, useContext as Te, useState as D, useCallback as H, useRef as Se, useEffect as $e } from "react";
|
|
3
|
+
import { useQueryClient as _, QueryClient as Me, QueryClientProvider as De, useQuery as L, useMutation as W, useQueries as se } from "@tanstack/react-query";
|
|
4
|
+
const J = Re(null), Ie = "https://cdn.pitvox.com", Be = "https://pitvox.com";
|
|
5
|
+
let Q = null;
|
|
6
|
+
function jn({
|
|
7
|
+
partnerSlug: n = null,
|
|
8
|
+
cdnUrl: r = Ie,
|
|
9
9
|
pitvoxUrl: s = Be,
|
|
10
10
|
getSteamId: t,
|
|
11
11
|
onRegister: a,
|
|
12
12
|
onWithdraw: i,
|
|
13
13
|
onFetchNotifications: o,
|
|
14
14
|
onMarkNotificationRead: d,
|
|
15
|
-
onMarkAllNotificationsRead:
|
|
15
|
+
onMarkAllNotificationsRead: h,
|
|
16
16
|
onFetchServerPassword: l,
|
|
17
|
-
children:
|
|
17
|
+
children: v
|
|
18
18
|
}) {
|
|
19
|
-
const
|
|
20
|
-
partnerSlug:
|
|
21
|
-
cdnUrl:
|
|
19
|
+
const f = w(() => ({
|
|
20
|
+
partnerSlug: n,
|
|
21
|
+
cdnUrl: r.replace(/\/$/, ""),
|
|
22
22
|
pitvoxUrl: s.replace(/\/$/, ""),
|
|
23
23
|
getSteamId: t || (() => null),
|
|
24
24
|
onRegister: a || null,
|
|
25
25
|
onWithdraw: i || null,
|
|
26
26
|
onFetchNotifications: o || null,
|
|
27
27
|
onMarkNotificationRead: d || null,
|
|
28
|
-
onMarkAllNotificationsRead:
|
|
28
|
+
onMarkAllNotificationsRead: h || null,
|
|
29
29
|
onFetchServerPassword: l || null
|
|
30
|
-
}), [
|
|
31
|
-
let
|
|
30
|
+
}), [n, r, s, t, a, i, o, d, h, l]);
|
|
31
|
+
let g = !1;
|
|
32
32
|
try {
|
|
33
|
-
|
|
33
|
+
_(), g = !0;
|
|
34
34
|
} catch {
|
|
35
|
-
|
|
35
|
+
g = !1;
|
|
36
36
|
}
|
|
37
|
-
return
|
|
37
|
+
return g ? /* @__PURE__ */ e(J.Provider, { value: f, children: v }) : (Q || (Q = new Me({
|
|
38
38
|
defaultOptions: {
|
|
39
39
|
queries: { staleTime: 6e4 }
|
|
40
40
|
}
|
|
41
|
-
})), /* @__PURE__ */ e(
|
|
41
|
+
})), /* @__PURE__ */ e(De, { client: Q, children: /* @__PURE__ */ e(J.Provider, { value: f, children: v }) }));
|
|
42
42
|
}
|
|
43
43
|
function k() {
|
|
44
|
-
const
|
|
45
|
-
if (!
|
|
44
|
+
const n = Te(J);
|
|
45
|
+
if (!n)
|
|
46
46
|
throw new Error("usePitVox must be used within a <PitVoxPartnerProvider>");
|
|
47
|
-
return
|
|
47
|
+
return n;
|
|
48
48
|
}
|
|
49
|
-
async function T(
|
|
50
|
-
const s = await fetch(`${
|
|
49
|
+
async function T(n, r) {
|
|
50
|
+
const s = await fetch(`${n}/${r}`);
|
|
51
51
|
if (!s.ok) {
|
|
52
52
|
if (s.status === 404 || s.status === 403) return null;
|
|
53
53
|
throw new Error(`CDN fetch failed: ${s.status}`);
|
|
54
54
|
}
|
|
55
55
|
return s.json();
|
|
56
56
|
}
|
|
57
|
-
function
|
|
58
|
-
|
|
57
|
+
function Z(n, r, s, ...t) {
|
|
58
|
+
const a = ["leaderboards"];
|
|
59
|
+
return n && a.push(`partners/${n}`), r && a.push(r), s && a.push(`v/${s}`), [...a, ...t].join("/");
|
|
59
60
|
}
|
|
60
|
-
function Pe(r,
|
|
61
|
-
|
|
61
|
+
function Pe(n, r, s, t) {
|
|
62
|
+
const a = t || "default";
|
|
63
|
+
return n ? `laps/partners/${n}/${r}/${s}/${a}.json` : `laps/${r}/${s}/${a}.json`;
|
|
62
64
|
}
|
|
63
|
-
function Ae(r) {
|
|
64
|
-
return
|
|
65
|
+
function Ae(n, r) {
|
|
66
|
+
return n ? `laps/partners/${n}/${r}/index.json` : `laps/${r}/index.json`;
|
|
65
67
|
}
|
|
66
|
-
function
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
function Ue(n) {
|
|
69
|
+
return n ? `recent-laps/partners/${n}.json` : "recent-laps.json";
|
|
70
|
+
}
|
|
71
|
+
function A(n) {
|
|
72
|
+
if (!n && n !== 0) return "-";
|
|
73
|
+
const r = Math.floor(n / 1e3), s = Math.floor(r / 60), t = r % 60, a = n % 1e3;
|
|
69
74
|
return `${s}:${String(t).padStart(2, "0")}.${String(a).padStart(3, "0")}`;
|
|
70
75
|
}
|
|
71
|
-
function
|
|
72
|
-
return !
|
|
76
|
+
function B(n) {
|
|
77
|
+
return !n && n !== 0 ? "-" : n >= 6e4 ? A(n) : (n / 1e3).toFixed(3);
|
|
73
78
|
}
|
|
74
|
-
function I(
|
|
75
|
-
if (!
|
|
76
|
-
let
|
|
77
|
-
return
|
|
79
|
+
function I(n) {
|
|
80
|
+
if (!n) return "";
|
|
81
|
+
let r = n;
|
|
82
|
+
return r.startsWith("ks_") && (r = r.slice(3)), r.split("_").map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(" ");
|
|
78
83
|
}
|
|
79
|
-
function
|
|
80
|
-
if (!
|
|
81
|
-
const t =
|
|
82
|
-
if (!
|
|
83
|
-
const i =
|
|
84
|
+
function q(n, r, s) {
|
|
85
|
+
if (!n) return "";
|
|
86
|
+
const t = n.split("_").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" "), a = s === "acc" || !s && (r == null ? void 0 : r.toLowerCase()) === "track config";
|
|
87
|
+
if (!r || r === "default" || a) return t;
|
|
88
|
+
const i = r.split("_").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" ");
|
|
84
89
|
return `${t} ${i}`;
|
|
85
90
|
}
|
|
86
|
-
function
|
|
87
|
-
if (!
|
|
91
|
+
function j(n) {
|
|
92
|
+
if (!n) return "-";
|
|
88
93
|
try {
|
|
89
|
-
return new Date(
|
|
94
|
+
return new Date(n).toLocaleDateString("en-GB", {
|
|
90
95
|
day: "numeric",
|
|
91
96
|
month: "short",
|
|
92
97
|
year: "numeric"
|
|
@@ -95,26 +100,26 @@ function q(r) {
|
|
|
95
100
|
return "-";
|
|
96
101
|
}
|
|
97
102
|
}
|
|
98
|
-
function oe(
|
|
99
|
-
if (!
|
|
100
|
-
const
|
|
103
|
+
function oe(n) {
|
|
104
|
+
if (!n) return "";
|
|
105
|
+
const r = Date.now() - new Date(n).getTime(), s = Math.floor(r / 1e3);
|
|
101
106
|
if (s < 60) return "Just now";
|
|
102
107
|
const t = Math.floor(s / 60);
|
|
103
108
|
if (t < 60) return `${t}m ago`;
|
|
104
109
|
const a = Math.floor(t / 60);
|
|
105
110
|
if (a < 24) return `${a}h ago`;
|
|
106
111
|
const i = Math.floor(a / 24);
|
|
107
|
-
return i < 30 ? `${i}d ago` :
|
|
112
|
+
return i < 30 ? `${i}d ago` : j(n);
|
|
108
113
|
}
|
|
109
|
-
function
|
|
110
|
-
return
|
|
114
|
+
function Vn(n) {
|
|
115
|
+
return n == null ? "" : `${n >= 0 ? "+" : "-"}${(Math.abs(n) / 1e3).toFixed(3)}`;
|
|
111
116
|
}
|
|
112
|
-
function
|
|
113
|
-
const { type: s, title: t, trackId: a, trackLayout: i, carId: o, game: d, data:
|
|
114
|
-
return s === "RECORD_BEATEN" &&
|
|
117
|
+
function Ee(n, r) {
|
|
118
|
+
const { type: s, title: t, trackId: a, trackLayout: i, carId: o, game: d, data: h } = n, l = typeof h == "string" ? JSON.parse(h) : h, v = a ? q(a, i, d) : null, f = o ? I(o) : null, g = [v, f].filter(Boolean).join(" — ");
|
|
119
|
+
return s === "RECORD_BEATEN" && g ? `${l != null && l.beatenBySteamId && r ? r(l.beatenBySteamId).displayName : "Someone"} beat your record on ${g}` : s === "RECORD_SET" && g ? `You set a new record on ${g}` : t || "New notification";
|
|
115
120
|
}
|
|
116
|
-
function ce(
|
|
117
|
-
return
|
|
121
|
+
function ce(n) {
|
|
122
|
+
return n ? {
|
|
118
123
|
E: "Eco",
|
|
119
124
|
RD: "Road",
|
|
120
125
|
SC: "SuperCar",
|
|
@@ -125,109 +130,103 @@ function ce(r) {
|
|
|
125
130
|
MR: "Medium Race",
|
|
126
131
|
SR: "Soft Race",
|
|
127
132
|
S: "Soft"
|
|
128
|
-
}[
|
|
133
|
+
}[n] || n : "Unknown";
|
|
129
134
|
}
|
|
130
|
-
function
|
|
131
|
-
var
|
|
132
|
-
const { cdnUrl:
|
|
135
|
+
function Kn(n = {}) {
|
|
136
|
+
var h, l, v, f, g, p;
|
|
137
|
+
const { cdnUrl: r, partnerSlug: s } = k(), { game: t, gameVersion: a } = n, i = Z(s, null, null, "index.json"), o = L({
|
|
133
138
|
queryKey: ["pitvox", "leaderboards", s, "index"],
|
|
134
|
-
queryFn: () => T(
|
|
139
|
+
queryFn: () => T(r, i),
|
|
135
140
|
staleTime: 3e4,
|
|
136
141
|
refetchInterval: 3e4
|
|
137
|
-
}), d =
|
|
138
|
-
var
|
|
139
|
-
if (!((
|
|
142
|
+
}), d = w(() => {
|
|
143
|
+
var x;
|
|
144
|
+
if (!((x = o.data) != null && x.tracks)) return [];
|
|
140
145
|
let b = o.data.tracks;
|
|
141
|
-
return t && (b = b.filter((
|
|
142
|
-
id:
|
|
143
|
-
layout:
|
|
144
|
-
game:
|
|
145
|
-
gameVersion:
|
|
146
|
-
displayName:
|
|
147
|
-
driverCount:
|
|
148
|
-
carCount:
|
|
149
|
-
record:
|
|
150
|
-
visibleId:
|
|
151
|
-
carId:
|
|
152
|
-
carDisplayName: I(
|
|
153
|
-
lapTimeMs:
|
|
154
|
-
timestamp:
|
|
146
|
+
return t && (b = b.filter((u) => u.game === t)), a && (b = b.filter((u) => u.gameVersion === a)), b.map((u) => ({
|
|
147
|
+
id: u.trackId,
|
|
148
|
+
layout: u.layout,
|
|
149
|
+
game: u.game,
|
|
150
|
+
gameVersion: u.gameVersion,
|
|
151
|
+
displayName: q(u.trackId, u.layout, u.game),
|
|
152
|
+
driverCount: u.driverCount || 0,
|
|
153
|
+
carCount: u.carCount || 0,
|
|
154
|
+
record: u.recordHolder ? {
|
|
155
|
+
visibleId: u.recordHolder.steamId || u.recordHolder.userId,
|
|
156
|
+
carId: u.recordHolder.carId,
|
|
157
|
+
carDisplayName: I(u.recordHolder.carId),
|
|
158
|
+
lapTimeMs: u.recordHolder.lapTimeMs,
|
|
159
|
+
timestamp: u.recordHolder.recordedAt
|
|
155
160
|
} : null,
|
|
156
|
-
recordByTag:
|
|
161
|
+
recordByTag: u.recordByTag || null
|
|
157
162
|
}));
|
|
158
|
-
}, [(
|
|
163
|
+
}, [(h = o.data) == null ? void 0 : h.tracks, t, a]);
|
|
159
164
|
return {
|
|
160
165
|
...o,
|
|
161
166
|
data: d,
|
|
162
167
|
partner: ((l = o.data) == null ? void 0 : l.partner) || null,
|
|
163
|
-
generatedAt: (
|
|
164
|
-
totalLaps: ((
|
|
165
|
-
totalUsers: ((
|
|
166
|
-
versions: ((
|
|
168
|
+
generatedAt: (v = o.data) == null ? void 0 : v.generatedAt,
|
|
169
|
+
totalLaps: ((f = o.data) == null ? void 0 : f.totalLaps) || 0,
|
|
170
|
+
totalUsers: ((g = o.data) == null ? void 0 : g.totalUsers) || 0,
|
|
171
|
+
versions: ((p = o.data) == null ? void 0 : p.versions) || {}
|
|
167
172
|
};
|
|
168
173
|
}
|
|
169
|
-
function
|
|
170
|
-
const { cdnUrl: t, partnerSlug: a } = k(), { carId: i, game: o, gameVersion: d } = s,
|
|
171
|
-
queryKey: ["pitvox", "leaderboards", a, "track",
|
|
172
|
-
queryFn: () => T(t,
|
|
173
|
-
enabled: !!
|
|
174
|
+
function Fe(n, r, s = {}) {
|
|
175
|
+
const { cdnUrl: t, partnerSlug: a } = k(), { carId: i, game: o, gameVersion: d } = s, h = r || "default", l = Z(a, o, d, `tracks/${n}/${h}.json`), { data: v, isLoading: f, error: g } = L({
|
|
176
|
+
queryKey: ["pitvox", "leaderboards", a, "track", n, h, o, d],
|
|
177
|
+
queryFn: () => T(t, l),
|
|
178
|
+
enabled: !!n,
|
|
174
179
|
staleTime: 3e4,
|
|
175
180
|
refetchInterval: 3e4
|
|
176
181
|
});
|
|
177
|
-
return { data:
|
|
178
|
-
if (!(
|
|
179
|
-
let
|
|
180
|
-
if (o && (
|
|
181
|
-
const
|
|
182
|
-
for (const
|
|
183
|
-
const
|
|
184
|
-
|
|
182
|
+
return { data: w(() => {
|
|
183
|
+
if (!(v != null && v.entries)) return [];
|
|
184
|
+
let b = v.entries;
|
|
185
|
+
if (o && (b = b.filter((x) => x.game === o)), !i) {
|
|
186
|
+
const x = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map();
|
|
187
|
+
for (const N of b) {
|
|
188
|
+
const m = N.steamId || N.userId;
|
|
189
|
+
u.has(N.carId) || u.set(N.carId, /* @__PURE__ */ new Set()), u.get(N.carId).add(m), (!x.has(N.carId) || N.lapTimeMs < x.get(N.carId).lapTimeMs) && x.set(N.carId, N);
|
|
185
190
|
}
|
|
186
|
-
return Array.from(
|
|
187
|
-
var
|
|
188
|
-
return { ...
|
|
189
|
-
}).sort((
|
|
191
|
+
return Array.from(x.values()).map((N) => {
|
|
192
|
+
var m;
|
|
193
|
+
return { ...N, driverCount: ((m = u.get(N.carId)) == null ? void 0 : m.size) || 0 };
|
|
194
|
+
}).sort((N, m) => N.lapTimeMs - m.lapTimeMs);
|
|
190
195
|
}
|
|
191
|
-
return
|
|
192
|
-
}, [
|
|
193
|
-
}
|
|
194
|
-
function
|
|
195
|
-
var
|
|
196
|
-
const { cdnUrl: i, partnerSlug: o } = k(), { showInvalid: d = !1, game:
|
|
197
|
-
queryKey: ["pitvox", "laps", o, r],
|
|
198
|
-
queryFn: () => T(i,
|
|
199
|
-
enabled: !!r,
|
|
196
|
+
return b.filter((x) => x.carId === i).sort((x, u) => x.lapTimeMs - u.lapTimeMs);
|
|
197
|
+
}, [v == null ? void 0 : v.entries, i, o]), isLoading: f, error: g };
|
|
198
|
+
}
|
|
199
|
+
function _e(n, r, s, t, a = {}) {
|
|
200
|
+
var x, u;
|
|
201
|
+
const { cdnUrl: i, partnerSlug: o } = k(), { showInvalid: d = !1, game: h, gameVersion: l } = a, v = n && r ? Pe(o, n, r, s) : null, g = L({
|
|
202
|
+
queryKey: ["pitvox", "laps", o, n, r, s || "default"],
|
|
203
|
+
queryFn: () => T(i, v),
|
|
204
|
+
enabled: !!n && !!r,
|
|
200
205
|
staleTime: 3e4,
|
|
201
206
|
refetchInterval: 3e4
|
|
202
|
-
}),
|
|
203
|
-
var
|
|
204
|
-
return (
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}, [(b = x.data) == null ? void 0 : b.laps, n, s, t, v, l, d]), m = C(() => {
|
|
212
|
-
const p = f.filter((w) => w.isValid && w.sector1Ms && w.sector2Ms && w.sector3Ms);
|
|
213
|
-
if (p.length < 2) return null;
|
|
214
|
-
const N = Math.min(...p.map((w) => w.sector1Ms)), u = Math.min(...p.map((w) => w.sector2Ms)), y = Math.min(...p.map((w) => w.sector3Ms)), L = N + u + y, $ = Math.min(...p.map((w) => w.lapTimeMs));
|
|
215
|
-
return L >= $ ? null : { lapTimeMs: L, sector1Ms: N, sector2Ms: u, sector3Ms: y };
|
|
216
|
-
}, [f]);
|
|
207
|
+
}), p = w(() => {
|
|
208
|
+
var N;
|
|
209
|
+
return (N = g.data) != null && N.laps ? g.data.laps.filter((m) => !(m.carId !== t || h && m.game !== h || l && m.gameVersion !== l || !d && !m.isValid)).sort((m, y) => m.lapTimeMs - y.lapTimeMs) : [];
|
|
210
|
+
}, [(x = g.data) == null ? void 0 : x.laps, t, h, l, d]), b = w(() => {
|
|
211
|
+
const N = p.filter((S) => S.isValid && S.sector1Ms && S.sector2Ms && S.sector3Ms);
|
|
212
|
+
if (N.length < 2) return null;
|
|
213
|
+
const m = Math.min(...N.map((S) => S.sector1Ms)), y = Math.min(...N.map((S) => S.sector2Ms)), C = Math.min(...N.map((S) => S.sector3Ms)), M = m + y + C, R = Math.min(...N.map((S) => S.lapTimeMs));
|
|
214
|
+
return M >= R ? null : { lapTimeMs: M, sector1Ms: m, sector2Ms: y, sector3Ms: C };
|
|
215
|
+
}, [p]);
|
|
217
216
|
return {
|
|
218
|
-
...
|
|
219
|
-
data:
|
|
220
|
-
driverName: ((
|
|
221
|
-
theoreticalBest:
|
|
217
|
+
...g,
|
|
218
|
+
data: p,
|
|
219
|
+
driverName: ((u = g.data) == null ? void 0 : u.driverName) || "Driver",
|
|
220
|
+
theoreticalBest: b
|
|
222
221
|
};
|
|
223
222
|
}
|
|
224
223
|
function le() {
|
|
225
|
-
const { cdnUrl:
|
|
224
|
+
const { cdnUrl: n } = k(), { data: r } = L({
|
|
226
225
|
queryKey: ["pitvox", "users", "index"],
|
|
227
|
-
queryFn: () => T(
|
|
226
|
+
queryFn: () => T(n, "users/index.json"),
|
|
228
227
|
staleTime: 5 * 6e4,
|
|
229
228
|
gcTime: 30 * 6e4
|
|
230
|
-
}), s = (
|
|
229
|
+
}), s = (r == null ? void 0 : r.users) || {};
|
|
231
230
|
return (t, a) => {
|
|
232
231
|
const i = s[t];
|
|
233
232
|
return {
|
|
@@ -237,23 +236,23 @@ function le() {
|
|
|
237
236
|
};
|
|
238
237
|
};
|
|
239
238
|
}
|
|
240
|
-
function
|
|
241
|
-
const { cdnUrl:
|
|
242
|
-
queryKey: ["pitvox", "cars", "
|
|
243
|
-
queryFn: () => T(
|
|
239
|
+
function Hn() {
|
|
240
|
+
const { cdnUrl: n } = k(), { data: r } = L({
|
|
241
|
+
queryKey: ["pitvox", "cars", "evo"],
|
|
242
|
+
queryFn: () => T(n, "cars/evo.json"),
|
|
244
243
|
staleTime: 5 * 6e4,
|
|
245
244
|
gcTime: 30 * 6e4
|
|
246
245
|
});
|
|
247
246
|
return {
|
|
248
|
-
tags: (
|
|
249
|
-
cars: (
|
|
247
|
+
tags: (r == null ? void 0 : r.tags) || [],
|
|
248
|
+
cars: (r == null ? void 0 : r.cars) || {}
|
|
250
249
|
};
|
|
251
250
|
}
|
|
252
|
-
function
|
|
251
|
+
function Wn() {
|
|
253
252
|
var a, i;
|
|
254
|
-
const { cdnUrl:
|
|
255
|
-
queryKey: ["pitvox", "recentLaps",
|
|
256
|
-
queryFn: () => T(
|
|
253
|
+
const { cdnUrl: n, partnerSlug: r } = k(), s = Ue(r), t = L({
|
|
254
|
+
queryKey: ["pitvox", "recentLaps", r],
|
|
255
|
+
queryFn: () => T(n, s),
|
|
257
256
|
staleTime: 3e4,
|
|
258
257
|
refetchInterval: 3e4,
|
|
259
258
|
gcTime: 10 * 6e4
|
|
@@ -264,149 +263,149 @@ function Kr() {
|
|
|
264
263
|
isLoading: t.isLoading
|
|
265
264
|
};
|
|
266
265
|
}
|
|
267
|
-
function
|
|
268
|
-
return
|
|
266
|
+
function On(n, r) {
|
|
267
|
+
return Fe(n, null, { carId: r });
|
|
269
268
|
}
|
|
270
|
-
function
|
|
271
|
-
const { cdnUrl:
|
|
272
|
-
return
|
|
273
|
-
queryKey: ["pitvox", "competitions",
|
|
269
|
+
function zn() {
|
|
270
|
+
const { cdnUrl: n, partnerSlug: r } = k();
|
|
271
|
+
return L({
|
|
272
|
+
queryKey: ["pitvox", "competitions", r],
|
|
274
273
|
queryFn: async () => {
|
|
275
|
-
const s = await T(
|
|
276
|
-
return s != null && s.competitions ?
|
|
274
|
+
const s = await T(n, "competitions/index.json");
|
|
275
|
+
return s != null && s.competitions ? r ? s.competitions.filter((t) => t.partnerSlug === r) : s.competitions : [];
|
|
277
276
|
},
|
|
278
277
|
staleTime: 6e4
|
|
279
278
|
});
|
|
280
279
|
}
|
|
281
|
-
function de(
|
|
282
|
-
const s = k(), t =
|
|
283
|
-
return
|
|
284
|
-
queryKey: ["pitvox", "competition", t,
|
|
285
|
-
queryFn: () => T(s.cdnUrl, `competitions/${t}/${
|
|
286
|
-
enabled: !!t && !!
|
|
280
|
+
function de(n, r = {}) {
|
|
281
|
+
const s = k(), t = r.partnerSlug || s.partnerSlug;
|
|
282
|
+
return L({
|
|
283
|
+
queryKey: ["pitvox", "competition", t, n, "config"],
|
|
284
|
+
queryFn: () => T(s.cdnUrl, `competitions/${t}/${n}/config.json`),
|
|
285
|
+
enabled: !!t && !!n,
|
|
287
286
|
staleTime: 6e4
|
|
288
287
|
});
|
|
289
288
|
}
|
|
290
|
-
function
|
|
291
|
-
const s = k(), t =
|
|
292
|
-
return
|
|
293
|
-
queryKey: ["pitvox", "competition", t,
|
|
294
|
-
queryFn: () => T(s.cdnUrl, `competitions/${t}/${
|
|
295
|
-
enabled: !!t && !!
|
|
289
|
+
function qe(n, r = {}) {
|
|
290
|
+
const s = k(), t = r.partnerSlug || s.partnerSlug;
|
|
291
|
+
return L({
|
|
292
|
+
queryKey: ["pitvox", "competition", t, n, "standings"],
|
|
293
|
+
queryFn: () => T(s.cdnUrl, `competitions/${t}/${n}/standings.json`),
|
|
294
|
+
enabled: !!t && !!n,
|
|
296
295
|
staleTime: 6e4
|
|
297
296
|
});
|
|
298
297
|
}
|
|
299
|
-
function
|
|
298
|
+
function je(n, r, s = {}) {
|
|
300
299
|
const t = k(), a = s.partnerSlug || t.partnerSlug;
|
|
301
|
-
return
|
|
302
|
-
queryKey: ["pitvox", "competition", a,
|
|
303
|
-
queryFn: () => T(t.cdnUrl, `competitions/${a}/${
|
|
304
|
-
enabled: !!a && !!
|
|
300
|
+
return L({
|
|
301
|
+
queryKey: ["pitvox", "competition", a, n, "round", r],
|
|
302
|
+
queryFn: () => T(t.cdnUrl, `competitions/${a}/${n}/rounds/${r}.json`),
|
|
303
|
+
enabled: !!a && !!n && r != null,
|
|
305
304
|
staleTime: 6e4
|
|
306
305
|
});
|
|
307
306
|
}
|
|
308
|
-
function
|
|
307
|
+
function Ve(n, r = [], s = {}) {
|
|
309
308
|
const t = k(), a = s.partnerSlug || t.partnerSlug;
|
|
310
|
-
return
|
|
311
|
-
queryKey: ["pitvox", "competition", a,
|
|
309
|
+
return L({
|
|
310
|
+
queryKey: ["pitvox", "competition", a, n, "allRounds", r],
|
|
312
311
|
queryFn: async () => (await Promise.all(
|
|
313
|
-
|
|
314
|
-
(o) => T(t.cdnUrl, `competitions/${a}/${
|
|
312
|
+
r.map(
|
|
313
|
+
(o) => T(t.cdnUrl, `competitions/${a}/${n}/rounds/${o}.json`).catch(() => null)
|
|
315
314
|
)
|
|
316
315
|
)).filter(Boolean),
|
|
317
|
-
enabled: !!a && !!
|
|
316
|
+
enabled: !!a && !!n && r.length > 0,
|
|
318
317
|
staleTime: 6e4
|
|
319
318
|
});
|
|
320
319
|
}
|
|
321
|
-
function pe(
|
|
322
|
-
const s = k(), t =
|
|
323
|
-
return
|
|
324
|
-
queryKey: ["pitvox", "competition", t,
|
|
325
|
-
queryFn: () => T(s.cdnUrl, `competitions/${t}/${
|
|
326
|
-
enabled: !!t && !!
|
|
320
|
+
function pe(n, r = {}) {
|
|
321
|
+
const s = k(), t = r.partnerSlug || s.partnerSlug;
|
|
322
|
+
return L({
|
|
323
|
+
queryKey: ["pitvox", "competition", t, n, "entrylist"],
|
|
324
|
+
queryFn: () => T(s.cdnUrl, `competitions/${t}/${n}/entrylist.json`),
|
|
325
|
+
enabled: !!t && !!n,
|
|
327
326
|
staleTime: 6e4
|
|
328
327
|
});
|
|
329
328
|
}
|
|
330
|
-
function
|
|
331
|
-
const { cdnUrl:
|
|
332
|
-
return
|
|
333
|
-
queryKey: ["pitvox", "registration", s,
|
|
329
|
+
function X(n) {
|
|
330
|
+
const { cdnUrl: r, partnerSlug: s, getSteamId: t } = k(), a = t();
|
|
331
|
+
return L({
|
|
332
|
+
queryKey: ["pitvox", "registration", s, n, a],
|
|
334
333
|
queryFn: async () => {
|
|
335
|
-
var
|
|
336
|
-
const i = await fetch(`${
|
|
334
|
+
var h;
|
|
335
|
+
const i = await fetch(`${r}/competitions/${s}/${n}/entrylist.json`);
|
|
337
336
|
if (!i.ok) return { isRegistered: !1, entryList: null };
|
|
338
337
|
const o = await i.json();
|
|
339
|
-
return { isRegistered: !!a && ((
|
|
338
|
+
return { isRegistered: !!a && ((h = o.drivers) == null ? void 0 : h.some((l) => l.steamId === a)), entryList: o };
|
|
340
339
|
},
|
|
341
|
-
enabled: !!
|
|
340
|
+
enabled: !!n,
|
|
342
341
|
staleTime: 6e4
|
|
343
342
|
});
|
|
344
343
|
}
|
|
345
|
-
function ue(
|
|
346
|
-
const { onRegister:
|
|
347
|
-
return
|
|
344
|
+
function ue(n) {
|
|
345
|
+
const { onRegister: r, partnerSlug: s, getSteamId: t } = k(), a = _(), i = le();
|
|
346
|
+
return W({
|
|
348
347
|
mutationFn: (o) => {
|
|
349
|
-
if (!
|
|
348
|
+
if (!r)
|
|
350
349
|
throw new Error(
|
|
351
350
|
"No onRegister callback provided to PitVoxPartnerProvider. Provide onRegister for in-app registration, or use useRegistrationUrl() to link to pitvox.com."
|
|
352
351
|
);
|
|
353
|
-
return n
|
|
352
|
+
return r(n, o);
|
|
354
353
|
},
|
|
355
354
|
onSuccess: () => {
|
|
356
355
|
const o = t();
|
|
357
356
|
if (a.setQueriesData(
|
|
358
|
-
{ queryKey: ["pitvox", "registration", s,
|
|
357
|
+
{ queryKey: ["pitvox", "registration", s, n] },
|
|
359
358
|
(d) => d ? { ...d, isRegistered: !0 } : { isRegistered: !0, entryList: null }
|
|
360
359
|
), o) {
|
|
361
|
-
const d = i(o),
|
|
360
|
+
const d = i(o), h = {
|
|
362
361
|
steamId: o,
|
|
363
362
|
displayName: d.displayName,
|
|
364
363
|
avatarUrl: d.avatarUrl
|
|
365
364
|
};
|
|
366
365
|
a.setQueriesData(
|
|
367
|
-
{ queryKey: ["pitvox", "competition", s,
|
|
366
|
+
{ queryKey: ["pitvox", "competition", s, n, "entrylist"] },
|
|
368
367
|
(l) => {
|
|
369
|
-
var
|
|
370
|
-
return l ? ((
|
|
368
|
+
var f;
|
|
369
|
+
return l ? ((f = l.drivers) == null ? void 0 : f.some((g) => g.steamId === o)) ? l : { ...l, drivers: [...l.drivers || [], h] } : { drivers: [h] };
|
|
371
370
|
}
|
|
372
371
|
);
|
|
373
372
|
}
|
|
374
373
|
}
|
|
375
374
|
});
|
|
376
375
|
}
|
|
377
|
-
function me(
|
|
378
|
-
const { onWithdraw:
|
|
379
|
-
return
|
|
376
|
+
function me(n) {
|
|
377
|
+
const { onWithdraw: r, partnerSlug: s, getSteamId: t } = k(), a = _();
|
|
378
|
+
return W({
|
|
380
379
|
mutationFn: (i) => {
|
|
381
|
-
if (!
|
|
380
|
+
if (!r)
|
|
382
381
|
throw new Error(
|
|
383
382
|
"No onWithdraw callback provided to PitVoxPartnerProvider. Provide onWithdraw for in-app withdrawal, or use useRegistrationUrl() to link to pitvox.com."
|
|
384
383
|
);
|
|
385
384
|
const o = i || t();
|
|
386
385
|
if (!o) throw new Error("No Steam ID available");
|
|
387
|
-
return n
|
|
386
|
+
return r(n, o);
|
|
388
387
|
},
|
|
389
388
|
onSuccess: () => {
|
|
390
389
|
const i = t();
|
|
391
390
|
a.setQueriesData(
|
|
392
|
-
{ queryKey: ["pitvox", "registration", s,
|
|
391
|
+
{ queryKey: ["pitvox", "registration", s, n] },
|
|
393
392
|
(o) => o ? { ...o, isRegistered: !1 } : { isRegistered: !1, entryList: null }
|
|
394
393
|
), i && a.setQueriesData(
|
|
395
|
-
{ queryKey: ["pitvox", "competition", s,
|
|
394
|
+
{ queryKey: ["pitvox", "competition", s, n, "entrylist"] },
|
|
396
395
|
(o) => o != null && o.drivers ? { ...o, drivers: o.drivers.filter((d) => d.steamId !== i) } : o
|
|
397
396
|
);
|
|
398
397
|
}
|
|
399
398
|
});
|
|
400
399
|
}
|
|
401
|
-
function
|
|
402
|
-
const { onRegister:
|
|
400
|
+
function ee() {
|
|
401
|
+
const { onRegister: n, onWithdraw: r } = k(), s = !!(n && r);
|
|
403
402
|
return { isPowerMode: s, isBasicMode: !s };
|
|
404
403
|
}
|
|
405
|
-
function
|
|
406
|
-
const { pitvoxUrl:
|
|
407
|
-
return `${
|
|
404
|
+
function ne(n) {
|
|
405
|
+
const { pitvoxUrl: r, partnerSlug: s } = k();
|
|
406
|
+
return `${r}/p/${s}/competitions/${n}/register`;
|
|
408
407
|
}
|
|
409
|
-
const
|
|
408
|
+
const Ke = {
|
|
410
409
|
formula: "Formula",
|
|
411
410
|
gt3: "GT3",
|
|
412
411
|
gt2: "GT2",
|
|
@@ -431,92 +430,92 @@ const Ve = {
|
|
|
431
430
|
{ id: "tier", tags: ["hypercar", "supercar", "sports_car", "hot_hatch", "lightweight"] },
|
|
432
431
|
{ id: "era", tags: ["1960s", "1970s", "1980s", "1990s", "2000s", "2010s", "2020s"] }
|
|
433
432
|
];
|
|
434
|
-
function
|
|
435
|
-
for (const
|
|
436
|
-
if (
|
|
433
|
+
function He(n) {
|
|
434
|
+
for (const r of ve)
|
|
435
|
+
if (r.tags.includes(n)) return r.id;
|
|
437
436
|
return "other";
|
|
438
437
|
}
|
|
439
|
-
function he(
|
|
440
|
-
if (
|
|
438
|
+
function he(n, r) {
|
|
439
|
+
if (r.size === 0) return !0;
|
|
441
440
|
const s = {};
|
|
442
|
-
for (const t of
|
|
443
|
-
const a =
|
|
441
|
+
for (const t of r) {
|
|
442
|
+
const a = He(t);
|
|
444
443
|
s[a] || (s[a] = []), s[a].push(t);
|
|
445
444
|
}
|
|
446
445
|
for (const t of Object.values(s))
|
|
447
|
-
if (!t.some((a) =>
|
|
446
|
+
if (!t.some((a) => n.includes(a))) return !1;
|
|
448
447
|
return !0;
|
|
449
448
|
}
|
|
450
|
-
function xe(
|
|
451
|
-
const [s, t] =
|
|
449
|
+
function xe(n, r) {
|
|
450
|
+
const [s, t] = D(/* @__PURE__ */ new Set()), a = n !== void 0, i = a ? n : s, o = H((h) => {
|
|
452
451
|
const l = new Set(i);
|
|
453
|
-
l.has(
|
|
454
|
-
}, [i, a,
|
|
455
|
-
a &&
|
|
456
|
-
}, [a,
|
|
452
|
+
l.has(h) ? l.delete(h) : l.add(h), a && r ? r(l) : t(l);
|
|
453
|
+
}, [i, a, r]), d = H(() => {
|
|
454
|
+
a && r ? r(/* @__PURE__ */ new Set()) : t(/* @__PURE__ */ new Set());
|
|
455
|
+
}, [a, r]);
|
|
457
456
|
return { activeTags: i, toggle: o, clear: d };
|
|
458
457
|
}
|
|
459
|
-
function
|
|
460
|
-
const [
|
|
458
|
+
function O(n) {
|
|
459
|
+
const [r, s] = D(n), t = H((a) => {
|
|
461
460
|
s(
|
|
462
461
|
(i) => i.key === a ? { key: a, dir: i.dir === "asc" ? "desc" : "asc" } : { key: a, dir: a.includes("timestamp") || a.includes("Date") ? "desc" : "asc" }
|
|
463
462
|
);
|
|
464
463
|
}, []);
|
|
465
|
-
return [
|
|
464
|
+
return [r, t];
|
|
466
465
|
}
|
|
467
|
-
function
|
|
468
|
-
return [...
|
|
469
|
-
const i = s(t,
|
|
466
|
+
function z(n, r, s) {
|
|
467
|
+
return [...n].sort((t, a) => {
|
|
468
|
+
const i = s(t, r.key), o = s(a, r.key);
|
|
470
469
|
if (i == null && o == null) return 0;
|
|
471
470
|
if (i == null) return 1;
|
|
472
471
|
if (o == null) return -1;
|
|
473
472
|
const d = typeof i == "string" ? i.localeCompare(o) : i - o;
|
|
474
|
-
return
|
|
473
|
+
return r.dir === "desc" ? -d : d;
|
|
475
474
|
});
|
|
476
475
|
}
|
|
477
|
-
function ge(
|
|
478
|
-
const s =
|
|
476
|
+
function ge(n, r = !1) {
|
|
477
|
+
const s = r ? n == null ? void 0 : n.filter((t) => t.isValid) : n;
|
|
479
478
|
return s != null && s.length ? {
|
|
480
479
|
s1: Math.min(...s.map((t) => t.sector1Ms).filter(Boolean)),
|
|
481
480
|
s2: Math.min(...s.map((t) => t.sector2Ms).filter(Boolean)),
|
|
482
481
|
s3: Math.min(...s.map((t) => t.sector3Ms).filter(Boolean))
|
|
483
482
|
} : null;
|
|
484
483
|
}
|
|
485
|
-
function
|
|
486
|
-
return
|
|
484
|
+
function We({ active: n, dir: r }) {
|
|
485
|
+
return n ? r === "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" }) });
|
|
487
486
|
}
|
|
488
|
-
function
|
|
487
|
+
function $({ label: n, sortKey: r, config: s, onSort: t, className: a = "" }) {
|
|
489
488
|
return /* @__PURE__ */ e(
|
|
490
489
|
"th",
|
|
491
490
|
{
|
|
492
491
|
className: `pvx-th pvx-th--sortable ${a}`,
|
|
493
|
-
onClick: () => t(
|
|
492
|
+
onClick: () => t(r),
|
|
494
493
|
children: /* @__PURE__ */ c("span", { className: "pvx-th-inner", children: [
|
|
495
|
-
|
|
496
|
-
/* @__PURE__ */ e(
|
|
494
|
+
n,
|
|
495
|
+
/* @__PURE__ */ e(We, { active: s.key === r, dir: s.dir })
|
|
497
496
|
] })
|
|
498
497
|
}
|
|
499
498
|
);
|
|
500
499
|
}
|
|
501
|
-
function
|
|
502
|
-
const { displayName: s, avatarUrl: t } = n
|
|
500
|
+
function G({ userId: n, getUserDisplay: r }) {
|
|
501
|
+
const { displayName: s, avatarUrl: t } = r(n);
|
|
503
502
|
return /* @__PURE__ */ c("span", { className: "pvx-driver", children: [
|
|
504
503
|
t ? /* @__PURE__ */ e("img", { src: t, alt: "", className: "pvx-driver-avatar" }) : /* @__PURE__ */ e("span", { className: "pvx-driver-avatar pvx-driver-avatar--placeholder" }),
|
|
505
504
|
/* @__PURE__ */ e("span", { className: "pvx-driver-name", children: s })
|
|
506
505
|
] });
|
|
507
506
|
}
|
|
508
|
-
function re({ rank:
|
|
509
|
-
return /* @__PURE__ */ e("span", { className:
|
|
507
|
+
function re({ rank: n, podium: r = !1 }) {
|
|
508
|
+
return /* @__PURE__ */ e("span", { className: r ? n === 1 ? "pvx-rank pvx-rank--gold" : n === 2 ? "pvx-rank pvx-rank--silver" : n === 3 ? "pvx-rank pvx-rank--bronze" : "pvx-rank" : "pvx-rank", children: n });
|
|
510
509
|
}
|
|
511
|
-
function fe({ availableTags:
|
|
512
|
-
if (!
|
|
513
|
-
const a = ve.map((i) => ({ id: i.id, tags: i.tags.filter((o) =>
|
|
510
|
+
function fe({ availableTags: n, activeTags: r, onToggle: s, onClear: t }) {
|
|
511
|
+
if (!n || n.length < 2) return null;
|
|
512
|
+
const a = ve.map((i) => ({ id: i.id, tags: i.tags.filter((o) => n.includes(o)) })).filter((i) => i.tags.length > 0);
|
|
514
513
|
return /* @__PURE__ */ c("div", { className: "pvx-tag-bar", children: [
|
|
515
514
|
/* @__PURE__ */ e(
|
|
516
515
|
"button",
|
|
517
516
|
{
|
|
518
517
|
onClick: t,
|
|
519
|
-
className: `pvx-tag ${
|
|
518
|
+
className: `pvx-tag ${r.size === 0 ? "pvx-tag--active" : ""}`,
|
|
520
519
|
children: "All"
|
|
521
520
|
}
|
|
522
521
|
),
|
|
@@ -526,247 +525,247 @@ function fe({ availableTags: r, activeTags: n, onToggle: s, onClear: t }) {
|
|
|
526
525
|
"button",
|
|
527
526
|
{
|
|
528
527
|
onClick: () => s(d),
|
|
529
|
-
className: `pvx-tag ${
|
|
530
|
-
children:
|
|
528
|
+
className: `pvx-tag ${r.has(d) ? "pvx-tag--active" : ""}`,
|
|
529
|
+
children: Ke[d] || d
|
|
531
530
|
},
|
|
532
531
|
d
|
|
533
532
|
))
|
|
534
533
|
] }, i.id))
|
|
535
534
|
] });
|
|
536
535
|
}
|
|
537
|
-
function
|
|
538
|
-
return /* @__PURE__ */ e("nav", { className: "pvx-breadcrumb", "aria-label": "Breadcrumb", children: /* @__PURE__ */ e("ol", { className: "pvx-breadcrumb-list", children:
|
|
539
|
-
const t = s ===
|
|
536
|
+
function te({ segments: n }) {
|
|
537
|
+
return /* @__PURE__ */ e("nav", { className: "pvx-breadcrumb", "aria-label": "Breadcrumb", children: /* @__PURE__ */ e("ol", { className: "pvx-breadcrumb-list", children: n.map((r, s) => {
|
|
538
|
+
const t = s === n.length - 1;
|
|
540
539
|
return /* @__PURE__ */ c("li", { className: "pvx-breadcrumb-item", children: [
|
|
541
540
|
s > 0 && /* @__PURE__ */ e("svg", { className: "pvx-breadcrumb-chevron", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 4.5l7.5 7.5-7.5 7.5" }) }),
|
|
542
|
-
!t &&
|
|
543
|
-
] },
|
|
541
|
+
!t && r.onClick ? /* @__PURE__ */ e("button", { onClick: r.onClick, className: "pvx-breadcrumb-link", children: r.label }) : /* @__PURE__ */ e("span", { className: "pvx-breadcrumb-current", children: r.label })
|
|
542
|
+
] }, r.key);
|
|
544
543
|
}) }) });
|
|
545
544
|
}
|
|
546
|
-
function
|
|
545
|
+
function V({ message: n }) {
|
|
547
546
|
return /* @__PURE__ */ c("div", { className: "pvx-empty", children: [
|
|
548
547
|
/* @__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" }) }),
|
|
549
|
-
/* @__PURE__ */ e("p", { children:
|
|
548
|
+
/* @__PURE__ */ e("p", { children: n })
|
|
550
549
|
] });
|
|
551
550
|
}
|
|
552
|
-
function
|
|
551
|
+
function K() {
|
|
553
552
|
return /* @__PURE__ */ e("div", { className: "pvx-loading", children: "Loading..." });
|
|
554
553
|
}
|
|
555
|
-
function
|
|
554
|
+
function Oe() {
|
|
556
555
|
return /* @__PURE__ */ e("svg", { className: "pvx-icon pvx-icon--valid", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 12.75l6 6 9-13.5" }) });
|
|
557
556
|
}
|
|
558
|
-
function
|
|
557
|
+
function ze() {
|
|
559
558
|
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" }) });
|
|
560
559
|
}
|
|
561
|
-
function
|
|
562
|
-
const [d,
|
|
563
|
-
var
|
|
564
|
-
if (!((
|
|
565
|
-
const
|
|
566
|
-
for (const N of
|
|
567
|
-
N.recordByTag && Object.keys(N.recordByTag).forEach((
|
|
568
|
-
return s.tags.filter((N) =>
|
|
569
|
-
}, [
|
|
570
|
-
var
|
|
571
|
-
if (!
|
|
572
|
-
let
|
|
560
|
+
function Gn({ tracks: n, isLoading: r, carMetadata: s, getUserDisplay: t, onTrackSelect: a, tags: i, onTagChange: o }) {
|
|
561
|
+
const [d, h] = O({ key: "record.timestamp", dir: "desc" }), { activeTags: l, toggle: v, clear: f } = xe(i, o), g = w(() => {
|
|
562
|
+
var u;
|
|
563
|
+
if (!((u = s == null ? void 0 : s.tags) != null && u.length)) return [];
|
|
564
|
+
const x = /* @__PURE__ */ new Set();
|
|
565
|
+
for (const N of n || [])
|
|
566
|
+
N.recordByTag && Object.keys(N.recordByTag).forEach((m) => x.add(m));
|
|
567
|
+
return s.tags.filter((N) => x.has(N));
|
|
568
|
+
}, [n, s]), p = w(() => n ? l.size === 0 ? n : n.map((x) => {
|
|
569
|
+
var m, y;
|
|
570
|
+
if (!x.recordByTag) return null;
|
|
571
|
+
let u = null;
|
|
573
572
|
const N = /* @__PURE__ */ new Set();
|
|
574
|
-
for (const
|
|
575
|
-
if (N.has(
|
|
576
|
-
N.add(
|
|
577
|
-
const
|
|
578
|
-
he(
|
|
573
|
+
for (const C of Object.values(x.recordByTag)) {
|
|
574
|
+
if (N.has(C.carId)) continue;
|
|
575
|
+
N.add(C.carId);
|
|
576
|
+
const M = ((y = (m = s == null ? void 0 : s.cars) == null ? void 0 : m[C.carId]) == null ? void 0 : y.tags) || ["sports_car"];
|
|
577
|
+
he(M, l) && (!u || C.lapTimeMs < u.lapTimeMs) && (u = C);
|
|
579
578
|
}
|
|
580
|
-
return
|
|
581
|
-
...
|
|
579
|
+
return u ? {
|
|
580
|
+
...x,
|
|
582
581
|
record: {
|
|
583
|
-
visibleId:
|
|
584
|
-
carId:
|
|
585
|
-
carDisplayName: I(
|
|
586
|
-
lapTimeMs:
|
|
587
|
-
timestamp:
|
|
582
|
+
visibleId: u.steamId || u.identifier,
|
|
583
|
+
carId: u.carId,
|
|
584
|
+
carDisplayName: I(u.carId),
|
|
585
|
+
lapTimeMs: u.lapTimeMs,
|
|
586
|
+
timestamp: u.recordedAt
|
|
588
587
|
}
|
|
589
588
|
} : null;
|
|
590
|
-
}).filter(Boolean) : [], [
|
|
591
|
-
var N,
|
|
592
|
-
switch (
|
|
589
|
+
}).filter(Boolean) : [], [n, l, s]), b = w(() => z(p, d, (x, u) => {
|
|
590
|
+
var N, m;
|
|
591
|
+
switch (u) {
|
|
593
592
|
case "displayName":
|
|
594
|
-
return
|
|
593
|
+
return x.displayName;
|
|
595
594
|
case "record.lapTimeMs":
|
|
596
|
-
return (N =
|
|
595
|
+
return (N = x.record) == null ? void 0 : N.lapTimeMs;
|
|
597
596
|
case "driverCount":
|
|
598
|
-
return
|
|
597
|
+
return x.driverCount || 0;
|
|
599
598
|
case "carCount":
|
|
600
|
-
return
|
|
599
|
+
return x.carCount || 0;
|
|
601
600
|
case "record.timestamp":
|
|
602
601
|
default:
|
|
603
|
-
return (
|
|
602
|
+
return (m = x.record) != null && m.timestamp ? new Date(x.record.timestamp).getTime() : 0;
|
|
604
603
|
}
|
|
605
|
-
}), [
|
|
606
|
-
return
|
|
604
|
+
}), [p, d]);
|
|
605
|
+
return r ? /* @__PURE__ */ e(K, {}) : n != null && n.length ? /* @__PURE__ */ c("div", { className: "pvx-card", children: [
|
|
607
606
|
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e("h2", { className: "pvx-card-title", children: "Track Records" }) }),
|
|
608
|
-
/* @__PURE__ */ e(fe, { availableTags:
|
|
607
|
+
/* @__PURE__ */ e(fe, { availableTags: g, activeTags: l, onToggle: v, onClear: f }),
|
|
609
608
|
/* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ c("table", { className: "pvx-table", children: [
|
|
610
609
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ c("tr", { className: "pvx-thead-row", children: [
|
|
611
|
-
/* @__PURE__ */ e(
|
|
610
|
+
/* @__PURE__ */ e($, { label: "Track", sortKey: "displayName", config: d, onSort: h }),
|
|
612
611
|
/* @__PURE__ */ e("th", { className: "pvx-th", children: "Record Holder" }),
|
|
613
612
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-lg", children: "Car" }),
|
|
614
|
-
/* @__PURE__ */ e(
|
|
615
|
-
/* @__PURE__ */ e(
|
|
616
|
-
/* @__PURE__ */ e(
|
|
617
|
-
/* @__PURE__ */ e(
|
|
613
|
+
/* @__PURE__ */ e($, { label: "Lap Time", sortKey: "record.lapTimeMs", config: d, onSort: h }),
|
|
614
|
+
/* @__PURE__ */ e($, { label: "Drivers", sortKey: "driverCount", config: d, onSort: h, className: "pvx-hidden-below-md" }),
|
|
615
|
+
/* @__PURE__ */ e($, { label: "Cars", sortKey: "carCount", config: d, onSort: h, className: "pvx-hidden-below-lg" }),
|
|
616
|
+
/* @__PURE__ */ e($, { label: "Date", sortKey: "record.timestamp", config: d, onSort: h, className: "pvx-hidden-below-xl" })
|
|
618
617
|
] }) }),
|
|
619
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: b.map((
|
|
620
|
-
var
|
|
618
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: b.map((x) => {
|
|
619
|
+
var u, N, m;
|
|
621
620
|
return /* @__PURE__ */ c(
|
|
622
621
|
"tr",
|
|
623
622
|
{
|
|
624
623
|
className: "pvx-row pvx-row--clickable",
|
|
625
|
-
onClick: () => a(
|
|
624
|
+
onClick: () => a(x.id, x.layout),
|
|
626
625
|
children: [
|
|
627
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children:
|
|
628
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: (
|
|
629
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-lg", children: ((N =
|
|
630
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
631
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children:
|
|
632
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children:
|
|
633
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: (
|
|
626
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: x.displayName }),
|
|
627
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: (u = x.record) != null && u.visibleId ? /* @__PURE__ */ e(G, { userId: x.record.visibleId, getUserDisplay: t }) : "-" }),
|
|
628
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-lg", children: ((N = x.record) == null ? void 0 : N.carDisplayName) || "-" }),
|
|
629
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: x.record ? A(x.record.lapTimeMs) : "-" }),
|
|
630
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children: x.driverCount || "-" }),
|
|
631
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: x.carCount || "-" }),
|
|
632
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: (m = x.record) != null && m.timestamp ? j(x.record.timestamp) : "-" })
|
|
634
633
|
]
|
|
635
634
|
},
|
|
636
|
-
`${
|
|
635
|
+
`${x.id}|${x.layout || ""}`
|
|
637
636
|
);
|
|
638
637
|
}) })
|
|
639
638
|
] }) })
|
|
640
|
-
] }) : /* @__PURE__ */ e(
|
|
641
|
-
}
|
|
642
|
-
function
|
|
643
|
-
const [l,
|
|
644
|
-
var y,
|
|
645
|
-
if (!
|
|
646
|
-
const
|
|
647
|
-
for (const
|
|
648
|
-
(((
|
|
649
|
-
return t.tags.filter((
|
|
650
|
-
}, [
|
|
651
|
-
var
|
|
652
|
-
const y = ((
|
|
653
|
-
return he(y,
|
|
654
|
-
}) : [], [
|
|
639
|
+
] }) : /* @__PURE__ */ e(V, { message: "No lap times recorded yet." });
|
|
640
|
+
}
|
|
641
|
+
function Qn({ entries: n, isLoading: r, track: s, carMetadata: t, getUserDisplay: a, onCarSelect: i, onNavigate: o, tags: d, onTagChange: h }) {
|
|
642
|
+
const [l, v] = O({ key: "lapTimeMs", dir: "asc" }), { activeTags: f, toggle: g, clear: p } = xe(d, h), b = w(() => {
|
|
643
|
+
var y, C, M;
|
|
644
|
+
if (!n || !((y = t == null ? void 0 : t.tags) != null && y.length)) return [];
|
|
645
|
+
const m = /* @__PURE__ */ new Set();
|
|
646
|
+
for (const R of n)
|
|
647
|
+
(((M = (C = t.cars) == null ? void 0 : C[R.carId]) == null ? void 0 : M.tags) || ["sports_car"]).forEach((E) => m.add(E));
|
|
648
|
+
return t.tags.filter((R) => m.has(R));
|
|
649
|
+
}, [n, t]), x = w(() => n ? f.size === 0 ? n : n.filter((m) => {
|
|
650
|
+
var C, M;
|
|
651
|
+
const y = ((M = (C = t == null ? void 0 : t.cars) == null ? void 0 : C[m.carId]) == null ? void 0 : M.tags) || ["sports_car"];
|
|
652
|
+
return he(y, f);
|
|
653
|
+
}) : [], [n, f, t]), u = w(() => z(x, l, (m, y) => {
|
|
655
654
|
switch (y) {
|
|
656
655
|
case "carId":
|
|
657
|
-
return I(
|
|
656
|
+
return I(m.carId);
|
|
658
657
|
case "driverCount":
|
|
659
|
-
return
|
|
658
|
+
return m.driverCount || 0;
|
|
660
659
|
case "lapTimeMs":
|
|
661
660
|
default:
|
|
662
|
-
return
|
|
661
|
+
return m.lapTimeMs;
|
|
663
662
|
}
|
|
664
|
-
}), [
|
|
663
|
+
}), [x, l]), N = [
|
|
665
664
|
{ key: "tracks", label: "Tracks", onClick: () => o("tracks") },
|
|
666
665
|
{ key: "track", label: s.displayName }
|
|
667
666
|
];
|
|
668
|
-
return
|
|
669
|
-
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e(
|
|
670
|
-
/* @__PURE__ */ e(fe, { availableTags: b, activeTags:
|
|
671
|
-
|
|
667
|
+
return r ? /* @__PURE__ */ e(K, {}) : /* @__PURE__ */ c("div", { className: "pvx-card", children: [
|
|
668
|
+
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e(te, { segments: N }) }),
|
|
669
|
+
/* @__PURE__ */ e(fe, { availableTags: b, activeTags: f, onToggle: g, onClear: p }),
|
|
670
|
+
n != null && n.length ? /* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ c("table", { className: "pvx-table", children: [
|
|
672
671
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ c("tr", { className: "pvx-thead-row", children: [
|
|
673
672
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-th--narrow", children: "#" }),
|
|
674
|
-
/* @__PURE__ */ e(
|
|
673
|
+
/* @__PURE__ */ e($, { label: "Car", sortKey: "carId", config: l, onSort: v }),
|
|
675
674
|
/* @__PURE__ */ e("th", { className: "pvx-th", children: "Record Holder" }),
|
|
676
|
-
/* @__PURE__ */ e(
|
|
677
|
-
/* @__PURE__ */ e(
|
|
675
|
+
/* @__PURE__ */ e($, { label: "Lap Time", sortKey: "lapTimeMs", config: l, onSort: v }),
|
|
676
|
+
/* @__PURE__ */ e($, { label: "Drivers", sortKey: "driverCount", config: l, onSort: v, className: "pvx-hidden-below-md" }),
|
|
678
677
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-lg", children: "Date" })
|
|
679
678
|
] }) }),
|
|
680
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children:
|
|
679
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: u.map((m, y) => /* @__PURE__ */ c(
|
|
681
680
|
"tr",
|
|
682
681
|
{
|
|
683
682
|
className: "pvx-row pvx-row--clickable",
|
|
684
|
-
onClick: () => i(
|
|
683
|
+
onClick: () => i(m.carId),
|
|
685
684
|
children: [
|
|
686
685
|
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(re, { rank: y + 1, podium: !0 }) }),
|
|
687
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: I(
|
|
688
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(
|
|
689
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
690
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children:
|
|
691
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-lg", children:
|
|
686
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: I(m.carId) }),
|
|
687
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(G, { userId: m.steamId || m.userId, getUserDisplay: a }) }),
|
|
688
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: A(m.lapTimeMs) }),
|
|
689
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-md", children: m.driverCount || "-" }),
|
|
690
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-lg", children: m.recordedAt ? j(m.recordedAt) : "-" })
|
|
692
691
|
]
|
|
693
692
|
},
|
|
694
|
-
|
|
693
|
+
m.carId
|
|
695
694
|
)) })
|
|
696
|
-
] }) }) : /* @__PURE__ */ e(
|
|
695
|
+
] }) }) : /* @__PURE__ */ e(V, { message: "No lap times for this track yet." })
|
|
697
696
|
] });
|
|
698
697
|
}
|
|
699
|
-
function
|
|
700
|
-
const [
|
|
698
|
+
function Yn({ entries: n, isLoading: r, track: s, carId: t, getUserDisplay: a, onDriverSelect: i, onNavigate: o, highlightId: d }) {
|
|
699
|
+
const [h, l] = O({ key: "lapTimeMs", dir: "asc" }), v = w(() => ge(n), [n]), f = w(() => z(n || [], h, (p, b) => {
|
|
701
700
|
switch (b) {
|
|
702
701
|
case "userId":
|
|
703
|
-
return a(
|
|
702
|
+
return a(p.steamId || p.userId).displayName;
|
|
704
703
|
case "lapCount":
|
|
705
|
-
return
|
|
704
|
+
return p.lapCount || 0;
|
|
706
705
|
case "lapTimeMs":
|
|
707
706
|
default:
|
|
708
|
-
return
|
|
707
|
+
return p.lapTimeMs;
|
|
709
708
|
}
|
|
710
|
-
}), [
|
|
709
|
+
}), [n, h, a]), g = [
|
|
711
710
|
{ key: "tracks", label: "Tracks", onClick: () => o("tracks") },
|
|
712
711
|
{ key: "track", label: s.displayName, onClick: () => o("track") },
|
|
713
712
|
{ key: "car", label: I(t) }
|
|
714
713
|
];
|
|
715
|
-
return
|
|
716
|
-
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e(
|
|
717
|
-
|
|
714
|
+
return r ? /* @__PURE__ */ e(K, {}) : /* @__PURE__ */ c("div", { className: "pvx-card", children: [
|
|
715
|
+
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ e(te, { segments: g }) }),
|
|
716
|
+
n != null && n.length ? /* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ c("table", { className: "pvx-table", children: [
|
|
718
717
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ c("tr", { className: "pvx-thead-row", children: [
|
|
719
718
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-th--narrow", children: "#" }),
|
|
720
|
-
/* @__PURE__ */ e(
|
|
721
|
-
/* @__PURE__ */ e(
|
|
719
|
+
/* @__PURE__ */ e($, { label: "Driver", sortKey: "userId", config: h, onSort: l }),
|
|
720
|
+
/* @__PURE__ */ e($, { label: "Lap Time", sortKey: "lapTimeMs", config: h, onSort: l }),
|
|
722
721
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "S1" }),
|
|
723
722
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "S2" }),
|
|
724
723
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "S3" }),
|
|
725
724
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-lg", children: "Tyre" }),
|
|
726
725
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-xl", children: "Fuel" }),
|
|
727
|
-
/* @__PURE__ */ e(
|
|
726
|
+
/* @__PURE__ */ e($, { label: "Laps", sortKey: "lapCount", config: h, onSort: l, className: "pvx-hidden-below-lg" }),
|
|
728
727
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-xl", children: "Date" })
|
|
729
728
|
] }) }),
|
|
730
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children:
|
|
731
|
-
const
|
|
729
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: f.map((p, b) => {
|
|
730
|
+
const x = b + 1, u = p.steamId || p.userId, N = v && p.sector1Ms === v.s1, m = v && p.sector2Ms === v.s2, y = v && p.sector3Ms === v.s3;
|
|
732
731
|
return /* @__PURE__ */ c(
|
|
733
732
|
"tr",
|
|
734
733
|
{
|
|
735
|
-
className: `pvx-row pvx-row--clickable ${d &&
|
|
736
|
-
onClick: () => i(
|
|
734
|
+
className: `pvx-row pvx-row--clickable ${d && u === d ? "pvx-row--highlight" : x <= 3 ? "pvx-row--podium" : ""}`,
|
|
735
|
+
onClick: () => i(u),
|
|
737
736
|
children: [
|
|
738
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(re, { rank:
|
|
739
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ e(
|
|
740
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
741
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${N ? "pvx-td--best-sector" : ""}`, children:
|
|
742
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
743
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${y ? "pvx-td--best-sector" : ""}`, children:
|
|
744
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title: ce(
|
|
745
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-xl", children:
|
|
746
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children:
|
|
747
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children:
|
|
737
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(re, { rank: x, podium: !0 }) }),
|
|
738
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ e(G, { userId: u, getUserDisplay: a }) }),
|
|
739
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: A(p.lapTimeMs) }),
|
|
740
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${N ? "pvx-td--best-sector" : ""}`, children: B(p.sector1Ms) }),
|
|
741
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${m ? "pvx-td--best-sector" : ""}`, children: B(p.sector2Ms) }),
|
|
742
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${y ? "pvx-td--best-sector" : ""}`, children: B(p.sector3Ms) }),
|
|
743
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title: ce(p.tyreCompound), children: p.tyreCompound || "-" }),
|
|
744
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-xl", children: p.startingFuelL ? `${p.startingFuelL}L` : "-" }),
|
|
745
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: p.lapCount || "-" }),
|
|
746
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: p.recordedAt ? j(p.recordedAt) : "-" })
|
|
748
747
|
]
|
|
749
748
|
},
|
|
750
|
-
|
|
749
|
+
u
|
|
751
750
|
);
|
|
752
751
|
}) })
|
|
753
|
-
] }) }) : /* @__PURE__ */ e(
|
|
752
|
+
] }) }) : /* @__PURE__ */ e(V, { message: "No lap times for this car yet." })
|
|
754
753
|
] });
|
|
755
754
|
}
|
|
756
|
-
function
|
|
757
|
-
const { data: l, driverName:
|
|
758
|
-
const
|
|
759
|
-
return
|
|
755
|
+
function Jn({ userId: n, track: r, carId: s, game: t, gameVersion: a, showInvalid: i, getUserDisplay: o, onToggleInvalid: d, onNavigate: h }) {
|
|
756
|
+
const { data: l, driverName: v, theoreticalBest: f, isLoading: g } = _e(n, r.id, r.layout, s, { showInvalid: i, game: t, gameVersion: a }), { displayName: p, avatarUrl: b } = o(n, v), x = w(() => ge(l, !0), [l]), u = w(() => {
|
|
757
|
+
const m = (l == null ? void 0 : l.filter((y) => y.isValid)) || [];
|
|
758
|
+
return m.length ? Math.min(...m.map((y) => y.lapTimeMs)) : null;
|
|
760
759
|
}, [l]), N = [
|
|
761
|
-
{ key: "tracks", label: "Tracks", onClick: () =>
|
|
762
|
-
{ key: "track", label:
|
|
763
|
-
{ key: "car", label: I(s), onClick: () =>
|
|
764
|
-
{ key: "driver", label:
|
|
760
|
+
{ key: "tracks", label: "Tracks", onClick: () => h("tracks") },
|
|
761
|
+
{ key: "track", label: r.displayName, onClick: () => h("track") },
|
|
762
|
+
{ key: "car", label: I(s), onClick: () => h("car") },
|
|
763
|
+
{ key: "driver", label: p }
|
|
765
764
|
];
|
|
766
|
-
return
|
|
765
|
+
return g ? /* @__PURE__ */ e(K, {}) : /* @__PURE__ */ c("div", { className: "pvx-card", children: [
|
|
767
766
|
/* @__PURE__ */ c("div", { className: "pvx-card-header pvx-card-header--split", children: [
|
|
768
767
|
/* @__PURE__ */ c("div", { className: "pvx-card-header-left", children: [
|
|
769
|
-
/* @__PURE__ */ e(
|
|
768
|
+
/* @__PURE__ */ e(te, { segments: N }),
|
|
770
769
|
b ? /* @__PURE__ */ e("img", { src: b, alt: "", className: "pvx-driver-avatar pvx-driver-avatar--lg" }) : /* @__PURE__ */ e("span", { className: "pvx-driver-avatar pvx-driver-avatar--lg pvx-driver-avatar--placeholder" })
|
|
771
770
|
] }),
|
|
772
771
|
/* @__PURE__ */ c("label", { className: "pvx-checkbox-label", children: [
|
|
@@ -782,16 +781,16 @@ function Qr({ userId: r, track: n, carId: s, game: t, gameVersion: a, showInvali
|
|
|
782
781
|
/* @__PURE__ */ e("span", { children: "Show invalid laps" })
|
|
783
782
|
] })
|
|
784
783
|
] }),
|
|
785
|
-
|
|
784
|
+
f && /* @__PURE__ */ c("div", { className: "pvx-theoretical-best", children: [
|
|
786
785
|
/* @__PURE__ */ e("span", { className: "pvx-theoretical-best-label", children: "Theoretical Best:" }),
|
|
787
|
-
/* @__PURE__ */ e("span", { className: "pvx-theoretical-best-time", children:
|
|
786
|
+
/* @__PURE__ */ e("span", { className: "pvx-theoretical-best-time", children: A(f.lapTimeMs) }),
|
|
788
787
|
/* @__PURE__ */ c("span", { className: "pvx-theoretical-best-sectors", children: [
|
|
789
788
|
"(",
|
|
790
|
-
|
|
789
|
+
B(f.sector1Ms),
|
|
791
790
|
" + ",
|
|
792
|
-
|
|
791
|
+
B(f.sector2Ms),
|
|
793
792
|
" + ",
|
|
794
|
-
|
|
793
|
+
B(f.sector3Ms),
|
|
795
794
|
")"
|
|
796
795
|
] })
|
|
797
796
|
] }),
|
|
@@ -808,43 +807,43 @@ function Qr({ userId: r, track: n, carId: s, game: t, gameVersion: a, showInvali
|
|
|
808
807
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-lg", children: "Fuel" }),
|
|
809
808
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-xl", children: "Date" })
|
|
810
809
|
] }) }),
|
|
811
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: l.map((
|
|
812
|
-
const
|
|
813
|
-
let
|
|
814
|
-
return
|
|
815
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e("span", { className: `pvx-rank ${
|
|
816
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-md", children:
|
|
817
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
818
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
819
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
820
|
-
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${
|
|
821
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", title:
|
|
822
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title: ce(
|
|
823
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children:
|
|
824
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children:
|
|
825
|
-
] },
|
|
810
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: l.map((m, y) => {
|
|
811
|
+
const C = m.isValid && m.lapTimeMs === u, M = x && m.isValid && m.sector1Ms === x.s1, R = x && m.isValid && m.sector2Ms === x.s2, S = x && m.isValid && m.sector3Ms === x.s3;
|
|
812
|
+
let E = "pvx-row";
|
|
813
|
+
return m.isValid || (E += " pvx-row--invalid"), C && (E += " pvx-row--personal-best"), /* @__PURE__ */ c("tr", { className: E, children: [
|
|
814
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e("span", { className: `pvx-rank ${C ? "pvx-rank--gold" : ""}`, children: y + 1 }) }),
|
|
815
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-md", children: m.lapNumber || "-" }),
|
|
816
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: A(m.lapTimeMs) }),
|
|
817
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${M ? "pvx-td--best-sector" : ""}`, children: B(m.sector1Ms) }),
|
|
818
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${R ? "pvx-td--best-sector" : ""}`, children: B(m.sector2Ms) }),
|
|
819
|
+
/* @__PURE__ */ e("td", { className: `pvx-td pvx-td--mono pvx-td--sector pvx-hidden-below-sm ${S ? "pvx-td--best-sector" : ""}`, children: B(m.sector3Ms) }),
|
|
820
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", title: m.isValid ? void 0 : m.invalidReason || "Invalid", children: m.isValid ? /* @__PURE__ */ e(Oe, {}) : /* @__PURE__ */ e(ze, {}) }),
|
|
821
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", title: ce(m.tyreCompound), children: m.tyreCompound || "-" }),
|
|
822
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-lg", children: m.startingFuelL ? `${m.startingFuelL}L` : "-" }),
|
|
823
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--muted pvx-hidden-below-xl", children: j(m.timestamp) })
|
|
824
|
+
] }, m.id);
|
|
826
825
|
}) })
|
|
827
|
-
] }) }) : /* @__PURE__ */ e(
|
|
826
|
+
] }) }) : /* @__PURE__ */ e(V, { message: i ? "No laps recorded for this combination." : 'No valid laps. Try enabling "Show invalid laps".' })
|
|
828
827
|
] });
|
|
829
828
|
}
|
|
830
|
-
function
|
|
831
|
-
const [o, d] =
|
|
832
|
-
switch (
|
|
829
|
+
function Zn({ drivers: n, isLoading: r, getUserDisplay: s, game: t, gameVersion: a, onComboSelect: i }) {
|
|
830
|
+
const [o, d] = O({ key: "rank", dir: "asc" }), [h, l] = D(null), v = w(() => n ? z(n, o, (g, p) => {
|
|
831
|
+
switch (p) {
|
|
833
832
|
case "rating":
|
|
834
|
-
return
|
|
833
|
+
return g.rating;
|
|
835
834
|
case "comboCount":
|
|
836
|
-
return
|
|
835
|
+
return g.comboCount || 0;
|
|
837
836
|
case "distinctCars":
|
|
838
|
-
return
|
|
837
|
+
return g.distinctCars || 0;
|
|
839
838
|
case "rank":
|
|
840
839
|
default:
|
|
841
|
-
return
|
|
840
|
+
return g.rank;
|
|
842
841
|
}
|
|
843
|
-
}) : [], [
|
|
844
|
-
if (
|
|
845
|
-
if (!(
|
|
846
|
-
return /* @__PURE__ */ e("div", { className: "pvx-card", children: /* @__PURE__ */ e(
|
|
847
|
-
const
|
|
842
|
+
}) : [], [n, o]);
|
|
843
|
+
if (r) return /* @__PURE__ */ e(K, {});
|
|
844
|
+
if (!(n != null && n.length))
|
|
845
|
+
return /* @__PURE__ */ e("div", { className: "pvx-card", children: /* @__PURE__ */ e(V, { message: "Not enough data for rankings yet." }) });
|
|
846
|
+
const f = 5;
|
|
848
847
|
return /* @__PURE__ */ c("div", { className: "pvx-card", children: [
|
|
849
848
|
/* @__PURE__ */ c("div", { className: "pvx-card-header pvx-rankings-header", children: [
|
|
850
849
|
/* @__PURE__ */ e("h2", { className: "pvx-card-title", children: "Driver Rankings" }),
|
|
@@ -863,67 +862,67 @@ function Yr({ drivers: r, isLoading: n, getUserDisplay: s, game: t, gameVersion:
|
|
|
863
862
|
] }),
|
|
864
863
|
/* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ c("table", { className: "pvx-table", children: [
|
|
865
864
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ c("tr", { className: "pvx-thead-row", children: [
|
|
866
|
-
/* @__PURE__ */ e(
|
|
865
|
+
/* @__PURE__ */ e($, { label: "#", sortKey: "rank", config: o, onSort: d, className: "pvx-th--narrow" }),
|
|
867
866
|
/* @__PURE__ */ e("th", { className: "pvx-th", children: "Driver" }),
|
|
868
|
-
/* @__PURE__ */ e(
|
|
869
|
-
/* @__PURE__ */ e(
|
|
870
|
-
/* @__PURE__ */ e(
|
|
867
|
+
/* @__PURE__ */ e($, { label: "Rating", sortKey: "rating", config: o, onSort: d }),
|
|
868
|
+
/* @__PURE__ */ e($, { label: "Cars", sortKey: "distinctCars", config: o, onSort: d, className: "pvx-hidden-below-sm" }),
|
|
869
|
+
/* @__PURE__ */ e($, { label: "Combos", sortKey: "comboCount", config: o, onSort: d, className: "pvx-hidden-below-sm" })
|
|
871
870
|
] }) }),
|
|
872
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children:
|
|
873
|
-
const
|
|
871
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: v.map((g) => {
|
|
872
|
+
const p = h === g.identifier;
|
|
874
873
|
return /* @__PURE__ */ e(
|
|
875
|
-
|
|
874
|
+
Ge,
|
|
876
875
|
{
|
|
877
|
-
driver:
|
|
876
|
+
driver: g,
|
|
878
877
|
getUserDisplay: s,
|
|
879
|
-
isExpanded:
|
|
880
|
-
onToggle: () => l(
|
|
881
|
-
colCount:
|
|
878
|
+
isExpanded: p,
|
|
879
|
+
onToggle: () => l(p ? null : g.identifier),
|
|
880
|
+
colCount: f,
|
|
882
881
|
game: t,
|
|
883
882
|
gameVersion: a,
|
|
884
883
|
onComboSelect: i
|
|
885
884
|
},
|
|
886
|
-
|
|
885
|
+
g.identifier
|
|
887
886
|
);
|
|
888
887
|
}) })
|
|
889
888
|
] }) })
|
|
890
889
|
] });
|
|
891
890
|
}
|
|
892
|
-
function
|
|
893
|
-
const
|
|
894
|
-
return /* @__PURE__ */ c(
|
|
891
|
+
function Ge({ driver: n, getUserDisplay: r, isExpanded: s, onToggle: t, colCount: a, game: i, gameVersion: o, onComboSelect: d }) {
|
|
892
|
+
const h = n.identifier;
|
|
893
|
+
return /* @__PURE__ */ c(F, { children: [
|
|
895
894
|
/* @__PURE__ */ c(
|
|
896
895
|
"tr",
|
|
897
896
|
{
|
|
898
|
-
className: `pvx-row pvx-row--clickable ${
|
|
897
|
+
className: `pvx-row pvx-row--clickable ${n.rank <= 3 ? "pvx-row--podium" : ""}`,
|
|
899
898
|
onClick: t,
|
|
900
899
|
children: [
|
|
901
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(re, { rank:
|
|
902
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ e(
|
|
903
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children:
|
|
904
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children:
|
|
900
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(re, { rank: n.rank, podium: !0 }) }),
|
|
901
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary", children: /* @__PURE__ */ e(G, { userId: h, getUserDisplay: r }) }),
|
|
902
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--primary pvx-td--mono", children: n.rating.toFixed(1) }),
|
|
903
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: n.distinctCars || "-" }),
|
|
905
904
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: /* @__PURE__ */ c("span", { className: "pvx-rankings-combo-count", children: [
|
|
906
|
-
|
|
905
|
+
n.comboCount,
|
|
907
906
|
/* @__PURE__ */ e("svg", { className: `pvx-rankings-chevron ${s ? "pvx-rankings-chevron--open" : ""}`, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ e("path", { d: "m6 9 6 6 6-6" }) })
|
|
908
907
|
] }) })
|
|
909
908
|
]
|
|
910
909
|
}
|
|
911
910
|
),
|
|
912
|
-
s &&
|
|
913
|
-
const
|
|
911
|
+
s && n.combos && /* @__PURE__ */ e("tr", { children: /* @__PURE__ */ e("td", { colSpan: a, className: "pvx-rankings-combos-cell", children: /* @__PURE__ */ e("div", { className: "pvx-rankings-combos", children: n.combos.map((l, v) => {
|
|
912
|
+
const f = l.layout ? `${l.trackId}|${l.layout}` : l.trackId, g = d ? () => d({ track: f, car: l.carId, highlight: h, game: i, gameVersion: o }) : void 0;
|
|
914
913
|
return /* @__PURE__ */ c(
|
|
915
914
|
"div",
|
|
916
915
|
{
|
|
917
|
-
className: `pvx-rankings-combo ${
|
|
918
|
-
onClick:
|
|
919
|
-
role:
|
|
916
|
+
className: `pvx-rankings-combo ${g ? "pvx-rankings-combo--clickable" : ""}`,
|
|
917
|
+
onClick: g,
|
|
918
|
+
role: g ? "button" : void 0,
|
|
920
919
|
children: [
|
|
921
920
|
/* @__PURE__ */ c("div", { className: "pvx-rankings-combo-info", children: [
|
|
922
|
-
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-track", children:
|
|
921
|
+
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-track", children: q(l.trackId, l.layout, i) }),
|
|
923
922
|
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-car", children: I(l.carId) })
|
|
924
923
|
] }),
|
|
925
924
|
/* @__PURE__ */ c("div", { className: "pvx-rankings-combo-stats", children: [
|
|
926
|
-
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-time", children:
|
|
925
|
+
/* @__PURE__ */ e("p", { className: "pvx-rankings-combo-time", children: A(l.lapTimeMs) }),
|
|
927
926
|
/* @__PURE__ */ c("p", { className: `pvx-rankings-combo-pct ${l.percentile >= 75 ? "pvx-rankings-combo-pct--high" : l.percentile >= 50 ? "pvx-rankings-combo-pct--mid" : l.percentile >= 25 ? "pvx-rankings-combo-pct--low" : "pvx-rankings-combo-pct--bottom"}`, children: [
|
|
928
927
|
l.percentile.toFixed(0),
|
|
929
928
|
"%",
|
|
@@ -938,12 +937,12 @@ function ze({ driver: r, getUserDisplay: n, isExpanded: s, onToggle: t, colCount
|
|
|
938
937
|
] })
|
|
939
938
|
]
|
|
940
939
|
},
|
|
941
|
-
|
|
940
|
+
v
|
|
942
941
|
);
|
|
943
942
|
}) }) }) })
|
|
944
943
|
] });
|
|
945
944
|
}
|
|
946
|
-
const
|
|
945
|
+
const Qe = {
|
|
947
946
|
GBR: "🇬🇧",
|
|
948
947
|
DEU: "🇩🇪",
|
|
949
948
|
NLD: "🇳🇱",
|
|
@@ -974,116 +973,116 @@ const Ge = {
|
|
|
974
973
|
RUS: "🇷🇺",
|
|
975
974
|
TUR: "🇹🇷",
|
|
976
975
|
KOR: "🇰🇷"
|
|
977
|
-
}, Ne = ["🥇", "🥈", "🥉"],
|
|
976
|
+
}, Ne = ["🥇", "🥈", "🥉"], Ye = {
|
|
978
977
|
championship: "Championship",
|
|
979
978
|
series: "Series",
|
|
980
979
|
event: "Event"
|
|
981
980
|
}, ae = ["PRACTICE", "QUALIFYING", "RACE"];
|
|
982
|
-
function be({ position:
|
|
983
|
-
return /* @__PURE__ */ e("span", { className:
|
|
981
|
+
function be({ position: n }) {
|
|
982
|
+
return /* @__PURE__ */ e("span", { className: n === 1 ? "pvx-rank pvx-rank--gold" : n === 2 ? "pvx-rank pvx-rank--silver" : n === 3 ? "pvx-rank pvx-rank--bronze" : "pvx-rank", children: n });
|
|
984
983
|
}
|
|
985
|
-
function ye({ nation:
|
|
986
|
-
const
|
|
987
|
-
return
|
|
984
|
+
function ye({ nation: n }) {
|
|
985
|
+
const r = n && Qe[n];
|
|
986
|
+
return r ? /* @__PURE__ */ e("span", { className: "pvx-nation-flag", title: n, children: r }) : null;
|
|
988
987
|
}
|
|
989
|
-
function
|
|
990
|
-
if (!
|
|
991
|
-
const t = [...
|
|
988
|
+
function Je({ sessions: n, activeSession: r, onSelect: s }) {
|
|
989
|
+
if (!n || n.length <= 1) return null;
|
|
990
|
+
const t = [...n].sort(
|
|
992
991
|
(a, i) => ae.indexOf(a.type) - ae.indexOf(i.type)
|
|
993
992
|
);
|
|
994
993
|
return /* @__PURE__ */ e("div", { className: "pvx-session-tabs", children: t.map((a) => /* @__PURE__ */ e(
|
|
995
994
|
"button",
|
|
996
995
|
{
|
|
997
996
|
onClick: () => s(a.type),
|
|
998
|
-
className: `pvx-session-tab ${
|
|
997
|
+
className: `pvx-session-tab ${r === a.type ? "pvx-session-tab--active" : ""}`,
|
|
999
998
|
children: a.type
|
|
1000
999
|
},
|
|
1001
1000
|
a.type
|
|
1002
1001
|
)) });
|
|
1003
1002
|
}
|
|
1004
|
-
function
|
|
1005
|
-
return /* @__PURE__ */ e("span", { className: `pvx-comp-badge pvx-comp-badge--${
|
|
1003
|
+
function Ze({ type: n }) {
|
|
1004
|
+
return /* @__PURE__ */ e("span", { className: `pvx-comp-badge pvx-comp-badge--${n}`, children: Ye[n] || n });
|
|
1006
1005
|
}
|
|
1007
|
-
function
|
|
1008
|
-
return /* @__PURE__ */ e("span", { className: `pvx-info-pill ${
|
|
1006
|
+
function Y({ children: n, variant: r = "default" }) {
|
|
1007
|
+
return /* @__PURE__ */ e("span", { className: `pvx-info-pill ${r !== "default" ? `pvx-info-pill--${r}` : ""}`, children: n });
|
|
1009
1008
|
}
|
|
1010
|
-
function
|
|
1011
|
-
if (!
|
|
1012
|
-
const
|
|
1013
|
-
if (isNaN(
|
|
1014
|
-
const s =
|
|
1009
|
+
function Xe(n) {
|
|
1010
|
+
if (!n) return "TBD";
|
|
1011
|
+
const r = new Date(n);
|
|
1012
|
+
if (isNaN(r)) return "TBD";
|
|
1013
|
+
const s = r.toLocaleDateString("en-GB", { weekday: "short", day: "numeric", month: "short" }), t = r.toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" });
|
|
1015
1014
|
return `${s} • ${t}`;
|
|
1016
1015
|
}
|
|
1017
|
-
function
|
|
1018
|
-
return
|
|
1016
|
+
function en(n) {
|
|
1017
|
+
return n.reduce((r, s) => {
|
|
1019
1018
|
var t;
|
|
1020
|
-
return (t = s.splits) != null && t.length ?
|
|
1019
|
+
return (t = s.splits) != null && t.length ? r ? r.map((a, i) => {
|
|
1021
1020
|
const o = s.splits[i];
|
|
1022
1021
|
return o && o < a ? o : a;
|
|
1023
|
-
}) : [...s.splits] :
|
|
1022
|
+
}) : [...s.splits] : r;
|
|
1024
1023
|
}, null);
|
|
1025
1024
|
}
|
|
1026
|
-
function
|
|
1027
|
-
return /* @__PURE__ */ e("div", { className: "pvx-loading", children:
|
|
1025
|
+
function U({ message: n = "Loading..." }) {
|
|
1026
|
+
return /* @__PURE__ */ e("div", { className: "pvx-loading", children: n });
|
|
1028
1027
|
}
|
|
1029
|
-
function
|
|
1030
|
-
return /* @__PURE__ */ e("div", { className: "pvx-empty", children: /* @__PURE__ */ e("p", { children:
|
|
1028
|
+
function P({ message: n = "No data available." }) {
|
|
1029
|
+
return /* @__PURE__ */ e("div", { className: "pvx-empty", children: /* @__PURE__ */ e("p", { children: n }) });
|
|
1031
1030
|
}
|
|
1032
|
-
function
|
|
1033
|
-
return
|
|
1031
|
+
function Xn({ competitions: n, isLoading: r, onSelect: s, onRegister: t, className: a }) {
|
|
1032
|
+
return r ? /* @__PURE__ */ e(U, { message: "Loading competitions..." }) : n != null && n.length ? /* @__PURE__ */ e("div", { className: `pvx-comp-grid ${a || ""}`, children: n.map((i) => /* @__PURE__ */ e(nn, { comp: i, onSelect: s, onRegister: t || s }, i.id)) }) : /* @__PURE__ */ e(P, { message: "No competitions available." });
|
|
1034
1033
|
}
|
|
1035
|
-
function
|
|
1036
|
-
var
|
|
1037
|
-
const { cdnUrl: t } = k(), a =
|
|
1034
|
+
function nn({ comp: n, onSelect: r, onRegister: s }) {
|
|
1035
|
+
var x, u, N;
|
|
1036
|
+
const { cdnUrl: t } = k(), a = n.posterCdnPath ? `${t}/${n.posterCdnPath}` : null, i = n.registration, o = (i == null ? void 0 : i.currentCount) || 0, d = i == null ? void 0 : i.maxParticipants, h = d && o >= d, l = (i == null ? void 0 : i.deadline) && new Date(i.deadline) < /* @__PURE__ */ new Date(), v = (i == null ? void 0 : i.isOpen) && !l && !h, f = /* @__PURE__ */ new Date(), g = (x = n.rounds) == null ? void 0 : x.find((m) => m.startTime && new Date(m.startTime) >= f), p = ((u = n.rounds) == null ? void 0 : u.length) || 0, b = ((N = n.rounds) == null ? void 0 : N.filter((m) => m.isFinalized).length) || 0;
|
|
1038
1037
|
return /* @__PURE__ */ c(
|
|
1039
1038
|
"div",
|
|
1040
1039
|
{
|
|
1041
1040
|
className: "pvx-comp-card",
|
|
1042
|
-
onClick: () => n
|
|
1041
|
+
onClick: () => r(n.id),
|
|
1043
1042
|
role: "button",
|
|
1044
1043
|
tabIndex: 0,
|
|
1045
|
-
onKeyDown: (
|
|
1046
|
-
(
|
|
1044
|
+
onKeyDown: (m) => {
|
|
1045
|
+
(m.key === "Enter" || m.key === " ") && (m.preventDefault(), r(n.id));
|
|
1047
1046
|
},
|
|
1048
1047
|
children: [
|
|
1049
|
-
/* @__PURE__ */ e("div", { className: "pvx-comp-card-poster", children: a ? /* @__PURE__ */ e("img", { src: a, alt:
|
|
1048
|
+
/* @__PURE__ */ e("div", { className: "pvx-comp-card-poster", children: a ? /* @__PURE__ */ e("img", { src: a, alt: n.name, className: "pvx-comp-card-poster-img" }) : /* @__PURE__ */ e("div", { className: "pvx-comp-card-poster-placeholder", children: /* @__PURE__ */ e(tn, {}) }) }),
|
|
1050
1049
|
/* @__PURE__ */ c("div", { className: "pvx-comp-card-body", children: [
|
|
1051
|
-
/* @__PURE__ */ e("h3", { className: "pvx-comp-card-title", children:
|
|
1052
|
-
|
|
1050
|
+
/* @__PURE__ */ e("h3", { className: "pvx-comp-card-title", children: n.name }),
|
|
1051
|
+
n.description && /* @__PURE__ */ e("p", { className: "pvx-comp-card-desc", children: n.description }),
|
|
1053
1052
|
/* @__PURE__ */ c("div", { className: "pvx-comp-card-pills", children: [
|
|
1054
|
-
/* @__PURE__ */ e(
|
|
1055
|
-
|
|
1056
|
-
|
|
1053
|
+
/* @__PURE__ */ e(Ze, { type: n.type }),
|
|
1054
|
+
n.game && /* @__PURE__ */ e(Y, { children: n.game.toUpperCase() }),
|
|
1055
|
+
n.formatDescription && n.formatDescription.split(", ").map((m, y) => /* @__PURE__ */ e(Y, { variant: "format", children: m }, y))
|
|
1057
1056
|
] }),
|
|
1058
|
-
|
|
1057
|
+
n.carsDescription && /* @__PURE__ */ e("div", { className: "pvx-comp-card-pills", children: n.carsDescription.split(", ").map((m, y) => /* @__PURE__ */ e(Y, { children: m }, y)) }),
|
|
1059
1058
|
/* @__PURE__ */ c("div", { className: "pvx-comp-card-schedule", children: [
|
|
1060
|
-
|
|
1059
|
+
g ? /* @__PURE__ */ c("span", { className: "pvx-comp-card-schedule-next", children: [
|
|
1061
1060
|
/* @__PURE__ */ e("span", { className: "pvx-comp-card-schedule-label", children: "Next:" }),
|
|
1062
1061
|
" ",
|
|
1063
1062
|
"R",
|
|
1064
|
-
|
|
1063
|
+
g.roundNumber,
|
|
1065
1064
|
" ",
|
|
1066
|
-
|
|
1065
|
+
g.track || "TBD",
|
|
1067
1066
|
" — ",
|
|
1068
|
-
|
|
1069
|
-
] }) :
|
|
1067
|
+
Xe(g.startTime)
|
|
1068
|
+
] }) : p > 0 ? /* @__PURE__ */ c("span", { className: "pvx-comp-card-schedule-next", children: [
|
|
1070
1069
|
b,
|
|
1071
1070
|
"/",
|
|
1072
|
-
|
|
1071
|
+
p,
|
|
1073
1072
|
" rounds completed"
|
|
1074
1073
|
] }) : null,
|
|
1075
|
-
|
|
1076
|
-
|
|
1074
|
+
p > 0 && /* @__PURE__ */ c("span", { className: "pvx-comp-card-round-count", children: [
|
|
1075
|
+
p,
|
|
1077
1076
|
" round",
|
|
1078
|
-
|
|
1077
|
+
p !== 1 ? "s" : ""
|
|
1079
1078
|
] })
|
|
1080
1079
|
] }),
|
|
1081
1080
|
i && /* @__PURE__ */ e(
|
|
1082
|
-
|
|
1081
|
+
rn,
|
|
1083
1082
|
{
|
|
1084
|
-
competitionId:
|
|
1085
|
-
regOpen:
|
|
1086
|
-
isFull:
|
|
1083
|
+
competitionId: n.id,
|
|
1084
|
+
regOpen: v,
|
|
1085
|
+
isFull: h,
|
|
1087
1086
|
deadlinePassed: l,
|
|
1088
1087
|
regCount: o,
|
|
1089
1088
|
regMax: d,
|
|
@@ -1095,47 +1094,47 @@ function er({ comp: r, onSelect: n, onRegister: s }) {
|
|
|
1095
1094
|
}
|
|
1096
1095
|
);
|
|
1097
1096
|
}
|
|
1098
|
-
function
|
|
1099
|
-
const { isPowerMode: d } =
|
|
1097
|
+
function rn({ competitionId: n, regOpen: r, isFull: s, deadlinePassed: t, regCount: a, regMax: i, onRegister: o }) {
|
|
1098
|
+
const { isPowerMode: d } = ee(), h = ne(n), { data: l } = X(n), v = (l == null ? void 0 : l.isRegistered) || !1, f = i ? a / i * 100 : 0, g = f >= 100 ? "full" : f >= 75 ? "warning" : "ok";
|
|
1100
1099
|
return /* @__PURE__ */ c("div", { className: "pvx-comp-card-reg", children: [
|
|
1101
|
-
/* @__PURE__ */ e("div", { className: "pvx-comp-card-reg-info", children: /* @__PURE__ */ c("span", { className: `pvx-reg-capacity pvx-reg-capacity--${
|
|
1100
|
+
/* @__PURE__ */ e("div", { className: "pvx-comp-card-reg-info", children: /* @__PURE__ */ c("span", { className: `pvx-reg-capacity pvx-reg-capacity--${g}`, children: [
|
|
1102
1101
|
a,
|
|
1103
1102
|
"/",
|
|
1104
1103
|
i || "∞",
|
|
1105
1104
|
" drivers"
|
|
1106
1105
|
] }) }),
|
|
1107
|
-
/* @__PURE__ */ e("div", { className: "pvx-comp-card-reg-action", children:
|
|
1106
|
+
/* @__PURE__ */ e("div", { className: "pvx-comp-card-reg-action", children: v ? /* @__PURE__ */ e(
|
|
1108
1107
|
"button",
|
|
1109
1108
|
{
|
|
1110
1109
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--registered",
|
|
1111
|
-
onClick: (
|
|
1112
|
-
|
|
1110
|
+
onClick: (p) => {
|
|
1111
|
+
p.stopPropagation(), o(n);
|
|
1113
1112
|
},
|
|
1114
1113
|
children: "✓ Registered"
|
|
1115
1114
|
}
|
|
1116
|
-
) :
|
|
1115
|
+
) : r ? d ? /* @__PURE__ */ e(
|
|
1117
1116
|
"button",
|
|
1118
1117
|
{
|
|
1119
1118
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--open",
|
|
1120
|
-
onClick: (
|
|
1121
|
-
|
|
1119
|
+
onClick: (p) => {
|
|
1120
|
+
p.stopPropagation(), o(n);
|
|
1122
1121
|
},
|
|
1123
1122
|
children: "Register"
|
|
1124
1123
|
}
|
|
1125
1124
|
) : /* @__PURE__ */ e(
|
|
1126
1125
|
"a",
|
|
1127
1126
|
{
|
|
1128
|
-
href:
|
|
1127
|
+
href: h,
|
|
1129
1128
|
target: "_blank",
|
|
1130
1129
|
rel: "noopener noreferrer",
|
|
1131
1130
|
className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--open",
|
|
1132
|
-
onClick: (
|
|
1131
|
+
onClick: (p) => p.stopPropagation(),
|
|
1133
1132
|
children: "Register"
|
|
1134
1133
|
}
|
|
1135
1134
|
) : /* @__PURE__ */ e("span", { className: "pvx-comp-card-reg-btn pvx-comp-card-reg-btn--closed", children: s ? "Full" : "Closed" }) })
|
|
1136
1135
|
] });
|
|
1137
1136
|
}
|
|
1138
|
-
function
|
|
1137
|
+
function tn() {
|
|
1139
1138
|
return /* @__PURE__ */ c("svg", { className: "pvx-comp-trophy-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1140
1139
|
/* @__PURE__ */ e("path", { d: "M6 9H4.5a2.5 2.5 0 0 1 0-5H6" }),
|
|
1141
1140
|
/* @__PURE__ */ e("path", { d: "M18 9h1.5a2.5 2.5 0 0 0 0-5H18" }),
|
|
@@ -1145,15 +1144,15 @@ function nr() {
|
|
|
1145
1144
|
/* @__PURE__ */ e("path", { d: "M18 2H6v7a6 6 0 0 0 12 0V2Z" })
|
|
1146
1145
|
] });
|
|
1147
1146
|
}
|
|
1148
|
-
function
|
|
1149
|
-
var d,
|
|
1150
|
-
const { data: s, isLoading: t } =
|
|
1147
|
+
function sn({ competitionId: n, className: r }) {
|
|
1148
|
+
var d, h;
|
|
1149
|
+
const { data: s, isLoading: t } = qe(n), { data: a, isLoading: i } = de(n);
|
|
1151
1150
|
if (t || i)
|
|
1152
|
-
return /* @__PURE__ */ e(
|
|
1151
|
+
return /* @__PURE__ */ e(U, { message: "Loading standings..." });
|
|
1153
1152
|
if (!((d = s == null ? void 0 : s.standings) != null && d.length))
|
|
1154
|
-
return /* @__PURE__ */ e(
|
|
1155
|
-
const o = ((
|
|
1156
|
-
return /* @__PURE__ */ c("div", { className: `pvx-card ${
|
|
1153
|
+
return /* @__PURE__ */ e(P, { message: "No standings data yet. Results will appear once rounds are finalised." });
|
|
1154
|
+
const o = ((h = a == null ? void 0 : a.rounds) == null ? void 0 : h.filter((l) => l.isFinalized)) || [];
|
|
1155
|
+
return /* @__PURE__ */ c("div", { className: `pvx-card ${r || ""}`, children: [
|
|
1157
1156
|
/* @__PURE__ */ e("div", { className: "pvx-card-header--split", children: /* @__PURE__ */ c("div", { className: "pvx-card-header-left", children: [
|
|
1158
1157
|
/* @__PURE__ */ e("h3", { className: "pvx-card-title", children: "Championship Standings" }),
|
|
1159
1158
|
/* @__PURE__ */ c("span", { className: "pvx-standings-subtitle", children: [
|
|
@@ -1185,7 +1184,7 @@ function tr({ competitionId: r, className: n }) {
|
|
|
1185
1184
|
))
|
|
1186
1185
|
] }) }),
|
|
1187
1186
|
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: s.standings.map((l) => /* @__PURE__ */ e(
|
|
1188
|
-
|
|
1187
|
+
an,
|
|
1189
1188
|
{
|
|
1190
1189
|
driver: l,
|
|
1191
1190
|
finalizedRounds: o
|
|
@@ -1195,32 +1194,32 @@ function tr({ competitionId: r, className: n }) {
|
|
|
1195
1194
|
] }) })
|
|
1196
1195
|
] });
|
|
1197
1196
|
}
|
|
1198
|
-
function
|
|
1199
|
-
var o, d,
|
|
1200
|
-
const s =
|
|
1201
|
-
((o =
|
|
1202
|
-
), a = ((d =
|
|
1197
|
+
function an({ driver: n, finalizedRounds: r }) {
|
|
1198
|
+
var o, d, h;
|
|
1199
|
+
const s = n.position <= 3, t = new Map(
|
|
1200
|
+
((o = n.roundResults) == null ? void 0 : o.map((l) => [l.roundNumber, l])) || []
|
|
1201
|
+
), a = ((d = n.roundResults) == null ? void 0 : d.filter((l) => l.position === 1).length) || 0, i = ((h = n.roundResults) == null ? void 0 : h.filter((l) => l.position <= 3).length) || 0;
|
|
1203
1202
|
return /* @__PURE__ */ c("tr", { className: `pvx-row ${s ? "pvx-row--podium" : ""}`, children: [
|
|
1204
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(be, { position:
|
|
1203
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(be, { position: n.position }) }),
|
|
1205
1204
|
/* @__PURE__ */ c("td", { className: "pvx-td pvx-td--primary", children: [
|
|
1206
|
-
/* @__PURE__ */ e(ye, { nation:
|
|
1207
|
-
|
|
1205
|
+
/* @__PURE__ */ e(ye, { nation: n.nation }),
|
|
1206
|
+
n.driverName
|
|
1208
1207
|
] }),
|
|
1209
1208
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: a || "-" }),
|
|
1210
1209
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-hidden-below-sm", children: i || "-" }),
|
|
1211
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-standings-total", children:
|
|
1212
|
-
|
|
1213
|
-
const
|
|
1210
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--center pvx-standings-total", children: n.totalPoints }),
|
|
1211
|
+
r.map((l) => {
|
|
1212
|
+
const v = t.get(l.roundNumber), f = v == null ? void 0 : v.dropped;
|
|
1214
1213
|
return /* @__PURE__ */ e(
|
|
1215
1214
|
"td",
|
|
1216
1215
|
{
|
|
1217
|
-
className: `pvx-td pvx-td--center pvx-hidden-below-md ${!
|
|
1218
|
-
children:
|
|
1216
|
+
className: `pvx-td pvx-td--center pvx-hidden-below-md ${!f && (v == null ? void 0 : v.position) === 1 ? "pvx-standings-cell--p1" : !f && (v == null ? void 0 : v.position) === 2 ? "pvx-standings-cell--p2" : !f && (v == null ? void 0 : v.position) === 3 ? "pvx-standings-cell--p3" : ""}`,
|
|
1217
|
+
children: v ? /* @__PURE__ */ c("div", { className: `pvx-standings-round-cell ${f ? "pvx-standings-round-cell--dropped" : ""}`, children: [
|
|
1219
1218
|
/* @__PURE__ */ c("span", { className: "pvx-standings-round-pos", children: [
|
|
1220
1219
|
"P",
|
|
1221
|
-
|
|
1220
|
+
v.position
|
|
1222
1221
|
] }),
|
|
1223
|
-
/* @__PURE__ */ e("span", { className: "pvx-standings-round-pts", children:
|
|
1222
|
+
/* @__PURE__ */ e("span", { className: "pvx-standings-round-pts", children: v.points })
|
|
1224
1223
|
] }) : /* @__PURE__ */ e("span", { className: "pvx-td--muted", children: "-" })
|
|
1225
1224
|
},
|
|
1226
1225
|
l.roundNumber
|
|
@@ -1228,14 +1227,14 @@ function sr({ driver: r, finalizedRounds: n }) {
|
|
|
1228
1227
|
})
|
|
1229
1228
|
] });
|
|
1230
1229
|
}
|
|
1231
|
-
function
|
|
1232
|
-
var
|
|
1233
|
-
const { data: t, isLoading: a } =
|
|
1230
|
+
function er({ competitionId: n, roundNumber: r, className: s }) {
|
|
1231
|
+
var h;
|
|
1232
|
+
const { data: t, isLoading: a } = je(n, r);
|
|
1234
1233
|
if (a)
|
|
1235
|
-
return /* @__PURE__ */ e(
|
|
1234
|
+
return /* @__PURE__ */ e(U, { message: "Loading results..." });
|
|
1236
1235
|
if (!t)
|
|
1237
|
-
return /* @__PURE__ */ e(
|
|
1238
|
-
const o = (t.sessions || []).find((l) => l.type === "RACE"), d = (
|
|
1236
|
+
return /* @__PURE__ */ e(P, { message: "No results for this round." });
|
|
1237
|
+
const o = (t.sessions || []).find((l) => l.type === "RACE"), d = (h = o == null ? void 0 : o.results) == null ? void 0 : h.filter((l) => l.position <= 3).sort((l, v) => l.position - v.position);
|
|
1239
1238
|
return /* @__PURE__ */ c("div", { className: `pvx-round-results ${s || ""}`, children: [
|
|
1240
1239
|
/* @__PURE__ */ c("div", { className: "pvx-round-results-header", children: [
|
|
1241
1240
|
/* @__PURE__ */ c("div", { children: [
|
|
@@ -1258,47 +1257,47 @@ function Zr({ competitionId: r, roundNumber: n, className: s }) {
|
|
|
1258
1257
|
/* @__PURE__ */ e(ke, { round: t })
|
|
1259
1258
|
] });
|
|
1260
1259
|
}
|
|
1261
|
-
function ke({ round:
|
|
1262
|
-
var d,
|
|
1263
|
-
const [s, t] =
|
|
1260
|
+
function ke({ round: n, className: r }) {
|
|
1261
|
+
var d, h;
|
|
1262
|
+
const [s, t] = D(null), a = (n == null ? void 0 : n.sessions) || [];
|
|
1264
1263
|
if (!a.length)
|
|
1265
|
-
return /* @__PURE__ */ e(
|
|
1266
|
-
const i = s || ((d = a.find((l) => l.type === "RACE")) == null ? void 0 : d.type) || ((
|
|
1267
|
-
return /* @__PURE__ */ c("div", { className:
|
|
1264
|
+
return /* @__PURE__ */ e(P, { message: "No session data for this round." });
|
|
1265
|
+
const i = s || ((d = a.find((l) => l.type === "RACE")) == null ? void 0 : d.type) || ((h = a[0]) == null ? void 0 : h.type), o = a.find((l) => l.type === i) || a[0];
|
|
1266
|
+
return /* @__PURE__ */ c("div", { className: r || "", children: [
|
|
1268
1267
|
/* @__PURE__ */ e(
|
|
1269
|
-
|
|
1268
|
+
Je,
|
|
1270
1269
|
{
|
|
1271
1270
|
sessions: a,
|
|
1272
1271
|
activeSession: i,
|
|
1273
1272
|
onSelect: t
|
|
1274
1273
|
}
|
|
1275
1274
|
),
|
|
1276
|
-
/* @__PURE__ */ e(
|
|
1275
|
+
/* @__PURE__ */ e(on, { session: o })
|
|
1277
1276
|
] });
|
|
1278
1277
|
}
|
|
1279
|
-
function
|
|
1278
|
+
function on({ session: n }) {
|
|
1280
1279
|
var t;
|
|
1281
|
-
const
|
|
1282
|
-
if (!((t =
|
|
1283
|
-
return /* @__PURE__ */ e(
|
|
1284
|
-
const s =
|
|
1280
|
+
const r = n.type === "RACE";
|
|
1281
|
+
if (!((t = n.results) != null && t.length))
|
|
1282
|
+
return /* @__PURE__ */ e(P, { message: `No results for ${n.type}.` });
|
|
1283
|
+
const s = en(n.results);
|
|
1285
1284
|
return /* @__PURE__ */ e("div", { className: "pvx-table-scroll", children: /* @__PURE__ */ c("table", { className: "pvx-table", children: [
|
|
1286
1285
|
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ c("tr", { className: "pvx-thead-row", children: [
|
|
1287
1286
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-th--narrow", children: "Pos" }),
|
|
1288
1287
|
/* @__PURE__ */ e("th", { className: "pvx-th", children: "Driver" }),
|
|
1289
1288
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "Car" }),
|
|
1290
1289
|
/* @__PURE__ */ e("th", { className: "pvx-th", children: "Best Lap" }),
|
|
1291
|
-
|
|
1290
|
+
r && /* @__PURE__ */ c(F, { children: [
|
|
1292
1291
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "Laps" }),
|
|
1293
1292
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-hidden-below-sm", children: "Time / Gap" }),
|
|
1294
1293
|
/* @__PURE__ */ e("th", { className: "pvx-th pvx-th--center", children: "Points" })
|
|
1295
1294
|
] })
|
|
1296
1295
|
] }) }),
|
|
1297
|
-
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children:
|
|
1298
|
-
|
|
1296
|
+
/* @__PURE__ */ e("tbody", { className: "pvx-tbody", children: n.results.map((a, i) => /* @__PURE__ */ e(
|
|
1297
|
+
cn,
|
|
1299
1298
|
{
|
|
1300
1299
|
result: a,
|
|
1301
|
-
isRace:
|
|
1300
|
+
isRace: r,
|
|
1302
1301
|
fastestSplits: s,
|
|
1303
1302
|
rowIndex: i
|
|
1304
1303
|
},
|
|
@@ -1306,48 +1305,48 @@ function ar({ session: r }) {
|
|
|
1306
1305
|
)) })
|
|
1307
1306
|
] }) });
|
|
1308
1307
|
}
|
|
1309
|
-
function
|
|
1310
|
-
const a =
|
|
1308
|
+
function cn({ result: n, isRace: r, fastestSplits: s, rowIndex: t }) {
|
|
1309
|
+
const a = n.position <= 3;
|
|
1311
1310
|
return /* @__PURE__ */ c("tr", { className: `pvx-row ${a ? "pvx-row--podium" : ""}`, children: [
|
|
1312
|
-
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(be, { position:
|
|
1311
|
+
/* @__PURE__ */ e("td", { className: "pvx-td", children: /* @__PURE__ */ e(be, { position: n.position }) }),
|
|
1313
1312
|
/* @__PURE__ */ c("td", { className: "pvx-td pvx-td--primary", children: [
|
|
1314
|
-
/* @__PURE__ */ e(ye, { nation:
|
|
1315
|
-
|
|
1316
|
-
|
|
1313
|
+
/* @__PURE__ */ e(ye, { nation: n.nation }),
|
|
1314
|
+
n.driverName,
|
|
1315
|
+
n.carNumber != null && /* @__PURE__ */ c("span", { className: "pvx-car-number", children: [
|
|
1317
1316
|
"#",
|
|
1318
|
-
|
|
1317
|
+
n.carNumber
|
|
1319
1318
|
] }),
|
|
1320
|
-
|
|
1319
|
+
n.penalty && /* @__PURE__ */ e("span", { className: "pvx-penalty", children: n.penalty })
|
|
1321
1320
|
] }),
|
|
1322
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-sm", children: I(
|
|
1321
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-sm", children: I(n.carId) }),
|
|
1323
1322
|
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--mono", children: /* @__PURE__ */ e(
|
|
1324
|
-
|
|
1323
|
+
ln,
|
|
1325
1324
|
{
|
|
1326
|
-
bestLap:
|
|
1327
|
-
hasBestLap:
|
|
1328
|
-
splits:
|
|
1325
|
+
bestLap: n.bestLapFormatted,
|
|
1326
|
+
hasBestLap: n.hasBestLap,
|
|
1327
|
+
splits: n.splits,
|
|
1329
1328
|
fastestSplits: s,
|
|
1330
1329
|
showAbove: t <= 1
|
|
1331
1330
|
}
|
|
1332
1331
|
) }),
|
|
1333
|
-
|
|
1334
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-sm", children:
|
|
1335
|
-
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--mono pvx-td--muted pvx-hidden-below-sm", children:
|
|
1332
|
+
r && /* @__PURE__ */ c(F, { children: [
|
|
1333
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-hidden-below-sm", children: n.lapsCompleted }),
|
|
1334
|
+
/* @__PURE__ */ e("td", { className: "pvx-td pvx-td--mono pvx-td--muted pvx-hidden-below-sm", children: n.position === 1 ? n.totalTime || "-" : n.gap || "-" }),
|
|
1336
1335
|
/* @__PURE__ */ c("td", { className: "pvx-td pvx-td--center", children: [
|
|
1337
|
-
/* @__PURE__ */ e("span", { className: "pvx-session-points", children:
|
|
1338
|
-
|
|
1336
|
+
/* @__PURE__ */ e("span", { className: "pvx-session-points", children: n.points }),
|
|
1337
|
+
n.pointsOverride !== 0 && n.pointsOverride && /* @__PURE__ */ c("span", { className: "pvx-points-override", children: [
|
|
1339
1338
|
"(",
|
|
1340
|
-
|
|
1341
|
-
|
|
1339
|
+
n.pointsOverride > 0 ? "+" : "",
|
|
1340
|
+
n.pointsOverride,
|
|
1342
1341
|
")"
|
|
1343
1342
|
] })
|
|
1344
1343
|
] })
|
|
1345
1344
|
] })
|
|
1346
1345
|
] });
|
|
1347
1346
|
}
|
|
1348
|
-
function
|
|
1349
|
-
return
|
|
1350
|
-
/* @__PURE__ */ e("span", { className: "pvx-best-lap-time", children:
|
|
1347
|
+
function ln({ bestLap: n, hasBestLap: r, splits: s, fastestSplits: t, showAbove: a }) {
|
|
1348
|
+
return n ? /* @__PURE__ */ c("span", { className: `pvx-best-lap-cell ${r ? "pvx-best-lap-cell--fastest" : ""}`, children: [
|
|
1349
|
+
/* @__PURE__ */ e("span", { className: "pvx-best-lap-time", children: n }),
|
|
1351
1350
|
(s == null ? void 0 : s.length) > 0 && /* @__PURE__ */ e("span", { className: "pvx-splits-tooltip-anchor", children: /* @__PURE__ */ e("span", { className: `pvx-splits-tooltip ${a ? "" : "pvx-splits-tooltip--above"}`, children: s.map((i, o) => {
|
|
1352
1351
|
const d = t && i === t[o];
|
|
1353
1352
|
return /* @__PURE__ */ c("span", { className: "pvx-splits-tooltip-row", children: [
|
|
@@ -1360,15 +1359,15 @@ function or({ bestLap: r, hasBestLap: n, splits: s, fastestSplits: t, showAbove:
|
|
|
1360
1359
|
}) }) })
|
|
1361
1360
|
] }) : /* @__PURE__ */ e("span", { className: "pvx-td--muted", children: "-" });
|
|
1362
1361
|
}
|
|
1363
|
-
function
|
|
1364
|
-
const { getSteamId: s } = k(), { data: t, isLoading: a } = pe(
|
|
1362
|
+
function nr({ competitionId: n, className: r }) {
|
|
1363
|
+
const { getSteamId: s } = k(), { data: t, isLoading: a } = pe(n), i = s();
|
|
1365
1364
|
if (a)
|
|
1366
|
-
return /* @__PURE__ */ e(
|
|
1365
|
+
return /* @__PURE__ */ e(U, { message: "Loading drivers..." });
|
|
1367
1366
|
const o = (t == null ? void 0 : t.drivers) || (t == null ? void 0 : t.entries) || [];
|
|
1368
|
-
return o.length ? /* @__PURE__ */ e("div", { className: `pvx-entry-grid ${
|
|
1369
|
-
var l,
|
|
1370
|
-
const
|
|
1371
|
-
return /* @__PURE__ */ c("div", { className: `pvx-entry-card ${
|
|
1367
|
+
return o.length ? /* @__PURE__ */ e("div", { className: `pvx-entry-grid ${r || ""}`, children: o.map((d) => {
|
|
1368
|
+
var l, v;
|
|
1369
|
+
const h = i && d.steamId === i;
|
|
1370
|
+
return /* @__PURE__ */ c("div", { className: `pvx-entry-card ${h ? "pvx-entry-card--you" : ""}`, children: [
|
|
1372
1371
|
d.avatarUrl ? /* @__PURE__ */ e(
|
|
1373
1372
|
"img",
|
|
1374
1373
|
{
|
|
@@ -1376,32 +1375,32 @@ function Xr({ competitionId: r, className: n }) {
|
|
|
1376
1375
|
alt: "",
|
|
1377
1376
|
className: "pvx-entry-avatar"
|
|
1378
1377
|
}
|
|
1379
|
-
) : /* @__PURE__ */ e("div", { className: "pvx-entry-avatar pvx-entry-avatar--placeholder", children: ((
|
|
1378
|
+
) : /* @__PURE__ */ e("div", { className: "pvx-entry-avatar pvx-entry-avatar--placeholder", children: ((v = (l = d.displayName) == null ? void 0 : l.charAt(0)) == null ? void 0 : v.toUpperCase()) || "?" }),
|
|
1380
1379
|
/* @__PURE__ */ c("span", { className: "pvx-entry-name", children: [
|
|
1381
1380
|
d.displayName,
|
|
1382
|
-
|
|
1381
|
+
h && /* @__PURE__ */ e("span", { className: "pvx-entry-you", children: " (you)" })
|
|
1383
1382
|
] })
|
|
1384
1383
|
] }, d.steamId || d.driverId);
|
|
1385
|
-
}) }) : /* @__PURE__ */ e(
|
|
1384
|
+
}) }) : /* @__PURE__ */ e(P, { message: "No drivers registered yet." });
|
|
1386
1385
|
}
|
|
1387
|
-
function
|
|
1388
|
-
competitionId:
|
|
1389
|
-
driverData:
|
|
1386
|
+
function rr({
|
|
1387
|
+
competitionId: n,
|
|
1388
|
+
driverData: r,
|
|
1390
1389
|
className: s,
|
|
1391
1390
|
children: t
|
|
1392
1391
|
}) {
|
|
1393
|
-
const { data: a, isLoading: i } =
|
|
1394
|
-
o &&
|
|
1392
|
+
const { data: a, isLoading: i } = X(n), { isPowerMode: o } = ee(), d = ne(n), h = ue(n), l = me(n), v = (a == null ? void 0 : a.isRegistered) || !1, f = i || h.isPending || l.isPending, g = h.error || l.error || null, p = () => {
|
|
1393
|
+
o && h.mutate(r || {});
|
|
1395
1394
|
}, b = () => {
|
|
1396
1395
|
o && l.mutate();
|
|
1397
1396
|
};
|
|
1398
|
-
return typeof t == "function" ? t({ isRegistered:
|
|
1397
|
+
return typeof t == "function" ? t({ isRegistered: v, isLoading: f, register: p, withdraw: b, error: g, isPowerMode: o, registrationUrl: d }) : o ? /* @__PURE__ */ e(
|
|
1399
1398
|
"button",
|
|
1400
1399
|
{
|
|
1401
1400
|
className: `pvx-comp-register-btn ${s || ""}`,
|
|
1402
|
-
onClick:
|
|
1403
|
-
disabled:
|
|
1404
|
-
children:
|
|
1401
|
+
onClick: v ? b : p,
|
|
1402
|
+
disabled: f,
|
|
1403
|
+
children: f ? "Loading..." : v ? "Withdraw" : "Register"
|
|
1405
1404
|
}
|
|
1406
1405
|
) : /* @__PURE__ */ e(
|
|
1407
1406
|
"a",
|
|
@@ -1410,76 +1409,76 @@ function en({
|
|
|
1410
1409
|
target: "_blank",
|
|
1411
1410
|
rel: "noopener noreferrer",
|
|
1412
1411
|
className: `pvx-comp-register-link ${s || ""}`,
|
|
1413
|
-
children:
|
|
1412
|
+
children: v ? "View Registration" : "Register on PitVox"
|
|
1414
1413
|
}
|
|
1415
1414
|
);
|
|
1416
1415
|
}
|
|
1417
|
-
function
|
|
1418
|
-
const { getSteamId: a } = k(), { isPowerMode: i } =
|
|
1419
|
-
return
|
|
1420
|
-
|
|
1416
|
+
function tr({ competitionId: n, registration: r, onWithdrawSuccess: s, className: t }) {
|
|
1417
|
+
const { getSteamId: a } = k(), { isPowerMode: i } = ee(), o = ne(n), { data: d, isLoading: h } = X(n), { data: l, isLoading: v } = pe(n), f = ue(n), g = me(n), p = a(), b = (d == null ? void 0 : d.isRegistered) || !1, x = (l == null ? void 0 : l.drivers) || (l == null ? void 0 : l.entries) || [], u = r || {}, N = x.length || u.currentCount || 0, m = u.maxParticipants && N >= u.maxParticipants, y = u.deadline && new Date(u.deadline) < /* @__PURE__ */ new Date(), C = u.isOpen && !y && !m;
|
|
1418
|
+
return h || v ? /* @__PURE__ */ e(U, { message: "Loading registration..." }) : b ? /* @__PURE__ */ e("div", { className: `pvx-reg-panel ${t || ""}`, children: /* @__PURE__ */ e(
|
|
1419
|
+
pn,
|
|
1421
1420
|
{
|
|
1422
|
-
competitionId:
|
|
1423
|
-
drivers:
|
|
1424
|
-
steamId:
|
|
1421
|
+
competitionId: n,
|
|
1422
|
+
drivers: x,
|
|
1423
|
+
steamId: p,
|
|
1425
1424
|
isPowerMode: i,
|
|
1426
1425
|
registrationUrl: o,
|
|
1427
|
-
withdrawMutation:
|
|
1426
|
+
withdrawMutation: g,
|
|
1428
1427
|
onWithdrawSuccess: s,
|
|
1429
|
-
registration:
|
|
1428
|
+
registration: u
|
|
1430
1429
|
}
|
|
1431
|
-
) }) :
|
|
1432
|
-
|
|
1430
|
+
) }) : C ? p ? i ? /* @__PURE__ */ e("div", { className: `pvx-reg-panel ${t || ""}`, children: /* @__PURE__ */ e(
|
|
1431
|
+
dn,
|
|
1433
1432
|
{
|
|
1434
|
-
competitionId:
|
|
1435
|
-
registerMutation:
|
|
1436
|
-
registration:
|
|
1433
|
+
competitionId: n,
|
|
1434
|
+
registerMutation: f,
|
|
1435
|
+
registration: u
|
|
1437
1436
|
}
|
|
1438
1437
|
) }) : /* @__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: i ? /* @__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__ */ c("div", { className: `pvx-reg-panel ${t || ""}`, children: [
|
|
1439
|
-
/* @__PURE__ */ e("div", { className: "pvx-reg-status-msg", children:
|
|
1440
|
-
|
|
1438
|
+
/* @__PURE__ */ e("div", { className: "pvx-reg-status-msg", children: m ? "Registration is full." : y ? "Registration deadline has passed." : "Registration is closed." }),
|
|
1439
|
+
x.length > 0 && /* @__PURE__ */ e(we, { drivers: x, steamId: p })
|
|
1441
1440
|
] });
|
|
1442
1441
|
}
|
|
1443
|
-
function
|
|
1444
|
-
const [t, a] =
|
|
1445
|
-
|
|
1442
|
+
function dn({ competitionId: n, registerMutation: r, registration: s }) {
|
|
1443
|
+
const [t, a] = D(""), [i, o] = D("intermediate"), [d, h] = D(""), l = (p) => {
|
|
1444
|
+
p.preventDefault(), r.mutate({
|
|
1446
1445
|
discordUsername: t || void 0,
|
|
1447
1446
|
experience: i,
|
|
1448
1447
|
comments: d || void 0
|
|
1449
1448
|
});
|
|
1450
|
-
},
|
|
1449
|
+
}, v = s || {}, f = v.currentCount || 0, g = v.maxParticipants;
|
|
1451
1450
|
return /* @__PURE__ */ c("form", { className: "pvx-reg-form", onSubmit: l, children: [
|
|
1452
1451
|
/* @__PURE__ */ c("div", { className: "pvx-reg-form-header", children: [
|
|
1453
1452
|
/* @__PURE__ */ e("h3", { className: "pvx-reg-form-title", children: "Register" }),
|
|
1454
|
-
|
|
1453
|
+
g && /* @__PURE__ */ e(Ce, { count: f, max: g })
|
|
1455
1454
|
] }),
|
|
1456
|
-
|
|
1455
|
+
r.error && /* @__PURE__ */ e("div", { className: "pvx-reg-error", children: r.error.message || "Registration failed" }),
|
|
1457
1456
|
/* @__PURE__ */ c("div", { className: "pvx-reg-field", children: [
|
|
1458
|
-
/* @__PURE__ */ c("label", { className: "pvx-reg-label", htmlFor: `pvx-discord-${
|
|
1457
|
+
/* @__PURE__ */ c("label", { className: "pvx-reg-label", htmlFor: `pvx-discord-${n}`, children: [
|
|
1459
1458
|
"Discord Username ",
|
|
1460
1459
|
/* @__PURE__ */ e("span", { className: "pvx-reg-optional", children: "(optional)" })
|
|
1461
1460
|
] }),
|
|
1462
1461
|
/* @__PURE__ */ e(
|
|
1463
1462
|
"input",
|
|
1464
1463
|
{
|
|
1465
|
-
id: `pvx-discord-${
|
|
1464
|
+
id: `pvx-discord-${n}`,
|
|
1466
1465
|
type: "text",
|
|
1467
1466
|
className: "pvx-reg-input",
|
|
1468
1467
|
placeholder: "e.g. username",
|
|
1469
1468
|
value: t,
|
|
1470
|
-
onChange: (
|
|
1469
|
+
onChange: (p) => a(p.target.value)
|
|
1471
1470
|
}
|
|
1472
1471
|
)
|
|
1473
1472
|
] }),
|
|
1474
1473
|
/* @__PURE__ */ c("div", { className: "pvx-reg-field", children: [
|
|
1475
|
-
/* @__PURE__ */ e("label", { className: "pvx-reg-label", htmlFor: `pvx-exp-${
|
|
1474
|
+
/* @__PURE__ */ e("label", { className: "pvx-reg-label", htmlFor: `pvx-exp-${n}`, children: "Experience Level" }),
|
|
1476
1475
|
/* @__PURE__ */ c(
|
|
1477
1476
|
"select",
|
|
1478
1477
|
{
|
|
1479
|
-
id: `pvx-exp-${
|
|
1478
|
+
id: `pvx-exp-${n}`,
|
|
1480
1479
|
className: "pvx-reg-select",
|
|
1481
1480
|
value: i,
|
|
1482
|
-
onChange: (
|
|
1481
|
+
onChange: (p) => o(p.target.value),
|
|
1483
1482
|
children: [
|
|
1484
1483
|
/* @__PURE__ */ e("option", { value: "beginner", children: "Beginner" }),
|
|
1485
1484
|
/* @__PURE__ */ e("option", { value: "intermediate", children: "Intermediate" }),
|
|
@@ -1489,19 +1488,19 @@ function cr({ competitionId: r, registerMutation: n, registration: s }) {
|
|
|
1489
1488
|
)
|
|
1490
1489
|
] }),
|
|
1491
1490
|
/* @__PURE__ */ c("div", { className: "pvx-reg-field", children: [
|
|
1492
|
-
/* @__PURE__ */ c("label", { className: "pvx-reg-label", htmlFor: `pvx-comments-${
|
|
1491
|
+
/* @__PURE__ */ c("label", { className: "pvx-reg-label", htmlFor: `pvx-comments-${n}`, children: [
|
|
1493
1492
|
"Comments ",
|
|
1494
1493
|
/* @__PURE__ */ e("span", { className: "pvx-reg-optional", children: "(optional)" })
|
|
1495
1494
|
] }),
|
|
1496
1495
|
/* @__PURE__ */ e(
|
|
1497
1496
|
"textarea",
|
|
1498
1497
|
{
|
|
1499
|
-
id: `pvx-comments-${
|
|
1498
|
+
id: `pvx-comments-${n}`,
|
|
1500
1499
|
className: "pvx-reg-textarea",
|
|
1501
1500
|
rows: 3,
|
|
1502
1501
|
placeholder: "Anything the organisers should know?",
|
|
1503
1502
|
value: d,
|
|
1504
|
-
onChange: (
|
|
1503
|
+
onChange: (p) => h(p.target.value)
|
|
1505
1504
|
}
|
|
1506
1505
|
)
|
|
1507
1506
|
] }),
|
|
@@ -1510,28 +1509,28 @@ function cr({ competitionId: r, registerMutation: n, registration: s }) {
|
|
|
1510
1509
|
{
|
|
1511
1510
|
type: "submit",
|
|
1512
1511
|
className: "pvx-comp-register-btn",
|
|
1513
|
-
disabled:
|
|
1514
|
-
children:
|
|
1512
|
+
disabled: r.isPending,
|
|
1513
|
+
children: r.isPending ? "Registering..." : "Register"
|
|
1515
1514
|
}
|
|
1516
1515
|
) })
|
|
1517
1516
|
] });
|
|
1518
1517
|
}
|
|
1519
|
-
function
|
|
1520
|
-
const [
|
|
1518
|
+
function pn({ competitionId: n, drivers: r, steamId: s, isPowerMode: t, registrationUrl: a, withdrawMutation: i, onWithdrawSuccess: o, registration: d }) {
|
|
1519
|
+
const [h, l] = D(!1), v = () => {
|
|
1521
1520
|
i.mutate(void 0, {
|
|
1522
1521
|
onSuccess: () => {
|
|
1523
1522
|
l(!1), o && o();
|
|
1524
1523
|
}
|
|
1525
1524
|
});
|
|
1526
|
-
},
|
|
1527
|
-
return /* @__PURE__ */ c(
|
|
1525
|
+
}, f = d || {}, g = r.length || f.currentCount || 0, p = f.maxParticipants;
|
|
1526
|
+
return /* @__PURE__ */ c(F, { children: [
|
|
1528
1527
|
/* @__PURE__ */ c("div", { className: "pvx-reg-form-header", children: [
|
|
1529
1528
|
/* @__PURE__ */ e("h3", { className: "pvx-reg-form-title", children: "Registered Drivers" }),
|
|
1530
|
-
|
|
1529
|
+
p && /* @__PURE__ */ e(Ce, { count: g, max: p })
|
|
1531
1530
|
] }),
|
|
1532
|
-
/* @__PURE__ */ e(we, { drivers:
|
|
1531
|
+
/* @__PURE__ */ e(we, { drivers: r, steamId: s }),
|
|
1533
1532
|
i.error && /* @__PURE__ */ e("div", { className: "pvx-reg-error", children: i.error.message || "Withdrawal failed" }),
|
|
1534
|
-
t ? /* @__PURE__ */ e("div", { className: "pvx-reg-actions", children:
|
|
1533
|
+
t ? /* @__PURE__ */ e("div", { className: "pvx-reg-actions", children: h ? /* @__PURE__ */ c("div", { className: "pvx-reg-confirm", children: [
|
|
1535
1534
|
/* @__PURE__ */ e("p", { className: "pvx-reg-confirm-text", children: "Are you sure you want to unregister?" }),
|
|
1536
1535
|
/* @__PURE__ */ c("div", { className: "pvx-reg-confirm-actions", children: [
|
|
1537
1536
|
/* @__PURE__ */ e(
|
|
@@ -1548,7 +1547,7 @@ function lr({ competitionId: r, drivers: n, steamId: s, isPowerMode: t, registra
|
|
|
1548
1547
|
{
|
|
1549
1548
|
type: "button",
|
|
1550
1549
|
className: "pvx-reg-danger-btn",
|
|
1551
|
-
onClick:
|
|
1550
|
+
onClick: v,
|
|
1552
1551
|
disabled: i.isPending,
|
|
1553
1552
|
children: i.isPending ? "Unregistering..." : "Yes, Unregister"
|
|
1554
1553
|
}
|
|
@@ -1565,16 +1564,16 @@ function lr({ competitionId: r, drivers: n, steamId: s, isPowerMode: t, registra
|
|
|
1565
1564
|
) }) : /* @__PURE__ */ e("div", { className: "pvx-reg-actions", children: /* @__PURE__ */ e("a", { href: a, target: "_blank", rel: "noopener noreferrer", className: "pvx-comp-register-link", children: "Manage on PitVox" }) })
|
|
1566
1565
|
] });
|
|
1567
1566
|
}
|
|
1568
|
-
function we({ drivers:
|
|
1569
|
-
if (!
|
|
1567
|
+
function we({ drivers: n, steamId: r }) {
|
|
1568
|
+
if (!n.length)
|
|
1570
1569
|
return /* @__PURE__ */ e("div", { className: "pvx-reg-no-drivers", children: "No drivers registered yet." });
|
|
1571
|
-
const s = [...
|
|
1572
|
-
const i =
|
|
1570
|
+
const s = [...n].sort((t, a) => {
|
|
1571
|
+
const i = r && t.steamId === r ? -1 : 0, o = r && a.steamId === r ? -1 : 0;
|
|
1573
1572
|
return i - o;
|
|
1574
1573
|
});
|
|
1575
1574
|
return /* @__PURE__ */ e("div", { className: "pvx-reg-driver-list", children: s.map((t) => {
|
|
1576
1575
|
var i, o;
|
|
1577
|
-
const a =
|
|
1576
|
+
const a = r && t.steamId === r;
|
|
1578
1577
|
return /* @__PURE__ */ c(
|
|
1579
1578
|
"div",
|
|
1580
1579
|
{
|
|
@@ -1591,73 +1590,73 @@ function we({ drivers: r, steamId: n }) {
|
|
|
1591
1590
|
);
|
|
1592
1591
|
}) });
|
|
1593
1592
|
}
|
|
1594
|
-
function Ce({ count:
|
|
1595
|
-
const s =
|
|
1593
|
+
function Ce({ count: n, max: r }) {
|
|
1594
|
+
const s = r ? n / r * 100 : 0, t = s >= 100 ? "full" : s >= 75 ? "warning" : "ok";
|
|
1596
1595
|
return /* @__PURE__ */ c("span", { className: `pvx-reg-capacity pvx-reg-capacity--${t}`, children: [
|
|
1597
|
-
r,
|
|
1598
|
-
"/",
|
|
1599
1596
|
n,
|
|
1597
|
+
"/",
|
|
1598
|
+
r,
|
|
1600
1599
|
" drivers"
|
|
1601
1600
|
] });
|
|
1602
1601
|
}
|
|
1603
|
-
function
|
|
1604
|
-
const { data: s, isLoading: t } = de(
|
|
1602
|
+
function sr({ competitionId: n, className: r }) {
|
|
1603
|
+
const { data: s, isLoading: t } = de(n), a = (s == null ? void 0 : s.type) === "championship", i = w(
|
|
1605
1604
|
() => {
|
|
1606
|
-
var
|
|
1607
|
-
return ((
|
|
1605
|
+
var u;
|
|
1606
|
+
return ((u = s == null ? void 0 : s.rounds) == null ? void 0 : u.filter((N) => N.isFinalized)) || [];
|
|
1608
1607
|
},
|
|
1609
1608
|
[s]
|
|
1610
|
-
), o =
|
|
1611
|
-
() => i.map((
|
|
1609
|
+
), o = w(
|
|
1610
|
+
() => i.map((u) => u.roundNumber),
|
|
1612
1611
|
[i]
|
|
1613
|
-
), { data: d = [], isLoading:
|
|
1614
|
-
|
|
1612
|
+
), { data: d = [], isLoading: h } = Ve(
|
|
1613
|
+
n,
|
|
1615
1614
|
o
|
|
1616
|
-
), l = a ? "standings" : o.length > 0 ? `round-${o[o.length - 1]}` : null, [
|
|
1617
|
-
if (t ||
|
|
1618
|
-
return /* @__PURE__ */ e(
|
|
1615
|
+
), l = a ? "standings" : o.length > 0 ? `round-${o[o.length - 1]}` : null, [v, f] = D(null), g = v || l;
|
|
1616
|
+
if (t || h)
|
|
1617
|
+
return /* @__PURE__ */ e(U, { message: "Loading results..." });
|
|
1619
1618
|
if (!s)
|
|
1620
|
-
return /* @__PURE__ */ e(
|
|
1619
|
+
return /* @__PURE__ */ e(P, { message: "Competition not found." });
|
|
1621
1620
|
if (!i.length)
|
|
1622
|
-
return /* @__PURE__ */ e(
|
|
1623
|
-
const
|
|
1621
|
+
return /* @__PURE__ */ e(P, { message: "No results available yet. Results will appear here once rounds are finalised." });
|
|
1622
|
+
const p = new Map(d.map((u) => [`round-${u.roundNumber}`, u])), b = [];
|
|
1624
1623
|
a && b.push({ id: "standings", label: "Standings" });
|
|
1625
|
-
for (const
|
|
1624
|
+
for (const u of i)
|
|
1626
1625
|
b.push({
|
|
1627
|
-
id: `round-${
|
|
1628
|
-
label: `R${
|
|
1626
|
+
id: `round-${u.roundNumber}`,
|
|
1627
|
+
label: `R${u.roundNumber}`,
|
|
1629
1628
|
track: null
|
|
1630
1629
|
});
|
|
1631
|
-
const
|
|
1632
|
-
return /* @__PURE__ */ c("div", { className:
|
|
1633
|
-
/* @__PURE__ */ e("div", { className: "pvx-results-tabs", children: b.map((
|
|
1630
|
+
const x = p.get(g);
|
|
1631
|
+
return /* @__PURE__ */ c("div", { className: r || "", children: [
|
|
1632
|
+
/* @__PURE__ */ e("div", { className: "pvx-results-tabs", children: b.map((u) => /* @__PURE__ */ c(
|
|
1634
1633
|
"button",
|
|
1635
1634
|
{
|
|
1636
|
-
className: `pvx-results-tab ${
|
|
1637
|
-
onClick: () =>
|
|
1638
|
-
title:
|
|
1635
|
+
className: `pvx-results-tab ${g === u.id ? "pvx-results-tab--active" : ""}`,
|
|
1636
|
+
onClick: () => f(u.id),
|
|
1637
|
+
title: u.track || void 0,
|
|
1639
1638
|
children: [
|
|
1640
|
-
/* @__PURE__ */ e("span", { className: "pvx-results-tab-label", children:
|
|
1641
|
-
|
|
1639
|
+
/* @__PURE__ */ e("span", { className: "pvx-results-tab-label", children: u.label }),
|
|
1640
|
+
u.track && /* @__PURE__ */ e("span", { className: "pvx-results-tab-track", children: u.track })
|
|
1642
1641
|
]
|
|
1643
1642
|
},
|
|
1644
|
-
|
|
1643
|
+
u.id
|
|
1645
1644
|
)) }),
|
|
1646
|
-
|
|
1645
|
+
g === "standings" ? /* @__PURE__ */ e(sn, { competitionId: n }) : x ? /* @__PURE__ */ e(un, { round: x }) : /* @__PURE__ */ e(P, { message: "No results for this round." })
|
|
1647
1646
|
] });
|
|
1648
1647
|
}
|
|
1649
|
-
function
|
|
1648
|
+
function un({ round: n }) {
|
|
1650
1649
|
var a;
|
|
1651
|
-
const s = (
|
|
1650
|
+
const s = (n.sessions || []).find((i) => i.type === "RACE"), t = (a = s == null ? void 0 : s.results) == null ? void 0 : a.filter((i) => i.position <= 3).sort((i, o) => i.position - o.position);
|
|
1652
1651
|
return /* @__PURE__ */ c("div", { className: "pvx-card", children: [
|
|
1653
1652
|
/* @__PURE__ */ c("div", { className: "pvx-card-header--split", children: [
|
|
1654
1653
|
/* @__PURE__ */ c("div", { children: [
|
|
1655
1654
|
/* @__PURE__ */ c("h4", { className: "pvx-card-title", children: [
|
|
1656
1655
|
"Round ",
|
|
1657
|
-
|
|
1658
|
-
|
|
1656
|
+
n.roundNumber,
|
|
1657
|
+
n.track ? `: ${n.track}` : ""
|
|
1659
1658
|
] }),
|
|
1660
|
-
|
|
1659
|
+
n.startTime && /* @__PURE__ */ e("span", { className: "pvx-standings-subtitle", children: new Date(n.startTime).toLocaleDateString("en-GB", {
|
|
1661
1660
|
day: "numeric",
|
|
1662
1661
|
month: "long",
|
|
1663
1662
|
year: "numeric"
|
|
@@ -1668,14 +1667,14 @@ function dr({ round: r }) {
|
|
|
1668
1667
|
/* @__PURE__ */ e("span", { children: i.driverName })
|
|
1669
1668
|
] }, i.driverId)) })
|
|
1670
1669
|
] }),
|
|
1671
|
-
/* @__PURE__ */ e(ke, { round:
|
|
1670
|
+
/* @__PURE__ */ e(ke, { round: n })
|
|
1672
1671
|
] });
|
|
1673
1672
|
}
|
|
1674
|
-
function
|
|
1675
|
-
const { cdnUrl:
|
|
1676
|
-
queryKey: ["pitvox", "laps", "global",
|
|
1677
|
-
queryFn: () => T(
|
|
1678
|
-
enabled: !!
|
|
1673
|
+
function mn(n) {
|
|
1674
|
+
const { cdnUrl: r } = k(), s = L({
|
|
1675
|
+
queryKey: ["pitvox", "laps", "global", n, "index"],
|
|
1676
|
+
queryFn: () => T(r, Ae(null, n)),
|
|
1677
|
+
enabled: !!n,
|
|
1679
1678
|
staleTime: 3e4,
|
|
1680
1679
|
refetchInterval: 3e4
|
|
1681
1680
|
}), t = s.data;
|
|
@@ -1697,137 +1696,137 @@ function pr(r) {
|
|
|
1697
1696
|
} : null
|
|
1698
1697
|
};
|
|
1699
1698
|
}
|
|
1700
|
-
function Le(
|
|
1701
|
-
const { cdnUrl:
|
|
1702
|
-
return
|
|
1703
|
-
queryKey: ["pitvox", "ratings", s, t || null],
|
|
1704
|
-
queryFn: () => T(
|
|
1699
|
+
function Le(n = {}) {
|
|
1700
|
+
const { cdnUrl: r, partnerSlug: s } = k(), { game: t, gameVersion: a, enabled: i = !0 } = n, o = Z(s, t, a, "ratings.json");
|
|
1701
|
+
return L({
|
|
1702
|
+
queryKey: ["pitvox", "ratings", s, t || null, a || null],
|
|
1703
|
+
queryFn: () => T(r, o),
|
|
1705
1704
|
staleTime: 3e4,
|
|
1706
1705
|
refetchInterval: 3e4,
|
|
1707
|
-
enabled:
|
|
1706
|
+
enabled: i
|
|
1708
1707
|
});
|
|
1709
1708
|
}
|
|
1710
|
-
function
|
|
1709
|
+
function vn(n) {
|
|
1711
1710
|
var t;
|
|
1712
|
-
const
|
|
1711
|
+
const r = Le(), s = w(() => {
|
|
1713
1712
|
var a;
|
|
1714
|
-
return !((a =
|
|
1715
|
-
(i) => i.identifier ===
|
|
1713
|
+
return !((a = r.data) != null && a.drivers) || !n ? null : r.data.drivers.find(
|
|
1714
|
+
(i) => i.identifier === n
|
|
1716
1715
|
) || null;
|
|
1717
|
-
}, [(t =
|
|
1716
|
+
}, [(t = r.data) == null ? void 0 : t.drivers, n]);
|
|
1718
1717
|
return {
|
|
1719
|
-
isLoading:
|
|
1720
|
-
error:
|
|
1718
|
+
isLoading: r.isLoading,
|
|
1719
|
+
error: r.error,
|
|
1721
1720
|
data: s ? {
|
|
1722
1721
|
rating: s.rating,
|
|
1723
1722
|
rank: s.rank,
|
|
1724
|
-
totalDrivers:
|
|
1723
|
+
totalDrivers: r.data.driverCount || r.data.drivers.length,
|
|
1725
1724
|
comboCount: s.comboCount || 0,
|
|
1726
1725
|
distinctCars: s.distinctCars || 0,
|
|
1727
1726
|
combos: s.combos || []
|
|
1728
1727
|
} : null
|
|
1729
1728
|
};
|
|
1730
1729
|
}
|
|
1731
|
-
function
|
|
1732
|
-
const
|
|
1730
|
+
function ar(n = {}) {
|
|
1731
|
+
const r = Le(n);
|
|
1733
1732
|
return {
|
|
1734
|
-
data:
|
|
1735
|
-
isLoading:
|
|
1736
|
-
error:
|
|
1733
|
+
data: r.data || null,
|
|
1734
|
+
isLoading: r.isLoading,
|
|
1735
|
+
error: r.error
|
|
1737
1736
|
};
|
|
1738
1737
|
}
|
|
1739
|
-
function
|
|
1740
|
-
const { cdnUrl:
|
|
1741
|
-
queryKey: ["pitvox", "competitions",
|
|
1738
|
+
function hn() {
|
|
1739
|
+
const { cdnUrl: n, partnerSlug: r, getSteamId: s, onFetchServerPassword: t } = k(), a = s(), { data: i, isLoading: o } = L({
|
|
1740
|
+
queryKey: ["pitvox", "competitions", r],
|
|
1742
1741
|
queryFn: async () => {
|
|
1743
|
-
const
|
|
1744
|
-
return
|
|
1742
|
+
const p = await T(n, "competitions/index.json");
|
|
1743
|
+
return p != null && p.competitions ? p.competitions.filter((b) => b.partnerSlug === r) : [];
|
|
1745
1744
|
},
|
|
1746
1745
|
staleTime: 6e4
|
|
1747
|
-
}), d = (i == null ? void 0 : i.map((
|
|
1748
|
-
queries: d.map((
|
|
1749
|
-
queryKey: ["pitvox", "competition",
|
|
1750
|
-
queryFn: () => T(
|
|
1746
|
+
}), d = (i == null ? void 0 : i.map((p) => p.id)) || [], h = se({
|
|
1747
|
+
queries: d.map((p) => ({
|
|
1748
|
+
queryKey: ["pitvox", "competition", r, p, "entrylist"],
|
|
1749
|
+
queryFn: () => T(n, `competitions/${r}/${p}/entrylist.json`),
|
|
1751
1750
|
enabled: !!a && d.length > 0,
|
|
1752
1751
|
staleTime: 6e4
|
|
1753
1752
|
}))
|
|
1754
|
-
}), l =
|
|
1755
|
-
var
|
|
1753
|
+
}), l = h.some((p) => p.isLoading), v = w(() => {
|
|
1754
|
+
var x, u;
|
|
1756
1755
|
if (!i || !a || l) return [];
|
|
1757
|
-
const
|
|
1756
|
+
const p = /* @__PURE__ */ new Date(), b = [];
|
|
1758
1757
|
for (let N = 0; N < i.length; N++) {
|
|
1759
|
-
const
|
|
1760
|
-
if (!((
|
|
1761
|
-
const
|
|
1762
|
-
for (const
|
|
1763
|
-
|
|
1764
|
-
competitionId:
|
|
1765
|
-
competitionName:
|
|
1766
|
-
roundNumber:
|
|
1767
|
-
track:
|
|
1768
|
-
startTime:
|
|
1758
|
+
const m = i[N], y = (x = h[N]) == null ? void 0 : x.data;
|
|
1759
|
+
if (!((u = y == null ? void 0 : y.drivers) == null ? void 0 : u.some((R) => R.steamId === a))) continue;
|
|
1760
|
+
const M = m.rounds || [];
|
|
1761
|
+
for (const R of M)
|
|
1762
|
+
R.isFinalized || !R.startTime || new Date(R.startTime) <= p || b.push({
|
|
1763
|
+
competitionId: m.id,
|
|
1764
|
+
competitionName: m.name,
|
|
1765
|
+
roundNumber: R.roundNumber,
|
|
1766
|
+
track: R.track || "TBD",
|
|
1767
|
+
startTime: R.startTime
|
|
1769
1768
|
});
|
|
1770
1769
|
}
|
|
1771
|
-
return b.sort((N,
|
|
1772
|
-
}, [i, a, l,
|
|
1773
|
-
queries:
|
|
1774
|
-
queryKey: ["pitvox", "serverInfo",
|
|
1775
|
-
queryFn: () => t(
|
|
1776
|
-
enabled: !!t &&
|
|
1770
|
+
return b.sort((N, m) => new Date(N.startTime) - new Date(m.startTime)), b.length > 0 && (b[0].isNext = !0), b;
|
|
1771
|
+
}, [i, a, l, h]), f = se({
|
|
1772
|
+
queries: v.map((p) => ({
|
|
1773
|
+
queryKey: ["pitvox", "serverInfo", p.competitionId, p.roundNumber],
|
|
1774
|
+
queryFn: () => t(p.competitionId, p.roundNumber),
|
|
1775
|
+
enabled: !!t && v.length > 0,
|
|
1777
1776
|
staleTime: 5 * 6e4,
|
|
1778
1777
|
// 5 minutes
|
|
1779
1778
|
retry: !1
|
|
1780
1779
|
}))
|
|
1781
1780
|
});
|
|
1782
1781
|
return {
|
|
1783
|
-
data:
|
|
1784
|
-
var
|
|
1785
|
-
const
|
|
1786
|
-
return
|
|
1787
|
-
...
|
|
1788
|
-
serverAddress:
|
|
1789
|
-
serverPassword:
|
|
1790
|
-
} :
|
|
1791
|
-
}) :
|
|
1782
|
+
data: w(() => v.length ? t ? v.map((p, b) => {
|
|
1783
|
+
var u;
|
|
1784
|
+
const x = (u = f[b]) == null ? void 0 : u.data;
|
|
1785
|
+
return x != null && x.success ? {
|
|
1786
|
+
...p,
|
|
1787
|
+
serverAddress: x.serverAddress || null,
|
|
1788
|
+
serverPassword: x.serverPassword || null
|
|
1789
|
+
} : p;
|
|
1790
|
+
}) : v : [], [v, t, f]),
|
|
1792
1791
|
isLoading: o || !!a && l
|
|
1793
1792
|
};
|
|
1794
1793
|
}
|
|
1795
|
-
function
|
|
1796
|
-
const { onFetchNotifications:
|
|
1797
|
-
return !!
|
|
1794
|
+
function xn() {
|
|
1795
|
+
const { onFetchNotifications: n } = k();
|
|
1796
|
+
return !!n;
|
|
1798
1797
|
}
|
|
1799
|
-
function
|
|
1800
|
-
const { onFetchNotifications:
|
|
1801
|
-
return
|
|
1798
|
+
function gn(n = {}) {
|
|
1799
|
+
const { onFetchNotifications: r, partnerSlug: s } = k(), { limit: t = 20, unreadOnly: a = !1 } = n;
|
|
1800
|
+
return L({
|
|
1802
1801
|
queryKey: ["pitvox", "notifications", s, { limit: t, unreadOnly: a }],
|
|
1803
|
-
queryFn: () =>
|
|
1804
|
-
enabled: !!
|
|
1802
|
+
queryFn: () => r({ limit: t, unreadOnly: a }),
|
|
1803
|
+
enabled: !!r,
|
|
1805
1804
|
staleTime: 3e4,
|
|
1806
1805
|
refetchInterval: 3e4
|
|
1807
1806
|
});
|
|
1808
1807
|
}
|
|
1809
|
-
function
|
|
1810
|
-
const { onFetchNotifications:
|
|
1811
|
-
queryKey: ["pitvox", "notifications",
|
|
1812
|
-
queryFn: () =>
|
|
1813
|
-
enabled: !!
|
|
1808
|
+
function ir() {
|
|
1809
|
+
const { onFetchNotifications: n, partnerSlug: r } = k(), { data: s, isLoading: t } = L({
|
|
1810
|
+
queryKey: ["pitvox", "notifications", r, { limit: 1, unreadOnly: !1 }],
|
|
1811
|
+
queryFn: () => n({ limit: 1 }),
|
|
1812
|
+
enabled: !!n,
|
|
1814
1813
|
staleTime: 3e4,
|
|
1815
1814
|
refetchInterval: 3e4,
|
|
1816
1815
|
select: (a) => (a == null ? void 0 : a.unreadCount) ?? 0
|
|
1817
1816
|
});
|
|
1818
1817
|
return { count: s ?? 0, isLoading: t };
|
|
1819
1818
|
}
|
|
1820
|
-
function
|
|
1821
|
-
const { onMarkNotificationRead:
|
|
1822
|
-
return
|
|
1819
|
+
function fn() {
|
|
1820
|
+
const { onMarkNotificationRead: n, partnerSlug: r } = k(), s = _();
|
|
1821
|
+
return W({
|
|
1823
1822
|
mutationFn: (t) => {
|
|
1824
|
-
if (!
|
|
1823
|
+
if (!n)
|
|
1825
1824
|
throw new Error("No onMarkNotificationRead callback provided to PitVoxPartnerProvider.");
|
|
1826
|
-
return
|
|
1825
|
+
return n(t);
|
|
1827
1826
|
},
|
|
1828
1827
|
onSuccess: (t, a) => {
|
|
1829
1828
|
s.setQueriesData(
|
|
1830
|
-
{ queryKey: ["pitvox", "notifications",
|
|
1829
|
+
{ queryKey: ["pitvox", "notifications", r] },
|
|
1831
1830
|
(i) => i != null && i.notifications ? {
|
|
1832
1831
|
...i,
|
|
1833
1832
|
unreadCount: Math.max(0, (i.unreadCount || 0) - 1),
|
|
@@ -1839,17 +1838,17 @@ function xr() {
|
|
|
1839
1838
|
}
|
|
1840
1839
|
});
|
|
1841
1840
|
}
|
|
1842
|
-
function
|
|
1843
|
-
const { onMarkAllNotificationsRead:
|
|
1844
|
-
return
|
|
1841
|
+
function Nn() {
|
|
1842
|
+
const { onMarkAllNotificationsRead: n, partnerSlug: r } = k(), s = _();
|
|
1843
|
+
return W({
|
|
1845
1844
|
mutationFn: () => {
|
|
1846
|
-
if (!
|
|
1845
|
+
if (!n)
|
|
1847
1846
|
throw new Error("No onMarkAllNotificationsRead callback provided to PitVoxPartnerProvider.");
|
|
1848
|
-
return
|
|
1847
|
+
return n();
|
|
1849
1848
|
},
|
|
1850
1849
|
onSuccess: () => {
|
|
1851
1850
|
s.setQueriesData(
|
|
1852
|
-
{ queryKey: ["pitvox", "notifications",
|
|
1851
|
+
{ queryKey: ["pitvox", "notifications", r] },
|
|
1853
1852
|
(t) => t != null && t.notifications ? {
|
|
1854
1853
|
...t,
|
|
1855
1854
|
unreadCount: 0,
|
|
@@ -1863,12 +1862,12 @@ function gr() {
|
|
|
1863
1862
|
}
|
|
1864
1863
|
});
|
|
1865
1864
|
}
|
|
1866
|
-
function
|
|
1865
|
+
function bn({ driverName: n, avatarUrl: r, memberSince: s, className: t = "" }) {
|
|
1867
1866
|
const a = s ? new Date(s).toLocaleDateString("en-GB", { day: "2-digit", month: "2-digit", year: "numeric" }) : null;
|
|
1868
1867
|
return /* @__PURE__ */ c("div", { className: `pvx-card pvx-dash-profile ${t}`, children: [
|
|
1869
|
-
|
|
1868
|
+
r ? /* @__PURE__ */ e("img", { src: r, alt: "", className: "pvx-dash-profile-avatar" }) : /* @__PURE__ */ e("div", { className: "pvx-dash-profile-avatar pvx-dash-profile-avatar--placeholder", children: (n || "?")[0].toUpperCase() }),
|
|
1870
1869
|
/* @__PURE__ */ c("div", { className: "pvx-dash-profile-info", children: [
|
|
1871
|
-
/* @__PURE__ */ e("h2", { className: "pvx-dash-profile-name", children:
|
|
1870
|
+
/* @__PURE__ */ e("h2", { className: "pvx-dash-profile-name", children: n }),
|
|
1872
1871
|
a && /* @__PURE__ */ c("p", { className: "pvx-dash-profile-since", children: [
|
|
1873
1872
|
"Racing since ",
|
|
1874
1873
|
a
|
|
@@ -1876,7 +1875,7 @@ function fr({ driverName: r, avatarUrl: n, memberSince: s, className: t = "" })
|
|
|
1876
1875
|
] })
|
|
1877
1876
|
] });
|
|
1878
1877
|
}
|
|
1879
|
-
function
|
|
1878
|
+
function yn() {
|
|
1880
1879
|
return /* @__PURE__ */ c("svg", { className: "pvx-dash-stat-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1881
1880
|
/* @__PURE__ */ e("line", { x1: "4", y1: "9", x2: "20", y2: "9" }),
|
|
1882
1881
|
/* @__PURE__ */ e("line", { x1: "4", y1: "15", x2: "20", y2: "15" }),
|
|
@@ -1884,7 +1883,7 @@ function Nr() {
|
|
|
1884
1883
|
/* @__PURE__ */ e("line", { x1: "16", y1: "3", x2: "14", y2: "21" })
|
|
1885
1884
|
] });
|
|
1886
1885
|
}
|
|
1887
|
-
function
|
|
1886
|
+
function kn() {
|
|
1888
1887
|
return /* @__PURE__ */ c("svg", { className: "pvx-dash-stat-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1889
1888
|
/* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1890
1889
|
/* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "2" }),
|
|
@@ -1893,45 +1892,45 @@ function br() {
|
|
|
1893
1892
|
/* @__PURE__ */ e("path", { d: "M13.5 12.5l4 2.5" })
|
|
1894
1893
|
] });
|
|
1895
1894
|
}
|
|
1896
|
-
function
|
|
1895
|
+
function wn() {
|
|
1897
1896
|
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" }) });
|
|
1898
1897
|
}
|
|
1899
|
-
function ie({ icon:
|
|
1900
|
-
const [o, d] =
|
|
1898
|
+
function ie({ icon: n, value: r, label: s, items: t, labelKey: a, countKey: i }) {
|
|
1899
|
+
const [o, d] = D(!1), h = Se(null);
|
|
1901
1900
|
$e(() => {
|
|
1902
1901
|
if (!o) return;
|
|
1903
|
-
function
|
|
1904
|
-
|
|
1902
|
+
function v(f) {
|
|
1903
|
+
h.current && !h.current.contains(f.target) && d(!1);
|
|
1905
1904
|
}
|
|
1906
|
-
return document.addEventListener("mousedown",
|
|
1905
|
+
return document.addEventListener("mousedown", v), () => document.removeEventListener("mousedown", v);
|
|
1907
1906
|
}, [o]);
|
|
1908
|
-
const l = t != null && t.length ? t.slice().sort((
|
|
1907
|
+
const l = t != null && t.length ? t.slice().sort((v, f) => f[i] - v[i]) : null;
|
|
1909
1908
|
return /* @__PURE__ */ c(
|
|
1910
1909
|
"div",
|
|
1911
1910
|
{
|
|
1912
|
-
ref:
|
|
1911
|
+
ref: h,
|
|
1913
1912
|
className: `pvx-dash-stat-card ${l ? "pvx-dash-stat-card--clickable" : ""}`,
|
|
1914
|
-
onClick: l ? () => d((
|
|
1913
|
+
onClick: l ? () => d((v) => !v) : void 0,
|
|
1915
1914
|
children: [
|
|
1916
|
-
|
|
1915
|
+
n,
|
|
1917
1916
|
/* @__PURE__ */ c("div", { className: "pvx-dash-stat-content", children: [
|
|
1918
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-stat-value", children:
|
|
1917
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-stat-value", children: r }),
|
|
1919
1918
|
/* @__PURE__ */ e("span", { className: "pvx-dash-stat-label", children: s })
|
|
1920
1919
|
] }),
|
|
1921
|
-
l && /* @__PURE__ */ e("div", { className: `pvx-dash-tooltip pvx-dash-tooltip--scrollable ${o ? "pvx-dash-tooltip--open" : ""}`, children: l.map((
|
|
1922
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-tooltip-label", children:
|
|
1923
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-tooltip-value", children:
|
|
1924
|
-
] },
|
|
1920
|
+
l && /* @__PURE__ */ e("div", { className: `pvx-dash-tooltip pvx-dash-tooltip--scrollable ${o ? "pvx-dash-tooltip--open" : ""}`, children: l.map((v, f) => /* @__PURE__ */ c("div", { className: "pvx-dash-tooltip-row", children: [
|
|
1921
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-tooltip-label", children: v[a] }),
|
|
1922
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-tooltip-value", children: v[i] })
|
|
1923
|
+
] }, f)) })
|
|
1925
1924
|
]
|
|
1926
1925
|
}
|
|
1927
1926
|
);
|
|
1928
1927
|
}
|
|
1929
|
-
function
|
|
1930
|
-
if (!
|
|
1931
|
-
const t =
|
|
1932
|
-
name:
|
|
1928
|
+
function Cn({ stats: n, rating: r, className: s = "" }) {
|
|
1929
|
+
if (!n) return null;
|
|
1930
|
+
const t = n.trackBreakdown.map((i) => ({
|
|
1931
|
+
name: q(i.trackId, i.layout),
|
|
1933
1932
|
lapCount: i.lapCount
|
|
1934
|
-
})), a =
|
|
1933
|
+
})), a = n.carBreakdown.map((i) => ({
|
|
1935
1934
|
name: I(i.carId),
|
|
1936
1935
|
lapCount: i.lapCount
|
|
1937
1936
|
}));
|
|
@@ -1939,8 +1938,8 @@ function kr({ stats: r, rating: n, className: s = "" }) {
|
|
|
1939
1938
|
/* @__PURE__ */ e(
|
|
1940
1939
|
ie,
|
|
1941
1940
|
{
|
|
1942
|
-
icon: /* @__PURE__ */ e(
|
|
1943
|
-
value:
|
|
1941
|
+
icon: /* @__PURE__ */ e(yn, {}),
|
|
1942
|
+
value: n.lapCount.toLocaleString(),
|
|
1944
1943
|
label: "Total Laps",
|
|
1945
1944
|
items: t,
|
|
1946
1945
|
labelKey: "name",
|
|
@@ -1950,35 +1949,35 @@ function kr({ stats: r, rating: n, className: s = "" }) {
|
|
|
1950
1949
|
/* @__PURE__ */ e(
|
|
1951
1950
|
ie,
|
|
1952
1951
|
{
|
|
1953
|
-
icon: /* @__PURE__ */ e(
|
|
1954
|
-
value:
|
|
1952
|
+
icon: /* @__PURE__ */ e(kn, {}),
|
|
1953
|
+
value: n.carBreakdown.length,
|
|
1955
1954
|
label: "Cars Used",
|
|
1956
1955
|
items: a,
|
|
1957
1956
|
labelKey: "name",
|
|
1958
1957
|
countKey: "lapCount"
|
|
1959
1958
|
}
|
|
1960
1959
|
),
|
|
1961
|
-
|
|
1962
|
-
/* @__PURE__ */ e(
|
|
1960
|
+
r && /* @__PURE__ */ c("div", { className: "pvx-dash-stat-card pvx-dash-stat-card--rating", children: [
|
|
1961
|
+
/* @__PURE__ */ e(wn, {}),
|
|
1963
1962
|
/* @__PURE__ */ c("div", { className: "pvx-dash-stat-content", children: [
|
|
1964
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-stat-value", children:
|
|
1963
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-stat-value", children: r.rating.toFixed(1) }),
|
|
1965
1964
|
/* @__PURE__ */ e("span", { className: "pvx-dash-stat-label", children: "Driver Rating" }),
|
|
1966
1965
|
/* @__PURE__ */ c("span", { className: "pvx-dash-stat-sub", children: [
|
|
1967
1966
|
"#",
|
|
1968
|
-
|
|
1967
|
+
r.rank,
|
|
1969
1968
|
" of ",
|
|
1970
|
-
|
|
1969
|
+
r.totalDrivers
|
|
1971
1970
|
] })
|
|
1972
1971
|
] })
|
|
1973
1972
|
] })
|
|
1974
1973
|
] });
|
|
1975
1974
|
}
|
|
1976
|
-
function
|
|
1977
|
-
const s =
|
|
1975
|
+
function Ln({ records: n, className: r = "" }) {
|
|
1976
|
+
const s = w(() => n != null && n.length ? n.slice().sort((t, a) => {
|
|
1978
1977
|
const i = t.recordedAt ? new Date(t.recordedAt).getTime() : 0;
|
|
1979
1978
|
return (a.recordedAt ? new Date(a.recordedAt).getTime() : 0) - i;
|
|
1980
|
-
}) : [], [
|
|
1981
|
-
return s.length ? /* @__PURE__ */ c("div", { className: `pvx-card ${
|
|
1979
|
+
}) : [], [n]);
|
|
1980
|
+
return s.length ? /* @__PURE__ */ c("div", { className: `pvx-card ${r}`, children: [
|
|
1982
1981
|
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ c("h3", { className: "pvx-card-title", children: [
|
|
1983
1982
|
/* @__PURE__ */ e("span", { className: "pvx-dash-records-icon", children: /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1984
1983
|
/* @__PURE__ */ e("path", { d: "M6 9H4.5a2.5 2.5 0 010-5H6" }),
|
|
@@ -1997,11 +1996,11 @@ function wr({ records: r, className: n = "" }) {
|
|
|
1997
1996
|
] }) }),
|
|
1998
1997
|
/* @__PURE__ */ e("div", { className: "pvx-dash-records-list", children: s.map((t, a) => /* @__PURE__ */ c("div", { className: "pvx-dash-record-row", children: [
|
|
1999
1998
|
/* @__PURE__ */ c("div", { className: "pvx-dash-record-info", children: [
|
|
2000
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-record-track", children:
|
|
1999
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-record-track", children: q(t.trackId, t.layout, t.game) }),
|
|
2001
2000
|
/* @__PURE__ */ e("span", { className: "pvx-dash-record-car", children: I(t.carId) })
|
|
2002
2001
|
] }),
|
|
2003
2002
|
/* @__PURE__ */ c("div", { className: "pvx-dash-record-time", children: [
|
|
2004
|
-
/* @__PURE__ */ e("span", { className: "pvx-dash-record-lap", children:
|
|
2003
|
+
/* @__PURE__ */ e("span", { className: "pvx-dash-record-lap", children: A(t.lapTimeMs) }),
|
|
2005
2004
|
/* @__PURE__ */ c("span", { className: `pvx-dash-game-badge pvx-dash-game-badge--${t.game || "evo"}`, children: [
|
|
2006
2005
|
(t.game || "evo").toUpperCase(),
|
|
2007
2006
|
t.gameVersion ? ` ${t.gameVersion}` : ""
|
|
@@ -2010,19 +2009,19 @@ function wr({ records: r, className: n = "" }) {
|
|
|
2010
2009
|
] }, a)) })
|
|
2011
2010
|
] }) : null;
|
|
2012
2011
|
}
|
|
2013
|
-
function
|
|
2014
|
-
if (
|
|
2012
|
+
function Rn({ events: n, isLoading: r, className: s, limit: t = 3 }) {
|
|
2013
|
+
if (r)
|
|
2015
2014
|
return /* @__PURE__ */ e("div", { className: "pvx-loading", children: "Loading upcoming events..." });
|
|
2016
|
-
if (!(
|
|
2015
|
+
if (!(n != null && n.length))
|
|
2017
2016
|
return null;
|
|
2018
|
-
const a = t ?
|
|
2017
|
+
const a = t ? n.slice(0, t) : n, i = n.length - a.length;
|
|
2019
2018
|
return /* @__PURE__ */ c("div", { className: `pvx-card ${s || ""}`, children: [
|
|
2020
2019
|
/* @__PURE__ */ e("div", { className: "pvx-card-header", children: /* @__PURE__ */ c("h3", { className: "pvx-card-title", children: [
|
|
2021
|
-
/* @__PURE__ */ e(
|
|
2020
|
+
/* @__PURE__ */ e($n, {}),
|
|
2022
2021
|
"Upcoming Events",
|
|
2023
2022
|
/* @__PURE__ */ c("span", { className: "pvx-dash-records-count", children: [
|
|
2024
2023
|
"(",
|
|
2025
|
-
|
|
2024
|
+
n.length,
|
|
2026
2025
|
")"
|
|
2027
2026
|
] })
|
|
2028
2027
|
] }) }),
|
|
@@ -2041,7 +2040,7 @@ function Cr({ events: r, isLoading: n, className: s, limit: t = 3 }) {
|
|
|
2041
2040
|
o.track
|
|
2042
2041
|
] }),
|
|
2043
2042
|
o.serverPassword && /* @__PURE__ */ e(
|
|
2044
|
-
|
|
2043
|
+
Tn,
|
|
2045
2044
|
{
|
|
2046
2045
|
password: o.serverPassword,
|
|
2047
2046
|
address: o.serverAddress
|
|
@@ -2054,7 +2053,7 @@ function Cr({ events: r, isLoading: n, className: s, limit: t = 3 }) {
|
|
|
2054
2053
|
month: "short",
|
|
2055
2054
|
year: "numeric"
|
|
2056
2055
|
}) }),
|
|
2057
|
-
/* @__PURE__ */ e("span", { className: "pvx-upcoming-relative", children:
|
|
2056
|
+
/* @__PURE__ */ e("span", { className: "pvx-upcoming-relative", children: Sn(o.startTime) }),
|
|
2058
2057
|
o.isNext && /* @__PURE__ */ e("span", { className: "pvx-upcoming-badge", children: "Next" })
|
|
2059
2058
|
] })
|
|
2060
2059
|
]
|
|
@@ -2070,8 +2069,8 @@ function Cr({ events: r, isLoading: n, className: s, limit: t = 3 }) {
|
|
|
2070
2069
|
] })
|
|
2071
2070
|
] });
|
|
2072
2071
|
}
|
|
2073
|
-
function
|
|
2074
|
-
const [s, t] =
|
|
2072
|
+
function Tn({ password: n, address: r }) {
|
|
2073
|
+
const [s, t] = D(!1), [a, i] = D(!1), o = r ? n ? `join:${r}|${n}` : `join:${r}` : null, d = H(async () => {
|
|
2075
2074
|
if (o)
|
|
2076
2075
|
try {
|
|
2077
2076
|
await navigator.clipboard.writeText(o), t(!0), setTimeout(() => t(!1), 2e3);
|
|
@@ -2086,34 +2085,34 @@ function Lr({ password: r, address: n }) {
|
|
|
2086
2085
|
onClick: d,
|
|
2087
2086
|
title: "Copy join string to clipboard",
|
|
2088
2087
|
children: [
|
|
2089
|
-
/* @__PURE__ */ e(
|
|
2088
|
+
/* @__PURE__ */ e(Dn, {}),
|
|
2090
2089
|
" ",
|
|
2091
2090
|
s ? "Copied!" : "Join"
|
|
2092
2091
|
]
|
|
2093
2092
|
}
|
|
2094
2093
|
),
|
|
2095
|
-
|
|
2094
|
+
n && /* @__PURE__ */ c(F, { children: [
|
|
2096
2095
|
/* @__PURE__ */ e(
|
|
2097
2096
|
"span",
|
|
2098
2097
|
{
|
|
2099
2098
|
className: "pvx-server-detail pvx-server-detail--clickable",
|
|
2100
|
-
onClick: () => i((
|
|
2099
|
+
onClick: () => i((h) => !h),
|
|
2101
2100
|
title: a ? "Hide password" : "Reveal password",
|
|
2102
|
-
children: a ? /* @__PURE__ */ e(
|
|
2101
|
+
children: a ? /* @__PURE__ */ e(Bn, {}) : /* @__PURE__ */ e(In, {})
|
|
2103
2102
|
}
|
|
2104
2103
|
),
|
|
2105
2104
|
a && /* @__PURE__ */ c("span", { className: "pvx-server-detail", children: [
|
|
2106
|
-
/* @__PURE__ */ e(
|
|
2105
|
+
/* @__PURE__ */ e(Mn, {}),
|
|
2107
2106
|
" ",
|
|
2108
|
-
|
|
2107
|
+
n
|
|
2109
2108
|
] })
|
|
2110
2109
|
] })
|
|
2111
2110
|
] });
|
|
2112
2111
|
}
|
|
2113
|
-
function
|
|
2114
|
-
const
|
|
2115
|
-
if (
|
|
2116
|
-
const s = Math.floor(
|
|
2112
|
+
function Sn(n) {
|
|
2113
|
+
const r = new Date(n).getTime() - Date.now();
|
|
2114
|
+
if (r <= 0) return "Now";
|
|
2115
|
+
const s = Math.floor(r / (1e3 * 60 * 60));
|
|
2117
2116
|
if (s < 1) return "Less than 1 hour";
|
|
2118
2117
|
if (s < 24) return `in ${s}h`;
|
|
2119
2118
|
const t = Math.floor(s / 24);
|
|
@@ -2123,51 +2122,51 @@ function Rr(r) {
|
|
|
2123
2122
|
const a = Math.floor(t / 7);
|
|
2124
2123
|
return `in ${a} week${a !== 1 ? "s" : ""}`;
|
|
2125
2124
|
}
|
|
2126
|
-
return oe(
|
|
2125
|
+
return oe(n);
|
|
2127
2126
|
}
|
|
2128
|
-
function
|
|
2127
|
+
function $n() {
|
|
2129
2128
|
return /* @__PURE__ */ c("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: [
|
|
2130
2129
|
/* @__PURE__ */ e("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
|
|
2131
2130
|
/* @__PURE__ */ e("path", { d: "M16 2v4M8 2v4M3 10h18" })
|
|
2132
2131
|
] });
|
|
2133
2132
|
}
|
|
2134
|
-
function
|
|
2133
|
+
function Mn() {
|
|
2135
2134
|
return /* @__PURE__ */ c("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: [
|
|
2136
2135
|
/* @__PURE__ */ e("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2" }),
|
|
2137
2136
|
/* @__PURE__ */ e("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
|
|
2138
2137
|
] });
|
|
2139
2138
|
}
|
|
2140
|
-
function
|
|
2139
|
+
function Dn() {
|
|
2141
2140
|
return /* @__PURE__ */ c("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: [
|
|
2142
2141
|
/* @__PURE__ */ e("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2" }),
|
|
2143
2142
|
/* @__PURE__ */ e("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
|
|
2144
2143
|
] });
|
|
2145
2144
|
}
|
|
2146
|
-
function
|
|
2145
|
+
function In() {
|
|
2147
2146
|
return /* @__PURE__ */ c("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: [
|
|
2148
2147
|
/* @__PURE__ */ e("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }),
|
|
2149
2148
|
/* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "3" })
|
|
2150
2149
|
] });
|
|
2151
2150
|
}
|
|
2152
|
-
function
|
|
2151
|
+
function Bn() {
|
|
2153
2152
|
return /* @__PURE__ */ c("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: [
|
|
2154
2153
|
/* @__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" }),
|
|
2155
2154
|
/* @__PURE__ */ e("line", { x1: "1", y1: "1", x2: "23", y2: "23" })
|
|
2156
2155
|
] });
|
|
2157
2156
|
}
|
|
2158
|
-
function
|
|
2157
|
+
function Pn({ notifications: n, unreadCount: r = 0, onMarkRead: s, onMarkAllRead: t, isLoading: a, className: i }) {
|
|
2159
2158
|
const o = le();
|
|
2160
2159
|
return a ? /* @__PURE__ */ e("div", { className: "pvx-loading", children: "Loading notifications..." }) : /* @__PURE__ */ c("div", { className: `pvx-card ${i || ""}`, children: [
|
|
2161
2160
|
/* @__PURE__ */ c("div", { className: "pvx-card-header", children: [
|
|
2162
2161
|
/* @__PURE__ */ c("h3", { className: "pvx-card-title", children: [
|
|
2163
|
-
/* @__PURE__ */ e(
|
|
2162
|
+
/* @__PURE__ */ e(En, {}),
|
|
2164
2163
|
"Notifications",
|
|
2165
|
-
|
|
2164
|
+
r > 0 && /* @__PURE__ */ e("span", { className: "pvx-notif-badge", children: r > 99 ? "99+" : r })
|
|
2166
2165
|
] }),
|
|
2167
|
-
|
|
2166
|
+
r > 0 && t && /* @__PURE__ */ e("button", { className: "pvx-notif-mark-all", onClick: t, children: "Mark all read" })
|
|
2168
2167
|
] }),
|
|
2169
|
-
|
|
2170
|
-
|
|
2168
|
+
n != null && n.length ? /* @__PURE__ */ e("div", { className: "pvx-notif-list", children: n.map((d) => /* @__PURE__ */ e(
|
|
2169
|
+
An,
|
|
2171
2170
|
{
|
|
2172
2171
|
notification: d,
|
|
2173
2172
|
getUserDisplay: o,
|
|
@@ -2177,28 +2176,28 @@ function Dr({ notifications: r, unreadCount: n = 0, onMarkRead: s, onMarkAllRead
|
|
|
2177
2176
|
)) }) : /* @__PURE__ */ e("div", { className: "pvx-notif-empty", children: "No notifications" })
|
|
2178
2177
|
] });
|
|
2179
2178
|
}
|
|
2180
|
-
function
|
|
2179
|
+
function An({ notification: n, getUserDisplay: r, onMarkRead: s }) {
|
|
2181
2180
|
const t = () => {
|
|
2182
|
-
!
|
|
2181
|
+
!n.isRead && s && s(n.id);
|
|
2183
2182
|
};
|
|
2184
2183
|
return /* @__PURE__ */ c(
|
|
2185
2184
|
"button",
|
|
2186
2185
|
{
|
|
2187
|
-
className: `pvx-notif-item ${
|
|
2186
|
+
className: `pvx-notif-item ${n.isRead ? "" : "pvx-notif-item--unread"}`,
|
|
2188
2187
|
onClick: t,
|
|
2189
2188
|
children: [
|
|
2190
|
-
/* @__PURE__ */ e(
|
|
2189
|
+
/* @__PURE__ */ e(Un, { type: n.type }),
|
|
2191
2190
|
/* @__PURE__ */ c("div", { className: "pvx-notif-content", children: [
|
|
2192
|
-
/* @__PURE__ */ e("span", { className: "pvx-notif-message", children:
|
|
2193
|
-
/* @__PURE__ */ e("span", { className: "pvx-notif-time", children: oe(
|
|
2191
|
+
/* @__PURE__ */ e("span", { className: "pvx-notif-message", children: Ee(n, r) }),
|
|
2192
|
+
/* @__PURE__ */ e("span", { className: "pvx-notif-time", children: oe(n.createdAt) })
|
|
2194
2193
|
] }),
|
|
2195
|
-
!
|
|
2194
|
+
!n.isRead && /* @__PURE__ */ e("span", { className: "pvx-notif-dot" })
|
|
2196
2195
|
]
|
|
2197
2196
|
}
|
|
2198
2197
|
);
|
|
2199
2198
|
}
|
|
2200
|
-
function
|
|
2201
|
-
return
|
|
2199
|
+
function Un({ type: n }) {
|
|
2200
|
+
return n === "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" }) }) }) : n === "ADMIN_MESSAGE" ? /* @__PURE__ */ e("span", { className: "pvx-notif-icon pvx-notif-icon--admin", children: /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2202
2201
|
/* @__PURE__ */ e("path", { d: "m3 11 18-5v12L3 13v-2z" }),
|
|
2203
2202
|
/* @__PURE__ */ e("path", { d: "M11.6 16.8a3 3 0 1 1-5.8-1.6" })
|
|
2204
2203
|
] }) }) : /* @__PURE__ */ e("span", { className: "pvx-notif-icon pvx-notif-icon--record", children: /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
@@ -2210,106 +2209,107 @@ function Pr({ type: r }) {
|
|
|
2210
2209
|
/* @__PURE__ */ e("path", { d: "M18 2H6v7a6 6 0 0 0 12 0V2Z" })
|
|
2211
2210
|
] }) });
|
|
2212
2211
|
}
|
|
2213
|
-
function
|
|
2212
|
+
function En() {
|
|
2214
2213
|
return /* @__PURE__ */ c("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: [
|
|
2215
2214
|
/* @__PURE__ */ e("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }),
|
|
2216
2215
|
/* @__PURE__ */ e("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })
|
|
2217
2216
|
] });
|
|
2218
2217
|
}
|
|
2219
|
-
function
|
|
2220
|
-
const { data: a, isLoading: i, error: o } =
|
|
2221
|
-
return i ||
|
|
2218
|
+
function or({ steamId: n, avatarUrl: r, memberSince: s, className: t = "" }) {
|
|
2219
|
+
const { data: a, isLoading: i, error: o } = mn(n), { data: d, isLoading: h } = vn(n), { data: l, isLoading: v } = hn(), f = xn(), { data: g, isLoading: p } = gn({ limit: 10 }), b = fn(), x = Nn();
|
|
2220
|
+
return i || h ? /* @__PURE__ */ e("div", { className: "pvx-loading", children: "Loading dashboard..." }) : o ? /* @__PURE__ */ e("div", { className: "pvx-empty", children: "Failed to load dashboard data." }) : a ? /* @__PURE__ */ c("div", { className: `pvx-dash ${t}`, children: [
|
|
2222
2221
|
/* @__PURE__ */ e(
|
|
2223
|
-
|
|
2222
|
+
bn,
|
|
2224
2223
|
{
|
|
2225
2224
|
driverName: a.driverName,
|
|
2226
|
-
avatarUrl:
|
|
2225
|
+
avatarUrl: r,
|
|
2227
2226
|
memberSince: s
|
|
2228
2227
|
}
|
|
2229
2228
|
),
|
|
2230
|
-
/* @__PURE__ */ e(
|
|
2231
|
-
|
|
2232
|
-
/* @__PURE__ */ c("div", { className: `pvx-dash-row ${
|
|
2233
|
-
/* @__PURE__ */ e(
|
|
2234
|
-
|
|
2235
|
-
|
|
2229
|
+
/* @__PURE__ */ e(Cn, { stats: a, rating: d }),
|
|
2230
|
+
n && /* @__PURE__ */ e(Rn, { events: l, isLoading: v }),
|
|
2231
|
+
/* @__PURE__ */ c("div", { className: `pvx-dash-row ${f ? "pvx-dash-row--2col" : ""}`, children: [
|
|
2232
|
+
/* @__PURE__ */ e(Ln, { records: a.currentRecords }),
|
|
2233
|
+
f && /* @__PURE__ */ e(
|
|
2234
|
+
Pn,
|
|
2236
2235
|
{
|
|
2237
|
-
notifications:
|
|
2238
|
-
unreadCount: (
|
|
2239
|
-
onMarkRead: (
|
|
2240
|
-
onMarkAllRead: () =>
|
|
2241
|
-
isLoading:
|
|
2236
|
+
notifications: g == null ? void 0 : g.notifications,
|
|
2237
|
+
unreadCount: (g == null ? void 0 : g.unreadCount) || 0,
|
|
2238
|
+
onMarkRead: (u) => b.mutate(u),
|
|
2239
|
+
onMarkAllRead: () => x.mutate(),
|
|
2240
|
+
isLoading: p
|
|
2242
2241
|
}
|
|
2243
2242
|
)
|
|
2244
2243
|
] })
|
|
2245
2244
|
] }) : /* @__PURE__ */ e("div", { className: "pvx-empty", children: "No data available yet. Start driving to see your stats!" });
|
|
2246
2245
|
}
|
|
2247
2246
|
export {
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2247
|
+
Qn as CarsTable,
|
|
2248
|
+
P as CompEmptyState,
|
|
2249
|
+
U as CompLoadingState,
|
|
2250
|
+
nn as CompetitionCard,
|
|
2251
|
+
Xn as CompetitionCards,
|
|
2252
|
+
sr as CompetitionResultsTabs,
|
|
2253
|
+
or as DriverDashboard,
|
|
2254
|
+
bn as DriverProfile,
|
|
2255
|
+
Yn as DriversTable,
|
|
2256
|
+
nr as EntryList,
|
|
2257
|
+
Y as InfoPill,
|
|
2258
|
+
Jn as LapHistoryTable,
|
|
2259
|
+
Pn as NotificationsCard,
|
|
2261
2260
|
Ne as PODIUM_MEDALS,
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2261
|
+
jn as PitVoxPartnerProvider,
|
|
2262
|
+
Zn as RankingsTable,
|
|
2263
|
+
Ln as RecordsTable,
|
|
2264
|
+
rr as RegisterButton,
|
|
2265
|
+
tr as RegistrationPanel,
|
|
2266
|
+
er as RoundResults,
|
|
2268
2267
|
ke as RoundSessionResults,
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2268
|
+
sn as StandingsTable,
|
|
2269
|
+
Cn as StatsCards,
|
|
2270
|
+
Gn as TracksTable,
|
|
2271
|
+
Ze as TypeBadge,
|
|
2272
|
+
Rn as UpcomingEvents,
|
|
2273
|
+
Ae as buildDriverIndexPath,
|
|
2274
2274
|
Pe as buildLapsPath,
|
|
2275
|
-
|
|
2276
|
-
|
|
2275
|
+
Z as buildLeaderboardPath,
|
|
2276
|
+
Ue as buildRecentLapsPath,
|
|
2277
2277
|
T as fetchCdnJson,
|
|
2278
2278
|
I as formatCarName,
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2279
|
+
j as formatDate,
|
|
2280
|
+
Vn as formatDelta,
|
|
2281
|
+
A as formatLapTime,
|
|
2282
|
+
Ee as formatNotificationMessage,
|
|
2283
2283
|
oe as formatRelativeTime,
|
|
2284
|
-
|
|
2285
|
-
|
|
2284
|
+
B as formatSectorTime,
|
|
2285
|
+
q as formatTrackName,
|
|
2286
2286
|
ce as formatTyreCompound,
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2287
|
+
On as useCarLeaderboard,
|
|
2288
|
+
Hn as useCarMetadata,
|
|
2289
|
+
Ve as useCompetitionAllRounds,
|
|
2290
2290
|
de as useCompetitionConfig,
|
|
2291
2291
|
pe as useCompetitionEntryList,
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2292
|
+
je as useCompetitionRound,
|
|
2293
|
+
qe as useCompetitionStandings,
|
|
2294
|
+
zn as useCompetitions,
|
|
2295
|
+
_e as useDriverLaps,
|
|
2296
|
+
vn as useDriverRating,
|
|
2297
|
+
ar as useDriverRatings,
|
|
2298
|
+
mn as useDriverStats,
|
|
2299
|
+
Kn as useLeaderboardIndex,
|
|
2300
|
+
Nn as useMarkAllNotificationsRead,
|
|
2301
|
+
fn as useMarkNotificationRead,
|
|
2302
|
+
gn as useNotifications,
|
|
2303
|
+
xn as useNotificationsEnabled,
|
|
2304
2304
|
k as usePitVox,
|
|
2305
|
-
|
|
2305
|
+
Wn as useRecentLaps,
|
|
2306
2306
|
ue as useRegister,
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2307
|
+
ee as useRegistrationMode,
|
|
2308
|
+
X as useRegistrationStatus,
|
|
2309
|
+
ne as useRegistrationUrl,
|
|
2310
|
+
Fe as useTrackLeaderboard,
|
|
2311
|
+
ir as useUnreadCount,
|
|
2312
|
+
hn as useUpcomingEvents,
|
|
2313
2313
|
le as useUserLookup,
|
|
2314
2314
|
me as useWithdraw
|
|
2315
2315
|
};
|