@burdenoff/microfe-atheletebridge 2026.805.1 → 2026.829.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/dist/atheletebridge/components/LoadingState.d.ts.map +1 -1
- package/dist/atheletebridge/components/LoadingState.js +39 -32
- package/dist/atheletebridge/components/LoadingState.js.map +1 -1
- package/dist/atheletebridge/components/TeamCard.d.ts.map +1 -1
- package/dist/atheletebridge/components/TeamCard.js +45 -49
- package/dist/atheletebridge/components/TeamCard.js.map +1 -1
- package/dist/atheletebridge/hooks/index.d.ts +1 -1
- package/dist/atheletebridge/hooks/index.d.ts.map +1 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.d.ts +41 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.d.ts.map +1 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js +58 -28
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js.map +1 -1
- package/dist/atheletebridge/pages/DashboardPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/DashboardPage.js +56 -24
- package/dist/atheletebridge/pages/DashboardPage.js.map +1 -1
- package/dist/atheletebridge/pages/analytics/CoachAnalyticsPage.d.ts +6 -2
- package/dist/atheletebridge/pages/analytics/CoachAnalyticsPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/analytics/CoachAnalyticsPage.js +330 -174
- package/dist/atheletebridge/pages/analytics/CoachAnalyticsPage.js.map +1 -1
- package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js +110 -106
- package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/fixtures/FixturesListPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/fixtures/FixturesListPage.js +80 -71
- package/dist/atheletebridge/pages/fixtures/FixturesListPage.js.map +1 -1
- package/dist/atheletebridge/pages/onboarding/OnboardingPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/onboarding/OnboardingPage.js +244 -210
- package/dist/atheletebridge/pages/onboarding/OnboardingPage.js.map +1 -1
- package/dist/atheletebridge/pages/performance/PerformancePage.d.ts +7 -0
- package/dist/atheletebridge/pages/performance/PerformancePage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/performance/PerformancePage.js +526 -362
- package/dist/atheletebridge/pages/performance/PerformancePage.js.map +1 -1
- package/dist/atheletebridge/pages/programs/ProgramDetailPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/programs/ProgramDetailPage.js +169 -143
- package/dist/atheletebridge/pages/programs/ProgramDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/programs/ProgramsListPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/programs/ProgramsListPage.js +77 -72
- package/dist/atheletebridge/pages/programs/ProgramsListPage.js.map +1 -1
- package/dist/atheletebridge/pages/sessions/SessionDetailPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/sessions/SessionDetailPage.js +104 -86
- package/dist/atheletebridge/pages/sessions/SessionDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/sessions/SessionsListPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/sessions/SessionsListPage.js +54 -49
- package/dist/atheletebridge/pages/sessions/SessionsListPage.js.map +1 -1
- package/dist/atheletebridge/pages/teams/TeamDetailPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/teams/TeamDetailPage.js +286 -267
- package/dist/atheletebridge/pages/teams/TeamDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/teams/TeamFormPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/teams/TeamFormPage.js +185 -180
- package/dist/atheletebridge/pages/teams/TeamFormPage.js.map +1 -1
- package/dist/atheletebridge/pages/teams/TeamsListPage.d.ts.map +1 -1
- package/dist/atheletebridge/pages/teams/TeamsListPage.js +70 -74
- package/dist/atheletebridge/pages/teams/TeamsListPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
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 { FIXTURE_TYPE_LABELS as r, FIXTURE_TYPE_OPTIONS as i } from "../../components/domain.js";
|
|
5
|
+
import { EmptyState as a } from "../../components/EmptyState.js";
|
|
6
|
+
import { ErrorState as o, LoadingState as s } from "../../components/LoadingState.js";
|
|
7
|
+
import { useFixtures as c, useTeams as l } from "../../hooks/useAthleteBridgeApi.js";
|
|
8
|
+
import { CursorPager as u } from "../../components/CursorPager.js";
|
|
9
|
+
import { FilterSelect as d } from "../../components/FilterSelect.js";
|
|
10
|
+
import { FixtureCard as f } from "../../components/FixtureCard.js";
|
|
11
|
+
import { useMemo as p, useState as m } from "react";
|
|
12
|
+
import { CalendarDays as h, Plus as g, Trophy as _ } from "lucide-react";
|
|
13
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
13
14
|
//#region src/atheletebridge/pages/fixtures/FixturesListPage.tsx
|
|
14
|
-
var
|
|
15
|
+
var x = 12, S = [
|
|
15
16
|
{
|
|
16
17
|
value: "SCHEDULED",
|
|
17
18
|
label: "Scheduled"
|
|
@@ -32,100 +33,108 @@ var b = 12, x = [
|
|
|
32
33
|
value: "CANCELLED",
|
|
33
34
|
label: "Cancelled"
|
|
34
35
|
}
|
|
35
|
-
],
|
|
36
|
+
], C = i.map((e) => ({
|
|
36
37
|
value: e,
|
|
37
|
-
label:
|
|
38
|
+
label: r[e]
|
|
38
39
|
}));
|
|
39
|
-
function
|
|
40
|
-
let { navigateTo:
|
|
40
|
+
function w() {
|
|
41
|
+
let r = e(), { navigateTo: i } = t(), [w, T] = m(""), [E, D] = m(""), [O, k] = m(""), [A, j] = m(0), M = l({ pagination: { limit: 100 } }), N = p(() => (M.data?.items ?? []).map((e) => ({
|
|
41
42
|
value: e.id,
|
|
42
43
|
label: e.name
|
|
43
|
-
})), [
|
|
44
|
-
status:
|
|
45
|
-
teamId:
|
|
44
|
+
})), [M.data]), P = c({
|
|
45
|
+
status: w || void 0,
|
|
46
|
+
teamId: E || void 0,
|
|
46
47
|
pagination: {
|
|
47
|
-
limit:
|
|
48
|
-
offset:
|
|
48
|
+
limit: x,
|
|
49
|
+
offset: A * x
|
|
49
50
|
}
|
|
50
|
-
}),
|
|
51
|
-
let e =
|
|
52
|
-
return
|
|
53
|
-
}, [
|
|
54
|
-
return /* @__PURE__ */
|
|
55
|
-
title: "Fixtures",
|
|
56
|
-
description: "Matches across friendlies, league games, cups, tournaments and scrimmages.",
|
|
57
|
-
actions: /* @__PURE__ */
|
|
51
|
+
}), F = p(() => {
|
|
52
|
+
let e = P.data?.items ?? [];
|
|
53
|
+
return O ? e.filter((e) => e.type === O) : e;
|
|
54
|
+
}, [P.data, O]), I = P.data?.pageInfo.hasMore ?? !1, L = !!(w || E || O), R = () => j(0);
|
|
55
|
+
return /* @__PURE__ */ b(n, {
|
|
56
|
+
title: r("atheletebridge.pages.fixtures.title", "Fixtures"),
|
|
57
|
+
description: r("atheletebridge.pages.fixtures.description", "Matches across friendlies, league games, cups, tournaments and scrimmages."),
|
|
58
|
+
actions: /* @__PURE__ */ b("div", {
|
|
58
59
|
className: "flex flex-wrap items-center gap-2",
|
|
59
|
-
children: [/* @__PURE__ */
|
|
60
|
+
children: [/* @__PURE__ */ b("button", {
|
|
60
61
|
type: "button",
|
|
61
|
-
onClick: () =>
|
|
62
|
+
onClick: () => i("/tournaments"),
|
|
62
63
|
className: "inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken",
|
|
63
|
-
children: [
|
|
64
|
-
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ y(_, { className: "h-4 w-4" }),
|
|
66
|
+
" ",
|
|
67
|
+
r("atheletebridge.pages.fixtures.tournamentBracket", "Tournament bracket")
|
|
68
|
+
]
|
|
69
|
+
}), /* @__PURE__ */ b("button", {
|
|
65
70
|
type: "button",
|
|
66
71
|
"data-tour": "fixtures-create",
|
|
67
|
-
onClick: () =>
|
|
72
|
+
onClick: () => i("/fixtures/new"),
|
|
68
73
|
className: "inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90",
|
|
69
|
-
children: [
|
|
74
|
+
children: [
|
|
75
|
+
/* @__PURE__ */ y(g, { className: "h-4 w-4" }),
|
|
76
|
+
" ",
|
|
77
|
+
r("atheletebridge.pages.fixtures.scheduleFixture", "Schedule fixture")
|
|
78
|
+
]
|
|
70
79
|
})]
|
|
71
80
|
}),
|
|
72
|
-
children: [/* @__PURE__ */
|
|
81
|
+
children: [/* @__PURE__ */ b("div", {
|
|
73
82
|
"data-tour": "fixtures-filters",
|
|
74
83
|
className: "mb-6 flex flex-wrap items-center gap-3",
|
|
75
84
|
children: [
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
-
ariaLabel: "Filter by status",
|
|
78
|
-
allLabel: "All statuses",
|
|
79
|
-
value:
|
|
85
|
+
/* @__PURE__ */ y(d, {
|
|
86
|
+
ariaLabel: r("atheletebridge.pages.fixtures.filterStatus", "Filter by status"),
|
|
87
|
+
allLabel: r("atheletebridge.pages.fixtures.allStatuses", "All statuses"),
|
|
88
|
+
value: w,
|
|
80
89
|
onChange: (e) => {
|
|
81
|
-
|
|
90
|
+
T(e), R();
|
|
82
91
|
},
|
|
83
|
-
options:
|
|
92
|
+
options: S
|
|
84
93
|
}),
|
|
85
|
-
/* @__PURE__ */
|
|
86
|
-
ariaLabel: "Filter by team",
|
|
87
|
-
allLabel: "All teams",
|
|
88
|
-
value:
|
|
94
|
+
/* @__PURE__ */ y(d, {
|
|
95
|
+
ariaLabel: r("atheletebridge.pages.fixtures.filterTeam", "Filter by team"),
|
|
96
|
+
allLabel: r("atheletebridge.pages.fixtures.allTeams", "All teams"),
|
|
97
|
+
value: E,
|
|
89
98
|
onChange: (e) => {
|
|
90
|
-
|
|
99
|
+
D(e), R();
|
|
91
100
|
},
|
|
92
|
-
options:
|
|
101
|
+
options: N
|
|
93
102
|
}),
|
|
94
|
-
/* @__PURE__ */
|
|
95
|
-
ariaLabel: "Filter by type",
|
|
96
|
-
allLabel: "All types",
|
|
97
|
-
value:
|
|
98
|
-
onChange: (e) =>
|
|
99
|
-
options:
|
|
103
|
+
/* @__PURE__ */ y(d, {
|
|
104
|
+
ariaLabel: r("atheletebridge.pages.fixtures.filterType", "Filter by type"),
|
|
105
|
+
allLabel: r("atheletebridge.pages.fixtures.allTypes", "All types"),
|
|
106
|
+
value: O,
|
|
107
|
+
onChange: (e) => k(e),
|
|
108
|
+
options: C
|
|
100
109
|
})
|
|
101
110
|
]
|
|
102
|
-
}),
|
|
111
|
+
}), P.isLoading ? /* @__PURE__ */ y(s, { label: r("atheletebridge.pages.fixtures.loading", "Loading fixtures…") }) : P.isError ? /* @__PURE__ */ y(o, { onRetry: () => void P.refetch() }) : F.length === 0 ? /* @__PURE__ */ y(a, {
|
|
103
112
|
illustration: "empty-calendar",
|
|
104
|
-
icon: /* @__PURE__ */
|
|
105
|
-
title: "No fixtures found",
|
|
106
|
-
description:
|
|
107
|
-
action: /* @__PURE__ */
|
|
113
|
+
icon: /* @__PURE__ */ y(h, { className: "h-10 w-10" }),
|
|
114
|
+
title: r("atheletebridge.pages.fixtures.noFixtures", "No fixtures found"),
|
|
115
|
+
description: L ? r("atheletebridge.pages.fixtures.noFixturesFilterHint", "Try clearing your filters to see all fixtures.") : r("atheletebridge.pages.fixtures.noFixturesHint", "Schedule a match to start tracking results and standings."),
|
|
116
|
+
action: /* @__PURE__ */ y("button", {
|
|
108
117
|
type: "button",
|
|
109
|
-
onClick: () =>
|
|
118
|
+
onClick: () => i("/fixtures/new"),
|
|
110
119
|
className: "rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90",
|
|
111
|
-
children: "Schedule fixture"
|
|
120
|
+
children: r("atheletebridge.pages.fixtures.scheduleFixtureAction", "Schedule fixture")
|
|
112
121
|
})
|
|
113
|
-
}) : /* @__PURE__ */
|
|
122
|
+
}) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y("div", {
|
|
114
123
|
className: "grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
115
|
-
children:
|
|
124
|
+
children: F.map((e) => /* @__PURE__ */ y(f, {
|
|
116
125
|
fixture: e,
|
|
117
|
-
onClick: () =>
|
|
126
|
+
onClick: () => i(`/fixtures/${e.id}`)
|
|
118
127
|
}, e.id))
|
|
119
|
-
}), /* @__PURE__ */
|
|
128
|
+
}), /* @__PURE__ */ y(u, {
|
|
120
129
|
className: "mt-6",
|
|
121
|
-
page:
|
|
122
|
-
hasMore:
|
|
123
|
-
onPrev: () =>
|
|
124
|
-
onNext: () =>
|
|
130
|
+
page: A,
|
|
131
|
+
hasMore: I,
|
|
132
|
+
onPrev: () => j((e) => Math.max(0, e - 1)),
|
|
133
|
+
onNext: () => j((e) => e + 1)
|
|
125
134
|
})] })]
|
|
126
135
|
});
|
|
127
136
|
}
|
|
128
137
|
//#endregion
|
|
129
|
-
export {
|
|
138
|
+
export { w as FixturesListPage };
|
|
130
139
|
|
|
131
140
|
//# sourceMappingURL=FixturesListPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FixturesListPage.js","names":[],"sources":["../../../../src/atheletebridge/pages/fixtures/FixturesListPage.tsx"],"sourcesContent":["/**\n * Fixtures List\n * @module atheletebridge/pages/fixtures\n *\n * Crest-vs-crest FixtureCard grid with status, team and type filters. The team\n * filter is server-backed (athListFixtures accepts teamId); the type filter is\n * applied over the loaded page. A \"Tournament bracket\" shortcut links to the\n * tournaments view. Semantic tokens only, responsive.\n */\n\nimport { useMemo, useState } from 'react';\nimport { CalendarDays, Plus, Trophy } from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { FixtureCard } from '../../components/FixtureCard';\nimport { EmptyState } from '../../components/EmptyState';\nimport { LoadingState, ErrorState } from '../../components/LoadingState';\nimport { FilterSelect } from '../../components/FilterSelect';\nimport { CursorPager } from '../../components/CursorPager';\nimport { FIXTURE_TYPE_LABELS, FIXTURE_TYPE_OPTIONS } from '../../components/domain';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport { useFixtures, useTeams } from '../../hooks/useAthleteBridgeApi';\nimport type { AthFixtureStatus, AthFixtureType } from '../../types';\n\nconst PAGE_SIZE = 12;\n\nconst STATUS_OPTS: ReadonlyArray<{ value: AthFixtureStatus; label: string }> = [\n { value: 'SCHEDULED', label: 'Scheduled' },\n { value: 'LIVE', label: 'Live' },\n { value: 'COMPLETED', label: 'Completed' },\n { value: 'POSTPONED', label: 'Postponed' },\n { value: 'CANCELLED', label: 'Cancelled' },\n];\n\nconst TYPE_OPTS: ReadonlyArray<{ value: AthFixtureType; label: string }> = FIXTURE_TYPE_OPTIONS.map(\n (t) => ({ value: t, label: FIXTURE_TYPE_LABELS[t] })\n);\n\nexport function FixturesListPage() {\n const { navigateTo } = useAthleteBridge();\n const [status, setStatus] = useState<AthFixtureStatus | ''>('');\n const [teamId, setTeamId] = useState<string>('');\n const [type, setType] = useState<AthFixtureType | ''>('');\n const [page, setPage] = useState(0);\n\n const teams = useTeams({ pagination: { limit: 100 } });\n const teamOpts = useMemo(\n () => (teams.data?.items ?? []).map((t) => ({ value: t.id, label: t.name })),\n [teams.data]\n );\n\n const fixtures = useFixtures({\n status: status || undefined,\n teamId: teamId || undefined,\n pagination: { limit: PAGE_SIZE, offset: page * PAGE_SIZE },\n });\n\n const items = useMemo(() => {\n const raw = fixtures.data?.items ?? [];\n return type ? raw.filter((f) => f.type === type) : raw;\n }, [fixtures.data, type]);\n const hasMore = fixtures.data?.pageInfo.hasMore ?? false;\n const hasFilters = Boolean(status || teamId || type);\n\n const resetPage = () => setPage(0);\n\n return (\n <PageLayout\n title
|
|
1
|
+
{"version":3,"file":"FixturesListPage.js","names":[],"sources":["../../../../src/atheletebridge/pages/fixtures/FixturesListPage.tsx"],"sourcesContent":["/**\n * Fixtures List\n * @module atheletebridge/pages/fixtures\n *\n * Crest-vs-crest FixtureCard grid with status, team and type filters. The team\n * filter is server-backed (athListFixtures accepts teamId); the type filter is\n * applied over the loaded page. A \"Tournament bracket\" shortcut links to the\n * tournaments view. Semantic tokens only, responsive.\n */\n\nimport { useMemo, useState } from 'react';\nimport { CalendarDays, Plus, Trophy } from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { FixtureCard } from '../../components/FixtureCard';\nimport { EmptyState } from '../../components/EmptyState';\nimport { LoadingState, ErrorState } from '../../components/LoadingState';\nimport { FilterSelect } from '../../components/FilterSelect';\nimport { CursorPager } from '../../components/CursorPager';\nimport { FIXTURE_TYPE_LABELS, FIXTURE_TYPE_OPTIONS } from '../../components/domain';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport { useFixtures, useTeams } from '../../hooks/useAthleteBridgeApi';\nimport { useAbTranslate } from '../../i18n';\nimport type { AthFixtureStatus, AthFixtureType } from '../../types';\n\nconst PAGE_SIZE = 12;\n\nconst STATUS_OPTS: ReadonlyArray<{ value: AthFixtureStatus; label: string }> = [\n { value: 'SCHEDULED', label: 'Scheduled' },\n { value: 'LIVE', label: 'Live' },\n { value: 'COMPLETED', label: 'Completed' },\n { value: 'POSTPONED', label: 'Postponed' },\n { value: 'CANCELLED', label: 'Cancelled' },\n];\n\nconst TYPE_OPTS: ReadonlyArray<{ value: AthFixtureType; label: string }> = FIXTURE_TYPE_OPTIONS.map(\n (t) => ({ value: t, label: FIXTURE_TYPE_LABELS[t] })\n);\n\nexport function FixturesListPage() {\n const tr = useAbTranslate();\n const { navigateTo } = useAthleteBridge();\n const [status, setStatus] = useState<AthFixtureStatus | ''>('');\n const [teamId, setTeamId] = useState<string>('');\n const [type, setType] = useState<AthFixtureType | ''>('');\n const [page, setPage] = useState(0);\n\n const teams = useTeams({ pagination: { limit: 100 } });\n const teamOpts = useMemo(\n () => (teams.data?.items ?? []).map((t) => ({ value: t.id, label: t.name })),\n [teams.data]\n );\n\n const fixtures = useFixtures({\n status: status || undefined,\n teamId: teamId || undefined,\n pagination: { limit: PAGE_SIZE, offset: page * PAGE_SIZE },\n });\n\n const items = useMemo(() => {\n const raw = fixtures.data?.items ?? [];\n return type ? raw.filter((f) => f.type === type) : raw;\n }, [fixtures.data, type]);\n const hasMore = fixtures.data?.pageInfo.hasMore ?? false;\n const hasFilters = Boolean(status || teamId || type);\n\n const resetPage = () => setPage(0);\n\n return (\n <PageLayout\n title={tr('atheletebridge.pages.fixtures.title', 'Fixtures')}\n description={tr(\n 'atheletebridge.pages.fixtures.description',\n 'Matches across friendlies, league games, cups, tournaments and scrimmages.'\n )}\n actions={\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/tournaments')}\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken\"\n >\n <Trophy className=\"h-4 w-4\" /> {tr('atheletebridge.pages.fixtures.tournamentBracket', 'Tournament bracket')}\n </button>\n <button\n type=\"button\"\n data-tour=\"fixtures-create\"\n onClick={() => navigateTo('/fixtures/new')}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90\"\n >\n <Plus className=\"h-4 w-4\" /> {tr('atheletebridge.pages.fixtures.scheduleFixture', 'Schedule fixture')}\n </button>\n </div>\n }\n >\n <div data-tour=\"fixtures-filters\" className=\"mb-6 flex flex-wrap items-center gap-3\">\n <FilterSelect\n ariaLabel={tr('atheletebridge.pages.fixtures.filterStatus', 'Filter by status')}\n allLabel={tr('atheletebridge.pages.fixtures.allStatuses', 'All statuses')}\n value={status}\n onChange={(v) => {\n setStatus(v);\n resetPage();\n }}\n options={STATUS_OPTS}\n />\n <FilterSelect\n ariaLabel={tr('atheletebridge.pages.fixtures.filterTeam', 'Filter by team')}\n allLabel={tr('atheletebridge.pages.fixtures.allTeams', 'All teams')}\n value={teamId}\n onChange={(v) => {\n setTeamId(v);\n resetPage();\n }}\n options={teamOpts}\n />\n <FilterSelect\n ariaLabel={tr('atheletebridge.pages.fixtures.filterType', 'Filter by type')}\n allLabel={tr('atheletebridge.pages.fixtures.allTypes', 'All types')}\n value={type}\n onChange={(v) => setType(v)}\n options={TYPE_OPTS}\n />\n </div>\n\n {fixtures.isLoading ? (\n <LoadingState label={tr('atheletebridge.pages.fixtures.loading', 'Loading fixtures…')} />\n ) : fixtures.isError ? (\n <ErrorState onRetry={() => void fixtures.refetch()} />\n ) : items.length === 0 ? (\n <EmptyState\n illustration=\"empty-calendar\"\n icon={<CalendarDays className=\"h-10 w-10\" />}\n title={tr('atheletebridge.pages.fixtures.noFixtures', 'No fixtures found')}\n description={\n hasFilters\n ? tr(\n 'atheletebridge.pages.fixtures.noFixturesFilterHint',\n 'Try clearing your filters to see all fixtures.'\n )\n : tr(\n 'atheletebridge.pages.fixtures.noFixturesHint',\n 'Schedule a match to start tracking results and standings.'\n )\n }\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/fixtures/new')}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90\"\n >\n {tr('atheletebridge.pages.fixtures.scheduleFixtureAction', 'Schedule fixture')}\n </button>\n }\n />\n ) : (\n <>\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {items.map((fixture) => (\n <FixtureCard\n key={fixture.id}\n fixture={fixture}\n onClick={() => navigateTo(`/fixtures/${fixture.id}`)}\n />\n ))}\n </div>\n <CursorPager\n className=\"mt-6\"\n page={page}\n hasMore={hasMore}\n onPrev={() => setPage((p) => Math.max(0, p - 1))}\n onNext={() => setPage((p) => p + 1)}\n />\n </>\n )}\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnboardingPage.d.ts","sourceRoot":"","sources":["../../../../src/atheletebridge/pages/onboarding/OnboardingPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAkC,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"OnboardingPage.d.ts","sourceRoot":"","sources":["../../../../src/atheletebridge/pages/onboarding/OnboardingPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAkC,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;AAmOhF,eAAO,MAAM,cAAc,EAAE,EAuX5B,CAAC"}
|