@burdenoff/microfe-mybodyshield 2026.706.2 → 2026.713.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 (152) hide show
  1. package/dist/dev/main.d.ts +2 -0
  2. package/dist/dev/main.d.ts.map +1 -0
  3. package/dist/generated/global-operations.d.ts +2 -0
  4. package/dist/generated/global-operations.d.ts.map +1 -0
  5. package/dist/generated/global-types.d.ts +18199 -0
  6. package/dist/generated/global-types.d.ts.map +1 -0
  7. package/dist/generated/wspace-operations.d.ts +2 -0
  8. package/dist/generated/wspace-operations.d.ts.map +1 -0
  9. package/dist/generated/wspace-types.d.ts +43046 -0
  10. package/dist/generated/wspace-types.d.ts.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +2 -1
  14. package/dist/mybodyshield/MyBodyShieldRoot.d.ts +5 -0
  15. package/dist/mybodyshield/MyBodyShieldRoot.d.ts.map +1 -0
  16. package/dist/mybodyshield/MyBodyShieldRoutes.d.ts +4 -0
  17. package/dist/mybodyshield/MyBodyShieldRoutes.d.ts.map +1 -0
  18. package/dist/mybodyshield/MyBodyShieldRoutes.js +77 -36
  19. package/dist/mybodyshield/MyBodyShieldRoutes.js.map +1 -1
  20. package/dist/mybodyshield/components/DataTable.d.ts +28 -0
  21. package/dist/mybodyshield/components/DataTable.d.ts.map +1 -0
  22. package/dist/mybodyshield/components/EmptyState.d.ts +18 -0
  23. package/dist/mybodyshield/components/EmptyState.d.ts.map +1 -0
  24. package/dist/mybodyshield/components/EvidenceUpload.d.ts +14 -0
  25. package/dist/mybodyshield/components/EvidenceUpload.d.ts.map +1 -0
  26. package/dist/mybodyshield/components/FeatureFlagGuard.d.ts +11 -0
  27. package/dist/mybodyshield/components/FeatureFlagGuard.d.ts.map +1 -0
  28. package/dist/mybodyshield/components/FeatureFlagGuard.js +27 -0
  29. package/dist/mybodyshield/components/FeatureFlagGuard.js.map +1 -0
  30. package/dist/mybodyshield/components/FileLink.d.ts +15 -0
  31. package/dist/mybodyshield/components/FileLink.d.ts.map +1 -0
  32. package/dist/mybodyshield/components/FilterTabs.d.ts +18 -0
  33. package/dist/mybodyshield/components/FilterTabs.d.ts.map +1 -0
  34. package/dist/mybodyshield/components/MetricsCard.d.ts +23 -0
  35. package/dist/mybodyshield/components/MetricsCard.d.ts.map +1 -0
  36. package/dist/mybodyshield/components/MiniBar.d.ts +16 -0
  37. package/dist/mybodyshield/components/MiniBar.d.ts.map +1 -0
  38. package/dist/mybodyshield/components/MybDiscussion.d.ts +18 -0
  39. package/dist/mybodyshield/components/MybDiscussion.d.ts.map +1 -0
  40. package/dist/mybodyshield/components/MybDiscussion.js +5 -5
  41. package/dist/mybodyshield/components/MybTags.d.ts +17 -0
  42. package/dist/mybodyshield/components/MybTags.d.ts.map +1 -0
  43. package/dist/mybodyshield/components/PageDisabled.d.ts +9 -0
  44. package/dist/mybodyshield/components/PageDisabled.d.ts.map +1 -0
  45. package/dist/mybodyshield/components/PageDisabled.js +17 -0
  46. package/dist/mybodyshield/components/PageDisabled.js.map +1 -0
  47. package/dist/mybodyshield/components/PageLayout.d.ts +16 -0
  48. package/dist/mybodyshield/components/PageLayout.d.ts.map +1 -0
  49. package/dist/mybodyshield/components/Pagination.d.ts +22 -0
  50. package/dist/mybodyshield/components/Pagination.d.ts.map +1 -0
  51. package/dist/mybodyshield/components/StateViews.d.ts +25 -0
  52. package/dist/mybodyshield/components/StateViews.d.ts.map +1 -0
  53. package/dist/mybodyshield/components/StateViews.js +2 -1
  54. package/dist/mybodyshield/components/StateViews.js.map +1 -1
  55. package/dist/mybodyshield/components/StatusBadge.d.ts +9 -0
  56. package/dist/mybodyshield/components/StatusBadge.d.ts.map +1 -0
  57. package/dist/mybodyshield/components/Tabs.d.ts +17 -0
  58. package/dist/mybodyshield/components/Tabs.d.ts.map +1 -0
  59. package/dist/mybodyshield/components/UserSearchSelect.d.ts +28 -0
  60. package/dist/mybodyshield/components/UserSearchSelect.d.ts.map +1 -0
  61. package/dist/mybodyshield/components/index.d.ts +22 -0
  62. package/dist/mybodyshield/components/index.d.ts.map +1 -0
  63. package/dist/mybodyshield/components/index.js +4 -2
  64. package/dist/mybodyshield/context/MyBodyShieldContext.d.ts +16 -0
  65. package/dist/mybodyshield/context/MyBodyShieldContext.d.ts.map +1 -0
  66. package/dist/mybodyshield/context/index.d.ts +6 -0
  67. package/dist/mybodyshield/context/index.d.ts.map +1 -0
  68. package/dist/mybodyshield/hooks/index.d.ts +12 -0
  69. package/dist/mybodyshield/hooks/index.d.ts.map +1 -0
  70. package/dist/mybodyshield/hooks/index.js +1 -0
  71. package/dist/mybodyshield/hooks/useMyBodyShieldAnalytics.d.ts +21 -0
  72. package/dist/mybodyshield/hooks/useMyBodyShieldAnalytics.d.ts.map +1 -0
  73. package/dist/mybodyshield/hooks/useMyBodyShieldAnalytics.js +35 -0
  74. package/dist/mybodyshield/hooks/useMyBodyShieldAnalytics.js.map +1 -0
  75. package/dist/mybodyshield/hooks/useMyBodyShieldApi.d.ts +83 -0
  76. package/dist/mybodyshield/hooks/useMyBodyShieldApi.d.ts.map +1 -0
  77. package/dist/mybodyshield/hooks/useMybComments.d.ts +36 -0
  78. package/dist/mybodyshield/hooks/useMybComments.d.ts.map +1 -0
  79. package/dist/mybodyshield/hooks/useMybFiles.d.ts +47 -0
  80. package/dist/mybodyshield/hooks/useMybFiles.d.ts.map +1 -0
  81. package/dist/mybodyshield/hooks/useMybTags.d.ts +44 -0
  82. package/dist/mybodyshield/hooks/useMybTags.d.ts.map +1 -0
  83. package/dist/mybodyshield/hooks/useMybUsers.d.ts +27 -0
  84. package/dist/mybodyshield/hooks/useMybUsers.d.ts.map +1 -0
  85. package/dist/mybodyshield/hooks/usePager.d.ts +29 -0
  86. package/dist/mybodyshield/hooks/usePager.d.ts.map +1 -0
  87. package/dist/mybodyshield/index.d.ts +9 -0
  88. package/dist/mybodyshield/index.d.ts.map +1 -0
  89. package/dist/mybodyshield/pages/DashboardPage.d.ts +10 -0
  90. package/dist/mybodyshield/pages/DashboardPage.d.ts.map +1 -0
  91. package/dist/mybodyshield/pages/DashboardPage.js +91 -86
  92. package/dist/mybodyshield/pages/DashboardPage.js.map +1 -1
  93. package/dist/mybodyshield/pages/_shared/visuals.d.ts +77 -0
  94. package/dist/mybodyshield/pages/_shared/visuals.d.ts.map +1 -0
  95. package/dist/mybodyshield/pages/coaching/CoachingPage.d.ts +11 -0
  96. package/dist/mybodyshield/pages/coaching/CoachingPage.d.ts.map +1 -0
  97. package/dist/mybodyshield/pages/coaching/CoachingPage.js +60 -60
  98. package/dist/mybodyshield/pages/goals/GoalsPage.d.ts +11 -0
  99. package/dist/mybodyshield/pages/goals/GoalsPage.d.ts.map +1 -0
  100. package/dist/mybodyshield/pages/goals/GoalsPage.js +125 -125
  101. package/dist/mybodyshield/pages/goals/GoalsPage.js.map +1 -1
  102. package/dist/mybodyshield/pages/nutrition/NutritionPage.d.ts +13 -0
  103. package/dist/mybodyshield/pages/nutrition/NutritionPage.d.ts.map +1 -0
  104. package/dist/mybodyshield/pages/nutrition/NutritionPage.js +129 -129
  105. package/dist/mybodyshield/pages/nutrition/NutritionPage.js.map +1 -1
  106. package/dist/mybodyshield/pages/programs/ProgramDetailPage.d.ts +10 -0
  107. package/dist/mybodyshield/pages/programs/ProgramDetailPage.d.ts.map +1 -0
  108. package/dist/mybodyshield/pages/programs/ProgramDetailPage.js +218 -191
  109. package/dist/mybodyshield/pages/programs/ProgramDetailPage.js.map +1 -1
  110. package/dist/mybodyshield/pages/programs/ProgramsPage.d.ts +11 -0
  111. package/dist/mybodyshield/pages/programs/ProgramsPage.d.ts.map +1 -0
  112. package/dist/mybodyshield/pages/programs/ProgramsPage.js +197 -193
  113. package/dist/mybodyshield/pages/programs/ProgramsPage.js.map +1 -1
  114. package/dist/mybodyshield/pages/progress/ProgressPage.d.ts +13 -0
  115. package/dist/mybodyshield/pages/progress/ProgressPage.d.ts.map +1 -0
  116. package/dist/mybodyshield/pages/progress/ProgressPage.js +143 -143
  117. package/dist/mybodyshield/pages/progress/ProgressPage.js.map +1 -1
  118. package/dist/mybodyshield/pages/recovery/RecoveryPage.d.ts +11 -0
  119. package/dist/mybodyshield/pages/recovery/RecoveryPage.d.ts.map +1 -0
  120. package/dist/mybodyshield/pages/recovery/RecoveryPage.js +60 -60
  121. package/dist/mybodyshield/pages/recovery/RecoveryPage.js.map +1 -1
  122. package/dist/mybodyshield/pages/train/SessionDetailPage.d.ts +11 -0
  123. package/dist/mybodyshield/pages/train/SessionDetailPage.d.ts.map +1 -0
  124. package/dist/mybodyshield/pages/train/SessionDetailPage.js +184 -181
  125. package/dist/mybodyshield/pages/train/SessionDetailPage.js.map +1 -1
  126. package/dist/mybodyshield/pages/train/SessionsPage.d.ts +11 -0
  127. package/dist/mybodyshield/pages/train/SessionsPage.d.ts.map +1 -0
  128. package/dist/mybodyshield/pages/train/SessionsPage.js +119 -115
  129. package/dist/mybodyshield/pages/train/SessionsPage.js.map +1 -1
  130. package/dist/mybodyshield/services/createSandboxAssistantTransport.d.ts +24 -0
  131. package/dist/mybodyshield/services/createSandboxAssistantTransport.d.ts.map +1 -0
  132. package/dist/mybodyshield/services/createSandboxAssistantTransport.js +14 -0
  133. package/dist/mybodyshield/services/createSandboxAssistantTransport.js.map +1 -0
  134. package/dist/mybodyshield/types/assistant.d.ts +55 -0
  135. package/dist/mybodyshield/types/assistant.d.ts.map +1 -0
  136. package/dist/mybodyshield/types/index.d.ts +419 -0
  137. package/dist/mybodyshield/types/index.d.ts.map +1 -0
  138. package/dist/mybodyshield/utils/cn.d.ts +4 -0
  139. package/dist/mybodyshield/utils/cn.d.ts.map +1 -0
  140. package/dist/mybodyshield/utils/formatters.d.ts +32 -0
  141. package/dist/mybodyshield/utils/formatters.d.ts.map +1 -0
  142. package/dist/mybodyshield/utils/i18n.d.ts +6 -0
  143. package/dist/mybodyshield/utils/i18n.d.ts.map +1 -0
  144. package/dist/mybodyshield/utils/index.d.ts +9 -0
  145. package/dist/mybodyshield/utils/index.d.ts.map +1 -0
  146. package/dist/mybodyshield/utils/navigation.d.ts +14 -0
  147. package/dist/mybodyshield/utils/navigation.d.ts.map +1 -0
  148. package/dist/mybodyshield/utils/pageContext.d.ts +28 -0
  149. package/dist/mybodyshield/utils/pageContext.d.ts.map +1 -0
  150. package/dist/mybodyshield/utils/pageContext.js +62 -0
  151. package/dist/mybodyshield/utils/pageContext.js.map +1 -0
  152. package/package.json +8 -2
@@ -0,0 +1,3 @@
1
+ export * from './mybodyshield';
2
+ export * from './mybodyshield/services/createSandboxAssistantTransport';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAO/B,cAAc,yDAAyD,CAAC"}
package/dist/index.js CHANGED
@@ -4,4 +4,5 @@ import { cn as r } from "./mybodyshield/utils/cn.js";
4
4
  import { formatDate as i, formatDateTime as a, formatDuration as o, formatEnumLabel as s, formatGrams as c, formatKcal as l, formatMinutes as u, formatNumber as d, formatPercent as f, formatQuantity as p, formatRelativeTime as m, formatWeight as h } from "./mybodyshield/utils/formatters.js";
5
5
  import { MyBodyShieldRoot as g } from "./mybodyshield/MyBodyShieldRoot.js";
6
6
  import "./mybodyshield/index.js";
7
- export { t as MyBodyShieldProvider, g as MyBodyShieldRoot, r as cn, i as formatDate, a as formatDateTime, o as formatDuration, s as formatEnumLabel, c as formatGrams, l as formatKcal, u as formatMinutes, d as formatNumber, f as formatPercent, p as formatQuantity, m as formatRelativeTime, h as formatWeight, e as joinPath, n as useMyBodyShield };
7
+ import { useSandboxAssistantTransport as _ } from "./mybodyshield/services/createSandboxAssistantTransport.js";
8
+ export { t as MyBodyShieldProvider, g as MyBodyShieldRoot, r as cn, i as formatDate, a as formatDateTime, o as formatDuration, s as formatEnumLabel, c as formatGrams, l as formatKcal, u as formatMinutes, d as formatNumber, f as formatPercent, p as formatQuantity, m as formatRelativeTime, h as formatWeight, e as joinPath, n as useMyBodyShield, _ as useSandboxAssistantTransport };
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ import { MyBodyShieldRootProps } from './types';
3
+
4
+ export declare const MyBodyShieldRoot: FC<MyBodyShieldRootProps>;
5
+ //# sourceMappingURL=MyBodyShieldRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MyBodyShieldRoot.d.ts","sourceRoot":"","sources":["../../src/mybodyshield/MyBodyShieldRoot.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAkBhC,OAAO,KAAK,EAAE,qBAAqB,EAAW,MAAM,SAAS,CAAC;AAY9D,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA6GtD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+
3
+ export declare const MyBodyShieldRoutes: FC;
4
+ //# sourceMappingURL=MyBodyShieldRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MyBodyShieldRoutes.d.ts","sourceRoot":"","sources":["../../src/mybodyshield/MyBodyShieldRoutes.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAkC,MAAM,OAAO,CAAC;AAqEhE,eAAO,MAAM,kBAAkB,EAAE,EAiHhC,CAAC"}
@@ -1,63 +1,104 @@
1
1
  import { useMyBodyShield as e } from "./context/MyBodyShieldContext.js";
2
- import { DashboardPage as t } from "./pages/DashboardPage.js";
3
- import { Suspense as n, lazy as r } from "react";
4
- import { Navigate as i, Route as a, Routes as o, useLocation as s } from "react-router-dom";
5
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
- import { Spinner as u } from "@burdenoff/fe-libs/ui";
2
+ import { FeatureFlagGuard as t } from "./components/FeatureFlagGuard.js";
3
+ import { PageDisabled as n } from "./components/PageDisabled.js";
4
+ import "./components/index.js";
5
+ import { DashboardPage as r } from "./pages/DashboardPage.js";
6
+ import { Suspense as i, lazy as a } from "react";
7
+ import { Navigate as o, Route as s, Routes as c, useLocation as l } from "react-router-dom";
8
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
+ import { Spinner as f } from "@burdenoff/fe-libs/ui";
7
10
  //#region src/mybodyshield/MyBodyShieldRoutes.tsx
8
- var d = r(() => import("./pages/programs/ProgramsPage.js").then((e) => ({ default: e.ProgramsPage }))), f = r(() => import("./pages/programs/ProgramDetailPage.js").then((e) => ({ default: e.ProgramDetailPage }))), p = r(() => import("./pages/train/SessionsPage.js").then((e) => ({ default: e.SessionsPage }))), m = r(() => import("./pages/train/SessionDetailPage.js").then((e) => ({ default: e.SessionDetailPage }))), h = r(() => import("./pages/nutrition/NutritionPage.js").then((e) => ({ default: e.NutritionPage }))), g = r(() => import("./pages/goals/GoalsPage.js").then((e) => ({ default: e.GoalsPage }))), _ = r(() => import("./pages/progress/ProgressPage.js").then((e) => ({ default: e.ProgressPage }))), v = r(() => import("./pages/recovery/RecoveryPage.js").then((e) => ({ default: e.RecoveryPage }))), y = r(() => import("./pages/coaching/CoachingPage.js").then((e) => ({ default: e.CoachingPage }))), b = () => /* @__PURE__ */ c("div", {
11
+ var p = a(() => import("./pages/programs/ProgramsPage.js").then((e) => ({ default: e.ProgramsPage }))), m = a(() => import("./pages/programs/ProgramDetailPage.js").then((e) => ({ default: e.ProgramDetailPage }))), h = a(() => import("./pages/train/SessionsPage.js").then((e) => ({ default: e.SessionsPage }))), g = a(() => import("./pages/train/SessionDetailPage.js").then((e) => ({ default: e.SessionDetailPage }))), _ = a(() => import("./pages/nutrition/NutritionPage.js").then((e) => ({ default: e.NutritionPage }))), v = a(() => import("./pages/goals/GoalsPage.js").then((e) => ({ default: e.GoalsPage }))), y = a(() => import("./pages/progress/ProgressPage.js").then((e) => ({ default: e.ProgressPage }))), b = a(() => import("./pages/recovery/RecoveryPage.js").then((e) => ({ default: e.RecoveryPage }))), x = a(() => import("./pages/coaching/CoachingPage.js").then((e) => ({ default: e.CoachingPage }))), S = () => /* @__PURE__ */ u("div", {
9
12
  className: "flex min-h-[400px] items-center justify-center",
10
- children: /* @__PURE__ */ c(u, { size: "lg" })
11
- }), x = () => {
12
- let { basePath: r, isStandalone: u } = e(), x = s(), S = r === "/" ? "" : (r ?? "").replace(/\/$/, "");
13
- return S && !u && !(x.pathname === S || x.pathname.startsWith(S + "/")) ? null : /* @__PURE__ */ c("div", {
13
+ children: /* @__PURE__ */ u(f, { size: "lg" })
14
+ });
15
+ function C({ page: e, children: r }) {
16
+ return /* @__PURE__ */ u(t, {
17
+ page: e,
18
+ fallback: /* @__PURE__ */ u(n, { title: e.split("_").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ") }),
19
+ children: r
20
+ });
21
+ }
22
+ var w = () => {
23
+ let { basePath: t, isStandalone: n } = e(), a = l(), f = t === "/" ? "" : (t ?? "").replace(/\/$/, "");
24
+ return f && !n && !(a.pathname === f || a.pathname.startsWith(f + "/")) ? null : /* @__PURE__ */ u("div", {
14
25
  className: "flex min-h-full flex-col",
15
- children: /* @__PURE__ */ c(n, {
16
- fallback: /* @__PURE__ */ c(b, {}),
17
- children: /* @__PURE__ */ l(o, { children: [
18
- /* @__PURE__ */ c(a, {
26
+ children: /* @__PURE__ */ u(i, {
27
+ fallback: /* @__PURE__ */ u(S, {}),
28
+ children: /* @__PURE__ */ d(c, { children: [
29
+ /* @__PURE__ */ u(s, {
19
30
  index: !0,
20
- element: /* @__PURE__ */ c(t, {})
31
+ element: /* @__PURE__ */ u(C, {
32
+ page: "dashboard",
33
+ children: /* @__PURE__ */ u(r, {})
34
+ })
21
35
  }),
22
- /* @__PURE__ */ c(a, {
36
+ /* @__PURE__ */ u(s, {
23
37
  path: "programs",
24
- element: /* @__PURE__ */ c(d, {})
38
+ element: /* @__PURE__ */ u(C, {
39
+ page: "programs",
40
+ children: /* @__PURE__ */ u(p, {})
41
+ })
25
42
  }),
26
- /* @__PURE__ */ c(a, {
43
+ /* @__PURE__ */ u(s, {
27
44
  path: "programs/:id",
28
- element: /* @__PURE__ */ c(f, {})
45
+ element: /* @__PURE__ */ u(C, {
46
+ page: "program_detail",
47
+ children: /* @__PURE__ */ u(m, {})
48
+ })
29
49
  }),
30
- /* @__PURE__ */ c(a, {
50
+ /* @__PURE__ */ u(s, {
31
51
  path: "train",
32
- element: /* @__PURE__ */ c(p, {})
52
+ element: /* @__PURE__ */ u(C, {
53
+ page: "train",
54
+ children: /* @__PURE__ */ u(h, {})
55
+ })
33
56
  }),
34
- /* @__PURE__ */ c(a, {
57
+ /* @__PURE__ */ u(s, {
35
58
  path: "train/:id",
36
- element: /* @__PURE__ */ c(m, {})
59
+ element: /* @__PURE__ */ u(C, {
60
+ page: "session_detail",
61
+ children: /* @__PURE__ */ u(g, {})
62
+ })
37
63
  }),
38
- /* @__PURE__ */ c(a, {
64
+ /* @__PURE__ */ u(s, {
39
65
  path: "nutrition",
40
- element: /* @__PURE__ */ c(h, {})
66
+ element: /* @__PURE__ */ u(C, {
67
+ page: "nutrition",
68
+ children: /* @__PURE__ */ u(_, {})
69
+ })
41
70
  }),
42
- /* @__PURE__ */ c(a, {
71
+ /* @__PURE__ */ u(s, {
43
72
  path: "goals",
44
- element: /* @__PURE__ */ c(g, {})
73
+ element: /* @__PURE__ */ u(C, {
74
+ page: "goals",
75
+ children: /* @__PURE__ */ u(v, {})
76
+ })
45
77
  }),
46
- /* @__PURE__ */ c(a, {
78
+ /* @__PURE__ */ u(s, {
47
79
  path: "progress",
48
- element: /* @__PURE__ */ c(_, {})
80
+ element: /* @__PURE__ */ u(C, {
81
+ page: "progress",
82
+ children: /* @__PURE__ */ u(y, {})
83
+ })
49
84
  }),
50
- /* @__PURE__ */ c(a, {
85
+ /* @__PURE__ */ u(s, {
51
86
  path: "recovery",
52
- element: /* @__PURE__ */ c(v, {})
87
+ element: /* @__PURE__ */ u(C, {
88
+ page: "recovery",
89
+ children: /* @__PURE__ */ u(b, {})
90
+ })
53
91
  }),
54
- /* @__PURE__ */ c(a, {
92
+ /* @__PURE__ */ u(s, {
55
93
  path: "coaching",
56
- element: /* @__PURE__ */ c(y, {})
94
+ element: /* @__PURE__ */ u(C, {
95
+ page: "coaching",
96
+ children: /* @__PURE__ */ u(x, {})
97
+ })
57
98
  }),
58
- /* @__PURE__ */ c(a, {
99
+ /* @__PURE__ */ u(s, {
59
100
  path: "*",
60
- element: /* @__PURE__ */ c(i, {
101
+ element: /* @__PURE__ */ u(o, {
61
102
  to: "",
62
103
  replace: !0
63
104
  })
@@ -67,6 +108,6 @@ var d = r(() => import("./pages/programs/ProgramsPage.js").then((e) => ({ defaul
67
108
  });
68
109
  };
69
110
  //#endregion
70
- export { x as MyBodyShieldRoutes };
111
+ export { w as MyBodyShieldRoutes };
71
112
 
72
113
  //# sourceMappingURL=MyBodyShieldRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MyBodyShieldRoutes.js","names":[],"sources":["../../src/mybodyshield/MyBodyShieldRoutes.tsx"],"sourcesContent":["/**\n * MyBodyShield Routes\n * @module mybodyshield\n *\n * Domain routes. The dashboard is eager-loaded (primary landing); all other\n * pages are lazy-loaded. Every route maps to a real `myb*` backend capability.\n */\n\nimport { type FC, lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router-dom';\nimport { Spinner } from '@burdenoff/fe-libs/ui';\nimport { useMyBodyShield } from './context/MyBodyShieldContext';\n\n// Eager — primary landing\nimport { DashboardPage } from './pages/DashboardPage';\n\n// Programs (Training)\nconst ProgramsPage = lazy(() =>\n import('./pages/programs/ProgramsPage').then((m) => ({ default: m.ProgramsPage }))\n);\nconst ProgramDetailPage = lazy(() =>\n import('./pages/programs/ProgramDetailPage').then((m) => ({ default: m.ProgramDetailPage }))\n);\n\n// Train (live workout sessions & sets)\nconst SessionsPage = lazy(() =>\n import('./pages/train/SessionsPage').then((m) => ({ default: m.SessionsPage }))\n);\nconst SessionDetailPage = lazy(() =>\n import('./pages/train/SessionDetailPage').then((m) => ({ default: m.SessionDetailPage }))\n);\n\n// Nutrition (plans, meals, macros)\nconst NutritionPage = lazy(() =>\n import('./pages/nutrition/NutritionPage').then((m) => ({ default: m.NutritionPage }))\n);\n\n// Goals (Progress)\nconst GoalsPage = lazy(() =>\n import('./pages/goals/GoalsPage').then((m) => ({ default: m.GoalsPage }))\n);\n\n// Progress (body metrics)\nconst ProgressPage = lazy(() =>\n import('./pages/progress/ProgressPage').then((m) => ({ default: m.ProgressPage }))\n);\n\n// Recovery (Wellbeing)\nconst RecoveryPage = lazy(() =>\n import('./pages/recovery/RecoveryPage').then((m) => ({ default: m.RecoveryPage }))\n);\n\n// Coaching (Wellbeing)\nconst CoachingPage = lazy(() =>\n import('./pages/coaching/CoachingPage').then((m) => ({ default: m.CoachingPage }))\n);\n\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Spinner size=\"lg\" />\n </div>\n);\n\nexport const MyBodyShieldRoutes: FC = () => {\n const { basePath, isStandalone } = useMyBodyShield();\n const location = useLocation();\n\n const normalizedBasePath = basePath === '/' ? '' : (basePath ?? '').replace(/\\/$/, '');\n\n // Guard: only render if the current path matches basePath (integrated mode).\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardPage />} />\n\n <Route path=\"programs\" element={<ProgramsPage />} />\n <Route path=\"programs/:id\" element={<ProgramDetailPage />} />\n\n <Route path=\"train\" element={<SessionsPage />} />\n <Route path=\"train/:id\" element={<SessionDetailPage />} />\n\n <Route path=\"nutrition\" element={<NutritionPage />} />\n\n <Route path=\"goals\" element={<GoalsPage />} />\n\n <Route path=\"progress\" element={<ProgressPage />} />\n\n <Route path=\"recovery\" element={<RecoveryPage />} />\n\n <Route path=\"coaching\" element={<CoachingPage />} />\n\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":";;;;;;;AAiBA,IAAM,IAAe,QACnB,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CACnF,EACK,IAAoB,QACxB,OAAO,yCAAsC,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAC7F,EAGK,IAAe,QACnB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAChF,EACK,IAAoB,QACxB,OAAO,sCAAmC,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAC1F,EAGK,IAAgB,QACpB,OAAO,sCAAmC,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CACtF,EAGK,IAAY,QAChB,OAAO,8BAA2B,MAAM,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAC1E,EAGK,IAAe,QACnB,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CACnF,EAGK,IAAe,QACnB,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CACnF,EAGK,IAAe,QACnB,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CACnF,EAEK,UACJ,kBAAC,OAAD;CAAK,WAAU;WACb,kBAAC,GAAD,EAAS,MAAK,MAAO,CAAA;CACjB,CAAA,EAGK,UAA+B;CAC1C,IAAM,EAAE,aAAU,oBAAiB,GAAiB,EAC9C,IAAW,GAAa,EAExB,IAAqB,MAAa,MAAM,MAAM,KAAY,IAAI,QAAQ,OAAO,GAAG;AAYtF,QATI,KAAsB,CAAC,KAIrB,EAFF,EAAS,aAAa,KACtB,EAAS,SAAS,WAAW,IAAqB,IAAI,IAE/C,OAKT,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;aAChC,kBAAC,GAAD,EAAA,UAAA;IACE,kBAAC,GAAD;KAAO,OAAA;KAAM,SAAS,kBAAC,GAAD,EAAiB,CAAA;KAAI,CAAA;IAE3C,kBAAC,GAAD;KAAO,MAAK;KAAW,SAAS,kBAAC,GAAD,EAAgB,CAAA;KAAI,CAAA;IACpD,kBAAC,GAAD;KAAO,MAAK;KAAe,SAAS,kBAAC,GAAD,EAAqB,CAAA;KAAI,CAAA;IAE7D,kBAAC,GAAD;KAAO,MAAK;KAAQ,SAAS,kBAAC,GAAD,EAAgB,CAAA;KAAI,CAAA;IACjD,kBAAC,GAAD;KAAO,MAAK;KAAY,SAAS,kBAAC,GAAD,EAAqB,CAAA;KAAI,CAAA;IAE1D,kBAAC,GAAD;KAAO,MAAK;KAAY,SAAS,kBAAC,GAAD,EAAiB,CAAA;KAAI,CAAA;IAEtD,kBAAC,GAAD;KAAO,MAAK;KAAQ,SAAS,kBAAC,GAAD,EAAa,CAAA;KAAI,CAAA;IAE9C,kBAAC,GAAD;KAAO,MAAK;KAAW,SAAS,kBAAC,GAAD,EAAgB,CAAA;KAAI,CAAA;IAEpD,kBAAC,GAAD;KAAO,MAAK;KAAW,SAAS,kBAAC,GAAD,EAAgB,CAAA;KAAI,CAAA;IAEpD,kBAAC,GAAD;KAAO,MAAK;KAAW,SAAS,kBAAC,GAAD,EAAgB,CAAA;KAAI,CAAA;IAEpD,kBAAC,GAAD;KAAO,MAAK;KAAI,SAAS,kBAAC,GAAD;MAAU,IAAG;MAAG,SAAA;MAAU,CAAA;KAAI,CAAA;IAChD,EAAA,CAAA;GACA,CAAA;EACP,CAAA"}
1
+ {"version":3,"file":"MyBodyShieldRoutes.js","names":[],"sources":["../../src/mybodyshield/MyBodyShieldRoutes.tsx"],"sourcesContent":["/**\n * MyBodyShield Routes\n * @module mybodyshield\n *\n * Domain routes. The dashboard is eager-loaded (primary landing); all other\n * pages are lazy-loaded. Every route maps to a real `myb*` backend capability.\n */\n\nimport { type FC, lazy, Suspense, type ReactNode } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router-dom';\nimport { Spinner } from '@burdenoff/fe-libs/ui';\nimport { useMyBodyShield } from './context/MyBodyShieldContext';\nimport { FeatureFlagGuard, PageDisabled } from './components';\n\n// Eager — primary landing\nimport { DashboardPage } from './pages/DashboardPage';\n\n// Programs (Training)\nconst ProgramsPage = lazy(() =>\n import('./pages/programs/ProgramsPage').then((m) => ({ default: m.ProgramsPage }))\n);\nconst ProgramDetailPage = lazy(() =>\n import('./pages/programs/ProgramDetailPage').then((m) => ({ default: m.ProgramDetailPage }))\n);\n\n// Train (live workout sessions & sets)\nconst SessionsPage = lazy(() =>\n import('./pages/train/SessionsPage').then((m) => ({ default: m.SessionsPage }))\n);\nconst SessionDetailPage = lazy(() =>\n import('./pages/train/SessionDetailPage').then((m) => ({ default: m.SessionDetailPage }))\n);\n\n// Nutrition (plans, meals, macros)\nconst NutritionPage = lazy(() =>\n import('./pages/nutrition/NutritionPage').then((m) => ({ default: m.NutritionPage }))\n);\n\n// Goals (Progress)\nconst GoalsPage = lazy(() =>\n import('./pages/goals/GoalsPage').then((m) => ({ default: m.GoalsPage }))\n);\n\n// Progress (body metrics)\nconst ProgressPage = lazy(() =>\n import('./pages/progress/ProgressPage').then((m) => ({ default: m.ProgressPage }))\n);\n\n// Recovery (Wellbeing)\nconst RecoveryPage = lazy(() =>\n import('./pages/recovery/RecoveryPage').then((m) => ({ default: m.RecoveryPage }))\n);\n\n// Coaching (Wellbeing)\nconst CoachingPage = lazy(() =>\n import('./pages/coaching/CoachingPage').then((m) => ({ default: m.CoachingPage }))\n);\n\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Spinner size=\"lg\" />\n </div>\n);\n\n/** Wrap a page element with its feature-flag gate + analytics page-view. */\nfunction PageGate({ page, children }: { page: string; children: ReactNode }): React.ReactElement {\n const title = page\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n return (\n <FeatureFlagGuard page={page} fallback={<PageDisabled title={title} />}>\n {children}\n </FeatureFlagGuard>\n );\n}\n\nexport const MyBodyShieldRoutes: FC = () => {\n const { basePath, isStandalone } = useMyBodyShield();\n const location = useLocation();\n\n const normalizedBasePath = basePath === '/' ? '' : (basePath ?? '').replace(/\\/$/, '');\n\n // Guard: only render if the current path matches basePath (integrated mode).\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route\n index\n element={\n <PageGate page=\"dashboard\">\n <DashboardPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"programs\"\n element={\n <PageGate page=\"programs\">\n <ProgramsPage />\n </PageGate>\n }\n />\n <Route\n path=\"programs/:id\"\n element={\n <PageGate page=\"program_detail\">\n <ProgramDetailPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"train\"\n element={\n <PageGate page=\"train\">\n <SessionsPage />\n </PageGate>\n }\n />\n <Route\n path=\"train/:id\"\n element={\n <PageGate page=\"session_detail\">\n <SessionDetailPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"nutrition\"\n element={\n <PageGate page=\"nutrition\">\n <NutritionPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"goals\"\n element={\n <PageGate page=\"goals\">\n <GoalsPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"progress\"\n element={\n <PageGate page=\"progress\">\n <ProgressPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"recovery\"\n element={\n <PageGate page=\"recovery\">\n <RecoveryPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"coaching\"\n element={\n <PageGate page=\"coaching\">\n <CoachingPage />\n </PageGate>\n }\n />\n\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export interface Column<T> {
4
+ key: string;
5
+ header: ReactNode;
6
+ render: (row: T) => ReactNode;
7
+ align?: 'left' | 'right' | 'center';
8
+ className?: string;
9
+ /** Hide below the `md` breakpoint for a mobile-friendly layout. */
10
+ hideOnMobile?: boolean;
11
+ /** Provide to make this column click-sortable (returns a comparable value). */
12
+ sortValue?: (row: T) => string | number;
13
+ }
14
+ interface DataTableProps<T> {
15
+ columns: Column<T>[];
16
+ rows: T[];
17
+ rowKey: (row: T) => string;
18
+ onRowClick?: (row: T) => void;
19
+ className?: string;
20
+ /** Default sort: a column key + direction. */
21
+ defaultSort?: {
22
+ key: string;
23
+ dir: 'asc' | 'desc';
24
+ };
25
+ }
26
+ export declare function DataTable<T>({ columns, rows, rowKey, onRowClick, className, defaultSort, }: DataTableProps<T>): import("react").JSX.Element;
27
+ export {};
28
+ //# sourceMappingURL=DataTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/DataTable.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK1D,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC;CACzC;AAED,UAAU,cAAc,CAAC,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD;AAQD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,GACZ,EAAE,cAAc,CAAC,CAAC,CAAC,+BA+GnB"}
@@ -0,0 +1,18 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ interface EmptyStateProps {
4
+ icon?: ReactNode;
5
+ /**
6
+ * On-brand illustration name → `/illustrations/<name>.webp`. Standard names:
7
+ * empty-data, empty-search, empty-files, empty-people, empty-notifications,
8
+ * onboarding, empty-generic.
9
+ */
10
+ illustration?: string;
11
+ title: string;
12
+ description?: string;
13
+ action?: ReactNode;
14
+ className?: string;
15
+ }
16
+ export declare const EmptyState: FC<EmptyStateProps>;
17
+ export {};
18
+ //# sourceMappingURL=EmptyState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/EmptyState.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA8B1C,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { UploadedMybFile } from '../hooks';
2
+
3
+ interface EvidenceUploadProps {
4
+ id: string;
5
+ label: string;
6
+ value: UploadedMybFile | null;
7
+ onChange: (value: UploadedMybFile | null) => void;
8
+ accept?: string;
9
+ disabled?: boolean;
10
+ hint?: string;
11
+ }
12
+ export declare function EvidenceUpload({ id, label, value, onChange, accept, disabled, hint, }: EvidenceUploadProps): import("react").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=EvidenceUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvidenceUpload.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/EvidenceUpload.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAElE,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,CAAC,EAC7B,EAAE,EACF,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAA0C,EAC1C,QAAgB,EAChB,IAAI,GACL,EAAE,mBAAmB,+BAkFrB"}
@@ -0,0 +1,11 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ interface FeatureFlagGuardProps {
4
+ page: string;
5
+ flag?: string;
6
+ fallback: ReactNode;
7
+ children: ReactNode;
8
+ }
9
+ export declare const FeatureFlagGuard: FC<FeatureFlagGuardProps>;
10
+ export {};
11
+ //# sourceMappingURL=FeatureFlagGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureFlagGuard.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/FeatureFlagGuard.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAa,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK3D,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAetD,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { useMyBodyShield as e } from "../context/MyBodyShieldContext.js";
2
+ import "../context/index.js";
3
+ import { useMyBodyShieldAnalytics as t } from "../hooks/useMyBodyShieldAnalytics.js";
4
+ import "../hooks/index.js";
5
+ import { useEffect as n } from "react";
6
+ import { FeatureGate as r } from "@burdenoff/fe-libs/shared/feature-flags";
7
+ import { jsx as i } from "react/jsx-runtime";
8
+ //#region src/mybodyshield/components/FeatureFlagGuard.tsx
9
+ var a = ({ page: a, flag: o, fallback: s, children: c }) => {
10
+ let l = o ?? `mybodyshield.page.${a}`, { workspaceId: u } = e(), { emitPageView: d } = t();
11
+ return n(() => {
12
+ d(a, { workspaceId: u });
13
+ }, [
14
+ d,
15
+ a,
16
+ u
17
+ ]), /* @__PURE__ */ i(r, {
18
+ flag: l,
19
+ defaultValue: !0,
20
+ fallback: s,
21
+ children: c
22
+ });
23
+ };
24
+ //#endregion
25
+ export { a as FeatureFlagGuard };
26
+
27
+ //# sourceMappingURL=FeatureFlagGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureFlagGuard.js","names":[],"sources":["../../../src/mybodyshield/components/FeatureFlagGuard.tsx"],"sourcesContent":["/**\n * FeatureFlagGuard — wraps a MyBodyShield page with analytics + feature gating.\n * @module mybodyshield/components\n *\n * The page body is passed as a child so its hooks only run when the feature flag\n * is enabled (default-allow). Page-view analytics fire once regardless of flag\n * state so product telemetry stays accurate.\n */\n\nimport { useEffect, type FC, type ReactNode } from 'react';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useMyBodyShield } from '../context';\nimport { useMyBodyShieldAnalytics } from '../hooks';\n\ninterface FeatureFlagGuardProps {\n page: string;\n flag?: string;\n fallback: ReactNode;\n children: ReactNode;\n}\n\nexport const FeatureFlagGuard: FC<FeatureFlagGuardProps> = ({ page, flag, fallback, children }) => {\n const key = flag ?? `mybodyshield.page.${page}`;\n const { workspaceId } = useMyBodyShield();\n const { emitPageView } = useMyBodyShieldAnalytics();\n\n // Fire the page-view event once, even if the feature is disabled.\n useEffect(() => {\n emitPageView(page, { workspaceId });\n }, [emitPageView, page, workspaceId]);\n\n return (\n <FeatureGate flag={key} defaultValue={true} fallback={fallback}>\n {children}\n </FeatureGate>\n );\n};\n"],"mappings":";;;;;;;;AAqBA,IAAa,KAA+C,EAAE,SAAM,SAAM,aAAU,kBAAe;CACjG,IAAM,IAAM,KAAQ,qBAAqB,KACnC,EAAE,mBAAgB,GAAiB,EACnC,EAAE,oBAAiB,GAA0B;AAOnD,QAJA,QAAgB;AACd,IAAa,GAAM,EAAE,gBAAa,CAAC;IAClC;EAAC;EAAc;EAAM;EAAY,CAAC,EAGnC,kBAAC,GAAD;EAAa,MAAM;EAAK,cAAc;EAAgB;EACnD;EACW,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * FileLink — resolves a federated File id to a download link (Integration A).
3
+ * @module mybodyshield/components/FileLink
4
+ *
5
+ * The eco queries select `evidence { id }` / `file { id }` (just the id). This
6
+ * resolves the platform File via `getFile(id)` for its name + signed
7
+ * `downloadUrl` so evidence/report artifacts render as a real link.
8
+ */
9
+ interface FileLinkProps {
10
+ fileId: string | null | undefined;
11
+ className?: string;
12
+ }
13
+ export declare function FileLink({ fileId, className }: FileLinkProps): import("react").JSX.Element | null;
14
+ export {};
15
+ //# sourceMappingURL=FileLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileLink.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/FileLink.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa,sCA0C5D"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * FilterTabs — a segmented status/enum filter control.
3
+ * @module mybodyshield/components
4
+ */
5
+ export interface FilterOption<V extends string> {
6
+ value: V;
7
+ label: string;
8
+ count?: number;
9
+ }
10
+ interface FilterTabsProps<V extends string> {
11
+ options: FilterOption<V>[];
12
+ value: V;
13
+ onChange: (value: V) => void;
14
+ className?: string;
15
+ }
16
+ export declare function FilterTabs<V extends string>({ options, value, onChange, className, }: FilterTabsProps<V>): import("react").JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=FilterTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTabs.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/FilterTabs.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM;IAC5C,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe,CAAC,CAAC,SAAS,MAAM;IACxC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,EAC3C,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,eAAe,CAAC,CAAC,CAAC,+BAyCpB"}
@@ -0,0 +1,23 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { TrendDirection } from '../types';
3
+
4
+ type Accent = 'success' | 'warning' | 'error';
5
+ interface MetricsCardProps {
6
+ icon: ReactNode;
7
+ value: string | number;
8
+ label: string;
9
+ trend?: TrendDirection;
10
+ trendValue?: string;
11
+ className?: string;
12
+ /** Render as the page's hero metric (glass treatment + accent glow). */
13
+ featured?: boolean;
14
+ /** Severity accent — tints the icon and adds a soft top-edge glow. */
15
+ accent?: Accent;
16
+ /** Optional pill shown in the top-right (e.g. "Critical"). */
17
+ pill?: ReactNode;
18
+ /** Optional slot under the value (e.g. a MiniBar or sub-label). */
19
+ footer?: ReactNode;
20
+ }
21
+ export declare const MetricsCard: FC<MetricsCardProps>;
22
+ export {};
23
+ //# sourceMappingURL=MetricsCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCard.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/MetricsCard.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9C,UAAU,gBAAgB;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAoBD,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAsC5C,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * MiniBar — a thin inline progress bar (target progress, completion, breach %).
3
+ * @module mybodyshield/components
4
+ */
5
+ interface MiniBarProps {
6
+ /** 0–100. */
7
+ value: number;
8
+ className?: string;
9
+ /** Bar fill token class (defaults to accent). */
10
+ barClassName?: string;
11
+ /** Height in px. */
12
+ height?: number;
13
+ }
14
+ export declare function MiniBar({ value, className, barClassName, height, }: MiniBarProps): import("react").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=MiniBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniBar.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/MiniBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,UAAU,YAAY;IACpB,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,SAAS,EACT,YAA0B,EAC1B,MAAU,GACX,EAAE,YAAY,+BAiBd"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * MybDiscussion — a comment thread on any mybodyshield entity (Integration B).
3
+ * @module mybodyshield/components/MybDiscussion
4
+ *
5
+ * Reuses the platform EntityComment API (`getEntityComments` /
6
+ * `createEntityComment`) keyed by `(entityType, entityId)` — no mybodyshield-svc change.
7
+ * Renders root comments (author, body, time) + a composer. Robust to empty
8
+ * state and errors.
9
+ */
10
+ interface MybDiscussionProps {
11
+ entityType: string;
12
+ entityId: string;
13
+ title?: string;
14
+ description?: string;
15
+ }
16
+ export declare function MybDiscussion({ entityType, entityId, title, description, }: MybDiscussionProps): import("react").JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=MybDiscussion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MybDiscussion.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/MybDiscussion.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,UAAU,kBAAkB;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,QAAQ,EACR,KAAoB,EACpB,WAAkE,GACnE,EAAE,kBAAkB,+BAoGpB"}
@@ -1,7 +1,7 @@
1
1
  import { useMyBodyShield as e } from "../context/MyBodyShieldContext.js";
2
2
  import { formatDateTime as t } from "../utils/formatters.js";
3
- import { ErrorView as n, LoadingView as r, Section as i } from "./StateViews.js";
4
- import { EmptyState as a } from "./EmptyState.js";
3
+ import { EmptyState as n } from "./EmptyState.js";
4
+ import { ErrorView as r, LoadingView as i, Section as a } from "./StateViews.js";
5
5
  import "../context/index.js";
6
6
  import { useMybComments as o, useMybCreateComment as s } from "../hooks/useMybComments.js";
7
7
  import "../hooks/index.js";
@@ -31,7 +31,7 @@ function _({ entityType: _, entityId: v, title: y = "Discussion", description: b
31
31
  }
32
32
  }
33
33
  }, P = S?.items ?? [];
34
- return /* @__PURE__ */ d(i, {
34
+ return /* @__PURE__ */ d(a, {
35
35
  title: y,
36
36
  description: b,
37
37
  children: /* @__PURE__ */ f("div", {
@@ -63,10 +63,10 @@ function _({ entityType: _, entityId: v, title: y = "Discussion", description: b
63
63
  })]
64
64
  }), /* @__PURE__ */ d("div", {
65
65
  className: "mt-4 border-t border-border-seam pt-4",
66
- children: C ? /* @__PURE__ */ d(r, { label: "Loading discussion…" }) : w ? /* @__PURE__ */ d(n, {
66
+ children: C ? /* @__PURE__ */ d(i, { label: "Loading discussion…" }) : w ? /* @__PURE__ */ d(r, {
67
67
  message: "Couldn't load the discussion.",
68
68
  onRetry: () => T()
69
- }) : P.length === 0 ? /* @__PURE__ */ d(a, {
69
+ }) : P.length === 0 ? /* @__PURE__ */ d(n, {
70
70
  illustration: "empty-data",
71
71
  icon: /* @__PURE__ */ d(l, { className: "h-9 w-9" }),
72
72
  title: "No comments yet",
@@ -0,0 +1,17 @@
1
+ /**
2
+ * MybTags — a lightweight tag control for mybodyshield entities (Integration C).
3
+ * @module mybodyshield/components/MybTags
4
+ *
5
+ * The mybodyshield svc exposes no tags field, so this drives the platform tag store
6
+ * directly: `getEntityTags` (display), `searchTags` (+ `createTag`) to pick or
7
+ * create, `assignTag`/`removeTagAssignment` to link — all via the workspace
8
+ * gateway. No mybodyshield-svc change.
9
+ */
10
+ interface MybTagsProps {
11
+ entityType: string;
12
+ entityId: string;
13
+ label?: string;
14
+ }
15
+ export declare function MybTags({ entityType, entityId, label }: MybTagsProps): import("react").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=MybTags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MybTags.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/MybTags.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoBH,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,OAAO,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAc,EAAE,EAAE,YAAY,+BAuL7E"}
@@ -0,0 +1,9 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ interface PageDisabledProps {
4
+ title: string;
5
+ icon?: ReactNode;
6
+ }
7
+ export declare const PageDisabled: FC<PageDisabledProps>;
8
+ export {};
9
+ //# sourceMappingURL=PageDisabled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageDisabled.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/PageDisabled.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAS9C,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { PageLayout as e } from "./PageLayout.js";
2
+ import { EmptyState as t } from "./EmptyState.js";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ //#region src/mybodyshield/components/PageDisabled.tsx
5
+ var r = ({ title: r, icon: i }) => /* @__PURE__ */ n(e, {
6
+ title: r,
7
+ children: /* @__PURE__ */ n(t, {
8
+ illustration: "empty-generic",
9
+ icon: i,
10
+ title: `${r} is currently unavailable`,
11
+ description: "This feature has been temporarily disabled. Check back later."
12
+ })
13
+ });
14
+ //#endregion
15
+ export { r as PageDisabled };
16
+
17
+ //# sourceMappingURL=PageDisabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageDisabled.js","names":[],"sources":["../../../src/mybodyshield/components/PageDisabled.tsx"],"sourcesContent":["/**\n * PageDisabled — generic fallback when a MyBodyShield page is feature-flagged off.\n * @module mybodyshield/components\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { PageLayout } from './PageLayout';\nimport { EmptyState } from './EmptyState';\n\ninterface PageDisabledProps {\n title: string;\n icon?: ReactNode;\n}\n\nexport const PageDisabled: FC<PageDisabledProps> = ({ title, icon }) => (\n <PageLayout title={title}>\n <EmptyState\n illustration=\"empty-generic\"\n icon={icon}\n title={`${title} is currently unavailable`}\n description=\"This feature has been temporarily disabled. Check back later.\"\n />\n </PageLayout>\n);\n"],"mappings":";;;;AAcA,IAAa,KAAuC,EAAE,UAAO,cAC3D,kBAAC,GAAD;CAAmB;WACjB,kBAAC,GAAD;EACE,cAAa;EACP;EACN,OAAO,GAAG,EAAM;EAChB,aAAY;EACZ,CAAA;CACS,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ interface PageLayoutProps {
4
+ title: ReactNode;
5
+ description?: string;
6
+ actions?: ReactNode;
7
+ children: ReactNode;
8
+ className?: string;
9
+ /** Render the title as a gradient hero heading (reserve for the ONE primary page). */
10
+ titleGradient?: boolean;
11
+ /** Drop a subtle living-glass aurora behind the header (primary page only). */
12
+ aurora?: boolean;
13
+ }
14
+ export declare const PageLayout: FC<PageLayoutProps>;
15
+ export {};
16
+ //# sourceMappingURL=PageLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageLayout.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/components/PageLayout.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAoC1C,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Pagination — offset-based Prev/Next control for Myb* connection lists.
3
+ * @module mybodyshield/components
4
+ *
5
+ * The svc list connections return `pageInfo { cursor, hasMore }` and paginate by
6
+ * cursor (offset is a no-op). Pages track a 0-indexed `page` for display and a
7
+ * cursor stack for navigation; this control exposes Prev/Next, disabling Prev on
8
+ * page 0 and Next when the server reports no more rows.
9
+ */
10
+ interface PaginationProps {
11
+ page: number;
12
+ pageSize: number;
13
+ /** Number of rows on the current page. */
14
+ itemCount: number;
15
+ /** Server flag: are there more rows after this page? */
16
+ hasMore: boolean;
17
+ onPageChange: (page: number) => void;
18
+ className?: string;
19
+ }
20
+ export declare function Pagination({ page, pageSize, itemCount, hasMore, onPageChange, className, }: PaginationProps): import("react").JSX.Element | null;
21
+ export {};
22
+ //# sourceMappingURL=Pagination.d.ts.map