@burdenoff/microfe-atheletebridge 2026.1102.1 → 2026.1103.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.
@@ -1 +1 @@
1
- {"version":3,"file":"TeamDetailPage.js","names":[],"sources":["../../../../src/atheletebridge/pages/teams/TeamDetailPage.tsx"],"sourcesContent":["/**\n * Team Detail\n * @module atheletebridge/pages/teams\n *\n * Reads a single team (with members + fixtures) from `athTeam`, supports adding,\n * editing (athUpdateMember — role/position/jersey/status inline per roster row)\n * and removing members (athAddMember / athRemoveMember), editing and archiving\n * the team (athUpdateTeam via the form / athArchiveTeam), links each roster row\n * to the athlete profile, and renders the team's fixtures as crest-vs-crest\n * matchup rows.\n */\n\nimport { useState } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n CalendarDays,\n Check,\n Edit,\n Archive,\n MapPin,\n Pencil,\n Plus,\n Trash2,\n UserPlus,\n Loader2,\n X,\n} from 'lucide-react';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { graphqlFetch, clearGraphqlFetchResponseCache } from '@burdenoff/fe-libs/shared/graphql';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell/GlobalUiProvider';\nimport {\n GlassCard,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { Crest } from '../../components/Crest';\nimport { UserAvatar } from '../../components/UserAvatar';\nimport { MatchupRow } from '../../components/MatchupRow';\nimport { EmptyState } from '../../components/EmptyState';\nimport { LoadingState, ErrorState } from '../../components/LoadingState';\nimport { FormField, fieldInputClass } from '../../components/form';\nimport { UserSearchSelect } from '../../components/UserSearchSelect';\nimport { SPORT_LABELS, MEMBER_ROLE_LABELS } from '../../components/domain';\nimport { SubjectDecisions } from '../../components/ai/SubjectDecisions';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport {\n useTeam,\n useArchiveTeam,\n useAddMember,\n useRemoveMember,\n} from '../../hooks/useAthleteBridgeApi';\nimport { useAbTranslate } from '../../i18n';\nimport type { AthMember, AthMemberRole, AthMemberStatus, AthUpdateMemberInput } from '../../types';\n\nconst ROLES = Object.keys(MEMBER_ROLE_LABELS) as AthMemberRole[];\nconst MEMBER_STATUSES: AthMemberStatus[] = ['TRIAL', 'ACTIVE', 'INJURED', 'SUSPENDED', 'RELEASED'];\n\nconst memberStatusLabel = (s: AthMemberStatus): string => s.charAt(0) + s.slice(1).toLowerCase();\n\ninterface AddMemberForm {\n userId: string;\n displayName: string;\n role: AthMemberRole;\n status: AthMemberStatus;\n position: string;\n jerseyNumber: string;\n}\n\nconst EMPTY_MEMBER: AddMemberForm = {\n userId: '',\n displayName: '',\n role: 'PLAYER',\n status: 'ACTIVE',\n position: '',\n jerseyNumber: '',\n};\n\ninterface RowDraft {\n role: AthMemberRole;\n status: AthMemberStatus;\n position: string;\n jerseyNumber: string;\n}\n\n/**\n * Inline roster-member update wired directly to the shipped `athUpdateMember`\n * mutation (the shared kit has add/remove hooks but no update hook). Uses the\n * same workspace-token graphqlFetch primitive as the rest of the MFE and clears\n * the short-lived read cache so the team refetch is fresh.\n */\nconst useUpdateMemberInline = (teamId: string | undefined) => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useAthleteBridge();\n return useMutation({\n mutationFn: async ({ id, input }: { id: string; input: AthUpdateMemberInput }) => {\n const res = await graphqlFetch<{ athUpdateMember: AthMember }>({\n gateway: 'workspace',\n baseUrl: apiGatewayUrl,\n query: `mutation AthUpdateMember($id: ID!, $input: AthUpdateMemberInput!) {\n athUpdateMember(id: $id, input: $input) {\n id teamId displayName role status position jerseyNumber\n }\n }`,\n variables: { id, input },\n workspaceToken: true,\n });\n if (res.errors?.length) {\n throw new Error(res.errors[0]?.message ?? 'Failed to update member.');\n }\n clearGraphqlFetchResponseCache();\n if (!res.data) throw new Error('Update did not return data.');\n return res.data.athUpdateMember;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['atheletebridge', 'team', teamId] });\n void queryClient.invalidateQueries({ queryKey: ['atheletebridge', 'members', teamId] });\n },\n });\n};\n\nexport function TeamDetailPage() {\n const tr = useAbTranslate();\n const { id } = useParams<{ id: string }>();\n const { navigateTo } = useAthleteBridge();\n const { showToast } = useGlobalUi();\n\n const team = useTeam(id);\n const archiveTeam = useArchiveTeam();\n const addMember = useAddMember();\n const removeMember = useRemoveMember(id);\n const updateMember = useUpdateMemberInline(id);\n\n const [addOpen, setAddOpen] = useState(false);\n const [memberForm, setMemberForm] = useState<AddMemberForm>(EMPTY_MEMBER);\n const [memberError, setMemberError] = useState<string | null>(null);\n\n const [editingId, setEditingId] = useState<string | null>(null);\n const [draft, setDraft] = useState<RowDraft | null>(null);\n const [rowError, setRowError] = useState<string | null>(null);\n const [deleteTarget, setDeleteTarget] = useState<AthMember | null>(null);\n\n if (team.isLoading) {\n return (\n <PageLayout title={tr('atheletebridge.pages.teamDetail.title', 'Team')}>\n <LoadingState label={tr('atheletebridge.pages.teamDetail.loading', 'Loading team…')} />\n </PageLayout>\n );\n }\n\n if (team.isError || !team.data) {\n return (\n <PageLayout title={tr('atheletebridge.pages.teamDetail.title', 'Team')}>\n <ErrorState\n title={tr('atheletebridge.pages.teamDetail.notFoundTitle', 'Team not found')}\n message={tr(\n 'atheletebridge.pages.teamDetail.notFoundMessage',\n 'This team does not exist or you do not have access to it.'\n )}\n onRetry={() => navigateTo('/teams')}\n />\n </PageLayout>\n );\n }\n\n const t = team.data;\n const members = t.members?.items ?? [];\n const fixtures = t.fixtures?.items ?? [];\n\n const metaParts = [\n SPORT_LABELS[t.sport],\n t.ageGroup ?? undefined,\n t.season ?? undefined,\n t.homeVenue ?? undefined,\n ].filter(Boolean) as string[];\n\n const handleArchive = async () => {\n if (!id) return;\n await archiveTeam.mutateAsync(id);\n navigateTo('/teams');\n };\n\n const startEdit = (m: AthMember) => {\n setRowError(null);\n setEditingId(m.id);\n setDraft({\n role: m.role,\n status: m.status,\n position: m.position ?? '',\n jerseyNumber: m.jerseyNumber != null ? String(m.jerseyNumber) : '',\n });\n };\n\n const cancelEdit = () => {\n setEditingId(null);\n setDraft(null);\n setRowError(null);\n };\n\n const saveEdit = async (memberId: string) => {\n if (!draft) return;\n setRowError(null);\n const trimmedJersey = draft.jerseyNumber.trim();\n let jersey: number | undefined;\n if (trimmedJersey) {\n jersey = Number.parseInt(trimmedJersey, 10);\n if (Number.isNaN(jersey)) {\n setRowError('Jersey number must be a number.');\n return;\n }\n }\n try {\n await updateMember.mutateAsync({\n id: memberId,\n input: {\n role: draft.role,\n status: draft.status,\n position: draft.position.trim() || undefined,\n jerseyNumber: jersey,\n },\n });\n cancelEdit();\n } catch (err) {\n setRowError(err instanceof Error ? err.message : 'Failed to update member.');\n }\n };\n\n const handleAddMember = async (e: React.FormEvent) => {\n e.preventDefault();\n setMemberError(null);\n if (!id) return;\n if (!memberForm.userId.trim() || !memberForm.displayName.trim()) {\n setMemberError('User ID and display name are required.');\n return;\n }\n const jersey = memberForm.jerseyNumber.trim()\n ? Number.parseInt(memberForm.jerseyNumber, 10)\n : undefined;\n if (jersey !== undefined && Number.isNaN(jersey)) {\n setMemberError('Jersey number must be a number.');\n return;\n }\n try {\n await addMember.mutateAsync({\n teamId: id,\n userId: memberForm.userId.trim(),\n displayName: memberForm.displayName.trim(),\n role: memberForm.role,\n status: memberForm.status,\n position: memberForm.position.trim() || undefined,\n jerseyNumber: jersey,\n });\n setMemberForm(EMPTY_MEMBER);\n setAddOpen(false);\n } catch (err) {\n setMemberError(err instanceof Error ? err.message : 'Failed to add member.');\n }\n };\n\n const openProfile = (memberId: string) => navigateTo(`/teams/${t.id}/athletes/${memberId}`);\n\n /**\n * Destructive roster removal (BOFF-7617): only runs after the confirmation\n * dialog's explicit Delete. On success the read cache is invalidated by the\n * shared hook and a success toast is shown; on failure an error toast is\n * shown and the member stays on the roster (no invalidation ran).\n */\n const confirmDeleteMember = async () => {\n if (!deleteTarget) return;\n const name = deleteTarget.displayName;\n try {\n await removeMember.mutateAsync(deleteTarget.id);\n showToast(\n tr(\n 'atheletebridge.pages.teamDetail.memberDeletedToast',\n '\"{name}\" was removed from the team.'\n ).replace('{name}', name),\n 'success'\n );\n setDeleteTarget(null);\n } catch {\n showToast(\n tr(\n 'atheletebridge.pages.teamDetail.memberDeleteFailedToast',\n 'Failed to remove \"{name}\". Please try again.'\n ).replace('{name}', name),\n 'error'\n );\n setDeleteTarget(null);\n }\n };\n\n return (\n <PageLayout\n title={t.name}\n gradientTitle\n description={metaParts.join(' · ')}\n actions={\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/teams')}\n 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\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> {tr('atheletebridge.pages.teamDetail.back', 'Back')}\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/teams/${t.id}/edit`)}\n 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\"\n >\n <Edit className=\"h-4 w-4\" /> {tr('atheletebridge.pages.teamDetail.edit', 'Edit')}\n </button>\n {t.status !== 'ARCHIVED' && (\n <button\n type=\"button\"\n onClick={handleArchive}\n disabled={archiveTeam.isPending}\n 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\"\n >\n {archiveTeam.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Archive className=\"h-4 w-4\" />\n )}{' '}\n {tr('atheletebridge.pages.teamDetail.archive', 'Archive')}\n </button>\n )}\n </div>\n }\n >\n {/* Hero: crest + meta strip */}\n <GlassCard treatment=\"insight\" className=\"mb-8 p-6\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center\">\n <Crest name={t.name} sport={t.sport} size={64} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h2 className=\"text-xl font-semibold text-text-primary\">{t.name}</h2>\n <StatusBadge status={t.status} />\n </div>\n <div className=\"mt-1.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-text-secondary\">\n {metaParts.map((part, i) => (\n <span key={part} className=\"flex items-center gap-2\">\n {i > 0 && (\n <span aria-hidden=\"true\" className=\"text-text-muted\">\n ·\n </span>\n )}\n {part === t.homeVenue ? (\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3.5 w-3.5\" aria-hidden=\"true\" /> {part}\n </span>\n ) : (\n part\n )}\n </span>\n ))}\n </div>\n </div>\n </div>\n {t.description && <p className=\"mt-4 text-sm text-text-secondary\">{t.description}</p>}\n {t.tags.length > 0 && (\n <div className=\"mt-4 flex flex-wrap gap-1.5\">\n {t.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </GlassCard>\n\n {/* Roster */}\n <section className=\"mb-8\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr('atheletebridge.pages.teamDetail.rosterTitle', 'Roster')} ({members.length})\n </h2>\n <button\n type=\"button\"\n onClick={() => {\n setMemberError(null);\n setAddOpen(true);\n }}\n 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\"\n >\n <UserPlus className=\"h-4 w-4\" />{' '}\n {tr('atheletebridge.pages.teamDetail.addMember', 'Add member')}\n </button>\n </div>\n\n {members.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<UserPlus className=\"h-10 w-10\" />}\n title={tr('atheletebridge.pages.teamDetail.noMembersTitle', 'No members yet')}\n description={tr(\n 'atheletebridge.pages.teamDetail.noMembersHint',\n 'Add players, coaches and staff to build the roster.'\n )}\n />\n ) : (\n <GlassCard treatment=\"insight\" className=\"overflow-hidden p-0\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full min-w-[720px] border-collapse text-sm\">\n <thead>\n <tr className=\"border-b border-border-seam text-left text-xs uppercase tracking-wide text-text-secondary\">\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.playerHeader', 'Player')}\n </th>\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.roleHeader', 'Role')}\n </th>\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.positionHeader', 'Position')}\n </th>\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.jerseyHeader', 'Jersey #')}\n </th>\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.statusHeader', 'Status')}\n </th>\n <th className=\"px-4 py-3 text-right font-medium\">\n {tr('atheletebridge.pages.teamDetail.actionsHeader', 'Actions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border-seam\">\n {members.map((m) => {\n const isEditing = editingId === m.id;\n const busy = updateMember.isPending && isEditing;\n return (\n <tr\n key={m.id}\n className=\"align-middle transition-colors hover:bg-bg-sunken/60\"\n >\n {/* Player */}\n <td className=\"px-4 py-3\">\n <button\n type=\"button\"\n onClick={() => openProfile(m.id)}\n className=\"group flex items-center gap-3 text-left focus-visible:outline-none\"\n title={`${tr('atheletebridge.pages.teamDetail.viewProfile', 'View profile')}: ${m.displayName}`}\n >\n <UserAvatar\n name={m.displayName}\n id={m.userId}\n jersey={m.jerseyNumber}\n size=\"sm\"\n />\n <span className=\"min-w-0\">\n <span className=\"block truncate font-medium text-text-primary group-hover:text-text-link\">\n {m.displayName}\n </span>\n <span className=\"block truncate text-xs text-text-secondary group-hover:text-text-link\">\n {tr('atheletebridge.pages.teamDetail.viewProfile', 'View profile')}\n </span>\n </span>\n </button>\n </td>\n\n {/* Role */}\n <td className=\"px-4 py-3\">\n {isEditing && draft ? (\n <select\n aria-label={tr('atheletebridge.pages.teamDetail.roleHeader', 'Role')}\n className={fieldInputClass}\n value={draft.role}\n onChange={(e) =>\n setDraft((d) =>\n d ? { ...d, role: e.target.value as AthMemberRole } : d\n )\n }\n >\n {ROLES.map((r) => (\n <option key={r} value={r}>\n {MEMBER_ROLE_LABELS[r]}\n </option>\n ))}\n </select>\n ) : (\n <span className=\"text-text-secondary\">\n {MEMBER_ROLE_LABELS[m.role]}\n </span>\n )}\n </td>\n\n {/* Position */}\n <td className=\"px-4 py-3\">\n {isEditing && draft ? (\n <input\n aria-label={tr(\n 'atheletebridge.pages.teamDetail.positionHeader',\n 'Position'\n )}\n className={fieldInputClass}\n value={draft.position}\n onChange={(e) =>\n setDraft((d) => (d ? { ...d, position: e.target.value } : d))\n }\n placeholder=\"e.g. Striker\"\n />\n ) : (\n <span className=\"text-text-secondary\">{m.position || '—'}</span>\n )}\n </td>\n\n {/* Jersey # */}\n <td className=\"px-4 py-3\">\n {isEditing && draft ? (\n <input\n aria-label={tr(\n 'atheletebridge.pages.teamDetail.jerseyHeader',\n 'Jersey number'\n )}\n inputMode=\"numeric\"\n className={`${fieldInputClass} w-20`}\n value={draft.jerseyNumber}\n onChange={(e) =>\n setDraft((d) => (d ? { ...d, jerseyNumber: e.target.value } : d))\n }\n placeholder=\"9\"\n />\n ) : (\n <span className=\"tabular-nums text-text-primary\">\n {m.jerseyNumber ?? '—'}\n </span>\n )}\n </td>\n\n {/* Status */}\n <td className=\"px-4 py-3\">\n {isEditing && draft ? (\n <select\n aria-label={tr(\n 'atheletebridge.pages.teamDetail.statusHeader',\n 'Status'\n )}\n className={fieldInputClass}\n value={draft.status}\n onChange={(e) =>\n setDraft((d) =>\n d ? { ...d, status: e.target.value as AthMemberStatus } : d\n )\n }\n >\n {MEMBER_STATUSES.map((s) => (\n <option key={s} value={s}>\n {memberStatusLabel(s)}\n </option>\n ))}\n </select>\n ) : (\n <StatusBadge status={m.status} />\n )}\n </td>\n\n {/* Actions */}\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center justify-end gap-1\">\n {isEditing ? (\n <>\n <button\n type=\"button\"\n onClick={() => void saveEdit(m.id)}\n disabled={busy}\n aria-label={tr('common.save', 'Save')}\n className=\"rounded-lg p-2 text-status-success-text transition-colors hover:bg-status-success-bg-subtle disabled:opacity-60\"\n >\n {busy ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Check className=\"h-4 w-4\" />\n )}\n </button>\n <button\n type=\"button\"\n onClick={cancelEdit}\n disabled={busy}\n aria-label={tr('common.cancel', 'Cancel')}\n className=\"rounded-lg p-2 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary disabled:opacity-60\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </>\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => startEdit(m)}\n aria-label={`${tr('common.edit', 'Edit')} ${m.displayName}`}\n className=\"rounded-lg p-2 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary\"\n >\n <Pencil className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setDeleteTarget(m)}\n disabled={removeMember.isPending}\n aria-label={`${tr('common.delete', 'Delete')} ${m.displayName}`}\n className=\"rounded-lg p-2 text-text-secondary transition-colors hover:bg-status-error-bg-subtle hover:text-status-error-text disabled:opacity-60\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </>\n )}\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n {rowError && (\n <p className=\"border-t border-border-seam px-4 py-2 text-sm text-status-error-text\">\n {rowError}\n </p>\n )}\n </GlassCard>\n )}\n </section>\n\n {/* Fixtures */}\n <section>\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr('atheletebridge.pages.teamDetail.fixturesTitle', 'Fixtures')} ({fixtures.length})\n </h2>\n <div className=\"flex items-center gap-2\">\n {fixtures.length > 0 && (\n <button\n type=\"button\"\n onClick={() => navigateTo('/fixtures')}\n className=\"text-sm font-medium text-text-link transition-colors hover:underline\"\n >\n {tr('atheletebridge.pages.teamDetail.viewAll', 'View all')}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => navigateTo(`/fixtures/new?homeTeamId=${t.id}`)}\n 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\"\n >\n <Plus className=\"h-4 w-4\" />{' '}\n {tr('atheletebridge.pages.teamDetail.schedule', 'Schedule')}\n </button>\n </div>\n </div>\n {fixtures.length === 0 ? (\n <EmptyState\n illustration=\"empty-calendar\"\n icon={<CalendarDays className=\"h-10 w-10\" />}\n title={tr('atheletebridge.pages.teamDetail.noFixturesTitle', 'No fixtures scheduled')}\n description={tr(\n 'atheletebridge.pages.teamDetail.noFixturesHint',\n 'Schedule a match for this team to start tracking results.'\n )}\n />\n ) : (\n <GlassCard treatment=\"insight\" className=\"px-4 py-1\">\n <div className=\"divide-y divide-border-seam\">\n {fixtures.map((f) => (\n <MatchupRow\n key={f.id}\n fixture={f}\n onClick={() => navigateTo(`/fixtures/${f.id}`)}\n />\n ))}\n </div>\n </GlassCard>\n )}\n </section>\n\n {/* AI programs generated for this team (BOFF-3574) */}\n <SubjectDecisions className=\"mt-8\" subject={{ kind: 'team', teamId: t.id }} />\n\n {/* Delete member confirmation (BOFF-7617) */}\n <ResponsiveDialog\n open={deleteTarget !== null}\n onOpenChange={(open) => {\n if (!open && !removeMember.isPending) setDeleteTarget(null);\n }}\n >\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>\n {tr('atheletebridge.pages.teamDetail.deleteMemberTitle', 'Delete player?')}\n </ResponsiveDialogTitle>\n </ResponsiveDialogHeader>\n <p className=\"px-1 text-sm text-text-secondary\">\n {tr(\n 'atheletebridge.pages.teamDetail.deleteMemberMessage',\n 'This will remove \"{name}\" from {team}. This action cannot be undone.'\n )\n .replace('{name}', deleteTarget?.displayName ?? '')\n .replace('{team}', t.name)}\n </p>\n <ResponsiveDialogFooter>\n <button\n type=\"button\"\n onClick={() => setDeleteTarget(null)}\n disabled={removeMember.isPending}\n className=\"rounded-lg border border-border-seam px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:opacity-60\"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n <button\n type=\"button\"\n onClick={() => void confirmDeleteMember()}\n disabled={removeMember.isPending}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-action-danger-bg px-4 py-2 text-sm font-semibold text-action-danger-text transition-colors hover:bg-action-danger-bgHover disabled:opacity-60\"\n >\n {removeMember.isPending && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {tr('common.delete', 'Delete')}\n </button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Add member dialog */}\n <ResponsiveDialog open={addOpen} onOpenChange={setAddOpen}>\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>\n {tr('atheletebridge.pages.teamDetail.addMember', 'Add member')}\n </ResponsiveDialogTitle>\n </ResponsiveDialogHeader>\n <form onSubmit={handleAddMember} className=\"space-y-4 px-1\">\n <UserSearchSelect\n userId={memberForm.userId}\n displayName={memberForm.displayName}\n onSelect={({ userId, displayName }) =>\n setMemberForm((p) => ({ ...p, userId, displayName: displayName || p.displayName }))\n }\n required\n />\n <FormField label=\"Display name\" htmlFor=\"displayName\" required>\n <input\n id=\"displayName\"\n className={fieldInputClass}\n value={memberForm.displayName}\n onChange={(e) => setMemberForm((p) => ({ ...p, displayName: e.target.value }))}\n placeholder=\"e.g. Alex Morgan\"\n />\n </FormField>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Role\" htmlFor=\"role\">\n <select\n id=\"role\"\n className={fieldInputClass}\n value={memberForm.role}\n onChange={(e) =>\n setMemberForm((p) => ({ ...p, role: e.target.value as AthMemberRole }))\n }\n >\n {ROLES.map((r) => (\n <option key={r} value={r}>\n {MEMBER_ROLE_LABELS[r]}\n </option>\n ))}\n </select>\n </FormField>\n <FormField label=\"Status\" htmlFor=\"memberStatus\">\n <select\n id=\"memberStatus\"\n className={fieldInputClass}\n value={memberForm.status}\n onChange={(e) =>\n setMemberForm((p) => ({ ...p, status: e.target.value as AthMemberStatus }))\n }\n >\n {MEMBER_STATUSES.map((s) => (\n <option key={s} value={s}>\n {memberStatusLabel(s)}\n </option>\n ))}\n </select>\n </FormField>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Position\" htmlFor=\"position\">\n <input\n id=\"position\"\n className={fieldInputClass}\n value={memberForm.position}\n onChange={(e) => setMemberForm((p) => ({ ...p, position: e.target.value }))}\n placeholder=\"e.g. Striker\"\n />\n </FormField>\n <FormField label=\"Jersey #\" htmlFor=\"jersey\">\n <input\n id=\"jersey\"\n className={fieldInputClass}\n inputMode=\"numeric\"\n value={memberForm.jerseyNumber}\n onChange={(e) => setMemberForm((p) => ({ ...p, jerseyNumber: e.target.value }))}\n placeholder=\"9\"\n />\n </FormField>\n </div>\n {memberError && <p className=\"text-sm text-status-error-text\">{memberError}</p>}\n <ResponsiveDialogFooter>\n <button\n type=\"button\"\n onClick={() => setAddOpen(false)}\n className=\"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 {tr('common.cancel', 'Cancel')}\n </button>\n <button\n type=\"submit\"\n disabled={addMember.isPending}\n 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\"\n >\n {addMember.isPending && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {tr('atheletebridge.pages.teamDetail.addMember', 'Add member')}\n </button>\n </ResponsiveDialogFooter>\n </form>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TeamDetailPage.js","names":[],"sources":["../../../../src/atheletebridge/pages/teams/TeamDetailPage.tsx"],"sourcesContent":["/**\n * Team Detail\n * @module atheletebridge/pages/teams\n *\n * Reads a single team (with members + fixtures) from `athTeam`, supports adding,\n * editing (athUpdateMember — role/position/jersey/status inline per roster row)\n * and removing members (athAddMember / athRemoveMember), editing and archiving\n * the team (athUpdateTeam via the form / athArchiveTeam), links each roster row\n * to the athlete profile, and renders the team's fixtures as crest-vs-crest\n * matchup rows.\n */\n\nimport { useState } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n CalendarDays,\n Check,\n Edit,\n Archive,\n ArchiveRestore,\n MapPin,\n Pencil,\n Plus,\n Trash2,\n UserPlus,\n Loader2,\n X,\n} from 'lucide-react';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { graphqlFetch, clearGraphqlFetchResponseCache } from '@burdenoff/fe-libs/shared/graphql';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell/GlobalUiProvider';\nimport {\n GlassCard,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { Crest } from '../../components/Crest';\nimport { UserAvatar } from '../../components/UserAvatar';\nimport { MatchupRow } from '../../components/MatchupRow';\nimport { EmptyState } from '../../components/EmptyState';\nimport { LoadingState, ErrorState } from '../../components/LoadingState';\nimport { FormField, fieldInputClass } from '../../components/form';\nimport { UserSearchSelect } from '../../components/UserSearchSelect';\nimport { SPORT_LABELS, MEMBER_ROLE_LABELS } from '../../components/domain';\nimport { SubjectDecisions } from '../../components/ai/SubjectDecisions';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport {\n useTeam,\n useArchiveTeam,\n useUnarchiveTeam,\n useAddMember,\n useRemoveMember,\n} from '../../hooks/useAthleteBridgeApi';\nimport { useAbTranslate } from '../../i18n';\nimport type { AthMember, AthMemberRole, AthMemberStatus, AthUpdateMemberInput } from '../../types';\n\nconst ROLES = Object.keys(MEMBER_ROLE_LABELS) as AthMemberRole[];\nconst MEMBER_STATUSES: AthMemberStatus[] = ['TRIAL', 'ACTIVE', 'INJURED', 'SUSPENDED', 'RELEASED'];\n\nconst memberStatusLabel = (s: AthMemberStatus): string => s.charAt(0) + s.slice(1).toLowerCase();\n\ninterface AddMemberForm {\n userId: string;\n displayName: string;\n role: AthMemberRole;\n status: AthMemberStatus;\n position: string;\n jerseyNumber: string;\n}\n\nconst EMPTY_MEMBER: AddMemberForm = {\n userId: '',\n displayName: '',\n role: 'PLAYER',\n status: 'ACTIVE',\n position: '',\n jerseyNumber: '',\n};\n\ninterface RowDraft {\n role: AthMemberRole;\n status: AthMemberStatus;\n position: string;\n jerseyNumber: string;\n}\n\n/**\n * Inline roster-member update wired directly to the shipped `athUpdateMember`\n * mutation (the shared kit has add/remove hooks but no update hook). Uses the\n * same workspace-token graphqlFetch primitive as the rest of the MFE and clears\n * the short-lived read cache so the team refetch is fresh.\n */\nconst useUpdateMemberInline = (teamId: string | undefined) => {\n const queryClient = useQueryClient();\n const { apiGatewayUrl } = useAthleteBridge();\n return useMutation({\n mutationFn: async ({ id, input }: { id: string; input: AthUpdateMemberInput }) => {\n const res = await graphqlFetch<{ athUpdateMember: AthMember }>({\n gateway: 'workspace',\n baseUrl: apiGatewayUrl,\n query: `mutation AthUpdateMember($id: ID!, $input: AthUpdateMemberInput!) {\n athUpdateMember(id: $id, input: $input) {\n id teamId displayName role status position jerseyNumber\n }\n }`,\n variables: { id, input },\n workspaceToken: true,\n });\n if (res.errors?.length) {\n throw new Error(res.errors[0]?.message ?? 'Failed to update member.');\n }\n clearGraphqlFetchResponseCache();\n if (!res.data) throw new Error('Update did not return data.');\n return res.data.athUpdateMember;\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['atheletebridge', 'team', teamId] });\n void queryClient.invalidateQueries({ queryKey: ['atheletebridge', 'members', teamId] });\n },\n });\n};\n\nexport function TeamDetailPage() {\n const tr = useAbTranslate();\n const { id } = useParams<{ id: string }>();\n const { navigateTo } = useAthleteBridge();\n const { showToast } = useGlobalUi();\n\n const team = useTeam(id);\n const archiveTeam = useArchiveTeam();\n const unarchiveTeam = useUnarchiveTeam();\n const addMember = useAddMember();\n const removeMember = useRemoveMember(id);\n const updateMember = useUpdateMemberInline(id);\n\n const [addOpen, setAddOpen] = useState(false);\n const [memberForm, setMemberForm] = useState<AddMemberForm>(EMPTY_MEMBER);\n const [memberError, setMemberError] = useState<string | null>(null);\n\n const [editingId, setEditingId] = useState<string | null>(null);\n const [draft, setDraft] = useState<RowDraft | null>(null);\n const [rowError, setRowError] = useState<string | null>(null);\n const [deleteTarget, setDeleteTarget] = useState<AthMember | null>(null);\n\n if (team.isLoading) {\n return (\n <PageLayout title={tr('atheletebridge.pages.teamDetail.title', 'Team')}>\n <LoadingState label={tr('atheletebridge.pages.teamDetail.loading', 'Loading team…')} />\n </PageLayout>\n );\n }\n\n if (team.isError || !team.data) {\n return (\n <PageLayout title={tr('atheletebridge.pages.teamDetail.title', 'Team')}>\n <ErrorState\n title={tr('atheletebridge.pages.teamDetail.notFoundTitle', 'Team not found')}\n message={tr(\n 'atheletebridge.pages.teamDetail.notFoundMessage',\n 'This team does not exist or you do not have access to it.'\n )}\n onRetry={() => navigateTo('/teams')}\n />\n </PageLayout>\n );\n }\n\n const t = team.data;\n const members = t.members?.items ?? [];\n const fixtures = t.fixtures?.items ?? [];\n\n const metaParts = [\n SPORT_LABELS[t.sport],\n t.ageGroup ?? undefined,\n t.season ?? undefined,\n t.homeVenue ?? undefined,\n ].filter(Boolean) as string[];\n\n const handleArchive = async () => {\n if (!id) return;\n try {\n await archiveTeam.mutateAsync(id);\n navigateTo('/teams');\n } catch {\n // Stay on the page: the team is still live, so the user has to see why.\n showToast(\n tr(\n 'atheletebridge.pages.teamDetail.archiveFailed',\n 'Failed to archive team. Please try again.'\n ),\n 'error'\n );\n }\n };\n\n /**\n * Recovery path for an archived team (BOFF-7616). The user stays on the page,\n * so a failed mutation MUST surface an error toast — without it the spinner\n * stops silently and the rejection is unhandled.\n */\n const handleUnarchive = async () => {\n if (!id) return;\n try {\n await unarchiveTeam.mutateAsync(id);\n showToast(tr('atheletebridge.pages.teamDetail.unarchived', 'Team restored'), 'success');\n } catch {\n showToast(\n tr(\n 'atheletebridge.pages.teamDetail.unarchiveFailed',\n 'Failed to restore team. Please try again.'\n ),\n 'error'\n );\n }\n };\n\n const startEdit = (m: AthMember) => {\n setRowError(null);\n setEditingId(m.id);\n setDraft({\n role: m.role,\n status: m.status,\n position: m.position ?? '',\n jerseyNumber: m.jerseyNumber != null ? String(m.jerseyNumber) : '',\n });\n };\n\n const cancelEdit = () => {\n setEditingId(null);\n setDraft(null);\n setRowError(null);\n };\n\n const saveEdit = async (memberId: string) => {\n if (!draft) return;\n setRowError(null);\n const trimmedJersey = draft.jerseyNumber.trim();\n let jersey: number | undefined;\n if (trimmedJersey) {\n jersey = Number.parseInt(trimmedJersey, 10);\n if (Number.isNaN(jersey)) {\n setRowError('Jersey number must be a number.');\n return;\n }\n }\n try {\n await updateMember.mutateAsync({\n id: memberId,\n input: {\n role: draft.role,\n status: draft.status,\n position: draft.position.trim() || undefined,\n jerseyNumber: jersey,\n },\n });\n cancelEdit();\n } catch (err) {\n setRowError(err instanceof Error ? err.message : 'Failed to update member.');\n }\n };\n\n const handleAddMember = async (e: React.FormEvent) => {\n e.preventDefault();\n setMemberError(null);\n if (!id) return;\n if (!memberForm.userId.trim() || !memberForm.displayName.trim()) {\n setMemberError('User ID and display name are required.');\n return;\n }\n const jersey = memberForm.jerseyNumber.trim()\n ? Number.parseInt(memberForm.jerseyNumber, 10)\n : undefined;\n if (jersey !== undefined && Number.isNaN(jersey)) {\n setMemberError('Jersey number must be a number.');\n return;\n }\n try {\n await addMember.mutateAsync({\n teamId: id,\n userId: memberForm.userId.trim(),\n displayName: memberForm.displayName.trim(),\n role: memberForm.role,\n status: memberForm.status,\n position: memberForm.position.trim() || undefined,\n jerseyNumber: jersey,\n });\n setMemberForm(EMPTY_MEMBER);\n setAddOpen(false);\n } catch (err) {\n setMemberError(err instanceof Error ? err.message : 'Failed to add member.');\n }\n };\n\n const openProfile = (memberId: string) => navigateTo(`/teams/${t.id}/athletes/${memberId}`);\n\n /**\n * Destructive roster removal (BOFF-7617): only runs after the confirmation\n * dialog's explicit Delete. On success the read cache is invalidated by the\n * shared hook and a success toast is shown; on failure an error toast is\n * shown and the member stays on the roster (no invalidation ran).\n */\n const confirmDeleteMember = async () => {\n if (!deleteTarget) return;\n const name = deleteTarget.displayName;\n try {\n await removeMember.mutateAsync(deleteTarget.id);\n showToast(\n tr(\n 'atheletebridge.pages.teamDetail.memberDeletedToast',\n '\"{name}\" was removed from the team.'\n ).replace('{name}', name),\n 'success'\n );\n setDeleteTarget(null);\n } catch {\n showToast(\n tr(\n 'atheletebridge.pages.teamDetail.memberDeleteFailedToast',\n 'Failed to remove \"{name}\". Please try again.'\n ).replace('{name}', name),\n 'error'\n );\n setDeleteTarget(null);\n }\n };\n\n return (\n <PageLayout\n title={t.name}\n gradientTitle\n description={metaParts.join(' · ')}\n actions={\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/teams')}\n 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\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> {tr('atheletebridge.pages.teamDetail.back', 'Back')}\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/teams/${t.id}/edit`)}\n 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\"\n >\n <Edit className=\"h-4 w-4\" /> {tr('atheletebridge.pages.teamDetail.edit', 'Edit')}\n </button>\n {t.status !== 'ARCHIVED' && (\n <button\n type=\"button\"\n onClick={handleArchive}\n disabled={archiveTeam.isPending}\n 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\"\n >\n {archiveTeam.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Archive className=\"h-4 w-4\" />\n )}{' '}\n {tr('atheletebridge.pages.teamDetail.archive', 'Archive')}\n </button>\n )}\n {t.status === 'ARCHIVED' && (\n <button\n type=\"button\"\n onClick={handleUnarchive}\n disabled={unarchiveTeam.isPending}\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-bg-sunken disabled:opacity-60\"\n >\n {unarchiveTeam.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <ArchiveRestore className=\"h-4 w-4\" />\n )}{' '}\n {tr('atheletebridge.pages.teamDetail.unarchive', 'Unarchive')}\n </button>\n )}\n </div>\n }\n >\n {/* Hero: crest + meta strip */}\n <GlassCard treatment=\"insight\" className=\"mb-8 p-6\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center\">\n <Crest name={t.name} sport={t.sport} size={64} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h2 className=\"text-xl font-semibold text-text-primary\">{t.name}</h2>\n <StatusBadge status={t.status} />\n </div>\n <div className=\"mt-1.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-text-secondary\">\n {metaParts.map((part, i) => (\n <span key={part} className=\"flex items-center gap-2\">\n {i > 0 && (\n <span aria-hidden=\"true\" className=\"text-text-muted\">\n ·\n </span>\n )}\n {part === t.homeVenue ? (\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3.5 w-3.5\" aria-hidden=\"true\" /> {part}\n </span>\n ) : (\n part\n )}\n </span>\n ))}\n </div>\n </div>\n </div>\n {t.description && <p className=\"mt-4 text-sm text-text-secondary\">{t.description}</p>}\n {t.tags.length > 0 && (\n <div className=\"mt-4 flex flex-wrap gap-1.5\">\n {t.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </GlassCard>\n\n {/* Roster */}\n <section className=\"mb-8\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr('atheletebridge.pages.teamDetail.rosterTitle', 'Roster')} ({members.length})\n </h2>\n <button\n type=\"button\"\n onClick={() => {\n setMemberError(null);\n setAddOpen(true);\n }}\n 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\"\n >\n <UserPlus className=\"h-4 w-4\" />{' '}\n {tr('atheletebridge.pages.teamDetail.addMember', 'Add member')}\n </button>\n </div>\n\n {members.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<UserPlus className=\"h-10 w-10\" />}\n title={tr('atheletebridge.pages.teamDetail.noMembersTitle', 'No members yet')}\n description={tr(\n 'atheletebridge.pages.teamDetail.noMembersHint',\n 'Add players, coaches and staff to build the roster.'\n )}\n />\n ) : (\n <GlassCard treatment=\"insight\" className=\"overflow-hidden p-0\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full min-w-[720px] border-collapse text-sm\">\n <thead>\n <tr className=\"border-b border-border-seam text-left text-xs uppercase tracking-wide text-text-secondary\">\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.playerHeader', 'Player')}\n </th>\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.roleHeader', 'Role')}\n </th>\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.positionHeader', 'Position')}\n </th>\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.jerseyHeader', 'Jersey #')}\n </th>\n <th className=\"px-4 py-3 font-medium\">\n {tr('atheletebridge.pages.teamDetail.statusHeader', 'Status')}\n </th>\n <th className=\"px-4 py-3 text-right font-medium\">\n {tr('atheletebridge.pages.teamDetail.actionsHeader', 'Actions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border-seam\">\n {members.map((m) => {\n const isEditing = editingId === m.id;\n const busy = updateMember.isPending && isEditing;\n return (\n <tr\n key={m.id}\n className=\"align-middle transition-colors hover:bg-bg-sunken/60\"\n >\n {/* Player */}\n <td className=\"px-4 py-3\">\n <button\n type=\"button\"\n onClick={() => openProfile(m.id)}\n className=\"group flex items-center gap-3 text-left focus-visible:outline-none\"\n title={`${tr('atheletebridge.pages.teamDetail.viewProfile', 'View profile')}: ${m.displayName}`}\n >\n <UserAvatar\n name={m.displayName}\n id={m.userId}\n jersey={m.jerseyNumber}\n size=\"sm\"\n />\n <span className=\"min-w-0\">\n <span className=\"block truncate font-medium text-text-primary group-hover:text-text-link\">\n {m.displayName}\n </span>\n <span className=\"block truncate text-xs text-text-secondary group-hover:text-text-link\">\n {tr('atheletebridge.pages.teamDetail.viewProfile', 'View profile')}\n </span>\n </span>\n </button>\n </td>\n\n {/* Role */}\n <td className=\"px-4 py-3\">\n {isEditing && draft ? (\n <select\n aria-label={tr('atheletebridge.pages.teamDetail.roleHeader', 'Role')}\n className={fieldInputClass}\n value={draft.role}\n onChange={(e) =>\n setDraft((d) =>\n d ? { ...d, role: e.target.value as AthMemberRole } : d\n )\n }\n >\n {ROLES.map((r) => (\n <option key={r} value={r}>\n {MEMBER_ROLE_LABELS[r]}\n </option>\n ))}\n </select>\n ) : (\n <span className=\"text-text-secondary\">\n {MEMBER_ROLE_LABELS[m.role]}\n </span>\n )}\n </td>\n\n {/* Position */}\n <td className=\"px-4 py-3\">\n {isEditing && draft ? (\n <input\n aria-label={tr(\n 'atheletebridge.pages.teamDetail.positionHeader',\n 'Position'\n )}\n className={fieldInputClass}\n value={draft.position}\n onChange={(e) =>\n setDraft((d) => (d ? { ...d, position: e.target.value } : d))\n }\n placeholder=\"e.g. Striker\"\n />\n ) : (\n <span className=\"text-text-secondary\">{m.position || '—'}</span>\n )}\n </td>\n\n {/* Jersey # */}\n <td className=\"px-4 py-3\">\n {isEditing && draft ? (\n <input\n aria-label={tr(\n 'atheletebridge.pages.teamDetail.jerseyHeader',\n 'Jersey number'\n )}\n inputMode=\"numeric\"\n className={`${fieldInputClass} w-20`}\n value={draft.jerseyNumber}\n onChange={(e) =>\n setDraft((d) => (d ? { ...d, jerseyNumber: e.target.value } : d))\n }\n placeholder=\"9\"\n />\n ) : (\n <span className=\"tabular-nums text-text-primary\">\n {m.jerseyNumber ?? '—'}\n </span>\n )}\n </td>\n\n {/* Status */}\n <td className=\"px-4 py-3\">\n {isEditing && draft ? (\n <select\n aria-label={tr(\n 'atheletebridge.pages.teamDetail.statusHeader',\n 'Status'\n )}\n className={fieldInputClass}\n value={draft.status}\n onChange={(e) =>\n setDraft((d) =>\n d ? { ...d, status: e.target.value as AthMemberStatus } : d\n )\n }\n >\n {MEMBER_STATUSES.map((s) => (\n <option key={s} value={s}>\n {memberStatusLabel(s)}\n </option>\n ))}\n </select>\n ) : (\n <StatusBadge status={m.status} />\n )}\n </td>\n\n {/* Actions */}\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center justify-end gap-1\">\n {isEditing ? (\n <>\n <button\n type=\"button\"\n onClick={() => void saveEdit(m.id)}\n disabled={busy}\n aria-label={tr('common.save', 'Save')}\n className=\"rounded-lg p-2 text-status-success-text transition-colors hover:bg-status-success-bg-subtle disabled:opacity-60\"\n >\n {busy ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Check className=\"h-4 w-4\" />\n )}\n </button>\n <button\n type=\"button\"\n onClick={cancelEdit}\n disabled={busy}\n aria-label={tr('common.cancel', 'Cancel')}\n className=\"rounded-lg p-2 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary disabled:opacity-60\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </>\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => startEdit(m)}\n aria-label={`${tr('common.edit', 'Edit')} ${m.displayName}`}\n className=\"rounded-lg p-2 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary\"\n >\n <Pencil className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setDeleteTarget(m)}\n disabled={removeMember.isPending}\n aria-label={`${tr('common.delete', 'Delete')} ${m.displayName}`}\n className=\"rounded-lg p-2 text-text-secondary transition-colors hover:bg-status-error-bg-subtle hover:text-status-error-text disabled:opacity-60\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </>\n )}\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n {rowError && (\n <p className=\"border-t border-border-seam px-4 py-2 text-sm text-status-error-text\">\n {rowError}\n </p>\n )}\n </GlassCard>\n )}\n </section>\n\n {/* Fixtures */}\n <section>\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr('atheletebridge.pages.teamDetail.fixturesTitle', 'Fixtures')} ({fixtures.length})\n </h2>\n <div className=\"flex items-center gap-2\">\n {fixtures.length > 0 && (\n <button\n type=\"button\"\n onClick={() => navigateTo('/fixtures')}\n className=\"text-sm font-medium text-text-link transition-colors hover:underline\"\n >\n {tr('atheletebridge.pages.teamDetail.viewAll', 'View all')}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => navigateTo(`/fixtures/new?homeTeamId=${t.id}`)}\n 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\"\n >\n <Plus className=\"h-4 w-4\" />{' '}\n {tr('atheletebridge.pages.teamDetail.schedule', 'Schedule')}\n </button>\n </div>\n </div>\n {fixtures.length === 0 ? (\n <EmptyState\n illustration=\"empty-calendar\"\n icon={<CalendarDays className=\"h-10 w-10\" />}\n title={tr('atheletebridge.pages.teamDetail.noFixturesTitle', 'No fixtures scheduled')}\n description={tr(\n 'atheletebridge.pages.teamDetail.noFixturesHint',\n 'Schedule a match for this team to start tracking results.'\n )}\n />\n ) : (\n <GlassCard treatment=\"insight\" className=\"px-4 py-1\">\n <div className=\"divide-y divide-border-seam\">\n {fixtures.map((f) => (\n <MatchupRow\n key={f.id}\n fixture={f}\n onClick={() => navigateTo(`/fixtures/${f.id}`)}\n />\n ))}\n </div>\n </GlassCard>\n )}\n </section>\n\n {/* AI programs generated for this team (BOFF-3574) */}\n <SubjectDecisions className=\"mt-8\" subject={{ kind: 'team', teamId: t.id }} />\n\n {/* Delete member confirmation (BOFF-7617) */}\n <ResponsiveDialog\n open={deleteTarget !== null}\n onOpenChange={(open) => {\n if (!open && !removeMember.isPending) setDeleteTarget(null);\n }}\n >\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>\n {tr('atheletebridge.pages.teamDetail.deleteMemberTitle', 'Delete player?')}\n </ResponsiveDialogTitle>\n </ResponsiveDialogHeader>\n <p className=\"px-1 text-sm text-text-secondary\">\n {tr(\n 'atheletebridge.pages.teamDetail.deleteMemberMessage',\n 'This will remove \"{name}\" from {team}. This action cannot be undone.'\n )\n .replace('{name}', deleteTarget?.displayName ?? '')\n .replace('{team}', t.name)}\n </p>\n <ResponsiveDialogFooter>\n <button\n type=\"button\"\n onClick={() => setDeleteTarget(null)}\n disabled={removeMember.isPending}\n className=\"rounded-lg border border-border-seam px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:opacity-60\"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n <button\n type=\"button\"\n onClick={() => void confirmDeleteMember()}\n disabled={removeMember.isPending}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-action-danger-bg px-4 py-2 text-sm font-semibold text-action-danger-text transition-colors hover:bg-action-danger-bgHover disabled:opacity-60\"\n >\n {removeMember.isPending && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {tr('common.delete', 'Delete')}\n </button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Add member dialog */}\n <ResponsiveDialog open={addOpen} onOpenChange={setAddOpen}>\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>\n {tr('atheletebridge.pages.teamDetail.addMember', 'Add member')}\n </ResponsiveDialogTitle>\n </ResponsiveDialogHeader>\n <form onSubmit={handleAddMember} className=\"space-y-4 px-1\">\n <UserSearchSelect\n userId={memberForm.userId}\n displayName={memberForm.displayName}\n onSelect={({ userId, displayName }) =>\n setMemberForm((p) => ({ ...p, userId, displayName: displayName || p.displayName }))\n }\n required\n />\n <FormField label=\"Display name\" htmlFor=\"displayName\" required>\n <input\n id=\"displayName\"\n className={fieldInputClass}\n value={memberForm.displayName}\n onChange={(e) => setMemberForm((p) => ({ ...p, displayName: e.target.value }))}\n placeholder=\"e.g. Alex Morgan\"\n />\n </FormField>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Role\" htmlFor=\"role\">\n <select\n id=\"role\"\n className={fieldInputClass}\n value={memberForm.role}\n onChange={(e) =>\n setMemberForm((p) => ({ ...p, role: e.target.value as AthMemberRole }))\n }\n >\n {ROLES.map((r) => (\n <option key={r} value={r}>\n {MEMBER_ROLE_LABELS[r]}\n </option>\n ))}\n </select>\n </FormField>\n <FormField label=\"Status\" htmlFor=\"memberStatus\">\n <select\n id=\"memberStatus\"\n className={fieldInputClass}\n value={memberForm.status}\n onChange={(e) =>\n setMemberForm((p) => ({ ...p, status: e.target.value as AthMemberStatus }))\n }\n >\n {MEMBER_STATUSES.map((s) => (\n <option key={s} value={s}>\n {memberStatusLabel(s)}\n </option>\n ))}\n </select>\n </FormField>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Position\" htmlFor=\"position\">\n <input\n id=\"position\"\n className={fieldInputClass}\n value={memberForm.position}\n onChange={(e) => setMemberForm((p) => ({ ...p, position: e.target.value }))}\n placeholder=\"e.g. Striker\"\n />\n </FormField>\n <FormField label=\"Jersey #\" htmlFor=\"jersey\">\n <input\n id=\"jersey\"\n className={fieldInputClass}\n inputMode=\"numeric\"\n value={memberForm.jerseyNumber}\n onChange={(e) => setMemberForm((p) => ({ ...p, jerseyNumber: e.target.value }))}\n placeholder=\"9\"\n />\n </FormField>\n </div>\n {memberError && <p className=\"text-sm text-status-error-text\">{memberError}</p>}\n <ResponsiveDialogFooter>\n <button\n type=\"button\"\n onClick={() => setAddOpen(false)}\n className=\"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 {tr('common.cancel', 'Cancel')}\n </button>\n <button\n type=\"submit\"\n disabled={addMember.isPending}\n 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\"\n >\n {addMember.isPending && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {tr('atheletebridge.pages.teamDetail.addMember', 'Add member')}\n </button>\n </ResponsiveDialogFooter>\n </form>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -548,6 +548,19 @@ export interface AthRecordResultInput {
548
548
  penaltyHomeScore?: number;
549
549
  penaltyAwayScore?: number;
550
550
  }
551
+ export interface AthUpdateFixtureInput {
552
+ type?: AthFixtureType;
553
+ competition?: string;
554
+ round?: string;
555
+ venue?: string;
556
+ scheduledAt?: string;
557
+ kickoffAt?: string;
558
+ notes?: string;
559
+ }
560
+ export interface AthPostponeFixtureInput {
561
+ scheduledAt: string;
562
+ kickoffAt?: string;
563
+ }
551
564
  /**
552
565
  * A record-result payload that is actually complete.
553
566
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAM5C;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC,+BAA+B;IAC/B,WAAW,CAAC,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IAEF,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,MAAM,IAAI,CAAC;IAE9D,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,KAAK,MAAM,IAAI,CAAC;IAEvE,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC,0CAA0C;IAC1C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAMvC,MAAM,MAAM,QAAQ,GAClB,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEpG,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,aAAa,GACvB,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AAExF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9F,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAExF,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjG,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnE,MAAM,MAAM,aAAa,GACvB,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAMnG,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAIzB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGhC,gBAAgB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,sBAAsB,CAAC;IACpC,WAAW,EAAE,sBAAsB,CAAC;IACpC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC;AAE7E,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAQD,wEAAwE;AACxE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEvD,kDAAkD;AAClD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAElE,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;AAEhF,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,0EAA0E;AAC1E,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qDAAqD;AACrD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAMD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,sBAAsB,GAC9B;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GACD;IAAE,gBAAgB,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -4,7 +4,14 @@ function e(e) {
4
4
  let t = new Date(e);
5
5
  return Number.isNaN(t.getTime()) ? void 0 : t.toISOString();
6
6
  }
7
+ function t(e) {
8
+ if (!e) return "";
9
+ let t = new Date(e);
10
+ if (Number.isNaN(t.getTime())) return "";
11
+ let n = (e) => String(e).padStart(2, "0");
12
+ return `${t.getFullYear()}-${n(t.getMonth() + 1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`;
13
+ }
7
14
  //#endregion
8
- export { e as toIsoOrUndefined };
15
+ export { t as isoToLocalInput, e as toIsoOrUndefined };
9
16
 
10
17
  //# sourceMappingURL=datetime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datetime.js","names":[],"sources":["../../../src/atheletebridge/utils/datetime.ts"],"sourcesContent":["/**\n * Datetime helpers for form inputs\n * @module atheletebridge/utils/datetime\n */\n\n/**\n * Convert a `datetime-local` input value to an ISO string, or undefined when\n * the value is empty. Returns undefined for unparseable values so callers never\n * send \"Invalid Date\" to the API.\n */\nexport function toIsoOrUndefined(value: string): string | undefined {\n if (!value) return undefined;\n const d = new Date(value);\n return Number.isNaN(d.getTime()) ? undefined : d.toISOString();\n}\n\n/**\n * Convert an ISO datetime string into the `datetime-local` input format\n * (`YYYY-MM-DDTHH:mm`) in the browser's local timezone.\n */\nexport function isoToLocalInput(iso: string | null | undefined): string {\n if (!iso) return '';\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return '';\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(\n d.getHours()\n )}:${pad(d.getMinutes())}`;\n}\n"],"mappings":";AAUA,SAAgB,EAAiB,GAAmC;CAClE,IAAI,CAAC,GAAO;CACZ,IAAM,IAAI,IAAI,KAAK,CAAK;CACxB,OAAO,OAAO,MAAM,EAAE,QAAQ,CAAC,IAAI,KAAA,IAAY,EAAE,YAAY;AAC/D"}
1
+ {"version":3,"file":"datetime.js","names":[],"sources":["../../../src/atheletebridge/utils/datetime.ts"],"sourcesContent":["/**\n * Datetime helpers for form inputs\n * @module atheletebridge/utils/datetime\n */\n\n/**\n * Convert a `datetime-local` input value to an ISO string, or undefined when\n * the value is empty. Returns undefined for unparseable values so callers never\n * send \"Invalid Date\" to the API.\n */\nexport function toIsoOrUndefined(value: string): string | undefined {\n if (!value) return undefined;\n const d = new Date(value);\n return Number.isNaN(d.getTime()) ? undefined : d.toISOString();\n}\n\n/**\n * Convert an ISO datetime string into the `datetime-local` input format\n * (`YYYY-MM-DDTHH:mm`) in the browser's local timezone.\n */\nexport function isoToLocalInput(iso: string | null | undefined): string {\n if (!iso) return '';\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return '';\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(\n d.getHours()\n )}:${pad(d.getMinutes())}`;\n}\n"],"mappings":";AAUA,SAAgB,EAAiB,GAAmC;CAClE,IAAI,CAAC,GAAO;CACZ,IAAM,IAAI,IAAI,KAAK,CAAK;CACxB,OAAO,OAAO,MAAM,EAAE,QAAQ,CAAC,IAAI,KAAA,IAAY,EAAE,YAAY;AAC/D;AAMA,SAAgB,EAAgB,GAAwC;CACtE,IAAI,CAAC,GAAK,OAAO;CACjB,IAAM,IAAI,IAAI,KAAK,CAAG;CACtB,IAAI,OAAO,MAAM,EAAE,QAAQ,CAAC,GAAG,OAAO;CACtC,IAAM,KAAO,MAAc,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;CACpD,OAAO,GAAG,EAAE,YAAY,EAAE,GAAG,EAAI,EAAE,SAAS,IAAI,CAAC,EAAE,GAAG,EAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,EACxE,EAAE,SAAS,CACb,EAAE,GAAG,EAAI,EAAE,WAAW,CAAC;AACzB"}
@@ -0,0 +1,38 @@
1
+ import { AthFixtureStatus } from '../types';
2
+
3
+ export interface FixtureLifecycleActions {
4
+ canReschedule: boolean;
5
+ canPostpone: boolean;
6
+ canCancel: boolean;
7
+ }
8
+ /**
9
+ * Which lifecycle actions a fixture in `status` offers. Rescheduling a
10
+ * POSTPONED fixture returns it to SCHEDULED; only SCHEDULED or LIVE fixtures
11
+ * can be postponed; anything not yet final can be cancelled. COMPLETED and
12
+ * CANCELLED are terminal and offer nothing.
13
+ */
14
+ export declare function getFixtureLifecycleActions(status: AthFixtureStatus): FixtureLifecycleActions;
15
+ export interface ScheduleInput {
16
+ scheduledAt: string;
17
+ kickoffAt?: string;
18
+ }
19
+ /**
20
+ * Build the mutation input from the dialog's `datetime-local` values, or null
21
+ * when no valid schedule was picked (the caller shows a validation toast
22
+ * instead of calling the API).
23
+ */
24
+ export declare function buildScheduleInput(scheduledAtInput: string, kickoffAtInput: string): ScheduleInput | null;
25
+ /**
26
+ * Initial dialog values. The kickoff belongs to the schedule being replaced,
27
+ * so it is only carried over while it is still in the future — a past or
28
+ * stale kickoff would be rejected by the backend (or, for a postponement,
29
+ * pin the fixture to its old kickoff). Postponing starts from a blank kickoff.
30
+ */
31
+ export declare function initialScheduleInputs(kind: 'reschedule' | 'postpone', fixture: {
32
+ scheduledAt?: string | null;
33
+ kickoffAt?: string | null;
34
+ }, now?: number): {
35
+ scheduledAtInput: string;
36
+ kickoffAtInput: string;
37
+ };
38
+ //# sourceMappingURL=fixtureLifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtureLifecycle.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/fixtureLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gBAAgB,GAAG,uBAAuB,CAK5F;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,GACrB,aAAa,GAAG,IAAI,CAKtB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,GAAG,UAAU,EAC/B,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACnE,GAAG,GAAE,MAAmB,GACvB;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAOtD"}
@@ -0,0 +1,30 @@
1
+ import { isoToLocalInput as e, toIsoOrUndefined as t } from "./datetime.js";
2
+ //#region src/atheletebridge/utils/fixtureLifecycle.ts
3
+ function n(e) {
4
+ let t = e === "SCHEDULED" || e === "POSTPONED";
5
+ return {
6
+ canReschedule: t,
7
+ canPostpone: e === "SCHEDULED" || e === "LIVE",
8
+ canCancel: t || e === "LIVE"
9
+ };
10
+ }
11
+ function r(e, n) {
12
+ let r = t(e);
13
+ if (!r) return null;
14
+ let i = t(n);
15
+ return i ? {
16
+ scheduledAt: r,
17
+ kickoffAt: i
18
+ } : { scheduledAt: r };
19
+ }
20
+ function i(t, n, r = Date.now()) {
21
+ let i = n.kickoffAt ? new Date(n.kickoffAt).getTime() : NaN, a = t === "reschedule" && Number.isFinite(i) && i > r;
22
+ return {
23
+ scheduledAtInput: e(n.scheduledAt),
24
+ kickoffAtInput: a ? e(n.kickoffAt) : ""
25
+ };
26
+ }
27
+ //#endregion
28
+ export { r as buildScheduleInput, n as getFixtureLifecycleActions, i as initialScheduleInputs };
29
+
30
+ //# sourceMappingURL=fixtureLifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtureLifecycle.js","names":[],"sources":["../../../src/atheletebridge/utils/fixtureLifecycle.ts"],"sourcesContent":["/**\n * Fixture lifecycle rules for the detail page (BOFF-7642).\n *\n * These mirror the backend guards in `wspace-atheletebridge-svc`\n * (`updateFixture` / `postponeFixture` / `cancelFixture`). The backend is the\n * authority — it rejects an invalid transition regardless of what the UI\n * offers — this only keeps the page from showing actions that cannot succeed.\n * @module atheletebridge/utils/fixtureLifecycle\n */\n\nimport type { AthFixtureStatus } from '../types';\nimport { isoToLocalInput, toIsoOrUndefined } from './datetime';\n\nexport interface FixtureLifecycleActions {\n canReschedule: boolean;\n canPostpone: boolean;\n canCancel: boolean;\n}\n\n/**\n * Which lifecycle actions a fixture in `status` offers. Rescheduling a\n * POSTPONED fixture returns it to SCHEDULED; only SCHEDULED or LIVE fixtures\n * can be postponed; anything not yet final can be cancelled. COMPLETED and\n * CANCELLED are terminal and offer nothing.\n */\nexport function getFixtureLifecycleActions(status: AthFixtureStatus): FixtureLifecycleActions {\n const canReschedule = status === 'SCHEDULED' || status === 'POSTPONED';\n const canPostpone = status === 'SCHEDULED' || status === 'LIVE';\n const canCancel = canReschedule || status === 'LIVE';\n return { canReschedule, canPostpone, canCancel };\n}\n\nexport interface ScheduleInput {\n scheduledAt: string;\n kickoffAt?: string;\n}\n\n/**\n * Build the mutation input from the dialog's `datetime-local` values, or null\n * when no valid schedule was picked (the caller shows a validation toast\n * instead of calling the API).\n */\nexport function buildScheduleInput(\n scheduledAtInput: string,\n kickoffAtInput: string\n): ScheduleInput | null {\n const scheduledAt = toIsoOrUndefined(scheduledAtInput);\n if (!scheduledAt) return null;\n const kickoffAt = toIsoOrUndefined(kickoffAtInput);\n return kickoffAt ? { scheduledAt, kickoffAt } : { scheduledAt };\n}\n\n/**\n * Initial dialog values. The kickoff belongs to the schedule being replaced,\n * so it is only carried over while it is still in the future — a past or\n * stale kickoff would be rejected by the backend (or, for a postponement,\n * pin the fixture to its old kickoff). Postponing starts from a blank kickoff.\n */\nexport function initialScheduleInputs(\n kind: 'reschedule' | 'postpone',\n fixture: { scheduledAt?: string | null; kickoffAt?: string | null },\n now: number = Date.now()\n): { scheduledAtInput: string; kickoffAtInput: string } {\n const kickoff = fixture.kickoffAt ? new Date(fixture.kickoffAt).getTime() : NaN;\n const keepKickoff = kind === 'reschedule' && Number.isFinite(kickoff) && kickoff > now;\n return {\n scheduledAtInput: isoToLocalInput(fixture.scheduledAt),\n kickoffAtInput: keepKickoff ? isoToLocalInput(fixture.kickoffAt) : '',\n };\n}\n"],"mappings":";;AAyBA,SAAgB,EAA2B,GAAmD;CAC5F,IAAM,IAAgB,MAAW,eAAe,MAAW;CAG3D,OAAO;EAAE;EAAe,aAFJ,MAAW,eAAe,MAAW;EAEpB,WADnB,KAAiB,MAAW;CACC;AACjD;AAYA,SAAgB,EACd,GACA,GACsB;CACtB,IAAM,IAAc,EAAiB,CAAgB;CACrD,IAAI,CAAC,GAAa,OAAO;CACzB,IAAM,IAAY,EAAiB,CAAc;CACjD,OAAO,IAAY;EAAE;EAAa;CAAU,IAAI,EAAE,eAAY;AAChE;AAQA,SAAgB,EACd,GACA,GACA,IAAc,KAAK,IAAI,GAC+B;CACtD,IAAM,IAAU,EAAQ,YAAY,IAAI,KAAK,EAAQ,SAAS,EAAE,QAAQ,IAAI,KACtE,IAAc,MAAS,gBAAgB,OAAO,SAAS,CAAO,KAAK,IAAU;CACnF,OAAO;EACL,kBAAkB,EAAgB,EAAQ,WAAW;EACrD,gBAAgB,IAAc,EAAgB,EAAQ,SAAS,IAAI;CACrE;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-atheletebridge",
3
- "version": "2026.1102.1",
3
+ "version": "2026.1103.2",
4
4
  "description": "Burdenoff AthleteBridge Microfrontend - Sports, coaching & training platform for teams, fixtures, programs, sessions and athlete performance",
5
5
  "type": "module",
6
6
  "files": [