@burdenoff/microfe-mybodyshield 2026.830.1 → 2026.1026.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mybodyshield/MyBodyShieldRoutes.d.ts.map +1 -1
- package/dist/mybodyshield/MyBodyShieldRoutes.js +35 -24
- package/dist/mybodyshield/MyBodyShieldRoutes.js.map +1 -1
- package/dist/mybodyshield/components/FilterTabs.js +1 -1
- package/dist/mybodyshield/components/FilterTabs.js.map +1 -1
- package/dist/mybodyshield/hooks/useMyBodyShieldApi.d.ts +4 -1
- package/dist/mybodyshield/hooks/useMyBodyShieldApi.d.ts.map +1 -1
- package/dist/mybodyshield/hooks/useMyBodyShieldApi.js +85 -60
- package/dist/mybodyshield/hooks/useMyBodyShieldApi.js.map +1 -1
- package/dist/mybodyshield/pages/insights/InsightsPage.js +1 -1
- package/dist/mybodyshield/pages/insights/InsightsPage.js.map +1 -1
- package/dist/mybodyshield/pages/recovery/MindfulnessPage.d.ts +2 -0
- package/dist/mybodyshield/pages/recovery/MindfulnessPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/recovery/MindfulnessPage.js +181 -0
- package/dist/mybodyshield/pages/recovery/MindfulnessPage.js.map +1 -0
- package/dist/mybodyshield/pages/recovery/RecoveryPage.d.ts.map +1 -1
- package/dist/mybodyshield/pages/recovery/RecoveryPage.js +210 -201
- package/dist/mybodyshield/pages/recovery/RecoveryPage.js.map +1 -1
- package/dist/mybodyshield/types/index.d.ts +31 -0
- package/dist/mybodyshield/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +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;
|
|
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;AA2GhE,eAAO,MAAM,kBAAkB,EAAE,EAoJhC,CAAC"}
|
|
@@ -10,10 +10,10 @@ import { Navigate as s, Route as c, Routes as l, useLocation as u } from "react-
|
|
|
10
10
|
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
11
11
|
import { Spinner as p } from "@burdenoff/fe-libs/ui";
|
|
12
12
|
//#region src/mybodyshield/MyBodyShieldRoutes.tsx
|
|
13
|
-
var m = o(() => import("./pages/programs/ProgramsPage.js").then((e) => ({ default: e.ProgramsPage }))), h = o(() => import("./pages/programs/ProgramDetailPage.js").then((e) => ({ default: e.ProgramDetailPage }))), g = o(() => import("./pages/train/SessionsPage.js").then((e) => ({ default: e.SessionsPage }))), _ = o(() => import("./pages/train/SessionDetailPage.js").then((e) => ({ default: e.SessionDetailPage }))), v = o(() => import("./pages/nutrition/NutritionPage.js").then((e) => ({ default: e.NutritionPage }))), y = o(() => import("./pages/goals/GoalsPage.js").then((e) => ({ default: e.GoalsPage }))), b = o(() => import("./pages/progress/ProgressPage.js").then((e) => ({ default: e.ProgressPage }))), x = o(() => import("./pages/recovery/RecoveryPage.js").then((e) => ({ default: e.RecoveryPage }))), S = o(() => import("./pages/insights/InsightsPage.js").then((e) => ({ default: e.InsightsPage }))),
|
|
13
|
+
var m = o(() => import("./pages/programs/ProgramsPage.js").then((e) => ({ default: e.ProgramsPage }))), h = o(() => import("./pages/programs/ProgramDetailPage.js").then((e) => ({ default: e.ProgramDetailPage }))), g = o(() => import("./pages/train/SessionsPage.js").then((e) => ({ default: e.SessionsPage }))), _ = o(() => import("./pages/train/SessionDetailPage.js").then((e) => ({ default: e.SessionDetailPage }))), v = o(() => import("./pages/nutrition/NutritionPage.js").then((e) => ({ default: e.NutritionPage }))), y = o(() => import("./pages/goals/GoalsPage.js").then((e) => ({ default: e.GoalsPage }))), b = o(() => import("./pages/progress/ProgressPage.js").then((e) => ({ default: e.ProgressPage }))), x = o(() => import("./pages/recovery/RecoveryPage.js").then((e) => ({ default: e.RecoveryPage }))), S = o(() => import("./pages/recovery/MindfulnessPage.js").then((e) => ({ default: e.MindfulnessPage }))), C = o(() => import("./pages/insights/InsightsPage.js").then((e) => ({ default: e.InsightsPage }))), w = o(() => import("./pages/coaching/CoachingPage.js").then((e) => ({ default: e.CoachingPage }))), T = o(() => import("./pages/ai/AiControlsPage.js").then((e) => ({ default: e.AiControlsPage }))), E = o(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), D = () => /* @__PURE__ */ d("div", {
|
|
14
14
|
className: "flex min-h-[400px] items-center justify-center",
|
|
15
15
|
children: /* @__PURE__ */ d(p, { size: "lg" })
|
|
16
|
-
}),
|
|
16
|
+
}), O = {
|
|
17
17
|
dashboard: {
|
|
18
18
|
key: "mybodyshield.pages.dashboard.title",
|
|
19
19
|
fallback: "Dashboard"
|
|
@@ -50,6 +50,10 @@ var m = o(() => import("./pages/programs/ProgramsPage.js").then((e) => ({ defaul
|
|
|
50
50
|
key: "mybodyshield.pages.recovery.title",
|
|
51
51
|
fallback: "Recovery"
|
|
52
52
|
},
|
|
53
|
+
mindfulness: {
|
|
54
|
+
key: "mybodyshield.mindfulness.title",
|
|
55
|
+
fallback: "Mindfulness"
|
|
56
|
+
},
|
|
53
57
|
insights: {
|
|
54
58
|
key: "mybodyshield.pages.insights.title",
|
|
55
59
|
fallback: "Insights"
|
|
@@ -67,8 +71,8 @@ var m = o(() => import("./pages/programs/ProgramsPage.js").then((e) => ({ defaul
|
|
|
67
71
|
fallback: "Settings"
|
|
68
72
|
}
|
|
69
73
|
};
|
|
70
|
-
function
|
|
71
|
-
let a = t(), { key: o, fallback: s } =
|
|
74
|
+
function k({ page: e, children: i }) {
|
|
75
|
+
let a = t(), { key: o, fallback: s } = O[e] ?? {
|
|
72
76
|
key: `mybodyshield.pages.${e}.title`,
|
|
73
77
|
fallback: e
|
|
74
78
|
};
|
|
@@ -78,102 +82,109 @@ function O({ page: e, children: i }) {
|
|
|
78
82
|
children: i
|
|
79
83
|
});
|
|
80
84
|
}
|
|
81
|
-
var
|
|
85
|
+
var A = () => {
|
|
82
86
|
let { basePath: t, isStandalone: n } = e(), r = u(), o = t === "/" ? "" : (t ?? "").replace(/\/$/, "");
|
|
83
87
|
return o && !n && !(r.pathname === o || r.pathname.startsWith(o + "/")) ? null : /* @__PURE__ */ d("div", {
|
|
84
88
|
className: "flex min-h-full flex-col",
|
|
85
89
|
children: /* @__PURE__ */ d(a, {
|
|
86
|
-
fallback: /* @__PURE__ */ d(
|
|
90
|
+
fallback: /* @__PURE__ */ d(D, {}),
|
|
87
91
|
children: /* @__PURE__ */ f(l, { children: [
|
|
88
92
|
/* @__PURE__ */ d(c, {
|
|
89
93
|
index: !0,
|
|
90
|
-
element: /* @__PURE__ */ d(
|
|
94
|
+
element: /* @__PURE__ */ d(k, {
|
|
91
95
|
page: "dashboard",
|
|
92
96
|
children: /* @__PURE__ */ d(i, {})
|
|
93
97
|
})
|
|
94
98
|
}),
|
|
95
99
|
/* @__PURE__ */ d(c, {
|
|
96
100
|
path: "programs",
|
|
97
|
-
element: /* @__PURE__ */ d(
|
|
101
|
+
element: /* @__PURE__ */ d(k, {
|
|
98
102
|
page: "programs",
|
|
99
103
|
children: /* @__PURE__ */ d(m, {})
|
|
100
104
|
})
|
|
101
105
|
}),
|
|
102
106
|
/* @__PURE__ */ d(c, {
|
|
103
107
|
path: "programs/:id",
|
|
104
|
-
element: /* @__PURE__ */ d(
|
|
108
|
+
element: /* @__PURE__ */ d(k, {
|
|
105
109
|
page: "program_detail",
|
|
106
110
|
children: /* @__PURE__ */ d(h, {})
|
|
107
111
|
})
|
|
108
112
|
}),
|
|
109
113
|
/* @__PURE__ */ d(c, {
|
|
110
114
|
path: "train",
|
|
111
|
-
element: /* @__PURE__ */ d(
|
|
115
|
+
element: /* @__PURE__ */ d(k, {
|
|
112
116
|
page: "train",
|
|
113
117
|
children: /* @__PURE__ */ d(g, {})
|
|
114
118
|
})
|
|
115
119
|
}),
|
|
116
120
|
/* @__PURE__ */ d(c, {
|
|
117
121
|
path: "train/:id",
|
|
118
|
-
element: /* @__PURE__ */ d(
|
|
122
|
+
element: /* @__PURE__ */ d(k, {
|
|
119
123
|
page: "session_detail",
|
|
120
124
|
children: /* @__PURE__ */ d(_, {})
|
|
121
125
|
})
|
|
122
126
|
}),
|
|
123
127
|
/* @__PURE__ */ d(c, {
|
|
124
128
|
path: "nutrition",
|
|
125
|
-
element: /* @__PURE__ */ d(
|
|
129
|
+
element: /* @__PURE__ */ d(k, {
|
|
126
130
|
page: "nutrition",
|
|
127
131
|
children: /* @__PURE__ */ d(v, {})
|
|
128
132
|
})
|
|
129
133
|
}),
|
|
130
134
|
/* @__PURE__ */ d(c, {
|
|
131
135
|
path: "goals",
|
|
132
|
-
element: /* @__PURE__ */ d(
|
|
136
|
+
element: /* @__PURE__ */ d(k, {
|
|
133
137
|
page: "goals",
|
|
134
138
|
children: /* @__PURE__ */ d(y, {})
|
|
135
139
|
})
|
|
136
140
|
}),
|
|
137
141
|
/* @__PURE__ */ d(c, {
|
|
138
142
|
path: "progress",
|
|
139
|
-
element: /* @__PURE__ */ d(
|
|
143
|
+
element: /* @__PURE__ */ d(k, {
|
|
140
144
|
page: "progress",
|
|
141
145
|
children: /* @__PURE__ */ d(b, {})
|
|
142
146
|
})
|
|
143
147
|
}),
|
|
144
148
|
/* @__PURE__ */ d(c, {
|
|
145
149
|
path: "recovery",
|
|
146
|
-
element: /* @__PURE__ */ d(
|
|
150
|
+
element: /* @__PURE__ */ d(k, {
|
|
147
151
|
page: "recovery",
|
|
148
152
|
children: /* @__PURE__ */ d(x, {})
|
|
149
153
|
})
|
|
150
154
|
}),
|
|
155
|
+
/* @__PURE__ */ d(c, {
|
|
156
|
+
path: "mindfulness",
|
|
157
|
+
element: /* @__PURE__ */ d(k, {
|
|
158
|
+
page: "mindfulness",
|
|
159
|
+
children: /* @__PURE__ */ d(S, {})
|
|
160
|
+
})
|
|
161
|
+
}),
|
|
151
162
|
/* @__PURE__ */ d(c, {
|
|
152
163
|
path: "insights",
|
|
153
|
-
element: /* @__PURE__ */ d(
|
|
164
|
+
element: /* @__PURE__ */ d(k, {
|
|
154
165
|
page: "insights",
|
|
155
|
-
children: /* @__PURE__ */ d(
|
|
166
|
+
children: /* @__PURE__ */ d(C, {})
|
|
156
167
|
})
|
|
157
168
|
}),
|
|
158
169
|
/* @__PURE__ */ d(c, {
|
|
159
170
|
path: "coaching",
|
|
160
|
-
element: /* @__PURE__ */ d(
|
|
171
|
+
element: /* @__PURE__ */ d(k, {
|
|
161
172
|
page: "coaching",
|
|
162
|
-
children: /* @__PURE__ */ d(
|
|
173
|
+
children: /* @__PURE__ */ d(w, {})
|
|
163
174
|
})
|
|
164
175
|
}),
|
|
165
176
|
/* @__PURE__ */ d(c, {
|
|
166
177
|
path: "ai",
|
|
167
|
-
element: /* @__PURE__ */ d(
|
|
178
|
+
element: /* @__PURE__ */ d(k, {
|
|
168
179
|
page: "ai_controls",
|
|
169
|
-
children: /* @__PURE__ */ d(
|
|
180
|
+
children: /* @__PURE__ */ d(T, {})
|
|
170
181
|
})
|
|
171
182
|
}),
|
|
172
183
|
/* @__PURE__ */ d(c, {
|
|
173
184
|
path: "settings",
|
|
174
|
-
element: /* @__PURE__ */ d(
|
|
185
|
+
element: /* @__PURE__ */ d(k, {
|
|
175
186
|
page: "settings",
|
|
176
|
-
children: /* @__PURE__ */ d(
|
|
187
|
+
children: /* @__PURE__ */ d(E, {})
|
|
177
188
|
})
|
|
178
189
|
}),
|
|
179
190
|
/* @__PURE__ */ d(c, {
|
|
@@ -188,6 +199,6 @@ var k = () => {
|
|
|
188
199
|
});
|
|
189
200
|
};
|
|
190
201
|
//#endregion
|
|
191
|
-
export {
|
|
202
|
+
export { A as MyBodyShieldRoutes };
|
|
192
203
|
|
|
193
204
|
//# 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, type ReactNode } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router';\nimport { Spinner } from '@burdenoff/fe-libs/ui';\nimport { useMyBodyShield } from './context/MyBodyShieldContext';\nimport { FeatureFlagGuard, PageDisabled } from './components';\nimport { useTr } from './hooks';\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// Insights (unified analytics)\nconst InsightsPage = lazy(() =>\n import('./pages/insights/InsightsPage').then((m) => ({ default: m.InsightsPage }))\n);\n\n// Coaching (Wellbeing)\nconst CoachingPage = lazy(() =>\n import('./pages/coaching/CoachingPage').then((m) => ({ default: m.CoachingPage }))\n);\n\n// AI controls (BOFF-5949)\nconst AiControlsPage = lazy(() =>\n import('./pages/ai/AiControlsPage').then((m) => ({ default: m.AiControlsPage }))\n);\n\n// Settings (AI consent and product preferences)\nconst SettingsPage = lazy(() =>\n import('./pages/SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\n\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Spinner size=\"lg\" />\n </div>\n);\n\nconst PAGE_TITLE_KEYS: Record<string, { key: string; fallback: string }> = {\n dashboard: { key: 'mybodyshield.pages.dashboard.title', fallback: 'Dashboard' },\n programs: { key: 'mybodyshield.pages.programs.title', fallback: 'Programs' },\n program_detail: { key: 'mybodyshield.pages.programDetail.title', fallback: 'Program Detail' },\n train: { key: 'mybodyshield.pages.train.title', fallback: 'Train' },\n session_detail: { key: 'mybodyshield.pages.sessionDetail.title', fallback: 'Session Detail' },\n nutrition: { key: 'mybodyshield.pages.nutrition.title', fallback: 'Nutrition' },\n goals: { key: 'mybodyshield.pages.goals.title', fallback: 'Goals' },\n progress: { key: 'mybodyshield.pages.progress.title', fallback: 'Progress' },\n recovery: { key: 'mybodyshield.pages.recovery.title', fallback: 'Recovery' },\n insights: { key: 'mybodyshield.pages.insights.title', fallback: 'Insights' },\n coaching: { key: 'mybodyshield.pages.coaching.title', fallback: 'Coaching' },\n ai_controls: { key: 'mybodyshield.pages.aiControls.title', fallback: 'AI Controls' },\n settings: { key: 'mybodyshield.pages.settings.title', fallback: 'Settings' },\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 t = useTr();\n const { key, fallback } = PAGE_TITLE_KEYS[page] ?? {\n key: `mybodyshield.pages.${page}.title`,\n fallback: page,\n };\n const title = t(key, fallback);\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=\"insights\"\n element={\n <PageGate page=\"insights\">\n <InsightsPage />\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\n path=\"ai\"\n element={\n <PageGate page=\"ai_controls\">\n <AiControlsPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"settings\"\n element={\n <PageGate page=\"settings\">\n <SettingsPage />\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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"}
|
|
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';\nimport { Spinner } from '@burdenoff/fe-libs/ui';\nimport { useMyBodyShield } from './context/MyBodyShieldContext';\nimport { FeatureFlagGuard, PageDisabled } from './components';\nimport { useTr } from './hooks';\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);\nconst MindfulnessPage = lazy(() =>\n import('./pages/recovery/MindfulnessPage').then((m) => ({ default: m.MindfulnessPage }))\n);\n\n// Insights (unified analytics)\nconst InsightsPage = lazy(() =>\n import('./pages/insights/InsightsPage').then((m) => ({ default: m.InsightsPage }))\n);\n\n// Coaching (Wellbeing)\nconst CoachingPage = lazy(() =>\n import('./pages/coaching/CoachingPage').then((m) => ({ default: m.CoachingPage }))\n);\n\n// AI controls (BOFF-5949)\nconst AiControlsPage = lazy(() =>\n import('./pages/ai/AiControlsPage').then((m) => ({ default: m.AiControlsPage }))\n);\n\n// Settings (AI consent and product preferences)\nconst SettingsPage = lazy(() =>\n import('./pages/SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\n\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Spinner size=\"lg\" />\n </div>\n);\n\nconst PAGE_TITLE_KEYS: Record<string, { key: string; fallback: string }> = {\n dashboard: { key: 'mybodyshield.pages.dashboard.title', fallback: 'Dashboard' },\n programs: { key: 'mybodyshield.pages.programs.title', fallback: 'Programs' },\n program_detail: { key: 'mybodyshield.pages.programDetail.title', fallback: 'Program Detail' },\n train: { key: 'mybodyshield.pages.train.title', fallback: 'Train' },\n session_detail: { key: 'mybodyshield.pages.sessionDetail.title', fallback: 'Session Detail' },\n nutrition: { key: 'mybodyshield.pages.nutrition.title', fallback: 'Nutrition' },\n goals: { key: 'mybodyshield.pages.goals.title', fallback: 'Goals' },\n progress: { key: 'mybodyshield.pages.progress.title', fallback: 'Progress' },\n recovery: { key: 'mybodyshield.pages.recovery.title', fallback: 'Recovery' },\n mindfulness: { key: 'mybodyshield.mindfulness.title', fallback: 'Mindfulness' },\n insights: { key: 'mybodyshield.pages.insights.title', fallback: 'Insights' },\n coaching: { key: 'mybodyshield.pages.coaching.title', fallback: 'Coaching' },\n ai_controls: { key: 'mybodyshield.pages.aiControls.title', fallback: 'AI Controls' },\n settings: { key: 'mybodyshield.pages.settings.title', fallback: 'Settings' },\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 t = useTr();\n const { key, fallback } = PAGE_TITLE_KEYS[page] ?? {\n key: `mybodyshield.pages.${page}.title`,\n fallback: page,\n };\n const title = t(key, fallback);\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 <Route\n path=\"mindfulness\"\n element={\n <PageGate page=\"mindfulness\">\n <MindfulnessPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"insights\"\n element={\n <PageGate page=\"insights\">\n <InsightsPage />\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\n path=\"ai\"\n element={\n <PageGate page=\"ai_controls\">\n <AiControlsPage />\n </PageGate>\n }\n />\n\n <Route\n path=\"settings\"\n element={\n <PageGate page=\"settings\">\n <SettingsPage />\n </PageGate>\n }\n />\n\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAmBA,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,EACK,IAAkB,QACtB,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CACzF,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,IAAiB,QACrB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CACjF,EAGK,IAAe,QACnB,OAAO,2BAAwB,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAC1E,EAEK,UACJ,kBAAC,OAAD;CAAK,WAAU;WACb,kBAAC,GAAD,EAAS,MAAK,MAAO,CAAA;CACjB,CAAA,EAGF,IAAqE;CACzE,WAAW;EAAE,KAAK;EAAsC,UAAU;EAAa;CAC/E,UAAU;EAAE,KAAK;EAAqC,UAAU;EAAY;CAC5E,gBAAgB;EAAE,KAAK;EAA0C,UAAU;EAAkB;CAC7F,OAAO;EAAE,KAAK;EAAkC,UAAU;EAAS;CACnE,gBAAgB;EAAE,KAAK;EAA0C,UAAU;EAAkB;CAC7F,WAAW;EAAE,KAAK;EAAsC,UAAU;EAAa;CAC/E,OAAO;EAAE,KAAK;EAAkC,UAAU;EAAS;CACnE,UAAU;EAAE,KAAK;EAAqC,UAAU;EAAY;CAC5E,UAAU;EAAE,KAAK;EAAqC,UAAU;EAAY;CAC5E,aAAa;EAAE,KAAK;EAAkC,UAAU;EAAe;CAC/E,UAAU;EAAE,KAAK;EAAqC,UAAU;EAAY;CAC5E,UAAU;EAAE,KAAK;EAAqC,UAAU;EAAY;CAC5E,aAAa;EAAE,KAAK;EAAuC,UAAU;EAAe;CACpF,UAAU;EAAE,KAAK;EAAqC,UAAU;EAAY;CAC7E;AAGD,SAAS,EAAS,EAAE,SAAM,eAAuE;CAC/F,IAAM,IAAI,GAAO,EACX,EAAE,QAAK,gBAAa,EAAgB,MAAS;EACjD,KAAK,sBAAsB,EAAK;EAChC,UAAU;EACX;AAED,QACE,kBAAC,GAAD;EAAwB;EAAM,UAAU,kBAAC,GAAD,EAAqB,OAFjD,EAAE,GAAK,EAAS,EAE0C,CAAA;EACnE;EACgB,CAAA;;AAIvB,IAAa,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;KACE,OAAA;KACA,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAiB,CAAA;MACR,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAgB,CAAA;MACP,CAAA;KAEb,CAAA;IACF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAqB,CAAA;MACZ,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAgB,CAAA;MACP,CAAA;KAEb,CAAA;IACF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAqB,CAAA;MACZ,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAiB,CAAA;MACR,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAa,CAAA;MACJ,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAgB,CAAA;MACP,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAgB,CAAA;MACP,CAAA;KAEb,CAAA;IACF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAmB,CAAA;MACV,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAgB,CAAA;MACP,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAgB,CAAA;MACP,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAkB,CAAA;MACT,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KACE,MAAK;KACL,SACE,kBAAC,GAAD;MAAU,MAAK;gBACb,kBAAC,GAAD,EAAgB,CAAA;MACP,CAAA;KAEb,CAAA;IAEF,kBAAC,GAAD;KAAO,MAAK;KAAI,SAAS,kBAAC,GAAD;MAAU,IAAG;MAAG,SAAA;MAAU,CAAA;KAAI,CAAA;IAChD,EAAA,CAAA;GACA,CAAA;EACP,CAAA"}
|
|
@@ -14,7 +14,7 @@ function r({ options: r, value: i, onChange: a, className: o }) {
|
|
|
14
14
|
onClick: () => a(r.value),
|
|
15
15
|
className: e("rounded-lg px-3 py-1.5 text-sm font-medium transition-colors", o ? "bg-action-primary-bg text-action-primary-text" : "text-text-secondary hover:bg-bg-sunken hover:text-text-primary"),
|
|
16
16
|
children: [r.label, typeof r.count == "number" && /* @__PURE__ */ t("span", {
|
|
17
|
-
className: e("ml-1.5 rounded-full px-1.5 py-0.5 text-xs tabular-nums", o ? "bg-
|
|
17
|
+
className: e("ml-1.5 rounded-full px-1.5 py-0.5 text-xs tabular-nums", o ? "bg-bg-overlay" : "bg-bg-sunken"),
|
|
18
18
|
children: r.count
|
|
19
19
|
})]
|
|
20
20
|
}, r.value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterTabs.js","names":[],"sources":["../../../src/mybodyshield/components/FilterTabs.tsx"],"sourcesContent":["/**\n * FilterTabs — a segmented status/enum filter control.\n * @module mybodyshield/components\n */\n\nimport { cn } from '../utils/cn';\n\nexport interface FilterOption<V extends string> {\n value: V;\n label: string;\n count?: number;\n}\n\ninterface FilterTabsProps<V extends string> {\n options: FilterOption<V>[];\n value: V;\n onChange: (value: V) => void;\n className?: string;\n}\n\nexport function FilterTabs<V extends string>({\n options,\n value,\n onChange,\n className,\n}: FilterTabsProps<V>) {\n return (\n <div\n role=\"tablist\"\n className={cn(\n 'inline-flex flex-wrap items-center gap-1 rounded-xl border border-border-seam bg-bg-surface p-1',\n className\n )}\n >\n {options.map((opt) => {\n const active = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onChange(opt.value)}\n className={cn(\n 'rounded-lg px-3 py-1.5 text-sm font-medium transition-colors',\n active\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'text-text-secondary hover:bg-bg-sunken hover:text-text-primary'\n )}\n >\n {opt.label}\n {typeof opt.count === 'number' && (\n <span\n className={cn(\n 'ml-1.5 rounded-full px-1.5 py-0.5 text-xs tabular-nums',\n active ? 'bg-
|
|
1
|
+
{"version":3,"file":"FilterTabs.js","names":[],"sources":["../../../src/mybodyshield/components/FilterTabs.tsx"],"sourcesContent":["/**\n * FilterTabs — a segmented status/enum filter control.\n * @module mybodyshield/components\n */\n\nimport { cn } from '../utils/cn';\n\nexport interface FilterOption<V extends string> {\n value: V;\n label: string;\n count?: number;\n}\n\ninterface FilterTabsProps<V extends string> {\n options: FilterOption<V>[];\n value: V;\n onChange: (value: V) => void;\n className?: string;\n}\n\nexport function FilterTabs<V extends string>({\n options,\n value,\n onChange,\n className,\n}: FilterTabsProps<V>) {\n return (\n <div\n role=\"tablist\"\n className={cn(\n 'inline-flex flex-wrap items-center gap-1 rounded-xl border border-border-seam bg-bg-surface p-1',\n className\n )}\n >\n {options.map((opt) => {\n const active = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onChange(opt.value)}\n className={cn(\n 'rounded-lg px-3 py-1.5 text-sm font-medium transition-colors',\n active\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'text-text-secondary hover:bg-bg-sunken hover:text-text-primary'\n )}\n >\n {opt.label}\n {typeof opt.count === 'number' && (\n <span\n className={cn(\n 'ml-1.5 rounded-full px-1.5 py-0.5 text-xs tabular-nums',\n active ? 'bg-bg-overlay' : 'bg-bg-sunken'\n )}\n >\n {opt.count}\n </span>\n )}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;AAoBA,SAAgB,EAA6B,EAC3C,YACA,UACA,aACA,gBACqB;AACrB,QACE,kBAAC,OAAD;EACE,MAAK;EACL,WAAW,EACT,mGACA,EACD;YAEA,EAAQ,KAAK,MAAQ;GACpB,IAAM,IAAS,EAAI,UAAU;AAC7B,UACE,kBAAC,UAAD;IAEE,MAAK;IACL,MAAK;IACL,iBAAe;IACf,eAAe,EAAS,EAAI,MAAM;IAClC,WAAW,EACT,gEACA,IACI,kDACA,iEACL;cAXH,CAaG,EAAI,OACJ,OAAO,EAAI,SAAU,YACpB,kBAAC,QAAD;KACE,WAAW,EACT,0DACA,IAAS,kBAAkB,eAC5B;eAEA,EAAI;KACA,CAAA,CAEF;MAvBF,EAAI,MAuBF;IAEX;EACE,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MybConnection, MybProgram, MybProgramStatus, MybWorkout, MybExercise, MybWorkoutSession, MybSessionStatus, MybSessionSet, MybGoal, MybGoalStatus, MybMealLog, MybMealType, MybNutritionPlan, MybDailyMacros, MybBodyMetric, MybBodyMetricType, MybRecoveryLog, MybRecoveryMetric, MybCoachingRelationship, MybCoachingStatus, MybCreateProgramInput, MybUpdateProgramInput, MybCreateWorkoutInput, MybCreateExerciseInput, MybStartSessionInput, MybLogSetInput, MybCompleteSessionInput, MybCreateGoalInput, MybUpdateGoalInput, MybCreateNutritionPlanInput, MybUpdateNutritionPlanInput, MybLogMealInput, MybRecordMetricInput, MybLogRecoveryInput, MybCreateCoachingInput, PaginationInput, MybDeviceConnection, MybDeviceProvider, MybWearableMetricType, MybTodayGuidance, MybFood, MybInsights, MybAiSettings, MybAiOperationLogConnection, MybUpdateAiSettingsInput, MybAiProcessingConsent } from '../types';
|
|
1
|
+
import { MybConnection, MybProgram, MybProgramStatus, MybWorkout, MybExercise, MybWorkoutSession, MybSessionStatus, MybSessionSet, MybGoal, MybGoalStatus, MybMealLog, MybMealType, MybNutritionPlan, MybDailyMacros, MybBodyMetric, MybBodyMetricType, MybRecoveryLog, MybRecoveryMetric, MybCoachingRelationship, MybCoachingStatus, MybCreateProgramInput, MybUpdateProgramInput, MybCreateWorkoutInput, MybCreateExerciseInput, MybStartSessionInput, MybLogSetInput, MybCompleteSessionInput, MybCreateGoalInput, MybUpdateGoalInput, MybCreateNutritionPlanInput, MybUpdateNutritionPlanInput, MybLogMealInput, MybRecordMetricInput, MybLogRecoveryInput, MybCreateCoachingInput, PaginationInput, MybDeviceConnection, MybDeviceProvider, MybWearableMetricType, MybTodayGuidance, MybFood, MybInsights, MybAiSettings, MybAiOperationLogConnection, MybUpdateAiSettingsInput, MybAiProcessingConsent, MybMindfulnessExercise, MybMindfulnessSession, MybCompleteMindfulnessSessionInput } from '../types';
|
|
2
2
|
|
|
3
3
|
export interface ProgramFilters {
|
|
4
4
|
status?: MybProgramStatus;
|
|
@@ -123,6 +123,9 @@ export declare const useMybBodyMetrics: (filters?: BodyMetricFilters) => import(
|
|
|
123
123
|
export declare const useMybRecordBodyMetric: () => import('@tanstack/react-query').UseMutationResult<MybBodyMetric, Error, MybRecordMetricInput, unknown>;
|
|
124
124
|
export declare const useMybRecoveryLogs: (metric?: MybRecoveryMetric, memberId?: string) => import('@tanstack/react-query').UseQueryResult<NoInfer<MybConnection<MybRecoveryLog>>, Error>;
|
|
125
125
|
export declare const useMybLogRecovery: () => import('@tanstack/react-query').UseMutationResult<MybRecoveryLog, Error, MybLogRecoveryInput, unknown>;
|
|
126
|
+
export declare const useMybMindfulnessExercises: () => import('@tanstack/react-query').UseQueryResult<NoInfer<MybMindfulnessExercise[]>, Error>;
|
|
127
|
+
export declare const useMybMindfulnessSessions: () => import('@tanstack/react-query').UseQueryResult<NoInfer<MybConnection<MybMindfulnessSession>>, Error>;
|
|
128
|
+
export declare const useMybCompleteMindfulnessSession: () => import('@tanstack/react-query').UseMutationResult<MybMindfulnessSession, Error, MybCompleteMindfulnessSessionInput, unknown>;
|
|
126
129
|
export declare const useMybCoaching: (status?: MybCoachingStatus, memberId?: string) => import('@tanstack/react-query').UseQueryResult<NoInfer<MybConnection<MybCoachingRelationship>>, Error>;
|
|
127
130
|
export declare const useMybCreateCoaching: () => import('@tanstack/react-query').UseMutationResult<MybCoachingRelationship, Error, MybCreateCoachingInput, unknown>;
|
|
128
131
|
export declare const useMybTransitionCoaching: () => import('@tanstack/react-query').UseMutationResult<MybCoachingRelationship, Error, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMyBodyShieldApi.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/hooks/useMyBodyShieldApi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,aAAa,EACb,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,aAAa,EACb,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"useMyBodyShieldApi.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/hooks/useMyBodyShieldApi.ts"],"names":[],"mappings":"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"}
|