@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,41 +1,42 @@
1
- import { useAthleteBridge as e } from "../../context/AthleteBridgeContext.js";
2
- import { PageLayout as t } from "../../components/PageLayout.js";
3
- import { StatusBadge as n } from "../../components/StatusBadge.js";
4
- import { MEMBER_ROLE_LABELS as r, SPORT_LABELS as i } from "../../components/domain.js";
5
- import { Crest as ee } from "../../components/Crest.js";
6
- import { MatchupRow as te } from "../../components/MatchupRow.js";
1
+ import { useAbTranslate as e } from "../../i18n.js";
2
+ import { useAthleteBridge as t } from "../../context/AthleteBridgeContext.js";
3
+ import { PageLayout as n } from "../../components/PageLayout.js";
4
+ import { StatusBadge as r } from "../../components/StatusBadge.js";
5
+ import { MEMBER_ROLE_LABELS as i, SPORT_LABELS as ee } from "../../components/domain.js";
6
+ import { Crest as te } from "../../components/Crest.js";
7
+ import { MatchupRow as a } from "../../components/MatchupRow.js";
7
8
  import { UserAvatar as ne } from "../../components/UserAvatar.js";
8
- import { EmptyState as a } from "../../components/EmptyState.js";
9
- import { ErrorState as re, LoadingState as ie } from "../../components/LoadingState.js";
10
- import { useAddMember as ae, useArchiveTeam as o, useRemoveMember as oe, useTeam as se } from "../../hooks/useAthleteBridgeApi.js";
11
- import { FormField as s, fieldInputClass as c } from "../../components/form.js";
12
- import { UserSearchSelect as l } from "../../components/UserSearchSelect.js";
13
- import { useState as u } from "react";
14
- import { useMutation as d, useQueryClient as f } from "@tanstack/react-query";
15
- import { Archive as ce, ArrowLeft as p, CalendarDays as m, Check as h, Edit as le, Loader2 as g, MapPin as _, Pencil as v, Plus as y, Trash2 as b, UserPlus as x, X as S } from "lucide-react";
16
- import { useParams as C } from "react-router";
17
- import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
18
- import { GlassCard as D, ResponsiveDialog as ue, ResponsiveDialogContent as de, ResponsiveDialogFooter as fe, ResponsiveDialogHeader as pe, ResponsiveDialogTitle as me } from "@burdenoff/fe-libs/ui";
19
- import { clearGraphqlFetchResponseCache as O, graphqlFetch as k } from "@burdenoff/fe-libs/shared/graphql";
9
+ import { EmptyState as o } from "../../components/EmptyState.js";
10
+ import { ErrorState as s, LoadingState as c } from "../../components/LoadingState.js";
11
+ import { useAddMember as l, useArchiveTeam as re, useRemoveMember as ie, useTeam as ae } from "../../hooks/useAthleteBridgeApi.js";
12
+ import { FormField as u, fieldInputClass as d } from "../../components/form.js";
13
+ import { UserSearchSelect as oe } from "../../components/UserSearchSelect.js";
14
+ import { useState as f } from "react";
15
+ import { useMutation as p, useQueryClient as m } from "@tanstack/react-query";
16
+ import { Archive as se, ArrowLeft as h, CalendarDays as g, Check as _, Edit as ce, Loader2 as v, MapPin as le, Pencil as ue, Plus as de, Trash2 as y, UserPlus as b, X as x } from "lucide-react";
17
+ import { useParams as S } from "react-router";
18
+ import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
19
+ import { GlassCard as E, ResponsiveDialog as fe, ResponsiveDialogContent as pe, ResponsiveDialogFooter as me, ResponsiveDialogHeader as he, ResponsiveDialogTitle as ge } from "@burdenoff/fe-libs/ui";
20
+ import { clearGraphqlFetchResponseCache as D, graphqlFetch as O } from "@burdenoff/fe-libs/shared/graphql";
20
21
  //#region src/atheletebridge/pages/teams/TeamDetailPage.tsx
21
- var A = Object.keys(r), j = [
22
+ var k = Object.keys(i), A = [
22
23
  "TRIAL",
23
24
  "ACTIVE",
24
25
  "INJURED",
25
26
  "SUSPENDED",
26
27
  "RELEASED"
27
- ], M = (e) => e.charAt(0) + e.slice(1).toLowerCase(), N = {
28
+ ], j = (e) => e.charAt(0) + e.slice(1).toLowerCase(), M = {
28
29
  userId: "",
29
30
  displayName: "",
30
31
  role: "PLAYER",
31
32
  status: "ACTIVE",
32
33
  position: "",
33
34
  jerseyNumber: ""
34
- }, P = (t) => {
35
- let n = f(), { apiGatewayUrl: r } = e();
36
- return d({
35
+ }, N = (e) => {
36
+ let n = m(), { apiGatewayUrl: r } = t();
37
+ return p({
37
38
  mutationFn: async ({ id: e, input: t }) => {
38
- let n = await k({
39
+ let n = await O({
39
40
  gateway: "workspace",
40
41
  baseUrl: r,
41
42
  query: "mutation AthUpdateMember($id: ID!, $input: AthUpdateMemberInput!) {\n athUpdateMember(id: $id, input: $input) {\n id teamId displayName role status position jerseyNumber\n }\n }",
@@ -46,161 +47,169 @@ var A = Object.keys(r), j = [
46
47
  workspaceToken: !0
47
48
  });
48
49
  if (n.errors?.length) throw Error(n.errors[0]?.message ?? "Failed to update member.");
49
- if (O(), !n.data) throw Error("Update did not return data.");
50
+ if (D(), !n.data) throw Error("Update did not return data.");
50
51
  return n.data.athUpdateMember;
51
52
  },
52
53
  onSuccess: () => {
53
54
  n.invalidateQueries({ queryKey: [
54
55
  "atheletebridge",
55
56
  "team",
56
- t
57
+ e
57
58
  ] }), n.invalidateQueries({ queryKey: [
58
59
  "atheletebridge",
59
60
  "members",
60
- t
61
+ e
61
62
  ] });
62
63
  }
63
64
  });
64
65
  };
65
- function F() {
66
- let { id: d } = C(), { navigateTo: f } = e(), O = se(d), k = o(), F = ae(), I = oe(d), L = P(d), [R, z] = u(!1), [B, V] = u(N), [H, U] = u(null), [he, W] = u(null), [G, K] = u(null), [q, J] = u(null);
67
- if (O.isLoading) return /* @__PURE__ */ T(t, {
68
- title: "Team",
69
- children: /* @__PURE__ */ T(ie, { label: "Loading team…" })
66
+ function P() {
67
+ let p = e(), { id: m } = S(), { navigateTo: D } = t(), O = ae(m), P = re(), F = l(), I = ie(m), L = N(m), [_e, R] = f(!1), [z, B] = f(M), [V, H] = f(null), [ve, U] = f(null), [W, G] = f(null), [K, q] = f(null);
68
+ if (O.isLoading) return /* @__PURE__ */ w(n, {
69
+ title: p("atheletebridge.pages.teamDetail.title", "Team"),
70
+ children: /* @__PURE__ */ w(c, { label: p("atheletebridge.pages.teamDetail.loading", "Loading team…") })
70
71
  });
71
- if (O.isError || !O.data) return /* @__PURE__ */ T(t, {
72
- title: "Team",
73
- children: /* @__PURE__ */ T(re, {
74
- title: "Team not found",
75
- message: "This team does not exist or you do not have access to it.",
76
- onRetry: () => f("/teams")
72
+ if (O.isError || !O.data) return /* @__PURE__ */ w(n, {
73
+ title: p("atheletebridge.pages.teamDetail.title", "Team"),
74
+ children: /* @__PURE__ */ w(s, {
75
+ title: p("atheletebridge.pages.teamDetail.notFoundTitle", "Team not found"),
76
+ message: p("atheletebridge.pages.teamDetail.notFoundMessage", "This team does not exist or you do not have access to it."),
77
+ onRetry: () => D("/teams")
77
78
  })
78
79
  });
79
- let Y = O.data, X = Y.members?.items ?? [], Z = Y.fixtures?.items ?? [], Q = [
80
- i[Y.sport],
81
- Y.ageGroup ?? void 0,
82
- Y.season ?? void 0,
83
- Y.homeVenue ?? void 0
84
- ].filter(Boolean), ge = async () => {
85
- d && (await k.mutateAsync(d), f("/teams"));
86
- }, _e = (e) => {
87
- J(null), W(e.id), K({
80
+ let J = O.data, Y = J.members?.items ?? [], X = J.fixtures?.items ?? [], Z = [
81
+ ee[J.sport],
82
+ J.ageGroup ?? void 0,
83
+ J.season ?? void 0,
84
+ J.homeVenue ?? void 0
85
+ ].filter(Boolean), Q = async () => {
86
+ m && (await P.mutateAsync(m), D("/teams"));
87
+ }, ye = (e) => {
88
+ q(null), U(e.id), G({
88
89
  role: e.role,
89
90
  status: e.status,
90
91
  position: e.position ?? "",
91
92
  jerseyNumber: e.jerseyNumber == null ? "" : String(e.jerseyNumber)
92
93
  });
93
94
  }, $ = () => {
94
- W(null), K(null), J(null);
95
- }, ve = async (e) => {
96
- if (!G) return;
97
- J(null);
98
- let t = G.jerseyNumber.trim(), n;
95
+ U(null), G(null), q(null);
96
+ }, be = async (e) => {
97
+ if (!W) return;
98
+ q(null);
99
+ let t = W.jerseyNumber.trim(), n;
99
100
  if (t && (n = Number.parseInt(t, 10), Number.isNaN(n))) {
100
- J("Jersey number must be a number.");
101
+ q("Jersey number must be a number.");
101
102
  return;
102
103
  }
103
104
  try {
104
105
  await L.mutateAsync({
105
106
  id: e,
106
107
  input: {
107
- role: G.role,
108
- status: G.status,
109
- position: G.position.trim() || void 0,
108
+ role: W.role,
109
+ status: W.status,
110
+ position: W.position.trim() || void 0,
110
111
  jerseyNumber: n
111
112
  }
112
113
  }), $();
113
114
  } catch (e) {
114
- J(e instanceof Error ? e.message : "Failed to update member.");
115
+ q(e instanceof Error ? e.message : "Failed to update member.");
115
116
  }
116
- }, ye = async (e) => {
117
- if (e.preventDefault(), U(null), !d) return;
118
- if (!B.userId.trim() || !B.displayName.trim()) {
119
- U("User ID and display name are required.");
117
+ }, xe = async (e) => {
118
+ if (e.preventDefault(), H(null), !m) return;
119
+ if (!z.userId.trim() || !z.displayName.trim()) {
120
+ H("User ID and display name are required.");
120
121
  return;
121
122
  }
122
- let t = B.jerseyNumber.trim() ? Number.parseInt(B.jerseyNumber, 10) : void 0;
123
+ let t = z.jerseyNumber.trim() ? Number.parseInt(z.jerseyNumber, 10) : void 0;
123
124
  if (t !== void 0 && Number.isNaN(t)) {
124
- U("Jersey number must be a number.");
125
+ H("Jersey number must be a number.");
125
126
  return;
126
127
  }
127
128
  try {
128
129
  await F.mutateAsync({
129
- teamId: d,
130
- userId: B.userId.trim(),
131
- displayName: B.displayName.trim(),
132
- role: B.role,
133
- status: B.status,
134
- position: B.position.trim() || void 0,
130
+ teamId: m,
131
+ userId: z.userId.trim(),
132
+ displayName: z.displayName.trim(),
133
+ role: z.role,
134
+ status: z.status,
135
+ position: z.position.trim() || void 0,
135
136
  jerseyNumber: t
136
- }), V(N), z(!1);
137
+ }), B(M), R(!1);
137
138
  } catch (e) {
138
- U(e instanceof Error ? e.message : "Failed to add member.");
139
+ H(e instanceof Error ? e.message : "Failed to add member.");
139
140
  }
140
- }, be = (e) => f(`/teams/${Y.id}/athletes/${e}`);
141
- return /* @__PURE__ */ E(t, {
142
- title: Y.name,
141
+ }, Se = (e) => D(`/teams/${J.id}/athletes/${e}`);
142
+ return /* @__PURE__ */ T(n, {
143
+ title: J.name,
143
144
  gradientTitle: !0,
144
- description: Q.join(" · "),
145
- actions: /* @__PURE__ */ E("div", {
145
+ description: Z.join(" · "),
146
+ actions: /* @__PURE__ */ T("div", {
146
147
  className: "flex flex-wrap items-center gap-2",
147
148
  children: [
148
- /* @__PURE__ */ E("button", {
149
+ /* @__PURE__ */ T("button", {
149
150
  type: "button",
150
- onClick: () => f("/teams"),
151
+ onClick: () => D("/teams"),
151
152
  className: "inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken",
152
- children: [/* @__PURE__ */ T(p, { className: "h-4 w-4" }), " Back"]
153
+ children: [
154
+ /* @__PURE__ */ w(h, { className: "h-4 w-4" }),
155
+ " ",
156
+ p("atheletebridge.pages.teamDetail.back", "Back")
157
+ ]
153
158
  }),
154
- /* @__PURE__ */ E("button", {
159
+ /* @__PURE__ */ T("button", {
155
160
  type: "button",
156
- onClick: () => f(`/teams/${Y.id}/edit`),
161
+ onClick: () => D(`/teams/${J.id}/edit`),
157
162
  className: "inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text transition-colors hover:bg-action-primary-bg/90",
158
- children: [/* @__PURE__ */ T(le, { className: "h-4 w-4" }), " Edit"]
163
+ children: [
164
+ /* @__PURE__ */ w(ce, { className: "h-4 w-4" }),
165
+ " ",
166
+ p("atheletebridge.pages.teamDetail.edit", "Edit")
167
+ ]
159
168
  }),
160
- Y.status !== "ARCHIVED" && /* @__PURE__ */ E("button", {
169
+ J.status !== "ARCHIVED" && /* @__PURE__ */ T("button", {
161
170
  type: "button",
162
- onClick: ge,
163
- disabled: k.isPending,
171
+ onClick: Q,
172
+ disabled: P.isPending,
164
173
  className: "inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-status-error-text transition-colors hover:bg-status-error-bg-subtle disabled:opacity-60",
165
174
  children: [
166
- k.isPending ? /* @__PURE__ */ T(g, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ T(ce, { className: "h-4 w-4" }),
175
+ P.isPending ? /* @__PURE__ */ w(v, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ w(se, { className: "h-4 w-4" }),
167
176
  " ",
168
- "Archive"
177
+ p("atheletebridge.pages.teamDetail.archive", "Archive")
169
178
  ]
170
179
  })
171
180
  ]
172
181
  }),
173
182
  children: [
174
- /* @__PURE__ */ E(D, {
183
+ /* @__PURE__ */ T(E, {
175
184
  treatment: "insight",
176
185
  className: "mb-8 p-6",
177
186
  children: [
178
- /* @__PURE__ */ E("div", {
187
+ /* @__PURE__ */ T("div", {
179
188
  className: "flex flex-col gap-4 sm:flex-row sm:items-center",
180
- children: [/* @__PURE__ */ T(ee, {
181
- name: Y.name,
182
- sport: Y.sport,
189
+ children: [/* @__PURE__ */ w(te, {
190
+ name: J.name,
191
+ sport: J.sport,
183
192
  size: 64
184
- }), /* @__PURE__ */ E("div", {
193
+ }), /* @__PURE__ */ T("div", {
185
194
  className: "min-w-0 flex-1",
186
- children: [/* @__PURE__ */ E("div", {
195
+ children: [/* @__PURE__ */ T("div", {
187
196
  className: "flex flex-wrap items-center gap-3",
188
- children: [/* @__PURE__ */ T("h2", {
197
+ children: [/* @__PURE__ */ w("h2", {
189
198
  className: "text-xl font-semibold text-text-primary",
190
- children: Y.name
191
- }), /* @__PURE__ */ T(n, { status: Y.status })]
192
- }), /* @__PURE__ */ T("div", {
199
+ children: J.name
200
+ }), /* @__PURE__ */ w(r, { status: J.status })]
201
+ }), /* @__PURE__ */ w("div", {
193
202
  className: "mt-1.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-text-secondary",
194
- children: Q.map((e, t) => /* @__PURE__ */ E("span", {
203
+ children: Z.map((e, t) => /* @__PURE__ */ T("span", {
195
204
  className: "flex items-center gap-2",
196
- children: [t > 0 && /* @__PURE__ */ T("span", {
205
+ children: [t > 0 && /* @__PURE__ */ w("span", {
197
206
  "aria-hidden": "true",
198
207
  className: "text-text-muted",
199
208
  children: "·"
200
- }), e === Y.homeVenue ? /* @__PURE__ */ E("span", {
209
+ }), e === J.homeVenue ? /* @__PURE__ */ T("span", {
201
210
  className: "flex items-center gap-1",
202
211
  children: [
203
- /* @__PURE__ */ T(_, {
212
+ /* @__PURE__ */ w(le, {
204
213
  className: "h-3.5 w-3.5",
205
214
  "aria-hidden": "true"
206
215
  }),
@@ -212,208 +221,213 @@ function F() {
212
221
  })]
213
222
  })]
214
223
  }),
215
- Y.description && /* @__PURE__ */ T("p", {
224
+ J.description && /* @__PURE__ */ w("p", {
216
225
  className: "mt-4 text-sm text-text-secondary",
217
- children: Y.description
226
+ children: J.description
218
227
  }),
219
- Y.tags.length > 0 && /* @__PURE__ */ T("div", {
228
+ J.tags.length > 0 && /* @__PURE__ */ w("div", {
220
229
  className: "mt-4 flex flex-wrap gap-1.5",
221
- children: Y.tags.map((e) => /* @__PURE__ */ T("span", {
230
+ children: J.tags.map((e) => /* @__PURE__ */ w("span", {
222
231
  className: "inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary",
223
232
  children: e
224
233
  }, e))
225
234
  })
226
235
  ]
227
236
  }),
228
- /* @__PURE__ */ E("section", {
237
+ /* @__PURE__ */ T("section", {
229
238
  className: "mb-8",
230
- children: [/* @__PURE__ */ E("div", {
239
+ children: [/* @__PURE__ */ T("div", {
231
240
  className: "mb-4 flex items-center justify-between",
232
- children: [/* @__PURE__ */ E("h2", {
241
+ children: [/* @__PURE__ */ T("h2", {
233
242
  className: "text-lg font-semibold text-text-primary",
234
243
  children: [
235
- "Roster (",
236
- X.length,
244
+ p("atheletebridge.pages.teamDetail.rosterTitle", "Roster"),
245
+ " (",
246
+ Y.length,
237
247
  ")"
238
248
  ]
239
- }), /* @__PURE__ */ E("button", {
249
+ }), /* @__PURE__ */ T("button", {
240
250
  type: "button",
241
251
  onClick: () => {
242
- U(null), z(!0);
252
+ H(null), R(!0);
243
253
  },
244
254
  className: "inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-3 py-1.5 text-sm font-semibold text-action-primary-text transition-colors hover:bg-action-primary-bg/90",
245
- children: [/* @__PURE__ */ T(x, { className: "h-4 w-4" }), " Add member"]
255
+ children: [
256
+ /* @__PURE__ */ w(b, { className: "h-4 w-4" }),
257
+ " ",
258
+ p("atheletebridge.pages.teamDetail.addMember", "Add member")
259
+ ]
246
260
  })]
247
- }), X.length === 0 ? /* @__PURE__ */ T(a, {
261
+ }), Y.length === 0 ? /* @__PURE__ */ w(o, {
248
262
  illustration: "empty-data",
249
- icon: /* @__PURE__ */ T(x, { className: "h-10 w-10" }),
250
- title: "No members yet",
251
- description: "Add players, coaches and staff to build the roster."
252
- }) : /* @__PURE__ */ E(D, {
263
+ icon: /* @__PURE__ */ w(b, { className: "h-10 w-10" }),
264
+ title: p("atheletebridge.pages.teamDetail.noMembersTitle", "No members yet"),
265
+ description: p("atheletebridge.pages.teamDetail.noMembersHint", "Add players, coaches and staff to build the roster.")
266
+ }) : /* @__PURE__ */ T(E, {
253
267
  treatment: "insight",
254
268
  className: "overflow-hidden p-0",
255
- children: [/* @__PURE__ */ T("div", {
269
+ children: [/* @__PURE__ */ w("div", {
256
270
  className: "overflow-x-auto",
257
- children: /* @__PURE__ */ E("table", {
271
+ children: /* @__PURE__ */ T("table", {
258
272
  className: "w-full min-w-[720px] border-collapse text-sm",
259
- children: [/* @__PURE__ */ T("thead", { children: /* @__PURE__ */ E("tr", {
273
+ children: [/* @__PURE__ */ w("thead", { children: /* @__PURE__ */ T("tr", {
260
274
  className: "border-b border-border-seam text-left text-xs uppercase tracking-wide text-text-secondary",
261
275
  children: [
262
- /* @__PURE__ */ T("th", {
276
+ /* @__PURE__ */ w("th", {
263
277
  className: "px-4 py-3 font-medium",
264
- children: "Player"
278
+ children: p("atheletebridge.pages.teamDetail.playerHeader", "Player")
265
279
  }),
266
- /* @__PURE__ */ T("th", {
280
+ /* @__PURE__ */ w("th", {
267
281
  className: "px-4 py-3 font-medium",
268
- children: "Role"
282
+ children: p("atheletebridge.pages.teamDetail.roleHeader", "Role")
269
283
  }),
270
- /* @__PURE__ */ T("th", {
284
+ /* @__PURE__ */ w("th", {
271
285
  className: "px-4 py-3 font-medium",
272
- children: "Position"
286
+ children: p("atheletebridge.pages.teamDetail.positionHeader", "Position")
273
287
  }),
274
- /* @__PURE__ */ T("th", {
288
+ /* @__PURE__ */ w("th", {
275
289
  className: "px-4 py-3 font-medium",
276
- children: "Jersey #"
290
+ children: p("atheletebridge.pages.teamDetail.jerseyHeader", "Jersey #")
277
291
  }),
278
- /* @__PURE__ */ T("th", {
292
+ /* @__PURE__ */ w("th", {
279
293
  className: "px-4 py-3 font-medium",
280
- children: "Status"
294
+ children: p("atheletebridge.pages.teamDetail.statusHeader", "Status")
281
295
  }),
282
- /* @__PURE__ */ T("th", {
296
+ /* @__PURE__ */ w("th", {
283
297
  className: "px-4 py-3 text-right font-medium",
284
- children: "Actions"
298
+ children: p("atheletebridge.pages.teamDetail.actionsHeader", "Actions")
285
299
  })
286
300
  ]
287
- }) }), /* @__PURE__ */ T("tbody", {
301
+ }) }), /* @__PURE__ */ w("tbody", {
288
302
  className: "divide-y divide-border-seam",
289
- children: X.map((e) => {
290
- let t = he === e.id, i = L.isPending && t;
291
- return /* @__PURE__ */ E("tr", {
303
+ children: Y.map((e) => {
304
+ let t = ve === e.id, n = L.isPending && t;
305
+ return /* @__PURE__ */ T("tr", {
292
306
  className: "align-middle transition-colors hover:bg-bg-sunken/60",
293
307
  children: [
294
- /* @__PURE__ */ T("td", {
308
+ /* @__PURE__ */ w("td", {
295
309
  className: "px-4 py-3",
296
- children: /* @__PURE__ */ E("button", {
310
+ children: /* @__PURE__ */ T("button", {
297
311
  type: "button",
298
- onClick: () => be(e.id),
312
+ onClick: () => Se(e.id),
299
313
  className: "group flex items-center gap-3 text-left focus-visible:outline-none",
300
- title: `View ${e.displayName}'s profile`,
301
- children: [/* @__PURE__ */ T(ne, {
314
+ title: `${p("atheletebridge.pages.teamDetail.viewProfile", "View profile")}: ${e.displayName}`,
315
+ children: [/* @__PURE__ */ w(ne, {
302
316
  name: e.displayName,
303
317
  id: e.userId,
304
318
  jersey: e.jerseyNumber,
305
319
  size: "sm"
306
- }), /* @__PURE__ */ E("span", {
320
+ }), /* @__PURE__ */ T("span", {
307
321
  className: "min-w-0",
308
- children: [/* @__PURE__ */ T("span", {
322
+ children: [/* @__PURE__ */ w("span", {
309
323
  className: "block truncate font-medium text-text-primary group-hover:text-text-link",
310
324
  children: e.displayName
311
- }), /* @__PURE__ */ T("span", {
325
+ }), /* @__PURE__ */ w("span", {
312
326
  className: "block truncate text-xs text-text-secondary group-hover:text-text-link",
313
- children: "View profile"
327
+ children: p("atheletebridge.pages.teamDetail.viewProfile", "View profile")
314
328
  })]
315
329
  })]
316
330
  })
317
331
  }),
318
- /* @__PURE__ */ T("td", {
332
+ /* @__PURE__ */ w("td", {
319
333
  className: "px-4 py-3",
320
- children: t && G ? /* @__PURE__ */ T("select", {
321
- "aria-label": "Role",
322
- className: c,
323
- value: G.role,
324
- onChange: (e) => K((t) => t && {
334
+ children: t && W ? /* @__PURE__ */ w("select", {
335
+ "aria-label": p("atheletebridge.pages.teamDetail.roleHeader", "Role"),
336
+ className: d,
337
+ value: W.role,
338
+ onChange: (e) => G((t) => t && {
325
339
  ...t,
326
340
  role: e.target.value
327
341
  }),
328
- children: A.map((e) => /* @__PURE__ */ T("option", {
342
+ children: k.map((e) => /* @__PURE__ */ w("option", {
329
343
  value: e,
330
- children: r[e]
344
+ children: i[e]
331
345
  }, e))
332
- }) : /* @__PURE__ */ T("span", {
346
+ }) : /* @__PURE__ */ w("span", {
333
347
  className: "text-text-secondary",
334
- children: r[e.role]
348
+ children: i[e.role]
335
349
  })
336
350
  }),
337
- /* @__PURE__ */ T("td", {
351
+ /* @__PURE__ */ w("td", {
338
352
  className: "px-4 py-3",
339
- children: t && G ? /* @__PURE__ */ T("input", {
340
- "aria-label": "Position",
341
- className: c,
342
- value: G.position,
343
- onChange: (e) => K((t) => t && {
353
+ children: t && W ? /* @__PURE__ */ w("input", {
354
+ "aria-label": p("atheletebridge.pages.teamDetail.positionHeader", "Position"),
355
+ className: d,
356
+ value: W.position,
357
+ onChange: (e) => G((t) => t && {
344
358
  ...t,
345
359
  position: e.target.value
346
360
  }),
347
361
  placeholder: "e.g. Striker"
348
- }) : /* @__PURE__ */ T("span", {
362
+ }) : /* @__PURE__ */ w("span", {
349
363
  className: "text-text-secondary",
350
364
  children: e.position || "—"
351
365
  })
352
366
  }),
353
- /* @__PURE__ */ T("td", {
367
+ /* @__PURE__ */ w("td", {
354
368
  className: "px-4 py-3",
355
- children: t && G ? /* @__PURE__ */ T("input", {
356
- "aria-label": "Jersey number",
369
+ children: t && W ? /* @__PURE__ */ w("input", {
370
+ "aria-label": p("atheletebridge.pages.teamDetail.jerseyHeader", "Jersey number"),
357
371
  inputMode: "numeric",
358
- className: `${c} w-20`,
359
- value: G.jerseyNumber,
360
- onChange: (e) => K((t) => t && {
372
+ className: `${d} w-20`,
373
+ value: W.jerseyNumber,
374
+ onChange: (e) => G((t) => t && {
361
375
  ...t,
362
376
  jerseyNumber: e.target.value
363
377
  }),
364
378
  placeholder: "9"
365
- }) : /* @__PURE__ */ T("span", {
379
+ }) : /* @__PURE__ */ w("span", {
366
380
  className: "tabular-nums text-text-primary",
367
381
  children: e.jerseyNumber ?? "—"
368
382
  })
369
383
  }),
370
- /* @__PURE__ */ T("td", {
384
+ /* @__PURE__ */ w("td", {
371
385
  className: "px-4 py-3",
372
- children: t && G ? /* @__PURE__ */ T("select", {
373
- "aria-label": "Status",
374
- className: c,
375
- value: G.status,
376
- onChange: (e) => K((t) => t && {
386
+ children: t && W ? /* @__PURE__ */ w("select", {
387
+ "aria-label": p("atheletebridge.pages.teamDetail.statusHeader", "Status"),
388
+ className: d,
389
+ value: W.status,
390
+ onChange: (e) => G((t) => t && {
377
391
  ...t,
378
392
  status: e.target.value
379
393
  }),
380
- children: j.map((e) => /* @__PURE__ */ T("option", {
394
+ children: A.map((e) => /* @__PURE__ */ w("option", {
381
395
  value: e,
382
- children: M(e)
396
+ children: j(e)
383
397
  }, e))
384
- }) : /* @__PURE__ */ T(n, { status: e.status })
398
+ }) : /* @__PURE__ */ w(r, { status: e.status })
385
399
  }),
386
- /* @__PURE__ */ T("td", {
400
+ /* @__PURE__ */ w("td", {
387
401
  className: "px-4 py-3",
388
- children: /* @__PURE__ */ T("div", {
402
+ children: /* @__PURE__ */ w("div", {
389
403
  className: "flex items-center justify-end gap-1",
390
- children: t ? /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T("button", {
404
+ children: t ? /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w("button", {
391
405
  type: "button",
392
- onClick: () => void ve(e.id),
393
- disabled: i,
394
- "aria-label": "Save changes",
406
+ onClick: () => void be(e.id),
407
+ disabled: n,
408
+ "aria-label": p("common.save", "Save"),
395
409
  className: "rounded-lg p-2 text-status-success-text transition-colors hover:bg-status-success-bg-subtle disabled:opacity-60",
396
- children: i ? /* @__PURE__ */ T(g, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ T(h, { className: "h-4 w-4" })
397
- }), /* @__PURE__ */ T("button", {
410
+ children: n ? /* @__PURE__ */ w(v, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ w(_, { className: "h-4 w-4" })
411
+ }), /* @__PURE__ */ w("button", {
398
412
  type: "button",
399
413
  onClick: $,
400
- disabled: i,
401
- "aria-label": "Cancel editing",
414
+ disabled: n,
415
+ "aria-label": p("common.cancel", "Cancel"),
402
416
  className: "rounded-lg p-2 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary disabled:opacity-60",
403
- children: /* @__PURE__ */ T(S, { className: "h-4 w-4" })
404
- })] }) : /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T("button", {
417
+ children: /* @__PURE__ */ w(x, { className: "h-4 w-4" })
418
+ })] }) : /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w("button", {
405
419
  type: "button",
406
- onClick: () => _e(e),
407
- "aria-label": `Edit ${e.displayName}`,
420
+ onClick: () => ye(e),
421
+ "aria-label": `${p("common.edit", "Edit")} ${e.displayName}`,
408
422
  className: "rounded-lg p-2 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary",
409
- children: /* @__PURE__ */ T(v, { className: "h-4 w-4" })
410
- }), /* @__PURE__ */ T("button", {
423
+ children: /* @__PURE__ */ w(ue, { className: "h-4 w-4" })
424
+ }), /* @__PURE__ */ w("button", {
411
425
  type: "button",
412
426
  onClick: () => void I.mutate(e.id),
413
427
  disabled: I.isPending,
414
- "aria-label": `Remove ${e.displayName}`,
428
+ "aria-label": `${p("common.delete", "Delete")} ${e.displayName}`,
415
429
  className: "rounded-lg p-2 text-text-secondary transition-colors hover:bg-status-error-bg-subtle hover:text-status-error-text disabled:opacity-60",
416
- children: /* @__PURE__ */ T(b, { className: "h-4 w-4" })
430
+ children: /* @__PURE__ */ w(y, { className: "h-4 w-4" })
417
431
  })] })
418
432
  })
419
433
  })
@@ -422,143 +436,148 @@ function F() {
422
436
  })
423
437
  })]
424
438
  })
425
- }), q && /* @__PURE__ */ T("p", {
439
+ }), K && /* @__PURE__ */ w("p", {
426
440
  className: "border-t border-border-seam px-4 py-2 text-sm text-status-error-text",
427
- children: q
441
+ children: K
428
442
  })]
429
443
  })]
430
444
  }),
431
- /* @__PURE__ */ E("section", { children: [/* @__PURE__ */ E("div", {
445
+ /* @__PURE__ */ T("section", { children: [/* @__PURE__ */ T("div", {
432
446
  className: "mb-4 flex items-center justify-between",
433
- children: [/* @__PURE__ */ E("h2", {
447
+ children: [/* @__PURE__ */ T("h2", {
434
448
  className: "text-lg font-semibold text-text-primary",
435
449
  children: [
436
- "Fixtures (",
437
- Z.length,
450
+ p("atheletebridge.pages.teamDetail.fixturesTitle", "Fixtures"),
451
+ " (",
452
+ X.length,
438
453
  ")"
439
454
  ]
440
- }), /* @__PURE__ */ E("div", {
455
+ }), /* @__PURE__ */ T("div", {
441
456
  className: "flex items-center gap-2",
442
- children: [Z.length > 0 && /* @__PURE__ */ T("button", {
457
+ children: [X.length > 0 && /* @__PURE__ */ w("button", {
443
458
  type: "button",
444
- onClick: () => f("/fixtures"),
459
+ onClick: () => D("/fixtures"),
445
460
  className: "text-sm font-medium text-text-link transition-colors hover:underline",
446
- children: "View all"
447
- }), /* @__PURE__ */ E("button", {
461
+ children: p("atheletebridge.pages.teamDetail.viewAll", "View all")
462
+ }), /* @__PURE__ */ T("button", {
448
463
  type: "button",
449
- onClick: () => f(`/fixtures/new?homeTeamId=${Y.id}`),
464
+ onClick: () => D(`/fixtures/new?homeTeamId=${J.id}`),
450
465
  className: "inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken",
451
- children: [/* @__PURE__ */ T(y, { className: "h-4 w-4" }), " Schedule"]
466
+ children: [
467
+ /* @__PURE__ */ w(de, { className: "h-4 w-4" }),
468
+ " ",
469
+ p("atheletebridge.pages.teamDetail.schedule", "Schedule")
470
+ ]
452
471
  })]
453
472
  })]
454
- }), Z.length === 0 ? /* @__PURE__ */ T(a, {
473
+ }), X.length === 0 ? /* @__PURE__ */ w(o, {
455
474
  illustration: "empty-calendar",
456
- icon: /* @__PURE__ */ T(m, { className: "h-10 w-10" }),
457
- title: "No fixtures scheduled",
458
- description: "Schedule a match for this team to start tracking results."
459
- }) : /* @__PURE__ */ T(D, {
475
+ icon: /* @__PURE__ */ w(g, { className: "h-10 w-10" }),
476
+ title: p("atheletebridge.pages.teamDetail.noFixturesTitle", "No fixtures scheduled"),
477
+ description: p("atheletebridge.pages.teamDetail.noFixturesHint", "Schedule a match for this team to start tracking results.")
478
+ }) : /* @__PURE__ */ w(E, {
460
479
  treatment: "insight",
461
480
  className: "px-4 py-1",
462
- children: /* @__PURE__ */ T("div", {
481
+ children: /* @__PURE__ */ w("div", {
463
482
  className: "divide-y divide-border-seam",
464
- children: Z.map((e) => /* @__PURE__ */ T(te, {
483
+ children: X.map((e) => /* @__PURE__ */ w(a, {
465
484
  fixture: e,
466
- onClick: () => f(`/fixtures/${e.id}`)
485
+ onClick: () => D(`/fixtures/${e.id}`)
467
486
  }, e.id))
468
487
  })
469
488
  })] }),
470
- /* @__PURE__ */ T(ue, {
471
- open: R,
472
- onOpenChange: z,
473
- children: /* @__PURE__ */ E(de, { children: [/* @__PURE__ */ T(pe, { children: /* @__PURE__ */ T(me, { children: "Add member" }) }), /* @__PURE__ */ E("form", {
474
- onSubmit: ye,
489
+ /* @__PURE__ */ w(fe, {
490
+ open: _e,
491
+ onOpenChange: R,
492
+ children: /* @__PURE__ */ T(pe, { children: [/* @__PURE__ */ w(he, { children: /* @__PURE__ */ w(ge, { children: p("atheletebridge.pages.teamDetail.addMember", "Add member") }) }), /* @__PURE__ */ T("form", {
493
+ onSubmit: xe,
475
494
  className: "space-y-4 px-1",
476
495
  children: [
477
- /* @__PURE__ */ T(l, {
478
- userId: B.userId,
479
- displayName: B.displayName,
480
- onSelect: ({ userId: e, displayName: t }) => V((n) => ({
496
+ /* @__PURE__ */ w(oe, {
497
+ userId: z.userId,
498
+ displayName: z.displayName,
499
+ onSelect: ({ userId: e, displayName: t }) => B((n) => ({
481
500
  ...n,
482
501
  userId: e,
483
502
  displayName: t || n.displayName
484
503
  })),
485
504
  required: !0
486
505
  }),
487
- /* @__PURE__ */ T(s, {
506
+ /* @__PURE__ */ w(u, {
488
507
  label: "Display name",
489
508
  htmlFor: "displayName",
490
509
  required: !0,
491
- children: /* @__PURE__ */ T("input", {
510
+ children: /* @__PURE__ */ w("input", {
492
511
  id: "displayName",
493
- className: c,
494
- value: B.displayName,
495
- onChange: (e) => V((t) => ({
512
+ className: d,
513
+ value: z.displayName,
514
+ onChange: (e) => B((t) => ({
496
515
  ...t,
497
516
  displayName: e.target.value
498
517
  })),
499
518
  placeholder: "e.g. Alex Morgan"
500
519
  })
501
520
  }),
502
- /* @__PURE__ */ E("div", {
521
+ /* @__PURE__ */ T("div", {
503
522
  className: "grid grid-cols-2 gap-4",
504
- children: [/* @__PURE__ */ T(s, {
523
+ children: [/* @__PURE__ */ w(u, {
505
524
  label: "Role",
506
525
  htmlFor: "role",
507
- children: /* @__PURE__ */ T("select", {
526
+ children: /* @__PURE__ */ w("select", {
508
527
  id: "role",
509
- className: c,
510
- value: B.role,
511
- onChange: (e) => V((t) => ({
528
+ className: d,
529
+ value: z.role,
530
+ onChange: (e) => B((t) => ({
512
531
  ...t,
513
532
  role: e.target.value
514
533
  })),
515
- children: A.map((e) => /* @__PURE__ */ T("option", {
534
+ children: k.map((e) => /* @__PURE__ */ w("option", {
516
535
  value: e,
517
- children: r[e]
536
+ children: i[e]
518
537
  }, e))
519
538
  })
520
- }), /* @__PURE__ */ T(s, {
539
+ }), /* @__PURE__ */ w(u, {
521
540
  label: "Status",
522
541
  htmlFor: "memberStatus",
523
- children: /* @__PURE__ */ T("select", {
542
+ children: /* @__PURE__ */ w("select", {
524
543
  id: "memberStatus",
525
- className: c,
526
- value: B.status,
527
- onChange: (e) => V((t) => ({
544
+ className: d,
545
+ value: z.status,
546
+ onChange: (e) => B((t) => ({
528
547
  ...t,
529
548
  status: e.target.value
530
549
  })),
531
- children: j.map((e) => /* @__PURE__ */ T("option", {
550
+ children: A.map((e) => /* @__PURE__ */ w("option", {
532
551
  value: e,
533
- children: M(e)
552
+ children: j(e)
534
553
  }, e))
535
554
  })
536
555
  })]
537
556
  }),
538
- /* @__PURE__ */ E("div", {
557
+ /* @__PURE__ */ T("div", {
539
558
  className: "grid grid-cols-2 gap-4",
540
- children: [/* @__PURE__ */ T(s, {
559
+ children: [/* @__PURE__ */ w(u, {
541
560
  label: "Position",
542
561
  htmlFor: "position",
543
- children: /* @__PURE__ */ T("input", {
562
+ children: /* @__PURE__ */ w("input", {
544
563
  id: "position",
545
- className: c,
546
- value: B.position,
547
- onChange: (e) => V((t) => ({
564
+ className: d,
565
+ value: z.position,
566
+ onChange: (e) => B((t) => ({
548
567
  ...t,
549
568
  position: e.target.value
550
569
  })),
551
570
  placeholder: "e.g. Striker"
552
571
  })
553
- }), /* @__PURE__ */ T(s, {
572
+ }), /* @__PURE__ */ w(u, {
554
573
  label: "Jersey #",
555
574
  htmlFor: "jersey",
556
- children: /* @__PURE__ */ T("input", {
575
+ children: /* @__PURE__ */ w("input", {
557
576
  id: "jersey",
558
- className: c,
577
+ className: d,
559
578
  inputMode: "numeric",
560
- value: B.jerseyNumber,
561
- onChange: (e) => V((t) => ({
579
+ value: z.jerseyNumber,
580
+ onChange: (e) => B((t) => ({
562
581
  ...t,
563
582
  jerseyNumber: e.target.value
564
583
  })),
@@ -566,20 +585,20 @@ function F() {
566
585
  })
567
586
  })]
568
587
  }),
569
- H && /* @__PURE__ */ T("p", {
588
+ V && /* @__PURE__ */ w("p", {
570
589
  className: "text-sm text-status-error-text",
571
- children: H
590
+ children: V
572
591
  }),
573
- /* @__PURE__ */ E(fe, { children: [/* @__PURE__ */ T("button", {
592
+ /* @__PURE__ */ T(me, { children: [/* @__PURE__ */ w("button", {
574
593
  type: "button",
575
- onClick: () => z(!1),
594
+ onClick: () => R(!1),
576
595
  className: "rounded-lg border border-border-seam px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken",
577
- children: "Cancel"
578
- }), /* @__PURE__ */ E("button", {
596
+ children: p("common.cancel", "Cancel")
597
+ }), /* @__PURE__ */ T("button", {
579
598
  type: "submit",
580
599
  disabled: F.isPending,
581
600
  className: "inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-semibold text-action-primary-text transition-colors hover:bg-action-primary-bg/90 disabled:opacity-60",
582
- children: [F.isPending && /* @__PURE__ */ T(g, { className: "h-4 w-4 animate-spin" }), "Add member"]
601
+ children: [F.isPending && /* @__PURE__ */ w(v, { className: "h-4 w-4 animate-spin" }), p("atheletebridge.pages.teamDetail.addMember", "Add member")]
583
602
  })] })
584
603
  ]
585
604
  })] })
@@ -588,6 +607,6 @@ function F() {
588
607
  });
589
608
  }
590
609
  //#endregion
591
- export { F as TeamDetailPage };
610
+ export { P as TeamDetailPage };
592
611
 
593
612
  //# sourceMappingURL=TeamDetailPage.js.map