@burdenoff/microfe-atheletebridge 2026.827.1 → 2026.829.2

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.
Files changed (46) hide show
  1. package/dist/atheletebridge/components/LoadingState.d.ts.map +1 -1
  2. package/dist/atheletebridge/components/LoadingState.js +39 -32
  3. package/dist/atheletebridge/components/LoadingState.js.map +1 -1
  4. package/dist/atheletebridge/components/TeamCard.d.ts.map +1 -1
  5. package/dist/atheletebridge/components/TeamCard.js +45 -49
  6. package/dist/atheletebridge/components/TeamCard.js.map +1 -1
  7. package/dist/atheletebridge/pages/DashboardPage.d.ts.map +1 -1
  8. package/dist/atheletebridge/pages/DashboardPage.js +56 -24
  9. package/dist/atheletebridge/pages/DashboardPage.js.map +1 -1
  10. package/dist/atheletebridge/pages/analytics/CoachAnalyticsPage.d.ts.map +1 -1
  11. package/dist/atheletebridge/pages/analytics/CoachAnalyticsPage.js +58 -56
  12. package/dist/atheletebridge/pages/analytics/CoachAnalyticsPage.js.map +1 -1
  13. package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.d.ts.map +1 -1
  14. package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js +110 -106
  15. package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js.map +1 -1
  16. package/dist/atheletebridge/pages/fixtures/FixturesListPage.d.ts.map +1 -1
  17. package/dist/atheletebridge/pages/fixtures/FixturesListPage.js +80 -71
  18. package/dist/atheletebridge/pages/fixtures/FixturesListPage.js.map +1 -1
  19. package/dist/atheletebridge/pages/onboarding/OnboardingPage.d.ts.map +1 -1
  20. package/dist/atheletebridge/pages/onboarding/OnboardingPage.js +244 -210
  21. package/dist/atheletebridge/pages/onboarding/OnboardingPage.js.map +1 -1
  22. package/dist/atheletebridge/pages/performance/PerformancePage.d.ts.map +1 -1
  23. package/dist/atheletebridge/pages/performance/PerformancePage.js +197 -148
  24. package/dist/atheletebridge/pages/performance/PerformancePage.js.map +1 -1
  25. package/dist/atheletebridge/pages/programs/ProgramDetailPage.d.ts.map +1 -1
  26. package/dist/atheletebridge/pages/programs/ProgramDetailPage.js +169 -143
  27. package/dist/atheletebridge/pages/programs/ProgramDetailPage.js.map +1 -1
  28. package/dist/atheletebridge/pages/programs/ProgramsListPage.d.ts.map +1 -1
  29. package/dist/atheletebridge/pages/programs/ProgramsListPage.js +77 -72
  30. package/dist/atheletebridge/pages/programs/ProgramsListPage.js.map +1 -1
  31. package/dist/atheletebridge/pages/sessions/SessionDetailPage.d.ts.map +1 -1
  32. package/dist/atheletebridge/pages/sessions/SessionDetailPage.js +104 -86
  33. package/dist/atheletebridge/pages/sessions/SessionDetailPage.js.map +1 -1
  34. package/dist/atheletebridge/pages/sessions/SessionsListPage.d.ts.map +1 -1
  35. package/dist/atheletebridge/pages/sessions/SessionsListPage.js +54 -49
  36. package/dist/atheletebridge/pages/sessions/SessionsListPage.js.map +1 -1
  37. package/dist/atheletebridge/pages/teams/TeamDetailPage.d.ts.map +1 -1
  38. package/dist/atheletebridge/pages/teams/TeamDetailPage.js +286 -267
  39. package/dist/atheletebridge/pages/teams/TeamDetailPage.js.map +1 -1
  40. package/dist/atheletebridge/pages/teams/TeamFormPage.d.ts.map +1 -1
  41. package/dist/atheletebridge/pages/teams/TeamFormPage.js +185 -180
  42. package/dist/atheletebridge/pages/teams/TeamFormPage.js.map +1 -1
  43. package/dist/atheletebridge/pages/teams/TeamsListPage.d.ts.map +1 -1
  44. package/dist/atheletebridge/pages/teams/TeamsListPage.js +70 -74
  45. package/dist/atheletebridge/pages/teams/TeamsListPage.js.map +1 -1
  46. package/package.json +1 -1
@@ -1,275 +1,309 @@
1
1
  import { useAbTranslate as e } from "../../i18n.js";
2
2
  import { useAthleteBridge as t } from "../../context/AthleteBridgeContext.js";
3
3
  import { cn as n } from "../../utils/cn.js";
4
- import { MEMBER_ROLE_LABELS as r, MEMBER_ROLE_OPTIONS as i, SPORT_ICONS as a, SPORT_LABELS as o, SPORT_OPTIONS as s } from "../../components/domain.js";
5
- import { useAddMember as c, useCreateTeam as l } from "../../hooks/useAthleteBridgeApi.js";
6
- import { FormField as u, fieldInputClass as d } from "../../components/form.js";
7
- import { useCallback as f, useMemo as p, useState as m } from "react";
8
- import { ArrowLeft as h, ArrowRight as g, Check as _, Loader2 as ee, Users as v } from "lucide-react";
9
- import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
10
- import { GlassCard as S } from "@burdenoff/fe-libs/ui";
4
+ import { MEMBER_ROLE_OPTIONS as r, SPORT_ICONS as i, SPORT_OPTIONS as a } from "../../components/domain.js";
5
+ import { useAddMember as o, useCreateTeam as s } from "../../hooks/useAthleteBridgeApi.js";
6
+ import { FormField as c, fieldInputClass as l } from "../../components/form.js";
7
+ import { useCallback as u, useMemo as ee, useState as d } from "react";
8
+ import { ArrowLeft as f, ArrowRight as p, Check as m, Loader2 as h, Users as g } from "lucide-react";
9
+ import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
10
+ import { GlassCard as te } from "@burdenoff/fe-libs/ui";
11
11
  //#region src/atheletebridge/pages/onboarding/OnboardingPage.tsx
12
- var C = [
13
- {
14
- value: "",
15
- label: "Not age-banded"
16
- },
17
- {
18
- value: "U8",
19
- label: "U8"
20
- },
21
- {
22
- value: "U10",
23
- label: "U10"
24
- },
25
- {
26
- value: "U12",
27
- label: "U12"
28
- },
29
- {
30
- value: "U14",
31
- label: "U14"
32
- },
33
- {
34
- value: "U16",
35
- label: "U16"
36
- },
37
- {
38
- value: "U18",
39
- label: "U18"
40
- },
41
- {
42
- value: "U21",
43
- label: "U21"
44
- },
45
- {
46
- value: "SENIOR",
47
- label: "Senior"
48
- },
49
- {
50
- value: "MASTERS",
51
- label: "Masters"
52
- }
53
- ];
54
- function w(e) {
55
- let t = e.getFullYear(), n = (e) => String(e % 100).padStart(2, "0");
12
+ function b(e) {
56
13
  return [
57
14
  {
58
15
  value: "",
59
- label: "No season"
16
+ label: e("atheletebridge.onboarding.ageGroup.none", "Not age-banded")
17
+ },
18
+ {
19
+ value: "U8",
20
+ label: "U8"
21
+ },
22
+ {
23
+ value: "U10",
24
+ label: "U10"
25
+ },
26
+ {
27
+ value: "U12",
28
+ label: "U12"
29
+ },
30
+ {
31
+ value: "U14",
32
+ label: "U14"
33
+ },
34
+ {
35
+ value: "U16",
36
+ label: "U16"
60
37
  },
61
38
  {
62
- value: String(t),
63
- label: String(t)
39
+ value: "U18",
40
+ label: "U18"
64
41
  },
65
42
  {
66
- value: `${t}/${n(t + 1)}`,
67
- label: `${t}/${n(t + 1)}`
43
+ value: "U21",
44
+ label: "U21"
68
45
  },
69
46
  {
70
- value: `${t - 1}/${n(t)}`,
71
- label: `${t - 1}/${n(t)}`
47
+ value: "SENIOR",
48
+ label: e("atheletebridge.onboarding.ageGroup.senior", "Senior")
72
49
  },
73
50
  {
74
- value: String(t - 1),
75
- label: String(t - 1)
51
+ value: "MASTERS",
52
+ label: e("atheletebridge.onboarding.ageGroup.masters", "Masters")
76
53
  }
77
54
  ];
78
55
  }
79
- var T = 3, E = 120, D = {
80
- 1: "Your sport",
81
- 2: "Create your team",
82
- 3: "Your role"
83
- }, O = "bg-[linear-gradient(120deg,var(--color-action-primary-bg),color-mix(in_oklab,var(--color-action-primary-bg)_62%,var(--color-accent-purple)),var(--color-action-primary-bg))]", k = n("inline-flex items-center justify-center gap-1.5 rounded-lg px-5 py-2.5 text-sm font-semibold", "text-action-primary-text shadow-elevation-1 transition-[filter,box-shadow]", "hover:shadow-elevation-2 hover:brightness-110 disabled:cursor-not-allowed disabled:opacity-60", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", O), A = n("inline-flex items-center justify-center gap-1.5 rounded-lg border border-border-seam px-5 py-2.5", "text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]"), j = n("rounded-lg px-4 py-2.5 text-sm font-medium text-text-secondary transition-colors", "hover:text-text-primary focus-visible:outline-none focus-visible:ring-2", "focus-visible:ring-[var(--color-focus-ring)]"), M = n("inline-flex items-center gap-2 rounded-full border px-4 py-2 text-sm font-medium transition-all", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", "motion-safe:hover:-translate-y-0.5"), N = "border-border-seam bg-bg-surface text-text-secondary hover:border-border-strong hover:text-text-primary", P = n("border-transparent text-action-primary-text shadow-elevation-1", O), F = ({ current: e }) => /* @__PURE__ */ b("div", {
56
+ function x(e, t) {
57
+ let n = e.getFullYear(), r = (e) => String(e % 100).padStart(2, "0");
58
+ return [
59
+ {
60
+ value: "",
61
+ label: t("atheletebridge.onboarding.season.none", "No season")
62
+ },
63
+ {
64
+ value: String(n),
65
+ label: String(n)
66
+ },
67
+ {
68
+ value: `${n}/${r(n + 1)}`,
69
+ label: `${n}/${r(n + 1)}`
70
+ },
71
+ {
72
+ value: `${n - 1}/${r(n)}`,
73
+ label: `${n - 1}/${r(n)}`
74
+ },
75
+ {
76
+ value: String(n - 1),
77
+ label: String(n - 1)
78
+ }
79
+ ];
80
+ }
81
+ var S = 3, C = 120;
82
+ function w(e, t) {
83
+ switch (e) {
84
+ case 1: return t("atheletebridge.onboarding.stepLabel.sport", "Your sport");
85
+ case 2: return t("atheletebridge.onboarding.stepLabel.team", "Create your team");
86
+ case 3: return t("atheletebridge.onboarding.stepLabel.role", "Your role");
87
+ }
88
+ }
89
+ var T = "bg-[linear-gradient(120deg,var(--color-action-primary-bg),color-mix(in_oklab,var(--color-action-primary-bg)_62%,var(--color-accent-purple)),var(--color-action-primary-bg))]", E = n("inline-flex items-center justify-center gap-1.5 rounded-lg px-5 py-2.5 text-sm font-semibold", "text-action-primary-text shadow-elevation-1 transition-[filter,box-shadow]", "hover:shadow-elevation-2 hover:brightness-110 disabled:cursor-not-allowed disabled:opacity-60", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", T), D = n("inline-flex items-center justify-center gap-1.5 rounded-lg border border-border-seam px-5 py-2.5", "text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]"), O = n("rounded-lg px-4 py-2.5 text-sm font-medium text-text-secondary transition-colors", "hover:text-text-primary focus-visible:outline-none focus-visible:ring-2", "focus-visible:ring-[var(--color-focus-ring)]"), k = n("inline-flex items-center gap-2 rounded-full border px-4 py-2 text-sm font-medium transition-all", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", "motion-safe:hover:-translate-y-0.5"), A = "border-border-seam bg-bg-surface text-text-secondary hover:border-border-strong hover:text-text-primary", j = n("border-transparent text-action-primary-text shadow-elevation-1", T), ne = ({ current: e, stepLabel: t, progressLabel: r }) => /* @__PURE__ */ v("div", {
84
90
  className: "flex items-start justify-center",
85
91
  role: "progressbar",
86
92
  "aria-valuemin": 1,
87
- "aria-valuemax": T,
93
+ "aria-valuemax": S,
88
94
  "aria-valuenow": e,
89
- "aria-valuetext": `Step ${e} of ${T}: ${D[e]}`,
90
- "aria-label": "Onboarding progress",
95
+ "aria-valuetext": `${r} ${e} / ${S}: ${t(e)}`,
96
+ "aria-label": r,
91
97
  children: [
92
98
  1,
93
99
  2,
94
100
  3
95
- ].map((t, r) => {
96
- let i = t < e, a = t === e;
97
- return /* @__PURE__ */ x("div", {
101
+ ].map((r, i) => {
102
+ let a = r < e, o = r === e;
103
+ return /* @__PURE__ */ y("div", {
98
104
  className: "flex items-start",
99
105
  "aria-hidden": "true",
100
- children: [r > 0 && /* @__PURE__ */ b("span", { className: n("mt-6 h-px w-10 shrink-0 transition-colors sm:w-20", t <= e ? "bg-[var(--color-accent-teal)]" : "bg-border-seam") }), /* @__PURE__ */ x("div", {
106
+ children: [i > 0 && /* @__PURE__ */ v("span", { className: n("mt-6 h-px w-10 shrink-0 transition-colors sm:w-20", r <= e ? "bg-[var(--color-accent-teal)]" : "bg-border-seam") }), /* @__PURE__ */ y("div", {
101
107
  className: "flex w-24 flex-col items-center gap-2 sm:w-32",
102
- children: [/* @__PURE__ */ b("span", {
103
- className: n("flex h-12 w-12 items-center justify-center rounded-full text-base font-semibold transition-all", i && "bg-[var(--color-accent-teal)] text-[var(--color-bg-canvas)]", a && n("text-action-primary-text shadow-elevation-2", O), !i && !a && "border border-border-strong text-text-muted"),
104
- children: i ? /* @__PURE__ */ b(_, { className: "h-5 w-5" }) : t
105
- }), /* @__PURE__ */ b("span", {
106
- className: n("text-center text-sm", a ? "font-semibold text-text-primary" : "text-text-secondary"),
107
- children: D[t]
108
+ children: [/* @__PURE__ */ v("span", {
109
+ className: n("flex h-12 w-12 items-center justify-center rounded-full text-base font-semibold transition-all", a && "bg-[var(--color-accent-teal)] text-[var(--color-bg-canvas)]", o && n("text-action-primary-text shadow-elevation-2", T), !a && !o && "border border-border-strong text-text-muted"),
110
+ children: a ? /* @__PURE__ */ v(m, { className: "h-5 w-5" }) : r
111
+ }), /* @__PURE__ */ v("span", {
112
+ className: n("text-center text-sm", o ? "font-semibold text-text-primary" : "text-text-secondary"),
113
+ children: t(r)
108
114
  })]
109
115
  })]
110
- }, t);
116
+ }, r);
111
117
  })
112
- }), I = ({ value: e, onSelect: t, size: r }) => /* @__PURE__ */ b("div", {
118
+ }), M = ({ value: e, onSelect: t, size: r, getLabel: o, groupLabel: s }) => /* @__PURE__ */ v("div", {
113
119
  className: "flex flex-wrap gap-2",
114
120
  role: "group",
115
- "aria-label": "Sport",
116
- children: s.map((i) => {
117
- let s = a[i], c = e === i;
118
- return /* @__PURE__ */ x("button", {
121
+ "aria-label": s,
122
+ children: a.map((a) => {
123
+ let s = i[a], c = e === a;
124
+ return /* @__PURE__ */ y("button", {
119
125
  type: "button",
120
- onClick: () => t(i),
126
+ onClick: () => t(a),
121
127
  "aria-pressed": c,
122
- className: n(M, r === "lg" && "px-5 py-2.5 text-base", c ? P : N),
123
- children: [/* @__PURE__ */ b(s, {
128
+ className: n(k, r === "lg" && "px-5 py-2.5 text-base", c ? j : A),
129
+ children: [/* @__PURE__ */ v(s, {
124
130
  className: r === "lg" ? "h-5 w-5" : "h-4 w-4",
125
131
  "aria-hidden": "true"
126
- }), o[i]]
127
- }, i);
132
+ }), o(a)]
133
+ }, a);
128
134
  })
129
- }), L = () => {
130
- let a = e(), { navigateTo: o, currentUser: s } = t(), _ = l(), D = c(), [O, L] = m(1), [R, z] = m(null), [B, V] = m(""), [H, U] = m(""), [W, G] = m(""), [K, q] = m(null), [J, Y] = m(null), X = p(() => w(/* @__PURE__ */ new Date()), []), Z = _.isPending || D.isPending, Q = f(() => o("/"), [o]), te = f(() => {
131
- Y(null), L((e) => e === 1 ? 1 : e - 1);
132
- }, []), $ = f((e) => {
133
- z(e), Y(null);
134
- }, []), ne = f(() => {
135
- if (O === 1) {
136
- if (!R) {
137
- Y(a("atheletebridge.pages.onboarding.errorSport", "Pick a sport to continue."));
135
+ }), N = () => {
136
+ let i = e(), { navigateTo: a, currentUser: m } = t(), T = s(), N = o(), [P, F] = d(1), [I, L] = d(null), [R, z] = d(""), [B, V] = d(""), [H, U] = d(""), [W, G] = d(null), [K, q] = d(null), J = b(i), Y = ee(() => x(/* @__PURE__ */ new Date(), i), [i]), X = u((e) => {
137
+ switch (e) {
138
+ case "ATHLETICS": return i("atheletebridge.sport.athletics", "Athletics");
139
+ case "BASKETBALL": return i("atheletebridge.sport.basketball", "Basketball");
140
+ case "CRICKET": return i("atheletebridge.sport.cricket", "Cricket");
141
+ case "ESPORTS": return i("atheletebridge.sport.esports", "Esports");
142
+ case "FOOTBALL": return i("atheletebridge.sport.football", "Football");
143
+ case "OTHER": return i("atheletebridge.sport.other", "Other");
144
+ case "SWIMMING": return i("atheletebridge.sport.swimming", "Swimming");
145
+ case "TENNIS": return i("atheletebridge.sport.tennis", "Tennis");
146
+ }
147
+ }, [i]), re = u((e) => {
148
+ switch (e) {
149
+ case "PLAYER": return i("atheletebridge.memberRole.player", "Player");
150
+ case "CAPTAIN": return i("atheletebridge.memberRole.captain", "Captain");
151
+ case "COACH": return i("atheletebridge.memberRole.coach", "Coach");
152
+ case "ASSISTANT_COACH": return i("atheletebridge.memberRole.assistantCoach", "Assistant Coach");
153
+ case "PHYSIO": return i("atheletebridge.memberRole.physio", "Physio");
154
+ case "MANAGER": return i("atheletebridge.memberRole.manager", "Manager");
155
+ }
156
+ }, [i]), Z = T.isPending || N.isPending, Q = u(() => a("/"), [a]), ie = u(() => {
157
+ q(null), F((e) => e === 1 ? 1 : e - 1);
158
+ }, []), $ = u((e) => {
159
+ L(e), q(null);
160
+ }, []), ae = u(() => {
161
+ if (P === 1) {
162
+ if (!I) {
163
+ q(i("atheletebridge.pages.onboarding.errorSport", "Pick a sport to continue."));
138
164
  return;
139
165
  }
140
- Y(null), L(2);
166
+ q(null), F(2);
141
167
  return;
142
168
  }
143
- if (!B.trim()) {
144
- Y(a("atheletebridge.pages.onboarding.errorTeamName", "Give your team a name to continue."));
169
+ if (!R.trim()) {
170
+ q(i("atheletebridge.pages.onboarding.errorTeamName", "Give your team a name to continue."));
145
171
  return;
146
172
  }
147
- Y(null), L(3);
173
+ q(null), F(3);
148
174
  }, [
149
- O,
175
+ P,
176
+ I,
150
177
  R,
151
- B,
152
- a
153
- ]), re = f(async (e) => {
154
- if (e.preventDefault(), !R || !K || !B.trim()) {
155
- Y(a("atheletebridge.pages.onboarding.errorRole", "Pick your role to finish."));
178
+ i
179
+ ]), oe = u(async (e) => {
180
+ if (e.preventDefault(), !I || !W || !R.trim()) {
181
+ q(i("atheletebridge.pages.onboarding.errorRole", "Pick your role to finish."));
156
182
  return;
157
183
  }
158
- Y(null);
184
+ q(null);
159
185
  try {
160
- let e = await _.mutateAsync({
161
- name: B.trim(),
162
- sport: R,
186
+ let e = await T.mutateAsync({
187
+ name: R.trim(),
188
+ sport: I,
163
189
  status: "FORMING",
164
- ageGroup: H || void 0,
165
- season: W || void 0
190
+ ageGroup: B || void 0,
191
+ season: H || void 0
166
192
  });
167
- if (s?.id) {
168
- let t = [s.firstName, s.lastName].filter((e) => !!e).join(" ").trim(), n = s.name ?? (t || s.email);
193
+ if (m?.id) {
194
+ let t = [m.firstName, m.lastName].filter((e) => !!e).join(" ").trim(), n = m.name ?? (t || m.email);
169
195
  try {
170
- await D.mutateAsync({
196
+ await N.mutateAsync({
171
197
  teamId: e.id,
172
- userId: s.id,
198
+ userId: m.id,
173
199
  displayName: n,
174
- role: K,
200
+ role: W,
175
201
  status: "ACTIVE"
176
202
  });
177
203
  } catch {}
178
204
  }
179
- o(`/teams/${e.id}`);
205
+ a(`/teams/${e.id}`);
180
206
  } catch (e) {
181
- Y(e instanceof Error ? e.message : a("atheletebridge.pages.onboarding.errorCreate", "We couldn't create your team. Please try again."));
207
+ q(e instanceof Error ? e.message : i("atheletebridge.pages.onboarding.errorCreate", "We couldn't create your team. Please try again."));
182
208
  }
183
209
  }, [
210
+ I,
211
+ W,
184
212
  R,
185
- K,
186
213
  B,
187
214
  H,
188
- W,
189
- s,
190
- _,
191
- D,
192
- o,
193
- a
194
- ]), ie = O === 1 ? a("atheletebridge.pages.onboarding.step1Title", "What do you coach?") : O === 2 ? a("atheletebridge.pages.onboarding.step2Title", "Create your first team") : a("atheletebridge.pages.onboarding.step3Title", "What's your role?"), ae = O === 1 ? a("atheletebridge.pages.onboarding.step1Subtitle", "Your sport shapes the squads, fixtures and training you set up next.") : O === 2 ? a("atheletebridge.pages.onboarding.step2Subtitle", "You can add players and fixtures once your team exists.") : a("atheletebridge.pages.onboarding.step3Subtitle", "We add you to this squad so the roster starts with you.");
195
- return /* @__PURE__ */ b("div", {
215
+ m,
216
+ T,
217
+ N,
218
+ a,
219
+ i
220
+ ]), se = P === 1 ? i("atheletebridge.pages.onboarding.step1Title", "What do you coach?") : P === 2 ? i("atheletebridge.pages.onboarding.step2Title", "Create your first team") : i("atheletebridge.pages.onboarding.step3Title", "What's your role?"), ce = P === 1 ? i("atheletebridge.pages.onboarding.step1Subtitle", "Your sport shapes the squads, fixtures and training you set up next.") : P === 2 ? i("atheletebridge.pages.onboarding.step2Subtitle", "You can add players and fixtures once your team exists.") : i("atheletebridge.pages.onboarding.step3Subtitle", "We add you to this squad so the roster starts with you.");
221
+ return /* @__PURE__ */ v("div", {
196
222
  className: "min-h-full bg-bg-canvas px-4 py-10 sm:px-6 sm:py-14",
197
- children: /* @__PURE__ */ x("div", {
223
+ children: /* @__PURE__ */ y("div", {
198
224
  className: "mx-auto flex w-full max-w-2xl flex-col gap-8",
199
225
  children: [
200
- /* @__PURE__ */ b(F, { current: O }),
201
- /* @__PURE__ */ x("header", {
226
+ /* @__PURE__ */ v(ne, {
227
+ current: P,
228
+ stepLabel: (e) => w(e, i),
229
+ progressLabel: i("atheletebridge.pages.onboarding.progressLabel", "Onboarding progress")
230
+ }),
231
+ /* @__PURE__ */ y("header", {
202
232
  className: "text-center",
203
- children: [/* @__PURE__ */ b("h1", {
233
+ children: [/* @__PURE__ */ v("h1", {
204
234
  className: "text-3xl font-bold tracking-tight text-text-primary sm:text-4xl",
205
- children: ie
206
- }), /* @__PURE__ */ b("p", {
235
+ children: se
236
+ }), /* @__PURE__ */ v("p", {
207
237
  className: "mx-auto mt-2 max-w-lg text-sm text-text-secondary sm:text-base",
208
- children: ae
238
+ children: ce
209
239
  })]
210
240
  }),
211
- /* @__PURE__ */ b("form", {
212
- onSubmit: re,
241
+ /* @__PURE__ */ v("form", {
242
+ onSubmit: oe,
213
243
  noValidate: !0,
214
- children: /* @__PURE__ */ x(S, {
244
+ children: /* @__PURE__ */ y(te, {
215
245
  treatment: "insight",
216
246
  className: "p-6 sm:p-8",
217
- children: [/* @__PURE__ */ x("div", {
247
+ children: [/* @__PURE__ */ y("div", {
218
248
  className: "space-y-6",
219
249
  children: [
220
- O === 1 && /* @__PURE__ */ b(I, {
221
- value: R,
250
+ P === 1 && /* @__PURE__ */ v(M, {
251
+ value: I,
222
252
  onSelect: $,
223
- size: "lg"
253
+ size: "lg",
254
+ getLabel: X,
255
+ groupLabel: i("atheletebridge.pages.onboarding.sport", "Sport")
224
256
  }),
225
- O === 2 && /* @__PURE__ */ x(y, { children: [
226
- /* @__PURE__ */ b(u, {
227
- label: a("atheletebridge.pages.onboarding.teamName", "Team name"),
257
+ P === 2 && /* @__PURE__ */ y(_, { children: [
258
+ /* @__PURE__ */ v(c, {
259
+ label: i("atheletebridge.pages.onboarding.teamName", "Team name"),
228
260
  htmlFor: "onboarding-team-name",
229
261
  required: !0,
230
- children: /* @__PURE__ */ b("input", {
262
+ children: /* @__PURE__ */ v("input", {
231
263
  id: "onboarding-team-name",
232
- className: d,
233
- value: B,
234
- maxLength: E,
264
+ className: l,
265
+ value: R,
266
+ maxLength: C,
235
267
  onChange: (e) => {
236
- V(e.target.value), Y(null);
268
+ z(e.target.value), q(null);
237
269
  },
238
- placeholder: "e.g. Riverside United U16"
270
+ placeholder: i("atheletebridge.pages.onboarding.teamNamePlaceholder", "e.g. Riverside United U16")
239
271
  })
240
272
  }),
241
- /* @__PURE__ */ b(u, {
242
- label: a("atheletebridge.pages.onboarding.sport", "Sport"),
243
- children: /* @__PURE__ */ b(I, {
244
- value: R,
273
+ /* @__PURE__ */ v(c, {
274
+ label: i("atheletebridge.pages.onboarding.sport", "Sport"),
275
+ children: /* @__PURE__ */ v(M, {
276
+ value: I,
245
277
  onSelect: $,
246
- size: "sm"
278
+ size: "sm",
279
+ getLabel: X,
280
+ groupLabel: i("atheletebridge.pages.onboarding.sport", "Sport")
247
281
  })
248
282
  }),
249
- /* @__PURE__ */ x("div", {
283
+ /* @__PURE__ */ y("div", {
250
284
  className: "grid grid-cols-1 gap-5 sm:grid-cols-2",
251
- children: [/* @__PURE__ */ b(u, {
252
- label: a("atheletebridge.pages.onboarding.ageGroup", "Age group"),
285
+ children: [/* @__PURE__ */ v(c, {
286
+ label: i("atheletebridge.pages.onboarding.ageGroup", "Age group"),
253
287
  htmlFor: "onboarding-age-group",
254
- children: /* @__PURE__ */ b("select", {
288
+ children: /* @__PURE__ */ v("select", {
255
289
  id: "onboarding-age-group",
256
- className: d,
257
- value: H,
258
- onChange: (e) => U(e.target.value),
259
- children: C.map((e) => /* @__PURE__ */ b("option", {
290
+ className: l,
291
+ value: B,
292
+ onChange: (e) => V(e.target.value),
293
+ children: J.map((e) => /* @__PURE__ */ v("option", {
260
294
  value: e.value,
261
295
  children: e.label
262
296
  }, e.value || "none"))
263
297
  })
264
- }), /* @__PURE__ */ b(u, {
265
- label: a("atheletebridge.pages.onboarding.season", "Season"),
298
+ }), /* @__PURE__ */ v(c, {
299
+ label: i("atheletebridge.pages.onboarding.season", "Season"),
266
300
  htmlFor: "onboarding-season",
267
- children: /* @__PURE__ */ b("select", {
301
+ children: /* @__PURE__ */ v("select", {
268
302
  id: "onboarding-season",
269
- className: d,
270
- value: W,
271
- onChange: (e) => G(e.target.value),
272
- children: X.map((e) => /* @__PURE__ */ b("option", {
303
+ className: l,
304
+ value: H,
305
+ onChange: (e) => U(e.target.value),
306
+ children: Y.map((e) => /* @__PURE__ */ v("option", {
273
307
  value: e.value,
274
308
  children: e.label
275
309
  }, e.value || "none"))
@@ -277,67 +311,67 @@ var T = 3, E = 120, D = {
277
311
  })]
278
312
  })
279
313
  ] }),
280
- O === 3 && /* @__PURE__ */ b("div", {
314
+ P === 3 && /* @__PURE__ */ v("div", {
281
315
  className: "flex flex-wrap gap-2",
282
316
  role: "group",
283
- "aria-label": "Your role",
284
- children: i.map((e) => {
285
- let t = K === e;
286
- return /* @__PURE__ */ x("button", {
317
+ "aria-label": i("atheletebridge.pages.onboarding.yourRole", "Your role"),
318
+ children: r.map((e) => {
319
+ let t = W === e;
320
+ return /* @__PURE__ */ y("button", {
287
321
  type: "button",
288
322
  onClick: () => {
289
- q(e), Y(null);
323
+ G(e), q(null);
290
324
  },
291
325
  "aria-pressed": t,
292
- className: n(M, "px-5 py-2.5 text-base", t ? P : N),
293
- children: [/* @__PURE__ */ b(v, {
326
+ className: n(k, "px-5 py-2.5 text-base", t ? j : A),
327
+ children: [/* @__PURE__ */ v(g, {
294
328
  className: "h-5 w-5",
295
329
  "aria-hidden": "true"
296
- }), r[e]]
330
+ }), re(e)]
297
331
  }, e);
298
332
  })
299
333
  }),
300
- J && /* @__PURE__ */ b("p", {
334
+ K && /* @__PURE__ */ v("p", {
301
335
  role: "alert",
302
336
  className: "text-sm text-status-error-text",
303
- children: J
337
+ children: K
304
338
  })
305
339
  ]
306
- }), /* @__PURE__ */ x("div", {
340
+ }), /* @__PURE__ */ y("div", {
307
341
  className: "mt-8 flex flex-wrap items-center justify-between gap-3 border-t border-border-seam pt-6",
308
- children: [/* @__PURE__ */ x("button", {
342
+ children: [/* @__PURE__ */ y("button", {
309
343
  type: "button",
310
- onClick: O === 1 ? Q : te,
311
- className: A,
344
+ onClick: P === 1 ? Q : ie,
345
+ className: D,
312
346
  disabled: Z,
313
- children: [/* @__PURE__ */ b(h, {
347
+ children: [/* @__PURE__ */ v(f, {
314
348
  className: "h-4 w-4",
315
349
  "aria-hidden": "true"
316
- }), O === 1 ? a("atheletebridge.pages.onboarding.exit", "Exit") : a("atheletebridge.pages.onboarding.back", "Back")]
317
- }), /* @__PURE__ */ x("div", {
350
+ }), P === 1 ? i("atheletebridge.pages.onboarding.exit", "Exit") : i("atheletebridge.pages.onboarding.back", "Back")]
351
+ }), /* @__PURE__ */ y("div", {
318
352
  className: "flex items-center gap-2",
319
- children: [/* @__PURE__ */ b("button", {
353
+ children: [/* @__PURE__ */ v("button", {
320
354
  type: "button",
321
355
  onClick: Q,
322
- className: j,
356
+ className: O,
323
357
  disabled: Z,
324
- children: a("atheletebridge.pages.onboarding.skip", "Skip for now")
325
- }), O === 3 ? /* @__PURE__ */ b("button", {
358
+ children: i("atheletebridge.pages.onboarding.skip", "Skip for now")
359
+ }), P === 3 ? /* @__PURE__ */ v("button", {
326
360
  type: "submit",
327
- className: k,
328
- disabled: Z || !K,
329
- children: Z ? /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(ee, {
361
+ className: E,
362
+ disabled: Z || !W,
363
+ children: Z ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(h, {
330
364
  className: "h-4 w-4 animate-spin",
331
365
  "aria-hidden": "true"
332
- }), a("atheletebridge.pages.onboarding.creating", "Creating…")] }) : /* @__PURE__ */ x(y, { children: [a("atheletebridge.pages.onboarding.finish", "Create team"), /* @__PURE__ */ b(g, {
366
+ }), i("atheletebridge.pages.onboarding.creating", "Creating…")] }) : /* @__PURE__ */ y(_, { children: [i("atheletebridge.pages.onboarding.finish", "Create team"), /* @__PURE__ */ v(p, {
333
367
  className: "h-4 w-4",
334
368
  "aria-hidden": "true"
335
369
  })] })
336
- }) : /* @__PURE__ */ x("button", {
370
+ }) : /* @__PURE__ */ y("button", {
337
371
  type: "button",
338
- onClick: ne,
339
- className: k,
340
- children: [a("atheletebridge.pages.onboarding.continue", "Continue"), /* @__PURE__ */ b(g, {
372
+ onClick: ae,
373
+ className: E,
374
+ children: [i("atheletebridge.pages.onboarding.continue", "Continue"), /* @__PURE__ */ v(p, {
341
375
  className: "h-4 w-4",
342
376
  "aria-hidden": "true"
343
377
  })]
@@ -346,19 +380,19 @@ var T = 3, E = 120, D = {
346
380
  })]
347
381
  })
348
382
  }),
349
- /* @__PURE__ */ x("p", {
383
+ /* @__PURE__ */ y("p", {
350
384
  className: "text-center text-sm text-text-secondary",
351
385
  children: [
352
- a("atheletebridge.pages.onboarding.footer", "Step"),
386
+ i("atheletebridge.pages.onboarding.footer", "Step"),
353
387
  " ",
354
- O,
388
+ P,
355
389
  " ",
356
- a("atheletebridge.pages.onboarding.footerOf", "of"),
390
+ i("atheletebridge.pages.onboarding.footerOf", "of"),
357
391
  " ",
358
- T,
392
+ S,
359
393
  " —",
360
394
  " ",
361
- a("atheletebridge.pages.onboarding.footerHint", "takes about a minute.")
395
+ i("atheletebridge.pages.onboarding.footerHint", "takes about a minute.")
362
396
  ]
363
397
  })
364
398
  ]
@@ -366,6 +400,6 @@ var T = 3, E = 120, D = {
366
400
  });
367
401
  };
368
402
  //#endregion
369
- export { L as OnboardingPage };
403
+ export { N as OnboardingPage };
370
404
 
371
405
  //# sourceMappingURL=OnboardingPage.js.map