@burdenoff/microfe-mybodyshield 2026.705.1 → 2026.706.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 (591) hide show
  1. package/dist/_virtual/__vite-optional-peer-dep_@emotion/is-prop-valid_framer-motion.js +10 -0
  2. package/dist/_virtual/__vite-optional-peer-dep_@emotion/is-prop-valid_framer-motion.js.map +1 -0
  3. package/dist/_virtual/_rolldown/runtime.js +5 -5
  4. package/dist/mybodyshield/components/DataTable.js +8 -4
  5. package/dist/mybodyshield/components/DataTable.js.map +1 -1
  6. package/dist/mybodyshield/components/EvidenceUpload.js +92 -4
  7. package/dist/mybodyshield/components/EvidenceUpload.js.map +1 -0
  8. package/dist/mybodyshield/components/FileLink.js +35 -2
  9. package/dist/mybodyshield/components/FileLink.js.map +1 -0
  10. package/dist/mybodyshield/components/MybDiscussion.js +107 -6
  11. package/dist/mybodyshield/components/MybDiscussion.js.map +1 -0
  12. package/dist/mybodyshield/components/MybTags.js +148 -4
  13. package/dist/mybodyshield/components/MybTags.js.map +1 -0
  14. package/dist/mybodyshield/components/Pagination.js.map +1 -1
  15. package/dist/mybodyshield/components/UserSearchSelect.js +148 -0
  16. package/dist/mybodyshield/components/UserSearchSelect.js.map +1 -0
  17. package/dist/mybodyshield/components/index.js +1 -0
  18. package/dist/mybodyshield/hooks/index.js +1 -0
  19. package/dist/mybodyshield/hooks/useMyBodyShieldApi.js +47 -27
  20. package/dist/mybodyshield/hooks/useMyBodyShieldApi.js.map +1 -1
  21. package/dist/mybodyshield/hooks/useMybComments.js +44 -2
  22. package/dist/mybodyshield/hooks/useMybComments.js.map +1 -0
  23. package/dist/mybodyshield/hooks/useMybFiles.js +80 -3
  24. package/dist/mybodyshield/hooks/useMybFiles.js.map +1 -0
  25. package/dist/mybodyshield/hooks/useMybTags.js +88 -2
  26. package/dist/mybodyshield/hooks/useMybTags.js.map +1 -0
  27. package/dist/mybodyshield/hooks/useMybUsers.js +36 -0
  28. package/dist/mybodyshield/hooks/useMybUsers.js.map +1 -0
  29. package/dist/mybodyshield/pages/DashboardPage.js +444 -340
  30. package/dist/mybodyshield/pages/DashboardPage.js.map +1 -1
  31. package/dist/mybodyshield/pages/_shared/visuals.js +29 -23
  32. package/dist/mybodyshield/pages/_shared/visuals.js.map +1 -1
  33. package/dist/mybodyshield/pages/coaching/CoachingPage.js +272 -179
  34. package/dist/mybodyshield/pages/coaching/CoachingPage.js.map +1 -1
  35. package/dist/mybodyshield/pages/goals/GoalsPage.js +304 -257
  36. package/dist/mybodyshield/pages/goals/GoalsPage.js.map +1 -1
  37. package/dist/mybodyshield/pages/nutrition/NutritionPage.js +745 -504
  38. package/dist/mybodyshield/pages/nutrition/NutritionPage.js.map +1 -1
  39. package/dist/mybodyshield/pages/programs/ProgramDetailPage.js +688 -320
  40. package/dist/mybodyshield/pages/programs/ProgramDetailPage.js.map +1 -1
  41. package/dist/mybodyshield/pages/programs/ProgramsPage.js +282 -234
  42. package/dist/mybodyshield/pages/programs/ProgramsPage.js.map +1 -1
  43. package/dist/mybodyshield/pages/progress/ProgressPage.js +447 -299
  44. package/dist/mybodyshield/pages/progress/ProgressPage.js.map +1 -1
  45. package/dist/mybodyshield/pages/recovery/RecoveryPage.js +335 -246
  46. package/dist/mybodyshield/pages/recovery/RecoveryPage.js.map +1 -1
  47. package/dist/mybodyshield/pages/train/SessionDetailPage.js +380 -267
  48. package/dist/mybodyshield/pages/train/SessionDetailPage.js.map +1 -1
  49. package/dist/mybodyshield/pages/train/SessionsPage.js +111 -78
  50. package/dist/mybodyshield/pages/train/SessionsPage.js.map +1 -1
  51. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js +63 -0
  52. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js.map +1 -0
  53. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js +55 -0
  54. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js.map +1 -0
  55. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js +62 -0
  56. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js.map +1 -0
  57. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js +22 -0
  58. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js.map +1 -0
  59. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.js +13 -0
  60. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.js.map +1 -0
  61. package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js +8 -0
  62. package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js.map +1 -0
  63. package/dist/node_modules/framer-motion/dist/es/context/LazyContext.js +8 -0
  64. package/dist/node_modules/framer-motion/dist/es/context/LazyContext.js.map +1 -0
  65. package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.js +12 -0
  66. package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.js.map +1 -0
  67. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.js +19 -0
  68. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.js.map +1 -0
  69. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.js +8 -0
  70. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.js.map +1 -0
  71. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js +17 -0
  72. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js.map +1 -0
  73. package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.js +8 -0
  74. package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.js.map +1 -0
  75. package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js +8 -0
  76. package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js.map +1 -0
  77. package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.js +10 -0
  78. package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.js.map +1 -0
  79. package/dist/node_modules/framer-motion/dist/es/events/event-info.js +13 -0
  80. package/dist/node_modules/framer-motion/dist/es/events/event-info.js.map +1 -0
  81. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js +260 -0
  82. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js.map +1 -0
  83. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js +24 -0
  84. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js.map +1 -0
  85. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js +61 -0
  86. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js.map +1 -0
  87. package/dist/node_modules/framer-motion/dist/es/gestures/focus.js +29 -0
  88. package/dist/node_modules/framer-motion/dist/es/gestures/focus.js.map +1 -0
  89. package/dist/node_modules/framer-motion/dist/es/gestures/hover.js +22 -0
  90. package/dist/node_modules/framer-motion/dist/es/gestures/hover.js.map +1 -0
  91. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js +140 -0
  92. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js.map +1 -0
  93. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js +44 -0
  94. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js.map +1 -0
  95. package/dist/node_modules/framer-motion/dist/es/gestures/press.js +28 -0
  96. package/dist/node_modules/framer-motion/dist/es/gestures/press.js.map +1 -0
  97. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js +41 -0
  98. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js.map +1 -0
  99. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js +27 -0
  100. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js.map +1 -0
  101. package/dist/node_modules/framer-motion/dist/es/motion/features/animations.js +11 -0
  102. package/dist/node_modules/framer-motion/dist/es/motion/features/animations.js.map +1 -0
  103. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.js +53 -0
  104. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.js.map +1 -0
  105. package/dist/node_modules/framer-motion/dist/es/motion/features/drag.js +17 -0
  106. package/dist/node_modules/framer-motion/dist/es/motion/features/drag.js.map +1 -0
  107. package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.js +15 -0
  108. package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.js.map +1 -0
  109. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js +63 -0
  110. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js.map +1 -0
  111. package/dist/node_modules/framer-motion/dist/es/motion/features/layout.js +11 -0
  112. package/dist/node_modules/framer-motion/dist/es/motion/features/layout.js.map +1 -0
  113. package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.js +15 -0
  114. package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.js.map +1 -0
  115. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js +48 -0
  116. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js.map +1 -0
  117. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js +26 -0
  118. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js.map +1 -0
  119. package/dist/node_modules/framer-motion/dist/es/motion/index.js +72 -0
  120. package/dist/node_modules/framer-motion/dist/es/motion/index.js.map +1 -0
  121. package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.js +6 -0
  122. package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.js.map +1 -0
  123. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js +23 -0
  124. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js.map +1 -0
  125. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js +60 -0
  126. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js.map +1 -0
  127. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js +52 -0
  128. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js.map +1 -0
  129. package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js +9 -0
  130. package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js.map +1 -0
  131. package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.js +12 -0
  132. package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.js.map +1 -0
  133. package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.js +15 -0
  134. package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.js.map +1 -0
  135. package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.js +9 -0
  136. package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.js.map +1 -0
  137. package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js +10 -0
  138. package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js.map +1 -0
  139. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js +23 -0
  140. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js.map +1 -0
  141. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js +21 -0
  142. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js.map +1 -0
  143. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js +9 -0
  144. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js.map +1 -0
  145. package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.js +13 -0
  146. package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.js.map +1 -0
  147. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js +28 -0
  148. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js.map +1 -0
  149. package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js +11 -0
  150. package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js.map +1 -0
  151. package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js +32 -0
  152. package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js.map +1 -0
  153. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js +28 -0
  154. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js.map +1 -0
  155. package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.js +13 -0
  156. package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.js.map +1 -0
  157. package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js +10 -0
  158. package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js.map +1 -0
  159. package/dist/node_modules/framer-motion/dist/es/utils/distance.js +10 -0
  160. package/dist/node_modules/framer-motion/dist/es/utils/distance.js.map +1 -0
  161. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.js +6 -0
  162. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.js.map +1 -0
  163. package/dist/node_modules/framer-motion/dist/es/utils/is-browser.js +6 -0
  164. package/dist/node_modules/framer-motion/dist/es/utils/is-browser.js.map +1 -0
  165. package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.js +8 -0
  166. package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.js.map +1 -0
  167. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js +15 -0
  168. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js.map +1 -0
  169. package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.js +27 -0
  170. package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.js.map +1 -0
  171. package/dist/node_modules/framer-motion/dist/es/utils/use-constant.js +11 -0
  172. package/dist/node_modules/framer-motion/dist/es/utils/use-constant.js.map +1 -0
  173. package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js +9 -0
  174. package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js.map +1 -0
  175. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.js +109 -0
  176. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.js.map +1 -0
  177. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.js +131 -0
  178. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.js.map +1 -0
  179. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.js +86 -0
  180. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.js.map +1 -0
  181. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.js +30 -0
  182. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.js.map +1 -0
  183. package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.js +12 -0
  184. package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.js.map +1 -0
  185. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.js +15 -0
  186. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.js.map +1 -0
  187. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.js +34 -0
  188. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.js.map +1 -0
  189. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.js +24 -0
  190. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.js.map +1 -0
  191. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.js +168 -0
  192. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.js.map +1 -0
  193. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.js +11 -0
  194. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.js.map +1 -0
  195. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.js +18 -0
  196. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.js.map +1 -0
  197. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.js +8 -0
  198. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.js.map +1 -0
  199. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.js +11 -0
  200. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.js.map +1 -0
  201. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.js +47 -0
  202. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.js.map +1 -0
  203. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.js +59 -0
  204. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.js.map +1 -0
  205. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.js +28 -0
  206. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.js.map +1 -0
  207. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.js +23 -0
  208. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.js.map +1 -0
  209. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.js +63 -0
  210. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.js.map +1 -0
  211. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.js +69 -0
  212. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.js.map +1 -0
  213. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.js +10 -0
  214. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.js.map +1 -0
  215. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.js +10 -0
  216. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.js.map +1 -0
  217. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.js +14 -0
  218. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.js.map +1 -0
  219. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.js +8 -0
  220. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.js.map +1 -0
  221. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.js +8 -0
  222. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.js.map +1 -0
  223. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.js +9 -0
  224. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.js.map +1 -0
  225. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.js +20 -0
  226. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.js.map +1 -0
  227. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.js +38 -0
  228. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.js.map +1 -0
  229. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.js +6 -0
  230. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.js.map +1 -0
  231. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.js +9 -0
  232. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.js.map +1 -0
  233. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.js +24 -0
  234. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.js.map +1 -0
  235. package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.js +9 -0
  236. package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.js.map +1 -0
  237. package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.js +20 -0
  238. package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.js.map +1 -0
  239. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.js +27 -0
  240. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.js.map +1 -0
  241. package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.js +29 -0
  242. package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.js.map +1 -0
  243. package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.js +10 -0
  244. package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.js.map +1 -0
  245. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.js +7 -0
  246. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.js.map +1 -0
  247. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.js +9 -0
  248. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.js.map +1 -0
  249. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.js +21 -0
  250. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.js.map +1 -0
  251. package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.js +8 -0
  252. package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.js.map +1 -0
  253. package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.js +18 -0
  254. package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.js.map +1 -0
  255. package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.js +15 -0
  256. package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.js.map +1 -0
  257. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.js +6 -0
  258. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.js.map +1 -0
  259. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.js +13 -0
  260. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.js.map +1 -0
  261. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.js +37 -0
  262. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.js.map +1 -0
  263. package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.js +21 -0
  264. package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.js.map +1 -0
  265. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.js +26 -0
  266. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.js.map +1 -0
  267. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.js +11 -0
  268. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.js.map +1 -0
  269. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.js +10 -0
  270. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.js.map +1 -0
  271. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.js +10 -0
  272. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.js.map +1 -0
  273. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.js +10 -0
  274. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.js.map +1 -0
  275. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.js +19 -0
  276. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.js.map +1 -0
  277. package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.js +8 -0
  278. package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.js.map +1 -0
  279. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.js +32 -0
  280. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.js.map +1 -0
  281. package/dist/node_modules/motion-dom/dist/es/frameloop/frame.js +8 -0
  282. package/dist/node_modules/motion-dom/dist/es/frameloop/frame.js.map +1 -0
  283. package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.js +7 -0
  284. package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.js.map +1 -0
  285. package/dist/node_modules/motion-dom/dist/es/frameloop/order.js +15 -0
  286. package/dist/node_modules/motion-dom/dist/es/frameloop/order.js.map +1 -0
  287. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.js +34 -0
  288. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.js.map +1 -0
  289. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.js +17 -0
  290. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.js.map +1 -0
  291. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.js +12 -0
  292. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.js.map +1 -0
  293. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js +13 -0
  294. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js.map +1 -0
  295. package/dist/node_modules/motion-dom/dist/es/gestures/hover.js +38 -0
  296. package/dist/node_modules/motion-dom/dist/es/gestures/hover.js.map +1 -0
  297. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js +38 -0
  298. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js.map +1 -0
  299. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.js +23 -0
  300. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.js.map +1 -0
  301. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js +30 -0
  302. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js.map +1 -0
  303. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.js +6 -0
  304. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.js.map +1 -0
  305. package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.js +6 -0
  306. package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.js.map +1 -0
  307. package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.js +6 -0
  308. package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.js.map +1 -0
  309. package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.js +18 -0
  310. package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.js.map +1 -0
  311. package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.js +27 -0
  312. package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.js.map +1 -0
  313. package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.js +41 -0
  314. package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.js.map +1 -0
  315. package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.js +14 -0
  316. package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.js.map +1 -0
  317. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.js +45 -0
  318. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.js.map +1 -0
  319. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.js +32 -0
  320. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.js.map +1 -0
  321. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.js +31 -0
  322. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.js.map +1 -0
  323. package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.js +20 -0
  324. package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.js.map +1 -0
  325. package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.js +30 -0
  326. package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.js.map +1 -0
  327. package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.js +15 -0
  328. package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.js.map +1 -0
  329. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.js +24 -0
  330. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.js.map +1 -0
  331. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.js +586 -0
  332. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.js.map +1 -0
  333. package/dist/node_modules/motion-dom/dist/es/projection/node/state.js +9 -0
  334. package/dist/node_modules/motion-dom/dist/es/projection/node/state.js.map +1 -0
  335. package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.js +53 -0
  336. package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.js.map +1 -0
  337. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.js +15 -0
  338. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.js.map +1 -0
  339. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.js +15 -0
  340. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.js.map +1 -0
  341. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.js +19 -0
  342. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.js.map +1 -0
  343. package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.js +14 -0
  344. package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.js.map +1 -0
  345. package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.js +6 -0
  346. package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.js.map +1 -0
  347. package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.js +8 -0
  348. package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.js.map +1 -0
  349. package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.js +21 -0
  350. package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.js.map +1 -0
  351. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.js +20 -0
  352. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.js.map +1 -0
  353. package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.js +14 -0
  354. package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.js.map +1 -0
  355. package/dist/node_modules/motion-dom/dist/es/render/Feature.js +11 -0
  356. package/dist/node_modules/motion-dom/dist/es/render/Feature.js.map +1 -0
  357. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.js +206 -0
  358. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.js.map +1 -0
  359. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.js +30 -0
  360. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.js.map +1 -0
  361. package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.js +6 -0
  362. package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.js.map +1 -0
  363. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.js +58 -0
  364. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.js.map +1 -0
  365. package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.js +9 -0
  366. package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.js.map +1 -0
  367. package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.js +8 -0
  368. package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.js.map +1 -0
  369. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.js +37 -0
  370. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.js.map +1 -0
  371. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.js +30 -0
  372. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.js.map +1 -0
  373. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.js +38 -0
  374. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.js.map +1 -0
  375. package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.js +10 -0
  376. package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.js.map +1 -0
  377. package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.js +13 -0
  378. package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.js.map +1 -0
  379. package/dist/node_modules/motion-dom/dist/es/render/store.js +6 -0
  380. package/dist/node_modules/motion-dom/dist/es/render/store.js.map +1 -0
  381. package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.js +42 -0
  382. package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.js.map +1 -0
  383. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.js +24 -0
  384. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.js.map +1 -0
  385. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.js +30 -0
  386. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.js.map +1 -0
  387. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.js +6 -0
  388. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.js.map +1 -0
  389. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.js +17 -0
  390. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.js.map +1 -0
  391. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.js +12 -0
  392. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.js.map +1 -0
  393. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.js +16 -0
  394. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.js.map +1 -0
  395. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.js +137 -0
  396. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.js.map +1 -0
  397. package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.js +21 -0
  398. package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.js.map +1 -0
  399. package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.js +8 -0
  400. package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.js.map +1 -0
  401. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.js +14 -0
  402. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.js.map +1 -0
  403. package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.js +10 -0
  404. package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.js.map +1 -0
  405. package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.js +6 -0
  406. package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.js.map +1 -0
  407. package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.js +8 -0
  408. package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.js.map +1 -0
  409. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.js +15 -0
  410. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.js.map +1 -0
  411. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.js +24 -0
  412. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.js.map +1 -0
  413. package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.js +23 -0
  414. package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.js.map +1 -0
  415. package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.js +13 -0
  416. package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.js.map +1 -0
  417. package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.js +6 -0
  418. package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.js.map +1 -0
  419. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.js +10 -0
  420. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.js.map +1 -0
  421. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.js +22 -0
  422. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.js.map +1 -0
  423. package/dist/node_modules/motion-dom/dist/es/render/utils/setters.js +22 -0
  424. package/dist/node_modules/motion-dom/dist/es/render/utils/setters.js.map +1 -0
  425. package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.js +12 -0
  426. package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.js.map +1 -0
  427. package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.js +14 -0
  428. package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.js.map +1 -0
  429. package/dist/node_modules/motion-dom/dist/es/resize/handle-element.js +39 -0
  430. package/dist/node_modules/motion-dom/dist/es/resize/handle-element.js.map +1 -0
  431. package/dist/node_modules/motion-dom/dist/es/resize/handle-window.js +24 -0
  432. package/dist/node_modules/motion-dom/dist/es/resize/handle-window.js.map +1 -0
  433. package/dist/node_modules/motion-dom/dist/es/resize/index.js +10 -0
  434. package/dist/node_modules/motion-dom/dist/es/resize/index.js.map +1 -0
  435. package/dist/node_modules/motion-dom/dist/es/stats/buffer.js +9 -0
  436. package/dist/node_modules/motion-dom/dist/es/stats/buffer.js.map +1 -0
  437. package/dist/node_modules/motion-dom/dist/es/utils/border-radius.js +11 -0
  438. package/dist/node_modules/motion-dom/dist/es/utils/border-radius.js.map +1 -0
  439. package/dist/node_modules/motion-dom/dist/es/utils/delay.js +14 -0
  440. package/dist/node_modules/motion-dom/dist/es/utils/delay.js.map +1 -0
  441. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.js +35 -0
  442. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.js.map +1 -0
  443. package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.js +9 -0
  444. package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.js.map +1 -0
  445. package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.js +9 -0
  446. package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.js.map +1 -0
  447. package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.js +9 -0
  448. package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.js.map +1 -0
  449. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.js +32 -0
  450. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.js.map +1 -0
  451. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.js +54 -0
  452. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.js.map +1 -0
  453. package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.js +8 -0
  454. package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.js.map +1 -0
  455. package/dist/node_modules/motion-dom/dist/es/utils/mix/index.js +10 -0
  456. package/dist/node_modules/motion-dom/dist/es/utils/mix/index.js.map +1 -0
  457. package/dist/node_modules/motion-dom/dist/es/utils/mix/number.js +6 -0
  458. package/dist/node_modules/motion-dom/dist/es/utils/mix/number.js.map +1 -0
  459. package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.js +9 -0
  460. package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.js.map +1 -0
  461. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js +16 -0
  462. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js.map +1 -0
  463. package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.js +6 -0
  464. package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.js.map +1 -0
  465. package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js +14 -0
  466. package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js.map +1 -0
  467. package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js +11 -0
  468. package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js.map +1 -0
  469. package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.js +7 -0
  470. package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.js.map +1 -0
  471. package/dist/node_modules/motion-dom/dist/es/value/index.js +94 -0
  472. package/dist/node_modules/motion-dom/dist/es/value/index.js.map +1 -0
  473. package/dist/node_modules/motion-dom/dist/es/value/types/auto.js +9 -0
  474. package/dist/node_modules/motion-dom/dist/es/value/types/auto.js.map +1 -0
  475. package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.js +21 -0
  476. package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.js.map +1 -0
  477. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.js +23 -0
  478. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.js.map +1 -0
  479. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.js +14 -0
  480. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.js.map +1 -0
  481. package/dist/node_modules/motion-dom/dist/es/value/types/color/index.js +17 -0
  482. package/dist/node_modules/motion-dom/dist/es/value/types/color/index.js.map +1 -0
  483. package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.js +17 -0
  484. package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.js.map +1 -0
  485. package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.js +18 -0
  486. package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.js.map +1 -0
  487. package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.js +28 -0
  488. package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.js.map +1 -0
  489. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.js +54 -0
  490. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.js.map +1 -0
  491. package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.js +16 -0
  492. package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.js.map +1 -0
  493. package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.js +18 -0
  494. package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.js.map +1 -0
  495. package/dist/node_modules/motion-dom/dist/es/value/types/int.js +10 -0
  496. package/dist/node_modules/motion-dom/dist/es/value/types/int.js.map +1 -0
  497. package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.js +26 -0
  498. package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.js.map +1 -0
  499. package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.js +66 -0
  500. package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.js.map +1 -0
  501. package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.js +34 -0
  502. package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.js.map +1 -0
  503. package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.js +17 -0
  504. package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.js.map +1 -0
  505. package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.js +14 -0
  506. package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.js.map +1 -0
  507. package/dist/node_modules/motion-dom/dist/es/value/types/test.js +6 -0
  508. package/dist/node_modules/motion-dom/dist/es/value/types/test.js.map +1 -0
  509. package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.js +14 -0
  510. package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.js.map +1 -0
  511. package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.js +6 -0
  512. package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.js.map +1 -0
  513. package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.js +14 -0
  514. package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.js.map +1 -0
  515. package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.js +6 -0
  516. package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.js.map +1 -0
  517. package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.js +6 -0
  518. package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.js.map +1 -0
  519. package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.js +8 -0
  520. package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.js.map +1 -0
  521. package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.js +6 -0
  522. package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.js.map +1 -0
  523. package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.js +6 -0
  524. package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.js.map +1 -0
  525. package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.js +6 -0
  526. package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.js.map +1 -0
  527. package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.js +9 -0
  528. package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.js.map +1 -0
  529. package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.js +15 -0
  530. package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.js.map +1 -0
  531. package/dist/node_modules/motion-dom/dist/es/value/will-change/is.js +9 -0
  532. package/dist/node_modules/motion-dom/dist/es/value/will-change/is.js.map +1 -0
  533. package/dist/node_modules/motion-utils/dist/es/array.js +12 -0
  534. package/dist/node_modules/motion-utils/dist/es/array.js.map +1 -0
  535. package/dist/node_modules/motion-utils/dist/es/clamp.js +6 -0
  536. package/dist/node_modules/motion-utils/dist/es/clamp.js.map +1 -0
  537. package/dist/node_modules/motion-utils/dist/es/easing/anticipate.js +7 -0
  538. package/dist/node_modules/motion-utils/dist/es/easing/anticipate.js.map +1 -0
  539. package/dist/node_modules/motion-utils/dist/es/easing/back.js +9 -0
  540. package/dist/node_modules/motion-utils/dist/es/easing/back.js.map +1 -0
  541. package/dist/node_modules/motion-utils/dist/es/easing/circ.js +8 -0
  542. package/dist/node_modules/motion-utils/dist/es/easing/circ.js.map +1 -0
  543. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.js +20 -0
  544. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.js.map +1 -0
  545. package/dist/node_modules/motion-utils/dist/es/easing/ease.js +7 -0
  546. package/dist/node_modules/motion-utils/dist/es/easing/ease.js.map +1 -0
  547. package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.js +6 -0
  548. package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.js.map +1 -0
  549. package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.js +6 -0
  550. package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.js.map +1 -0
  551. package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.js +6 -0
  552. package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.js.map +1 -0
  553. package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.js +6 -0
  554. package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.js.map +1 -0
  555. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.js +33 -0
  556. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.js.map +1 -0
  557. package/dist/node_modules/motion-utils/dist/es/errors.js +12 -0
  558. package/dist/node_modules/motion-utils/dist/es/errors.js.map +1 -0
  559. package/dist/node_modules/motion-utils/dist/es/format-error-message.js +8 -0
  560. package/dist/node_modules/motion-utils/dist/es/format-error-message.js.map +1 -0
  561. package/dist/node_modules/motion-utils/dist/es/global-config.js +6 -0
  562. package/dist/node_modules/motion-utils/dist/es/global-config.js.map +1 -0
  563. package/dist/node_modules/motion-utils/dist/es/is-numerical-string.js +6 -0
  564. package/dist/node_modules/motion-utils/dist/es/is-numerical-string.js.map +1 -0
  565. package/dist/node_modules/motion-utils/dist/es/is-object.js +6 -0
  566. package/dist/node_modules/motion-utils/dist/es/is-object.js.map +1 -0
  567. package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.js +6 -0
  568. package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.js.map +1 -0
  569. package/dist/node_modules/motion-utils/dist/es/memo.js +10 -0
  570. package/dist/node_modules/motion-utils/dist/es/memo.js.map +1 -0
  571. package/dist/node_modules/motion-utils/dist/es/noop.js +6 -0
  572. package/dist/node_modules/motion-utils/dist/es/noop.js.map +1 -0
  573. package/dist/node_modules/motion-utils/dist/es/pipe.js +6 -0
  574. package/dist/node_modules/motion-utils/dist/es/pipe.js.map +1 -0
  575. package/dist/node_modules/motion-utils/dist/es/progress.js +9 -0
  576. package/dist/node_modules/motion-utils/dist/es/progress.js.map +1 -0
  577. package/dist/node_modules/motion-utils/dist/es/subscription-manager.js +28 -0
  578. package/dist/node_modules/motion-utils/dist/es/subscription-manager.js.map +1 -0
  579. package/dist/node_modules/motion-utils/dist/es/time-conversion.js +6 -0
  580. package/dist/node_modules/motion-utils/dist/es/time-conversion.js.map +1 -0
  581. package/dist/node_modules/motion-utils/dist/es/velocity-per-second.js +6 -0
  582. package/dist/node_modules/motion-utils/dist/es/velocity-per-second.js.map +1 -0
  583. package/dist/node_modules/motion-utils/dist/es/warn-once.js +10 -0
  584. package/dist/node_modules/motion-utils/dist/es/warn-once.js.map +1 -0
  585. package/dist/node_modules/recharts/es6/cartesian/Area.js +435 -0
  586. package/dist/node_modules/recharts/es6/cartesian/Area.js.map +1 -0
  587. package/dist/node_modules/recharts/es6/chart/{LineChart.js → AreaChart.js} +5 -5
  588. package/dist/node_modules/recharts/es6/chart/{LineChart.js.map → AreaChart.js.map} +1 -1
  589. package/package.json +2 -2
  590. package/dist/node_modules/recharts/es6/cartesian/Line.js +0 -473
  591. package/dist/node_modules/recharts/es6/cartesian/Line.js.map +0 -1
@@ -0,0 +1,148 @@
1
+ import { directoryUserName as e, useMybUserSearch as t } from "../hooks/useMybUsers.js";
2
+ import { useState as n } from "react";
3
+ import { Check as r, Loader2 as i, Search as a, User as o, X as s } from "lucide-react";
4
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
+ import { Input as u, Label as d } from "@burdenoff/fe-libs/ui";
6
+ //#region src/mybodyshield/components/UserSearchSelect.tsx
7
+ function f({ label: f, userId: p, displayName: m, onSelect: h, required: g = !1, htmlId: _ = "myb-user-id" }) {
8
+ let [v, y] = n(""), [b, x] = n(!1), S = t(v), C = S.data ?? [], w = v.trim().length >= 2, T = S.isError, E = (t) => {
9
+ h({
10
+ userId: t.id,
11
+ displayName: e(t)
12
+ }), y("");
13
+ };
14
+ return b || T ? /* @__PURE__ */ l("div", {
15
+ className: "grid gap-1.5",
16
+ children: [
17
+ /* @__PURE__ */ l(d, {
18
+ htmlFor: _,
19
+ children: [
20
+ f,
21
+ " ",
22
+ g && /* @__PURE__ */ c("span", {
23
+ className: "text-status-error-text",
24
+ children: "*"
25
+ })
26
+ ]
27
+ }),
28
+ /* @__PURE__ */ c(u, {
29
+ id: _,
30
+ value: p,
31
+ onChange: (e) => h({
32
+ userId: e.target.value,
33
+ displayName: m
34
+ }),
35
+ placeholder: "user-uuid"
36
+ }),
37
+ /* @__PURE__ */ c("p", {
38
+ className: "text-xs text-text-tertiary",
39
+ children: T ? "User search is unavailable here — paste the user id." : "Paste the user id."
40
+ }),
41
+ !T && /* @__PURE__ */ c("button", {
42
+ type: "button",
43
+ onClick: () => x(!1),
44
+ className: "self-start text-xs font-medium text-accent hover:underline",
45
+ children: "Search the directory instead"
46
+ })
47
+ ]
48
+ }) : /* @__PURE__ */ l("div", {
49
+ className: "grid gap-1.5",
50
+ children: [/* @__PURE__ */ l(d, { children: [
51
+ f,
52
+ " ",
53
+ g && /* @__PURE__ */ c("span", {
54
+ className: "text-status-error-text",
55
+ children: "*"
56
+ })
57
+ ] }), p ? /* @__PURE__ */ l("div", {
58
+ className: "flex items-center gap-2 rounded-lg border border-border-seam bg-bg-surface px-3 py-2",
59
+ children: [
60
+ /* @__PURE__ */ c("span", {
61
+ className: "flex size-7 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
62
+ children: /* @__PURE__ */ c(o, { className: "h-4 w-4" })
63
+ }),
64
+ /* @__PURE__ */ l("div", {
65
+ className: "min-w-0 flex-1",
66
+ children: [/* @__PURE__ */ c("p", {
67
+ className: "truncate text-sm font-medium text-text-primary",
68
+ children: m || "Selected user"
69
+ }), /* @__PURE__ */ c("p", {
70
+ className: "truncate text-xs text-text-tertiary",
71
+ children: p
72
+ })]
73
+ }),
74
+ /* @__PURE__ */ c("button", {
75
+ type: "button",
76
+ "aria-label": `Clear selected ${f.toLowerCase()}`,
77
+ onClick: () => h({
78
+ userId: "",
79
+ displayName: ""
80
+ }),
81
+ className: "rounded-md p-1 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary",
82
+ children: /* @__PURE__ */ c(s, { className: "h-4 w-4" })
83
+ })
84
+ ]
85
+ }) : /* @__PURE__ */ l("div", {
86
+ className: "space-y-2",
87
+ children: [
88
+ /* @__PURE__ */ l("div", {
89
+ className: "relative",
90
+ children: [
91
+ /* @__PURE__ */ c(a, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-tertiary" }),
92
+ /* @__PURE__ */ c(u, {
93
+ value: v,
94
+ onChange: (e) => y(e.target.value),
95
+ placeholder: "Search by name or email…",
96
+ "aria-label": `Search ${f.toLowerCase()} by name or email`,
97
+ className: "pl-9"
98
+ }),
99
+ S.isFetching && /* @__PURE__ */ c(i, { className: "absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 animate-spin text-text-tertiary" })
100
+ ]
101
+ }),
102
+ w && !S.isFetching && C.length === 0 && /* @__PURE__ */ l("p", {
103
+ className: "text-xs text-text-tertiary",
104
+ children: [
105
+ "No users match “",
106
+ v.trim(),
107
+ "”."
108
+ ]
109
+ }),
110
+ C.length > 0 && /* @__PURE__ */ c("ul", {
111
+ className: "max-h-56 divide-y divide-border-seam overflow-auto rounded-lg border border-border-seam bg-bg-surface",
112
+ children: C.map((t) => /* @__PURE__ */ c("li", { children: /* @__PURE__ */ l("button", {
113
+ type: "button",
114
+ onClick: () => E(t),
115
+ className: "flex w-full items-center gap-2 px-3 py-2 text-left transition-colors hover:bg-bg-sunken",
116
+ children: [
117
+ /* @__PURE__ */ c("span", {
118
+ className: "flex size-7 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
119
+ children: /* @__PURE__ */ c(o, { className: "h-4 w-4" })
120
+ }),
121
+ /* @__PURE__ */ l("span", {
122
+ className: "min-w-0 flex-1",
123
+ children: [/* @__PURE__ */ c("span", {
124
+ className: "block truncate text-sm font-medium text-text-primary",
125
+ children: e(t)
126
+ }), /* @__PURE__ */ c("span", {
127
+ className: "block truncate text-xs text-text-tertiary",
128
+ children: t.email
129
+ })]
130
+ }),
131
+ /* @__PURE__ */ c(r, { className: "h-4 w-4 shrink-0 text-text-tertiary opacity-0" })
132
+ ]
133
+ }) }, t.id))
134
+ }),
135
+ /* @__PURE__ */ c("button", {
136
+ type: "button",
137
+ onClick: () => x(!0),
138
+ className: "text-xs font-medium text-accent hover:underline",
139
+ children: "Enter a user ID manually"
140
+ })
141
+ ]
142
+ })]
143
+ });
144
+ }
145
+ //#endregion
146
+ export { f as UserSearchSelect };
147
+
148
+ //# sourceMappingURL=UserSearchSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserSearchSelect.js","names":[],"sources":["../../../src/mybodyshield/components/UserSearchSelect.tsx"],"sourcesContent":["/**\n * User picker (identity reuse)\n * @module mybodyshield/components\n *\n * Resolves a real user by name or email from the global user directory so a\n * coach/member can be chosen without pasting a raw UUID. Degrades gracefully:\n * if the directory is unavailable (RBAC), the user can still paste an id.\n * Semantic tokens only.\n */\n\nimport { useState } from 'react';\nimport { Check, Loader2, Search, User as UserIcon, X } from 'lucide-react';\nimport { Input, Label } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\nimport { directoryUserName, useMybUserSearch, type DirectoryUser } from '../hooks/useMybUsers';\n\nexport interface UserSelectValue {\n userId: string;\n displayName: string;\n}\n\ninterface UserSearchSelectProps {\n /** Field label (e.g. \"Coach\", \"Member\"). */\n label: string;\n /** Currently selected user id. */\n userId: string;\n /** Display name currently chosen (echoed back so the parent can prefill). */\n displayName: string;\n onSelect: (value: UserSelectValue) => void;\n required?: boolean;\n /** Optional id for the label/input association in manual mode. */\n htmlId?: string;\n}\n\nexport function UserSearchSelect({\n label,\n userId,\n displayName,\n onSelect,\n required = false,\n htmlId = 'myb-user-id',\n}: UserSearchSelectProps) {\n const [term, setTerm] = useState('');\n const [manual, setManual] = useState(false);\n\n const search = useMybUserSearch(term);\n const results = search.data ?? [];\n const active = term.trim().length >= 2;\n const searchUnavailable = search.isError;\n\n const pick = (user: DirectoryUser) => {\n onSelect({ userId: user.id, displayName: directoryUserName(user) });\n setTerm('');\n };\n\n if (manual || searchUnavailable) {\n return (\n <div className=\"grid gap-1.5\">\n <Label htmlFor={htmlId}>\n {label} {required && <span className=\"text-status-error-text\">*</span>}\n </Label>\n <Input\n id={htmlId}\n value={userId}\n onChange={(e) => onSelect({ userId: e.target.value, displayName })}\n placeholder=\"user-uuid\"\n />\n <p className=\"text-xs text-text-tertiary\">\n {searchUnavailable\n ? 'User search is unavailable here — paste the user id.'\n : 'Paste the user id.'}\n </p>\n {!searchUnavailable && (\n <button\n type=\"button\"\n onClick={() => setManual(false)}\n className=\"self-start text-xs font-medium text-accent hover:underline\"\n >\n Search the directory instead\n </button>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"grid gap-1.5\">\n <Label>\n {label} {required && <span className=\"text-status-error-text\">*</span>}\n </Label>\n {userId ? (\n <div className=\"flex items-center gap-2 rounded-lg border border-border-seam bg-bg-surface px-3 py-2\">\n <span className=\"flex size-7 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n <UserIcon className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium text-text-primary\">\n {displayName || 'Selected user'}\n </p>\n <p className=\"truncate text-xs text-text-tertiary\">{userId}</p>\n </div>\n <button\n type=\"button\"\n aria-label={`Clear selected ${label.toLowerCase()}`}\n onClick={() => onSelect({ userId: '', displayName: '' })}\n className=\"rounded-md p-1 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-tertiary\" />\n <Input\n value={term}\n onChange={(e) => setTerm(e.target.value)}\n placeholder=\"Search by name or email…\"\n aria-label={`Search ${label.toLowerCase()} by name or email`}\n className=\"pl-9\"\n />\n {search.isFetching && (\n <Loader2 className=\"absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 animate-spin text-text-tertiary\" />\n )}\n </div>\n\n {active && !search.isFetching && results.length === 0 && (\n <p className=\"text-xs text-text-tertiary\">No users match “{term.trim()}”.</p>\n )}\n\n {results.length > 0 && (\n <ul className=\"max-h-56 divide-y divide-border-seam overflow-auto rounded-lg border border-border-seam bg-bg-surface\">\n {results.map((user) => (\n <li key={user.id}>\n <button\n type=\"button\"\n onClick={() => pick(user)}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-left transition-colors hover:bg-bg-sunken\"\n >\n <span className=\"flex size-7 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n <UserIcon className=\"h-4 w-4\" />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-medium text-text-primary\">\n {directoryUserName(user)}\n </span>\n <span className=\"block truncate text-xs text-text-tertiary\">\n {user.email}\n </span>\n </span>\n <Check className=\"h-4 w-4 shrink-0 text-text-tertiary opacity-0\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n\n <button\n type=\"button\"\n onClick={() => setManual(true)}\n className=\"text-xs font-medium text-accent hover:underline\"\n >\n Enter a user ID manually\n </button>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -12,3 +12,4 @@ import "./EvidenceUpload.js";
12
12
  import "./FileLink.js";
13
13
  import "./MybDiscussion.js";
14
14
  import "./MybTags.js";
15
+ import "./UserSearchSelect.js";
@@ -3,3 +3,4 @@ import "./usePager.js";
3
3
  import "./useMybFiles.js";
4
4
  import "./useMybComments.js";
5
5
  import "./useMybTags.js";
6
+ import "./useMybUsers.js";
@@ -91,6 +91,16 @@ var a = () => {
91
91
  onSuccess: () => i.invalidateQueries({ queryKey: s.programs })
92
92
  });
93
93
  }, w = () => {
94
+ let { apiGatewayUrl: n } = e(), i = r();
95
+ return t({
96
+ mutationFn: async (e) => (await o(`mutation MybUpdateProgram($id: ID!, $input: MybUpdateProgramInput!) {
97
+ mybUpdateProgram(id: $id, input: $input) { ${l} }
98
+ }`, e, n)).mybUpdateProgram,
99
+ onSuccess: (e) => {
100
+ i.invalidateQueries({ queryKey: s.programs }), i.invalidateQueries({ queryKey: s.program(e.id) });
101
+ }
102
+ });
103
+ }, T = () => {
94
104
  let { apiGatewayUrl: n } = e(), i = r();
95
105
  return t({
96
106
  mutationFn: async (e) => (await o(`mutation MybTransitionProgram($id: ID!, $status: MybProgramStatus!) {
@@ -100,13 +110,13 @@ var a = () => {
100
110
  i.invalidateQueries({ queryKey: s.programs }), i.invalidateQueries({ queryKey: s.program(e.id) });
101
111
  }
102
112
  });
103
- }, T = () => {
113
+ }, E = () => {
104
114
  let { apiGatewayUrl: n } = e(), i = r();
105
115
  return t({
106
116
  mutationFn: async (e) => (await o("mutation MybArchiveProgram($id: ID!) { mybArchiveProgram(id: $id) }", { id: e }, n)).mybArchiveProgram,
107
117
  onSuccess: () => i.invalidateQueries({ queryKey: s.programs })
108
118
  });
109
- }, E = () => {
119
+ }, D = () => {
110
120
  let { apiGatewayUrl: n } = e(), i = r();
111
121
  return t({
112
122
  mutationFn: async (e) => (await o(`mutation MybAddWorkout($input: MybCreateWorkoutInput!) {
@@ -116,7 +126,7 @@ var a = () => {
116
126
  i.invalidateQueries({ queryKey: s.program(e.programId) }), i.invalidateQueries({ queryKey: s.programWorkouts(e.programId) });
117
127
  }
118
128
  });
119
- }, D = () => {
129
+ }, O = () => {
120
130
  let { apiGatewayUrl: n } = e(), i = r();
121
131
  return t({
122
132
  mutationFn: async (e) => (await o("mutation MybAddExercise($input: MybCreateExerciseInput!) {\n mybAddExercise(input: $input) { id workoutId }\n }", { input: e }, n)).mybAddExercise,
@@ -124,7 +134,7 @@ var a = () => {
124
134
  i.invalidateQueries({ queryKey: ["mybodyshield", "program"] }), i.invalidateQueries({ queryKey: ["mybodyshield", "program-workouts"] });
125
135
  }
126
136
  });
127
- }, O = (t = {}) => {
137
+ }, k = (t = {}) => {
128
138
  let { apiGatewayUrl: r } = e();
129
139
  return n({
130
140
  queryKey: [...s.sessions, t],
@@ -139,7 +149,7 @@ var a = () => {
139
149
  pagination: t.pagination ?? c
140
150
  }, r)).mybListSessions
141
151
  });
142
- }, k = (t) => {
152
+ }, A = (t) => {
143
153
  let { apiGatewayUrl: r } = e();
144
154
  return n({
145
155
  queryKey: s.session(t ?? ""),
@@ -151,7 +161,7 @@ var a = () => {
151
161
  }
152
162
  }`, { id: t }, r)).mybSession
153
163
  });
154
- }, A = () => {
164
+ }, j = () => {
155
165
  let { apiGatewayUrl: n } = e(), i = r();
156
166
  return t({
157
167
  mutationFn: async (e) => (await o(`mutation MybStartSession($input: MybStartSessionInput!) {
@@ -159,7 +169,7 @@ var a = () => {
159
169
  }`, { input: e }, n)).mybStartSession,
160
170
  onSuccess: () => i.invalidateQueries({ queryKey: s.sessions })
161
171
  });
162
- }, j = () => {
172
+ }, M = () => {
163
173
  let { apiGatewayUrl: n } = e(), i = r();
164
174
  return t({
165
175
  mutationFn: async (e) => (await o(`mutation MybLogSet($input: MybLogSetInput!) {
@@ -169,7 +179,7 @@ var a = () => {
169
179
  i.invalidateQueries({ queryKey: s.session(e.sessionId) }), i.invalidateQueries({ queryKey: s.sessions });
170
180
  }
171
181
  });
172
- }, M = () => {
182
+ }, N = () => {
173
183
  let { apiGatewayUrl: n } = e(), i = r();
174
184
  return t({
175
185
  mutationFn: async (e) => (await o(`mutation MybCompleteSession($id: ID!, $input: MybCompleteSessionInput!) {
@@ -179,7 +189,7 @@ var a = () => {
179
189
  i.invalidateQueries({ queryKey: s.session(e.id) }), i.invalidateQueries({ queryKey: s.sessions });
180
190
  }
181
191
  });
182
- }, N = (t = {}) => {
192
+ }, P = (t = {}) => {
183
193
  let { apiGatewayUrl: r } = e();
184
194
  return n({
185
195
  queryKey: [...s.goals, t],
@@ -194,7 +204,7 @@ var a = () => {
194
204
  pagination: t.pagination ?? c
195
205
  }, r)).mybListGoals
196
206
  });
197
- }, P = () => {
207
+ }, F = () => {
198
208
  let { apiGatewayUrl: n } = e(), i = r();
199
209
  return t({
200
210
  mutationFn: async (e) => (await o(`mutation MybCreateGoal($input: MybCreateGoalInput!) {
@@ -202,7 +212,7 @@ var a = () => {
202
212
  }`, { input: e }, n)).mybCreateGoal,
203
213
  onSuccess: () => i.invalidateQueries({ queryKey: s.goals })
204
214
  });
205
- }, F = () => {
215
+ }, I = () => {
206
216
  let { apiGatewayUrl: n } = e(), i = r();
207
217
  return t({
208
218
  mutationFn: async (e) => (await o(`mutation MybUpdateGoal($id: ID!, $input: MybUpdateGoalInput!) {
@@ -210,7 +220,7 @@ var a = () => {
210
220
  }`, e, n)).mybUpdateGoal,
211
221
  onSuccess: () => i.invalidateQueries({ queryKey: s.goals })
212
222
  });
213
- }, I = () => {
223
+ }, L = () => {
214
224
  let { apiGatewayUrl: n } = e(), i = r();
215
225
  return t({
216
226
  mutationFn: async (e) => (await o(`mutation MybAchieveGoal($id: ID!) {
@@ -218,7 +228,7 @@ var a = () => {
218
228
  }`, { id: e }, n)).mybAchieveGoal,
219
229
  onSuccess: () => i.invalidateQueries({ queryKey: s.goals })
220
230
  });
221
- }, L = (t) => {
231
+ }, R = (t) => {
222
232
  let { apiGatewayUrl: r } = e();
223
233
  return n({
224
234
  queryKey: [...s.activePlan, t ?? "me"],
@@ -226,7 +236,7 @@ var a = () => {
226
236
  mybActiveNutritionPlan(memberId: $memberId) { ${g} }
227
237
  }`, { memberId: t }, r)).mybActiveNutritionPlan
228
238
  });
229
- }, R = (t = {}) => {
239
+ }, z = (t = {}) => {
230
240
  let { apiGatewayUrl: r } = e();
231
241
  return n({
232
242
  queryKey: [...s.meals, t],
@@ -241,7 +251,7 @@ var a = () => {
241
251
  pagination: t.pagination ?? c
242
252
  }, r)).mybListMeals
243
253
  });
244
- }, z = (t, r) => {
254
+ }, B = (t, r) => {
245
255
  let { apiGatewayUrl: i } = e();
246
256
  return n({
247
257
  queryKey: [
@@ -256,7 +266,7 @@ var a = () => {
256
266
  memberId: r
257
267
  }, i)).mybDailyMacros
258
268
  });
259
- }, B = () => {
269
+ }, V = () => {
260
270
  let { apiGatewayUrl: n } = e(), i = r();
261
271
  return t({
262
272
  mutationFn: async (e) => (await o(`mutation MybCreateNutritionPlan($input: MybCreateNutritionPlanInput!) {
@@ -266,7 +276,7 @@ var a = () => {
266
276
  i.invalidateQueries({ queryKey: s.activePlan });
267
277
  }
268
278
  });
269
- }, V = () => {
279
+ }, H = () => {
270
280
  let { apiGatewayUrl: n } = e(), i = r();
271
281
  return t({
272
282
  mutationFn: async (e) => (await o(`mutation MybUpdateNutritionPlan($id: ID!, $input: MybUpdateNutritionPlanInput!) {
@@ -276,7 +286,17 @@ var a = () => {
276
286
  i.invalidateQueries({ queryKey: s.activePlan }), i.invalidateQueries({ queryKey: s.nutritionPlan(e.id) });
277
287
  }
278
288
  });
279
- }, H = () => {
289
+ }, U = () => {
290
+ let { apiGatewayUrl: n } = e(), i = r();
291
+ return t({
292
+ mutationFn: async (e) => (await o(`mutation MybActivateNutritionPlan($id: ID!) {
293
+ mybActivateNutritionPlan(id: $id) { ${g} }
294
+ }`, { id: e }, n)).mybActivateNutritionPlan,
295
+ onSuccess: (e) => {
296
+ i.invalidateQueries({ queryKey: s.activePlan }), i.invalidateQueries({ queryKey: s.nutritionPlan(e.id) });
297
+ }
298
+ });
299
+ }, W = () => {
280
300
  let { apiGatewayUrl: n } = e(), i = r();
281
301
  return t({
282
302
  mutationFn: async (e) => (await o(`mutation MybLogMeal($input: MybLogMealInput!) {
@@ -286,7 +306,7 @@ var a = () => {
286
306
  i.invalidateQueries({ queryKey: s.meals }), i.invalidateQueries({ queryKey: s.dailyMacros }), e.planId && i.invalidateQueries({ queryKey: s.nutritionPlan(e.planId) });
287
307
  }
288
308
  });
289
- }, U = () => {
309
+ }, G = () => {
290
310
  let { apiGatewayUrl: n } = e(), i = r();
291
311
  return t({
292
312
  mutationFn: async (e) => (await o("mutation MybDeleteMeal($id: ID!) { mybDeleteMeal(id: $id) }", { id: e }, n)).mybDeleteMeal,
@@ -294,7 +314,7 @@ var a = () => {
294
314
  i.invalidateQueries({ queryKey: s.meals }), i.invalidateQueries({ queryKey: s.dailyMacros });
295
315
  }
296
316
  });
297
- }, W = (t = {}) => {
317
+ }, K = (t = {}) => {
298
318
  let { apiGatewayUrl: r } = e();
299
319
  return n({
300
320
  queryKey: [...s.bodyMetrics, t],
@@ -309,7 +329,7 @@ var a = () => {
309
329
  pagination: t.pagination ?? c
310
330
  }, r)).mybListBodyMetrics
311
331
  });
312
- }, G = () => {
332
+ }, q = () => {
313
333
  let { apiGatewayUrl: n } = e(), i = r();
314
334
  return t({
315
335
  mutationFn: async (e) => (await o(`mutation MybRecordBodyMetric($input: MybRecordMetricInput!) {
@@ -317,7 +337,7 @@ var a = () => {
317
337
  }`, { input: e }, n)).mybRecordBodyMetric,
318
338
  onSuccess: () => i.invalidateQueries({ queryKey: s.bodyMetrics })
319
339
  });
320
- }, K = (t, r) => {
340
+ }, J = (t, r) => {
321
341
  let { apiGatewayUrl: i } = e();
322
342
  return n({
323
343
  queryKey: [
@@ -332,7 +352,7 @@ var a = () => {
332
352
  memberId: r
333
353
  }, i)).mybListRecoveryLogs
334
354
  });
335
- }, q = () => {
355
+ }, Y = () => {
336
356
  let { apiGatewayUrl: n } = e(), i = r();
337
357
  return t({
338
358
  mutationFn: async (e) => (await o(`mutation MybLogRecovery($input: MybLogRecoveryInput!) {
@@ -340,7 +360,7 @@ var a = () => {
340
360
  }`, { input: e }, n)).mybLogRecovery,
341
361
  onSuccess: () => i.invalidateQueries({ queryKey: s.recovery })
342
362
  });
343
- }, J = (t, r) => {
363
+ }, X = (t, r) => {
344
364
  let { apiGatewayUrl: i } = e();
345
365
  return n({
346
366
  queryKey: [
@@ -355,7 +375,7 @@ var a = () => {
355
375
  memberId: r
356
376
  }, i)).mybListCoaching
357
377
  });
358
- }, Y = () => {
378
+ }, Z = () => {
359
379
  let { apiGatewayUrl: n } = e(), i = r();
360
380
  return t({
361
381
  mutationFn: async (e) => (await o(`mutation MybCreateCoaching($input: MybCreateCoachingInput!) {
@@ -363,7 +383,7 @@ var a = () => {
363
383
  }`, { input: e }, n)).mybCreateCoaching,
364
384
  onSuccess: () => i.invalidateQueries({ queryKey: s.coaching })
365
385
  });
366
- }, X = () => {
386
+ }, Q = () => {
367
387
  let { apiGatewayUrl: n } = e(), i = r();
368
388
  return t({
369
389
  mutationFn: async (e) => (await o(`mutation MybTransitionCoaching($id: ID!, $status: MybCoachingStatus!) {
@@ -373,6 +393,6 @@ var a = () => {
373
393
  });
374
394
  };
375
395
  //#endregion
376
- export { I as useMybAchieveGoal, L as useMybActiveNutritionPlan, D as useMybAddExercise, E as useMybAddWorkout, T as useMybArchiveProgram, W as useMybBodyMetrics, J as useMybCoaching, M as useMybCompleteSession, Y as useMybCreateCoaching, P as useMybCreateGoal, B as useMybCreateNutritionPlan, C as useMybCreateProgram, z as useMybDailyMacros, U as useMybDeleteMeal, N as useMybGoals, H as useMybLogMeal, q as useMybLogRecovery, j as useMybLogSet, R as useMybMeals, S as useMybProgram, x as useMybPrograms, G as useMybRecordBodyMetric, K as useMybRecoveryLogs, k as useMybSession, O as useMybSessions, A as useMybStartSession, X as useMybTransitionCoaching, w as useMybTransitionProgram, F as useMybUpdateGoal, V as useMybUpdateNutritionPlan };
396
+ export { L as useMybAchieveGoal, U as useMybActivateNutritionPlan, R as useMybActiveNutritionPlan, O as useMybAddExercise, D as useMybAddWorkout, E as useMybArchiveProgram, K as useMybBodyMetrics, X as useMybCoaching, N as useMybCompleteSession, Z as useMybCreateCoaching, F as useMybCreateGoal, V as useMybCreateNutritionPlan, C as useMybCreateProgram, B as useMybDailyMacros, G as useMybDeleteMeal, P as useMybGoals, W as useMybLogMeal, Y as useMybLogRecovery, M as useMybLogSet, z as useMybMeals, S as useMybProgram, x as useMybPrograms, q as useMybRecordBodyMetric, J as useMybRecoveryLogs, A as useMybSession, k as useMybSessions, j as useMybStartSession, Q as useMybTransitionCoaching, T as useMybTransitionProgram, I as useMybUpdateGoal, H as useMybUpdateNutritionPlan, w as useMybUpdateProgram };
377
397
 
378
398
  //# sourceMappingURL=useMyBodyShieldApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMyBodyShieldApi.js","names":[],"sources":["../../../src/mybodyshield/hooks/useMyBodyShieldApi.ts"],"sourcesContent":["/**\n * MyBodyShield API hooks\n * @module mybodyshield/hooks\n *\n * React-Query hooks wired DIRECTLY to the real `wspace-mybodyshield-svc`\n * federated GraphQL contract (the `myb*` operations). Every query/mutation\n * below uses an inline gql string whose fields match the svc\n * `.hive-schema.graphql` exactly. No mock data.\n *\n * Transport: `graphqlFetch({ gateway: 'workspace', workspaceToken: true })` —\n * the host shell supplies the gateway base URL + a workspace-scoped token.\n */\n\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { graphqlFetch } from '@burdenoff/fe-libs/shared/graphql';\n\nimport { useMyBodyShield } from '../context';\nimport type {\n MybConnection,\n MybProgram,\n MybProgramStatus,\n MybWorkout,\n MybWorkoutSession,\n MybSessionStatus,\n MybSessionSet,\n MybGoal,\n MybGoalStatus,\n MybMealLog,\n MybMealType,\n MybNutritionPlan,\n MybDailyMacros,\n MybBodyMetric,\n MybBodyMetricType,\n MybRecoveryLog,\n MybRecoveryMetric,\n MybCoachingRelationship,\n MybCoachingStatus,\n MybCreateProgramInput,\n MybUpdateProgramInput,\n MybCreateWorkoutInput,\n MybCreateExerciseInput,\n MybStartSessionInput,\n MybLogSetInput,\n MybCompleteSessionInput,\n MybCreateGoalInput,\n MybUpdateGoalInput,\n MybCreateNutritionPlanInput,\n MybUpdateNutritionPlanInput,\n MybLogMealInput,\n MybRecordMetricInput,\n MybLogRecoveryInput,\n MybCreateCoachingInput,\n PaginationInput,\n} from '../types';\n\n// ============================================================================\n// Transport\n// ============================================================================\n\n/**\n * fe-libs `graphqlFetch` coalesces `query` responses in an in-memory cache keyed\n * by operationName+variables for ~15s (mutations are never cached). A read\n * issued right after a write (e.g. React-Query refetch triggered by our\n * `invalidateQueries`) would otherwise return the PRE-mutation response until the\n * TTL expires — making just-created/updated rows invisible until a full reload.\n * fe-libs' documented remedy is that write-performing callers clear those caches;\n * we do exactly that after every myb mutation so every follow-up read is fresh.\n */\ntype GraphqlReadCacheGlobals = {\n __graphqlFetchResponseCache?: { clear: () => void };\n __graphqlFetchPendingResponses?: { clear: () => void };\n __boffGraphQLResponseCache?: { clear: () => void };\n};\n\nconst clearGraphqlReadCaches = (): void => {\n const g = globalThis as GraphqlReadCacheGlobals;\n g.__graphqlFetchResponseCache?.clear();\n g.__graphqlFetchPendingResponses?.clear();\n g.__boffGraphQLResponseCache?.clear();\n};\n\nconst mybQuery = async <TData>(\n query: string,\n variables: Record<string, unknown>,\n baseUrl?: string\n): Promise<TData> => {\n const response = await graphqlFetch<TData>({\n gateway: 'workspace',\n baseUrl,\n query,\n variables,\n workspaceToken: true,\n });\n\n if (response.errors?.length) {\n throw new Error(response.errors[0]?.message ?? 'GraphQL request failed');\n }\n if (!response.data) {\n throw new Error('GraphQL response did not include data');\n }\n if (/^\\s*mutation\\b/.test(query)) {\n clearGraphqlReadCaches();\n }\n return response.data;\n};\n\n// React-Query key roots (one namespace per domain entity).\nconst KEY = {\n programs: ['mybodyshield', 'programs'] as const,\n program: (id: string) => ['mybodyshield', 'program', id] as const,\n programWorkouts: (id: string) => ['mybodyshield', 'program-workouts', id] as const,\n sessions: ['mybodyshield', 'sessions'] as const,\n session: (id: string) => ['mybodyshield', 'session', id] as const,\n goals: ['mybodyshield', 'goals'] as const,\n goal: (id: string) => ['mybodyshield', 'goal', id] as const,\n meals: ['mybodyshield', 'meals'] as const,\n nutritionPlan: (id: string) => ['mybodyshield', 'nutrition-plan', id] as const,\n activePlan: ['mybodyshield', 'active-plan'] as const,\n dailyMacros: ['mybodyshield', 'daily-macros'] as const,\n bodyMetrics: ['mybodyshield', 'body-metrics'] as const,\n recovery: ['mybodyshield', 'recovery'] as const,\n coaching: ['mybodyshield', 'coaching'] as const,\n};\n\nconst DEFAULT_PAGE: PaginationInput = { limit: 50 };\n\n// ============================================================================\n// Reusable gql field selections (codegen-free strictness)\n// ============================================================================\n\nconst PROGRAM_FIELDS = `\n id workspaceId memberId coachId name description goalType level phase status\n weeks daysPerWeek startDate endDate tags createdAt updatedAt\n`;\n\nconst EXERCISE_FIELDS = `\n id workspaceId workoutId name instructions muscleGroup sets reps targetWeight\n restSeconds orderIndex demo { id } createdAt updatedAt\n`;\n\nconst WORKOUT_FIELDS = `\n id workspaceId programId name description type dayOfWeek weekNumber orderIndex\n durationMin createdAt updatedAt\n`;\n\nconst SET_FIELDS = `\n id workspaceId sessionId exerciseName setNumber reps weight distanceM durationSec\n isPersonalRecord createdAt updatedAt\n`;\n\nconst SESSION_FIELDS = `\n id workspaceId memberId programId workoutId status scheduledFor startedAt completedAt\n caloriesBurned perceivedExertion notes createdAt updatedAt\n`;\n\nconst GOAL_FIELDS = `\n id workspaceId memberId title description type status targetValue currentValue\n baselineValue unit targetDate achievedAt createdAt updatedAt\n`;\n\nconst MEAL_FIELDS = `\n id workspaceId memberId planId name mealType calories proteinG carbsG fatG servings\n isFavorite loggedAt createdAt updatedAt\n`;\n\nconst PLAN_FIELDS = `\n id workspaceId memberId coachId name goalType calorieTarget proteinTarget carbsTarget\n fatTarget startDate endDate isActive notes createdAt updatedAt\n`;\n\nconst METRIC_FIELDS = `\n id workspaceId memberId type value unit measuredAt notes photo { id } createdAt updatedAt\n`;\n\nconst RECOVERY_FIELDS = `\n id workspaceId memberId metric score sleepHours notes loggedAt createdAt updatedAt\n`;\n\nconst COACHING_FIELDS = `\n id workspaceId coachId memberId status specialty shareWorkouts shareNutrition\n shareMetrics startedAt endedAt notes createdAt updatedAt\n`;\n\nconst MACROS_FIELDS = `\n date calories proteinG carbsG fatG calorieTarget proteinTarget carbsTarget fatTarget\n`;\n\n// ============================================================================\n// Programs (Training)\n// ============================================================================\n\nexport interface ProgramFilters {\n status?: MybProgramStatus;\n memberId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybPrograms = (filters: ProgramFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.programs, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListPrograms: MybConnection<MybProgram> }>(\n `query MybListPrograms($status: MybProgramStatus, $memberId: ID, $pagination: PaginationInput) {\n mybListPrograms(status: $status, memberId: $memberId, pagination: $pagination) {\n items { ${PROGRAM_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n status: filters.status,\n memberId: filters.memberId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListPrograms;\n },\n });\n};\n\nexport const useMybProgram = (id: string | undefined) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: KEY.program(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await mybQuery<{ mybProgram: MybProgram | null }>(\n `query MybProgram($id: ID!) {\n mybProgram(id: $id) {\n ${PROGRAM_FIELDS}\n workouts {\n ${WORKOUT_FIELDS}\n exercises { ${EXERCISE_FIELDS} }\n }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybProgram;\n },\n });\n};\n\nexport const useMybProgramWorkouts = (programId: string | undefined) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: KEY.programWorkouts(programId ?? ''),\n enabled: Boolean(programId),\n queryFn: async () => {\n const result = await mybQuery<{ mybProgramWorkouts: MybWorkout[] }>(\n `query MybProgramWorkouts($programId: ID!) {\n mybProgramWorkouts(programId: $programId) {\n ${WORKOUT_FIELDS}\n exercises { ${EXERCISE_FIELDS} }\n }\n }`,\n { programId },\n apiGatewayUrl\n );\n return result.mybProgramWorkouts;\n },\n });\n};\n\nexport const useMybCreateProgram = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateProgramInput) => {\n const result = await mybQuery<{ mybCreateProgram: MybProgram }>(\n `mutation MybCreateProgram($input: MybCreateProgramInput!) {\n mybCreateProgram(input: $input) { ${PROGRAM_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybCreateProgram;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.programs }),\n });\n};\n\nexport const useMybUpdateProgram = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: MybUpdateProgramInput }) => {\n const result = await mybQuery<{ mybUpdateProgram: MybProgram }>(\n `mutation MybUpdateProgram($id: ID!, $input: MybUpdateProgramInput!) {\n mybUpdateProgram(id: $id, input: $input) { ${PROGRAM_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybUpdateProgram;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.programs });\n qc.invalidateQueries({ queryKey: KEY.program(data.id) });\n },\n });\n};\n\nexport const useMybTransitionProgram = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; status: MybProgramStatus }) => {\n const result = await mybQuery<{ mybTransitionProgram: MybProgram }>(\n `mutation MybTransitionProgram($id: ID!, $status: MybProgramStatus!) {\n mybTransitionProgram(id: $id, status: $status) { ${PROGRAM_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybTransitionProgram;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.programs });\n qc.invalidateQueries({ queryKey: KEY.program(data.id) });\n },\n });\n};\n\nexport const useMybArchiveProgram = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await mybQuery<{ mybArchiveProgram: boolean }>(\n `mutation MybArchiveProgram($id: ID!) { mybArchiveProgram(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.mybArchiveProgram;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.programs }),\n });\n};\n\nexport const useMybAddWorkout = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateWorkoutInput) => {\n const result = await mybQuery<{ mybAddWorkout: MybWorkout }>(\n `mutation MybAddWorkout($input: MybCreateWorkoutInput!) {\n mybAddWorkout(input: $input) { ${WORKOUT_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybAddWorkout;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.program(data.programId) });\n qc.invalidateQueries({ queryKey: KEY.programWorkouts(data.programId) });\n },\n });\n};\n\nexport const useMybAddExercise = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateExerciseInput) => {\n const result = await mybQuery<{ mybAddExercise: { id: string; workoutId: string } }>(\n `mutation MybAddExercise($input: MybCreateExerciseInput!) {\n mybAddExercise(input: $input) { id workoutId }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybAddExercise;\n },\n onSuccess: () => {\n // Exercises live under a program's workouts; invalidate program + workout\n // caches so the newly-added exercise appears on the program detail tree.\n qc.invalidateQueries({ queryKey: ['mybodyshield', 'program'] });\n qc.invalidateQueries({ queryKey: ['mybodyshield', 'program-workouts'] });\n },\n });\n};\n\n// ============================================================================\n// Sessions / Sets (Training — live logging)\n// ============================================================================\n\nexport interface SessionFilters {\n status?: MybSessionStatus;\n programId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybSessions = (filters: SessionFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.sessions, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListSessions: MybConnection<MybWorkoutSession> }>(\n `query MybListSessions($status: MybSessionStatus, $programId: ID, $pagination: PaginationInput) {\n mybListSessions(status: $status, programId: $programId, pagination: $pagination) {\n items { ${SESSION_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n status: filters.status,\n programId: filters.programId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListSessions;\n },\n });\n};\n\nexport const useMybSession = (id: string | undefined) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: KEY.session(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await mybQuery<{ mybSession: MybWorkoutSession | null }>(\n `query MybSession($id: ID!) {\n mybSession(id: $id) {\n ${SESSION_FIELDS}\n sets { ${SET_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybSession;\n },\n });\n};\n\nexport const useMybStartSession = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybStartSessionInput) => {\n const result = await mybQuery<{ mybStartSession: MybWorkoutSession }>(\n `mutation MybStartSession($input: MybStartSessionInput!) {\n mybStartSession(input: $input) { ${SESSION_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybStartSession;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.sessions }),\n });\n};\n\nexport const useMybLogSet = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybLogSetInput) => {\n const result = await mybQuery<{ mybLogSet: MybSessionSet }>(\n `mutation MybLogSet($input: MybLogSetInput!) {\n mybLogSet(input: $input) { ${SET_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybLogSet;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.session(data.sessionId) });\n qc.invalidateQueries({ queryKey: KEY.sessions });\n },\n });\n};\n\nexport const useMybCompleteSession = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: MybCompleteSessionInput }) => {\n const result = await mybQuery<{ mybCompleteSession: MybWorkoutSession }>(\n `mutation MybCompleteSession($id: ID!, $input: MybCompleteSessionInput!) {\n mybCompleteSession(id: $id, input: $input) { ${SESSION_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybCompleteSession;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.session(data.id) });\n qc.invalidateQueries({ queryKey: KEY.sessions });\n },\n });\n};\n\n// ============================================================================\n// Goals (Progress)\n// ============================================================================\n\nexport interface GoalFilters {\n status?: MybGoalStatus;\n memberId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybGoals = (filters: GoalFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.goals, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListGoals: MybConnection<MybGoal> }>(\n `query MybListGoals($status: MybGoalStatus, $memberId: ID, $pagination: PaginationInput) {\n mybListGoals(status: $status, memberId: $memberId, pagination: $pagination) {\n items { ${GOAL_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n status: filters.status,\n memberId: filters.memberId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListGoals;\n },\n });\n};\n\nexport const useMybCreateGoal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateGoalInput) => {\n const result = await mybQuery<{ mybCreateGoal: MybGoal }>(\n `mutation MybCreateGoal($input: MybCreateGoalInput!) {\n mybCreateGoal(input: $input) { ${GOAL_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybCreateGoal;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n });\n};\n\nexport const useMybUpdateGoal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: MybUpdateGoalInput }) => {\n const result = await mybQuery<{ mybUpdateGoal: MybGoal }>(\n `mutation MybUpdateGoal($id: ID!, $input: MybUpdateGoalInput!) {\n mybUpdateGoal(id: $id, input: $input) { ${GOAL_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybUpdateGoal;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n });\n};\n\nexport const useMybAchieveGoal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await mybQuery<{ mybAchieveGoal: MybGoal }>(\n `mutation MybAchieveGoal($id: ID!) {\n mybAchieveGoal(id: $id) { ${GOAL_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybAchieveGoal;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n });\n};\n\n// ============================================================================\n// Nutrition (plans, meals, macros)\n// ============================================================================\n\nexport const useMybActiveNutritionPlan = (memberId?: string) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.activePlan, memberId ?? 'me'],\n queryFn: async () => {\n const result = await mybQuery<{ mybActiveNutritionPlan: MybNutritionPlan | null }>(\n `query MybActiveNutritionPlan($memberId: ID) {\n mybActiveNutritionPlan(memberId: $memberId) { ${PLAN_FIELDS} }\n }`,\n { memberId },\n apiGatewayUrl\n );\n return result.mybActiveNutritionPlan;\n },\n });\n};\n\nexport const useMybNutritionPlan = (id: string | undefined) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: KEY.nutritionPlan(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await mybQuery<{ mybNutritionPlan: MybNutritionPlan | null }>(\n `query MybNutritionPlan($id: ID!) {\n mybNutritionPlan(id: $id) {\n ${PLAN_FIELDS}\n meals { ${MEAL_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybNutritionPlan;\n },\n });\n};\n\nexport interface MealFilters {\n mealType?: MybMealType;\n planId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybMeals = (filters: MealFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.meals, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListMeals: MybConnection<MybMealLog> }>(\n `query MybListMeals($mealType: MybMealType, $planId: ID, $pagination: PaginationInput) {\n mybListMeals(mealType: $mealType, planId: $planId, pagination: $pagination) {\n items { ${MEAL_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n mealType: filters.mealType,\n planId: filters.planId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListMeals;\n },\n });\n};\n\nexport const useMybDailyMacros = (date?: string, memberId?: string) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.dailyMacros, date ?? 'today', memberId ?? 'me'],\n queryFn: async () => {\n const result = await mybQuery<{ mybDailyMacros: MybDailyMacros }>(\n `query MybDailyMacros($date: DateTime, $memberId: ID) {\n mybDailyMacros(date: $date, memberId: $memberId) { ${MACROS_FIELDS} }\n }`,\n { date, memberId },\n apiGatewayUrl\n );\n return result.mybDailyMacros;\n },\n });\n};\n\nexport const useMybCreateNutritionPlan = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateNutritionPlanInput) => {\n const result = await mybQuery<{ mybCreateNutritionPlan: MybNutritionPlan }>(\n `mutation MybCreateNutritionPlan($input: MybCreateNutritionPlanInput!) {\n mybCreateNutritionPlan(input: $input) { ${PLAN_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybCreateNutritionPlan;\n },\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.activePlan });\n },\n });\n};\n\nexport const useMybUpdateNutritionPlan = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: MybUpdateNutritionPlanInput }) => {\n const result = await mybQuery<{ mybUpdateNutritionPlan: MybNutritionPlan }>(\n `mutation MybUpdateNutritionPlan($id: ID!, $input: MybUpdateNutritionPlanInput!) {\n mybUpdateNutritionPlan(id: $id, input: $input) { ${PLAN_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybUpdateNutritionPlan;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.activePlan });\n qc.invalidateQueries({ queryKey: KEY.nutritionPlan(data.id) });\n },\n });\n};\n\nexport const useMybActivateNutritionPlan = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await mybQuery<{ mybActivateNutritionPlan: MybNutritionPlan }>(\n `mutation MybActivateNutritionPlan($id: ID!) {\n mybActivateNutritionPlan(id: $id) { ${PLAN_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybActivateNutritionPlan;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.activePlan });\n qc.invalidateQueries({ queryKey: KEY.nutritionPlan(data.id) });\n },\n });\n};\n\nexport const useMybLogMeal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybLogMealInput) => {\n const result = await mybQuery<{ mybLogMeal: MybMealLog }>(\n `mutation MybLogMeal($input: MybLogMealInput!) {\n mybLogMeal(input: $input) { ${MEAL_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybLogMeal;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.meals });\n qc.invalidateQueries({ queryKey: KEY.dailyMacros });\n if (data.planId) qc.invalidateQueries({ queryKey: KEY.nutritionPlan(data.planId) });\n },\n });\n};\n\nexport const useMybDeleteMeal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await mybQuery<{ mybDeleteMeal: boolean }>(\n `mutation MybDeleteMeal($id: ID!) { mybDeleteMeal(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.mybDeleteMeal;\n },\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.meals });\n qc.invalidateQueries({ queryKey: KEY.dailyMacros });\n },\n });\n};\n\n// ============================================================================\n// Body metrics (Progress)\n// ============================================================================\n\nexport interface BodyMetricFilters {\n type?: MybBodyMetricType;\n memberId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybBodyMetrics = (filters: BodyMetricFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.bodyMetrics, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListBodyMetrics: MybConnection<MybBodyMetric> }>(\n `query MybListBodyMetrics($type: MybBodyMetricType, $memberId: ID, $pagination: PaginationInput) {\n mybListBodyMetrics(type: $type, memberId: $memberId, pagination: $pagination) {\n items { ${METRIC_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n type: filters.type,\n memberId: filters.memberId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListBodyMetrics;\n },\n });\n};\n\nexport const useMybRecordBodyMetric = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybRecordMetricInput) => {\n const result = await mybQuery<{ mybRecordBodyMetric: MybBodyMetric }>(\n `mutation MybRecordBodyMetric($input: MybRecordMetricInput!) {\n mybRecordBodyMetric(input: $input) { ${METRIC_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybRecordBodyMetric;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.bodyMetrics }),\n });\n};\n\n// ============================================================================\n// Recovery (Wellbeing)\n// ============================================================================\n\nexport const useMybRecoveryLogs = (metric?: MybRecoveryMetric, memberId?: string) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.recovery, metric ?? 'all', memberId ?? 'me'],\n queryFn: async () => {\n const result = await mybQuery<{ mybListRecoveryLogs: MybRecoveryLog[] }>(\n `query MybListRecoveryLogs($metric: MybRecoveryMetric, $memberId: ID) {\n mybListRecoveryLogs(metric: $metric, memberId: $memberId) { ${RECOVERY_FIELDS} }\n }`,\n { metric, memberId },\n apiGatewayUrl\n );\n return result.mybListRecoveryLogs;\n },\n });\n};\n\nexport const useMybLogRecovery = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybLogRecoveryInput) => {\n const result = await mybQuery<{ mybLogRecovery: MybRecoveryLog }>(\n `mutation MybLogRecovery($input: MybLogRecoveryInput!) {\n mybLogRecovery(input: $input) { ${RECOVERY_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybLogRecovery;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.recovery }),\n });\n};\n\n// ============================================================================\n// Coaching (Wellbeing)\n// ============================================================================\n\nexport const useMybCoaching = (status?: MybCoachingStatus, memberId?: string) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.coaching, status ?? 'all', memberId ?? 'me'],\n queryFn: async () => {\n const result = await mybQuery<{ mybListCoaching: MybCoachingRelationship[] }>(\n `query MybListCoaching($status: MybCoachingStatus, $memberId: ID) {\n mybListCoaching(status: $status, memberId: $memberId) { ${COACHING_FIELDS} }\n }`,\n { status, memberId },\n apiGatewayUrl\n );\n return result.mybListCoaching;\n },\n });\n};\n\nexport const useMybCreateCoaching = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateCoachingInput) => {\n const result = await mybQuery<{ mybCreateCoaching: MybCoachingRelationship }>(\n `mutation MybCreateCoaching($input: MybCreateCoachingInput!) {\n mybCreateCoaching(input: $input) { ${COACHING_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybCreateCoaching;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.coaching }),\n });\n};\n\nexport const useMybTransitionCoaching = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; status: MybCoachingStatus }) => {\n const result = await mybQuery<{ mybTransitionCoaching: MybCoachingRelationship }>(\n `mutation MybTransitionCoaching($id: ID!, $status: MybCoachingStatus!) {\n mybTransitionCoaching(id: $id, status: $status) { ${COACHING_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybTransitionCoaching;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.coaching }),\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"useMyBodyShieldApi.js","names":[],"sources":["../../../src/mybodyshield/hooks/useMyBodyShieldApi.ts"],"sourcesContent":["/**\n * MyBodyShield API hooks\n * @module mybodyshield/hooks\n *\n * React-Query hooks wired DIRECTLY to the real `wspace-mybodyshield-svc`\n * federated GraphQL contract (the `myb*` operations). Every query/mutation\n * below uses an inline gql string whose fields match the svc\n * `.hive-schema.graphql` exactly. No mock data.\n *\n * Transport: `graphqlFetch({ gateway: 'workspace', workspaceToken: true })` —\n * the host shell supplies the gateway base URL + a workspace-scoped token.\n */\n\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { graphqlFetch } from '@burdenoff/fe-libs/shared/graphql';\n\nimport { useMyBodyShield } from '../context';\nimport type {\n MybConnection,\n MybProgram,\n MybProgramStatus,\n MybWorkout,\n MybWorkoutSession,\n MybSessionStatus,\n MybSessionSet,\n MybGoal,\n MybGoalStatus,\n MybMealLog,\n MybMealType,\n MybNutritionPlan,\n MybDailyMacros,\n MybBodyMetric,\n MybBodyMetricType,\n MybRecoveryLog,\n MybRecoveryMetric,\n MybCoachingRelationship,\n MybCoachingStatus,\n MybCreateProgramInput,\n MybUpdateProgramInput,\n MybCreateWorkoutInput,\n MybCreateExerciseInput,\n MybStartSessionInput,\n MybLogSetInput,\n MybCompleteSessionInput,\n MybCreateGoalInput,\n MybUpdateGoalInput,\n MybCreateNutritionPlanInput,\n MybUpdateNutritionPlanInput,\n MybLogMealInput,\n MybRecordMetricInput,\n MybLogRecoveryInput,\n MybCreateCoachingInput,\n PaginationInput,\n} from '../types';\n\n// ============================================================================\n// Transport\n// ============================================================================\n\n/**\n * fe-libs `graphqlFetch` coalesces `query` responses in an in-memory cache keyed\n * by operationName+variables for ~15s (mutations are never cached). A read\n * issued right after a write (e.g. React-Query refetch triggered by our\n * `invalidateQueries`) would otherwise return the PRE-mutation response until the\n * TTL expires — making just-created/updated rows invisible until a full reload.\n * fe-libs' documented remedy is that write-performing callers clear those caches;\n * we do exactly that after every myb mutation so every follow-up read is fresh.\n */\ntype GraphqlReadCacheGlobals = {\n __graphqlFetchResponseCache?: { clear: () => void };\n __graphqlFetchPendingResponses?: { clear: () => void };\n __boffGraphQLResponseCache?: { clear: () => void };\n};\n\nconst clearGraphqlReadCaches = (): void => {\n const g = globalThis as GraphqlReadCacheGlobals;\n g.__graphqlFetchResponseCache?.clear();\n g.__graphqlFetchPendingResponses?.clear();\n g.__boffGraphQLResponseCache?.clear();\n};\n\nconst mybQuery = async <TData>(\n query: string,\n variables: Record<string, unknown>,\n baseUrl?: string\n): Promise<TData> => {\n const response = await graphqlFetch<TData>({\n gateway: 'workspace',\n baseUrl,\n query,\n variables,\n workspaceToken: true,\n });\n\n if (response.errors?.length) {\n throw new Error(response.errors[0]?.message ?? 'GraphQL request failed');\n }\n if (!response.data) {\n throw new Error('GraphQL response did not include data');\n }\n if (/^\\s*mutation\\b/.test(query)) {\n clearGraphqlReadCaches();\n }\n return response.data;\n};\n\n// React-Query key roots (one namespace per domain entity).\nconst KEY = {\n programs: ['mybodyshield', 'programs'] as const,\n program: (id: string) => ['mybodyshield', 'program', id] as const,\n programWorkouts: (id: string) => ['mybodyshield', 'program-workouts', id] as const,\n sessions: ['mybodyshield', 'sessions'] as const,\n session: (id: string) => ['mybodyshield', 'session', id] as const,\n goals: ['mybodyshield', 'goals'] as const,\n goal: (id: string) => ['mybodyshield', 'goal', id] as const,\n meals: ['mybodyshield', 'meals'] as const,\n nutritionPlan: (id: string) => ['mybodyshield', 'nutrition-plan', id] as const,\n activePlan: ['mybodyshield', 'active-plan'] as const,\n dailyMacros: ['mybodyshield', 'daily-macros'] as const,\n bodyMetrics: ['mybodyshield', 'body-metrics'] as const,\n recovery: ['mybodyshield', 'recovery'] as const,\n coaching: ['mybodyshield', 'coaching'] as const,\n};\n\nconst DEFAULT_PAGE: PaginationInput = { limit: 50 };\n\n// ============================================================================\n// Reusable gql field selections (codegen-free strictness)\n// ============================================================================\n\nconst PROGRAM_FIELDS = `\n id workspaceId memberId coachId name description goalType level phase status\n weeks daysPerWeek startDate endDate tags createdAt updatedAt\n`;\n\nconst EXERCISE_FIELDS = `\n id workspaceId workoutId name instructions muscleGroup sets reps targetWeight\n restSeconds orderIndex demo { id } createdAt updatedAt\n`;\n\nconst WORKOUT_FIELDS = `\n id workspaceId programId name description type dayOfWeek weekNumber orderIndex\n durationMin createdAt updatedAt\n`;\n\nconst SET_FIELDS = `\n id workspaceId sessionId exerciseName setNumber reps weight distanceM durationSec\n isPersonalRecord createdAt updatedAt\n`;\n\nconst SESSION_FIELDS = `\n id workspaceId memberId programId workoutId status scheduledFor startedAt completedAt\n caloriesBurned perceivedExertion notes createdAt updatedAt\n`;\n\nconst GOAL_FIELDS = `\n id workspaceId memberId title description type status targetValue currentValue\n baselineValue unit targetDate achievedAt createdAt updatedAt\n`;\n\nconst MEAL_FIELDS = `\n id workspaceId memberId planId name mealType calories proteinG carbsG fatG servings\n isFavorite loggedAt createdAt updatedAt\n`;\n\nconst PLAN_FIELDS = `\n id workspaceId memberId coachId name goalType calorieTarget proteinTarget carbsTarget\n fatTarget startDate endDate isActive notes createdAt updatedAt\n`;\n\nconst METRIC_FIELDS = `\n id workspaceId memberId type value unit measuredAt notes photo { id } createdAt updatedAt\n`;\n\nconst RECOVERY_FIELDS = `\n id workspaceId memberId metric score sleepHours notes loggedAt createdAt updatedAt\n`;\n\nconst COACHING_FIELDS = `\n id workspaceId coachId memberId status specialty shareWorkouts shareNutrition\n shareMetrics startedAt endedAt notes createdAt updatedAt\n`;\n\nconst MACROS_FIELDS = `\n date calories proteinG carbsG fatG calorieTarget proteinTarget carbsTarget fatTarget\n`;\n\n// ============================================================================\n// Programs (Training)\n// ============================================================================\n\nexport interface ProgramFilters {\n status?: MybProgramStatus;\n memberId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybPrograms = (filters: ProgramFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.programs, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListPrograms: MybConnection<MybProgram> }>(\n `query MybListPrograms($status: MybProgramStatus, $memberId: ID, $pagination: PaginationInput) {\n mybListPrograms(status: $status, memberId: $memberId, pagination: $pagination) {\n items { ${PROGRAM_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n status: filters.status,\n memberId: filters.memberId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListPrograms;\n },\n });\n};\n\nexport const useMybProgram = (id: string | undefined) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: KEY.program(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await mybQuery<{ mybProgram: MybProgram | null }>(\n `query MybProgram($id: ID!) {\n mybProgram(id: $id) {\n ${PROGRAM_FIELDS}\n workouts {\n ${WORKOUT_FIELDS}\n exercises { ${EXERCISE_FIELDS} }\n }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybProgram;\n },\n });\n};\n\nexport const useMybProgramWorkouts = (programId: string | undefined) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: KEY.programWorkouts(programId ?? ''),\n enabled: Boolean(programId),\n queryFn: async () => {\n const result = await mybQuery<{ mybProgramWorkouts: MybWorkout[] }>(\n `query MybProgramWorkouts($programId: ID!) {\n mybProgramWorkouts(programId: $programId) {\n ${WORKOUT_FIELDS}\n exercises { ${EXERCISE_FIELDS} }\n }\n }`,\n { programId },\n apiGatewayUrl\n );\n return result.mybProgramWorkouts;\n },\n });\n};\n\nexport const useMybCreateProgram = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateProgramInput) => {\n const result = await mybQuery<{ mybCreateProgram: MybProgram }>(\n `mutation MybCreateProgram($input: MybCreateProgramInput!) {\n mybCreateProgram(input: $input) { ${PROGRAM_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybCreateProgram;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.programs }),\n });\n};\n\nexport const useMybUpdateProgram = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: MybUpdateProgramInput }) => {\n const result = await mybQuery<{ mybUpdateProgram: MybProgram }>(\n `mutation MybUpdateProgram($id: ID!, $input: MybUpdateProgramInput!) {\n mybUpdateProgram(id: $id, input: $input) { ${PROGRAM_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybUpdateProgram;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.programs });\n qc.invalidateQueries({ queryKey: KEY.program(data.id) });\n },\n });\n};\n\nexport const useMybTransitionProgram = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; status: MybProgramStatus }) => {\n const result = await mybQuery<{ mybTransitionProgram: MybProgram }>(\n `mutation MybTransitionProgram($id: ID!, $status: MybProgramStatus!) {\n mybTransitionProgram(id: $id, status: $status) { ${PROGRAM_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybTransitionProgram;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.programs });\n qc.invalidateQueries({ queryKey: KEY.program(data.id) });\n },\n });\n};\n\nexport const useMybArchiveProgram = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await mybQuery<{ mybArchiveProgram: boolean }>(\n `mutation MybArchiveProgram($id: ID!) { mybArchiveProgram(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.mybArchiveProgram;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.programs }),\n });\n};\n\nexport const useMybAddWorkout = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateWorkoutInput) => {\n const result = await mybQuery<{ mybAddWorkout: MybWorkout }>(\n `mutation MybAddWorkout($input: MybCreateWorkoutInput!) {\n mybAddWorkout(input: $input) { ${WORKOUT_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybAddWorkout;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.program(data.programId) });\n qc.invalidateQueries({ queryKey: KEY.programWorkouts(data.programId) });\n },\n });\n};\n\nexport const useMybAddExercise = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateExerciseInput) => {\n const result = await mybQuery<{ mybAddExercise: { id: string; workoutId: string } }>(\n `mutation MybAddExercise($input: MybCreateExerciseInput!) {\n mybAddExercise(input: $input) { id workoutId }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybAddExercise;\n },\n onSuccess: () => {\n // Exercises live under a program's workouts; invalidate program + workout\n // caches so the newly-added exercise appears on the program detail tree.\n qc.invalidateQueries({ queryKey: ['mybodyshield', 'program'] });\n qc.invalidateQueries({ queryKey: ['mybodyshield', 'program-workouts'] });\n },\n });\n};\n\n// ============================================================================\n// Sessions / Sets (Training — live logging)\n// ============================================================================\n\nexport interface SessionFilters {\n status?: MybSessionStatus;\n programId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybSessions = (filters: SessionFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.sessions, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListSessions: MybConnection<MybWorkoutSession> }>(\n `query MybListSessions($status: MybSessionStatus, $programId: ID, $pagination: PaginationInput) {\n mybListSessions(status: $status, programId: $programId, pagination: $pagination) {\n items { ${SESSION_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n status: filters.status,\n programId: filters.programId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListSessions;\n },\n });\n};\n\nexport const useMybSession = (id: string | undefined) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: KEY.session(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await mybQuery<{ mybSession: MybWorkoutSession | null }>(\n `query MybSession($id: ID!) {\n mybSession(id: $id) {\n ${SESSION_FIELDS}\n sets { ${SET_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybSession;\n },\n });\n};\n\nexport const useMybStartSession = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybStartSessionInput) => {\n const result = await mybQuery<{ mybStartSession: MybWorkoutSession }>(\n `mutation MybStartSession($input: MybStartSessionInput!) {\n mybStartSession(input: $input) { ${SESSION_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybStartSession;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.sessions }),\n });\n};\n\nexport const useMybLogSet = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybLogSetInput) => {\n const result = await mybQuery<{ mybLogSet: MybSessionSet }>(\n `mutation MybLogSet($input: MybLogSetInput!) {\n mybLogSet(input: $input) { ${SET_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybLogSet;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.session(data.sessionId) });\n qc.invalidateQueries({ queryKey: KEY.sessions });\n },\n });\n};\n\nexport const useMybCompleteSession = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: MybCompleteSessionInput }) => {\n const result = await mybQuery<{ mybCompleteSession: MybWorkoutSession }>(\n `mutation MybCompleteSession($id: ID!, $input: MybCompleteSessionInput!) {\n mybCompleteSession(id: $id, input: $input) { ${SESSION_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybCompleteSession;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.session(data.id) });\n qc.invalidateQueries({ queryKey: KEY.sessions });\n },\n });\n};\n\n// ============================================================================\n// Goals (Progress)\n// ============================================================================\n\nexport interface GoalFilters {\n status?: MybGoalStatus;\n memberId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybGoals = (filters: GoalFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.goals, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListGoals: MybConnection<MybGoal> }>(\n `query MybListGoals($status: MybGoalStatus, $memberId: ID, $pagination: PaginationInput) {\n mybListGoals(status: $status, memberId: $memberId, pagination: $pagination) {\n items { ${GOAL_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n status: filters.status,\n memberId: filters.memberId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListGoals;\n },\n });\n};\n\nexport const useMybCreateGoal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateGoalInput) => {\n const result = await mybQuery<{ mybCreateGoal: MybGoal }>(\n `mutation MybCreateGoal($input: MybCreateGoalInput!) {\n mybCreateGoal(input: $input) { ${GOAL_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybCreateGoal;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n });\n};\n\nexport const useMybUpdateGoal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: MybUpdateGoalInput }) => {\n const result = await mybQuery<{ mybUpdateGoal: MybGoal }>(\n `mutation MybUpdateGoal($id: ID!, $input: MybUpdateGoalInput!) {\n mybUpdateGoal(id: $id, input: $input) { ${GOAL_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybUpdateGoal;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n });\n};\n\nexport const useMybAchieveGoal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await mybQuery<{ mybAchieveGoal: MybGoal }>(\n `mutation MybAchieveGoal($id: ID!) {\n mybAchieveGoal(id: $id) { ${GOAL_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybAchieveGoal;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n });\n};\n\n// ============================================================================\n// Nutrition (plans, meals, macros)\n// ============================================================================\n\nexport const useMybActiveNutritionPlan = (memberId?: string) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.activePlan, memberId ?? 'me'],\n queryFn: async () => {\n const result = await mybQuery<{ mybActiveNutritionPlan: MybNutritionPlan | null }>(\n `query MybActiveNutritionPlan($memberId: ID) {\n mybActiveNutritionPlan(memberId: $memberId) { ${PLAN_FIELDS} }\n }`,\n { memberId },\n apiGatewayUrl\n );\n return result.mybActiveNutritionPlan;\n },\n });\n};\n\nexport const useMybNutritionPlan = (id: string | undefined) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: KEY.nutritionPlan(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await mybQuery<{ mybNutritionPlan: MybNutritionPlan | null }>(\n `query MybNutritionPlan($id: ID!) {\n mybNutritionPlan(id: $id) {\n ${PLAN_FIELDS}\n meals { ${MEAL_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybNutritionPlan;\n },\n });\n};\n\nexport interface MealFilters {\n mealType?: MybMealType;\n planId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybMeals = (filters: MealFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.meals, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListMeals: MybConnection<MybMealLog> }>(\n `query MybListMeals($mealType: MybMealType, $planId: ID, $pagination: PaginationInput) {\n mybListMeals(mealType: $mealType, planId: $planId, pagination: $pagination) {\n items { ${MEAL_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n mealType: filters.mealType,\n planId: filters.planId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListMeals;\n },\n });\n};\n\nexport const useMybDailyMacros = (date?: string, memberId?: string) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.dailyMacros, date ?? 'today', memberId ?? 'me'],\n queryFn: async () => {\n const result = await mybQuery<{ mybDailyMacros: MybDailyMacros }>(\n `query MybDailyMacros($date: DateTime, $memberId: ID) {\n mybDailyMacros(date: $date, memberId: $memberId) { ${MACROS_FIELDS} }\n }`,\n { date, memberId },\n apiGatewayUrl\n );\n return result.mybDailyMacros;\n },\n });\n};\n\nexport const useMybCreateNutritionPlan = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateNutritionPlanInput) => {\n const result = await mybQuery<{ mybCreateNutritionPlan: MybNutritionPlan }>(\n `mutation MybCreateNutritionPlan($input: MybCreateNutritionPlanInput!) {\n mybCreateNutritionPlan(input: $input) { ${PLAN_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybCreateNutritionPlan;\n },\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.activePlan });\n },\n });\n};\n\nexport const useMybUpdateNutritionPlan = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: MybUpdateNutritionPlanInput }) => {\n const result = await mybQuery<{ mybUpdateNutritionPlan: MybNutritionPlan }>(\n `mutation MybUpdateNutritionPlan($id: ID!, $input: MybUpdateNutritionPlanInput!) {\n mybUpdateNutritionPlan(id: $id, input: $input) { ${PLAN_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybUpdateNutritionPlan;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.activePlan });\n qc.invalidateQueries({ queryKey: KEY.nutritionPlan(data.id) });\n },\n });\n};\n\nexport const useMybActivateNutritionPlan = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await mybQuery<{ mybActivateNutritionPlan: MybNutritionPlan }>(\n `mutation MybActivateNutritionPlan($id: ID!) {\n mybActivateNutritionPlan(id: $id) { ${PLAN_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.mybActivateNutritionPlan;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.activePlan });\n qc.invalidateQueries({ queryKey: KEY.nutritionPlan(data.id) });\n },\n });\n};\n\nexport const useMybLogMeal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybLogMealInput) => {\n const result = await mybQuery<{ mybLogMeal: MybMealLog }>(\n `mutation MybLogMeal($input: MybLogMealInput!) {\n mybLogMeal(input: $input) { ${MEAL_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybLogMeal;\n },\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.meals });\n qc.invalidateQueries({ queryKey: KEY.dailyMacros });\n if (data.planId) qc.invalidateQueries({ queryKey: KEY.nutritionPlan(data.planId) });\n },\n });\n};\n\nexport const useMybDeleteMeal = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await mybQuery<{ mybDeleteMeal: boolean }>(\n `mutation MybDeleteMeal($id: ID!) { mybDeleteMeal(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.mybDeleteMeal;\n },\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.meals });\n qc.invalidateQueries({ queryKey: KEY.dailyMacros });\n },\n });\n};\n\n// ============================================================================\n// Body metrics (Progress)\n// ============================================================================\n\nexport interface BodyMetricFilters {\n type?: MybBodyMetricType;\n memberId?: string;\n pagination?: PaginationInput;\n}\n\nexport const useMybBodyMetrics = (filters: BodyMetricFilters = {}) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.bodyMetrics, filters],\n queryFn: async () => {\n const result = await mybQuery<{ mybListBodyMetrics: MybConnection<MybBodyMetric> }>(\n `query MybListBodyMetrics($type: MybBodyMetricType, $memberId: ID, $pagination: PaginationInput) {\n mybListBodyMetrics(type: $type, memberId: $memberId, pagination: $pagination) {\n items { ${METRIC_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n type: filters.type,\n memberId: filters.memberId,\n pagination: filters.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.mybListBodyMetrics;\n },\n });\n};\n\nexport const useMybRecordBodyMetric = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybRecordMetricInput) => {\n const result = await mybQuery<{ mybRecordBodyMetric: MybBodyMetric }>(\n `mutation MybRecordBodyMetric($input: MybRecordMetricInput!) {\n mybRecordBodyMetric(input: $input) { ${METRIC_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybRecordBodyMetric;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.bodyMetrics }),\n });\n};\n\n// ============================================================================\n// Recovery (Wellbeing)\n// ============================================================================\n\nexport const useMybRecoveryLogs = (metric?: MybRecoveryMetric, memberId?: string) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.recovery, metric ?? 'all', memberId ?? 'me'],\n queryFn: async () => {\n const result = await mybQuery<{ mybListRecoveryLogs: MybRecoveryLog[] }>(\n `query MybListRecoveryLogs($metric: MybRecoveryMetric, $memberId: ID) {\n mybListRecoveryLogs(metric: $metric, memberId: $memberId) { ${RECOVERY_FIELDS} }\n }`,\n { metric, memberId },\n apiGatewayUrl\n );\n return result.mybListRecoveryLogs;\n },\n });\n};\n\nexport const useMybLogRecovery = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybLogRecoveryInput) => {\n const result = await mybQuery<{ mybLogRecovery: MybRecoveryLog }>(\n `mutation MybLogRecovery($input: MybLogRecoveryInput!) {\n mybLogRecovery(input: $input) { ${RECOVERY_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybLogRecovery;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.recovery }),\n });\n};\n\n// ============================================================================\n// Coaching (Wellbeing)\n// ============================================================================\n\nexport const useMybCoaching = (status?: MybCoachingStatus, memberId?: string) => {\n const { apiGatewayUrl } = useMyBodyShield();\n return useQuery({\n queryKey: [...KEY.coaching, status ?? 'all', memberId ?? 'me'],\n queryFn: async () => {\n const result = await mybQuery<{ mybListCoaching: MybCoachingRelationship[] }>(\n `query MybListCoaching($status: MybCoachingStatus, $memberId: ID) {\n mybListCoaching(status: $status, memberId: $memberId) { ${COACHING_FIELDS} }\n }`,\n { status, memberId },\n apiGatewayUrl\n );\n return result.mybListCoaching;\n },\n });\n};\n\nexport const useMybCreateCoaching = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: MybCreateCoachingInput) => {\n const result = await mybQuery<{ mybCreateCoaching: MybCoachingRelationship }>(\n `mutation MybCreateCoaching($input: MybCreateCoachingInput!) {\n mybCreateCoaching(input: $input) { ${COACHING_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.mybCreateCoaching;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.coaching }),\n });\n};\n\nexport const useMybTransitionCoaching = () => {\n const { apiGatewayUrl } = useMyBodyShield();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; status: MybCoachingStatus }) => {\n const result = await mybQuery<{ mybTransitionCoaching: MybCoachingRelationship }>(\n `mutation MybTransitionCoaching($id: ID!, $status: MybCoachingStatus!) {\n mybTransitionCoaching(id: $id, status: $status) { ${COACHING_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.mybTransitionCoaching;\n },\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.coaching }),\n });\n};\n"],"mappings":"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"}