@burdenoff/microfe-atheletebridge 2026.629.1 → 2026.705.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.
- package/dist/atheletebridge/AthleteBridgeRoot.js +45 -37
- package/dist/atheletebridge/AthleteBridgeRoot.js.map +1 -1
- package/dist/atheletebridge/AthleteBridgeRoutes.js +10 -6
- package/dist/atheletebridge/AthleteBridgeRoutes.js.map +1 -1
- package/dist/atheletebridge/components/AthleteSelect.js +66 -0
- package/dist/atheletebridge/components/AthleteSelect.js.map +1 -0
- package/dist/atheletebridge/components/DrillVideoLink.js +28 -0
- package/dist/atheletebridge/components/DrillVideoLink.js.map +1 -0
- package/dist/atheletebridge/components/MetricsCard.js +20 -46
- package/dist/atheletebridge/components/MetricsCard.js.map +1 -1
- package/dist/atheletebridge/components/UserSearchSelect.js +129 -0
- package/dist/atheletebridge/components/UserSearchSelect.js.map +1 -0
- package/dist/atheletebridge/components/domain.js +10 -1
- package/dist/atheletebridge/components/domain.js.map +1 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js +313 -180
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js.map +1 -1
- package/dist/atheletebridge/pages/DashboardPage.js +77 -69
- package/dist/atheletebridge/pages/DashboardPage.js.map +1 -1
- package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js +4 -4
- package/dist/atheletebridge/pages/fixtures/FixtureDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/performance/PerformancePage.js +496 -0
- package/dist/atheletebridge/pages/performance/PerformancePage.js.map +1 -0
- package/dist/atheletebridge/pages/programs/ProgramDetailPage.js +176 -142
- package/dist/atheletebridge/pages/programs/ProgramDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/sessions/SessionDetailPage.js +86 -85
- package/dist/atheletebridge/pages/sessions/SessionDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/sessions/SessionFormPage.js +92 -98
- package/dist/atheletebridge/pages/sessions/SessionFormPage.js.map +1 -1
- package/dist/atheletebridge/pages/teams/TeamDetailPage.js +132 -137
- package/dist/atheletebridge/pages/teams/TeamDetailPage.js.map +1 -1
- package/dist/atheletebridge/utils/formatters.js +2 -25
- package/dist/atheletebridge/utils/formatters.js.map +1 -1
- package/dist/atheletebridge/utils/url.js +17 -0
- package/dist/atheletebridge/utils/url.js.map +1 -0
- package/dist/index.js +4 -4
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","names":[],"sources":["../../../src/atheletebridge/utils/formatters.ts"],"sourcesContent":["/**\n * Formatting utilities for the AthleteBridge microfrontend\n * @module atheletebridge/utils/formatters\n */\n\n/**\n * Format a
|
|
1
|
+
{"version":3,"file":"formatters.js","names":[],"sources":["../../../src/atheletebridge/utils/formatters.ts"],"sourcesContent":["/**\n * Formatting utilities for the AthleteBridge microfrontend\n * @module atheletebridge/utils/formatters\n */\n\n/**\n * Format a date string or Date object into a human-readable format\n *\n * @param date - ISO date string or Date object\n * @param options - Optional Intl.DateTimeFormat options\n * @returns Formatted date string (e.g., \"15 Jan 2024, 4:00 PM\")\n *\n * @example\n * formatDate('2024-01-15T10:30:00Z')\n * // => \"15 Jan 2024, 4:00 PM\" (in IST)\n */\nexport function formatDate(\n date: string | Date,\n options?: Partial<Intl.DateTimeFormatOptions>\n): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return new Intl.DateTimeFormat('en-IN', {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n ...options,\n }).format(d);\n}\n\n/**\n * Format a duration in minutes into a human-readable string\n *\n * @param minutes - Duration in minutes\n * @returns Formatted duration string\n *\n * @example\n * formatDuration(5) // => \"5 min\"\n * formatDuration(90) // => \"1h 30min\"\n * formatDuration(1440) // => \"1 day\"\n * formatDuration(4320) // => \"3 days\"\n */\nexport function formatDuration(minutes: number): string {\n if (minutes < 1) return 'instant';\n if (minutes < 60) return `${minutes} min`;\n\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n\n if (hours < 24) {\n if (remainingMinutes === 0) {\n return `${hours}h`;\n }\n return `${hours}h ${remainingMinutes}min`;\n }\n\n const days = Math.floor(hours / 24);\n const remainingHours = hours % 24;\n\n if (remainingHours === 0) {\n return `${days} day${days !== 1 ? 's' : ''}`;\n }\n return `${days} day${days !== 1 ? 's' : ''} ${remainingHours}h`;\n}\n"],"mappings":";AAgBA,SAAgB,EACd,GACA,GACQ;CACR,IAAM,IAAI,OAAO,KAAS,WAAW,IAAI,KAAK,EAAK,GAAG;AACtD,QAAO,IAAI,KAAK,eAAe,SAAS;EACtC,KAAK;EACL,OAAO;EACP,MAAM;EACN,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,GAAG;EACJ,CAAC,CAAC,OAAO,EAAE;;AAed,SAAgB,EAAe,GAAyB;AACtD,KAAI,IAAU,EAAG,QAAO;AACxB,KAAI,IAAU,GAAI,QAAO,GAAG,EAAQ;CAEpC,IAAM,IAAQ,KAAK,MAAM,IAAU,GAAG,EAChC,IAAmB,IAAU;AAEnC,KAAI,IAAQ,GAIV,QAHI,MAAqB,IAChB,GAAG,EAAM,KAEX,GAAG,EAAM,IAAI,EAAiB;CAGvC,IAAM,IAAO,KAAK,MAAM,IAAQ,GAAG,EAC7B,IAAiB,IAAQ;AAK/B,QAHI,MAAmB,IACd,GAAG,EAAK,MAAM,MAAS,IAAU,KAAN,QAE7B,GAAG,EAAK,MAAM,MAAS,IAAU,KAAN,IAAS,GAAG,EAAe"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/atheletebridge/utils/url.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
if (!e) return null;
|
|
4
|
+
let t = e.trim();
|
|
5
|
+
if (!t) return null;
|
|
6
|
+
let n;
|
|
7
|
+
try {
|
|
8
|
+
n = new URL(t);
|
|
9
|
+
} catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return n.protocol === "http:" || n.protocol === "https:" ? n.href : null;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { e as safeExternalHref };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","names":[],"sources":["../../../src/atheletebridge/utils/url.ts"],"sourcesContent":["/**\n * URL safety helpers\n * @module atheletebridge/utils/url\n *\n * `safeExternalHref` is defense-in-depth against DOM-XSS from user-controlled\n * URLs (e.g. a session `meetingUrl`) that get rendered as clickable anchors.\n * A stored `javascript:` / `data:` / `vbscript:` URL in an `<a href>` executes\n * on click, so we only ever hand back a URL that parses as an absolute URL and\n * uses an `http:` or `https:` scheme. Anything else (bad scheme, relative,\n * unparseable) returns `null` and the caller must decline to render a link.\n */\n\n/**\n * Returns the URL only if it is a safe, absolute http(s) link; otherwise `null`.\n *\n * @example\n * safeExternalHref('https://meet.example.com/x') // => 'https://meet.example.com/x'\n * safeExternalHref('javascript:alert(1)') // => null\n * safeExternalHref('data:text/html,<script>') // => null\n * safeExternalHref('meet.example.com') // => null (not absolute)\n */\nexport function safeExternalHref(url: string | null | undefined): string | null {\n if (!url) return null;\n const trimmed = url.trim();\n if (!trimmed) return null;\n\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n return null;\n }\n\n if (parsed.protocol === 'http:' || parsed.protocol === 'https:') {\n return parsed.href;\n }\n return null;\n}\n"],"mappings":";AAqBA,SAAgB,EAAiB,GAA+C;AAC9E,KAAI,CAAC,EAAK,QAAO;CACjB,IAAM,IAAU,EAAI,MAAM;AAC1B,KAAI,CAAC,EAAS,QAAO;CAErB,IAAI;AACJ,KAAI;AACF,MAAS,IAAI,IAAI,EAAQ;SACnB;AACN,SAAO;;AAMT,QAHI,EAAO,aAAa,WAAW,EAAO,aAAa,WAC9C,EAAO,OAET"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AthleteBridgeProvider as e, useAthleteBridge as t } from "./atheletebridge/context/AthleteBridgeContext.js";
|
|
2
2
|
import { cn as n } from "./atheletebridge/utils/cn.js";
|
|
3
|
-
import {
|
|
4
|
-
import { AthleteBridgeRoot as
|
|
5
|
-
import { useAthleteBridgeStore as
|
|
3
|
+
import { formatDate as r, formatDuration as i } from "./atheletebridge/utils/formatters.js";
|
|
4
|
+
import { AthleteBridgeRoot as a } from "./atheletebridge/AthleteBridgeRoot.js";
|
|
5
|
+
import { useAthleteBridgeStore as o } from "./atheletebridge/store/atheletebridgeStore.js";
|
|
6
6
|
import "./atheletebridge/index.js";
|
|
7
|
-
export { e as AthleteBridgeProvider,
|
|
7
|
+
export { e as AthleteBridgeProvider, a as AthleteBridgeRoot, n as cn, r as formatDate, i as formatDuration, t as useAthleteBridge, o as useAthleteBridgeStore };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/microfe-atheletebridge",
|
|
3
|
-
"version": "2026.
|
|
4
|
-
"description": "Burdenoff
|
|
3
|
+
"version": "2026.705.2",
|
|
4
|
+
"description": "Burdenoff AthleteBridge Microfrontend - Sports, coaching & training platform for teams, fixtures, programs, sessions and athlete performance",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
],
|
|
11
11
|
"imports": {
|
|
12
12
|
"#src/*": "./src/*",
|
|
13
|
-
"#
|
|
13
|
+
"#atheletebridge/*": "./src/atheletebridge/*"
|
|
14
14
|
},
|
|
15
15
|
"exports": {
|
|
16
16
|
".": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@apollo/client": "^4.0.11",
|
|
43
|
-
"@burdenoff/fe-libs": "2026.
|
|
43
|
+
"@burdenoff/fe-libs": "2026.705.2",
|
|
44
44
|
"@tanstack/react-query": "^5.90.16",
|
|
45
45
|
"clsx": "^2.1.1",
|
|
46
46
|
"graphql": "^16.12.0",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"access": "restricted"
|
|
87
87
|
},
|
|
88
88
|
"overrides": {
|
|
89
|
-
"@burdenoff/fe-libs": "2026.
|
|
89
|
+
"@burdenoff/fe-libs": "2026.705.2",
|
|
90
90
|
"lodash": ">=4.17.21",
|
|
91
91
|
"lodash-es": ">=4.17.21",
|
|
92
92
|
"dompurify": ">=3.3.4",
|