@burdenoff/microfe-atheletebridge 2026.625.2 → 2026.628.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.
Files changed (162) hide show
  1. package/dist/atheletebridge/AthleteBridgeRoot.js +49 -129
  2. package/dist/atheletebridge/AthleteBridgeRoot.js.map +1 -1
  3. package/dist/atheletebridge/AthleteBridgeRoutes.js +65 -184
  4. package/dist/atheletebridge/AthleteBridgeRoutes.js.map +1 -1
  5. package/dist/atheletebridge/components/CursorPager.js +34 -0
  6. package/dist/atheletebridge/components/CursorPager.js.map +1 -0
  7. package/dist/atheletebridge/components/FilterSelect.js +22 -0
  8. package/dist/atheletebridge/components/FilterSelect.js.map +1 -0
  9. package/dist/atheletebridge/components/FixtureCard.js +76 -0
  10. package/dist/atheletebridge/components/FixtureCard.js.map +1 -0
  11. package/dist/atheletebridge/components/LoadingState.js +36 -0
  12. package/dist/atheletebridge/components/LoadingState.js.map +1 -0
  13. package/dist/atheletebridge/components/ProgramCard.js +69 -0
  14. package/dist/atheletebridge/components/ProgramCard.js.map +1 -0
  15. package/dist/atheletebridge/components/SessionCard.js +76 -0
  16. package/dist/atheletebridge/components/SessionCard.js.map +1 -0
  17. package/dist/atheletebridge/components/StatusBadge.js +44 -35
  18. package/dist/atheletebridge/components/StatusBadge.js.map +1 -1
  19. package/dist/atheletebridge/components/TeamCard.js +81 -0
  20. package/dist/atheletebridge/components/TeamCard.js.map +1 -0
  21. package/dist/atheletebridge/components/domain.js +47 -0
  22. package/dist/atheletebridge/components/domain.js.map +1 -0
  23. package/dist/atheletebridge/components/form.js +29 -0
  24. package/dist/atheletebridge/components/form.js.map +1 -0
  25. package/dist/atheletebridge/context/AthleteBridgeContext.js +6 -6
  26. package/dist/atheletebridge/context/AthleteBridgeContext.js.map +1 -1
  27. package/dist/atheletebridge/hooks/useAthleteBridgeApi.js +342 -165
  28. package/dist/atheletebridge/hooks/useAthleteBridgeApi.js.map +1 -1
  29. package/dist/atheletebridge/index.js +1 -1
  30. package/dist/atheletebridge/pages/DashboardPage.js +169 -0
  31. package/dist/atheletebridge/pages/DashboardPage.js.map +1 -0
  32. package/dist/atheletebridge/pages/StandingsPage.js +166 -0
  33. package/dist/atheletebridge/pages/StandingsPage.js.map +1 -0
  34. package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js +201 -0
  35. package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js.map +1 -0
  36. package/dist/atheletebridge/pages/fixtures/FixtureFormPage.js +205 -0
  37. package/dist/atheletebridge/pages/fixtures/FixtureFormPage.js.map +1 -0
  38. package/dist/atheletebridge/pages/fixtures/FixturesListPage.js +92 -0
  39. package/dist/atheletebridge/pages/fixtures/FixturesListPage.js.map +1 -0
  40. package/dist/atheletebridge/pages/programs/ProgramDetailPage.js +374 -0
  41. package/dist/atheletebridge/pages/programs/ProgramDetailPage.js.map +1 -0
  42. package/dist/atheletebridge/pages/programs/ProgramFormPage.js +207 -0
  43. package/dist/atheletebridge/pages/programs/ProgramFormPage.js.map +1 -0
  44. package/dist/atheletebridge/pages/programs/ProgramsListPage.js +113 -0
  45. package/dist/atheletebridge/pages/programs/ProgramsListPage.js.map +1 -0
  46. package/dist/atheletebridge/pages/sessions/SessionDetailPage.js +224 -0
  47. package/dist/atheletebridge/pages/sessions/SessionDetailPage.js.map +1 -0
  48. package/dist/atheletebridge/pages/sessions/SessionFormPage.js +206 -0
  49. package/dist/atheletebridge/pages/sessions/SessionFormPage.js.map +1 -0
  50. package/dist/atheletebridge/pages/sessions/SessionsListPage.js +92 -0
  51. package/dist/atheletebridge/pages/sessions/SessionsListPage.js.map +1 -0
  52. package/dist/atheletebridge/pages/teams/TeamDetailPage.js +350 -0
  53. package/dist/atheletebridge/pages/teams/TeamDetailPage.js.map +1 -0
  54. package/dist/atheletebridge/pages/teams/TeamFormPage.js +222 -0
  55. package/dist/atheletebridge/pages/teams/TeamFormPage.js.map +1 -0
  56. package/dist/atheletebridge/pages/teams/TeamsListPage.js +101 -0
  57. package/dist/atheletebridge/pages/teams/TeamsListPage.js.map +1 -0
  58. package/dist/atheletebridge/store/atheletebridgeStore.js +2 -13
  59. package/dist/atheletebridge/store/atheletebridgeStore.js.map +1 -1
  60. package/dist/atheletebridge/utils/datetime.js +10 -0
  61. package/dist/atheletebridge/utils/datetime.js.map +1 -0
  62. package/dist/atheletebridge/utils/formatters.js +1 -4
  63. package/dist/atheletebridge/utils/formatters.js.map +1 -1
  64. package/package.json +1 -1
  65. package/dist/atheletebridge/components/InvestmentCard.js +0 -96
  66. package/dist/atheletebridge/components/InvestmentCard.js.map +0 -1
  67. package/dist/atheletebridge/components/RatingDisplay.js +0 -35
  68. package/dist/atheletebridge/components/RatingDisplay.js.map +0 -1
  69. package/dist/atheletebridge/mocks/data.js +0 -1517
  70. package/dist/atheletebridge/mocks/data.js.map +0 -1
  71. package/dist/atheletebridge/mocks/users.js +0 -34
  72. package/dist/atheletebridge/mocks/users.js.map +0 -1
  73. package/dist/atheletebridge/pages/HomePage.js +0 -936
  74. package/dist/atheletebridge/pages/HomePage.js.map +0 -1
  75. package/dist/atheletebridge/pages/admin/AdminAnalyticsPage.js +0 -653
  76. package/dist/atheletebridge/pages/admin/AdminAnalyticsPage.js.map +0 -1
  77. package/dist/atheletebridge/pages/admin/AdminDashboard.js +0 -671
  78. package/dist/atheletebridge/pages/admin/AdminDashboard.js.map +0 -1
  79. package/dist/atheletebridge/pages/admin/AdminFinancialPage.js +0 -429
  80. package/dist/atheletebridge/pages/admin/AdminFinancialPage.js.map +0 -1
  81. package/dist/atheletebridge/pages/admin/AdminOrdersPage.js +0 -667
  82. package/dist/atheletebridge/pages/admin/AdminOrdersPage.js.map +0 -1
  83. package/dist/atheletebridge/pages/admin/AdminProfilePage.js +0 -261
  84. package/dist/atheletebridge/pages/admin/AdminProfilePage.js.map +0 -1
  85. package/dist/atheletebridge/pages/admin/AdminSettingsPage.js +0 -653
  86. package/dist/atheletebridge/pages/admin/AdminSettingsPage.js.map +0 -1
  87. package/dist/atheletebridge/pages/admin/CartManagementPage.js +0 -876
  88. package/dist/atheletebridge/pages/admin/CartManagementPage.js.map +0 -1
  89. package/dist/atheletebridge/pages/admin/UserManagementPage.js +0 -900
  90. package/dist/atheletebridge/pages/admin/UserManagementPage.js.map +0 -1
  91. package/dist/atheletebridge/pages/cart-owner/AnalyticsDashboard.js +0 -839
  92. package/dist/atheletebridge/pages/cart-owner/AnalyticsDashboard.js.map +0 -1
  93. package/dist/atheletebridge/pages/cart-owner/BusinessSettingsPage.js +0 -704
  94. package/dist/atheletebridge/pages/cart-owner/BusinessSettingsPage.js.map +0 -1
  95. package/dist/atheletebridge/pages/cart-owner/CartOwnerDashboard.js +0 -792
  96. package/dist/atheletebridge/pages/cart-owner/CartOwnerDashboard.js.map +0 -1
  97. package/dist/atheletebridge/pages/cart-owner/CartOwnerProfilePage.js +0 -891
  98. package/dist/atheletebridge/pages/cart-owner/CartOwnerProfilePage.js.map +0 -1
  99. package/dist/atheletebridge/pages/cart-owner/CartServiceConfigPage.js +0 -633
  100. package/dist/atheletebridge/pages/cart-owner/CartServiceConfigPage.js.map +0 -1
  101. package/dist/atheletebridge/pages/cart-owner/InventoryManagementPage.js +0 -913
  102. package/dist/atheletebridge/pages/cart-owner/InventoryManagementPage.js.map +0 -1
  103. package/dist/atheletebridge/pages/cart-owner/OrderManagementPage.js +0 -881
  104. package/dist/atheletebridge/pages/cart-owner/OrderManagementPage.js.map +0 -1
  105. package/dist/atheletebridge/pages/cart-owner/StaffManagementPage.js +0 -841
  106. package/dist/atheletebridge/pages/cart-owner/StaffManagementPage.js.map +0 -1
  107. package/dist/atheletebridge/pages/common/HelpSupportPage.js +0 -1319
  108. package/dist/atheletebridge/pages/common/HelpSupportPage.js.map +0 -1
  109. package/dist/atheletebridge/pages/common/NotificationCenterPage.js +0 -674
  110. package/dist/atheletebridge/pages/common/NotificationCenterPage.js.map +0 -1
  111. package/dist/atheletebridge/pages/common/SettingsPage.js +0 -972
  112. package/dist/atheletebridge/pages/common/SettingsPage.js.map +0 -1
  113. package/dist/atheletebridge/pages/customer/BookingDetailsPage.js +0 -602
  114. package/dist/atheletebridge/pages/customer/BookingDetailsPage.js.map +0 -1
  115. package/dist/atheletebridge/pages/customer/CartDetailPage.js +0 -656
  116. package/dist/atheletebridge/pages/customer/CartDetailPage.js.map +0 -1
  117. package/dist/atheletebridge/pages/customer/CartDiscoveryPage.js +0 -558
  118. package/dist/atheletebridge/pages/customer/CartDiscoveryPage.js.map +0 -1
  119. package/dist/atheletebridge/pages/customer/CheckoutPage.js +0 -536
  120. package/dist/atheletebridge/pages/customer/CheckoutPage.js.map +0 -1
  121. package/dist/atheletebridge/pages/customer/CustomerDashboard.js +0 -539
  122. package/dist/atheletebridge/pages/customer/CustomerDashboard.js.map +0 -1
  123. package/dist/atheletebridge/pages/customer/CustomerProfilePage.js +0 -657
  124. package/dist/atheletebridge/pages/customer/CustomerProfilePage.js.map +0 -1
  125. package/dist/atheletebridge/pages/customer/DirectServiceBookingPage.js +0 -635
  126. package/dist/atheletebridge/pages/customer/DirectServiceBookingPage.js.map +0 -1
  127. package/dist/atheletebridge/pages/customer/FavoritesPage.js +0 -486
  128. package/dist/atheletebridge/pages/customer/FavoritesPage.js.map +0 -1
  129. package/dist/atheletebridge/pages/customer/OrderHistoryPage.js +0 -447
  130. package/dist/atheletebridge/pages/customer/OrderHistoryPage.js.map +0 -1
  131. package/dist/atheletebridge/pages/customer/OrderTrackingPage.js +0 -393
  132. package/dist/atheletebridge/pages/customer/OrderTrackingPage.js.map +0 -1
  133. package/dist/atheletebridge/pages/customer/PaymentMethodsPage.js +0 -494
  134. package/dist/atheletebridge/pages/customer/PaymentMethodsPage.js.map +0 -1
  135. package/dist/atheletebridge/pages/customer/ReviewsPage.js +0 -615
  136. package/dist/atheletebridge/pages/customer/ReviewsPage.js.map +0 -1
  137. package/dist/atheletebridge/pages/customer/SavedAddressesPage.js +0 -451
  138. package/dist/atheletebridge/pages/customer/SavedAddressesPage.js.map +0 -1
  139. package/dist/atheletebridge/pages/investor/InvestmentDetailsPage.js +0 -881
  140. package/dist/atheletebridge/pages/investor/InvestmentDetailsPage.js.map +0 -1
  141. package/dist/atheletebridge/pages/investor/InvestmentOpportunitiesPage.js +0 -945
  142. package/dist/atheletebridge/pages/investor/InvestmentOpportunitiesPage.js.map +0 -1
  143. package/dist/atheletebridge/pages/investor/InvestorAnalyticsPage.js +0 -686
  144. package/dist/atheletebridge/pages/investor/InvestorAnalyticsPage.js.map +0 -1
  145. package/dist/atheletebridge/pages/investor/InvestorDashboard.js +0 -453
  146. package/dist/atheletebridge/pages/investor/InvestorDashboard.js.map +0 -1
  147. package/dist/atheletebridge/pages/investor/InvestorInvestmentsPage.js +0 -405
  148. package/dist/atheletebridge/pages/investor/InvestorInvestmentsPage.js.map +0 -1
  149. package/dist/atheletebridge/pages/investor/InvestorPortfolioPage.js +0 -577
  150. package/dist/atheletebridge/pages/investor/InvestorPortfolioPage.js.map +0 -1
  151. package/dist/atheletebridge/pages/investor/InvestorProfilePage.js +0 -1069
  152. package/dist/atheletebridge/pages/investor/InvestorProfilePage.js.map +0 -1
  153. package/dist/atheletebridge/pages/worker/TaskDetailsPage.js +0 -530
  154. package/dist/atheletebridge/pages/worker/TaskDetailsPage.js.map +0 -1
  155. package/dist/atheletebridge/pages/worker/WorkerDashboard.js +0 -669
  156. package/dist/atheletebridge/pages/worker/WorkerDashboard.js.map +0 -1
  157. package/dist/atheletebridge/pages/worker/WorkerOrdersPage.js +0 -681
  158. package/dist/atheletebridge/pages/worker/WorkerOrdersPage.js.map +0 -1
  159. package/dist/atheletebridge/pages/worker/WorkerProfilePage.js +0 -691
  160. package/dist/atheletebridge/pages/worker/WorkerProfilePage.js.map +0 -1
  161. package/dist/atheletebridge/pages/worker/WorkerSchedulePage.js +0 -588
  162. package/dist/atheletebridge/pages/worker/WorkerSchedulePage.js.map +0 -1
@@ -0,0 +1,34 @@
1
+ import { cn as e } from "../utils/cn.js";
2
+ import { ChevronLeft as t, ChevronRight as n } from "lucide-react";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ //#region src/atheletebridge/components/CursorPager.tsx
5
+ var a = ({ page: a, hasMore: o, onPrev: s, onNext: c, className: l }) => {
6
+ let u = a > 0;
7
+ return !u && !o ? null : /* @__PURE__ */ i("div", {
8
+ className: e("flex items-center justify-end gap-2", l),
9
+ children: [
10
+ /* @__PURE__ */ i("button", {
11
+ type: "button",
12
+ onClick: s,
13
+ disabled: !u,
14
+ className: "inline-flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-50",
15
+ children: [/* @__PURE__ */ r(t, { className: "h-4 w-4" }), " Previous"]
16
+ }),
17
+ /* @__PURE__ */ i("span", {
18
+ className: "px-2 text-sm tabular-nums text-text-secondary",
19
+ children: ["Page ", a + 1]
20
+ }),
21
+ /* @__PURE__ */ i("button", {
22
+ type: "button",
23
+ onClick: c,
24
+ disabled: !o,
25
+ className: "inline-flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-50",
26
+ children: ["Next ", /* @__PURE__ */ r(n, { className: "h-4 w-4" })]
27
+ })
28
+ ]
29
+ });
30
+ };
31
+ //#endregion
32
+ export { a as CursorPager };
33
+
34
+ //# sourceMappingURL=CursorPager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CursorPager.js","names":[],"sources":["../../../src/atheletebridge/components/CursorPager.tsx"],"sourcesContent":["/**\n * Cursor Pager\n * @module atheletebridge/components\n *\n * Offset-based pager driving the svc PaginationInput. The svc connections\n * expose `pageInfo.hasMore`; combined with the page index this yields a calm\n * prev/next control. Tokens only, no movement.\n */\n\nimport type { FC } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../utils/cn';\n\ninterface CursorPagerProps {\n page: number;\n hasMore: boolean;\n onPrev: () => void;\n onNext: () => void;\n className?: string;\n}\n\nexport const CursorPager: FC<CursorPagerProps> = ({ page, hasMore, onPrev, onNext, className }) => {\n const canPrev = page > 0;\n\n if (!canPrev && !hasMore) return null;\n\n return (\n <div className={cn('flex items-center justify-end gap-2', className)}>\n <button\n type=\"button\"\n onClick={onPrev}\n disabled={!canPrev}\n className=\"inline-flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <ChevronLeft className=\"h-4 w-4\" /> Previous\n </button>\n <span className=\"px-2 text-sm tabular-nums text-text-secondary\">Page {page + 1}</span>\n <button\n type=\"button\"\n onClick={onNext}\n disabled={!hasMore}\n className=\"inline-flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-50\"\n >\n Next <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n );\n};\n"],"mappings":";;;;AAqBA,IAAa,KAAqC,EAAE,SAAM,YAAS,WAAQ,WAAQ,mBAAgB;CACjG,IAAM,IAAU,IAAO;AAIvB,QAFI,CAAC,KAAW,CAAC,IAAgB,OAG/B,kBAAC,OAAD;EAAK,WAAW,EAAG,uCAAuC,EAAU;YAApE;GACE,kBAAC,UAAD;IACE,MAAK;IACL,SAAS;IACT,UAAU,CAAC;IACX,WAAU;cAJZ,CAME,kBAAC,GAAD,EAAa,WAAU,WAAY,CAAA,EAAA,YAC5B;;GACT,kBAAC,QAAD;IAAM,WAAU;cAAhB,CAAgE,SAAM,IAAO,EAAS;;GACtF,kBAAC,UAAD;IACE,MAAK;IACL,SAAS;IACT,UAAU,CAAC;IACX,WAAU;cAJZ,CAKC,SACM,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,CAClC;;GACL"}
@@ -0,0 +1,22 @@
1
+ import { cn as e } from "../utils/cn.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/atheletebridge/components/FilterSelect.tsx
4
+ function r({ value: r, onChange: i, options: a, allLabel: o, ariaLabel: s, className: c }) {
5
+ return /* @__PURE__ */ n("select", {
6
+ "aria-label": s,
7
+ value: r,
8
+ onChange: (e) => i(e.target.value),
9
+ className: e("rounded-lg border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary", "focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]", c),
10
+ children: [/* @__PURE__ */ t("option", {
11
+ value: "",
12
+ children: o
13
+ }), a.map((e) => /* @__PURE__ */ t("option", {
14
+ value: e.value,
15
+ children: e.label
16
+ }, e.value))]
17
+ });
18
+ }
19
+ //#endregion
20
+ export { r as FilterSelect };
21
+
22
+ //# sourceMappingURL=FilterSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterSelect.js","names":[],"sources":["../../../src/atheletebridge/components/FilterSelect.tsx"],"sourcesContent":["/**\n * Filter Select\n * @module atheletebridge/components\n *\n * A small, accessible native-select filter styled with semantic tokens.\n * Generic over the option value type so callers stay strictly typed.\n */\n\nimport { cn } from '../utils/cn';\n\nexport interface FilterOption<T extends string> {\n value: T;\n label: string;\n}\n\ninterface FilterSelectProps<T extends string> {\n value: T | '';\n onChange: (value: T | '') => void;\n options: ReadonlyArray<FilterOption<T>>;\n /** Label shown for the \"no filter\" option. */\n allLabel: string;\n ariaLabel: string;\n className?: string;\n}\n\nexport function FilterSelect<T extends string>({\n value,\n onChange,\n options,\n allLabel,\n ariaLabel,\n className,\n}: FilterSelectProps<T>) {\n return (\n <select\n aria-label={ariaLabel}\n value={value}\n onChange={(e) => onChange(e.target.value as T | '')}\n className={cn(\n 'rounded-lg border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary',\n 'focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n className\n )}\n >\n <option value=\"\">{allLabel}</option>\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n}\n"],"mappings":";;;AAyBA,SAAgB,EAA+B,EAC7C,UACA,aACA,YACA,aACA,cACA,gBACuB;AACvB,QACE,kBAAC,UAAD;EACE,cAAY;EACL;EACP,WAAW,MAAM,EAAS,EAAE,OAAO,MAAgB;EACnD,WAAW,EACT,0FACA,wEACA,EACD;YARH,CAUE,kBAAC,UAAD;GAAQ,OAAM;aAAI;GAAkB,CAAA,EACnC,EAAQ,KAAK,MACZ,kBAAC,UAAD;GAAwB,OAAO,EAAI;aAChC,EAAI;GACE,EAFI,EAAI,MAER,CACT,CACK"}
@@ -0,0 +1,76 @@
1
+ import { cn as e } from "../utils/cn.js";
2
+ import { StatusBadge as t } from "./StatusBadge.js";
3
+ import { FIXTURE_TYPE_LABELS as n } from "./domain.js";
4
+ import { formatDate as r } from "../utils/formatters.js";
5
+ import { CalendarClock as i, MapPin as a } from "lucide-react";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ import { GlassCard as c } from "@burdenoff/fe-libs/ui";
8
+ //#region src/atheletebridge/components/FixtureCard.tsx
9
+ var l = ({ fixture: l, onClick: u }) => {
10
+ let d = l.homeTeam?.name ?? "Home", f = l.awayTeam?.name ?? (l.awayTeamId ? "Away" : "TBD"), p = l.homeScore !== null && l.awayScore !== null;
11
+ return /* @__PURE__ */ s(c, {
12
+ treatment: "metric",
13
+ role: "button",
14
+ tabIndex: 0,
15
+ onClick: u,
16
+ onKeyDown: (e) => {
17
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), u?.());
18
+ },
19
+ className: e("cursor-pointer p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]"),
20
+ children: [
21
+ /* @__PURE__ */ s("div", {
22
+ className: "flex items-center justify-between gap-3",
23
+ children: [/* @__PURE__ */ o("span", {
24
+ className: "inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary",
25
+ children: n[l.type]
26
+ }), /* @__PURE__ */ o(t, { status: l.status })]
27
+ }),
28
+ /* @__PURE__ */ s("div", {
29
+ className: "mt-4 flex items-center justify-between gap-3",
30
+ children: [
31
+ /* @__PURE__ */ o("span", {
32
+ className: "flex-1 truncate text-right text-sm font-semibold text-text-primary",
33
+ children: d
34
+ }),
35
+ /* @__PURE__ */ o("span", {
36
+ className: "shrink-0 rounded-lg bg-bg-sunken px-3 py-1 text-sm font-bold tabular-nums text-text-primary",
37
+ children: p ? `${l.homeScore} : ${l.awayScore}` : "vs"
38
+ }),
39
+ /* @__PURE__ */ o("span", {
40
+ className: "flex-1 truncate text-left text-sm font-semibold text-text-primary",
41
+ children: f
42
+ })
43
+ ]
44
+ }),
45
+ /* @__PURE__ */ s("div", {
46
+ className: "mt-4 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-text-secondary",
47
+ children: [
48
+ /* @__PURE__ */ s("span", {
49
+ className: "flex items-center gap-1",
50
+ children: [
51
+ /* @__PURE__ */ o(i, { className: "h-3.5 w-3.5" }),
52
+ " ",
53
+ r(l.scheduledAt)
54
+ ]
55
+ }),
56
+ l.venue && /* @__PURE__ */ s("span", {
57
+ className: "flex items-center gap-1 truncate",
58
+ children: [
59
+ /* @__PURE__ */ o(a, { className: "h-3.5 w-3.5 shrink-0" }),
60
+ " ",
61
+ l.venue
62
+ ]
63
+ }),
64
+ l.competition && /* @__PURE__ */ o("span", {
65
+ className: "truncate",
66
+ children: l.competition
67
+ })
68
+ ]
69
+ })
70
+ ]
71
+ });
72
+ };
73
+ //#endregion
74
+ export { l as FixtureCard };
75
+
76
+ //# sourceMappingURL=FixtureCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixtureCard.js","names":[],"sources":["../../../src/atheletebridge/components/FixtureCard.tsx"],"sourcesContent":["/**\n * Fixture Card\n * @module atheletebridge/components\n */\n\nimport type { FC } from 'react';\nimport { CalendarClock, MapPin } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { StatusBadge } from './StatusBadge';\nimport { FIXTURE_TYPE_LABELS } from './domain';\nimport { formatDate } from '../utils/formatters';\nimport { cn } from '../utils/cn';\nimport type { AthFixture } from '../types';\n\ninterface FixtureCardProps {\n fixture: AthFixture;\n onClick?: () => void;\n}\n\nexport const FixtureCard: FC<FixtureCardProps> = ({ fixture, onClick }) => {\n const homeName = fixture.homeTeam?.name ?? 'Home';\n const awayName = fixture.awayTeam?.name ?? (fixture.awayTeamId ? 'Away' : 'TBD');\n const hasScore = fixture.homeScore !== null && fixture.awayScore !== null;\n\n return (\n <GlassCard\n treatment=\"metric\"\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'cursor-pointer p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]'\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {FIXTURE_TYPE_LABELS[fixture.type]}\n </span>\n <StatusBadge status={fixture.status} />\n </div>\n\n <div className=\"mt-4 flex items-center justify-between gap-3\">\n <span className=\"flex-1 truncate text-right text-sm font-semibold text-text-primary\">\n {homeName}\n </span>\n <span className=\"shrink-0 rounded-lg bg-bg-sunken px-3 py-1 text-sm font-bold tabular-nums text-text-primary\">\n {hasScore ? `${fixture.homeScore} : ${fixture.awayScore}` : 'vs'}\n </span>\n <span className=\"flex-1 truncate text-left text-sm font-semibold text-text-primary\">\n {awayName}\n </span>\n </div>\n\n <div className=\"mt-4 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <CalendarClock className=\"h-3.5 w-3.5\" /> {formatDate(fixture.scheduledAt)}\n </span>\n {fixture.venue && (\n <span className=\"flex items-center gap-1 truncate\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0\" /> {fixture.venue}\n </span>\n )}\n {fixture.competition && (\n <span className=\"truncate\">{fixture.competition}</span>\n )}\n </div>\n </GlassCard>\n );\n};\n"],"mappings":";;;;;;;;AAmBA,IAAa,KAAqC,EAAE,YAAS,iBAAc;CACzE,IAAM,IAAW,EAAQ,UAAU,QAAQ,QACrC,IAAW,EAAQ,UAAU,SAAS,EAAQ,aAAa,SAAS,QACpE,IAAW,EAAQ,cAAc,QAAQ,EAAQ,cAAc;AAErE,QACE,kBAAC,GAAD;EACE,WAAU;EACV,MAAK;EACL,UAAU;EACD;EACT,YAAY,MAAM;AAChB,IAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,gBAAgB,EAClB,KAAW;;EAGf,WAAW,EACT,kHACD;YAbH;GAeE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,QAAD;KAAM,WAAU;eACb,EAAoB,EAAQ;KACxB,CAAA,EACP,kBAAC,GAAD,EAAa,QAAQ,EAAQ,QAAU,CAAA,CACnC;;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD;MAAM,WAAU;gBACb;MACI,CAAA;KACP,kBAAC,QAAD;MAAM,WAAU;gBACb,IAAW,GAAG,EAAQ,UAAU,KAAK,EAAQ,cAAc;MACvD,CAAA;KACP,kBAAC,QAAD;MAAM,WAAU;gBACb;MACI,CAAA;KACH;;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAe,WAAU,eAAgB,CAAA;;OAAE,EAAW,EAAQ,YAAY;OACrE;;KACN,EAAQ,SACP,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAQ,WAAU,wBAAyB,CAAA;;OAAE,EAAQ;OAChD;;KAER,EAAQ,eACP,kBAAC,QAAD;MAAM,WAAU;gBAAY,EAAQ;MAAmB,CAAA;KAErD;;GACI"}
@@ -0,0 +1,36 @@
1
+ import { cn as e } from "../utils/cn.js";
2
+ import { AlertCircle as t, Loader2 as n } from "lucide-react";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ //#region src/atheletebridge/components/LoadingState.tsx
5
+ var a = ({ label: t = "Loading…", className: a }) => /* @__PURE__ */ i("div", {
6
+ className: e("flex min-h-[40vh] flex-col items-center justify-center gap-3", a),
7
+ role: "status",
8
+ "aria-live": "polite",
9
+ children: [/* @__PURE__ */ r(n, { className: "h-8 w-8 animate-spin text-text-secondary" }), /* @__PURE__ */ r("p", {
10
+ className: "text-sm text-text-secondary",
11
+ children: t
12
+ })]
13
+ }), o = ({ title: n = "Something went wrong", message: a = "We could not load this data. Please try again.", onRetry: o, className: s }) => /* @__PURE__ */ i("div", {
14
+ className: e("flex min-h-[40vh] flex-col items-center justify-center gap-3 text-center", s),
15
+ children: [
16
+ /* @__PURE__ */ r(t, { className: "h-10 w-10 text-status-error-text" }),
17
+ /* @__PURE__ */ r("h3", {
18
+ className: "text-lg font-semibold text-text-primary",
19
+ children: n
20
+ }),
21
+ /* @__PURE__ */ r("p", {
22
+ className: "max-w-sm text-sm text-text-secondary",
23
+ children: a
24
+ }),
25
+ o && /* @__PURE__ */ r("button", {
26
+ type: "button",
27
+ onClick: o,
28
+ className: "mt-2 rounded-lg border border-border-seam px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken",
29
+ children: "Try again"
30
+ })
31
+ ]
32
+ });
33
+ //#endregion
34
+ export { o as ErrorState, a as LoadingState };
35
+
36
+ //# sourceMappingURL=LoadingState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingState.js","names":[],"sources":["../../../src/atheletebridge/components/LoadingState.tsx"],"sourcesContent":["/**\n * Loading / Error State Components\n * @module atheletebridge/components\n *\n * Small calm, centered states shared across list and detail pages.\n */\n\nimport type { FC } from 'react';\nimport { AlertCircle, Loader2 } from 'lucide-react';\nimport { cn } from '../utils/cn';\n\ninterface LoadingStateProps {\n label?: string;\n className?: string;\n}\n\nexport const LoadingState: FC<LoadingStateProps> = ({ label = 'Loading…', className }) => (\n <div\n className={cn('flex min-h-[40vh] flex-col items-center justify-center gap-3', className)}\n role=\"status\"\n aria-live=\"polite\"\n >\n <Loader2 className=\"h-8 w-8 animate-spin text-text-secondary\" />\n <p className=\"text-sm text-text-secondary\">{label}</p>\n </div>\n);\n\ninterface ErrorStateProps {\n title?: string;\n message?: string;\n onRetry?: () => void;\n className?: string;\n}\n\nexport const ErrorState: FC<ErrorStateProps> = ({\n title = 'Something went wrong',\n message = 'We could not load this data. Please try again.',\n onRetry,\n className,\n}) => (\n <div\n className={cn('flex min-h-[40vh] flex-col items-center justify-center gap-3 text-center', className)}\n >\n <AlertCircle className=\"h-10 w-10 text-status-error-text\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">{title}</h3>\n <p className=\"max-w-sm text-sm text-text-secondary\">{message}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-2 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 Try again\n </button>\n )}\n </div>\n);\n"],"mappings":";;;;AAgBA,IAAa,KAAuC,EAAE,WAAQ,YAAY,mBACxE,kBAAC,OAAD;CACE,WAAW,EAAG,gEAAgE,EAAU;CACxF,MAAK;CACL,aAAU;WAHZ,CAKE,kBAAC,GAAD,EAAS,WAAU,4CAA6C,CAAA,EAChE,kBAAC,KAAD;EAAG,WAAU;YAA+B;EAAU,CAAA,CAClD;IAUK,KAAmC,EAC9C,WAAQ,wBACR,aAAU,kDACV,YACA,mBAEA,kBAAC,OAAD;CACE,WAAW,EAAG,4EAA4E,EAAU;WADtG;EAGE,kBAAC,GAAD,EAAa,WAAU,oCAAqC,CAAA;EAC5D,kBAAC,MAAD;GAAI,WAAU;aAA2C;GAAW,CAAA;EACpE,kBAAC,KAAD;GAAG,WAAU;aAAwC;GAAY,CAAA;EAChE,KACC,kBAAC,UAAD;GACE,MAAK;GACL,SAAS;GACT,WAAU;aACX;GAEQ,CAAA;EAEP"}
@@ -0,0 +1,69 @@
1
+ import { cn as e } from "../utils/cn.js";
2
+ import { StatusBadge as t } from "./StatusBadge.js";
3
+ import { PROGRAM_LEVEL_LABELS as n, SPORT_ICONS as r, SPORT_LABELS as i } from "./domain.js";
4
+ import { CalendarRange as a, Copy as o } from "lucide-react";
5
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { GlassCard as l } from "@burdenoff/fe-libs/ui";
7
+ //#region src/atheletebridge/components/ProgramCard.tsx
8
+ var u = ({ program: u, onClick: d }) => {
9
+ let f = r[u.sport];
10
+ return /* @__PURE__ */ c(l, {
11
+ treatment: "metric",
12
+ role: "button",
13
+ tabIndex: 0,
14
+ onClick: d,
15
+ onKeyDown: (e) => {
16
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), d?.());
17
+ },
18
+ className: e("cursor-pointer p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]"),
19
+ children: [
20
+ /* @__PURE__ */ c("div", {
21
+ className: "flex items-start justify-between gap-3",
22
+ children: [/* @__PURE__ */ c("div", {
23
+ className: "flex items-center gap-3 min-w-0",
24
+ children: [/* @__PURE__ */ s("div", {
25
+ className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
26
+ children: /* @__PURE__ */ s(f, { className: "h-5 w-5" })
27
+ }), /* @__PURE__ */ c("div", {
28
+ className: "min-w-0",
29
+ children: [/* @__PURE__ */ s("h3", {
30
+ className: "truncate text-base font-semibold text-text-primary",
31
+ children: u.name
32
+ }), /* @__PURE__ */ c("p", {
33
+ className: "text-sm text-text-secondary",
34
+ children: [
35
+ i[u.sport],
36
+ " · ",
37
+ n[u.level]
38
+ ]
39
+ })]
40
+ })]
41
+ }), /* @__PURE__ */ s(t, { status: u.status })]
42
+ }),
43
+ u.summary && /* @__PURE__ */ s("p", {
44
+ className: "mt-3 line-clamp-2 text-sm text-text-secondary",
45
+ children: u.summary
46
+ }),
47
+ /* @__PURE__ */ c("div", {
48
+ className: "mt-4 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-text-secondary",
49
+ children: [/* @__PURE__ */ c("span", {
50
+ className: "flex items-center gap-1",
51
+ children: [
52
+ /* @__PURE__ */ s(a, { className: "h-3.5 w-3.5" }),
53
+ " ",
54
+ u.weeks,
55
+ " ",
56
+ u.weeks === 1 ? "week" : "weeks"
57
+ ]
58
+ }), u.isTemplate && /* @__PURE__ */ c("span", {
59
+ className: "flex items-center gap-1",
60
+ children: [/* @__PURE__ */ s(o, { className: "h-3.5 w-3.5" }), " Template"]
61
+ })]
62
+ })
63
+ ]
64
+ });
65
+ };
66
+ //#endregion
67
+ export { u as ProgramCard };
68
+
69
+ //# sourceMappingURL=ProgramCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgramCard.js","names":[],"sources":["../../../src/atheletebridge/components/ProgramCard.tsx"],"sourcesContent":["/**\n * Program Card\n * @module atheletebridge/components\n */\n\nimport type { FC } from 'react';\nimport { CalendarRange, Copy } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { StatusBadge } from './StatusBadge';\nimport { SPORT_ICONS, SPORT_LABELS, PROGRAM_LEVEL_LABELS } from './domain';\nimport { cn } from '../utils/cn';\nimport type { AthProgram } from '../types';\n\ninterface ProgramCardProps {\n program: AthProgram;\n onClick?: () => void;\n}\n\nexport const ProgramCard: FC<ProgramCardProps> = ({ program, onClick }) => {\n const SportIcon = SPORT_ICONS[program.sport];\n\n return (\n <GlassCard\n treatment=\"metric\"\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'cursor-pointer p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]'\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary\">\n <SportIcon className=\"h-5 w-5\" />\n </div>\n <div className=\"min-w-0\">\n <h3 className=\"truncate text-base font-semibold text-text-primary\">{program.name}</h3>\n <p className=\"text-sm text-text-secondary\">\n {SPORT_LABELS[program.sport]} · {PROGRAM_LEVEL_LABELS[program.level]}\n </p>\n </div>\n </div>\n <StatusBadge status={program.status} />\n </div>\n\n {program.summary && (\n <p className=\"mt-3 line-clamp-2 text-sm text-text-secondary\">{program.summary}</p>\n )}\n\n <div className=\"mt-4 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <CalendarRange className=\"h-3.5 w-3.5\" /> {program.weeks}{' '}\n {program.weeks === 1 ? 'week' : 'weeks'}\n </span>\n {program.isTemplate && (\n <span className=\"flex items-center gap-1\">\n <Copy className=\"h-3.5 w-3.5\" /> Template\n </span>\n )}\n </div>\n </GlassCard>\n );\n};\n"],"mappings":";;;;;;;AAkBA,IAAa,KAAqC,EAAE,YAAS,iBAAc;CACzE,IAAM,IAAY,EAAY,EAAQ;AAEtC,QACE,kBAAC,GAAD;EACE,WAAU;EACV,MAAK;EACL,UAAU;EACD;EACT,YAAY,MAAM;AAChB,IAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,gBAAgB,EAClB,KAAW;;EAGf,WAAW,EACT,kHACD;YAbH;GAeE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MAC7B,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAsD,EAAQ;OAAU,CAAA,EACtF,kBAAC,KAAD;OAAG,WAAU;iBAAb;QACG,EAAa,EAAQ;QAAO;QAAI,EAAqB,EAAQ;QAC5D;SACA;QACF;QACN,kBAAC,GAAD,EAAa,QAAQ,EAAQ,QAAU,CAAA,CACnC;;GAEL,EAAQ,WACP,kBAAC,KAAD;IAAG,WAAU;cAAiD,EAAQ;IAAY,CAAA;GAGpF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,QAAD;KAAM,WAAU;eAAhB;MACE,kBAAC,GAAD,EAAe,WAAU,eAAgB,CAAA;;MAAE,EAAQ;MAAO;MACzD,EAAQ,UAAU,IAAI,SAAS;MAC3B;QACN,EAAQ,cACP,kBAAC,QAAD;KAAM,WAAU;eAAhB,CACE,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA,EAAA,YAC3B;OAEL;;GACI"}
@@ -0,0 +1,76 @@
1
+ import { cn as e } from "../utils/cn.js";
2
+ import { StatusBadge as t } from "./StatusBadge.js";
3
+ import { SESSION_TYPE_LABELS as n } from "./domain.js";
4
+ import { formatDate as r, formatDuration as i } from "../utils/formatters.js";
5
+ import { CalendarClock as a, Clock as o, MapPin as s, Star as c, Video as l } from "lucide-react";
6
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
7
+ import { GlassCard as f } from "@burdenoff/fe-libs/ui";
8
+ //#region src/atheletebridge/components/SessionCard.tsx
9
+ var p = ({ session: p, onClick: m }) => /* @__PURE__ */ d(f, {
10
+ treatment: "metric",
11
+ role: "button",
12
+ tabIndex: 0,
13
+ onClick: m,
14
+ onKeyDown: (e) => {
15
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), m?.());
16
+ },
17
+ className: e("cursor-pointer p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]"),
18
+ children: [/* @__PURE__ */ d("div", {
19
+ className: "flex items-start justify-between gap-3",
20
+ children: [/* @__PURE__ */ d("div", {
21
+ className: "min-w-0",
22
+ children: [/* @__PURE__ */ u("h3", {
23
+ className: "truncate text-base font-semibold text-text-primary",
24
+ children: p.title
25
+ }), /* @__PURE__ */ u("p", {
26
+ className: "text-sm text-text-secondary",
27
+ children: n[p.type]
28
+ })]
29
+ }), /* @__PURE__ */ u(t, { status: p.status })]
30
+ }), /* @__PURE__ */ d("div", {
31
+ className: "mt-4 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-text-secondary",
32
+ children: [
33
+ /* @__PURE__ */ d("span", {
34
+ className: "flex items-center gap-1",
35
+ children: [
36
+ /* @__PURE__ */ u(a, { className: "h-3.5 w-3.5" }),
37
+ " ",
38
+ r(p.scheduledAt)
39
+ ]
40
+ }),
41
+ /* @__PURE__ */ d("span", {
42
+ className: "flex items-center gap-1",
43
+ children: [
44
+ /* @__PURE__ */ u(o, { className: "h-3.5 w-3.5" }),
45
+ " ",
46
+ i(p.durationMin)
47
+ ]
48
+ }),
49
+ p.type === "IN_PERSON" && p.location && /* @__PURE__ */ d("span", {
50
+ className: "flex items-center gap-1 truncate",
51
+ children: [
52
+ /* @__PURE__ */ u(s, { className: "h-3.5 w-3.5 shrink-0" }),
53
+ " ",
54
+ p.location
55
+ ]
56
+ }),
57
+ p.type !== "IN_PERSON" && p.meetingUrl && /* @__PURE__ */ d("span", {
58
+ className: "flex items-center gap-1",
59
+ children: [/* @__PURE__ */ u(l, { className: "h-3.5 w-3.5" }), " Online"]
60
+ }),
61
+ p.rating !== null && /* @__PURE__ */ d("span", {
62
+ className: "flex items-center gap-1",
63
+ children: [
64
+ /* @__PURE__ */ u(c, { className: "h-3.5 w-3.5" }),
65
+ " ",
66
+ p.rating,
67
+ "/5"
68
+ ]
69
+ })
70
+ ]
71
+ })]
72
+ });
73
+ //#endregion
74
+ export { p as SessionCard };
75
+
76
+ //# sourceMappingURL=SessionCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionCard.js","names":[],"sources":["../../../src/atheletebridge/components/SessionCard.tsx"],"sourcesContent":["/**\n * Session Card\n * @module atheletebridge/components\n */\n\nimport type { FC } from 'react';\nimport { CalendarClock, Clock, Star, Video, MapPin } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { StatusBadge } from './StatusBadge';\nimport { SESSION_TYPE_LABELS } from './domain';\nimport { formatDate, formatDuration } from '../utils/formatters';\nimport { cn } from '../utils/cn';\nimport type { AthSession } from '../types';\n\ninterface SessionCardProps {\n session: AthSession;\n onClick?: () => void;\n}\n\nexport const SessionCard: FC<SessionCardProps> = ({ session, onClick }) => (\n <GlassCard\n treatment=\"metric\"\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'cursor-pointer p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]'\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h3 className=\"truncate text-base font-semibold text-text-primary\">{session.title}</h3>\n <p className=\"text-sm text-text-secondary\">{SESSION_TYPE_LABELS[session.type]}</p>\n </div>\n <StatusBadge status={session.status} />\n </div>\n\n <div className=\"mt-4 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <CalendarClock className=\"h-3.5 w-3.5\" /> {formatDate(session.scheduledAt)}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3.5 w-3.5\" /> {formatDuration(session.durationMin)}\n </span>\n {session.type === 'IN_PERSON' && session.location && (\n <span className=\"flex items-center gap-1 truncate\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0\" /> {session.location}\n </span>\n )}\n {session.type !== 'IN_PERSON' && session.meetingUrl && (\n <span className=\"flex items-center gap-1\">\n <Video className=\"h-3.5 w-3.5\" /> Online\n </span>\n )}\n {session.rating !== null && (\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3.5 w-3.5\" /> {session.rating}/5\n </span>\n )}\n </div>\n </GlassCard>\n);\n"],"mappings":";;;;;;;;AAmBA,IAAa,KAAqC,EAAE,YAAS,iBAC3D,kBAAC,GAAD;CACE,WAAU;CACV,MAAK;CACL,UAAU;CACD;CACT,YAAY,MAAM;AAChB,GAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,gBAAgB,EAClB,KAAW;;CAGf,WAAW,EACT,kHACD;WAbH,CAeE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAAsD,EAAQ;IAAW,CAAA,EACvF,kBAAC,KAAD;IAAG,WAAU;cAA+B,EAAoB,EAAQ;IAAU,CAAA,CAC9E;MACN,kBAAC,GAAD,EAAa,QAAQ,EAAQ,QAAU,CAAA,CACnC;KAEN,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACE,kBAAC,GAAD,EAAe,WAAU,eAAgB,CAAA;;KAAE,EAAW,EAAQ,YAAY;KACrE;;GACP,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA;;KAAE,EAAe,EAAQ,YAAY;KACjE;;GACN,EAAQ,SAAS,eAAe,EAAQ,YACvC,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACE,kBAAC,GAAD,EAAQ,WAAU,wBAAyB,CAAA;;KAAE,EAAQ;KAChD;;GAER,EAAQ,SAAS,eAAe,EAAQ,cACvC,kBAAC,QAAD;IAAM,WAAU;cAAhB,CACE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA,EAAA,UAC5B;;GAER,EAAQ,WAAW,QAClB,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACE,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA;;KAAE,EAAQ;KAAO;KAC5C;;GAEL;IACI"}
@@ -1,45 +1,54 @@
1
1
  import { cn as e } from "../utils/cn.js";
2
- import { jsx as t } from "react/jsx-runtime";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
3
  //#region src/atheletebridge/components/StatusBadge.tsx
4
- var n = {
5
- success: "bg-green-500/20 text-green-600 dark:text-green-400",
6
- warning: "bg-yellow-500/20 text-yellow-600 dark:text-yellow-400",
7
- destructive: "bg-status-error-bg/20 text-status-error-text",
8
- secondary: "bg-secondary text-secondary-foreground",
9
- info: "bg-blue-500/20 text-blue-600 dark:text-blue-400",
10
- outline: "border border-border-subtle text-text-primary"
11
- }, r = {
12
- open: "success",
13
- closed: "destructive",
14
- busy: "warning",
15
- temporarily_closed: "warning",
16
- pending: "secondary",
17
- confirmed: "info",
18
- preparing: "warning",
19
- ready: "success",
20
- out_for_delivery: "info",
21
- delivered: "success",
22
- cancelled: "destructive",
23
- refunded: "outline",
24
- funded: "success",
25
- returning: "info",
4
+ var r = {
5
+ success: "bg-status-success-bg-subtle text-status-success-text",
6
+ warning: "bg-status-warning-bg-subtle text-status-warning-text",
7
+ destructive: "bg-status-error-bg-subtle text-status-error-text",
8
+ secondary: "bg-bg-sunken text-text-secondary",
9
+ info: "bg-[var(--color-accent-soft)] text-text-primary",
10
+ outline: "border border-border-seam text-text-primary"
11
+ }, i = new Set([
12
+ "live",
13
+ "active",
14
+ "confirmed",
15
+ "in_progress"
16
+ ]), a = {
17
+ forming: "warning",
26
18
  active: "success",
27
19
  inactive: "secondary",
28
- draft: "secondary",
29
20
  archived: "outline",
30
- error: "destructive",
31
- failed: "destructive",
32
- processing: "warning",
33
- completed: "success"
21
+ trial: "info",
22
+ injured: "warning",
23
+ suspended: "destructive",
24
+ released: "secondary",
25
+ scheduled: "info",
26
+ live: "success",
27
+ completed: "success",
28
+ postponed: "warning",
29
+ cancelled: "destructive",
30
+ draft: "secondary",
31
+ published: "success",
32
+ requested: "warning",
33
+ confirmed: "info",
34
+ no_show: "destructive",
35
+ planned: "info",
36
+ skipped: "secondary"
34
37
  };
35
- function i(e) {
36
- return e.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
38
+ function o(e) {
39
+ return e.replace(/_/g, " ").toLowerCase().replace(/\b\w/g, (e) => e.toUpperCase());
37
40
  }
38
- var a = ({ status: a, className: o }) => /* @__PURE__ */ t("span", {
39
- className: e("inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium", n[r[a.toLowerCase()] || "secondary"], o),
40
- children: i(a)
41
- });
41
+ var s = ({ status: s, className: c }) => {
42
+ let l = s.toLowerCase(), u = a[l] ?? "secondary", d = i.has(l);
43
+ return /* @__PURE__ */ n("span", {
44
+ className: e("inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium", r[u], c),
45
+ children: [d && /* @__PURE__ */ t("span", {
46
+ "aria-hidden": "true",
47
+ className: "size-1.5 rounded-full bg-current motion-safe:animate-vc-glow-pulse"
48
+ }), o(s)]
49
+ });
50
+ };
42
51
  //#endregion
43
- export { a as StatusBadge };
52
+ export { s as StatusBadge };
44
53
 
45
54
  //# sourceMappingURL=StatusBadge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBadge.js","names":[],"sources":["../../../src/atheletebridge/components/StatusBadge.tsx"],"sourcesContent":["/**\n * Status Badge Component\n * @module atheletebridge/components\n *\n * A colored badge based on status value with semantic color mapping\n * for various order, cart, and investment statuses.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\n\ninterface StatusBadgeProps {\n status: string;\n className?: string;\n}\n\ntype BadgeVariant = 'success' | 'warning' | 'destructive' | 'secondary' | 'info' | 'outline';\n\nconst variantStyles: Record<BadgeVariant, string> = {\n success: 'bg-green-500/20 text-green-600 dark:text-green-400',\n warning: 'bg-yellow-500/20 text-yellow-600 dark:text-yellow-400',\n destructive: 'bg-status-error-bg/20 text-status-error-text',\n secondary: 'bg-secondary text-secondary-foreground',\n info: 'bg-blue-500/20 text-blue-600 dark:text-blue-400',\n outline: 'border border-border-subtle text-text-primary',\n};\n\nconst statusVariantMap: Record<string, BadgeVariant> = {\n // Cart statuses\n open: 'success',\n closed: 'destructive',\n busy: 'warning',\n temporarily_closed: 'warning',\n\n // Order statuses\n pending: 'secondary',\n confirmed: 'info',\n preparing: 'warning',\n ready: 'success',\n out_for_delivery: 'info',\n delivered: 'success',\n cancelled: 'destructive',\n refunded: 'outline',\n\n // Investment statuses\n funded: 'success',\n returning: 'info',\n\n // Generic statuses\n active: 'success',\n inactive: 'secondary',\n draft: 'secondary',\n archived: 'outline',\n error: 'destructive',\n failed: 'destructive',\n processing: 'warning',\n completed: 'success',\n};\n\nfunction formatStatusLabel(status: string): string {\n return status.replace(/_/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport const StatusBadge: FC<StatusBadgeProps> = ({ status, className }) => {\n const variant = statusVariantMap[status.toLowerCase()] || 'secondary';\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n variantStyles[variant],\n className\n )}\n >\n {formatStatusLabel(status)}\n </span>\n );\n};\n"],"mappings":";;;AAkBA,IAAM,IAA8C;CAClD,SAAS;CACT,SAAS;CACT,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;CACV,EAEK,IAAiD;CAErD,MAAM;CACN,QAAQ;CACR,MAAM;CACN,oBAAoB;CAGpB,SAAS;CACT,WAAW;CACX,WAAW;CACX,OAAO;CACP,kBAAkB;CAClB,WAAW;CACX,WAAW;CACX,UAAU;CAGV,QAAQ;CACR,WAAW;CAGX,QAAQ;CACR,UAAU;CACV,OAAO;CACP,UAAU;CACV,OAAO;CACP,QAAQ;CACR,YAAY;CACZ,WAAW;CACZ;AAED,SAAS,EAAkB,GAAwB;AACjD,QAAO,EAAO,QAAQ,MAAM,IAAI,CAAC,QAAQ,UAAU,MAAS,EAAK,aAAa,CAAC;;AAGjF,IAAa,KAAqC,EAAE,WAAQ,mBAIxD,kBAAC,QAAD;CACE,WAAW,EACT,2EACA,EANU,EAAiB,EAAO,aAAa,KAAK,cAOpD,EACD;WAEA,EAAkB,EAAO;CACrB,CAAA"}
1
+ {"version":3,"file":"StatusBadge.js","names":[],"sources":["../../../src/atheletebridge/components/StatusBadge.tsx"],"sourcesContent":["/**\n * Status Badge Component\n * @module atheletebridge/components\n *\n * A colored badge based on a domain status value, with semantic-token color\n * mapping for the AthleteBridge lifecycle states (teams, members, fixtures,\n * programs, sessions, workouts). Uses semantic tokens only — never raw colors.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\n\ninterface StatusBadgeProps {\n status: string;\n className?: string;\n}\n\ntype BadgeVariant = 'success' | 'warning' | 'destructive' | 'secondary' | 'info' | 'outline';\n\nconst variantStyles: Record<BadgeVariant, string> = {\n success: 'bg-status-success-bg-subtle text-status-success-text',\n warning: 'bg-status-warning-bg-subtle text-status-warning-text',\n destructive: 'bg-status-error-bg-subtle text-status-error-text',\n secondary: 'bg-bg-sunken text-text-secondary',\n info: 'bg-[var(--color-accent-soft)] text-text-primary',\n outline: 'border border-border-seam text-text-primary',\n};\n\n// Statuses that represent a \"live\" / in-progress condition get a subtle,\n// opacity-only glow pulse (reduced-motion safe via motion-safe:).\nconst liveStatuses = new Set(['live', 'active', 'confirmed', 'in_progress']);\n\nconst statusVariantMap: Record<string, BadgeVariant> = {\n // Team status\n forming: 'warning',\n active: 'success',\n inactive: 'secondary',\n archived: 'outline',\n\n // Member status\n trial: 'info',\n injured: 'warning',\n suspended: 'destructive',\n released: 'secondary',\n\n // Fixture status\n scheduled: 'info',\n live: 'success',\n completed: 'success',\n postponed: 'warning',\n cancelled: 'destructive',\n\n // Program status\n draft: 'secondary',\n published: 'success',\n\n // Session status\n requested: 'warning',\n confirmed: 'info',\n no_show: 'destructive',\n\n // Workout status\n planned: 'info',\n skipped: 'secondary',\n};\n\nfunction formatStatusLabel(status: string): string {\n return status\n .replace(/_/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport const StatusBadge: FC<StatusBadgeProps> = ({ status, className }) => {\n const key = status.toLowerCase();\n const variant = statusVariantMap[key] ?? 'secondary';\n const isLive = liveStatuses.has(key);\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium',\n variantStyles[variant],\n className\n )}\n >\n {isLive && (\n <span\n aria-hidden=\"true\"\n className=\"size-1.5 rounded-full bg-current motion-safe:animate-vc-glow-pulse\"\n />\n )}\n {formatStatusLabel(status)}\n </span>\n );\n};\n"],"mappings":";;;AAmBA,IAAM,IAA8C;CAClD,SAAS;CACT,SAAS;CACT,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;CACV,EAIK,IAAe,IAAI,IAAI;CAAC;CAAQ;CAAU;CAAa;CAAc,CAAC,EAEtE,IAAiD;CAErD,SAAS;CACT,QAAQ;CACR,UAAU;CACV,UAAU;CAGV,OAAO;CACP,SAAS;CACT,WAAW;CACX,UAAU;CAGV,WAAW;CACX,MAAM;CACN,WAAW;CACX,WAAW;CACX,WAAW;CAGX,OAAO;CACP,WAAW;CAGX,WAAW;CACX,WAAW;CACX,SAAS;CAGT,SAAS;CACT,SAAS;CACV;AAED,SAAS,EAAkB,GAAwB;AACjD,QAAO,EACJ,QAAQ,MAAM,IAAI,CAClB,aAAa,CACb,QAAQ,UAAU,MAAS,EAAK,aAAa,CAAC;;AAGnD,IAAa,KAAqC,EAAE,WAAQ,mBAAgB;CAC1E,IAAM,IAAM,EAAO,aAAa,EAC1B,IAAU,EAAiB,MAAQ,aACnC,IAAS,EAAa,IAAI,EAAI;AAEpC,QACE,kBAAC,QAAD;EACE,WAAW,EACT,mFACA,EAAc,IACd,EACD;YALH,CAOG,KACC,kBAAC,QAAD;GACE,eAAY;GACZ,WAAU;GACV,CAAA,EAEH,EAAkB,EAAO,CACrB"}
@@ -0,0 +1,81 @@
1
+ import { cn as e } from "../utils/cn.js";
2
+ import { StatusBadge as t } from "./StatusBadge.js";
3
+ import { SPORT_ICONS as n, SPORT_LABELS as r } from "./domain.js";
4
+ import { CalendarDays as i, MapPin as a, Users as o } from "lucide-react";
5
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { GlassCard as l } from "@burdenoff/fe-libs/ui";
7
+ //#region src/atheletebridge/components/TeamCard.tsx
8
+ var u = ({ team: u, onClick: d }) => {
9
+ let f = n[u.sport];
10
+ return /* @__PURE__ */ c(l, {
11
+ treatment: "metric",
12
+ role: "button",
13
+ tabIndex: 0,
14
+ onClick: d,
15
+ onKeyDown: (e) => {
16
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), d?.());
17
+ },
18
+ className: e("cursor-pointer p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]"),
19
+ children: [
20
+ /* @__PURE__ */ c("div", {
21
+ className: "flex items-start justify-between gap-3",
22
+ children: [/* @__PURE__ */ c("div", {
23
+ className: "flex items-center gap-3 min-w-0",
24
+ children: [/* @__PURE__ */ s("div", {
25
+ className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
26
+ children: /* @__PURE__ */ s(f, { className: "h-5 w-5" })
27
+ }), /* @__PURE__ */ c("div", {
28
+ className: "min-w-0",
29
+ children: [/* @__PURE__ */ s("h3", {
30
+ className: "truncate text-base font-semibold text-text-primary",
31
+ children: u.name
32
+ }), /* @__PURE__ */ s("p", {
33
+ className: "text-sm text-text-secondary",
34
+ children: r[u.sport]
35
+ })]
36
+ })]
37
+ }), /* @__PURE__ */ s(t, { status: u.status })]
38
+ }),
39
+ /* @__PURE__ */ c("div", {
40
+ className: "mt-4 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-text-secondary",
41
+ children: [
42
+ u.ageGroup && /* @__PURE__ */ c("span", {
43
+ className: "flex items-center gap-1",
44
+ children: [
45
+ /* @__PURE__ */ s(o, { className: "h-3.5 w-3.5" }),
46
+ " ",
47
+ u.ageGroup
48
+ ]
49
+ }),
50
+ u.season && /* @__PURE__ */ c("span", {
51
+ className: "flex items-center gap-1",
52
+ children: [
53
+ /* @__PURE__ */ s(i, { className: "h-3.5 w-3.5" }),
54
+ " ",
55
+ u.season
56
+ ]
57
+ }),
58
+ u.homeVenue && /* @__PURE__ */ c("span", {
59
+ className: "flex items-center gap-1 truncate",
60
+ children: [
61
+ /* @__PURE__ */ s(a, { className: "h-3.5 w-3.5 shrink-0" }),
62
+ " ",
63
+ u.homeVenue
64
+ ]
65
+ })
66
+ ]
67
+ }),
68
+ u.tags.length > 0 && /* @__PURE__ */ s("div", {
69
+ className: "mt-3 flex flex-wrap gap-1.5",
70
+ children: u.tags.slice(0, 4).map((e) => /* @__PURE__ */ s("span", {
71
+ className: "inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary",
72
+ children: e
73
+ }, e))
74
+ })
75
+ ]
76
+ });
77
+ };
78
+ //#endregion
79
+ export { u as TeamCard };
80
+
81
+ //# sourceMappingURL=TeamCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeamCard.js","names":[],"sources":["../../../src/atheletebridge/components/TeamCard.tsx"],"sourcesContent":["/**\n * Team Card\n * @module atheletebridge/components\n */\n\nimport type { FC } from 'react';\nimport { Users, MapPin, CalendarDays } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { StatusBadge } from './StatusBadge';\nimport { SPORT_ICONS, SPORT_LABELS } from './domain';\nimport { cn } from '../utils/cn';\nimport type { AthTeam } from '../types';\n\ninterface TeamCardProps {\n team: AthTeam;\n onClick?: () => void;\n}\n\nexport const TeamCard: FC<TeamCardProps> = ({ team, onClick }) => {\n const SportIcon = SPORT_ICONS[team.sport];\n\n return (\n <GlassCard\n treatment=\"metric\"\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'cursor-pointer p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]'\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary\">\n <SportIcon className=\"h-5 w-5\" />\n </div>\n <div className=\"min-w-0\">\n <h3 className=\"truncate text-base font-semibold text-text-primary\">{team.name}</h3>\n <p className=\"text-sm text-text-secondary\">{SPORT_LABELS[team.sport]}</p>\n </div>\n </div>\n <StatusBadge status={team.status} />\n </div>\n\n <div className=\"mt-4 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-text-secondary\">\n {team.ageGroup && (\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3.5 w-3.5\" /> {team.ageGroup}\n </span>\n )}\n {team.season && (\n <span className=\"flex items-center gap-1\">\n <CalendarDays className=\"h-3.5 w-3.5\" /> {team.season}\n </span>\n )}\n {team.homeVenue && (\n <span className=\"flex items-center gap-1 truncate\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0\" /> {team.homeVenue}\n </span>\n )}\n </div>\n\n {team.tags.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n {team.tags.slice(0, 4).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};\n"],"mappings":";;;;;;;AAkBA,IAAa,KAA+B,EAAE,SAAM,iBAAc;CAChE,IAAM,IAAY,EAAY,EAAK;AAEnC,QACE,kBAAC,GAAD;EACE,WAAU;EACV,MAAK;EACL,UAAU;EACD;EACT,YAAY,MAAM;AAChB,IAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,gBAAgB,EAClB,KAAW;;EAGf,WAAW,EACT,kHACD;YAbH;GAeE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MAC7B,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAsD,EAAK;OAAU,CAAA,EACnF,kBAAC,KAAD;OAAG,WAAU;iBAA+B,EAAa,EAAK;OAAW,CAAA,CACrE;QACF;QACN,kBAAC,GAAD,EAAa,QAAQ,EAAK,QAAU,CAAA,CAChC;;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACG,EAAK,YACJ,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA;;OAAE,EAAK;OACnC;;KAER,EAAK,UACJ,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAc,WAAU,eAAgB,CAAA;;OAAE,EAAK;OAC1C;;KAER,EAAK,aACJ,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAQ,WAAU,wBAAyB,CAAA;;OAAE,EAAK;OAC7C;;KAEL;;GAEL,EAAK,KAAK,SAAS,KAClB,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAK,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,MAC1B,kBAAC,QAAD;KAEE,WAAU;eAET;KACI,EAJA,EAIA,CACP;IACE,CAAA;GAEE"}
@@ -0,0 +1,47 @@
1
+ import { Activity as e, Dumbbell as t, Footprints as n, Gamepad2 as r, Trophy as i, Volleyball as a, Waves as o } from "lucide-react";
2
+ //#region src/atheletebridge/components/domain.ts
3
+ var s = {
4
+ ATHLETICS: n,
5
+ BASKETBALL: a,
6
+ CRICKET: i,
7
+ ESPORTS: r,
8
+ FOOTBALL: a,
9
+ OTHER: e,
10
+ SWIMMING: o,
11
+ TENNIS: t
12
+ }, c = {
13
+ ATHLETICS: "Athletics",
14
+ BASKETBALL: "Basketball",
15
+ CRICKET: "Cricket",
16
+ ESPORTS: "Esports",
17
+ FOOTBALL: "Football",
18
+ OTHER: "Other",
19
+ SWIMMING: "Swimming",
20
+ TENNIS: "Tennis"
21
+ }, l = {
22
+ BEGINNER: "Beginner",
23
+ INTERMEDIATE: "Intermediate",
24
+ ADVANCED: "Advanced",
25
+ ELITE: "Elite"
26
+ }, u = {
27
+ PLAYER: "Player",
28
+ CAPTAIN: "Captain",
29
+ COACH: "Coach",
30
+ ASSISTANT_COACH: "Assistant Coach",
31
+ PHYSIO: "Physio",
32
+ MANAGER: "Manager"
33
+ }, d = {
34
+ FRIENDLY: "Friendly",
35
+ LEAGUE: "League",
36
+ CUP: "Cup",
37
+ TOURNAMENT: "Tournament",
38
+ SCRIMMAGE: "Scrimmage"
39
+ }, f = {
40
+ IN_PERSON: "In Person",
41
+ ONLINE: "Online",
42
+ HYBRID: "Hybrid"
43
+ };
44
+ //#endregion
45
+ export { d as FIXTURE_TYPE_LABELS, u as MEMBER_ROLE_LABELS, l as PROGRAM_LEVEL_LABELS, f as SESSION_TYPE_LABELS, s as SPORT_ICONS, c as SPORT_LABELS };
46
+
47
+ //# sourceMappingURL=domain.js.map